Compare commits

..

9 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
7 changed files with 50 additions and 23 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

View File

@@ -16,7 +16,7 @@ Multiprotocol is distributed in the hope that it will be useful,
#include "iface_xn297.h" #include "iface_xn297.h"
#define FORCE_EAZYRC_ORIGINAL_ID //#define FORCE_EAZYRC_ORIGINAL_ID
#define EAZYRC_PAYLOAD_SIZE 10 #define EAZYRC_PAYLOAD_SIZE 10
#define EAZYRC_RF_NUM_CHANNELS 4 #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]) // 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 //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]) // 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 //Packet period around 5ms with a large jitter
memset(&packet[3], 0x00, 7);
if(IS_BIND_IN_PROGRESS) if(IS_BIND_IN_PROGRESS)
{ {
memcpy(&packet,rx_tx_addr,3); memcpy(&packet,rx_tx_addr,3);
memset(&packet[3], 0x00, 7);
packet[6] = hopping_frequency[0]; packet[6] = hopping_frequency[0];
packet[8] = 0x78; //??? packet type? packet[8] = 0x78; //??? packet type?
} }
@@ -60,7 +60,6 @@ static void __attribute__((unused)) EAZYRC_send_packet()
packet[1] = convert_channel_8b(AILERON); packet[1] = convert_channel_8b(AILERON);
packet[2] = 0x1F; //??? additional channel? packet[2] = 0x1F; //??? additional channel?
packet[3] = 0x19; //??? additional channel? packet[3] = 0x19; //??? additional channel?
memset(&packet[4], 0x00, 6);
packet[6] = hopping_frequency[0]; packet[6] = hopping_frequency[0];
packet[8] = 0xAB; //??? packet type? packet[8] = 0xAB; //??? packet type?
} }
@@ -80,7 +79,7 @@ static void __attribute__((unused)) EAZYRC_send_packet()
static void __attribute__((unused)) EAZYRC_initialize_txid() static void __attribute__((unused)) EAZYRC_initialize_txid()
{ {
rx_tx_addr[1] = rx_tx_addr[3]; 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 #ifdef FORCE_EAZYRC_ORIGINAL_ID
rx_tx_addr[0] = 0x1A; rx_tx_addr[0] = 0x1A;
rx_tx_addr[1] = 0xA0; rx_tx_addr[1] = 0xA0;

View File

@@ -73,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

@@ -169,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";
@@ -437,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

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

@@ -368,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
@@ -622,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.
@@ -1010,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.
@@ -1951,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