mirror of
https://github.com/pascallanger/DIY-Multiprotocol-TX-Module.git
synced 2025-02-12 02:33:46 +00:00
New JIABAILE/Gyro subprotocol
This commit is contained in:
parent
9e5e907f4a
commit
58bfd3b8b0
@ -227,5 +227,6 @@
|
|||||||
61,0,EazyRC
|
61,0,EazyRC
|
||||||
98,0,Kyosho3,ASF,0
|
98,0,Kyosho3,ASF,0
|
||||||
100,0,YuXiang,Std,0,Lock,Rate,Land,Manual,Flip,Mode,Pitch
|
100,0,YuXiang,Std,0,Lock,Rate,Land,Manual,Flip,Mode,Pitch
|
||||||
102,0,JIABAILE,Std,1,Speed,Light,Flash
|
102,0,JIABAILE,Std,0,Speed,Light,Flash
|
||||||
|
102,1,JIABAILE,Gyro,0,Speed,Light,Flash,Tr_ST
|
||||||
103,0,H36,Std,1,Flip,HLess,RTH
|
103,0,H36,Std,1,Flip,HLess,RTH
|
||||||
|
@ -17,12 +17,14 @@ Multiprotocol is distributed in the hope that it will be useful,
|
|||||||
#include "iface_xn297.h"
|
#include "iface_xn297.h"
|
||||||
|
|
||||||
//#define FORCE_JIABAILE_ORIGINAL_ID
|
//#define FORCE_JIABAILE_ORIGINAL_ID
|
||||||
|
//#define FORCE_JIABAILE_GYRO_ORIGINAL_ID
|
||||||
|
|
||||||
#define JIABAILE_PAYLOAD_SIZE 8
|
#define JIABAILE_PAYLOAD_SIZE 8
|
||||||
#define JIABAILE_RX_PAYLOAD_SIZE 7
|
#define JIABAILE_RX_PAYLOAD_SIZE 7
|
||||||
#define JIABAILE_RF_NUM_CHANNELS 3
|
#define JIABAILE_RF_NUM_CHANNELS 3
|
||||||
#define JIABAILE_BIND_PACKET_PERIOD 12700
|
#define JIABAILE_BIND_PACKET_PERIOD 12700
|
||||||
#define JIABAILE_PACKET_PERIOD 2408
|
#define JIABAILE_PACKET_PERIOD 2408
|
||||||
|
#define JIABAILE_GYRO_PACKET_PERIOD 8205
|
||||||
#define JIABAILE_BIND_COUNT 160 //2 sec
|
#define JIABAILE_BIND_COUNT 160 //2 sec
|
||||||
#define JIABAILE_WRITE_TIME 1000
|
#define JIABAILE_WRITE_TIME 1000
|
||||||
|
|
||||||
@ -50,12 +52,17 @@ static uint8_t __attribute__((unused)) JIABAILE_channel(uint8_t num)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void __attribute__((unused)) JIABAILE_send_packet()
|
static void __attribute__((unused)) JIABAILE_send_packet()
|
||||||
|
{
|
||||||
|
if(!(sub_protocol == JIABAILE_GYRO && IS_BIND_IN_PROGRESS))
|
||||||
{
|
{
|
||||||
hopping_frequency_no++;
|
hopping_frequency_no++;
|
||||||
if(hopping_frequency_no > 2)
|
if(hopping_frequency_no > 2)
|
||||||
hopping_frequency_no = 0;
|
hopping_frequency_no = 0;
|
||||||
XN297_Hopping(hopping_frequency_no);
|
XN297_Hopping(hopping_frequency_no);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(sub_protocol == JIABAILE_STD)
|
||||||
|
{//Std
|
||||||
memcpy(packet,rx_tx_addr,3);
|
memcpy(packet,rx_tx_addr,3);
|
||||||
memset(&packet[3], 0x00, 4);
|
memset(&packet[3], 0x00, 4);
|
||||||
if(IS_BIND_DONE)
|
if(IS_BIND_DONE)
|
||||||
@ -83,11 +90,61 @@ static void __attribute__((unused)) JIABAILE_send_packet()
|
|||||||
packet[7] = 0x55 + hopping_frequency[hopping_frequency_no];
|
packet[7] = 0x55 + hopping_frequency[hopping_frequency_no];
|
||||||
for(uint8_t i=0;i<JIABAILE_PAYLOAD_SIZE-1;i++)
|
for(uint8_t i=0;i<JIABAILE_PAYLOAD_SIZE-1;i++)
|
||||||
packet[7] += packet[i];
|
packet[7] += packet[i];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{//Gyro
|
||||||
|
if(bind_counter)
|
||||||
|
{
|
||||||
|
bind_counter--;
|
||||||
|
if(!bind_counter)
|
||||||
|
{
|
||||||
|
BIND_DONE;
|
||||||
|
XN297_SetTXAddr(rx_tx_addr, 4);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
uint8_t crc_pos;
|
||||||
|
if(IS_BIND_IN_PROGRESS)
|
||||||
|
{
|
||||||
|
memcpy(packet,rx_tx_addr,4);
|
||||||
|
packet[4] = hopping_frequency[1];
|
||||||
|
packet[5] = hopping_frequency[2];
|
||||||
|
crc_pos = 6;
|
||||||
|
packet[7] = 0x55;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
packet[0] = convert_channel_16b_limit(CH2,0x60,0xA0); //Throttle
|
||||||
|
packet[1] = convert_channel_16b_limit(CH1,0x40,0xC0); //Steering
|
||||||
|
if(Channel_data[CH5] < CHANNEL_MIN_COMMAND)
|
||||||
|
packet[2] = 0x02; //High speed
|
||||||
|
else if(CH5_SW)
|
||||||
|
packet[2] = 0x00; //Low speed
|
||||||
|
else
|
||||||
|
packet[2] = 0x01; //Mid speed
|
||||||
|
packet[3] = convert_channel_8b(CH3) ^0xFF; //Gyro
|
||||||
|
uint8_t val = GET_FLAG(CH6_SW, 0x04) //Light
|
||||||
|
|GET_FLAG(CH7_SW, 0x08); //Flash
|
||||||
|
if(Channel_data[CH4] > CHANNEL_MAX_COMMAND)
|
||||||
|
val |= 0x01; //Trim right
|
||||||
|
else if(Channel_data[CH4] < CHANNEL_MIN_COMMAND)
|
||||||
|
val |= 0x02; //Trim left
|
||||||
|
packet[4] = val;
|
||||||
|
packet[5] = packet[6] = 0x00; //?
|
||||||
|
crc_pos = 7;
|
||||||
|
}
|
||||||
|
uint8_t sum=0;
|
||||||
|
for(uint8_t i=0; i<crc_pos; i++)
|
||||||
|
sum += packet[i];
|
||||||
|
sum ^= 0xFF;
|
||||||
|
packet[crc_pos] = sum;
|
||||||
|
}
|
||||||
|
|
||||||
// Send
|
// Send
|
||||||
XN297_SetPower();
|
XN297_SetPower();
|
||||||
XN297_SetTxRxMode(TX_EN);
|
XN297_SetTxRxMode(TX_EN);
|
||||||
XN297_WritePayload(packet, JIABAILE_PAYLOAD_SIZE);
|
XN297_WritePayload(packet, JIABAILE_PAYLOAD_SIZE);
|
||||||
#ifdef DEBUG_SERIAL
|
#if 0
|
||||||
|
debug("B%d ",bind_counter);
|
||||||
debug("H%d RF%d",hopping_frequency_no,hopping_frequency[hopping_frequency_no]);
|
debug("H%d RF%d",hopping_frequency_no,hopping_frequency[hopping_frequency_no]);
|
||||||
for(uint8_t i=0; i < JIABAILE_PAYLOAD_SIZE; i++)
|
for(uint8_t i=0; i < JIABAILE_PAYLOAD_SIZE; i++)
|
||||||
debug(" %02X", packet[i]);
|
debug(" %02X", packet[i]);
|
||||||
@ -97,6 +154,8 @@ static void __attribute__((unused)) JIABAILE_send_packet()
|
|||||||
|
|
||||||
static void __attribute__((unused)) JIABAILE_initialize_txid()
|
static void __attribute__((unused)) JIABAILE_initialize_txid()
|
||||||
{
|
{
|
||||||
|
if(sub_protocol == JIABAILE_STD)
|
||||||
|
{//Std
|
||||||
rx_tx_addr[0] = rx_tx_addr[3];
|
rx_tx_addr[0] = rx_tx_addr[3];
|
||||||
#ifdef FORCE_JIABAILE_ORIGINAL_ID
|
#ifdef FORCE_JIABAILE_ORIGINAL_ID
|
||||||
memcpy(rx_tx_addr,(uint8_t *)"\xCB\x03\xA5",3);
|
memcpy(rx_tx_addr,(uint8_t *)"\xCB\x03\xA5",3);
|
||||||
@ -108,15 +167,44 @@ static void __attribute__((unused)) JIABAILE_initialize_txid()
|
|||||||
//Bind frequencies
|
//Bind frequencies
|
||||||
memcpy(hopping_frequency,(uint8_t *)"\x07\x27\x45",3); //7,39,69
|
memcpy(hopping_frequency,(uint8_t *)"\x07\x27\x45",3); //7,39,69
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{//Gyro
|
||||||
|
rx_tx_addr[0] += RX_num;
|
||||||
|
uint8_t val = (rx_tx_addr[0] & 0x0F) + 5; //5..20
|
||||||
|
for(uint8_t i=0; i<3; i++)
|
||||||
|
hopping_frequency[i] = val+ 20*i; //hopping_frequency[1,2] could be whatever but...
|
||||||
|
#ifdef FORCE_JIABAILE_GYRO_ORIGINAL_ID
|
||||||
|
if(RX_num)
|
||||||
|
{
|
||||||
|
memcpy(rx_tx_addr,(uint8_t *)"\x7D\x82\x28\xC2",4);
|
||||||
|
memcpy(hopping_frequency,(uint8_t *)"\x12\x1B\x35",3); //18,27,53
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
memcpy(rx_tx_addr,(uint8_t *)"\x0C\xF3\x59\xB3",4);
|
||||||
|
memcpy(hopping_frequency,(uint8_t *)"\x11\x1C\x36",3); //17,28,54
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
debugln("ID: %02X %02X %02X %02X, HOP: %2d %2d %2d",rx_tx_addr[0],rx_tx_addr[1],rx_tx_addr[2],rx_tx_addr[3],hopping_frequency[0],hopping_frequency[1],hopping_frequency[2]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void __attribute__((unused)) JIABAILE_RF_init()
|
static void __attribute__((unused)) JIABAILE_RF_init()
|
||||||
{
|
{
|
||||||
XN297_Configure(XN297_CRCEN, XN297_SCRAMBLED, XN297_1M);
|
XN297_Configure(XN297_CRCEN, XN297_SCRAMBLED, XN297_1M);
|
||||||
//Bind address
|
//Bind address
|
||||||
|
if(sub_protocol == JIABAILE_STD)
|
||||||
|
{//Std
|
||||||
memcpy(rx_id,(uint8_t*)"\xA7\x07\x57\xA7\x26", 5);
|
memcpy(rx_id,(uint8_t*)"\xA7\x07\x57\xA7\x26", 5);
|
||||||
XN297_SetTXAddr(rx_id, 5);
|
XN297_SetTXAddr(rx_id, 5);
|
||||||
XN297_SetRXAddr(rx_id, JIABAILE_RX_PAYLOAD_SIZE);
|
XN297_SetRXAddr(rx_id, JIABAILE_RX_PAYLOAD_SIZE);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{//Gyro
|
||||||
|
XN297_SetTXAddr((uint8_t*)"\x14\x41\x11\x13", 4);
|
||||||
|
XN297_RFChannel(0x29); //41
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
uint16_t JIABAILE_callback()
|
uint16_t JIABAILE_callback()
|
||||||
{
|
{
|
||||||
@ -216,18 +304,20 @@ uint16_t JIABAILE_callback()
|
|||||||
phase++;
|
phase++;
|
||||||
default: //JIABAILE_DATA
|
default: //JIABAILE_DATA
|
||||||
#ifdef MULTI_SYNC
|
#ifdef MULTI_SYNC
|
||||||
telemetry_set_input_sync(JIABAILE_PACKET_PERIOD);
|
telemetry_set_input_sync(packet_period);
|
||||||
#endif
|
#endif
|
||||||
JIABAILE_send_packet();
|
JIABAILE_send_packet();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return JIABAILE_PACKET_PERIOD;
|
return packet_period;
|
||||||
}
|
}
|
||||||
|
|
||||||
void JIABAILE_init()
|
void JIABAILE_init()
|
||||||
{
|
{
|
||||||
JIABAILE_initialize_txid();
|
JIABAILE_initialize_txid();
|
||||||
JIABAILE_RF_init();
|
JIABAILE_RF_init();
|
||||||
|
if(sub_protocol == JIABAILE_STD)
|
||||||
|
{//Std
|
||||||
if(IS_BIND_IN_PROGRESS)
|
if(IS_BIND_IN_PROGRESS)
|
||||||
{
|
{
|
||||||
phase = JIABAILE_BIND;
|
phase = JIABAILE_BIND;
|
||||||
@ -235,6 +325,14 @@ void JIABAILE_init()
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
phase = JIABAILE_PREP_DATA;
|
phase = JIABAILE_PREP_DATA;
|
||||||
|
packet_period = JIABAILE_PACKET_PERIOD;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{//Gyro
|
||||||
|
phase = JIABAILE_DATA;
|
||||||
|
bind_counter = IS_BIND_IN_PROGRESS?JIABAILE_BIND_COUNT>>2:1;
|
||||||
|
packet_period = JIABAILE_GYRO_PACKET_PERIOD;
|
||||||
|
}
|
||||||
hopping_frequency_no = 0;
|
hopping_frequency_no = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -97,5 +97,5 @@
|
|||||||
98,Kyosho3
|
98,Kyosho3
|
||||||
99,XK2
|
99,XK2
|
||||||
100,YuXiang
|
100,YuXiang
|
||||||
102,JIABAILE
|
102,JIABAILE,STD,GYRO
|
||||||
103,H36
|
103,H36
|
@ -185,6 +185,7 @@ const char STR_SUBTYPE_KF606[] = "\x06""KF606\0""MIG320""ZCZ50\0";
|
|||||||
const char STR_SUBTYPE_E129[] = "\x04""E129""C186";
|
const char STR_SUBTYPE_E129[] = "\x04""E129""C186";
|
||||||
const char STR_SUBTYPE_FX[] = "\x04""816\0""620\0""9630""Q560";
|
const char STR_SUBTYPE_FX[] = "\x04""816\0""620\0""9630""Q560";
|
||||||
const char STR_SUBTYPE_SGF22[] = "\x04""F22\0""F22S""J20\0";
|
const char STR_SUBTYPE_SGF22[] = "\x04""F22\0""F22S""J20\0";
|
||||||
|
const char STR_SUBTYPE_JIABAILE[] = "\x04""Std\0""Gyro";
|
||||||
#define NO_SUBTYPE nullptr
|
#define NO_SUBTYPE nullptr
|
||||||
|
|
||||||
#ifdef SEND_CPPM
|
#ifdef SEND_CPPM
|
||||||
@ -381,7 +382,7 @@ const mm_protocol_definition multi_protocols[] = {
|
|||||||
{PROTO_J6PRO, STR_J6PRO, NO_SUBTYPE, 0, OPTION_NONE, 0, 1, SW_CYRF, J6PRO_init, J6PRO_callback },
|
{PROTO_J6PRO, STR_J6PRO, NO_SUBTYPE, 0, OPTION_NONE, 0, 1, SW_CYRF, J6PRO_init, J6PRO_callback },
|
||||||
#endif
|
#endif
|
||||||
#if defined(JIABAILE_NRF24L01_INO)
|
#if defined(JIABAILE_NRF24L01_INO)
|
||||||
{PROTO_JIABAILE, STR_JIABAILE, NO_SUBTYPE, 0, OPTION_NONE, 0, 0, SW_NRF, JIABAILE_init, JIABAILE_callback },
|
{PROTO_JIABAILE, STR_JIABAILE, STR_SUBTYPE_JIABAILE, 2, OPTION_NONE, 0, 0, SW_NRF, JIABAILE_init, JIABAILE_callback },
|
||||||
#endif
|
#endif
|
||||||
#if defined(JJRC345_NRF24L01_INO)
|
#if defined(JJRC345_NRF24L01_INO)
|
||||||
{PROTO_JJRC345, STR_JJRC345, STR_SUBTYPE_JJRC345, 2, OPTION_NONE, 0, 0, SW_NRF, JJRC345_init, JJRC345_callback },
|
{PROTO_JJRC345, STR_JJRC345, STR_SUBTYPE_JJRC345, 2, OPTION_NONE, 0, 0, SW_NRF, JJRC345_init, JJRC345_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 28
|
#define VERSION_PATCH_LEVEL 29
|
||||||
|
|
||||||
#define MODE_SERIAL 0
|
#define MODE_SERIAL 0
|
||||||
|
|
||||||
@ -495,6 +495,11 @@ enum SGF22
|
|||||||
SGF22_F22S = 1,
|
SGF22_F22S = 1,
|
||||||
SGF22_J20 = 2,
|
SGF22_J20 = 2,
|
||||||
};
|
};
|
||||||
|
enum JIABAILE
|
||||||
|
{
|
||||||
|
JIABAILE_STD = 0,
|
||||||
|
JIABAILE_GYRO = 1,
|
||||||
|
};
|
||||||
|
|
||||||
#define NONE 0
|
#define NONE 0
|
||||||
#define P_HIGH 1
|
#define P_HIGH 1
|
||||||
|
@ -737,7 +737,8 @@ const PPM_Parameters PPM_prot[14*NBR_BANKS]= {
|
|||||||
PROTO_J6PRO
|
PROTO_J6PRO
|
||||||
NONE
|
NONE
|
||||||
PROTO_JIABAILE
|
PROTO_JIABAILE
|
||||||
NONE
|
JIABAILE_STD
|
||||||
|
JIABAILE_GYRO
|
||||||
PROTO_JJRC345
|
PROTO_JJRC345
|
||||||
JJRC345
|
JJRC345
|
||||||
SKYTMBLR
|
SKYTMBLR
|
||||||
|
@ -112,7 +112,7 @@ CFlie|38|CFlie||||||||NRF24L01|
|
|||||||
[HoTT](Protocols_Details.md#HoTT---57)|57|Sync|No_Sync|||||||CC2500|
|
[HoTT](Protocols_Details.md#HoTT---57)|57|Sync|No_Sync|||||||CC2500|
|
||||||
[Hubsan](Protocols_Details.md#HUBSAN---2)|2|H107|H301|H501||||||A7105|
|
[Hubsan](Protocols_Details.md#HUBSAN---2)|2|H107|H301|H501||||||A7105|
|
||||||
[J6Pro](Protocols_Details.md#J6Pro---22)|22|||||||||CYRF6936|
|
[J6Pro](Protocols_Details.md#J6Pro---22)|22|||||||||CYRF6936|
|
||||||
[JIABAILE](Protocols_Details.md#JIABAILE---102)|102|||||||||NRF24L01|XN297
|
[JIABAILE](Protocols_Details.md#JIABAILE---102)|102|Std|Gyro|||||||NRF24L01|XN297
|
||||||
[JJRC345](Protocols_Details.md#JJRC345---71)|71|JJRC345|SkyTmblr|||||||NRF24L01|XN297
|
[JJRC345](Protocols_Details.md#JJRC345---71)|71|JJRC345|SkyTmblr|||||||NRF24L01|XN297
|
||||||
[JOYSWAY](Protocols_Details.md#JOYSWAY---84)|84|||||||||NRF24L01|XN297
|
[JOYSWAY](Protocols_Details.md#JOYSWAY---84)|84|||||||||NRF24L01|XN297
|
||||||
[KF606](Protocols_Details.md#KF606---49)|49|KF606|MIG320|ZCZ50||||||NRF24L01|XN297
|
[KF606](Protocols_Details.md#KF606---49)|49|KF606|MIG320|ZCZ50||||||NRF24L01|XN297
|
||||||
@ -1939,6 +1939,7 @@ RATE: -100% Low, 0% Mid, +100% High
|
|||||||
|
|
||||||
## JIABAILE - *102*
|
## JIABAILE - *102*
|
||||||
|
|
||||||
|
### Sub_protocol Std - *0*
|
||||||
Models: JBL-430x 1:43 car without gyro
|
Models: JBL-430x 1:43 car without gyro
|
||||||
|
|
||||||
You must assign a different RX number for each car. Otherwise the new car ID will overwrite the previous one.
|
You must assign a different RX number for each car. Otherwise the new car ID will overwrite the previous one.
|
||||||
@ -1947,7 +1948,19 @@ CH1|CH2|CH3|CH4|CH5|CH6|CH7
|
|||||||
---|---|---|---|---|---|---
|
---|---|---|---|---|---|---
|
||||||
ST|TH|-|ST_TRIM|SPEED|LIGHT|FLASH
|
ST|TH|-|ST_TRIM|SPEED|LIGHT|FLASH
|
||||||
|
|
||||||
SPEED: -100% High, 0% Mid, +100% Low
|
- SPEED: -100% High, 0% Mid, +100% Low
|
||||||
|
- ST_TRIM: value between -100% and +100% but using the steering radio trim looks better
|
||||||
|
|
||||||
|
### Sub_protocol Gyro - *1*
|
||||||
|
Models: JBL-430x 1:43 car with gyro
|
||||||
|
|
||||||
|
CH1|CH2|CH3|CH4|CH5|CH6|CH7
|
||||||
|
---|---|---|---|---|---|---
|
||||||
|
ST|TH|GYRO|ST_TRIM|SPEED|LIGHT|FLASH
|
||||||
|
|
||||||
|
- SPEED: -100% High, 0% Mid, +100% Low
|
||||||
|
- GYRO: -100% Off..+100% Max
|
||||||
|
- ST_TRIM: momentary switch, -100% Trim left, 0% Idle, +100% Trim right. Configure the radio steering trim has buttons (ST- and ST+) and assign them to that channel. Don't forget to disable the steering trim.
|
||||||
|
|
||||||
## JJRC345 - *71*
|
## JJRC345 - *71*
|
||||||
|
|
||||||
@ -2256,9 +2269,8 @@ Same channels assignement as above.
|
|||||||
|
|
||||||
## YuXiang - *100*
|
## YuXiang - *100*
|
||||||
|
|
||||||
Models: E190, F07 UH-1D
|
Models: E190 F07 UH-1D, E186 F08 Bell-206
|
||||||
|
|
||||||
**Only 2 TX ID, use the RX number to switch**.
|
|
||||||
Telemetry A1=Batt voltage with a Ratio 3.5 and Offset 7, A2=Low batt with 0=OK, everything else=BAD
|
Telemetry A1=Batt voltage with a Ratio 3.5 and Offset 7, A2=Low batt with 0=OK, everything else=BAD
|
||||||
|
|
||||||
CH1|CH2|CH3|CH4|CH5|CH6|CH7|CH8|CH9|CH10|CH11
|
CH1|CH2|CH3|CH4|CH5|CH6|CH7|CH8|CH9|CH10|CH11
|
||||||
|
Loading…
x
Reference in New Issue
Block a user