diff --git a/Multiprotocol/Common.ino b/Multiprotocol/Common.ino index 1de24e5..b8a87be 100644 --- a/Multiprotocol/Common.ino +++ b/Multiprotocol/Common.ino @@ -82,6 +82,16 @@ uint16_t limit_channel_100(uint8_t ch) /** FrSky D and X routines **/ /******************************/ #if defined(FRSKYD_CC2500_INO) || defined(FRSKYX_CC2500_INO) +enum { + FRSKY_BIND = 0, + FRSKY_BIND_DONE = 1000, + FRSKY_DATA1, + FRSKY_DATA2, + FRSKY_DATA3, + FRSKY_DATA4, + FRSKY_DATA5 +}; + void Frsky_init_hop(void) { uint8_t val; diff --git a/Multiprotocol/FrSkyD_cc2500.ino b/Multiprotocol/FrSkyD_cc2500.ino index 4277789..2155626 100644 --- a/Multiprotocol/FrSkyD_cc2500.ino +++ b/Multiprotocol/FrSkyD_cc2500.ino @@ -120,7 +120,10 @@ uint16_t ReadFrSky_2way() CC2500_WriteReg(CC2500_23_FSCAL3, 0x89); CC2500_Strobe(CC2500_SFRX);//0x3A CC2500_WriteData(packet, packet[0]+1); - state++; + if(IS_BIND_DONE_on) + state = FRSKY_BIND_DONE; + else + state++; return 9000; } if (state == FRSKY_BIND_DONE) diff --git a/Multiprotocol/FrSkyX_cc2500.ino b/Multiprotocol/FrSkyX_cc2500.ino index 22dfa22..3d69d08 100644 --- a/Multiprotocol/FrSkyX_cc2500.ino +++ b/Multiprotocol/FrSkyX_cc2500.ino @@ -183,7 +183,10 @@ uint16_t ReadFrSkyX() frskyX_build_bind_packet(); CC2500_Strobe(CC2500_SIDLE); CC2500_WriteData(packet, packet[0]+1); - state++; + if(IS_BIND_DONE_on) + state = FRSKY_BIND_DONE; + else + state++; return 9000; case FRSKY_BIND_DONE: initialize_data(0); diff --git a/Multiprotocol/MT99xx_nrf24l01.ino b/Multiprotocol/MT99xx_nrf24l01.ino index 29a21f7..705a77c 100644 --- a/Multiprotocol/MT99xx_nrf24l01.ino +++ b/Multiprotocol/MT99xx_nrf24l01.ino @@ -261,7 +261,8 @@ uint16_t initMT99XX(void) bind_counter = MT99XX_BIND_COUNT; memcpy(hopping_frequency,"\x02\x48\x0C\x3e\x16\x34\x20\x2A\x2A\x20\x34\x16\x3e\x0c\x48\x02",16); - + hopping_frequency_no=0; + MT99XX_initialize_txid(); MT99XX_init(); diff --git a/Multiprotocol/Multiprotocol.h b/Multiprotocol/Multiprotocol.h index e08b52f..7117cd6 100644 --- a/Multiprotocol/Multiprotocol.h +++ b/Multiprotocol/Multiprotocol.h @@ -19,7 +19,7 @@ #define VERSION_MAJOR 1 #define VERSION_MINOR 1 #define VERSION_REVISION 6 -#define VERSION_PATCH_LEVEL 14 +#define VERSION_PATCH_LEVEL 15 //****************** // Protocols //****************** diff --git a/Multiprotocol/Multiprotocol.ino b/Multiprotocol/Multiprotocol.ino index a7c64ff..d6d9766 100644 --- a/Multiprotocol/Multiprotocol.ino +++ b/Multiprotocol/Multiprotocol.ino @@ -505,7 +505,16 @@ uint8_t Update_All() BIND_CH_PREV_on; } if(IS_BIND_CH_PREV_on && Servo_data[BIND_CH-1]2) + bind_counter=2; + } #endif //ENABLE_BIND_CH if(IS_CHANGE_PROTOCOL_FLAG_on) { // Protocol needs to be changed or relaunched for bind @@ -964,10 +973,20 @@ void update_serial_data() RX_num=rx_ok_buff[2]& 0x0F; // rx_num bits 0---3 } else - if( ((rx_ok_buff[1]&0x80)!=0) && ((cur_protocol[1]&0x80)==0) ) // Bind flag has been set + if( ((rx_ok_buff[1]&0x80)!=0) && ((cur_protocol[1]&0x80)==0) ) // Bind flag has been set CHANGE_PROTOCOL_FLAG_on; //restart protocol with bind else - CHANGE_PROTOCOL_FLAG_off; //no need to restart + if( ((rx_ok_buff[1]&0x80)==0) && ((cur_protocol[1]&0x80)!=0) ) // Bind flag has been reset + { + #if defined(FRSKYD_CC2500_INO) || defined(FRSKYX_CC2500_INO) || defined(FRSKYV_CC2500_INO) + if(protocol==MODE_FRSKYD || protocol==MODE_FRSKYX || protocol==MODE_FRSKYV) + BIND_DONE; + else + #endif + if(bind_counter>2) + bind_counter=2; + } + //store current protocol values for(uint8_t i=0;i<3;i++) cur_protocol[i] = rx_ok_buff[i]; diff --git a/Multiprotocol/Symax_nrf24l01.ino b/Multiprotocol/Symax_nrf24l01.ino index db4cb34..3506140 100644 --- a/Multiprotocol/Symax_nrf24l01.ino +++ b/Multiprotocol/Symax_nrf24l01.ino @@ -319,12 +319,12 @@ uint16_t symax_callback() return SYMAX_FIRST_PACKET_DELAY; break; case SYMAX_BIND2: - counter = SYMAX_BIND_COUNT; + bind_counter = SYMAX_BIND_COUNT; phase = SYMAX_BIND3; SYMAX_send_packet(1); break; case SYMAX_BIND3: - if (counter == 0) + if (bind_counter == 0) { symax_init2(); phase = SYMAX_DATA; @@ -333,7 +333,7 @@ uint16_t symax_callback() else { SYMAX_send_packet(1); - counter--; + bind_counter--; } break; case SYMAX_DATA: diff --git a/Multiprotocol/V2X2_nrf24l01.ino b/Multiprotocol/V2X2_nrf24l01.ino index 5dc216e..23cf69b 100644 --- a/Multiprotocol/V2X2_nrf24l01.ino +++ b/Multiprotocol/V2X2_nrf24l01.ino @@ -252,19 +252,18 @@ uint16_t ReadV2x2() return 150; break; case V202_BIND2: - if (packet_sent && NRF24L01_packet_ack() != PKT_ACKED) { + if (packet_sent && NRF24L01_packet_ack() != PKT_ACKED) return V2X2_PACKET_CHKTIME; - } V2X2_send_packet(1); - if (--counter == 0) { + if (--bind_counter == 0) + { phase = V202_DATA; BIND_DONE; } break; case V202_DATA: - if (packet_sent && NRF24L01_packet_ack() != PKT_ACKED) { + if (packet_sent && NRF24L01_packet_ack() != PKT_ACKED) return V2X2_PACKET_CHKTIME; - } V2X2_send_packet(0); break; } @@ -278,7 +277,7 @@ uint16_t initV2x2() // if (IS_AUTOBIND_FLAG_on) { - counter = V2X2_BIND_COUNT; + bind_counter = V2X2_BIND_COUNT; phase = V202_INIT2; } else diff --git a/Multiprotocol/iface_cc2500.h b/Multiprotocol/iface_cc2500.h index 03cdc27..81b101b 100644 --- a/Multiprotocol/iface_cc2500.h +++ b/Multiprotocol/iface_cc2500.h @@ -16,16 +16,6 @@ #ifndef _IFACE_CC2500_H_ #define _IFACE_CC2500_H_ -enum { - FRSKY_BIND = 0, - FRSKY_BIND_DONE = 1000, - FRSKY_DATA1, - FRSKY_DATA2, - FRSKY_DATA3, - FRSKY_DATA4, - FRSKY_DATA5 -}; - enum { CC2500_00_IOCFG2 = 0x00, // GDO2 output pin configuration CC2500_01_IOCFG1 = 0x01, // GDO1 output pin configuration