Fixed PrinterHost demo Printer_GetDeviceID() routine not removing the Device ID strin...
authorDean Camera <dean@fourwalledcubicle.com>
Mon, 20 Jul 2009 10:19:13 +0000 (10:19 +0000)
committerDean Camera <dean@fourwalledcubicle.com>
Mon, 20 Jul 2009 10:19:13 +0000 (10:19 +0000)
Fixed error in new pipe stream function template system not setting the right device token for R/W operations (also thanks to John Andrews).

Demos/Host/Incomplete/PrinterHost/Lib/PrinterCommands.c
Demos/Host/Incomplete/PrinterHost/Lib/PrinterCommands.h
Demos/Host/Incomplete/PrinterHost/PrinterHost.c
LUFA/Drivers/USB/LowLevel/HostChapter9.c
LUFA/Drivers/USB/LowLevel/Pipe.c
LUFA/Drivers/USB/LowLevel/Template/Template_Pipe_RW.c

index 87651e9..4e2a0d9 100644 (file)
@@ -63,7 +63,7 @@ uint8_t Printer_SendData(Printer_Data_t* PrinterCommands)
  *\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
@@ -85,12 +85,15 @@ uint8_t Printer_GetDeviceID(char* DeviceIDString, uint8_t BufferSize)
        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
index 9ba6d4d..4656d19 100644 (file)
@@ -62,7 +62,7 @@
                \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
index d9f409e..79e6f9e 100644 (file)
@@ -180,7 +180,7 @@ void USB_Printer_Host(void)
                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
@@ -206,8 +206,8 @@ void USB_Printer_Host(void)
                \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
index a271c06..42e3262 100644 (file)
@@ -58,7 +58,7 @@ uint8_t USB_Host_SendControlRequest(void* BufferPtr)
 \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
@@ -76,7 +76,7 @@ uint8_t USB_Host_SendControlRequest(void* BufferPtr)
                        {\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
@@ -96,12 +96,12 @@ uint8_t USB_Host_SendControlRequest(void* BufferPtr)
                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
@@ -113,7 +113,7 @@ uint8_t USB_Host_SendControlRequest(void* BufferPtr)
 \r
                        while (DataLen)\r
                        {\r
 \r
                        while (DataLen)\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
                                while (DataLen && (Pipe_BytesInPipe() < USB_ControlPipeSize))\r
                                  goto End_Of_Control_Send;\r
 \r
                                while (DataLen && (Pipe_BytesInPipe() < USB_ControlPipeSize))\r
@@ -125,7 +125,7 @@ uint8_t USB_Host_SendControlRequest(void* BufferPtr)
                                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
@@ -134,7 +134,7 @@ uint8_t USB_Host_SendControlRequest(void* BufferPtr)
                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
index 18fbc19..3fb30a2 100644 (file)
@@ -184,60 +184,70 @@ uint8_t Pipe_Discard_Stream(uint16_t Length
 }\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
index f36f82d..4250d61 100644 (file)
@@ -3,7 +3,7 @@ uint8_t TEMPLATE_FUNC_NAME (void* Buffer, uint16_t Length _CALLBACK_PARAM)
        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
@@ -73,6 +73,7 @@ uint8_t TEMPLATE_FUNC_NAME (void* Buffer, uint16_t Length _CALLBACK_PARAM)
 }\r
 \r
 #undef TEMPLATE_FUNC_NAME\r
 }\r
 \r
 #undef TEMPLATE_FUNC_NAME\r
+#undef TEMPLATE_TOKEN\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