Fixed error in new pipe stream function template system not setting the right device token for R/W operations (also thanks to John Andrews).
*\r
* \return A value from the USB_Host_SendControlErrorCodes_t enum\r
*/\r
*\r
* \return A value from the USB_Host_SendControlErrorCodes_t enum\r
*/\r
-uint8_t Printer_GetDeviceID(char* DeviceIDString, uint8_t BufferSize)\r
+uint8_t Printer_GetDeviceID(char* DeviceIDString, uint16_t BufferSize)\r
{\r
uint8_t ErrorCode = HOST_SENDCONTROL_Successful;\r
uint16_t DeviceIDStringLength;\r
{\r
uint8_t ErrorCode = HOST_SENDCONTROL_Successful;\r
uint16_t DeviceIDStringLength;\r
if (DeviceIDStringLength > BufferSize)\r
DeviceIDStringLength = BufferSize;\r
\r
if (DeviceIDStringLength > BufferSize)\r
DeviceIDStringLength = BufferSize;\r
\r
- USB_ControlRequest.wLength = (DeviceIDStringLength - 1);\r
+ USB_ControlRequest.wLength = DeviceIDStringLength;\r
\r
if ((ErrorCode = USB_Host_SendControlRequest(DeviceIDString)) != HOST_SENDCONTROL_Successful)\r
return ErrorCode;\r
\r
if ((ErrorCode = USB_Host_SendControlRequest(DeviceIDString)) != HOST_SENDCONTROL_Successful)\r
return ErrorCode;\r
- \r
- DeviceIDString[DeviceIDStringLength] = 0x00;\r
+ \r
+ /* Move string back two characters to remove the string length value from the start of the array */\r
+ memmove(&DeviceIDString[0], &DeviceIDString[2], DeviceIDStringLength - 2);\r
+\r
+ DeviceIDString[DeviceIDStringLength - 2] = 0x00;\r
\r
return HOST_SENDCONTROL_Successful;\r
}\r
\r
return HOST_SENDCONTROL_Successful;\r
}\r
\r
/* Function Prototypes: */\r
uint8_t Printer_SendData(Printer_Data_t* PrinterCommands);\r
\r
/* Function Prototypes: */\r
uint8_t Printer_SendData(Printer_Data_t* PrinterCommands);\r
- uint8_t Printer_GetDeviceID(char* DeviceIDString, uint8_t BufferSize);\r
+ uint8_t Printer_GetDeviceID(char* DeviceIDString, uint16_t BufferSize);\r
uint8_t Printer_GetPortStatus(uint8_t* PortStatus);\r
uint8_t Printer_SoftReset(void);\r
\r
uint8_t Printer_GetPortStatus(uint8_t* PortStatus);\r
uint8_t Printer_SoftReset(void);\r
\r
case HOST_STATE_Configured:\r
puts_P(PSTR("Retrieving Device ID...\r\n"));\r
\r
case HOST_STATE_Configured:\r
puts_P(PSTR("Retrieving Device ID...\r\n"));\r
\r
- char DeviceIDString[128];\r
+ char DeviceIDString[256];\r
if ((ErrorCode = Printer_GetDeviceID(DeviceIDString, sizeof(DeviceIDString))) != HOST_SENDCONTROL_Successful)\r
{\r
puts_P(PSTR(ESC_FG_RED "Control Error (Get DeviceID).\r\n"));\r
if ((ErrorCode = Printer_GetDeviceID(DeviceIDString, sizeof(DeviceIDString))) != HOST_SENDCONTROL_Successful)\r
{\r
puts_P(PSTR(ESC_FG_RED "Control Error (Get DeviceID).\r\n"));\r
\r
Printer_Data_t TestPageData =\r
{\r
\r
Printer_Data_t TestPageData =\r
{\r
- "\033%-12345X\033E LUFA PCL Test Page \033E\033%-12345X",\r
-// "\033@\033i\001\033X\001\060\000\r\nLUFA ESCP/2 Test Page\r\n",\r
+// "\033%-12345X\033E LUFA PCL Test Page \033E\033%-12345X",\r
+ "\033@\033i\001\033X\001\060\000\r\nLUFA ESCP/2 Test Page\r\n",\r
(sizeof(TestPageData.Data) - 1)\r
};\r
\r
(sizeof(TestPageData.Data) - 1)\r
};\r
\r
\r
Pipe_ClearSETUP();\r
\r
\r
Pipe_ClearSETUP();\r
\r
- if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_SetupSent)))\r
+ if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_SetupSent)) != HOST_SENDCONTROL_Successful)\r
goto End_Of_Control_Send;\r
\r
Pipe_Freeze();\r
goto End_Of_Control_Send;\r
\r
Pipe_Freeze();\r
{\r
Pipe_Unfreeze();\r
\r
{\r
Pipe_Unfreeze();\r
\r
- if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_InReceived)))\r
+ if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_InReceived)) != HOST_SENDCONTROL_Successful)\r
goto End_Of_Control_Send;\r
\r
if (!(Pipe_BytesInPipe()))\r
goto End_Of_Control_Send;\r
\r
if (!(Pipe_BytesInPipe()))\r
Pipe_SetToken(PIPE_TOKEN_OUT);\r
Pipe_Unfreeze();\r
\r
Pipe_SetToken(PIPE_TOKEN_OUT);\r
Pipe_Unfreeze();\r
\r
- if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_OutReady)))\r
+ if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_OutReady)) != HOST_SENDCONTROL_Successful)\r
goto End_Of_Control_Send;\r
\r
Pipe_ClearOUT();\r
\r
goto End_Of_Control_Send;\r
\r
Pipe_ClearOUT();\r
\r
- if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_OutReady)))\r
+ if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_OutReady)) != HOST_SENDCONTROL_Successful)\r
goto End_Of_Control_Send;\r
}\r
else\r
goto End_Of_Control_Send;\r
}\r
else\r
- if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_OutReady)))\r
+ if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_OutReady)) != HOST_SENDCONTROL_Successful)\r
goto End_Of_Control_Send;\r
\r
while (DataLen && (Pipe_BytesInPipe() < USB_ControlPipeSize))\r
goto End_Of_Control_Send;\r
\r
while (DataLen && (Pipe_BytesInPipe() < USB_ControlPipeSize))\r
Pipe_ClearOUT();\r
}\r
\r
Pipe_ClearOUT();\r
}\r
\r
- if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_OutReady)))\r
+ if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_OutReady)) != HOST_SENDCONTROL_Successful)\r
goto End_Of_Control_Send;\r
\r
Pipe_Freeze();\r
goto End_Of_Control_Send;\r
\r
Pipe_Freeze();\r
Pipe_SetToken(PIPE_TOKEN_IN);\r
Pipe_Unfreeze();\r
\r
Pipe_SetToken(PIPE_TOKEN_IN);\r
Pipe_Unfreeze();\r
\r
- if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_InReceived)))\r
+ if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_InReceived)) != HOST_SENDCONTROL_Successful)\r
goto End_Of_Control_Send;\r
\r
Pipe_ClearIN();\r
goto End_Of_Control_Send;\r
\r
Pipe_ClearIN();\r
}\r
\r
#define TEMPLATE_FUNC_NAME Pipe_Write_Stream_LE\r
}\r
\r
#define TEMPLATE_FUNC_NAME Pipe_Write_Stream_LE\r
+#define TEMPLATE_TOKEN PIPE_TOKEN_OUT\r
#define TEMPLATE_CLEAR_PIPE() Pipe_ClearOUT()\r
#define TEMPLATE_BUFFER_OFFSET(Length) 0\r
#define TEMPLATE_TRANSFER_BYTE(BufferPtr) Pipe_Write_Byte(*(BufferPtr++))\r
#include "Template/Template_Pipe_RW.c"\r
\r
#define TEMPLATE_FUNC_NAME Pipe_Write_PStream_LE\r
#define TEMPLATE_CLEAR_PIPE() Pipe_ClearOUT()\r
#define TEMPLATE_BUFFER_OFFSET(Length) 0\r
#define TEMPLATE_TRANSFER_BYTE(BufferPtr) Pipe_Write_Byte(*(BufferPtr++))\r
#include "Template/Template_Pipe_RW.c"\r
\r
#define TEMPLATE_FUNC_NAME Pipe_Write_PStream_LE\r
+#define TEMPLATE_TOKEN PIPE_TOKEN_OUT\r
#define TEMPLATE_CLEAR_PIPE() Pipe_ClearOUT()\r
#define TEMPLATE_BUFFER_OFFSET(Length) 0\r
#define TEMPLATE_TRANSFER_BYTE(BufferPtr) Pipe_Write_Byte(pgm_read_byte(BufferPtr++))\r
#include "Template/Template_Pipe_RW.c"\r
\r
#define TEMPLATE_FUNC_NAME Pipe_Write_EStream_LE\r
#define TEMPLATE_CLEAR_PIPE() Pipe_ClearOUT()\r
#define TEMPLATE_BUFFER_OFFSET(Length) 0\r
#define TEMPLATE_TRANSFER_BYTE(BufferPtr) Pipe_Write_Byte(pgm_read_byte(BufferPtr++))\r
#include "Template/Template_Pipe_RW.c"\r
\r
#define TEMPLATE_FUNC_NAME Pipe_Write_EStream_LE\r
+#define TEMPLATE_TOKEN PIPE_TOKEN_OUT\r
#define TEMPLATE_CLEAR_PIPE() Pipe_ClearOUT()\r
#define TEMPLATE_BUFFER_OFFSET(Length) 0\r
#define TEMPLATE_TRANSFER_BYTE(BufferPtr) Pipe_Write_Byte(eeprom_read_byte(BufferPtr++))\r
#include "Template/Template_Pipe_RW.c"\r
\r
#define TEMPLATE_FUNC_NAME Pipe_Write_Stream_BE\r
#define TEMPLATE_CLEAR_PIPE() Pipe_ClearOUT()\r
#define TEMPLATE_BUFFER_OFFSET(Length) 0\r
#define TEMPLATE_TRANSFER_BYTE(BufferPtr) Pipe_Write_Byte(eeprom_read_byte(BufferPtr++))\r
#include "Template/Template_Pipe_RW.c"\r
\r
#define TEMPLATE_FUNC_NAME Pipe_Write_Stream_BE\r
+#define TEMPLATE_TOKEN PIPE_TOKEN_OUT\r
#define TEMPLATE_CLEAR_PIPE() Pipe_ClearOUT()\r
#define TEMPLATE_BUFFER_OFFSET(Length) Length - 1\r
#define TEMPLATE_TRANSFER_BYTE(BufferPtr) Pipe_Write_Byte(*(BufferPtr--))\r
#include "Template/Template_Pipe_RW.c"\r
\r
#define TEMPLATE_FUNC_NAME Pipe_Write_PStream_BE\r
#define TEMPLATE_CLEAR_PIPE() Pipe_ClearOUT()\r
#define TEMPLATE_BUFFER_OFFSET(Length) Length - 1\r
#define TEMPLATE_TRANSFER_BYTE(BufferPtr) Pipe_Write_Byte(*(BufferPtr--))\r
#include "Template/Template_Pipe_RW.c"\r
\r
#define TEMPLATE_FUNC_NAME Pipe_Write_PStream_BE\r
+#define TEMPLATE_TOKEN PIPE_TOKEN_OUT\r
#define TEMPLATE_CLEAR_PIPE() Pipe_ClearOUT()\r
#define TEMPLATE_BUFFER_OFFSET(Length) Length - 1\r
#define TEMPLATE_TRANSFER_BYTE(BufferPtr) Pipe_Write_Byte(pgm_read_byte(BufferPtr--))\r
#include "Template/Template_Pipe_RW.c"\r
\r
#define TEMPLATE_FUNC_NAME Pipe_Write_EStream_BE\r
#define TEMPLATE_CLEAR_PIPE() Pipe_ClearOUT()\r
#define TEMPLATE_BUFFER_OFFSET(Length) Length - 1\r
#define TEMPLATE_TRANSFER_BYTE(BufferPtr) Pipe_Write_Byte(pgm_read_byte(BufferPtr--))\r
#include "Template/Template_Pipe_RW.c"\r
\r
#define TEMPLATE_FUNC_NAME Pipe_Write_EStream_BE\r
+#define TEMPLATE_TOKEN PIPE_TOKEN_OUT\r
#define TEMPLATE_CLEAR_PIPE() Pipe_ClearOUT()\r
#define TEMPLATE_BUFFER_OFFSET(Length) Length - 1\r
#define TEMPLATE_TRANSFER_BYTE(BufferPtr) Pipe_Write_Byte(eeprom_read_byte(BufferPtr--))\r
#include "Template/Template_Pipe_RW.c"\r
\r
#define TEMPLATE_FUNC_NAME Pipe_Read_Stream_LE\r
#define TEMPLATE_CLEAR_PIPE() Pipe_ClearOUT()\r
#define TEMPLATE_BUFFER_OFFSET(Length) Length - 1\r
#define TEMPLATE_TRANSFER_BYTE(BufferPtr) Pipe_Write_Byte(eeprom_read_byte(BufferPtr--))\r
#include "Template/Template_Pipe_RW.c"\r
\r
#define TEMPLATE_FUNC_NAME Pipe_Read_Stream_LE\r
+#define TEMPLATE_TOKEN PIPE_TOKEN_IN\r
#define TEMPLATE_CLEAR_PIPE() Pipe_ClearIN()\r
#define TEMPLATE_BUFFER_OFFSET(Length) 0\r
#define TEMPLATE_TRANSFER_BYTE(BufferPtr) *(BufferPtr++) = Pipe_Read_Byte()\r
#include "Template/Template_Pipe_RW.c"\r
\r
#define TEMPLATE_FUNC_NAME Pipe_Read_EStream_LE\r
#define TEMPLATE_CLEAR_PIPE() Pipe_ClearIN()\r
#define TEMPLATE_BUFFER_OFFSET(Length) 0\r
#define TEMPLATE_TRANSFER_BYTE(BufferPtr) *(BufferPtr++) = Pipe_Read_Byte()\r
#include "Template/Template_Pipe_RW.c"\r
\r
#define TEMPLATE_FUNC_NAME Pipe_Read_EStream_LE\r
+#define TEMPLATE_TOKEN PIPE_TOKEN_IN\r
#define TEMPLATE_CLEAR_PIPE() Pipe_ClearIN()\r
#define TEMPLATE_BUFFER_OFFSET(Length) 0\r
#define TEMPLATE_TRANSFER_BYTE(BufferPtr) eeprom_write_byte(BufferPtr++, Pipe_Read_Byte())\r
#include "Template/Template_Pipe_RW.c"\r
\r
#define TEMPLATE_FUNC_NAME Pipe_Read_Stream_BE\r
#define TEMPLATE_CLEAR_PIPE() Pipe_ClearIN()\r
#define TEMPLATE_BUFFER_OFFSET(Length) 0\r
#define TEMPLATE_TRANSFER_BYTE(BufferPtr) eeprom_write_byte(BufferPtr++, Pipe_Read_Byte())\r
#include "Template/Template_Pipe_RW.c"\r
\r
#define TEMPLATE_FUNC_NAME Pipe_Read_Stream_BE\r
+#define TEMPLATE_TOKEN PIPE_TOKEN_IN\r
#define TEMPLATE_CLEAR_PIPE() Pipe_ClearIN()\r
#define TEMPLATE_BUFFER_OFFSET(Length) Length - 1\r
#define TEMPLATE_TRANSFER_BYTE(BufferPtr) *(BufferPtr--) = Pipe_Read_Byte()\r
#include "Template/Template_Pipe_RW.c"\r
\r
#define TEMPLATE_FUNC_NAME Pipe_Read_EStream_BE\r
#define TEMPLATE_CLEAR_PIPE() Pipe_ClearIN()\r
#define TEMPLATE_BUFFER_OFFSET(Length) Length - 1\r
#define TEMPLATE_TRANSFER_BYTE(BufferPtr) *(BufferPtr--) = Pipe_Read_Byte()\r
#include "Template/Template_Pipe_RW.c"\r
\r
#define TEMPLATE_FUNC_NAME Pipe_Read_EStream_BE\r
+#define TEMPLATE_TOKEN PIPE_TOKEN_IN\r
#define TEMPLATE_CLEAR_PIPE() Pipe_ClearIN()\r
#define TEMPLATE_BUFFER_OFFSET(Length) Length - 1\r
#define TEMPLATE_TRANSFER_BYTE(BufferPtr) eeprom_write_byte(BufferPtr--, Pipe_Read_Byte())\r
#define TEMPLATE_CLEAR_PIPE() Pipe_ClearIN()\r
#define TEMPLATE_BUFFER_OFFSET(Length) Length - 1\r
#define TEMPLATE_TRANSFER_BYTE(BufferPtr) eeprom_write_byte(BufferPtr--, Pipe_Read_Byte())\r
uint8_t* DataStream = (uint8_t*)(Buffer + TEMPLATE_BUFFER_OFFSET(Length));\r
uint8_t ErrorCode;\r
\r
uint8_t* DataStream = (uint8_t*)(Buffer + TEMPLATE_BUFFER_OFFSET(Length));\r
uint8_t ErrorCode;\r
\r
- Pipe_SetToken(PIPE_TOKEN_IN);\r
+ Pipe_SetToken(TEMPLATE_TOKEN);\r
\r
if ((ErrorCode = Pipe_WaitUntilReady()))\r
return ErrorCode;\r
\r
if ((ErrorCode = Pipe_WaitUntilReady()))\r
return ErrorCode;\r
}\r
\r
#undef TEMPLATE_FUNC_NAME\r
}\r
\r
#undef TEMPLATE_FUNC_NAME\r
#undef TEMPLATE_TRANSFER_BYTE\r
#undef TEMPLATE_CLEAR_PIPE\r
#undef TEMPLATE_TRANSFER_BYTE\r
#undef TEMPLATE_CLEAR_PIPE\r
-#undef TEMPLATE_BUFFER_OFFSET
\ No newline at end of file
+#undef TEMPLATE_BUFFER_OFFSET\r