mirror of
https://github.com/pascallanger/DIY-Multiprotocol-TX-Module.git
synced 2025-12-30 08:43:16 +00:00
Compare commits
4 Commits
af47462ba7
...
pascallang
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
05027d3b95 | ||
|
|
4c0b46549f | ||
|
|
188f8ff9ce | ||
|
|
bee6e59582 |
@@ -16,7 +16,7 @@ Multiprotocol is distributed in the hope that it will be useful,
|
||||
|
||||
#include "iface_xn297.h"
|
||||
|
||||
#define FORCE_EAZYRC_ORIGINAL_ID
|
||||
//#define FORCE_EAZYRC_ORIGINAL_ID
|
||||
|
||||
#define EAZYRC_PAYLOAD_SIZE 10
|
||||
#define EAZYRC_RF_NUM_CHANNELS 4
|
||||
@@ -40,13 +40,13 @@ static void __attribute__((unused)) EAZYRC_send_packet()
|
||||
// packet[0]=THR, packet[1]=ST, packet[2]=unk, packet[3]=unk, packet[6]=first rf channel, packet[8]=unk, packet[9]=sum(packet[0..8])
|
||||
//Bound : C=18 S=Y A= AA BB CC DD EE P(10)= 1A A0 01 41 AD 01 1E 00 79 41
|
||||
// packet[0..2]=tx_addr, packet[3..5]=rx_addr, packet[6]=first rf channel, packet[8]=unk, packet[9]=sum(packet[0..8])
|
||||
// sent every 12 packets in normal mode
|
||||
// sent every 12 packets in normal mode, but is it really needed if the car loose power then you need to rebind...
|
||||
//Packet period around 5ms with a large jitter
|
||||
|
||||
memset(&packet[3], 0x00, 7);
|
||||
if(IS_BIND_IN_PROGRESS)
|
||||
{
|
||||
memcpy(&packet,rx_tx_addr,3);
|
||||
memset(&packet[3], 0x00, 7);
|
||||
packet[6] = hopping_frequency[0];
|
||||
packet[8] = 0x78; //??? packet type?
|
||||
}
|
||||
@@ -60,7 +60,6 @@ static void __attribute__((unused)) EAZYRC_send_packet()
|
||||
packet[1] = convert_channel_8b(AILERON);
|
||||
packet[2] = 0x1F; //??? additional channel?
|
||||
packet[3] = 0x19; //??? additional channel?
|
||||
memset(&packet[4], 0x00, 6);
|
||||
packet[6] = hopping_frequency[0];
|
||||
packet[8] = 0xAB; //??? packet type?
|
||||
}
|
||||
@@ -80,7 +79,7 @@ static void __attribute__((unused)) EAZYRC_send_packet()
|
||||
static void __attribute__((unused)) EAZYRC_initialize_txid()
|
||||
{
|
||||
rx_tx_addr[1] = rx_tx_addr[3];
|
||||
hopping_frequency[0] = (rx_tx_addr[3]%0x1F) + 0x1E; // Wild guess...
|
||||
hopping_frequency[0] = (rx_tx_addr[3]%20) + 0x1E; // Wild guess... First channel between 30 and 49so a full range of 30 to 79
|
||||
#ifdef FORCE_EAZYRC_ORIGINAL_ID
|
||||
rx_tx_addr[0] = 0x1A;
|
||||
rx_tx_addr[1] = 0xA0;
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
//#define RLINK_DEBUG_TELEM
|
||||
|
||||
//#define RLINK_FORCE_ID
|
||||
#define RLINK_RC4G_FORCE_ID
|
||||
//#define RLINK_RC4G_FORCE_ID
|
||||
|
||||
#define RLINK_TX_PACKET_LEN 33
|
||||
#define RLINK_RX_PACKET_LEN 15
|
||||
@@ -120,11 +120,44 @@ static void __attribute__((unused)) RLINK_TXID_init()
|
||||
if(sub_protocol!=RLINK_RC4G)
|
||||
RLINK_hop();
|
||||
else
|
||||
{
|
||||
{//RLINK_RC4G
|
||||
// Find 2 unused channels
|
||||
// first channel is a multiple of 3 between 00 and 5D
|
||||
// second channel is a multiple of 3 between 63 and BD
|
||||
//TODO: find 2 unused channels
|
||||
CC2500_Strobe(CC2500_SIDLE);
|
||||
CC2500_WriteReg(CC2500_17_MCSM1,0x3C);
|
||||
CC2500_Strobe(CC2500_SFRX);
|
||||
CC2500_SetTxRxMode(RX_EN);
|
||||
CC2500_Strobe(CC2500_SRX);
|
||||
delayMilliseconds(1); //wait for RX mode
|
||||
uint16_t val;
|
||||
uint8_t val_low = 0xFF;
|
||||
hopping_frequency[0] = 0x00;
|
||||
hopping_frequency[1] = 0x63;
|
||||
for(uint8_t ch=0; ch<=0xBD; ch+=3)
|
||||
{
|
||||
if(ch==0x63)
|
||||
val_low = 0xFF; //init for second block
|
||||
if(ch==0x60)
|
||||
continue; //skip channel
|
||||
CC2500_WriteReg(CC2500_0A_CHANNR, ch); //switch channel
|
||||
delayMicroseconds(370); //wait to read
|
||||
val = 0;
|
||||
for(uint8_t i=0;i<16;i++)
|
||||
val += CC2500_ReadReg(CC2500_34_RSSI | CC2500_READ_BURST);
|
||||
val >>= 4;
|
||||
debug("C:%02X RSSI:%02X",ch,val);
|
||||
if(val_low > val)
|
||||
{
|
||||
debug(" OK");
|
||||
val_low = val;
|
||||
hopping_frequency[ch<0x63?0:1]=ch; //save best channel
|
||||
}
|
||||
debugln("");
|
||||
}
|
||||
CC2500_WriteReg(CC2500_17_MCSM1,0x30);
|
||||
CC2500_Strobe(CC2500_SIDLE);
|
||||
CC2500_SetTxRxMode(TX_EN);
|
||||
#ifdef RLINK_RC4G_FORCE_ID
|
||||
hopping_frequency[0] = 0x03;
|
||||
hopping_frequency[1] = 0x6F;
|
||||
@@ -293,7 +326,7 @@ static void __attribute__((unused)) RLINK_RC4G_send_packet()
|
||||
#ifdef RLINK_DEBUG
|
||||
debug("P=");
|
||||
for(uint8_t i=1;i<16;i++)
|
||||
debug(" 0x%02X",packet[i]);
|
||||
debug(" 0x%02X",packet[i]);
|
||||
debugln("");
|
||||
#endif
|
||||
}
|
||||
@@ -311,6 +344,8 @@ uint16_t RLINK_callback()
|
||||
#ifdef MULTI_SYNC
|
||||
telemetry_set_input_sync(RLINK_RC4G_TIMING_PROTO);
|
||||
#endif
|
||||
CC2500_SetPower();
|
||||
CC2500_SetFreqOffset();
|
||||
RLINK_RC4G_send_packet();
|
||||
#else
|
||||
SUB_PROTO_INVALID;
|
||||
|
||||
@@ -1010,7 +1010,7 @@ CH1|CH2|CH3|CH4|CH5|FS_CH1|FS_CH2|FS_CH3|FS_CH4
|
||||
|
||||
FS=FailSafe
|
||||
|
||||
CH5 is driven by CH3 on the original TX, gyro sensibility?
|
||||
CH5 is driven by CH3 on the original TX, gyro sensitivity?
|
||||
|
||||
## Futaba - *21*
|
||||
Also called SFHSS depending on radio version.
|
||||
@@ -1951,14 +1951,10 @@ A|E|T|R|FLIP|LED|PICTURE|VIDEO|HEADLESS|RTH|XCAL|YCAL
|
||||
Model: JXD 509 is using Q282 with CH12=Start/Stop motors
|
||||
|
||||
## Realacc - *76*
|
||||
Model: Realacc R11
|
||||
|
||||
Untested protocol, let me know if it works.
|
||||
Model: Realacc R11, Eachine E017
|
||||
|
||||
Autobind protocol
|
||||
|
||||
### Sub_protocol R11 - *0*
|
||||
|
||||
CH1|CH2|CH3|CH4|CH5|CH6|CH7|CH8|CH9|CH10
|
||||
---|---|---|---|---|---|---|---|---|----
|
||||
A|E|T|R|FLIP|LIGHT|CALIB|HLESS|RTH|UNK
|
||||
|
||||
Reference in New Issue
Block a user