#define INCLUDE_FROM_V2PROTOCOL_C\r
#include "V2Protocol.h"\r
\r
-/** Master V2 Protocol packet handler, for receieved V2 Protocol packets from a connected host.\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
*/\r
-void V2Protocol_ProcessCommand(void)
-{
+void V2Protocol_ProcessCommand(void)\r
+{\r
uint8_t V2Command = Endpoint_Read_Byte();\r
\r
switch (V2Command)\r
}\r
\r
Endpoint_WaitUntilReady();\r
- Endpoint_SetEndpointDirection(ENDPOINT_DIR_OUT);
-}
+ Endpoint_SetEndpointDirection(ENDPOINT_DIR_OUT);\r
+}\r
\r
/** Handler for unknown V2 protocol commands. This discards all sent data and returns a\r
* STATUS_CMD_UNKNOWN status back to the host.\r
*\r
- * \param V2Command Issued V2 Protocol command byte from the host\r
+ * \param[in] V2Command Issued V2 Protocol command byte from the host\r
*/\r
static void V2Protocol_Command_Unknown(uint8_t V2Command)\r
{\r
- /* Discard all incomming data */\r
+ /* Discard all incoming data */\r
while (Endpoint_BytesInEndpoint() == AVRISP_DATA_EPSIZE)\r
{\r
Endpoint_ClearOUT();\r
Endpoint_ClearIN();\r
}\r
\r
-/** Handler for the CMD_SIGN_ON command, returning the programmer ID string to the host. */
+/** Handler for the CMD_SIGN_ON command, returning the programmer ID string to the host. */\r
static void V2Protocol_Command_SignOn(void)\r
{\r
Endpoint_ClearOUT();\r
/** Handler for the CMD_SET_PARAMETER and CMD_GET_PARAMETER commands from the host, setting or\r
* getting a device parameter's value from the parameter table.\r
*\r
- * \param V2Command Issued V2 Protocol command byte from the host\r
+ * \param[in] V2Command Issued V2 Protocol command byte from the host\r
*/\r
static void V2Protocol_Command_GetSetParam(uint8_t V2Command)\r
{\r
\r
Endpoint_Write_Byte(V2Command);\r
\r
- uint8_t ParamPrivs = V2Params_GetParameterPrivellages(ParamID);\r
+ uint8_t ParamPrivs = V2Params_GetParameterPrivileges(ParamID);\r
\r
if ((V2Command == CMD_SET_PARAMETER) && (ParamPrivs & PARAM_PRIV_WRITE))\r
{\r
/** Handler for the CMD_PROGRAM_FLASH_ISP and CMD_PROGRAM_EEPROM_ISP commands, writing out bytes,\r
* words or pages of data to the attached device.\r
*\r
- * \param V2Command Issued V2 Protocol command byte from the host\r
+ * \param[in] V2Command Issued V2 Protocol command byte from the host\r
*/\r
static void V2Protocol_Command_ProgramMemory(uint8_t V2Command)\r
{\r
uint8_t ProgrammingCommands[3];\r
uint8_t PollValue1;\r
uint8_t PollValue2;\r
- uint8_t ProgData[512];\r
- } Write_Memory_Params;\r
+ uint8_t ProgData[256]; // Note, the Jungo driver has a very short ACK timeout period, need to buffer the\r
+ } Write_Memory_Params; // whole page and ACK the packet as fast as possible to prevent it from aborting\r
\r
- uint8_t* NextWriteByte = Write_Memory_Params.ProgData;\r
-\r
Endpoint_Read_Stream_LE(&Write_Memory_Params, sizeof(Write_Memory_Params) - sizeof(Write_Memory_Params.ProgData));\r
Write_Memory_Params.BytesToWrite = SwapEndian_16(Write_Memory_Params.BytesToWrite);\r
+ \r
+ if (Write_Memory_Params.BytesToWrite > sizeof(Write_Memory_Params.ProgData))\r
+ {\r
+ Endpoint_ClearOUT();\r
+ Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);\r
+\r
+ Endpoint_Write_Byte(V2Command);\r
+ Endpoint_Write_Byte(STATUS_CMD_FAILED);\r
+ Endpoint_ClearIN();\r
+ return;\r
+ }\r
+ \r
Endpoint_Read_Stream_LE(&Write_Memory_Params.ProgData, Write_Memory_Params.BytesToWrite);\r
\r
Endpoint_ClearOUT();\r
uint16_t PollAddress = 0;\r
uint8_t PollValue = (V2Command == CMD_PROGRAM_FLASH_ISP) ? Write_Memory_Params.PollValue1 :\r
Write_Memory_Params.PollValue2;\r
+ uint8_t* NextWriteByte = Write_Memory_Params.ProgData;\r
+\r
if (Write_Memory_Params.ProgrammingMode & PROG_MODE_PAGED_WRITES_MASK)\r
{\r
uint16_t StartAddress = (CurrentAddress & 0xFFFF);\r
\r
Endpoint_Write_Byte(V2Command);\r
Endpoint_Write_Byte(ProgrammingStatus);\r
- \r
Endpoint_ClearIN();\r
}\r
\r
/** Handler for the CMD_READ_FLASH_ISP and CMD_READ_EEPROM_ISP commands, reading in bytes,\r
* words or pages of data from the attached device.\r
*\r
- * \param V2Command Issued V2 Protocol command byte from the host\r
+ * \param[in] V2Command Issued V2 Protocol command byte from the host\r
*/\r
static void V2Protocol_Command_ReadMemory(uint8_t V2Command)\r
{\r
/** Handler for the CMD_READ_FUSE_ISP, CMD_READ_LOCK_ISP, CMD_READ_SIGNATURE_ISP and CMD_READ_OSCCAL commands,\r
* reading the requested configuration byte from the device.\r
*\r
- * \param V2Command Issued V2 Protocol command byte from the host\r
+ * \param[in] V2Command Issued V2 Protocol command byte from the host\r
*/\r
static void V2Protocol_Command_ReadFuseLockSigOSCCAL(uint8_t V2Command)\r
{\r
/** Handler for the CMD_WRITE_FUSE_ISP and CMD_WRITE_LOCK_ISP commands, writing the requested configuration\r
* byte to the device.\r
*\r
- * \param V2Command Issued V2 Protocol command byte from the host\r
+ * \param[in] V2Command Issued V2 Protocol command byte from the host\r
*/\r
static void V2Protocol_Command_WriteFuseLock(uint8_t V2Command)\r
{\r