diff options
author | Dean Camera <dean@fourwalledcubicle.com> | 2009-07-19 12:36:19 +0000 |
---|---|---|
committer | Dean Camera <dean@fourwalledcubicle.com> | 2009-07-19 12:36:19 +0000 |
commit | 786479faf0605d610c93041191ee5bd6d020ccf9 (patch) | |
tree | 1d1728538d447c1eb79e66bce95a1a5602441e2c /Demos/Host/Incomplete/PrinterHost/Lib/PrinterCommands.c | |
parent | d3fb6273aa59c60f2d3f41de321c35ff08ef8feb (diff) | |
download | lufa-786479faf0605d610c93041191ee5bd6d020ccf9.tar.gz lufa-786479faf0605d610c93041191ee5bd6d020ccf9.tar.bz2 lufa-786479faf0605d610c93041191ee5bd6d020ccf9.zip |
Add partial project documentation to the incomplete PrinterHost demo.
Change over Printer_GetDeviceID() to require a pointer to the destination buffer plus the buffer size, rather than using a pointer to a special structure.
Make new Printer_SendData() function to hide the implementation of sending data to an attached printer, cleaning up the main demo source file body.
Diffstat (limited to 'Demos/Host/Incomplete/PrinterHost/Lib/PrinterCommands.c')
-rw-r--r-- | Demos/Host/Incomplete/PrinterHost/Lib/PrinterCommands.c | 55 |
1 files changed, 46 insertions, 9 deletions
diff --git a/Demos/Host/Incomplete/PrinterHost/Lib/PrinterCommands.c b/Demos/Host/Incomplete/PrinterHost/Lib/PrinterCommands.c index 9324a141c..075b2d601 100644 --- a/Demos/Host/Incomplete/PrinterHost/Lib/PrinterCommands.c +++ b/Demos/Host/Incomplete/PrinterHost/Lib/PrinterCommands.c @@ -30,7 +30,33 @@ #include "PrinterCommands.h"
-uint8_t Printer_GetDeviceID(Device_ID_String_t* DeviceIDString)
+uint8_t Printer_SendData(char* PrinterCommands)
+{
+ uint8_t ErrorCode;
+
+ Pipe_SelectPipe(PRINTER_DATA_OUT_PIPE);
+ Pipe_Unfreeze();
+
+ if ((ErrorCode = Pipe_Write_Stream_LE(PrinterCommands, strlen(PrinterCommands))) != PIPE_RWSTREAM_NoError)
+ return ErrorCode;
+
+ Pipe_ClearOUT();
+ while (!(Pipe_IsOUTReady()));
+
+ Pipe_Freeze();
+
+ return PIPE_RWSTREAM_NoError;
+}
+
+/** Issues a Printer class Get Device ID command to the attached device, to retrieve the device ID string (which indicates
+ * the accepted printer languages, the printer's model and other pertinent information).
+ *
+ * \param[out] DeviceIDString Pointer to the destination where the returned string should be stored
+ * \param[in] BufferSize Size in bytes of the allocated buffer for the returned Device ID string
+ *
+ * \return A value from the USB_Host_SendControlErrorCodes_t enum
+ */
+uint8_t Printer_GetDeviceID(char* DeviceIDString, uint8_t BufferSize)
{
uint8_t ErrorCode = HOST_SENDCONTROL_Successful;
uint16_t DeviceIDStringLength;
@@ -41,28 +67,34 @@ uint8_t Printer_GetDeviceID(Device_ID_String_t* DeviceIDString) bRequest: GET_DEVICE_ID,
wValue: 0,
wIndex: 0,
- wLength: sizeof(DeviceIDString->Length),
+ wLength: sizeof(DeviceIDStringLength),
};
- if ((ErrorCode = USB_Host_SendControlRequest(DeviceIDString)) != HOST_SENDCONTROL_Successful)
+ if ((ErrorCode = USB_Host_SendControlRequest(&DeviceIDStringLength)) != HOST_SENDCONTROL_Successful)
return ErrorCode;
- DeviceIDStringLength = SwapEndian_16(DeviceIDString->Length);
+ DeviceIDStringLength = SwapEndian_16(DeviceIDStringLength);
- /* Protect against overflow for the null terminator if the string length is equal to or larger than the buffer */
- if (DeviceIDStringLength >= sizeof(DeviceIDString->String))
- DeviceIDStringLength = sizeof(DeviceIDString->String) - 1;
+ if (DeviceIDStringLength > BufferSize)
+ DeviceIDStringLength = BufferSize;
- USB_ControlRequest.wLength = DeviceIDStringLength;
+ USB_ControlRequest.wLength = (DeviceIDStringLength - 1);
if ((ErrorCode = USB_Host_SendControlRequest(DeviceIDString)) != HOST_SENDCONTROL_Successful)
return ErrorCode;
- DeviceIDString->String[DeviceIDStringLength] = 0x00;
+ DeviceIDString[DeviceIDStringLength] = 0x00;
return HOST_SENDCONTROL_Successful;
}
+/** Issues a Printer class Get Port Status command to the attached device, to retrieve the current status flags of the
+ * printer.
+ *
+ * \param[out] PortStatus Pointer to the destination where the printer's status flag values should be stored
+ *
+ * \return A value from the USB_Host_SendControlErrorCodes_t enum
+ */
uint8_t Printer_GetPortStatus(uint8_t* PortStatus)
{
USB_ControlRequest = (USB_Request_Header_t)
@@ -77,6 +109,11 @@ uint8_t Printer_GetPortStatus(uint8_t* PortStatus) return USB_Host_SendControlRequest(PortStatus);
}
+/** Issues a Printer class Soft Reset command to the attached device, to reset the printer ready for new input without
+ * physically cycling the printer's power.
+ *
+ * \return A value from the USB_Host_SendControlErrorCodes_t enum
+ */
uint8_t Printer_SoftReset(void)
{
USB_ControlRequest = (USB_Request_Header_t)
|