From 2249e648fcc93ffc30d6b915c217c03b29bcf43f Mon Sep 17 00:00:00 2001 From: Jelmer Date: Wed, 15 Feb 2023 20:58:18 +0100 Subject: [PATCH] testing - power not checked! --- tag_fw/drawing.c | 108 +++++++++--- tag_fw/eeprom.h | 7 +- tag_fw/fw154.bin | Bin 52909 -> 54068 bytes tag_fw/fw29.bin | Bin 53363 -> 54524 bytes tag_fw/fw42.bin | Bin 53377 -> 54538 bytes tag_fw/main.c | 6 +- tag_fw/proto.h | 8 +- tag_fw/settings.h | 2 +- tag_fw/syncedproto.c | 398 +++++++++++++++++++++---------------------- tag_fw/syncedproto.h | 4 +- 10 files changed, 289 insertions(+), 244 deletions(-) diff --git a/tag_fw/drawing.c b/tag_fw/drawing.c index 6ee193b4..4465af71 100644 --- a/tag_fw/drawing.c +++ b/tag_fw/drawing.c @@ -8,10 +8,11 @@ #include "eeprom.h" #include "epd.h" #include "printf.h" +#include "proto.h" #include "screen.h" #include "timer.h" +#include "userinterface.h" // for addIcons -#include "userinterface.h" // for addIcons #define COMPRESSION_BITPACKED_3x5_to_7 0x62700357 // 3 pixels of 5 possible colors in 7 bits #define COMPRESSION_BITPACKED_5x3_to_8 0x62700538 // 5 pixels of 3 possible colors in 8 bits #define COMPRESSION_BITPACKED_3x6_to_8 0x62700368 // 3 pixels of 6 possible colors in 8 bits @@ -335,31 +336,88 @@ void ByteDecode(uint8_t byte) { } void drawImageAtAddress(uint32_t addr, uint8_t lut) { - uint32_t __xdata clutAddr; - pr("sending to EPD - "); - clutAddr = drawPrvParseHeader(addr); - if (!clutAddr) - return; - drawPrvLoadAndMapClut(clutAddr); + struct EepromImageHeader* __xdata eih = (struct EepromImageHeader*)mClutMap; + eepromRead(addr, mClutMap, sizeof(struct EepromImageHeader)); - epdSetup(); - if(lut)selectLUT(lut); - mPassNo = 0; - beginFullscreenImage(); - beginWriteFramebuffer(EPD_COLOR_BLACK); - prev = 0; - step = 0; - drawPrvDecodeImageOnce(); - endWriteFramebuffer(); - mPassNo++; - beginFullscreenImage(); - beginWriteFramebuffer(EPD_COLOR_RED); - prev = 0; - step = 0; - drawPrvDecodeImageOnce(); - endWriteFramebuffer(); + switch (eih->dataType) { + case DATATYPE_IMG_RAW_1BPP: + pr("Doing raw 1bpp\n"); + epdSetup(); + if (lut) selectLUT(lut); + beginFullscreenImage(); + clearScreen(); + beginWriteFramebuffer(EPD_COLOR_BLACK); + epdSelect(); + for (uint16_t c = 0; c < (SCREEN_HEIGHT * SCREEN_WIDTH / 8); c++) { + if (c % 256 == 0) { + epdDeselect(); + eepromRead(addr + sizeof(struct EepromImageHeader) + c, mClutMap, 256); + epdSelect(); + } + epdSend(mClutMap[c % 256]); + } + epdDeselect(); + endWriteFramebuffer(); + break; + case DATATYPE_IMG_RAW_2BPP: + pr("Doing raw 2bpp\n"); + epdSetup(); + if (lut) selectLUT(lut); + beginFullscreenImage(); + beginWriteFramebuffer(EPD_COLOR_BLACK); + epdSelect(); + for (uint16_t c = 0; c < (SCREEN_HEIGHT * SCREEN_WIDTH / 8); c++) { + if (c % 256 == 0) { + epdDeselect(); + eepromRead(addr + sizeof(struct EepromImageHeader) + c, mClutMap, 256); + epdSelect(); + } + epdSend(mClutMap[c % 256]); + } + epdDeselect(); + endWriteFramebuffer(); - pr(" complete.\n"); + beginWriteFramebuffer(EPD_COLOR_RED); + epdSelect(); + for (uint16_t c = 0; c < (SCREEN_HEIGHT * SCREEN_WIDTH / 8); c++) { + if (c % 256 == 0) { + epdDeselect(); + eepromRead(addr + sizeof(struct EepromImageHeader) + (SCREEN_HEIGHT * SCREEN_WIDTH / 8) + c, mClutMap, 256); + epdSelect(); + } + epdSend(mClutMap[c % 256]); + } + epdDeselect(); + endWriteFramebuffer(); + break; + case DATATYPE_IMG_BMP:; + uint32_t __xdata clutAddr; + pr("sending to EPD - "); + clutAddr = drawPrvParseHeader(addr); + if (!clutAddr) + return; + drawPrvLoadAndMapClut(clutAddr); + + epdSetup(); + if (lut) selectLUT(lut); + mPassNo = 0; + beginFullscreenImage(); + beginWriteFramebuffer(EPD_COLOR_BLACK); + prev = 0; + step = 0; + drawPrvDecodeImageOnce(); + endWriteFramebuffer(); + mPassNo++; + beginFullscreenImage(); + beginWriteFramebuffer(EPD_COLOR_RED); + prev = 0; + step = 0; + drawPrvDecodeImageOnce(); + endWriteFramebuffer(); + + pr(" complete.\n"); + break; + } addOverlay(); drawWithSleep(); -} +} \ No newline at end of file diff --git a/tag_fw/eeprom.h b/tag_fw/eeprom.h index 9d750274..59f36984 100644 --- a/tag_fw/eeprom.h +++ b/tag_fw/eeprom.h @@ -32,17 +32,14 @@ void eepromReadStart(uint32_t addr) __reentrant; //structures #define EEPROM_IMG_INPROGRESS (0x7fffffffUL) -#define EEPROM_IMG_VALID (0x494d4722UL) - +#define EEPROM_IMG_VALID (0x494d4721UL) #include "board.h" -#define EEPROM_PIECE_SZ (88) struct EepromImageHeader { //each image space is 0x17000 bytes, we have space for ten of them uint64_t version; uint32_t validMarker; uint32_t size; - uint32_t rfu[8]; //zero-filled for now - uint8_t piecesMissing[EEPROM_PROGRESS_BYTES]; //each bit represents a EEPROM_PIECE_SZ-byte piece + uint8_t dataType; uint32_t id; //image data here diff --git a/tag_fw/fw154.bin b/tag_fw/fw154.bin index 9d6c580efadb91c3a9642b5e6d9defcd1496f7d0..3e4a009e25cdf301e20ea53c24c30a7a99a72699 100644 GIT binary patch literal 54068 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 literal 52909 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 EZmf=Ee*gdg diff --git a/tag_fw/fw29.bin b/tag_fw/fw29.bin index 2310a83b298d025f3b96bedb4c44787915c37645..d4fd320dd8e90d8f453dfddb1fde749b6c4f4a92 100644 GIT binary patch literal 54524 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

