mirror of
https://github.com/OpenEPaperLink/OpenEPaperLink.git
synced 2026-03-21 05:06:39 +01:00
SubGhz radio fixes. (#288)
* SubGhz radio fixes. 1. Don't for sending of BLOCK_MAX_PARTS parts for subGhz. 2. Fix CC1101 module detection logic. 3. Mitigate for lost CC1101 interrupts. * Enabled SubGhz for OpenEPaperLink_Mini_AP_v4.
This commit is contained in:
@@ -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);
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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.");
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user