Compare commits

..

13 Commits

Author SHA1 Message Date
pascallanger
c7513abad8 Update Multiprotocol.h 2024-03-18 09:02:55 +01:00
pascallanger
e6e13c0fdd Docs update 2024-03-17 15:52:42 +01:00
pascallanger
9579a667fc Update REALACC_nrf24l01.ino 2024-03-17 15:28:33 +01:00
pascallanger
cbedda2471 Merge branch 'master' of https://github.com/pascallanger/DIY-Multiprotocol-TX-Module 2024-03-14 20:23:04 +01:00
pascallanger
f8695befe2 REALACC multi IDs 2024-03-14 20:23:02 +01:00
pascallanger
e951e3146b Update Protocols_Details.md (#955) 2024-03-14 20:22:00 +01:00
pascallanger
4c0b46549f EazyRC multi IDs/RFs 2024-02-28 10:46:10 +01:00
pascallanger
188f8ff9ce Radiolink/RC4G: IDs and RFs 2024-02-26 17:20:08 +01:00
pascallanger
bee6e59582 Update EazyRC_nrf24l01.ino 2024-02-24 09:38:42 +01:00
pascallanger
af47462ba7 EazyRC.2 2024-02-23 19:06:20 +01:00
pascallanger
d6ccd4af54 EazyRC.1 2024-02-23 17:51:38 +01:00
pascallanger
0feedc6fa9 New protocol EazyRC 2024-02-23 17:36:02 +01:00
pascallanger
b5bc7c04fb Rename Traxxas/6519 to Traxxas/TQ 2024-02-23 17:19:09 +01:00
9 changed files with 240 additions and 27 deletions

View File

@@ -157,7 +157,7 @@
74,1,RadioLink,Air,0,CH5,CH6,CH7,CH8,FS_CH1,FS_CH2,FS_CH3,FS_CH4,FS_CH5,FS_CH6,FS_CH7,FS_CH8 74,1,RadioLink,Air,0,CH5,CH6,CH7,CH8,FS_CH1,FS_CH2,FS_CH3,FS_CH4,FS_CH5,FS_CH6,FS_CH7,FS_CH8
74,2,RadioLink,DumboRC,0,CH5,CH6,CH7,CH8,FS_CH1,FS_CH2,FS_CH3,FS_CH4,FS_CH5,FS_CH6,FS_CH7,FS_CH8 74,2,RadioLink,DumboRC,0,CH5,CH6,CH7,CH8,FS_CH1,FS_CH2,FS_CH3,FS_CH4,FS_CH5,FS_CH6,FS_CH7,FS_CH8
74,3,RadioLink,RC4G,0,CH5,FS_CH1,FS_CH2,FS_CH3,FS_CH4 74,3,RadioLink,RC4G,0,CH5,FS_CH1,FS_CH2,FS_CH3,FS_CH4
76,0,Realacc,R11,1,Flip,Light,Calib,HLess,RTH,UNK 76,0,Realacc,Std,1,Flip,Light,Calib,HLess,RTH,UNK
50,0,Redpine,Fast,0,sCH5,sCH6,sCH7,sCH8,sCH9,sCH10,sCH11,sCH12,sCH13,sCH14,sCH15,sCH16 50,0,Redpine,Fast,0,sCH5,sCH6,sCH7,sCH8,sCH9,sCH10,sCH11,sCH12,sCH13,sCH14,sCH15,sCH16
50,1,Redpine,Slow,0,sCH5,sCH6,sCH7,sCH8,sCH9,sCH10,sCH11,sCH12,sCH13,sCH14,sCH15,sCH16 50,1,Redpine,Slow,0,sCH5,sCH6,sCH7,sCH8,sCH9,sCH10,sCH11,sCH12,sCH13,sCH14,sCH15,sCH16
21,0,Futaba,SFHSS,0,CH5,CH6,CH7,CH8 21,0,Futaba,SFHSS,0,CH5,CH6,CH7,CH8
@@ -170,7 +170,7 @@
11,4,SLT,MR100,0,Rates,n-a,CH7,CH8,Mode,Flip,Video,Pict 11,4,SLT,MR100,0,Rates,n-a,CH7,CH8,Mode,Flip,Video,Pict
10,0,Symax,Std,1,Flip,Rates,Pict,Video,HLess 10,0,Symax,Std,1,Flip,Rates,Pict,Video,HLess
10,1,Symax,X5C,1,Flip,Rates,Pict,Video,HLess 10,1,Symax,X5C,1,Flip,Rates,Pict,Video,HLess
43,0,Traxxas,6519,0 43,0,Traxxas,TQ,0
5,0,V2x2,Std,1,Flip,Light,Pict,Video,HLess,CalX,CalY 5,0,V2x2,Std,1,Flip,Light,Pict,Video,HLess,CalX,CalY
5,1,V2x2,JXD506,1,Flip,Light,Pict,Video,HLess,StaSto,Emerg,Cam_UD 5,1,V2x2,JXD506,1,Flip,Light,Pict,Video,HLess,StaSto,Emerg,Cam_UD
48,0,V761,3CH,0,Gyro,Calib,Flip,RtnAct,Rtn 48,0,V761,3CH,0,Gyro,Calib,Flip,RtnAct,Rtn
@@ -214,3 +214,4 @@
95,0,Bluefly,HP100,0,CH5,CH6,CH7,CH8 95,0,Bluefly,HP100,0,CH5,CH6,CH7,CH8
96,0,BumbleB 96,0,BumbleB
97,0,SGF22,Std,1,Mode,Flip,LED,Pict,Video 97,0,SGF22,Std,1,Mode,Flip,LED,Pict,Video
61,1,EazyRC

View File

@@ -0,0 +1,166 @@
/*
This project is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Multiprotocol is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Multiprotocol. If not, see <http://www.gnu.org/licenses/>.
*/
#if defined(EAZYRC_NRF24L01_INO)
#include "iface_xn297.h"
//#define FORCE_EAZYRC_ORIGINAL_ID
#define EAZYRC_PAYLOAD_SIZE 10
#define EAZYRC_RF_NUM_CHANNELS 4
#define EAZYRC_BIND_CHANNEL 18
#define EAZYRC_PACKET_PERIOD 5000
enum {
EAZYRC_BINDTX=0,
EAZYRC_BINDRX,
EAZYRC_DATA,
};
static void __attribute__((unused)) EAZYRC_send_packet()
{
//Bind:
// TX: C=18 S=Y A= AA BB CC DD EE P(10)= 1A A0 01 00 00 00 1E 00 78 51
// packet[0..2]=tx_addr, packet[6]=first rf channel, packet[8]=unk, packet[9]=sum(packet[0..8])
// RX: C=18 S=Y A= AA BB CC DD EE P(10)= 41 AD 01 1A A0 01 1E 00 87 4F
// packet[0..2]=rx_addr, packet[3..5]=tx_addr, packet[6]=first rf channel, packet[8]=unk but swapped, packet[9]=sum(packet[0..8])
//Normal: C=30 S=Y A= 1A A0 41 AD 02 P(10)= 7F 7F 1F 19 00 00 1E 00 AB FF
// 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, 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);
packet[6] = hopping_frequency[0];
packet[8] = 0x78; //??? packet type?
}
else
{
XN297_Hopping(hopping_frequency_no);
hopping_frequency_no++;
hopping_frequency_no &= 3;
packet[0] = convert_channel_8b(THROTTLE);
packet[1] = convert_channel_8b(AILERON);
packet[2] = 0x1F; //??? additional channel?
packet[3] = 0x19; //??? additional channel?
packet[6] = hopping_frequency[0];
packet[8] = 0xAB; //??? packet type?
}
for(uint8_t i=0;i<EAZYRC_PAYLOAD_SIZE-1;i++)
packet[9] += packet[i];
// Send
XN297_SetPower();
XN297_SetTxRxMode(TX_EN);
XN297_WritePayload(packet, EAZYRC_PAYLOAD_SIZE);
#ifdef DEBUG_SERIAL
for(uint8_t i=0; i < len; i++)
debug("%02X ", packet[i]);
debugln();
#endif
}
static void __attribute__((unused)) EAZYRC_initialize_txid()
{
rx_tx_addr[1] = rx_tx_addr[3];
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;
rx_tx_addr[2] = 0x01;
hopping_frequency[0] = 0x1E;
#endif
rx_tx_addr[2] = 0x01; // Not sure if this is needed...
for(uint8_t i=1; i<EAZYRC_RF_NUM_CHANNELS; i++)
hopping_frequency[i] = hopping_frequency[0] + 10*i;
}
static void __attribute__((unused)) EAZYRC_RF_init()
{
XN297_Configure(XN297_CRCEN, XN297_SCRAMBLED, XN297_1M);
XN297_SetTXAddr((uint8_t*)"\xAA\xBB\xCC\xDD\xEE", 5);
XN297_SetRXAddr((uint8_t*)"\xAA\xBB\xCC\xDD\xEE", EAZYRC_PAYLOAD_SIZE);
XN297_RFChannel(EAZYRC_BIND_CHANNEL);
}
uint16_t EAZYRC_callback()
{
uint8_t rf,n;
uint16_t addr;
switch(phase)
{
case EAZYRC_BINDTX:
if(XN297_IsRX())
{
//Example: TX: C=18 S=Y A= AA BB CC DD EE P(10)= 1A A0 01 00 00 00 1E 00 78 51
// packet[0..2]=tx_addr, packet[6]=first rf channel, packet[8]=unk, packet[9]=sum(packet[0..8])
// RX: C=18 S=Y A= AA BB CC DD EE P(10)= 41 AD 01 1A A0 01 1E 00 87 4F
// packet[0..2]=rx_addr, packet[3..5]=tx_addr, packet[6]=first rf channel, packet[8]=unk but swapped, packet[9]=sum(packet[0..8])
XN297_ReadPayload(packet_in, EAZYRC_PAYLOAD_SIZE);
#ifdef DEBUG_SERIAL
for(uint8_t i=0; i < EAZYRC_PAYLOAD_SIZE; i++)
debug("%02X ", packet_in[i]);
debugln();
#endif
//could check the validity of the packet by looking at the sum...
if(memcmp(&packet_in[3],&rx_tx_addr,3)==0)
{//TX ID match, TX addr to use: 1A A0 41 AD 02
rx_tx_addr[4] = rx_tx_addr[2] + packet_in[2]; //wild guess
rx_tx_addr[2] = packet_in[0];
rx_tx_addr[3] = packet_in[1];
BIND_DONE;
XN297_SetTxRxMode(TXRX_OFF);
XN297_SetTXAddr(rx_tx_addr, 5);
phase = EAZYRC_DATA;
return 5000;
}
}
XN297_SetTxRxMode(TXRX_OFF);
EAZYRC_send_packet();
phase++;
return 1000;
case EAZYRC_BINDRX:
//Wait for the packet transmission to finish
while(XN297_IsPacketSent()==false);
//Switch to RX
XN297_SetTxRxMode(TXRX_OFF);
XN297_SetTxRxMode(RX_EN);
phase = EAZYRC_BINDTX;
return 10000;
case EAZYRC_DATA:
#ifdef MULTI_SYNC
telemetry_set_input_sync(EAZYRC_PACKET_PERIOD);
#endif
EAZYRC_send_packet();
break;
}
return EAZYRC_PACKET_PERIOD;
}
void EAZYRC_init()
{
BIND_IN_PROGRESS;
EAZYRC_initialize_txid();
EAZYRC_RF_init();
phase = EAZYRC_BINDTX;
packet_count = 0;
hopping_frequency_no = 0;
}
#endif

