From c95e576ef39029daf573ef5229abfbbe20dfaa06 Mon Sep 17 00:00:00 2001 From: Pascal Langer Date: Thu, 18 Jun 2020 10:53:03 +0200 Subject: [PATCH] DSM RX: end bind and increased retry --- Multiprotocol/DSM_Rx_cyrf6936.ino | 11 ++++++++--- Multiprotocol/DSM_cyrf6936.ino | 33 +++++++++++++++++++++---------- Multiprotocol/Multiprotocol.h | 2 +- Multiprotocol/Multiprotocol.ino | 4 ++-- 4 files changed, 34 insertions(+), 16 deletions(-) diff --git a/Multiprotocol/DSM_Rx_cyrf6936.ino b/Multiprotocol/DSM_Rx_cyrf6936.ino index 1e85834..eecc107 100644 --- a/Multiprotocol/DSM_Rx_cyrf6936.ino +++ b/Multiprotocol/DSM_Rx_cyrf6936.ino @@ -215,15 +215,20 @@ uint16_t DSM_Rx_callback() switch (phase) { case DSM_RX_BIND1: + if(IS_BIND_DONE) // Abort bind + { + phase = DSM_RX_DATA_PREP; + break; + } if(packet_count==0) read_retry=0; //Check received data rx_status = CYRF_ReadRegister(CYRF_07_RX_IRQ_STATUS); - if((rx_status & 0x03) == 0x02) // RXC=1, RXE=0 then 2nd check is required (debouncing) + if((rx_status & 0x03) == 0x02) // RXC=1, RXE=0 then 2nd check is required (debouncing) rx_status |= CYRF_ReadRegister(CYRF_07_RX_IRQ_STATUS); if((rx_status & 0x07) == 0x02) { // data received with no errors - CYRF_WriteRegister(CYRF_07_RX_IRQ_STATUS, 0x80); // Need to set RXOW before data read + CYRF_WriteRegister(CYRF_07_RX_IRQ_STATUS, 0x80); // Need to set RXOW before data read len=CYRF_ReadRegister(CYRF_09_RX_COUNT); debugln("RX:%d, CH:%d",len,hopping_frequency_no); if(len==16) @@ -284,7 +289,7 @@ uint16_t DSM_Rx_callback() } DSM_abort_channel_rx(0); // Abort RX operation and receive if(read_retry==0) - read_retry=4; + read_retry=8; } else if(rx_status & 0x02) // RX error diff --git a/Multiprotocol/DSM_cyrf6936.ino b/Multiprotocol/DSM_cyrf6936.ino index 4a0759a..be19c09 100644 --- a/Multiprotocol/DSM_cyrf6936.ino +++ b/Multiprotocol/DSM_cyrf6936.ino @@ -17,6 +17,8 @@ #include "iface_cyrf6936.h" +//#define DSM_GR300 + #define DSM_BIND_CHANNEL 0x0d //13 This can be any odd channel //During binding we will send BIND_COUNT/2 packets @@ -220,8 +222,11 @@ uint16_t ReadDsm() uint8_t len; #endif uint8_t start; - uint16_t timing=5000+(convert_channel_8b(CH13)*100); - //debugln("T=%u",timing); + + #ifdef DSM_GR300 + uint16_t timing=5000+(convert_channel_8b(CH13)*100); + debugln("T=%u",timing); + #endif switch(phase) { @@ -345,8 +350,10 @@ uint16_t ReadDsm() phase++; // change from CH2_CHECK to CH2_READ CYRF_SetTxRxMode(RX_EN); //Receive mode CYRF_WriteRegister(CYRF_05_RX_CTRL, 0x87); //0x80??? //Prepare to receive - if(num_ch==3) - return timing - DSM_CH1_CH2_DELAY - DSM_WRITE_DELAY - DSM_READ_DELAY; + #ifdef DSM_GR300 + if(num_ch==3) + return timing - DSM_CH1_CH2_DELAY - DSM_WRITE_DELAY - DSM_READ_DELAY; + #endif return 11000 - DSM_CH1_CH2_DELAY - DSM_WRITE_DELAY - DSM_READ_DELAY; case DSM_CH2_READ_A: case DSM_CH2_READ_B: @@ -371,8 +378,10 @@ uint16_t ReadDsm() CYRF_WriteRegister(CYRF_29_RX_ABORT, 0x00); // Clear abort RX operation CYRF_WriteRegister(CYRF_05_RX_CTRL, 0x87); //0x80??? //Prepare to receive phase = DSM_CH2_READ_B; - if(num_ch==3) - return timing; + #ifdef DSM_GR300 + if(num_ch==3) + return timing; + #endif return 11000; } if (phase == DSM_CH2_READ_A) @@ -393,15 +402,19 @@ uint16_t ReadDsm() else { //Normal mode 22ms phase = DSM_CH1_WRITE_A; // change from CH2_CHECK_A to CH1_WRITE_A (ie no upper) - if(num_ch==3) - return timing - DSM_CH1_CH2_DELAY - DSM_WRITE_DELAY ; + #ifdef DSM_GR300 + if(num_ch==3) + return timing - DSM_CH1_CH2_DELAY - DSM_WRITE_DELAY ; + #endif return 22000 - DSM_CH1_CH2_DELAY - DSM_WRITE_DELAY ; } } else phase = DSM_CH1_WRITE_A; // change from CH2_CHECK_B to CH1_WRITE_A (upper already transmitted so transmit lower) - if(num_ch==3) - return timing - DSM_CH1_CH2_DELAY - DSM_WRITE_DELAY ; + #ifdef DSM_GR300 + if(num_ch==3) + return timing - DSM_CH1_CH2_DELAY - DSM_WRITE_DELAY ; + #endif return 11000 - DSM_CH1_CH2_DELAY - DSM_WRITE_DELAY; #endif } diff --git a/Multiprotocol/Multiprotocol.h b/Multiprotocol/Multiprotocol.h index 598bc7b..8e39964 100644 --- a/Multiprotocol/Multiprotocol.h +++ b/Multiprotocol/Multiprotocol.h @@ -19,7 +19,7 @@ #define VERSION_MAJOR 1 #define VERSION_MINOR 3 #define VERSION_REVISION 1 -#define VERSION_PATCH_LEVEL 20 +#define VERSION_PATCH_LEVEL 21 //****************** // Protocols diff --git a/Multiprotocol/Multiprotocol.ino b/Multiprotocol/Multiprotocol.ino index adb809a..690d650 100644 --- a/Multiprotocol/Multiprotocol.ino +++ b/Multiprotocol/Multiprotocol.ino @@ -1808,8 +1808,8 @@ void update_serial_data() else if( ((rx_ok_buff[1]&0x80)==0) && ((cur_protocol[1]&0x80)!=0) ) // Bind flag has been reset { // Request protocol to end bind - #if defined(FRSKYD_CC2500_INO) || defined(FRSKYL_CC2500_INO) || defined(FRSKYX_CC2500_INO) || defined(FRSKYV_CC2500_INO) || defined(AFHDS2A_A7105_INO) || defined(FRSKYR9_SX1276_INO) - if(protocol==PROTO_FRSKYD || protocol==PROTO_FRSKYL || protocol==PROTO_FRSKYX || protocol==PROTO_FRSKYX2 || protocol==PROTO_FRSKYV || protocol==PROTO_AFHDS2A || protocol==PROTO_FRSKY_R9 ) + #if defined(FRSKYD_CC2500_INO) || defined(FRSKYL_CC2500_INO) || defined(FRSKYX_CC2500_INO) || defined(FRSKYV_CC2500_INO) || defined(AFHDS2A_A7105_INO) || defined(FRSKYR9_SX1276_INO) || defined(DSM_RX_CYRF6936_INO) + if(protocol==PROTO_FRSKYD || protocol==PROTO_FRSKYL || protocol==PROTO_FRSKYX || protocol==PROTO_FRSKYX2 || protocol==PROTO_FRSKYV || protocol==PROTO_AFHDS2A || protocol==PROTO_FRSKY_R9 || protocol==PROTO_DSM_RX) BIND_DONE; else #endif