Added const where possible to the source functions in the Projects directory.
[pub/USBasp.git] / Projects / AVRISP / Lib / V2Protocol.c
index c0028f7..4fcb5aa 100644 (file)
@@ -43,6 +43,13 @@ uint32_t CurrentAddress;
 bool MustSetAddress;\r
 \r
 \r
+/** ISR for the management of the command execution timeout counter */\r
+ISR(TIMER0_COMPA_vect, ISR_BLOCK)\r
+{\r
+       if (TimeoutMSRemaining)\r
+         TimeoutMSRemaining--;\r
+}\r
+\r
 /** Master V2 Protocol packet handler, for received V2 Protocol packets from a connected host.\r
  *  This routine decodes the issued command and passes off the handling of the command to the\r
  *  appropriate function.\r
@@ -50,7 +57,10 @@ bool MustSetAddress;
 void V2Protocol_ProcessCommand(void)\r
 {\r
        uint8_t V2Command = Endpoint_Read_Byte();\r
-                 \r
+       \r
+       TimeoutMSRemaining = COMMAND_TIMEOUT_MS;\r
+       TIMSK0 |= (1 << OCIE0A);\r
+\r
        switch (V2Command)\r
        {\r
                case CMD_SIGN_ON:\r
@@ -66,6 +76,7 @@ void V2Protocol_ProcessCommand(void)
                case CMD_RESET_PROTECTION:\r
                        V2Protocol_ResetProtection();\r
                        break;\r
+#if defined(ENABLE_ISP_PROTOCOL)\r
                case CMD_ENTER_PROGMODE_ISP:\r
                        ISPProtocol_EnterISPMode();\r
                        break;\r
@@ -83,10 +94,6 @@ void V2Protocol_ProcessCommand(void)
                case CMD_CHIP_ERASE_ISP:\r
                        ISPProtocol_ChipErase();\r
                        break;\r
-#if defined(ENABLE_XPROG_PROTOCOL)\r
-               case CMD_XPROG_SETMODE:\r
-                       V2Protocol_XPROG_SetMode();\r
-#endif\r
                case CMD_READ_FUSE_ISP:\r
                case CMD_READ_LOCK_ISP:\r
                case CMD_READ_SIGNATURE_ISP:\r
@@ -100,11 +107,22 @@ void V2Protocol_ProcessCommand(void)
                case CMD_SPI_MULTI:\r
                        ISPProtocol_SPIMulti();\r
                        break;\r
+#endif\r
+#if defined(ENABLE_XPROG_PROTOCOL)\r
+               case CMD_XPROG_SETMODE:\r
+                       XPROGProtocol_SetMode();\r
+                       break;\r
+               case CMD_XPROG:\r
+                       XPROGProtocol_Command();\r
+                       break;\r
+#endif\r
                default:\r
                        V2Protocol_UnknownCommand(V2Command);\r
                        break;\r
        }\r
-       \r
+               \r
+       TIMSK0 &= ~(1 << OCIE0A);\r
+\r
        Endpoint_WaitUntilReady();\r
        Endpoint_SetEndpointDirection(ENDPOINT_DIR_OUT);\r
 }\r
@@ -114,7 +132,7 @@ void V2Protocol_ProcessCommand(void)
  *\r
  *  \param[in] V2Command  Issued V2 Protocol command byte from the host\r
  */\r
-static void V2Protocol_UnknownCommand(uint8_t V2Command)\r
+static void V2Protocol_UnknownCommand(const uint8_t V2Command)\r
 {\r
        /* Discard all incoming data */\r
        while (Endpoint_BytesInEndpoint() == AVRISP_DATA_EPSIZE)\r
@@ -163,7 +181,7 @@ static void V2Protocol_ResetProtection(void)
  *\r
  *  \param[in] V2Command  Issued V2 Protocol command byte from the host\r
  */\r
-static void V2Protocol_GetSetParam(uint8_t V2Command)\r
+static void V2Protocol_GetSetParam(const uint8_t V2Command)\r
 {\r
        uint8_t ParamID = Endpoint_Read_Byte();\r
        uint8_t ParamValue;\r