mirror of
https://github.com/pascallanger/DIY-Multiprotocol-TX-Module.git
synced 2025-12-17 05:13:16 +00:00
Compare commits
14 Commits
pascallang
...
2e3520acad
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2e3520acad | ||
|
|
91af921d98 | ||
|
|
ab45ec6d1c | ||
|
|
26b0b6bd20 | ||
|
|
1b9ce32e89 | ||
|
|
332e55831c | ||
|
|
7051438e5d | ||
|
|
28467fac57 | ||
|
|
c7513abad8 | ||
|
|
e6e13c0fdd | ||
|
|
9579a667fc | ||
|
|
cbedda2471 | ||
|
|
f8695befe2 | ||
|
|
e951e3146b |
@@ -35,6 +35,7 @@
|
|||||||
6,3,DSM,X_2F,0,CH5,CH6,CH7,CH8,CH9,CH10,CH11,CH12,n-a,ThKill
|
6,3,DSM,X_2F,0,CH5,CH6,CH7,CH8,CH9,CH10,CH11,CH12,n-a,ThKill
|
||||||
6,4,DSM,AUTO,0,CH5,CH6,CH7,CH8,CH9,CH10,CH11,CH12,n-a,ThKill
|
6,4,DSM,AUTO,0,CH5,CH6,CH7,CH8,CH9,CH10,CH11,CH12,n-a,ThKill
|
||||||
6,5,DSM,R_1F,0,AUX3,AUX4,AUX5
|
6,5,DSM,R_1F,0,AUX3,AUX4,AUX5
|
||||||
|
6,6,DSM,2SFC,0
|
||||||
70,0,DSM_RX,RX,0,CH5,CH6,CH7,CH8,CH9,CH10,CH11,CH12
|
70,0,DSM_RX,RX,0,CH5,CH6,CH7,CH8,CH9,CH10,CH11,CH12
|
||||||
70,1,DSM_RX,CPPM,0,CH5,CH6,CH7,CH8,CH9,CH10,CH11,CH12
|
70,1,DSM_RX,CPPM,0,CH5,CH6,CH7,CH8,CH9,CH10,CH11,CH12
|
||||||
45,0,E01X,E012,1,n-a,Flip,n-a,HLess,RTH
|
45,0,E01X,E012,1,n-a,Flip,n-a,HLess,RTH
|
||||||
@@ -157,7 +158,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
|
||||||
|
|||||||
@@ -19,11 +19,10 @@
|
|||||||
|
|
||||||
//#define DSM_DEBUG_FWD_PGM
|
//#define DSM_DEBUG_FWD_PGM
|
||||||
//#define DEBUG_BIND 1
|
//#define DEBUG_BIND 1
|
||||||
//#define DSM_GR300
|
|
||||||
|
|
||||||
#define CLONE_BIT_MASK 0x20
|
#define CLONE_BIT_MASK 0x20
|
||||||
|
#define DSM_BIND_CHANNEL 0x0D //13 This can be any odd channel
|
||||||
#define DSM_BIND_CHANNEL 0x0d //13 This can be any odd channel
|
#define DSM2_SFC_PERIOD 16500
|
||||||
|
|
||||||
//During binding we will send BIND_COUNT packets
|
//During binding we will send BIND_COUNT packets
|
||||||
//One packet each 10msec
|
//One packet each 10msec
|
||||||
@@ -111,7 +110,6 @@ static void __attribute__((unused)) DSM_build_bind_packet()
|
|||||||
else // DSMX_2F && DSM_AUTO
|
else // DSMX_2F && DSM_AUTO
|
||||||
packet[12] = 0xb2; // DSMX/2048 2 packets
|
packet[12] = 0xb2; // DSMX/2048 2 packets
|
||||||
|
|
||||||
|
|
||||||
packet[13] = 0x00; //???
|
packet[13] = 0x00; //???
|
||||||
for(i = 8; i < 14; i++)
|
for(i = 8; i < 14; i++)
|
||||||
sum += packet[i];
|
sum += packet[i];
|
||||||
@@ -137,9 +135,14 @@ static void __attribute__((unused)) DSM_update_channels()
|
|||||||
if(num_ch<3 || num_ch>12)
|
if(num_ch<3 || num_ch>12)
|
||||||
num_ch=6; // Default to 6 channels if invalid choice...
|
num_ch=6; // Default to 6 channels if invalid choice...
|
||||||
|
|
||||||
|
#ifndef MULTI_AIR
|
||||||
if(sub_protocol==DSMR && num_ch>7)
|
if(sub_protocol==DSMR && num_ch>7)
|
||||||
num_ch=7; // Max 7 channels in DSMR
|
num_ch=7; // Max 7 channels in DSMR
|
||||||
|
|
||||||
|
if(sub_protocol==DSM2_SFC && num_ch>5)
|
||||||
|
num_ch=5; // Max 5 channels in DSM2_SFC
|
||||||
|
#endif
|
||||||
|
|
||||||
// Create channel map based on number of channels and refresh rate
|
// Create channel map based on number of channels and refresh rate
|
||||||
uint8_t idx=num_ch-3;
|
uint8_t idx=num_ch-3;
|
||||||
if((option & 0x40) && num_ch>7 && num_ch<12)
|
if((option & 0x40) && num_ch>7 && num_ch<12)
|
||||||
@@ -175,7 +178,7 @@ static void __attribute__((unused)) DSM_build_data_packet(uint8_t upper)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifndef MULTI_AIR
|
#ifndef MULTI_AIR
|
||||||
if(sub_protocol == DSMR)
|
if(sub_protocol == DSMR || sub_protocol == DSM2_SFC)
|
||||||
{
|
{
|
||||||
for (uint8_t i = 0; i < 7; i++)
|
for (uint8_t i = 0; i < 7; i++)
|
||||||
{
|
{
|
||||||
@@ -266,12 +269,18 @@ static uint8_t __attribute__((unused)) DSM_Check_RX_packet()
|
|||||||
uint16_t DSM_callback()
|
uint16_t DSM_callback()
|
||||||
{
|
{
|
||||||
#if defined MULTI_EU
|
#if defined MULTI_EU
|
||||||
if(sub_protocol == DSM2_1F || sub_protocol == DSM2_2F)
|
if(sub_protocol == DSM2_1F || sub_protocol == DSM2_2F || sub_protocol == DSM2_SFC)
|
||||||
|
{
|
||||||
|
SUB_PROTO_INVALID;
|
||||||
return 11000;
|
return 11000;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
#if defined MULTI_AIR
|
#if defined MULTI_AIR
|
||||||
if(sub_protocol == DSMR)
|
if(sub_protocol == DSMR || sub_protocol == DSM2_SFC)
|
||||||
|
{
|
||||||
|
SUB_PROTO_INVALID;
|
||||||
return 11000;
|
return 11000;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
#define DSM_CH1_CH2_DELAY 4010 // Time between write of channel 1 and channel 2
|
#define DSM_CH1_CH2_DELAY 4010 // Time between write of channel 1 and channel 2
|
||||||
#ifdef STM32_BOARD
|
#ifdef STM32_BOARD
|
||||||
@@ -285,12 +294,7 @@ uint16_t DSM_callback()
|
|||||||
uint8_t len;
|
uint8_t len;
|
||||||
#endif
|
#endif
|
||||||
uint8_t start;
|
uint8_t start;
|
||||||
|
//debugln("P=%d",phase);
|
||||||
#ifdef DSM_GR300
|
|
||||||
uint16_t timing=5000+(convert_channel_8b(CH13)*100);
|
|
||||||
debugln("T=%u",timing);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
switch(phase)
|
switch(phase)
|
||||||
{
|
{
|
||||||
case DSM_BIND_WRITE:
|
case DSM_BIND_WRITE:
|
||||||
@@ -371,24 +375,32 @@ uint16_t DSM_callback()
|
|||||||
CYRF_SetTxRxMode(TX_EN);
|
CYRF_SetTxRxMode(TX_EN);
|
||||||
hopping_frequency_no = 0;
|
hopping_frequency_no = 0;
|
||||||
phase = DSM_CH1_WRITE_A; // in fact phase++
|
phase = DSM_CH1_WRITE_A; // in fact phase++
|
||||||
|
#ifndef MULTI_AIR
|
||||||
if(sub_protocol == DSMR)
|
if(sub_protocol == DSMR)
|
||||||
DSM_set_sop_data_crc(false, true);
|
DSM_set_sop_data_crc(false, true);
|
||||||
else
|
else
|
||||||
|
#endif
|
||||||
DSM_set_sop_data_crc(true, sub_protocol==DSMX_2F||sub_protocol==DSMX_1F); //prep CH1
|
DSM_set_sop_data_crc(true, sub_protocol==DSMX_2F||sub_protocol==DSMX_1F); //prep CH1
|
||||||
return 10000;
|
return 10000;
|
||||||
case DSM_CH1_WRITE_A:
|
case DSM_CH1_WRITE_A:
|
||||||
#ifdef MULTI_SYNC
|
#ifdef MULTI_SYNC
|
||||||
|
if(sub_protocol!=DSM2_SFC)
|
||||||
telemetry_set_input_sync(11000); // Always request 11ms spacing even if we don't use half of it in 22ms mode
|
telemetry_set_input_sync(11000); // Always request 11ms spacing even if we don't use half of it in 22ms mode
|
||||||
|
else
|
||||||
|
telemetry_set_input_sync(DSM2_SFC_PERIOD);
|
||||||
#endif
|
#endif
|
||||||
|
#ifndef MULTI_AIR
|
||||||
if(sub_protocol == DSMR)
|
if(sub_protocol == DSMR)
|
||||||
CYRF_SetPower(0x08); //Keep transmit power in sync
|
CYRF_SetPower(0x08); //Keep transmit power in sync
|
||||||
else
|
else
|
||||||
|
#endif
|
||||||
CYRF_SetPower(0x28); //Keep transmit power in sync
|
CYRF_SetPower(0x28); //Keep transmit power in sync
|
||||||
case DSM_CH1_WRITE_B:
|
case DSM_CH1_WRITE_B:
|
||||||
DSM_build_data_packet(phase == DSM_CH1_WRITE_B); // build lower or upper channels
|
DSM_build_data_packet(phase == DSM_CH1_WRITE_B); // build lower or upper channels
|
||||||
case DSM_CH2_WRITE_A:
|
case DSM_CH2_WRITE_A:
|
||||||
case DSM_CH2_WRITE_B:
|
case DSM_CH2_WRITE_B:
|
||||||
CYRF_ReadRegister(CYRF_04_TX_IRQ_STATUS); // clear IRQ flags
|
CYRF_ReadRegister(CYRF_04_TX_IRQ_STATUS); // clear IRQ flags
|
||||||
|
//debugln_time("");
|
||||||
CYRF_WriteDataPacket(packet);
|
CYRF_WriteDataPacket(packet);
|
||||||
#if 0
|
#if 0
|
||||||
for(uint8_t i=0;i<16;i++)
|
for(uint8_t i=0;i<16;i++)
|
||||||
@@ -426,14 +438,14 @@ uint16_t DSM_callback()
|
|||||||
phase++; // change from CH2_CHECK to CH2_READ
|
phase++; // change from CH2_CHECK to CH2_READ
|
||||||
CYRF_SetTxRxMode(RX_EN); //Receive mode
|
CYRF_SetTxRxMode(RX_EN); //Receive mode
|
||||||
CYRF_WriteRegister(CYRF_05_RX_CTRL, 0x87); //0x80??? //Prepare to receive
|
CYRF_WriteRegister(CYRF_05_RX_CTRL, 0x87); //0x80??? //Prepare to receive
|
||||||
if(sub_protocol==DSMR)
|
#ifndef MULTI_AIR
|
||||||
|
if(sub_protocol==DSMR || sub_protocol == DSM2_SFC)
|
||||||
{
|
{
|
||||||
phase = DSM_CH2_READ_B;
|
phase = DSM_CH2_READ_B;
|
||||||
|
if(sub_protocol == DSM2_SFC)
|
||||||
|
return DSM2_SFC_PERIOD - DSM_CH1_CH2_DELAY - DSM_WRITE_DELAY - DSM_READ_DELAY;
|
||||||
return 11000 - DSM_WRITE_DELAY - DSM_READ_DELAY;
|
return 11000 - DSM_WRITE_DELAY - DSM_READ_DELAY;
|
||||||
}
|
}
|
||||||
#ifdef DSM_GR300
|
|
||||||
if(num_ch==3)
|
|
||||||
return timing - DSM_CH1_CH2_DELAY - DSM_WRITE_DELAY - DSM_READ_DELAY;
|
|
||||||
#endif
|
#endif
|
||||||
return 11000 - DSM_CH1_CH2_DELAY - DSM_WRITE_DELAY - DSM_READ_DELAY;
|
return 11000 - DSM_CH1_CH2_DELAY - DSM_WRITE_DELAY - DSM_READ_DELAY;
|
||||||
case DSM_CH2_READ_A:
|
case DSM_CH2_READ_A:
|
||||||
@@ -468,10 +480,6 @@ uint16_t DSM_callback()
|
|||||||
CYRF_WriteRegister(CYRF_29_RX_ABORT, 0x00); // Clear abort RX operation
|
CYRF_WriteRegister(CYRF_29_RX_ABORT, 0x00); // Clear abort RX operation
|
||||||
CYRF_WriteRegister(CYRF_05_RX_CTRL, 0x87); //0x80??? //Prepare to receive
|
CYRF_WriteRegister(CYRF_05_RX_CTRL, 0x87); //0x80??? //Prepare to receive
|
||||||
phase = DSM_CH2_READ_B;
|
phase = DSM_CH2_READ_B;
|
||||||
#ifdef DSM_GR300
|
|
||||||
if(num_ch==3)
|
|
||||||
return timing;
|
|
||||||
#endif
|
|
||||||
return 11000;
|
return 11000;
|
||||||
}
|
}
|
||||||
if (phase == DSM_CH2_READ_A)
|
if (phase == DSM_CH2_READ_A)
|
||||||
@@ -492,19 +500,15 @@ uint16_t DSM_callback()
|
|||||||
else
|
else
|
||||||
{ //Normal mode 22ms
|
{ //Normal mode 22ms
|
||||||
phase = DSM_CH1_WRITE_A; // change from CH2_CHECK_A to CH1_WRITE_A (ie no upper)
|
phase = DSM_CH1_WRITE_A; // change from CH2_CHECK_A to CH1_WRITE_A (ie no upper)
|
||||||
#ifdef DSM_GR300
|
#ifndef MULTI_AIR
|
||||||
if(num_ch==3)
|
if(sub_protocol==DSM2_SFC)
|
||||||
return timing - DSM_CH1_CH2_DELAY - DSM_WRITE_DELAY ;
|
return DSM2_SFC_PERIOD - DSM_CH1_CH2_DELAY - DSM_WRITE_DELAY ;
|
||||||
#endif
|
#endif
|
||||||
return 22000 - DSM_CH1_CH2_DELAY - DSM_WRITE_DELAY ;
|
return 22000 - DSM_CH1_CH2_DELAY - DSM_WRITE_DELAY ;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
phase = DSM_CH1_WRITE_A; // change from CH2_CHECK_B to CH1_WRITE_A (upper already transmitted so transmit lower)
|
phase = DSM_CH1_WRITE_A; // change from CH2_CHECK_B to CH1_WRITE_A (upper already transmitted so transmit lower)
|
||||||
#ifdef DSM_GR300
|
|
||||||
if(num_ch==3)
|
|
||||||
return timing - DSM_CH1_CH2_DELAY - DSM_WRITE_DELAY ;
|
|
||||||
#endif
|
|
||||||
return 11000 - DSM_CH1_CH2_DELAY - DSM_WRITE_DELAY;
|
return 11000 - DSM_CH1_CH2_DELAY - DSM_WRITE_DELAY;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@@ -547,15 +551,13 @@ void DSM_init()
|
|||||||
SUB_PROTO_INVALID;
|
SUB_PROTO_INVALID;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
SUB_PROTO_VALID;
|
//SUB_PROTO_VALID;
|
||||||
uint8_t row = rx_tx_addr[3]%22;
|
uint8_t row = rx_tx_addr[3]%22;
|
||||||
for(uint8_t i=0; i< 4; i++)
|
for(uint8_t i=0; i< 4; i++)
|
||||||
cyrfmfg_id[i] = pgm_read_byte_near(&DSMR_ID_FREQ[row][i]);
|
cyrfmfg_id[i] = pgm_read_byte_near(&DSMR_ID_FREQ[row][i]);
|
||||||
for(uint8_t i=0; i< 23; i++)
|
for(uint8_t i=0; i< 23; i++)
|
||||||
hopping_frequency[i] = pgm_read_byte_near(&DSMR_ID_FREQ[row][i+4]);
|
hopping_frequency[i] = pgm_read_byte_near(&DSMR_ID_FREQ[row][i+4]);
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
SUB_PROTO_INVALID;
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -586,7 +588,7 @@ void DSM_init()
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
SUB_PROTO_VALID;
|
//SUB_PROTO_VALID;
|
||||||
CYRF_GetMfgData(cyrfmfg_id);
|
CYRF_GetMfgData(cyrfmfg_id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
3,FrskyD,D8,Cloned
|
3,FrskyD,D8,Cloned
|
||||||
4,Hisky,Hisky,HK310
|
4,Hisky,Hisky,HK310
|
||||||
5,V2x2,V2x2,JXD506,MR101
|
5,V2x2,V2x2,JXD506,MR101
|
||||||
6,DSM,DSM2_1F,DSM2_2F,DSMX_1F,DSMX_2F,AUTO,DSMR_1F
|
6,DSM,DSM2_1F,DSM2_2F,DSMX_1F,DSMX_2F,AUTO,DSMR_1F,DSMR,DSM2_SFC
|
||||||
7,Devo,8CH,10CH,12CH,6CH,7CH
|
7,Devo,8CH,10CH,12CH,6CH,7CH
|
||||||
8,YD717,YD717,SKYWLKR,SYMAX4,XINXUN,NIHUI
|
8,YD717,YD717,SKYWLKR,SYMAX4,XINXUN,NIHUI
|
||||||
9,KN,WLTOYS,FEILUN
|
9,KN,WLTOYS,FEILUN
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -121,9 +121,9 @@ const char STR_SUBTYPE_FRSKYD[] = "\x06""D8\0 ""Cloned";
|
|||||||
const char STR_SUBTYPE_HISKY[] = "\x05""Std\0 ""HK310";
|
const char STR_SUBTYPE_HISKY[] = "\x05""Std\0 ""HK310";
|
||||||
const char STR_SUBTYPE_V2X2[] = "\x06""Std\0 ""JXD506""MR101\0";
|
const char STR_SUBTYPE_V2X2[] = "\x06""Std\0 ""JXD506""MR101\0";
|
||||||
#ifndef MULTI_EU
|
#ifndef MULTI_EU
|
||||||
const char STR_SUBTYPE_DSM[] = "\x04""2 1F""2 2F""X 1F""X 2F""Auto""R 1F";
|
const char STR_SUBTYPE_DSM[] = "\x04""2 1F""2 2F""X 1F""X 2F""Auto""R 1F""2SFC";
|
||||||
#else
|
#else
|
||||||
const char STR_SUBTYPE_DSM[] = "\x04""--->""--->""X 1F""X 2F""Auto""R 1F";
|
const char STR_SUBTYPE_DSM[] = "\x04""--->""--->""X 1F""X 2F""Auto""R 1F""----";
|
||||||
#endif
|
#endif
|
||||||
const char STR_SUBTYPE_DEVO[] = "\x04""8ch\0""10ch""12ch""6ch\0""7ch\0";
|
const char STR_SUBTYPE_DEVO[] = "\x04""8ch\0""10ch""12ch""6ch\0""7ch\0";
|
||||||
const char STR_SUBTYPE_YD717[] = "\x07""Std\0 ""SkyWlkr""Syma X4""XINXUN\0""NIHUI\0 ";
|
const char STR_SUBTYPE_YD717[] = "\x07""Std\0 ""SkyWlkr""Syma X4""XINXUN\0""NIHUI\0 ";
|
||||||
@@ -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";
|
||||||
@@ -259,7 +258,7 @@ const mm_protocol_definition multi_protocols[] = {
|
|||||||
{PROTO_DM002, STR_DM002, NO_SUBTYPE, 0, OPTION_NONE, 0, 0, SW_NRF, DM002_init, DM002_callback },
|
{PROTO_DM002, STR_DM002, NO_SUBTYPE, 0, OPTION_NONE, 0, 0, SW_NRF, DM002_init, DM002_callback },
|
||||||
#endif
|
#endif
|
||||||
#if defined(DSM_CYRF6936_INO)
|
#if defined(DSM_CYRF6936_INO)
|
||||||
{PROTO_DSM, STR_DSM, STR_SUBTYPE_DSM, 6, OPTION_MAXTHR, 0, 1, SW_CYRF, DSM_init, DSM_callback },
|
{PROTO_DSM, STR_DSM, STR_SUBTYPE_DSM, 7, OPTION_MAXTHR, 0, 1, SW_CYRF, DSM_init, DSM_callback },
|
||||||
#endif
|
#endif
|
||||||
#if defined(DSM_RX_CYRF6936_INO)
|
#if defined(DSM_RX_CYRF6936_INO)
|
||||||
{PROTO_DSM_RX, STR_DSM_RX, STR_SUB_DSM_RX, DSMCPPM, OPTION_NONE, 0, 1, SW_CYRF, DSM_RX_init, DSM_RX_callback },
|
{PROTO_DSM_RX, STR_DSM_RX, STR_SUB_DSM_RX, DSMCPPM, OPTION_NONE, 0, 1, SW_CYRF, DSM_RX_init, DSM_RX_callback },
|
||||||
@@ -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 },
|
||||||
|
|||||||
@@ -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 2
|
||||||
|
|
||||||
#define MODE_SERIAL 0
|
#define MODE_SERIAL 0
|
||||||
|
|
||||||
@@ -173,6 +173,7 @@ enum DSM
|
|||||||
DSMX_2F = 3,
|
DSMX_2F = 3,
|
||||||
DSM_AUTO = 4,
|
DSM_AUTO = 4,
|
||||||
DSMR = 5,
|
DSMR = 5,
|
||||||
|
DSM2_SFC = 6,
|
||||||
};
|
};
|
||||||
enum DSM_RX
|
enum DSM_RX
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -432,7 +432,6 @@
|
|||||||
#undef OMP_CCNRF_INO
|
#undef OMP_CCNRF_INO
|
||||||
#undef Q303_CCNRF_INO
|
#undef Q303_CCNRF_INO
|
||||||
#undef Q90C_CCNRF_INO
|
#undef Q90C_CCNRF_INO
|
||||||
#undef SLT_CCNRF_INO
|
|
||||||
#undef V911S_CCNRF_INO
|
#undef V911S_CCNRF_INO
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -606,6 +606,7 @@ const PPM_Parameters PPM_prot[14*NBR_BANKS]= {
|
|||||||
DSMX_1F
|
DSMX_1F
|
||||||
DSMX_2F
|
DSMX_2F
|
||||||
DSMR
|
DSMR
|
||||||
|
DSM2_SFC
|
||||||
PROTO_DSM_RX
|
PROTO_DSM_RX
|
||||||
DSM_RX
|
DSM_RX
|
||||||
DSM_CLONE
|
DSM_CLONE
|
||||||
|
|||||||
@@ -75,7 +75,7 @@ CFlie|38|CFlie||||||||NRF24L01|
|
|||||||
[CX10](Protocols_Details.md#CX10---12)|12|GREEN|BLUE|DM007|-|J3015_1|J3015_2|MK33041||NRF24L01|XN297
|
[CX10](Protocols_Details.md#CX10---12)|12|GREEN|BLUE|DM007|-|J3015_1|J3015_2|MK33041||NRF24L01|XN297
|
||||||
[Devo](Protocols_Details.md#DEVO---7)|7|Devo|8CH|10CH|12CH|6CH|7CH|||CYRF6936|
|
[Devo](Protocols_Details.md#DEVO---7)|7|Devo|8CH|10CH|12CH|6CH|7CH|||CYRF6936|
|
||||||
[DM002](Protocols_Details.md#DM002---33)|33|||||||||NRF24L01|XN297
|
[DM002](Protocols_Details.md#DM002---33)|33|||||||||NRF24L01|XN297
|
||||||
[DSM](Protocols_Details.md#DSM---6)|6|DSM2_1F|DSM2_2F|DSMX_1F|DSMX_2F|AUTO|DSMR_1F|||CYRF6936|
|
[DSM](Protocols_Details.md#DSM---6)|6|DSM2_1F|DSM2_2F|DSMX_1F|DSMX_2F|AUTO|DSMR_1F|DSM2SFC||CYRF6936|
|
||||||
[DSM_RX](Protocols_Details.md#DSM_RX---70)|70|Multi|CPPM|||||||CYRF6936|
|
[DSM_RX](Protocols_Details.md#DSM_RX---70)|70|Multi|CPPM|||||||CYRF6936|
|
||||||
[E010R5](Protocols_Details.md#E010R5---81)|81|||||||||CYRF6936|RF2500
|
[E010R5](Protocols_Details.md#E010R5---81)|81|||||||||CYRF6936|RF2500
|
||||||
[E016H](Protocols_Details.md#E016H---85)|85|||||||||NRF24L01|XN297
|
[E016H](Protocols_Details.md#E016H---85)|85|||||||||NRF24L01|XN297
|
||||||
@@ -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
|
||||||
@@ -542,12 +540,21 @@ Surface DSMR receivers
|
|||||||
|
|
||||||
**Only 22 IDs available**, use RX num to cycle through them.
|
**Only 22 IDs available**, use RX num to cycle through them.
|
||||||
|
|
||||||
Telemetry enabled, extended limits available.
|
Telemetry enabled, extended limits available and no channel mapping. Do not use DSM/AUTO to bind but DSM/R_1F instead.
|
||||||
|
|
||||||
CH1|CH2|CH3|CH4|CH5|CH6|CH7
|
CH1|CH2|CH3|CH4|CH5|CH6|CH7
|
||||||
---|---|---|---|---|---|---
|
---|---|---|---|---|---|---
|
||||||
STR|THR|AUX1|AUX2|AUX3|AUX4|AUX5
|
STR|THR|AUX1|AUX2|AUX3|AUX4|AUX5
|
||||||
|
|
||||||
|
### Sub_protocol DSM2SFC - *6*
|
||||||
|
Surface DSM2 receivers, tested with a SR3100
|
||||||
|
|
||||||
|
Extended limits available and no channel mapping. Do not use DSM/AUTO to bind but DSM/2SFC instead.
|
||||||
|
|
||||||
|
CH1|CH2|CH3
|
||||||
|
---|---|---
|
||||||
|
STR|THR|AUX1
|
||||||
|
|
||||||
## DSM_RX - *70*
|
## DSM_RX - *70*
|
||||||
The DSM receiver protocol enables master/slave trainning, separate access from 2 different radios to the same model,...
|
The DSM receiver protocol enables master/slave trainning, separate access from 2 different radios to the same model,...
|
||||||
|
|
||||||
@@ -622,7 +629,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.
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user