void run_task(uint8_t *Task) { switch(Task[2]) { case '0': send_string("boot"); break; case '1': page_address = Task[9] << 8; page_address |= Task[8]; readFlashPage(page_address, 128); send_buff(gBuffer, 128); Task[2] = 0; break; case '2': Task[2] = 0; break; case '3': page_address = Task[9] << 8; page_address |= Task[8]; for (uint16_t i = 0; i < SPM_PAGESIZE; i++) gBuffer[i] = data_buffer[i + 16]; writeFlashPage(page_address,SPM_PAGESIZE); send_string("page done"); Task[2] = 0; break; case '4': eraseFlash(); send_string("erase ok"); Task[2] = 0; break; case '5': Task[2] = 0; break; case '6': fill_page(); send_buff(gBuffer, 256); Task[2] = 0; break; case '7': blink_led(); Task[2] = 0; break; case '8': MCUCR |= 1<<IVCE; MCUCR = 0<<IVSEL; send_string("jump ok"); jump_to_app(); // Jump to application sector Task[2] = 0; break; default: Task[2] = 0; } }
static void chunkInFlashLog(UINT8 inOW) { uart_print("chunkInFlashLog\r\n"); UINT32 chunksInPage=1; UINT32 srcChunkByteOffsets[CHUNKS_PER_PAGE]; UINT32 chunkIdxs[CHUNKS_PER_PAGE]; UINT8 decreaseInOW[CHUNKS_PER_PAGE]; srcChunkByteOffsets[0]=ChunkToSectOffset(oldChunkAddr_)*BYTES_PER_SECTOR; chunkIdxs[0]=chunkIdx_; decreaseInOW[0] = inOW; setupFlashPageRead(&chunksInPage, srcChunkByteOffsets, chunkIdxs, decreaseInOW); readFlashPage(&chunksInPage, srcChunkByteOffsets, chunkIdxs, decreaseInOW); }
void readPage(uint16_t address) { uint16_t length = (getch() << 8) | getch(); uint8_t memtype = getch(); if (!receiveEop()) return; switch (memtype) { case 'F': readFlashPage(address, length); break; case 'E': readEepromPage(address, length); break; default: Serial.write(STK_FAILED); break; } }