+++ /dev/null
-/*\r
- LUFA Library\r
- Copyright (C) Dean Camera, 2009.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
- Copyright 2009 Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
- Permission to use, copy, modify, and distribute this software\r
- and its documentation for any purpose and without fee is hereby\r
- granted, provided that the above copyright notice appear in all\r
- copies and that both that the copyright notice and this\r
- permission notice and warranty disclaimer appear in supporting\r
- documentation, and that the name of the author not be used in\r
- advertising or publicity pertaining to distribution of the\r
- software without specific, written prior permission.\r
-\r
- The author disclaim all warranties with regard to this\r
- software, including all implied warranties of merchantability\r
- and fitness. In no event shall the author be liable for any\r
- special, indirect or consequential damages or any damages\r
- whatsoever resulting from loss of use, data or profits, whether\r
- in an action of contract, negligence or other tortious action,\r
- arising out of or in connection with the use or performance of\r
- this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- * V2Protocol handler, to process V2 Protocol commands used in Atmel programmer devices.\r
- */\r
-\r
-#define INCLUDE_FROM_V2PROTOCOL_C\r
-#include "V2Protocol.h"\r
-\r
-ParameterItem_t ParameterTable[] EEMEM = \r
- {\r
- { .ParameterID = PARAM_BUILD_NUMBER_LOW,\r
- .ParameterValue = 0x00 },\r
- { .ParameterID = PARAM_BUILD_NUMBER_HIGH,\r
- .ParameterValue = 0x00 },\r
- { .ParameterID = PARAM_HW_VER,\r
- .ParameterValue = 0x01 },\r
- { .ParameterID = PARAM_SW_MAJOR,\r
- .ParameterValue = 0x01 },\r
- { .ParameterID = PARAM_SW_MINOR,\r
- .ParameterValue = 0x00 },\r
- { .ParameterID = PARAM_VTARGET,\r
- .ParameterValue = 0x00 },\r
- { .ParameterID = PARAM_SCK_DURATION,\r
- .ParameterValue = 0x00 },\r
- { .ParameterID = PARAM_RESET_POLARITY,\r
- .ParameterValue = 0x00 },\r
- { .ParameterID = PARAM_STATUS_TGT_CONN,\r
- .ParameterValue = 0x00 },\r
- { .ParameterID = PARAM_DISCHARGEDELAY,\r
- .ParameterValue = 0x00 },\r
- };\r
-
-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
- break;\r
- default:\r
- Endpoint_ClearOUT();\r
- Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);\r
- Endpoint_Write_Byte(STATUS_CMD_UNKNOWN);\r
- Endpoint_ClearIN();\r
- break;\r
- }\r
- \r
- /* Reset Endpoint direction to OUT ready for next command */\r
- Endpoint_SetEndpointDirection(ENDPOINT_DIR_OUT);
-}\r
-\r
-static ParameterItem_t* V2Protocol_GetParameterItem(uint8_t ParamID)\r
-{\r
- for (uint8_t TableIndex = 0; TableIndex < (sizeof(ParameterTable) / sizeof(ParameterTable[0])); TableIndex++)\r
- {\r
- if (ParamID == eeprom_read_byte(&ParameterTable[TableIndex].ParameterID))\r
- return &ParameterTable[TableIndex];\r
- }\r
- \r
- return NULL;\r
-}
-
-static void V2Protocol_ProcessCmdSignOn(void)\r
-{\r
- Endpoint_ClearOUT();\r
- Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);\r
- \r
- Endpoint_Write_Byte(CMD_SIGN_ON);\r
- Endpoint_Write_Byte(STATUS_CMD_OK);\r
- Endpoint_Write_Byte(PROGRAMMER_ID_LEN);\r
- Endpoint_Write_Stream_LE(PROGRAMMER_ID, PROGRAMMER_ID_LEN);\r
- Endpoint_ClearIN();\r
-}\r
-\r
-static void V2Protocol_ProcessCmdSetParam(void)\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
- 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(STATUS_CMD_OK);\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
-}\r