a&3nSDsitWcz+BQ(B{ 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 IK7Y0R03K}h7XSbN literal 53363 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 $h?N?J?J@rXqv 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 diff --git a/tag_fw/fw42.bin b/tag_fw/fw42.bin index 860e3ea5dd5e5a790d1a26ccec1538bb1e67a7a6..9ca220f556499a7dd658c2235f9d4212fb8a5d2a 100644 GIT binary patch literal 54538 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 K`H3+7)$kkLCgd9c literal 53377 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 ziZs$XdataType != DATATYPE_NOUPDATE) { // data transfer powerUp(INIT_GPIO | INIT_UART); - if (doDataDownload(avail)) { + if (processAvailDataInfo(avail)) { // succesful transfer, next wake time is determined by the NextCheckin; } else { // failed transfer, let the algorithm determine next sleep interval (not the AP) @@ -311,7 +311,7 @@ void mainProtocolLoop(void) { powerUp(INIT_EPD); if (curImgSlot != 0xFF) { powerUp(INIT_EEPROM); - drawImageFromEeprom(); + drawImageFromEeprom(curImgSlot); powerDown(INIT_EEPROM); } else if ((scanAttempts >= (INTERVAL_1_ATTEMPTS + INTERVAL_2_ATTEMPTS - 1))) { showLongTermSleep(); diff --git a/tag_fw/proto.h b/tag_fw/proto.h index 85e2bedc..bc6f4f45 100644 --- a/tag_fw/proto.h +++ b/tag_fw/proto.h @@ -116,9 +116,11 @@ struct AvailDataReq { #define DATATYPE_NOUPDATE 0 -#define DATATYPE_IMG 1 -#define DATATYPE_IMGRAW 2 -#define DATATYPE_UPDATE 3 +#define DATATYPE_IMG_BMP 2 +#define DATATYPE_FW_UPDATE 3 +#define DATATYPE_IMG_DIFF 0x10 // always 1BPP +#define DATATYPE_IMG_RAW_1BPP 0x20 // 2888 bytes for 1.54" / 4736 2.9" / 15000 4.2" +#define DATATYPE_IMG_RAW_2BPP 0x21 // 5776 bytes for 1.54" / 9472 2.9" / 30000 4.2" struct AvailDataInfo { uint8_t checksum; diff --git a/tag_fw/settings.h b/tag_fw/settings.h index 42a795c9..d7df03df 100644 --- a/tag_fw/settings.h +++ b/tag_fw/settings.h @@ -4,7 +4,7 @@ #include #define FW_VERSION 014 // version number (max 2.5.5 :) ) -#define FW_VERSION_SUFFIX "-lutje" // suffix, like -RC1 or whatever. +#define FW_VERSION_SUFFIX "-RE" // suffix, like -RC1 or whatever. #define HAS_BUTTON // uncomment to enable reading a push button (connect between 'TEST' en 'GND' on the tag, along with a 100nF capacitor in parallel). #define DEBUGBLOCKS // uncomment to enable extra debug information on the block transfers //#define PRINT_LUT // uncomment if you want the tag to print the LUT for the current temperature bracket diff --git a/tag_fw/syncedproto.c b/tag_fw/syncedproto.c index 32b67825..44098843 100644 --- a/tag_fw/syncedproto.c +++ b/tag_fw/syncedproto.c @@ -25,26 +25,19 @@ #include "wdt.h" // download-stuff -bool __xdata dataPending = true; uint8_t __xdata blockXferBuffer[BLOCK_XFER_BUFFER_SIZE] = {0}; -struct blockRequest __xdata curBlock = {0}; -struct AvailDataInfo __xdata curDataInfo = {0}; -uint16_t __xdata dataRemaining = 0; // since the targeted solum tags don't have more than 64k progmem, this is fine. -bool __xdata curXferComplete = false; +struct blockRequest __xdata curBlock = {0}; // used by the block-requester, contains the next request that we'll send +struct AvailDataInfo __xdata curDataInfo = {0}; // last 'AvailDataInfo' we received from the AP bool __xdata requestPartialBlock = false; +#define BLOCK_TRANSFER_ATTEMPTS 5 +uint8_t __xdata prevImgSlot = 0xFF; uint8_t __xdata curImgSlot = 0xFF; uint32_t __xdata curHighSlotId = 0; uint8_t __xdata nextImgSlot = 0; uint8_t __xdata imgSlots = 0; uint8_t __xdata drawWithLut = 0; -// doDownload persistent variables -bool __xdata lastBlock = false; -uint8_t __xdata partsThisBlock = 0; -uint8_t __xdata blockRequestAttempt = 0; -uint8_t __xdata blockValidateAttempt = 0; - // stuff we need to keep track of related to the network/AP uint8_t __xdata APmac[8] = {0}; uint16_t __xdata APsrcPan = 0; @@ -441,19 +434,22 @@ uint8_t findSlot(uint8_t *__xdata ver) { void eraseUpdateBlock() { eepromErase(EEPROM_UPDATA_AREA_START, EEPROM_UPDATE_AREA_LEN / EEPROM_ERZ_SECTOR_SZ); } +void eraseImageBlock(uint8_t c) { + eepromErase(getAddressForSlot(c), EEPROM_IMG_EACH / EEPROM_ERZ_SECTOR_SZ); +} void saveUpdateBlockData(uint8_t blockId) { if (!eepromWrite(EEPROM_UPDATA_AREA_START + (blockId * BLOCK_DATA_SIZE), blockXferBuffer + sizeof(struct blockData), BLOCK_DATA_SIZE)) pr("EEPROM write failed\n"); } -void saveImgBlockData(uint8_t blockId) { +void saveImgBlockData(uint8_t imgSlot, uint8_t blockId) { uint16_t length = EEPROM_IMG_EACH - (sizeof(struct EepromImageHeader) + (blockId * BLOCK_DATA_SIZE)); if (length > 4096) length = 4096; - if (!eepromWrite(getAddressForSlot(curImgSlot) + sizeof(struct EepromImageHeader) + (blockId * BLOCK_DATA_SIZE), blockXferBuffer + sizeof(struct blockData), length)) + if (!eepromWrite(getAddressForSlot(imgSlot) + sizeof(struct EepromImageHeader) + (blockId * BLOCK_DATA_SIZE), blockXferBuffer + sizeof(struct blockData), length)) pr("EEPROM write failed\n"); } -void drawImageFromEeprom() { - drawImageAtAddress(getAddressForSlot(curImgSlot), drawWithLut); +void drawImageFromEeprom(uint8_t imgSlot) { + drawImageAtAddress(getAddressForSlot(imgSlot), drawWithLut); drawWithLut = 0; // default back to the regular ol' stock/OTP LUT powerDown(INIT_EPD); } @@ -474,110 +470,30 @@ uint32_t getHighSlotId() { return temp; } -// Main download function -bool doDataDownload(struct AvailDataInfo *__xdata avail) { - // this is the main function for the download process +bool getDataBlock(uint16_t blockSize) { + static uint8_t __xdata partsThisBlock = 0; + static uint8_t __xdata blockAttempts = 0; + blockAttempts = BLOCK_TRANSFER_ATTEMPTS; - if (!eepromInit()) { // we'll need the eeprom here, init it. - pr("failed to init eeprom\n"); - return false; - } - - // GET AVAIL DATA INFO - enable the radio and get data - if (avail == NULL) { // didn't receive a reply to get info about the data, we'll resync and try again later -#ifdef DEBUGBLOCKS - pr("didn't receive getavaildatainfo"); -#endif - return false; - } - - // did receive available data info (avail struct) - switch (avail->dataType) { - case DATATYPE_IMG: - case DATATYPE_IMGRAW: - // check if this download is currently displayed or active - if (curXferComplete && xMemEqual((const void *__xdata) & avail->dataVer, (const void *__xdata) & curDataInfo.dataVer, 8)) { - // we've downloaded this already, we're guessing it's already displayed - pr("old ver, already downloaded!\n"); - powerUp(INIT_RADIO); - sendXferComplete(); - powerDown(INIT_RADIO); - return true; - } else { - // check if we've seen this version before - curImgSlot = findSlot(&(avail->dataVer)); - if (curImgSlot != 0xFF) { - // found a (complete)valid image slot for this version - powerDown(INIT_RADIO); - sendXferComplete(); - powerDown(INIT_RADIO); - - pr("already seen, drawing from eeprom slot %d\n", curImgSlot); - - // mark as completed and draw from EEPROM - curXferComplete = true; - xMemCopyShort(&curDataInfo, (void *)avail, sizeof(struct AvailDataInfo)); - drawWithLut = avail->dataTypeArgument; - wdt60s(); - drawImageFromEeprom(); - return true; - } else { - // not found in cache, prepare to download - // go to the next image slot - nextImgSlot++; - if (nextImgSlot >= imgSlots) nextImgSlot = 0; - curImgSlot = nextImgSlot; - drawWithLut = avail->dataTypeArgument; - eepromErase(getAddressForSlot(curImgSlot), EEPROM_IMG_EACH / EEPROM_ERZ_SECTOR_SZ); - pr("new download, writing to slot %d\n", curImgSlot); - // continue! - } - } - break; - case DATATYPE_UPDATE: - pr("received firmware!\n"); - eepromErase(EEPROM_UPDATA_AREA_START, EEPROM_UPDATE_AREA_LEN / EEPROM_ERZ_SECTOR_SZ); - break; - } - - // prepare for download - curXferComplete = false; - curBlock.blockId = 0; - xMemCopy8(&(curBlock.ver), &(avail->dataVer)); - curBlock.type = avail->dataType; - xMemCopyShort(&curDataInfo, (void *)avail, sizeof(struct AvailDataInfo)); - dataRemaining = curDataInfo.dataSize; // this was + 2, and I can't remember why. It works fine without it, so I don't know.... - - // set requested parts - check if the transfer is contained in this block - if (dataRemaining > BLOCK_DATA_SIZE) { - // full block, not last - lastBlock = false; + if (blockSize == BLOCK_DATA_SIZE) { partsThisBlock = BLOCK_MAX_PARTS; memset(curBlock.requestedParts, 0xFF, BLOCK_REQ_PARTS_BYTES); } else { - // final block, probably partial - lastBlock = true; - partsThisBlock = dataRemaining / BLOCK_PART_DATA_SIZE; - if (dataRemaining % BLOCK_PART_DATA_SIZE) partsThisBlock++; + partsThisBlock = blockSize / BLOCK_PART_DATA_SIZE; + if (blockSize % BLOCK_PART_DATA_SIZE) partsThisBlock++; memset(curBlock.requestedParts, 0x00, BLOCK_REQ_PARTS_BYTES); for (uint8_t c = 0; c < partsThisBlock; c++) { curBlock.requestedParts[c / 8] |= (1 << (c % 8)); } } - // do transfer! - blockRequestAttempt = 0; - blockValidateAttempt = 0; - while (!curXferComplete) { - // this while loop loops until the transfer has been completed, or we get tired for other reasons - startdownload:; - wdt10s(); + requestPartialBlock = false; // this forces the AP to request the block data from the host + + while (blockAttempts--) { #ifndef DEBUGBLOCKS pr("REQ %d ", curBlock.blockId); -#endif -#ifdef DEBUGBLOCKS +#else pr("REQ %d[", curBlock.blockId); - for (uint8_t c = 0; c < BLOCK_MAX_PARTS; c++) { if ((c != 0) && (c % 8 == 0)) pr("]["); if (curBlock.requestedParts[c / 8] & (1 << (c % 8))) { @@ -588,20 +504,13 @@ bool doDataDownload(struct AvailDataInfo *__xdata avail) { } pr("]\n"); #endif - - // timerDelay(TIMER_TICKS_PER_MS*100); - - // DO BLOCK REQUEST - request a block, get an ack with timing info (hopefully) powerUp(INIT_RADIO); struct blockRequestAck *__xdata ack = performBlockRequest(); if (ack == NULL) { pr("Cancelled request\n"); return false; - } else { - // got an ack! } - // SLEEP - until the AP is ready with the data - if (ack->pleaseWaitMs) { + if (ack->pleaseWaitMs) { // SLEEP - until the AP is ready with the data if (ack->pleaseWaitMs < 35) { timerDelay(ack->pleaseWaitMs * TIMER_TICKS_PER_MS); } else { @@ -613,20 +522,10 @@ bool doDataDownload(struct AvailDataInfo *__xdata avail) { } else { // immediately start with the reception of the block data } - // BLOCK RX LOOP - receive a block, until the timeout has passed - if (!blockRxLoop(270)) { // was 300 - // didn't receive packets - blockRequestAttempt++; - if (blockRequestAttempt > 5) { - powerDown(INIT_RADIO); - pr("bailing on download, 0 blockparts rx'd\n"); - return false; - } - } else { - // successfull block RX loop - blockRequestAttempt = 0; - } + + blockRxLoop(270); // BLOCK RX LOOP - receive a block, until the timeout has passed powerDown(INIT_RADIO); + #ifdef DEBUGBLOCKS pr("RX %d[", curBlock.blockId); for (uint8_t c = 0; c < BLOCK_MAX_PARTS; c++) { @@ -639,7 +538,6 @@ bool doDataDownload(struct AvailDataInfo *__xdata avail) { } pr("]\n"); #endif - // check if we got all the parts we needed, e.g: has the block been completed? bool blockComplete = true; for (uint8_t c = 0; c < partsThisBlock; c++) { @@ -651,31 +549,14 @@ bool doDataDownload(struct AvailDataInfo *__xdata avail) { pr("- COMPLETE\n"); #endif if (validateBlockData()) { - // checked and found okay - requestPartialBlock = false; // next block is going to be requested from the ESP32 by the AP - blockValidateAttempt = 0; - switch (curBlock.type) { - case DATATYPE_IMG: - case DATATYPE_IMGRAW: - saveImgBlockData(curBlock.blockId); - break; - case DATATYPE_UPDATE: - saveUpdateBlockData(curBlock.blockId); - break; - } + // block download complete, validated + return true; } else { - // block checked, but failed validation. Mark all parts for this block as 'request' - blockValidateAttempt++; - if (blockValidateAttempt > 5) { - pr("bailing on download, 0 blockparts rx'd\n"); - return false; - } for (uint8_t c = 0; c < partsThisBlock; c++) { curBlock.requestedParts[c / 8] |= (1 << (c % 8)); } - blockComplete = false; requestPartialBlock = false; - pr("block failed validation!\n"); + pr("blk failed validation!\n"); } } else { #ifndef DEBUGBLOCKS @@ -684,67 +565,174 @@ bool doDataDownload(struct AvailDataInfo *__xdata avail) { // block incomplete, re-request a partial block requestPartialBlock = true; } + } + pr("failed getting block\n"); + return false; +} - if (blockComplete) { - if (!lastBlock) { - // Not the last block! check what the next block is going to be - curBlock.blockId++; - dataRemaining -= BLOCK_DATA_SIZE; - if (dataRemaining > BLOCK_DATA_SIZE) { - // full block-size - partsThisBlock = BLOCK_MAX_PARTS; - memset(curBlock.requestedParts, 0xFF, BLOCK_REQ_PARTS_BYTES); - lastBlock = false; - } else { - // final block, probably partial - partsThisBlock = dataRemaining / BLOCK_PART_DATA_SIZE; - if (dataRemaining % BLOCK_PART_DATA_SIZE) partsThisBlock++; - memset(curBlock.requestedParts, 0x00, BLOCK_REQ_PARTS_BYTES); - for (uint8_t c = 0; c < partsThisBlock; c++) { - curBlock.requestedParts[c / 8] |= (1 << (c % 8)); - } - lastBlock = true; - } +bool downloadFWUpdate(struct AvailDataInfo *__xdata avail) { + // check if we already started the transfer of this information & haven't completed it + if (xMemEqual((const void *__xdata) & avail->dataVer, (const void *__xdata) & curDataInfo.dataVer, 8) && curDataInfo.dataSize) { + // looks like we did. We'll carry on where we left off. + } else { + // start, or restart the transfer from 0. Copy data from the AvailDataInfo struct, and the struct intself. This forces a new transfer + curBlock.blockId = 0; + xMemCopy8(&(curBlock.ver), &(avail->dataVer)); + curBlock.type = avail->dataType; + xMemCopyShort(&curDataInfo, (void *)avail, sizeof(struct AvailDataInfo)); + eraseUpdateBlock(); + } - } else { - // this was the last block. What should we do next? - switch (curBlock.type) { - case DATATYPE_IMG: - case DATATYPE_IMGRAW:; - // transfer complete. Save data info and mark data in image slot as 'valid' - struct EepromImageHeader __xdata *eih = (struct EepromImageHeader __xdata *)blockXferBuffer; - xMemCopy8(&eih->version, &curDataInfo.dataVer); - eih->size = curDataInfo.dataSize; - eih->validMarker = EEPROM_IMG_VALID; - eih->id = ++curHighSlotId; - eepromWrite(getAddressForSlot(curImgSlot), eih, sizeof(struct EepromImageHeader)); - // pr("transfer complete!"); - curXferComplete = true; - powerUp(INIT_RADIO); - sendXferComplete(); - powerDown(INIT_RADIO); - wdt60s(); - drawImageFromEeprom(); - curDataInfo.dataVer = 0xAA; - break; - case DATATYPE_UPDATE: - pr("firmware download complete, doing update.\n"); - powerUp(INIT_EPD); - showApplyUpdate(); - curXferComplete = true; - powerUp(INIT_RADIO); - sendXferComplete(); - powerDown(INIT_RADIO); - wdt60s(); - eepromReadStart(EEPROM_UPDATA_AREA_START); - selfUpdate(); - break; - } - } + while (curDataInfo.dataSize) { + wdt10s(); + static uint16_t __xdata dataRequestSize; + if (curDataInfo.dataSize > BLOCK_DATA_SIZE) { + // more than one block remaining + dataRequestSize = BLOCK_DATA_SIZE; } else { - // incomplete block, wrap around and get the rest of the block... + // only one block remains + dataRequestSize = curDataInfo.dataSize; } - } // end download while loop + if (getDataBlock(dataRequestSize)) { + // succesfully downloaded datablock, save to eeprom + powerUp(INIT_EEPROM); + saveUpdateBlockData(curBlock.blockId); + powerDown(INIT_EEPROM); + curBlock.blockId++; + curDataInfo.dataSize -= dataRequestSize; + } else { + // failed to get the block we wanted, we'll stop for now, maybe resume later + return false; + } + } + // no more data, download complete + return true; +} +bool downloadImageData(struct AvailDataInfo *__xdata avail) { + static uint16_t __xdata imageSize = 0; + // check if we already started the transfer of this information & haven't completed it + if (xMemEqual((const void *__xdata) & avail->dataVer, (const void *__xdata) & curDataInfo.dataVer, 8) && curDataInfo.dataSize) { + // looks like we did. We'll carry on where we left off. + pr("restarting image download"); + } else { + // go to the next image slot + nextImgSlot++; + if (nextImgSlot >= imgSlots) nextImgSlot = 0; + curImgSlot = nextImgSlot; + drawWithLut = avail->dataTypeArgument; + eepromErase(getAddressForSlot(curImgSlot), EEPROM_IMG_EACH / EEPROM_ERZ_SECTOR_SZ); + pr("new download, writing to slot %d\n", curImgSlot); + + // start, or restart the transfer. Copy data from the AvailDataInfo struct, and the struct intself. This forces a new transfer + curBlock.blockId = 0; + xMemCopy8(&(curBlock.ver), &(avail->dataVer)); + curBlock.type = avail->dataType; + xMemCopyShort(&curDataInfo, (void *)avail, sizeof(struct AvailDataInfo)); + imageSize = curDataInfo.dataSize; + } + + while (curDataInfo.dataSize) { + wdt10s(); + static uint16_t __xdata dataRequestSize; + if (curDataInfo.dataSize > BLOCK_DATA_SIZE) { + // more than one block remaining + dataRequestSize = BLOCK_DATA_SIZE; + } else { + // only one block remains + dataRequestSize = curDataInfo.dataSize; + } + if (getDataBlock(dataRequestSize)) { + // succesfully downloaded datablock, save to eeprom + powerUp(INIT_EEPROM); + saveImgBlockData(curImgSlot, curBlock.blockId); + curBlock.blockId++; + curDataInfo.dataSize -= dataRequestSize; + } else { + // failed to get the block we wanted, we'll stop for now, probably resume later + return false; + } + } + + // borrow the blockXferBuffer temporarily + struct EepromImageHeader __xdata *eih = (struct EepromImageHeader __xdata *)blockXferBuffer; + xMemCopy8(&eih->version, &curDataInfo.dataVer); + eih->validMarker = EEPROM_IMG_VALID; + eih->id = ++curHighSlotId; + eih->size = imageSize; + eih->dataType = curDataInfo.dataType; + eepromWrite(getAddressForSlot(curImgSlot), eih, sizeof(struct EepromImageHeader)); + + powerUp(INIT_RADIO); + sendXferComplete(); + powerDown(INIT_RADIO); + // no more data, download complete + return true; +} + +bool processAvailDataInfo(struct AvailDataInfo *__xdata avail) { + powerUp(INIT_EEPROM | INIT_UART | INIT_GPIO); + switch (avail->dataType) { + case DATATYPE_IMG_BMP: + case DATATYPE_IMG_DIFF: + case DATATYPE_IMG_RAW_1BPP: + case DATATYPE_IMG_RAW_2BPP: + // check if this download is currently displayed or active + if (curDataInfo.dataSize == 0 && xMemEqual((const void *__xdata) & avail->dataVer, (const void *__xdata) & curDataInfo.dataVer, 8)) { + // we've downloaded this already, we're guessing it's already displayed + pr("currently shown image, send xfc\n"); + powerUp(INIT_RADIO); + sendXferComplete(); + powerDown(INIT_RADIO); + return true; + } + + // check if we've seen this version before + powerUp(INIT_EEPROM); + curImgSlot = findSlot(&(avail->dataVer)); + if (curImgSlot != 0xFF) { + // found a (complete)valid image slot for this version + powerUp(INIT_RADIO); + sendXferComplete(); + powerDown(INIT_RADIO); + + pr("already seen, drawing from eeprom slot %d\n", curImgSlot); + + // mark as completed and draw from EEPROM + xMemCopyShort(&curDataInfo, (void *)avail, sizeof(struct AvailDataInfo)); + curDataInfo.dataSize = 0; // mark as transfer not pending + + drawWithLut = avail->dataTypeArgument; + wdt60s(); + drawImageFromEeprom(curImgSlot); + return true; + } else { + drawWithLut = avail->dataTypeArgument; + // not found in cache, prepare to download + downloadImageData(avail); + drawImageFromEeprom(curImgSlot); + return true; + } + break; + case DATATYPE_FW_UPDATE: + powerUp(INIT_EEPROM); + if (downloadFWUpdate(avail)) { + pr("firmware download complete, doing update.\n"); + + powerUp(INIT_EPD); + showApplyUpdate(); + + powerUp(INIT_RADIO); + sendXferComplete(); + powerDown(INIT_RADIO); + + wdt60s(); + eepromReadStart(EEPROM_UPDATA_AREA_START); + selfUpdate(); + } else { + return false; + } + break; + } return true; } diff --git a/tag_fw/syncedproto.h b/tag_fw/syncedproto.h index cfe869c8..6b6fdb07 100644 --- a/tag_fw/syncedproto.h +++ b/tag_fw/syncedproto.h @@ -16,8 +16,8 @@ extern void killRadio(void); extern struct AvailDataInfo *__xdata getAvailDataInfo(); extern struct AvailDataInfo *__xdata getShortAvailDataInfo(); -extern void drawImageFromEeprom(); -extern bool doDataDownload(struct AvailDataInfo *__xdata avail); +extern void drawImageFromEeprom(uint8_t imgSlot); +extern bool processAvailDataInfo(struct AvailDataInfo *__xdata avail); extern void initializeProto(); extern uint8_t detectAP(uint8_t channel);