Fix a bug in the Still Image Host Class driver where the returned block status code...
[pub/USBasp.git] / Projects / AVRISP / Lib / PDIProtocol.c
index 36aa3b4..aa03fc4 100644 (file)
@@ -201,7 +201,7 @@ static void PDIProtocol_WriteMemory(void)
                uint8_t  PageMode;\r
                uint32_t Address;\r
                uint16_t Length;\r
-               uint8_t  ProgData[512];\r
+               uint8_t  ProgData[256];\r
        } WriteMemory_XPROG_Params;\r
        \r
        Endpoint_Read_Stream_LE(&WriteMemory_XPROG_Params, (sizeof(WriteMemory_XPROG_Params) -\r
@@ -215,24 +215,37 @@ static void PDIProtocol_WriteMemory(void)
 \r
 \r
        uint8_t WriteCommand     = NVM_CMD_NOOP;\r
-       uint8_t WritePageCommand = NVM_CMD_NOOP;\r
+       uint8_t WriteBuffCommand = NVM_CMD_NOOP;\r
+       uint8_t EraseBuffCommand = NVM_CMD_NOOP;\r
        bool    PagedMemory      = false;\r
        \r
        if (WriteMemory_XPROG_Params.MemoryType == XPRG_MEM_TYPE_APPL)\r
        {\r
-               PagedMemory = true;\r
+               WriteCommand     = NVM_CMD_ERASEWRITEFLASH;\r
+               WriteBuffCommand = NVM_CMD_LOADFLASHPAGEBUFF;\r
+               EraseBuffCommand = NVM_CMD_ERASEFLASHPAGEBUFF;\r
+               PagedMemory      = true;\r
        }\r
        else if (WriteMemory_XPROG_Params.MemoryType == XPRG_MEM_TYPE_BOOT)\r
        {\r
-               PagedMemory = true;\r
+               WriteCommand     = NVM_CMD_ERASEWRITEFLASH;\r
+               WriteBuffCommand = NVM_CMD_LOADFLASHPAGEBUFF;\r
+               EraseBuffCommand = NVM_CMD_ERASEFLASHPAGEBUFF;\r
+               PagedMemory      = true;\r
        }\r
        else if (WriteMemory_XPROG_Params.MemoryType == XPRG_MEM_TYPE_EEPROM)\r
        {\r
-               PagedMemory = true;\r
+               WriteCommand     = NVM_CMD_ERASEWRITEEEPROMPAGE;\r
+               WriteBuffCommand = NVM_CMD_LOADEEPROMPAGEBUFF;\r
+               EraseBuffCommand = NVM_CMD_ERASEEEPROMPAGEBUFF;\r
+               PagedMemory      = true;\r
        }\r
        else if (WriteMemory_XPROG_Params.MemoryType == XPRG_MEM_TYPE_USERSIG)\r
        {\r
-               PagedMemory = true;\r
+               WriteCommand     = NVM_CMD_WRITEUSERSIG;\r
+               WriteBuffCommand = NVM_CMD_LOADFLASHPAGEBUFF;\r
+               EraseBuffCommand = NVM_CMD_ERASEFLASHPAGEBUFF;\r
+               PagedMemory      = true;\r
        }\r
        else if (WriteMemory_XPROG_Params.MemoryType == XPRG_MEM_TYPE_FUSE)\r
        {\r
@@ -245,7 +258,12 @@ static void PDIProtocol_WriteMemory(void)
        \r
        if (PagedMemory)\r
        {\r
-\r
+               if (!(NVMTarget_WritePageMemory(WriteBuffCommand, EraseBuffCommand, WriteCommand, \r
+                                               WriteMemory_XPROG_Params.PageMode, WriteMemory_XPROG_Params.Address,\r
+                                               WriteMemory_XPROG_Params.ProgData, WriteMemory_XPROG_Params.Length)))\r
+               {\r
+                       ReturnStatus = XPRG_ERR_TIMEOUT;\r
+               }\r
        }\r
        else\r
        {\r