diff --git a/ARM_Tag_FW/OpenEPaperLink_esp32_C6_AP/main/SubGigRadio.c b/ARM_Tag_FW/OpenEPaperLink_esp32_C6_AP/main/SubGigRadio.c index 450604ea..9b5dc62f 100755 --- a/ARM_Tag_FW/OpenEPaperLink_esp32_C6_AP/main/SubGigRadio.c +++ b/ARM_Tag_FW/OpenEPaperLink_esp32_C6_AP/main/SubGigRadio.c @@ -18,6 +18,9 @@ void DumpHex(void *AdrIn,int Len); +#define LOGE(format, ... ) \ + printf("%s#%d: " format,__FUNCTION__,__LINE__,## __VA_ARGS__) + #if 0 #define LOG(format, ... ) printf("%s: " format,__FUNCTION__,## __VA_ARGS__) #define LOG_RAW(format, ... ) printf(format,## __VA_ARGS__) @@ -219,6 +222,7 @@ static void IRAM_ATTR gpio_isr_handler(void *arg) gSubGigData.RxAvailable = true; } +// return SUBGIG_ERR_NONE aka ESP_OK aka 0 if CC1101 is detected and all is good SubGigErr SubGig_radio_init(uint8_t ch) { esp_err_t Err; @@ -300,18 +304,20 @@ SubGigErr SubGig_radio_init(uint8_t ch) SubGig_CC1101_reset(); CC1101_SetConfig(NULL); SubGig_CC1101_SetConfig(gDmitry915); -#if 1 +#if 0 CC1101_DumpRegs(); #endif if(ch != 0) { SubGig_radioSetChannel(ch); } // good to go! - Ret = true; } while(false); if(ErrLine != 0) { LOG("%s#%d: failed %d\n",__FUNCTION__,ErrLine,Err); + if(Err == 0) { + Ret = ESP_FAIL; + } } return Ret; } @@ -426,7 +432,16 @@ int8_t SubGig_commsRxUnencrypted(uint8_t *data) if(gSubGigData.FreqTest) { break; } - if(gSubGigData.RxAvailable) { + if(!gSubGigData.RxAvailable && gpio_get_level(CONFIG_GDO0_GPIO) == 1) { + // Did we miss an interrupt? + if(gpio_get_level(CONFIG_GDO0_GPIO) == 1) { + // Yup! + LOGE("SubGhz lost interrupt\n"); + gSubGigData.RxAvailable = true; + } + } + + if(gSubGigData.RxAvailable){ gSubGigData.RxAvailable = false; RxBytes = CC1101_Rx(data,128,NULL,NULL); diff --git a/ARM_Tag_FW/OpenEPaperLink_esp32_C6_AP/main/cc1101_radio.c b/ARM_Tag_FW/OpenEPaperLink_esp32_C6_AP/main/cc1101_radio.c index a66966fd..63f65f66 100755 --- a/ARM_Tag_FW/OpenEPaperLink_esp32_C6_AP/main/cc1101_radio.c +++ b/ARM_Tag_FW/OpenEPaperLink_esp32_C6_AP/main/cc1101_radio.c @@ -142,10 +142,16 @@ enum RFSTATE { // IOCFG2 GDO2: high when TX FIFO at or above the TX FIFO threshold #define CC1101_DEFVAL_IOCFG2 0x02 + +// IOCFG1 GDO1: High impedance (3-state) #define CC1101_DEFVAL_IOCFG1 0x2E -// GDO0 Asserts when sync word has been sent / received, and -// de-asserts at the end of the packet. + +// GDO0 goes high when sync word has been sent / received, and +// goes low at the end of the packet. +// In TX mode the pin will go low if the TX FIFO underflows. #define CC1101_DEFVAL_IOCFG0 0x06 + +// Threshold = 32 bytes (1/2 of FIFO len) #define CC1101_DEFVAL_FIFOTHR 0x07 #define CC1101_DEFVAL_RCCTRL1 0x41 #define CC1101_DEFVAL_RCCTRL0 0x00 diff --git a/ARM_Tag_FW/OpenEPaperLink_esp32_C6_AP/main/main.c b/ARM_Tag_FW/OpenEPaperLink_esp32_C6_AP/main/main.c index e7611aba..1e5e13b3 100644 --- a/ARM_Tag_FW/OpenEPaperLink_esp32_C6_AP/main/main.c +++ b/ARM_Tag_FW/OpenEPaperLink_esp32_C6_AP/main/main.c @@ -668,6 +668,11 @@ void sendBlockData() { partNo++; } } + if(dstPan == PROTO_PAN_ID_SUBGHZ) { + // Don't send BLOCK_MAX_PARTS for subgig, it requests what it + // can handle with its limited RAM + break; + } } } void sendXferCompleteAck(uint8_t *dst) { @@ -734,7 +739,7 @@ void app_main(void) { radio_init(curChannel); #ifdef CONFIG_OEPL_SUBGIG_SUPPORT - if(!SubGig_radio_init(curSubGhzChannel)) { + if(SubGig_radio_init(curSubGhzChannel)) { // Ether we don't have a cc1101 or it's not working curSubGhzChannel = NO_SUBGHZ_CHANNEL; ESP_LOGI(TAG,"CC1101 NOT detected."); diff --git a/ESP32_AP-Flasher/platformio.ini b/ESP32_AP-Flasher/platformio.ini index e822897a..a229c637 100644 --- a/ESP32_AP-Flasher/platformio.ini +++ b/ESP32_AP-Flasher/platformio.ini @@ -434,6 +434,7 @@ build_flags = -D SERIAL_FLASHER_BOOT_HOLD_TIME_MS=200 -D SERIAL_FLASHER_RESET_HOLD_TIME_MS=200 -D C6_OTA_FLASHING + -D HAS_SUBGHZ build_src_filter = +<*> board_build.flash_mode=qio