unsigned char nvmem_write_patch(unsigned long ulFileId, unsigned long spLength, const uint8_t *spData) { unsigned char status = 0; unsigned short offset = 0; unsigned char* spDataPtr = (unsigned char*)spData; uint8_t rambuffer[SP_PORTION_SIZE]; while ((status == 0) && (spLength >= SP_PORTION_SIZE)) { Serial.println("#"); for (uint8_t i=0; i<SP_PORTION_SIZE; i++) { //#ifdef TEENSY3 //rambuffer[i] = *(spData + i + offset); //#else //rambuffer[i] = pgm_read_byte(spData + i + offset); //#endif while (Serial.available() <= 0) ; rambuffer[i] = Serial.read(); } #if (DEBUG_MODE == 1) PRINT_F("Writing: "); printDec16(offset); PRINT_F("\t"); for (uint8_t i=0; i<SP_PORTION_SIZE; i++) { PRINT_F("0x"); printHex(rambuffer[i]); PRINT_F(", "); } PRINT_F("\n\r"); #endif status = nvmem_write(ulFileId, SP_PORTION_SIZE, offset, rambuffer); //status = 0; offset += SP_PORTION_SIZE; spLength -= SP_PORTION_SIZE; spDataPtr += SP_PORTION_SIZE; } if (status !=0) { // NVMEM error occurred return status; } if (spLength != 0) { Serial.println("#"); for (int i=0; i<spLength; i++) { while (Serial.available() <= 0) ; rambuffer[i] = Serial.read(); } // if reached here, a reminder is left status = nvmem_write(ulFileId, spLength, offset, rambuffer); //status = 0; } return status; }
UINT8 nvmem_write_patch(UINT32 ulFileId, UINT32 spLength, const UINT8 *spData) { UINT8 status = 0; UINT16 offset = 0; UINT8* spDataPtr = (UINT8*)spData; UINT8 rambuffer[SP_PORTION_SIZE]; while ((status == 0) && (spLength >= SP_PORTION_SIZE)) { for (UINT8 i=0; i<SP_PORTION_SIZE; i++) { rambuffer[i] = pgm_read_byte(spData + i + offset); } #if (DEBUG_MODE == 1) PRINT_F("Writing: "); printDec16(offset); PRINT_F("\t"); for (UINT8 i=0; i<SP_PORTION_SIZE; i++) { PRINT_F("0x"); printHex(rambuffer[i]); PRINT_F(", "); } PRINT_F("\n\r"); #endif status = nvmem_write(ulFileId, SP_PORTION_SIZE, offset, rambuffer); offset += SP_PORTION_SIZE; spLength -= SP_PORTION_SIZE; spDataPtr += SP_PORTION_SIZE; } if (status !=0) { // NVMEM error occurred return status; } if (spLength != 0) { memcpy_P(rambuffer, spDataPtr, SP_PORTION_SIZE); // if reached here, a reminder is left status = nvmem_write(ulFileId, spLength, offset, rambuffer); } return status; }
unsigned char nvmem_write_patch(unsigned long ulFileId, unsigned long spLength, const uint8_t *spData) { unsigned char status = 0; unsigned short offset = 0; unsigned char* spDataPtr = (unsigned char*)spData; uint8_t rambuffer[SP_PORTION_SIZE]; while ((status == 0) && (spLength >= SP_PORTION_SIZE)) { for (uint8_t i=0; i<SP_PORTION_SIZE; i++) { rambuffer[i] = pgm_read_byte(spData + i + offset); } #if (DEBUG_MODE == 1) PRINT_F("Writing: "); printDec16(offset); PRINT_F("\t"); for (uint8_t i=0; i<SP_PORTION_SIZE; i++) { PRINT_F("0x"); printHex(rambuffer[i]); PRINT_F(", "); } PRINT_F("\n\r"); #endif status = nvmem_write(ulFileId, SP_PORTION_SIZE, offset, rambuffer); offset += SP_PORTION_SIZE; spLength -= SP_PORTION_SIZE; spDataPtr += SP_PORTION_SIZE; } if (status !=0) { // NVMEM error occurred return status; } if (spLength != 0) { memcpy_P(rambuffer, spDataPtr, SP_PORTION_SIZE); // if reached here, a reminder is left status = nvmem_write(ulFileId, spLength, offset, rambuffer); } return status; }