From ef4b4dfba1e2a81ee9ed51ee2d9ba95556c585e2 Mon Sep 17 00:00:00 2001 From: Richard Li Date: Sat, 14 Jan 2023 16:47:22 +0800 Subject: [PATCH] FX9630 : Can bind properly, more work need to be done. --- Multiprotocol/FX_nrf24l01.ino | 94 ++++++++++++++++++++++++++++------ Multiprotocol/Multi.txt | 2 +- Multiprotocol/Multi_Protos.ino | 4 +- Multiprotocol/Multiprotocol.h | 1 + Multiprotocol/_Config.h | 1 + 5 files changed, 82 insertions(+), 20 deletions(-) diff --git a/Multiprotocol/FX_nrf24l01.ino b/Multiprotocol/FX_nrf24l01.ino index 512710f..50f8ecc 100644 --- a/Multiprotocol/FX_nrf24l01.ino +++ b/Multiprotocol/FX_nrf24l01.ino @@ -33,29 +33,58 @@ Multiprotocol is distributed in the hope that it will be useful, #define FX620_PAYLOAD_SIZE 7 #define FX620_CH_OFFSET 1 +#define FX9630_PACKET_PERIOD 8124 +#define FX9630_BIND_PACKET_PERIOD 8124 +#define FX9630_BIND_CHANNEL 51 +#define FX9630_PAYLOAD_SIZE 8 +#define FX9630_NUM_CHANNELS 3 + //#define FORCE_FX620_ID +#define FORCE_FX9630_ID static void __attribute__((unused)) FX_send_packet() { //Hopp if(IS_BIND_DONE) { - XN297_Hopping(hopping_frequency_no++); - hopping_frequency_no &= 0x03; + if(sub_protocol == FX9630) + { + XN297_SetTXAddr(rx_tx_addr, 4); + XN297_Hopping(hopping_frequency_no++); + if (hopping_frequency_no > FX9630_NUM_CHANNELS) + hopping_frequency_no = 0; + } + else // FX816 and FX620 + { + XN297_Hopping(hopping_frequency_no++); + hopping_frequency_no &= 0x03; + } } memset(packet,0x00,packet_length); //Channels - uint8_t offset=sub_protocol == FX816 ? FX816_CH_OFFSET:FX620_CH_OFFSET; - uint8_t val=convert_channel_8b(AILERON); - if(val>127+FX_SWITCH) - packet[offset] = sub_protocol == FX816 ? 1:0xFF; - else if(val<127-FX_SWITCH) - packet[offset] = sub_protocol == FX816 ? 2:0x00; + uint8_t val; + if (sub_protocol == FX9630) + { + packet[0] = convert_channel_8b(THROTTLE); + packet[1] = convert_channel_8b(AILERON); + packet[2] = 0xFF - convert_channel_8b(ELEVATOR); + packet[3] = convert_channel_8b(RUDDER); + packet[4] = 0x20; + } else - packet[offset] = sub_protocol == FX816 ? 0:0x7F; - packet[offset+1] = convert_channel_16b_limit(THROTTLE,0,100); //FX816:0x00..0x63, FX620:0x00..0x5E but that should work + { + uint8_t offset=sub_protocol == FX816 ? FX816_CH_OFFSET:FX620_CH_OFFSET; + val=convert_channel_8b(AILERON); + if(val>127+FX_SWITCH) + packet[offset] = sub_protocol == FX816 ? 1:0xFF; + else if(val<127-FX_SWITCH) + packet[offset] = sub_protocol == FX816 ? 2:0x00; + else + packet[offset] = sub_protocol == FX816 ? 0:0x7F; + packet[offset+1] = convert_channel_16b_limit(THROTTLE,0,100); //FX816:0x00..0x63, FX620:0x00..0x5E but that should work + } //Bind and specifics if(sub_protocol == FX816) @@ -67,7 +96,7 @@ static void __attribute__((unused)) FX_send_packet() packet[1] = rx_tx_addr[0]; packet[2] = rx_tx_addr[1]; } - else //FX620 + else if(sub_protocol == FX620) { if(IS_BIND_IN_PROGRESS) { @@ -82,12 +111,29 @@ static void __attribute__((unused)) FX_send_packet() packet[5] = 0xAB; // Is it based on ID?? } } + else + { + if(IS_BIND_IN_PROGRESS) + { + memcpy(packet,rx_tx_addr, 4); + packet[4] = hopping_frequency[1]; + packet[5] = hopping_frequency[2]; + packet[6] = 0xA0; + packet[7] = 0x55; + } + } // FX9630 //Check - val=0; - for(uint8_t i=0;i