View File

@@ -40,7 +40,7 @@
40,WFLY,WFR0x 40,WFLY,WFR0x
41,BUGS 41,BUGS
42,BUGSMINI,BUGSMINI,BUGS3H 42,BUGSMINI,BUGSMINI,BUGS3H
43,Traxxas,RX6519 43,Traxxas,TQ
44,NCC1701 44,NCC1701
45,E01X,E012,E015 45,E01X,E012,E015
46,V911S,V911S,E119 46,V911S,V911S,E119
@@ -58,6 +58,7 @@
58,FX,816,620,9630 58,FX,816,620,9630
59,Bayang_RX,Multi,CPPM 59,Bayang_RX,Multi,CPPM
60,Pelikan,Pro,Lite,SCX24 60,Pelikan,Pro,Lite,SCX24
61,EazyRC
62,XK,X450,X420,Cars 62,XK,X450,X420,Cars
63,XN_DUMP,250K,1M,2M,AUTO 63,XN_DUMP,250K,1M,2M,AUTO
64,FrskyX2,CH_16,CH_8,EU_16,EU_8,Cloned 64,FrskyX2,CH_16,CH_8,EU_16,EU_8,Cloned
@@ -72,7 +73,7 @@
73,Kyosho,FHSS,Hype 73,Kyosho,FHSS,Hype
74,RadioLink,Surface,Air,DumboRC,RC4G 74,RadioLink,Surface,Air,DumboRC,RC4G
75,--- 75,---
76,Realacc,R11 76,Realacc
77,OMP 77,OMP
78,M-Link 78,M-Link
79,WFLY,RF20x 79,WFLY,RF20x

