From b5117fdcb03b22cda9dba22d17894a88d77d221f Mon Sep 17 00:00:00 2001 From: jjwbruijn Date: Sun, 9 Apr 2023 13:32:03 +0200 Subject: [PATCH] Added 1.54" Tag-AP support as virtual tag --- binaries/AP_FW_1.54.bin | Bin 0 -> 31926 bytes binaries/AP_FW_Nodisplay.bin | Bin 18105 -> 18876 bytes binaries/AP_FW_Segmented_UK.bin | Bin 20804 -> 21589 bytes zbs243_AP_FW/APDisplay.c | 35 ++++-- zbs243_AP_FW/Makefile | 2 + zbs243_AP_FW/builder.php | 2 +- zbs243_AP_FW/buildfw.sh | 6 +- zbs243_AP_FW/emulateTag.c | 124 +++++++++++++++++++ zbs243_AP_FW/emulateTag.h | 11 ++ zbs243_AP_FW/main.c | 89 ++++++++++--- zbs243_Tag_FW/buildfw.sh | 30 +++-- zbs243_shared/board/ssd1619.c | 2 +- zbs243_shared/board/zbs154v033/board.h | 1 + zbs243_shared/board/zbs29_uc8151/board.h | 1 + zbs243_shared/board/zbs29v033/board.h | 1 + zbs243_shared/board/zbs42v033/board.h | 1 + zbs243_shared/board/zbs_nodisplay/board.h | 1 + zbs243_shared/board/zbs_segmented_uk/board.h | 1 + zbs243_shared/cpu/8051/cpu.c | 1 + zbs243_shared/soc/zbs243/flash.c | 2 +- 20 files changed, 266 insertions(+), 44 deletions(-) create mode 100644 binaries/AP_FW_1.54.bin create mode 100755 zbs243_AP_FW/emulateTag.c create mode 100755 zbs243_AP_FW/emulateTag.h mode change 100644 => 100755 zbs243_shared/board/zbs154v033/board.h mode change 100644 => 100755 zbs243_shared/board/zbs29_uc8151/board.h mode change 100644 => 100755 zbs243_shared/board/zbs29v033/board.h mode change 100644 => 100755 zbs243_shared/board/zbs42v033/board.h mode change 100644 => 100755 zbs243_shared/board/zbs_nodisplay/board.h mode change 100644 => 100755 zbs243_shared/board/zbs_segmented_uk/board.h diff --git a/binaries/AP_FW_1.54.bin b/binaries/AP_FW_1.54.bin new file mode 100644 index 0000000000000000000000000000000000000000..dcc86d3334ad0778a561fccdf36b18e0fa51112a GIT binary patch literal 31926 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 literal 0 HcmV?d00001 diff --git a/binaries/AP_FW_Nodisplay.bin b/binaries/AP_FW_Nodisplay.bin index 917c8016daef78896359b5a3793770b284506d70..102132302108f5b541013576ffcbf5420a75928c 100644 GIT binary patch delta 10000 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 F^FOti3#9-6 diff --git a/binaries/AP_FW_Segmented_UK.bin b/binaries/AP_FW_Segmented_UK.bin index 54b6d280e054206db7ffa73c9af8c034e3189acf..8dd0effd5cff1928881393a09d04eb5eb362374b 100644 GIT binary patch literal 21589 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 diff --git a/zbs243_AP_FW/APDisplay.c b/zbs243_AP_FW/APDisplay.c index 0ad145fc..abf18fb2 100755 --- a/zbs243_AP_FW/APDisplay.c +++ b/zbs243_AP_FW/APDisplay.c @@ -19,10 +19,12 @@ #include "uart.h" #include "wdt.h" -// #if (HAS_SCREEN == 1) - uint8_t updateCount = 1; +extern uint8_t __xdata curChannel; +extern uint8_t __xdata curPendingData; +extern uint8_t __xdata curNoUpdate; +#if (SCREEN_WIDTH == 1) void epdInitialize() { epdEnable(); pr("Setting up EPD\n"); @@ -36,11 +38,6 @@ void epdInitialize() { timerDelay(1333); } -extern uint8_t __xdata curChannel; - -extern uint8_t __xdata curPendingData; -extern uint8_t __xdata curNoUpdate; - void epdShowRun() { epdClear(); epdSetPos(0); @@ -71,4 +68,28 @@ void epdShowRun() { } } +#endif + +#if (SCREEN_WIDTH != 1) + +void epdInitialize() { + epdConfigGPIO(true); + spiInit(); + epdSetup(); +} + +void epdShowRun() { + // return; + wdt60s(); + selectLUT(EPD_LUT_NO_REPEATS); + clearScreen(); + setColorMode(EPD_MODE_NORMAL, EPD_MODE_INVERT); + epdPrintBegin(16, 55, EPD_DIRECTION_X, EPD_SIZE_DOUBLE, EPD_COLOR_BLACK); + epdpr("AP Mode"); + epdPrintEnd(); + drawNoWait(); +} + +#endif + #endif \ No newline at end of file diff --git a/zbs243_AP_FW/Makefile b/zbs243_AP_FW/Makefile index a1aa836e..ea233c4b 100644 --- a/zbs243_AP_FW/Makefile +++ b/zbs243_AP_FW/Makefile @@ -5,6 +5,8 @@ BUILD ?= zbs29v033 SOURCES += main.c SOURCES += comms.c SOURCES += APDisplay.c +SOURCES += barcode.c +SOURCES += emulateTag.c all: #make sure it is the first target diff --git a/zbs243_AP_FW/builder.php b/zbs243_AP_FW/builder.php index d93607f6..21af91eb 100644 --- a/zbs243_AP_FW/builder.php +++ b/zbs243_AP_FW/builder.php @@ -23,7 +23,7 @@ $stackdisturbed = false; $mem = checkmem(); while(1){ $errlist = array(); - exec("make BUILD=zbs29v033 CPU=8051 SOC=zbs243 2>&1 | grep error | grep -v make", $errlist); + exec("make BUILD=zbs154v033 CPU=8051 SOC=zbs243 2>&1 | grep error | grep -v make", $errlist); if(checkmem()!=$mem){ $stackdisturbed = true; echo "Stack size was $mem, is now ".checkmem()." !!!\n"; diff --git a/zbs243_AP_FW/buildfw.sh b/zbs243_AP_FW/buildfw.sh index 37ee6f35..f91368c5 100755 --- a/zbs243_AP_FW/buildfw.sh +++ b/zbs243_AP_FW/buildfw.sh @@ -12,7 +12,7 @@ make BUILD=zbs_nodisplay CPU=8051 SOC=zbs243 > /dev/null mv main.bin ../binaries/AP_FW_Nodisplay.bin -v make clean > /dev/null -echo -e "\n\nBuilding 2.9 version..." -make BUILD=zbs29v033 CPU=8051 SOC=zbs243 > /dev/null -mv main.bin ../binaries/AP_FW_2.9.bin -v +echo -e "\n\nBuilding 1.54 version..." +make BUILD=zbs154v033 CPU=8051 SOC=zbs243 > /dev/null +mv main.bin ../binaries/AP_FW_1.54.bin -v make clean > /dev/null diff --git a/zbs243_AP_FW/emulateTag.c b/zbs243_AP_FW/emulateTag.c new file mode 100755 index 00000000..4c8d2bd7 --- /dev/null +++ b/zbs243_AP_FW/emulateTag.c @@ -0,0 +1,124 @@ +#define __packed +#include "board.h" + +#if (HAS_SCREEN == 1 && AP_EMULATE_TAG == 1) +#include +#include +#include +#include +#include + +#include "asmUtil.h" +#include "comms.h" +#include "cpu.h" +#include "printf.h" +#include "proto.h" +#include "radio.h" +#include "screen.h" +#include "timer.h" +#include "uart.h" +#include "wdt.h" + +extern uint8_t __xdata fakeTagMac[8] = {0x0, 0x00, 0x55, 0xCE, 0xAC, 0x00, 0x00}; +extern uint8_t __xdata radiorxbuffer[]; +extern uint8_t __xdata blockbuffer[]; +extern void espNotifyAvailDataReq(const struct AvailDataReq *adr, const uint8_t *src); +extern void espBlockRequest(const struct blockRequest *br); +extern void espNotifyXferComplete(const uint8_t *src); + +extern void addCRC(void *p, uint8_t len); +bool __xdata fakeTagTrafficPending = false; + +static struct AvailDataInfo __xdata ad; +static uint8_t blockCount = 0; +static uint32_t __xdata lastRequest = 0; +static bool dataRequested = false; + +static bool validateBlockData() { + struct blockData *bd = (struct blockData *)blockbuffer; + // pr("expected len = %04X, checksum=%04X\n", bd->size, bd->checksum); + uint16_t t = 0; + for (uint16_t c = 0; c < bd->size; c++) { + t += bd->data[c]; + } + return bd->checksum == t; +} + +uint16_t epdByteCounter = 0; +void epdWriteByte(uint8_t b) { + epdSend(b); + epdByteCounter++; + // check if we need to switch to a + if (epdByteCounter == (SCREEN_HEIGHT * SCREEN_WIDTH / 8)) { + epdDeselect(); + endWriteFramebuffer(); + beginWriteFramebuffer(EPD_COLOR_RED); + epdSelect(); + } +} + +void fakeTagGetData() { + if ((timerGet() - lastRequest) > (1200UL * 1333)) { + if (dataRequested == false) { + if (ad.dataSize) { + struct blockRequest br; + br.blockId = blockCount; + br.ver = ad.dataVer; + espBlockRequest(&br); + dataRequested = true; + } + } else { + if (validateBlockData()) { + struct blockData *bd = (struct blockData *)blockbuffer; + if (blockCount == 0) { + epdByteCounter = 0; + clearScreen(); + selectLUT(ad.dataTypeArgument % 3); + beginFullscreenImage(); + beginWriteFramebuffer(EPD_COLOR_BLACK); + epdSelect(); + } + for (uint16_t c = 0; c < bd->size; c++) { + epdWriteByte(bd->data[c]); + } + ad.dataSize -= bd->size; + blockCount++; + } else { + // request data again! + } + if (ad.dataSize) { + } else { + epdDeselect(); + endWriteFramebuffer(); + espNotifyXferComplete(fakeTagMac); + fakeTagTrafficPending = false; + drawNoWait(); + } + dataRequested = false; + } + } +} + +void fakePendingData(struct pendingData *pd) { + if ((pd->availdatainfo.dataType == DATATYPE_IMG_RAW_1BPP) || (pd->availdatainfo.dataType == DATATYPE_IMG_RAW_2BPP) || (pd->availdatainfo.dataType == DATATYPE_IMG_RAW_1BPP_DIRECT)) { + memcpy(&ad, &(pd->availdatainfo), sizeof(struct AvailDataInfo)); + blockCount = 0; + fakeTagTrafficPending = true; + dataRequested = false; + } +} + +void fakeTagCheckIn() { + struct AvailDataReq *adr = (struct AvailDataReq *)radiorxbuffer; + + memset(adr, 0, sizeof(struct AvailDataReq)); + adr->batteryMv = 1337; + adr->hwType = HW_TYPE; + adr->lastPacketLQI = 100; + adr->lastPacketRSSI = 100; + adr->wakeupReason = 0; + addCRC(adr, sizeof(struct AvailDataReq)); + espNotifyAvailDataReq(adr, fakeTagMac); +} + +#endif \ No newline at end of file diff --git a/zbs243_AP_FW/emulateTag.h b/zbs243_AP_FW/emulateTag.h new file mode 100755 index 00000000..a82aa600 --- /dev/null +++ b/zbs243_AP_FW/emulateTag.h @@ -0,0 +1,11 @@ +#ifndef _AP_EMULATE_H_ +#define _AP_EMULATE_H_ + +void fakeTagCheckIn(); + +extern uint8_t __xdata fakeTagMac[8]; +extern bool __xdata fakeTagTrafficPending; +extern void fakePendingData(struct pendingData* pd); +extern void fakeTagGetData(); + +#endif \ No newline at end of file diff --git a/zbs243_AP_FW/main.c b/zbs243_AP_FW/main.c index 897c5245..c51e3ad8 100755 --- a/zbs243_AP_FW/main.c +++ b/zbs243_AP_FW/main.c @@ -20,6 +20,10 @@ #include "APDisplay.h" #endif +#if (AP_EMULATE_TAG == 1) +#include "emulateTag.h" +#endif + #define MAX_PENDING_MACS 50 #define HOUSEKEEPING_INTERVAL 60UL @@ -75,6 +79,8 @@ uint8_t seq = 0; // holds current seque uint8_t __xdata blockbuffer[BLOCK_XFER_BUFFER_SIZE + 5]; // block transfer buffer uint8_t lastAckMac[8] = {0}; +uint8_t *__xdata blockXferBuffer = blockbuffer; + // these variables hold the current mac were talking to #define CONCURRENT_REQUEST_DELAY 1200UL * TIMER_TICKS_PER_MS uint32_t __xdata lastBlockRequest = 0; @@ -211,7 +217,7 @@ void countSlots() { extern uint8_t *__idata blockp; void processSerial(uint8_t lastchar) { static uint32_t __xdata lastSerial = 0; - if((timerGet() - lastSerial)>(TIMER_TICKS_PER_MS*25)){ + if ((timerGet() - lastSerial) > (TIMER_TICKS_PER_MS * 25)) { RXState = ZBS_RX_WAIT_HEADER; lastSerial = timerGet(); } else { @@ -262,14 +268,23 @@ void processSerial(uint8_t lastchar) { if (bytesRemain == 0) { if (checkCRC(serialbuffer, sizeof(struct pendingData))) { struct pendingData *pd = (struct pendingData *)serialbuffer; - int8_t slot = findSlotForMac(pd->targetMac); - if (slot == -1) slot = findFreeSlot(); - if (slot != -1) { - xMemCopyShort(&(pendingDataArr[slot]), serialbuffer, sizeof(struct pendingData)); +#if (AP_EMULATE_TAG == 1) + if (memcmp(pd->targetMac, fakeTagMac, 8) == 0) { + fakePendingData(pd); pr("ACK>\n"); } else { - pr("NOQ>\n"); +#endif + int8_t slot = findSlotForMac(pd->targetMac); + if (slot == -1) slot = findFreeSlot(); + if (slot != -1) { + xMemCopyShort(&(pendingDataArr[slot]), serialbuffer, sizeof(struct pendingData)); + pr("ACK>\n"); + } else { + pr("NOQ>\n"); + } +#if (AP_EMULATE_TAG == 1) } +#endif } else { pr("NOK>\n"); } @@ -284,8 +299,17 @@ void processSerial(uint8_t lastchar) { if (bytesRemain == 0) { if (checkCRC(serialbuffer, sizeof(struct pendingData))) { struct pendingData *pd = (struct pendingData *)serialbuffer; - deleteAllPendingDataForVer((uint8_t *)&pd->availdatainfo.dataVer); - pr("ACK>\n"); +#if (AP_EMULATE_TAG == 1) + if (memcmp(pd->targetMac, fakeTagMac, 8) == 0) { + fakeTagTrafficPending = false; + pr("ACK>\n"); + } else { +#endif + deleteAllPendingDataForVer((uint8_t *)&pd->availdatainfo.dataVer); + pr("ACK>\n"); +#if (AP_EMULATE_TAG == 1) + } +#endif } else { pr("NOK>\n"); } @@ -367,10 +391,9 @@ void processBlockRequest(const uint8_t *buffer, uint8_t forceBlockDownload) { // mark this mac as the new current mac we're talking to xMemCopyShort((void *__xdata)lastBlockMac, (void *__xdata)rxHeader->src, 8); lastBlockRequest = timerGet(); - // memcpy(lastBlockRequest, rxHeader->src, 8); } else { // we're talking to another mac, let this mac know we can't accomodate another request right now - pr("not accepting traffic from this tag\n"); + pr("BUSY!\n"); sendCancelXfer(rxHeader->src); return; } @@ -594,13 +617,40 @@ void sendPong(void *__xdata buf) { radioTx(radiotxbuffer); } +#if (AP_EMULATE_TAG == 1) +void attemptFakeTagUpdate() { + if (memcmp(fakeTagMac, lastBlockMac, 8) == 0) { + lastBlockRequest = timerGet(); + fakeTagGetData(); + } else { + // we weren't talking to this mac, see if there was a transfer in progress from another mac, recently + if ((timerGet() - lastBlockRequest) > CONCURRENT_REQUEST_DELAY) { + // mark this mac as the new current mac we're talking to + xMemCopyShort((void *__xdata)lastBlockMac, (void *__xdata)fakeTagMac, 8); + lastBlockRequest = timerGet(); + fakeTagGetData(); + } else { + // we're talking to another mac, let this mac know we can't accomodate another request right now + pr("FAKE TAG BUSY!\n"); + } + } +} +#endif + // main loop void main(void) { clockingAndIntsInit(); timerInit(); boardInit(); + P0FUNC = 0b11001111; // enable uart tx/rx and SPI bus functions + uartInit(); + +#if (HAS_SCREEN == 1) + epdInitialize(); +#endif + irqsOn(); wdt60s(); @@ -617,10 +667,6 @@ void main(void) { radioInit(); radioRxFilterCfg(mSelfMac, 0x10000, PROTO_PAN_ID); -#if (HAS_SCREEN == 1) - epdInitialize(); -#endif - // init the "random" number generation unit rndSeed(mSelfMac[0] ^ (uint8_t)timerGetLowBits(), mSelfMac[1]); radioSetChannel(curChannel); @@ -689,10 +735,15 @@ void main(void) { } loopCount--; if (loopCount == 0) { - #if (HAS_SCREEN == 1) +#if (HAS_SCREEN == 1) + +#if (AP_EMULATE_TAG == 1) + if (fakeTagTrafficPending) attemptFakeTagUpdate(); +#else countSlots(); epdShowRun(); - #endif +#endif +#endif wdt60s(); loopCount = 10000; // every once in a while, especially when handling a lot of traffic, the radio will hang. Calling this every once in while @@ -700,7 +751,9 @@ void main(void) { RADIO_command = RADIO_CMD_RECEIVE; } } - +#if (AP_EMULATE_TAG == 1) + fakeTagCheckIn(); +#endif for (uint8_t __xdata c = 0; c < MAX_PENDING_MACS; c++) { if (pendingDataArr[c].attemptsLeft == 1) { espNotifyTimeOut(pendingDataArr[c].targetMac); @@ -712,4 +765,4 @@ void main(void) { } housekeepingTimer = timerGet(); } -} \ No newline at end of file +} diff --git a/zbs243_Tag_FW/buildfw.sh b/zbs243_Tag_FW/buildfw.sh index 446f602c..ecd94cef 100755 --- a/zbs243_Tag_FW/buildfw.sh +++ b/zbs243_Tag_FW/buildfw.sh @@ -1,18 +1,22 @@ #!/bin/bash -make clean +make clean > /dev/null -make BUILD=zbs154v033 CPU=8051 SOC=zbs243 -mv main.bin ../binaries/Tag_FW_1.54.bin -make clean +echo -e "\nBuilding 1.54 version..." +make BUILD=zbs154v033 CPU=8051 SOC=zbs243 > /dev/null +mv main.bin ../binaries/Tag_FW_1.54.bin -v +make clean > /dev/null -make BUILD=zbs29v033 CPU=8051 SOC=zbs243 -mv main.bin ../binaries/Tag_FW_2.9.bin -make clean +echo -e "\n\nBuilding 2.9 (SSD1619) version..." +make BUILD=zbs29v033 CPU=8051 SOC=zbs243 > /dev/null +mv main.bin ../binaries/Tag_FW_2.9.bin -v +make clean > /dev/null -make BUILD=zbs42v033 CPU=8051 SOC=zbs243 -mv main.bin ../binaries/Tag_FW_4.2.bin -make clean +echo -e "\n\nBuilding 4.2 version..." +make BUILD=zbs42v033 CPU=8051 SOC=zbs243 > /dev/null +mv main.bin ../binaries/Tag_FW_4.2.bin -v +make clean > /dev/null -make BUILD=zbs29_uc8151 CPU=8051 SOC=zbs243 -mv main.bin ../binaries/Tag_FW_2.9-uc8151.bin -make clean +echo -e "\n\nBuilding 2.9 (UC8151) version..." +make BUILD=zbs29_uc8151 CPU=8051 SOC=zbs243 > /dev/null +mv main.bin ../binaries/Tag_FW_2.9-uc8151.bin -v +make clean > /dev/null diff --git a/zbs243_shared/board/ssd1619.c b/zbs243_shared/board/ssd1619.c index 89530ec6..dd9d6087 100644 --- a/zbs243_shared/board/ssd1619.c +++ b/zbs243_shared/board/ssd1619.c @@ -10,7 +10,7 @@ #include "lut.h" #include "printf.h" #include "screen.h" -#include "settings.h" +//#include "settings.h" #include "sleep.h" #include "spi.h" #include "timer.h" diff --git a/zbs243_shared/board/zbs154v033/board.h b/zbs243_shared/board/zbs154v033/board.h old mode 100644 new mode 100755 index a6734698..706d78a2 --- a/zbs243_shared/board/zbs154v033/board.h +++ b/zbs243_shared/board/zbs154v033/board.h @@ -22,6 +22,7 @@ #define HAS_EEPROM 1 #define HAS_SCREEN 1 +#define AP_EMULATE_TAG 1 //hw types #define HW_TYPE SOLUM_154_033 diff --git a/zbs243_shared/board/zbs29_uc8151/board.h b/zbs243_shared/board/zbs29_uc8151/board.h old mode 100644 new mode 100755 index b4f4937e..b7282111 --- a/zbs243_shared/board/zbs29_uc8151/board.h +++ b/zbs243_shared/board/zbs29_uc8151/board.h @@ -21,6 +21,7 @@ #define HAS_EEPROM 1 #define HAS_SCREEN 1 +#define AP_EMULATE_TAG 1 //hw types #define HW_TYPE SOLUM_29_033 diff --git a/zbs243_shared/board/zbs29v033/board.h b/zbs243_shared/board/zbs29v033/board.h old mode 100644 new mode 100755 index b4f4937e..b7282111 --- a/zbs243_shared/board/zbs29v033/board.h +++ b/zbs243_shared/board/zbs29v033/board.h @@ -21,6 +21,7 @@ #define HAS_EEPROM 1 #define HAS_SCREEN 1 +#define AP_EMULATE_TAG 1 //hw types #define HW_TYPE SOLUM_29_033 diff --git a/zbs243_shared/board/zbs42v033/board.h b/zbs243_shared/board/zbs42v033/board.h old mode 100644 new mode 100755 index b788aa2f..cdc1d3bd --- a/zbs243_shared/board/zbs42v033/board.h +++ b/zbs243_shared/board/zbs42v033/board.h @@ -22,6 +22,7 @@ #define HAS_EEPROM 1 #define HAS_SCREEN 1 +#define AP_EMULATE_TAG 1 //hw types #define HW_TYPE SOLUM_42_033 diff --git a/zbs243_shared/board/zbs_nodisplay/board.h b/zbs243_shared/board/zbs_nodisplay/board.h old mode 100644 new mode 100755 index 57ad2c75..c9bbe9a9 --- a/zbs243_shared/board/zbs_nodisplay/board.h +++ b/zbs243_shared/board/zbs_nodisplay/board.h @@ -8,6 +8,7 @@ #define HAS_EEPROM 0 #define HAS_SCREEN 0 #define HW_TYPE SOLUM_NODISPLAY +#define AP_EMULATE_TAG 0 #include "../boardCommon.h" diff --git a/zbs243_shared/board/zbs_segmented_uk/board.h b/zbs243_shared/board/zbs_segmented_uk/board.h old mode 100644 new mode 100755 index b597d3fd..4e7ea09b --- a/zbs243_shared/board/zbs_segmented_uk/board.h +++ b/zbs243_shared/board/zbs_segmented_uk/board.h @@ -7,6 +7,7 @@ #define HAS_EEPROM 0 #define HAS_SCREEN 1 +#define AP_EMULATE_TAG 0 #define HW_TYPE SOLUM_SEG_UK diff --git a/zbs243_shared/cpu/8051/cpu.c b/zbs243_shared/cpu/8051/cpu.c index 254cdec1..394537ec 100644 --- a/zbs243_shared/cpu/8051/cpu.c +++ b/zbs243_shared/cpu/8051/cpu.c @@ -1 +1,2 @@ //nothing +#include // if we include something, we won't get a warning at compile time diff --git a/zbs243_shared/soc/zbs243/flash.c b/zbs243_shared/soc/zbs243/flash.c index 69900a24..e8c566e2 100644 --- a/zbs243_shared/soc/zbs243/flash.c +++ b/zbs243_shared/soc/zbs243/flash.c @@ -25,7 +25,7 @@ static uint8_t flashAddrCheck(uint32_t flashAddr, uint16_t len) __reentrant /* t break; case 0x80: - if (pgNo) + if (pgNo)//hmm return 0xff; pgNo = 0x80; break;