Corrections to the unfinished AVRISP Programmer project to allow AVRStudio to connect...
[pub/lufa.git] / Projects / Unfinished / AVRISP / Lib / V2Protocol.c
index 304eef4..2679ce7 100644 (file)
@@ -64,27 +64,34 @@ void V2Protocol_ProcessCommand(void)
 {
        uint8_t V2Command = Endpoint_Read_Byte();\r
                  \r
-       printf("COMMAND %d\r\n", V2Command);\r
-\r
        switch (V2Command)\r
        {\r
                case CMD_SIGN_ON:\r
                        V2Protocol_ProcessCmdSignOn();\r
                        break;\r
                case CMD_SET_PARAMETER:\r
-                       V2Protocol_ProcessCmdSetParam();\r
-                       break;\r
                case CMD_GET_PARAMETER:\r
-                       V2Protocol_ProcessCmdGetParam();\r
+                       V2Protocol_ProcessCmdGetSetParam(V2Command);\r
                        break;\r
                default:\r
+                       while (Endpoint_BytesInEndpoint() == AVRISP_DATA_EPSIZE)\r
+                       {\r
+                               Endpoint_ClearOUT();\r
+                               while (!(Endpoint_IsOUTReceived()));\r
+                       }\r
+               \r
                        Endpoint_ClearOUT();\r
                        Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);\r
+\r
                        Endpoint_Write_Byte(STATUS_CMD_UNKNOWN);\r
                        Endpoint_ClearIN();\r
                        break;\r
        }\r
        \r
+       printf("COMMAND 0x%02x\r\n", V2Command);\r
+\r
+       Endpoint_WaitUntilReady();\r
+       \r
        /* Reset Endpoint direction to OUT ready for next command */\r
        Endpoint_SetEndpointDirection(ENDPOINT_DIR_OUT);        
 }\r
@@ -104,7 +111,8 @@ static void V2Protocol_ProcessCmdSignOn(void)
 {\r
        Endpoint_ClearOUT();\r
        Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);\r
-       \r
+       Endpoint_WaitUntilReady();\r
+\r
        Endpoint_Write_Byte(CMD_SIGN_ON);\r
        Endpoint_Write_Byte(STATUS_CMD_OK);\r
        Endpoint_Write_Byte(PROGRAMMER_ID_LEN);\r
@@ -112,50 +120,31 @@ static void V2Protocol_ProcessCmdSignOn(void)
        Endpoint_ClearIN();\r
 }\r
 \r
-static void V2Protocol_ProcessCmdSetParam(void)\r
+static void V2Protocol_ProcessCmdGetSetParam(uint8_t V2Command)\r
 {\r
        uint8_t ParamID    = Endpoint_Read_Byte();\r
        uint8_t ParamValue = Endpoint_Read_Byte();\r
 \r
-       ParameterItem_t* ParameterItem = V2Protocol_GetParameterItem(ParamID);\r
-       \r
        Endpoint_ClearOUT();\r
        Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);\r
-\r
-       if (ParameterItem != NULL)\r
-       {\r
-               eeprom_write_byte(&ParameterItem->ParameterValue, ParamValue);\r
-\r
-               Endpoint_Write_Byte(CMD_SET_PARAMETER);\r
-               Endpoint_Write_Byte(STATUS_CMD_OK);     \r
-       }\r
-       else\r
-       {\r
-               Endpoint_Write_Byte(STATUS_CMD_FAILED);\r
-       }\r
-\r
-       Endpoint_ClearIN();\r
-}\r
-\r
-static void V2Protocol_ProcessCmdGetParam(void)\r
-{\r
-       uint8_t ParamID    = Endpoint_Read_Byte();\r
-\r
+       Endpoint_WaitUntilReady();\r
+       \r
        ParameterItem_t* ParameterItem = V2Protocol_GetParameterItem(ParamID);\r
        \r
-       Endpoint_ClearOUT();\r
-       Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);\r
-\r
        if (ParameterItem != NULL)\r
        {\r
-               Endpoint_Write_Byte(CMD_GET_PARAMETER);\r
+               Endpoint_Write_Byte(V2Command);\r
                Endpoint_Write_Byte(STATUS_CMD_OK);\r
-               Endpoint_Write_Byte(eeprom_read_byte(&ParameterItem->ParameterValue));  \r
+\r
+               if (V2Command == CMD_SET_PARAMETER)\r
+                 eeprom_write_byte(&ParameterItem->ParameterValue, ParamValue);\r
+               else\r
+                 Endpoint_Write_Byte(eeprom_read_byte(&ParameterItem->ParameterValue));                        \r
        }\r
        else\r
        {\r
                Endpoint_Write_Byte(STATUS_CMD_FAILED);\r
        }\r
 \r
-       Endpoint_ClearIN();     \r
+       Endpoint_ClearIN();\r
 }\r