View File

@@ -108,6 +108,7 @@ const char STR_SCORPIO[] ="Scorpio";
const char STR_BLUEFLY[] ="BlueFly"; const char STR_BLUEFLY[] ="BlueFly";
const char STR_BUMBLEB[] ="BumbleB"; const char STR_BUMBLEB[] ="BumbleB";
const char STR_SGF22[] ="SGF22"; const char STR_SGF22[] ="SGF22";
const char STR_EAZYRC[] ="EazyRC";
const char STR_SUBTYPE_FLYSKY[] = "\x04""Std\0""V9x9""V6x6""V912""CX20"; const char STR_SUBTYPE_FLYSKY[] = "\x04""Std\0""V9x9""V6x6""V912""CX20";
const char STR_SUBTYPE_HUBSAN[] = "\x04""H107""H301""H501"; const char STR_SUBTYPE_HUBSAN[] = "\x04""H107""H301""H501";
@@ -146,7 +147,7 @@ const char STR_SUBTYPE_H83D[] = "\x07""Std\0 ""H20H\0 ""H20Mini""H30Min
const char STR_SUBTYPE_CORONA[] = "\x05""V1\0 ""V2\0 ""FD V3"; const char STR_SUBTYPE_CORONA[] = "\x05""V1\0 ""V2\0 ""FD V3";
const char STR_SUBTYPE_HITEC[] = "\x07""Optima\0""Opt Hub""Minima\0"; const char STR_SUBTYPE_HITEC[] = "\x07""Optima\0""Opt Hub""Minima\0";
const char STR_SUBTYPE_BUGS_MINI[] = "\x06""Std\0 ""Bugs3H"; const char STR_SUBTYPE_BUGS_MINI[] = "\x06""Std\0 ""Bugs3H";
const char STR_SUBTYPE_TRAXXAS[] = "\x04""6519"; const char STR_SUBTYPE_TRAXXAS[] = "\x02""TQ";
const char STR_SUBTYPE_E01X[] = "\x05""E012\0""E015\0"; const char STR_SUBTYPE_E01X[] = "\x05""E012\0""E015\0";
const char STR_SUBTYPE_GD00X[] = "\x05""GD_V1""GD_V2"; const char STR_SUBTYPE_GD00X[] = "\x05""GD_V1""GD_V2";
const char STR_SUBTYPE_REDPINE[] = "\x04""Fast""Slow"; const char STR_SUBTYPE_REDPINE[] = "\x04""Fast""Slow";
@@ -168,7 +169,6 @@ const char STR_SUBTYPE_HOTT[] = "\x07""Sync\0 ""No_Sync";
const char STR_SUBTYPE_PELIKAN[] = "\x05""Pro\0 ""Lite\0""SCX24"; const char STR_SUBTYPE_PELIKAN[] = "\x05""Pro\0 ""Lite\0""SCX24";
const char STR_SUBTYPE_V761[] = "\x05""3ch\0 ""4ch\0 ""TOPRC"; const char STR_SUBTYPE_V761[] = "\x05""3ch\0 ""4ch\0 ""TOPRC";
const char STR_SUBTYPE_RLINK[] = "\x07""Surface""Air\0 ""DumboRC""RC4G\0 "; const char STR_SUBTYPE_RLINK[] = "\x07""Surface""Air\0 ""DumboRC""RC4G\0 ";
const char STR_SUBTYPE_REALACC[] = "\x03""R11";
const char STR_SUBTYPE_KYOSHO[] = "\x04""FHSS""Hype"; const char STR_SUBTYPE_KYOSHO[] = "\x04""FHSS""Hype";
const char STR_SUBTYPE_KYOSHO2[] = "\x05""KT-17"; const char STR_SUBTYPE_KYOSHO2[] = "\x05""KT-17";
const char STR_SUBTYPE_FUTABA[] = "\x05""SFHSS"; const char STR_SUBTYPE_FUTABA[] = "\x05""SFHSS";
@@ -278,6 +278,9 @@ const mm_protocol_definition multi_protocols[] = {
#if defined(E129_CYRF6936_INO) #if defined(E129_CYRF6936_INO)
{PROTO_E129, STR_E129, STR_SUBTYPE_E129, 2, OPTION_NONE, 0, 0, SW_CYRF, E129_init, E129_callback }, {PROTO_E129, STR_E129, STR_SUBTYPE_E129, 2, OPTION_NONE, 0, 0, SW_CYRF, E129_init, E129_callback },
#endif #endif
#if defined(EAZYRC_NRF24L01_INO)
{PROTO_EAZYRC, STR_EAZYRC, NO_SUBTYPE, 0, OPTION_NONE, 0, 0, SW_NRF, EAZYRC_init, EAZYRC_callback },
#endif
#if defined(ESKY_NRF24L01_INO) #if defined(ESKY_NRF24L01_INO)
{PROTO_ESKY, STR_ESKY, STR_SUBTYPE_ESKY, 2, OPTION_NONE, 0, 1, SW_NRF, ESKY_init, ESKY_callback }, {PROTO_ESKY, STR_ESKY, STR_SUBTYPE_ESKY, 2, OPTION_NONE, 0, 1, SW_NRF, ESKY_init, ESKY_callback },
#endif #endif
@@ -433,7 +436,7 @@ const mm_protocol_definition multi_protocols[] = {
{PROTO_RLINK, STR_RLINK, STR_SUBTYPE_RLINK, 4, OPTION_RFTUNE, 0, 0, SW_CC2500, RLINK_init, RLINK_callback }, {PROTO_RLINK, STR_RLINK, STR_SUBTYPE_RLINK, 4, OPTION_RFTUNE, 0, 0, SW_CC2500, RLINK_init, RLINK_callback },
#endif #endif
#if defined(REALACC_NRF24L01_INO) #if defined(REALACC_NRF24L01_INO)
{PROTO_REALACC, STR_REALACC, STR_SUBTYPE_REALACC, 1, OPTION_NONE, 0, 0, SW_NRF, REALACC_init, REALACC_callback }, {PROTO_REALACC, STR_REALACC, NO_SUBTYPE, 0, OPTION_NONE, 0, 0, SW_NRF, REALACC_init, REALACC_callback },
#endif #endif
#if defined(REDPINE_CC2500_INO) #if defined(REDPINE_CC2500_INO)
{PROTO_REDPINE, STR_REDPINE, STR_SUBTYPE_REDPINE, 2, OPTION_RFTUNE, 0, 0, SW_CC2500, REDPINE_init, REDPINE_callback }, {PROTO_REDPINE, STR_REDPINE, STR_SUBTYPE_REDPINE, 2, OPTION_RFTUNE, 0, 0, SW_CC2500, REDPINE_init, REDPINE_callback },

View File

@@ -19,7 +19,7 @@
#define VERSION_MAJOR 1 #define VERSION_MAJOR 1
#define VERSION_MINOR 3 #define VERSION_MINOR 3
#define VERSION_REVISION 4 #define VERSION_REVISION 4
#define VERSION_PATCH_LEVEL 00 #define VERSION_PATCH_LEVEL 0
#define MODE_SERIAL 0 #define MODE_SERIAL 0
@@ -89,7 +89,7 @@ enum PROTOCOLS
PROTO_FX = 58, // =>NRF24L01 PROTO_FX = 58, // =>NRF24L01
PROTO_BAYANG_RX = 59, // =>NRF24L01 PROTO_BAYANG_RX = 59, // =>NRF24L01
PROTO_PELIKAN = 60, // =>A7105 PROTO_PELIKAN = 60, // =>A7105
PROTO_EAZYRC = 61, // =>NRF24L01
PROTO_XK = 62, // =>NRF24L01 PROTO_XK = 62, // =>NRF24L01
PROTO_XN297DUMP = 63, // =>NRF24L01 PROTO_XN297DUMP = 63, // =>NRF24L01
PROTO_FRSKYX2 = 64, // =>CC2500 PROTO_FRSKYX2 = 64, // =>CC2500
@@ -360,7 +360,7 @@ enum REDPINE
}; };
enum TRAXXAS enum TRAXXAS
{ {
RX6519 = 0, TRAXXAS_TQ = 0,
}; };
enum ESKY150 enum ESKY150
{ {
@@ -1106,7 +1106,7 @@ Serial: 100000 Baud 8e2 _ xxxx xxxx p --
RED_FAST 0 RED_FAST 0
RED_SLOW 1 RED_SLOW 1
sub_protocol==TRAXXAS sub_protocol==TRAXXAS
RX6519 0 TQ 0
sub_protocol==ESKY150 sub_protocol==ESKY150
ESKY150_4CH 0 ESKY150_4CH 0
ESKY150_7CH 1 ESKY150_7CH 1

View File

@@ -22,7 +22,7 @@
//#define RLINK_DEBUG_TELEM //#define RLINK_DEBUG_TELEM
//#define RLINK_FORCE_ID //#define RLINK_FORCE_ID
#define RLINK_RC4G_FORCE_ID //#define RLINK_RC4G_FORCE_ID
#define RLINK_TX_PACKET_LEN 33 #define RLINK_TX_PACKET_LEN 33
#define RLINK_RX_PACKET_LEN 15 #define RLINK_RX_PACKET_LEN 15
@@ -120,11 +120,44 @@ static void __attribute__((unused)) RLINK_TXID_init()
if(sub_protocol!=RLINK_RC4G) if(sub_protocol!=RLINK_RC4G)
RLINK_hop(); RLINK_hop();
else else
{ {//RLINK_RC4G
// Find 2 unused channels // Find 2 unused channels
// first channel is a multiple of 3 between 00 and 5D // first channel is a multiple of 3 between 00 and 5D
// second channel is a multiple of 3 between 63 and BD // 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 #ifdef RLINK_RC4G_FORCE_ID
hopping_frequency[0] = 0x03; hopping_frequency[0] = 0x03;
hopping_frequency[1] = 0x6F; hopping_frequency[1] = 0x6F;
@@ -293,7 +326,7 @@ static void __attribute__((unused)) RLINK_RC4G_send_packet()
#ifdef RLINK_DEBUG #ifdef RLINK_DEBUG
debug("P="); debug("P=");
for(uint8_t i=1;i<16;i++) for(uint8_t i=1;i<16;i++)
debug(" 0x%02X",packet[i]); debug(" 0x%02X",packet[i]);
debugln(""); debugln("");
#endif #endif
} }
@@ -311,6 +344,8 @@ uint16_t RLINK_callback()
#ifdef MULTI_SYNC #ifdef MULTI_SYNC
telemetry_set_input_sync(RLINK_RC4G_TIMING_PROTO); telemetry_set_input_sync(RLINK_RC4G_TIMING_PROTO);
#endif #endif
CC2500_SetPower();
CC2500_SetFreqOffset();
RLINK_RC4G_send_packet(); RLINK_RC4G_send_packet();
#else #else
SUB_PROTO_INVALID; SUB_PROTO_INVALID;

View File

@@ -312,6 +312,7 @@
#undef CX10_NRF24L01_INO #undef CX10_NRF24L01_INO
#undef DM002_NRF24L01_INO #undef DM002_NRF24L01_INO
#undef E016H_NRF24L01_INO #undef E016H_NRF24L01_INO
#undef EAZYRC_NRF24L01_INO
#undef ESKY_NRF24L01_INO #undef ESKY_NRF24L01_INO
#undef ESKY150_NRF24L01_INO #undef ESKY150_NRF24L01_INO
#undef FQ777_NRF24L01_INO #undef FQ777_NRF24L01_INO
@@ -374,6 +375,7 @@
//#undef PELIKAN_A7105_INO //#undef PELIKAN_A7105_INO
#undef LOSI_CYRF6936_INO //Need DSM to be enabled #undef LOSI_CYRF6936_INO //Need DSM to be enabled
#undef TRAXXAS_CYRF6936_INO #undef TRAXXAS_CYRF6936_INO
#undef EAZYRC_NRF24L01_INO
#undef KYOSHO2_NRF24L01_INO #undef KYOSHO2_NRF24L01_INO
#undef MOULDKG_NRF24L01_INO #undef MOULDKG_NRF24L01_INO
#undef SHENQI_NRF24L01_INO #undef SHENQI_NRF24L01_INO

View File

@@ -227,6 +227,7 @@
#define CX10_NRF24L01_INO //Include Q2X2 protocol #define CX10_NRF24L01_INO //Include Q2X2 protocol
#define DM002_NRF24L01_INO #define DM002_NRF24L01_INO
#define E016H_NRF24L01_INO #define E016H_NRF24L01_INO
#define EAZYRC_NRF24L01_INO
#define ESKY_NRF24L01_INO #define ESKY_NRF24L01_INO
#define ESKY150_NRF24L01_INO #define ESKY150_NRF24L01_INO
#define FQ777_NRF24L01_INO #define FQ777_NRF24L01_INO
@@ -621,6 +622,8 @@ const PPM_Parameters PPM_prot[14*NBR_BANKS]= {
PROTO_E129 PROTO_E129
E129_E129 E129_E129
E129_C186 E129_C186
PROTO_EAZYRC
NONE
PROTO_ESKY PROTO_ESKY
ESKY_STD ESKY_STD
ESKY_ET4 ESKY_ET4
@@ -816,7 +819,7 @@ const PPM_Parameters PPM_prot[14*NBR_BANKS]= {
SYMAX SYMAX
SYMAX5C SYMAX5C
PROTO_TRAXXAS PROTO_TRAXXAS
RX6519 NONE
PROTO_V2X2 PROTO_V2X2
V2X2 V2X2
JXD506 JXD506

View File

@@ -82,6 +82,7 @@ CFlie|38|CFlie||||||||NRF24L01|
[E016HV2](Protocols_Details.md#E016HV2---80)|80|||||||||CC2500/NRF24L01|unknown [E016HV2](Protocols_Details.md#E016HV2---80)|80|||||||||CC2500/NRF24L01|unknown
[E01X](Protocols_Details.md#E01X---45)|45|E012|E015|||||||CYRF6936|HS6200 [E01X](Protocols_Details.md#E01X---45)|45|E012|E015|||||||CYRF6936|HS6200
[E129](Protocols_Details.md#E129---83)|83|E129|C186|||||||CYRF6936|RF2500 [E129](Protocols_Details.md#E129---83)|83|E129|C186|||||||CYRF6936|RF2500
[EazyRC](Protocols_Details.md#EazyRC---61)|61|||||||||NRF24L01|XN297L
[ESky](Protocols_Details.md#ESKY---16)|16|ESky|ET4|||||||NRF24L01| [ESky](Protocols_Details.md#ESKY---16)|16|ESky|ET4|||||||NRF24L01|
[ESky150](Protocols_Details.md#ESKY150---35)|35|||||||||NRF24L01| [ESky150](Protocols_Details.md#ESKY150---35)|35|||||||||NRF24L01|
[ESky150V2](Protocols_Details.md#ESKY150V2---69)|69|||||||||CC2500|NRF51822 [ESky150V2](Protocols_Details.md#ESKY150V2---69)|69|||||||||CC2500|NRF51822
@@ -141,7 +142,7 @@ CFlie|38|CFlie||||||||NRF24L01|
[Skyartec](Protocols_Details.md#Skyartec---68)|68|||||||||CC2500|CC2500 [Skyartec](Protocols_Details.md#Skyartec---68)|68|||||||||CC2500|CC2500
[SLT](Protocols_Details.md#SLT---11)|11|SLT_V1|SLT_V2|Q100|Q200|MR100||||NRF24L01|CC2500 [SLT](Protocols_Details.md#SLT---11)|11|SLT_V1|SLT_V2|Q100|Q200|MR100||||NRF24L01|CC2500
[SymaX](Protocols_Details.md#Symax---10)|10|SYMAX|SYMAX5C|||||||NRF24L01| [SymaX](Protocols_Details.md#Symax---10)|10|SYMAX|SYMAX5C|||||||NRF24L01|
[Traxxas](Protocols_Details.md#Traxxas---43)|43|6519 RX||||||||CYRF6936| [Traxxas](Protocols_Details.md#Traxxas---43)|43|TQ||||||||CYRF6936|
[V2x2](Protocols_Details.md#V2X2---5)|5|V2x2|JXD506|MR101||||||NRF24L01| [V2x2](Protocols_Details.md#V2X2---5)|5|V2x2|JXD506|MR101||||||NRF24L01|
[V761](Protocols_Details.md#V761---48)|48|3CH|4CH|TOPRC||||||NRF24L01|XN297 [V761](Protocols_Details.md#V761---48)|48|3CH|4CH|TOPRC||||||NRF24L01|XN297
[V911S](Protocols_Details.md#V911S---46)|46|V911S*|E119*|||||||NRF24L01|XN297 [V911S](Protocols_Details.md#V911S---46)|46|V911S*|E119*|||||||NRF24L01|XN297
@@ -367,8 +368,6 @@ TX: Axial AX-4 2.4GHz transmitter, HPI TF-41 and Panda Hobby 3CH Smart Radio 2.4
Models: Axial SCX24: Deadbolt, Jeep Wranger Rubicon, Chevrolet 1967 C10, B-17 Betty, HPI RF-50 and Panda Hobby: Tetra K1, X1, X2 Models: Axial SCX24: Deadbolt, Jeep Wranger Rubicon, Chevrolet 1967 C10, B-17 Betty, HPI RF-50 and Panda Hobby: Tetra K1, X1, X2
**Only 4 frequency hopping tables**
Extended limits supported Extended limits supported
CH1|CH2|CH3 CH1|CH2|CH3
@@ -621,7 +620,7 @@ Calib is the same as the original radio with both sticks down and to the left in
Models: Eachine E129/E130 and Twister Ninja 250 Models: Eachine E129/E130 and Twister Ninja 250
### Sub_protocol C186 - *1* ### Sub_protocol C186 - *1*
Models: C186/E120, C127/E110, K127, C159, C189, C129v2 Models: RC ERA C186/E120, C127/E110, K127, C159, C189, C129v2
The FC of the heli seems to store the trims Trim A/E/R=CH7..9. If you use these trims, make sure to center them after powering off the heli or they will be added to the previous trims and over correct. The FC of the heli seems to store the trims Trim A/E/R=CH7..9. If you use these trims, make sure to center them after powering off the heli or they will be added to the previous trims and over correct.
@@ -671,7 +670,7 @@ CH1|CH2|CH3|CH4
A|E|T|R A|E|T|R
## Traxxas - *43* ## Traxxas - *43*
Receiver 6519 Transmitter TQ, Receivers: 6519, ECM-2.5
Extended limits supported Extended limits supported
@@ -1009,7 +1008,7 @@ CH1|CH2|CH3|CH4|CH5|FS_CH1|FS_CH2|FS_CH3|FS_CH4
FS=FailSafe 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* ## Futaba - *21*
Also called SFHSS depending on radio version. Also called SFHSS depending on radio version.
@@ -1653,6 +1652,13 @@ CH1|CH2|CH3|CH4|CH5|CH6|CH7|CH8|CH9
---|---|---|---|---|---|---|---|--- ---|---|---|---|---|---|---|---|---
A|E|T|R|STOP|FLIP|-|HEADLESS|RTH A|E|T|R|STOP|FLIP|-|HEADLESS|RTH
## EazyRC - *61*
Autobind protocol
CH1|CH2|CH3|CH4
---|---|---|---
STEERING||THROTTLE|
## ESKY - *16* ## ESKY - *16*
CH1|CH2|CH3|CH4|CH5|CH6 CH1|CH2|CH3|CH4|CH5|CH6
@@ -1943,14 +1949,10 @@ A|E|T|R|FLIP|LED|PICTURE|VIDEO|HEADLESS|RTH|XCAL|YCAL
Model: JXD 509 is using Q282 with CH12=Start/Stop motors Model: JXD 509 is using Q282 with CH12=Start/Stop motors
## Realacc - *76* ## Realacc - *76*
Model: Realacc R11 Model: Realacc R11, Eachine E017
Untested protocol, let me know if it works.
Autobind protocol Autobind protocol
### Sub_protocol R11 - *0*
CH1|CH2|CH3|CH4|CH5|CH6|CH7|CH8|CH9|CH10 CH1|CH2|CH3|CH4|CH5|CH6|CH7|CH8|CH9|CH10
---|---|---|---|---|---|---|---|---|---- ---|---|---|---|---|---|---|---|---|----
A|E|T|R|FLIP|LIGHT|CALIB|HLESS|RTH|UNK A|E|T|R|FLIP|LIGHT|CALIB|HLESS|RTH|UNK