FX/FX620 another try

This commit is contained in:
pascallanger 2022-07-12 08:05:41 +02:00
parent eb24dd5549
commit 416f7d5c19
2 changed files with 26 additions and 22 deletions

View File

@ -18,18 +18,21 @@ Multiprotocol is distributed in the hope that it will be useful,
#include "iface_xn297.h"
#define FX_INITIAL_WAIT 500
#define FX_BIND_COUNT 300 //3sec
#define FX_SWITCH 20
#define FX_NUM_CHANNELS 4
#define FX_INITIAL_WAIT 500
#define FX_BIND_COUNT 300 //3sec
#define FX_SWITCH 20
#define FX_NUM_CHANNELS 4
#define FX816_PACKET_PERIOD 10000
#define FX816_BIND_CHANNEL 40
#define FX816_PAYLOAD_SIZE 6
#define FX816_PACKET_PERIOD 10000
#define FX816_BIND_CHANNEL 40
#define FX816_PAYLOAD_SIZE 6
#define FX816_CH_OFFSET 3
#define FX620_PACKET_PERIOD 3250
#define FX620_BIND_CHANNEL 18
#define FX620_PAYLOAD_SIZE 7
#define FX620_PACKET_PERIOD 3250
#define FX620_BIND_PACKET_PERIOD 4500
#define FX620_BIND_CHANNEL 18
#define FX620_PAYLOAD_SIZE 7
#define FX620_CH_OFFSET 1
#define FORCE_FX620_ID
@ -45,15 +48,15 @@ static void __attribute__((unused)) FX_send_packet()
memset(packet,0x00,packet_length);
//Channels
uint8_t offset=sub_protocol == FX816 ? 3:1;
uint8_t val=convert_channel_8b(AILERON); // Can FX620 have a proportional value, the original radio does not but...
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;
else
packet[offset] = sub_protocol == FX816 ? 0:0x7F;
packet[offset+1] = convert_channel_16b_limit(THROTTLE,0,100);
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)
@ -86,7 +89,7 @@ static void __attribute__((unused)) FX_send_packet()
packet[packet_length-1]=val;
//Debug
#if 0
#if 1
for(uint8_t i=0;i<packet_length;i++)
debug("%02X ",packet[i]);
debugln("");
@ -121,8 +124,8 @@ static void __attribute__((unused)) FX_initialize_txid()
//I didn't open the plane to find out if I could connect there so this is the best I came up with with few trial and errors...
rx_tx_addr[0]=0x35+(rx_tx_addr[3]&0x07); //Original dump=0x35
rx_tx_addr[1]=0x09; //Original dump=0x09
memcpy(hopping_frequency,"\x09\x1B\x30\x42",FX816_NUM_CHANNELS); //Original dump=9=0x09,27=0x1B,48=0x30,66=0x42
for(uint8_t i=0;i<FX816_NUM_CHANNELS;i++)
memcpy(hopping_frequency,"\x09\x1B\x30\x42",FX_NUM_CHANNELS); //Original dump=9=0x09,27=0x1B,48=0x30,66=0x42
for(uint8_t i=0;i<FX_NUM_CHANNELS;i++)
hopping_frequency[i]+=rx_tx_addr[3]&0x07;
packet_length = FX816_PAYLOAD_SIZE;
@ -136,13 +139,11 @@ static void __attribute__((unused)) FX_initialize_txid()
memcpy(rx_tx_addr,(uint8_t*)"\x34\xA9\x32",3);
hopping_frequency[0] = 0x18; //on dump: 24 34 44 54
#endif
//no idea if this is true...
hopping_frequency[1] = 10 + hopping_frequency[0];
hopping_frequency[2] = 20 + hopping_frequency[0];
hopping_frequency[3] = 30 + hopping_frequency[0];
for(uint8_t i=1;i<FX_NUM_CHANNELS;i++)
hopping_frequency[i] = i*10 + hopping_frequency[0];
packet_length = FX620_PAYLOAD_SIZE;
packet_period = FX620_PACKET_PERIOD;
packet_period = FX620_BIND_PACKET_PERIOD;
}
}
@ -156,7 +157,10 @@ uint16_t FX_callback()
{
BIND_DONE;
if(sub_protocol == FX620)
{
XN297_SetTXAddr(rx_tx_addr, 3);
packet_period = FX620_PACKET_PERIOD;
}
}
FX_send_packet();
return packet_period;

View File

@ -19,7 +19,7 @@
#define VERSION_MAJOR 1
#define VERSION_MINOR 3
#define VERSION_REVISION 3
#define VERSION_PATCH_LEVEL 16
#define VERSION_PATCH_LEVEL 17
#define MODE_SERIAL 0