Moved out target-related V2 protocol commands into a seperate file for the AVRISP...
[pub/lufa.git] / Projects / Incomplete / AVRISP / Lib / V2Protocol.c
index dc6d3c6..2feefc8 100644 (file)
 #define  INCLUDE_FROM_V2PROTOCOL_C\r
 #include "V2Protocol.h"\r
 \r
-uint32_t CurrentAddress;\r
-\r
-\r
-/* Table of masks for SPI_Init() from a given PARAM_SCK_DURATION value */\r
-static const uint8_t SPIMaskFromSCKDuration[] =\r
-       {\r
-               #if (F_CPU == 8000000)\r
-               SPI_SPEED_FCPU_DIV_2,\r
-               #endif\r
-               SPI_SPEED_FCPU_DIV_2, SPI_SPEED_FCPU_DIV_4, SPI_SPEED_FCPU_DIV_8,\r
-               SPI_SPEED_FCPU_DIV_16, SPI_SPEED_FCPU_DIV_32, SPI_SPEED_FCPU_DIV_64\r
-               #if (F_CPU == 16000000)                                                                         \r
-               , SPI_SPEED_FCPU_DIV_128\r
-               #endif\r
-       };\r
-\r
-static uint8_t V2Protocol_GetSPIPrescalerMask(void)\r
-{\r
-       uint8_t SCKDuration = V2Params_GetParameterValue(PARAM_SCK_DURATION);\r
-\r
-       if (SCKDuration >= sizeof(SPIMaskFromSCKDuration))\r
-         SCKDuration = (sizeof(SPIMaskFromSCKDuration) - 1);\r
-         \r
-       return SPIMaskFromSCKDuration[SCKDuration];\r
-}\r
-\r
-static void V2Protocol_ChangeTargetResetLine(bool ResetTarget)\r
-{\r
-       if (ResetTarget)\r
-       {\r
-               RESET_LINE_DDR  |= RESET_LINE_MASK;\r
-               \r
-               if (!(V2Params_GetParameterValue(PARAM_RESET_POLARITY)))\r
-                 RESET_LINE_PORT |= RESET_LINE_MASK;\r
-       }\r
-       else\r
-       {\r
-               RESET_LINE_PORT &= ~RESET_LINE_MASK;    \r
-               RESET_LINE_DDR  &= ~RESET_LINE_MASK;\r
-       }\r
-}\r
-\r
-static void V2Protocol_DelayMS(uint8_t MS)\r
-{\r
-       while (MS--)\r
-         _delay_ms(1);\r
-}\r
-\r
-static uint8_t V2Protocol_WaitWhileTargetBusy(void)\r
-{\r
-       uint8_t TimeoutMS = TARGET_BUST_TIMEOUT_MS;\r
-       uint8_t ResponseByte;\r
-       \r
-       do\r
-       {\r
-               V2Protocol_DelayMS(1);\r
-       \r
-               SPI_SendByte(0xF0);\r
-               SPI_SendByte(0x00);\r
-\r
-               SPI_SendByte(0x00);\r
-               ResponseByte = SPI_ReceiveByte();\r
-       }\r
-       while ((ResponseByte & 0x01) && (TimeoutMS--));\r
-\r
-       if (!(TimeoutMS))\r
-         return STATUS_CMD_TOUT;\r
-       else\r
-         return STATUS_CMD_OK;\r
-}\r
-
 void V2Protocol_ProcessCommand(void)
 {
        uint8_t V2Command = Endpoint_Read_Byte();\r
@@ -223,7 +152,8 @@ static void V2Protocol_Command_LoadAddress(void)
        Endpoint_ClearOUT();\r
        Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);\r
        \r
-       // TODO: Check for extended address\r
+       if (CurrentAddress & (1UL << 31))\r
+         V2Protocol_LoadExtendedAddress();\r
 \r
        Endpoint_Write_Byte(CMD_LOAD_ADDRESS);\r
        Endpoint_Write_Byte(STATUS_CMD_OK);\r