mirror of
https://github.com/pascallanger/DIY-Multiprotocol-TX-Module.git
synced 2025-02-04 22:48:12 +00:00
V2X2: new subprotocol JXD506
Protocol number: 5 Subprotocol: 1
This commit is contained in:
parent
1ddc923631
commit
87de5b5305
@ -2,7 +2,7 @@
|
|||||||
2,Hubsan
|
2,Hubsan
|
||||||
3,FrskyD
|
3,FrskyD
|
||||||
4,Hisky,Hisky,HK310
|
4,Hisky,Hisky,HK310
|
||||||
5,V2x2
|
5,V2x2,V2x2,JXD506
|
||||||
6,DSM,DSM2-22,DSM2-11,DSMX-22,DSMX-11,AUTO
|
6,DSM,DSM2-22,DSM2-11,DSMX-22,DSMX-11,AUTO
|
||||||
7,Devo
|
7,Devo
|
||||||
8,YD717,YD717,SKYWLKR,SYMAX4,XINXUN,NIHUI
|
8,YD717,YD717,SKYWLKR,SYMAX4,XINXUN,NIHUI
|
||||||
@ -23,7 +23,7 @@
|
|||||||
23,FQ777
|
23,FQ777
|
||||||
24,ASSAN
|
24,ASSAN
|
||||||
25,FrskyV
|
25,FrskyV
|
||||||
26,HONTAI,HONTAI,JJRCX1,X5C1
|
26,HONTAI,HONTAI,JJRCX1,X5C1,FQ777_951
|
||||||
27,OpnLrs
|
27,OpnLrs
|
||||||
28,AFHD2SA,PWM_IBUS,PPM_IBUS,PWM_SBUS,PPM_SBUS
|
28,AFHD2SA,PWM_IBUS,PPM_IBUS,PWM_SBUS,PPM_SBUS
|
||||||
29,Q2X2,Q242,Q282
|
29,Q2X2,Q242,Q282
|
||||||
|
@ -154,6 +154,11 @@ enum HONTAI
|
|||||||
FORMAT_JJRCX1 = 1,
|
FORMAT_JJRCX1 = 1,
|
||||||
FORMAT_X5C1 = 2
|
FORMAT_X5C1 = 2
|
||||||
};
|
};
|
||||||
|
enum V2X2
|
||||||
|
{
|
||||||
|
V2X2 = 0,
|
||||||
|
JXD506 = 1,
|
||||||
|
};
|
||||||
|
|
||||||
#define NONE 0
|
#define NONE 0
|
||||||
#define P_HIGH 1
|
#define P_HIGH 1
|
||||||
@ -490,6 +495,10 @@ Serial: 100000 Baud 8e2 _ xxxx xxxx p --
|
|||||||
PPM_IBUS 1
|
PPM_IBUS 1
|
||||||
PWM_SBUS 2
|
PWM_SBUS 2
|
||||||
PPM_SBUS 3
|
PPM_SBUS 3
|
||||||
|
sub_protocol==V2X2
|
||||||
|
V2X2 0
|
||||||
|
JXD506 1
|
||||||
|
|
||||||
Power value => 0x80 0=High/1=Low
|
Power value => 0x80 0=High/1=Low
|
||||||
Stream[3] = option_protocol;
|
Stream[3] = option_protocol;
|
||||||
option_protocol value is -127..127
|
option_protocol value is -127..127
|
||||||
|
@ -21,12 +21,13 @@
|
|||||||
#include "iface_nrf24l01.h"
|
#include "iface_nrf24l01.h"
|
||||||
|
|
||||||
|
|
||||||
#define BIND_COUNT 1000
|
#define V2X2_BIND_COUNT 1000
|
||||||
// Timeout for callback in uSec, 4ms=4000us for V202
|
// Timeout for callback in uSec, 4ms=4000us for V202
|
||||||
#define PACKET_PERIOD 4000
|
#define V2X2_PACKET_PERIOD 4000
|
||||||
//
|
//
|
||||||
// Time to wait for packet to be sent (no ACK, so very short)
|
// Time to wait for packet to be sent (no ACK, so very short)
|
||||||
#define PACKET_CHKTIME 100
|
#define V2X2_PACKET_CHKTIME 100
|
||||||
|
#define V2X2_PAYLOADSIZE 16
|
||||||
|
|
||||||
//
|
//
|
||||||
enum {
|
enum {
|
||||||
@ -40,11 +41,15 @@ enum {
|
|||||||
// flags going to byte 10
|
// flags going to byte 10
|
||||||
V2X2_FLAG_HEADLESS = 0x02,
|
V2X2_FLAG_HEADLESS = 0x02,
|
||||||
V2X2_FLAG_MAG_CAL_X = 0x08,
|
V2X2_FLAG_MAG_CAL_X = 0x08,
|
||||||
V2X2_FLAG_MAG_CAL_Y = 0x20
|
V2X2_FLAG_MAG_CAL_Y = 0x20,
|
||||||
|
V2X2_FLAG_EMERGENCY = 0x80, // JXD-506
|
||||||
|
// flags going to byte 11 (JXD-506)
|
||||||
|
V2X2_FLAG_START_STOP = 0x40,
|
||||||
|
V2X2_FLAG_CAMERA_UP = 0x01,
|
||||||
|
V2X2_FLAG_CAMERA_DN = 0x02,
|
||||||
};
|
};
|
||||||
|
|
||||||
//
|
//
|
||||||
#define V2X2_PAYLOADSIZE 16
|
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
V202_INIT2 = 0,
|
V202_INIT2 = 0,
|
||||||
@ -54,8 +59,6 @@ enum {
|
|||||||
V202_DATA//4
|
V202_DATA//4
|
||||||
};
|
};
|
||||||
|
|
||||||
// static u32 bind_count;
|
|
||||||
|
|
||||||
// This is frequency hopping table for V202 protocol
|
// This is frequency hopping table for V202 protocol
|
||||||
// The table is the first 4 rows of 32 frequency hopping
|
// The table is the first 4 rows of 32 frequency hopping
|
||||||
// patterns, all other rows are derived from the first 4.
|
// patterns, all other rows are derived from the first 4.
|
||||||
@ -64,7 +67,7 @@ enum {
|
|||||||
// number in this case.
|
// number in this case.
|
||||||
// The pattern is defined by 5 least significant bits of
|
// The pattern is defined by 5 least significant bits of
|
||||||
// sum of 3 bytes comprising TX id
|
// sum of 3 bytes comprising TX id
|
||||||
static const uint8_t freq_hopping[][16] = {
|
const uint8_t PROGMEM freq_hopping[][16] = {
|
||||||
{ 0x27, 0x1B, 0x39, 0x28, 0x24, 0x22, 0x2E, 0x36,
|
{ 0x27, 0x1B, 0x39, 0x28, 0x24, 0x22, 0x2E, 0x36,
|
||||||
0x19, 0x21, 0x29, 0x14, 0x1E, 0x12, 0x2D, 0x18 }, // 00
|
0x19, 0x21, 0x29, 0x14, 0x1E, 0x12, 0x2D, 0x18 }, // 00
|
||||||
{ 0x2E, 0x33, 0x25, 0x38, 0x19, 0x12, 0x18, 0x16,
|
{ 0x2E, 0x33, 0x25, 0x38, 0x19, 0x12, 0x18, 0x16,
|
||||||
@ -123,12 +126,12 @@ static void __attribute__((unused)) V2X2_set_tx_id(void)
|
|||||||
{
|
{
|
||||||
uint8_t sum;
|
uint8_t sum;
|
||||||
sum = rx_tx_addr[1] + rx_tx_addr[2] + rx_tx_addr[3];
|
sum = rx_tx_addr[1] + rx_tx_addr[2] + rx_tx_addr[3];
|
||||||
// Base row is defined by lowest 2 bits
|
|
||||||
const uint8_t *fh_row = freq_hopping[sum & 0x03];
|
|
||||||
// Higher 3 bits define increment to corresponding row
|
// Higher 3 bits define increment to corresponding row
|
||||||
uint8_t increment = (sum & 0x1e) >> 2;
|
uint8_t increment = (sum & 0x1e) >> 2;
|
||||||
|
// Base row is defined by lowest 2 bits
|
||||||
|
sum &=0x03;
|
||||||
for (uint8_t i = 0; i < 16; ++i) {
|
for (uint8_t i = 0; i < 16; ++i) {
|
||||||
uint8_t val = fh_row[i] + increment;
|
uint8_t val = pgm_read_byte_near(&freq_hopping[sum][i]) + increment;
|
||||||
// Strange avoidance of channels divisible by 16
|
// Strange avoidance of channels divisible by 16
|
||||||
hopping_frequency[i] = (val & 0x0f) ? val : val - 3;
|
hopping_frequency[i] = (val & 0x0f) ? val : val - 3;
|
||||||
}
|
}
|
||||||
@ -182,23 +185,44 @@ static void __attribute__((unused)) V2X2_send_packet(uint8_t bind)
|
|||||||
// Channel 9
|
// Channel 9
|
||||||
if (Servo_AUX5)
|
if (Servo_AUX5)
|
||||||
flags2 = V2X2_FLAG_HEADLESS;
|
flags2 = V2X2_FLAG_HEADLESS;
|
||||||
// Channel 10
|
if(sub_protocol==JXD506)
|
||||||
if (Servo_AUX6)
|
{
|
||||||
flags2 |= V2X2_FLAG_MAG_CAL_X;
|
// Channel 11
|
||||||
// Channel 11
|
if (Servo_AUX7)
|
||||||
if (Servo_AUX7)
|
flags2 |= V2X2_FLAG_EMERGENCY;
|
||||||
flags2 |= V2X2_FLAG_MAG_CAL_Y;
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Channel 10
|
||||||
|
if (Servo_AUX6)
|
||||||
|
flags2 |= V2X2_FLAG_MAG_CAL_X;
|
||||||
|
// Channel 11
|
||||||
|
if (Servo_AUX7)
|
||||||
|
flags2 |= V2X2_FLAG_MAG_CAL_Y;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// TX id
|
// TX id
|
||||||
packet[7] = rx_tx_addr[1];
|
packet[7] = rx_tx_addr[1];
|
||||||
packet[8] = rx_tx_addr[2];
|
packet[8] = rx_tx_addr[2];
|
||||||
packet[9] = rx_tx_addr[3];
|
packet[9] = rx_tx_addr[3];
|
||||||
// empty
|
// flags
|
||||||
packet[10] = flags2;
|
packet[10] = flags2;
|
||||||
packet[11] = 0x00;
|
packet[11] = 0x00;
|
||||||
packet[12] = 0x00;
|
packet[12] = 0x00;
|
||||||
packet[13] = 0x00;
|
packet[13] = 0x00;
|
||||||
//
|
if(sub_protocol==JXD506)
|
||||||
|
{
|
||||||
|
// Channel 10
|
||||||
|
if (Servo_AUX6)
|
||||||
|
packet[11] = V2X2_FLAG_START_STOP;
|
||||||
|
// Channel 12
|
||||||
|
if(Servo_data[AUX8] > PPM_MAX_COMMAND)
|
||||||
|
packet[11] |= V2X2_FLAG_CAMERA_UP;
|
||||||
|
else if(Servo_data[AUX8] < PPM_MIN_COMMAND)
|
||||||
|
packet[11] |= V2X2_FLAG_CAMERA_DN;
|
||||||
|
packet[12] = 0x40;
|
||||||
|
packet[13] = 0x40;
|
||||||
|
}
|
||||||
packet[14] = flags;
|
packet[14] = flags;
|
||||||
V2X2_add_pkt_checksum();
|
V2X2_add_pkt_checksum();
|
||||||
|
|
||||||
@ -229,7 +253,7 @@ uint16_t ReadV2x2()
|
|||||||
break;
|
break;
|
||||||
case V202_BIND2:
|
case V202_BIND2:
|
||||||
if (packet_sent && NRF24L01_packet_ack() != PKT_ACKED) {
|
if (packet_sent && NRF24L01_packet_ack() != PKT_ACKED) {
|
||||||
return PACKET_CHKTIME;
|
return V2X2_PACKET_CHKTIME;
|
||||||
}
|
}
|
||||||
V2X2_send_packet(1);
|
V2X2_send_packet(1);
|
||||||
if (--counter == 0) {
|
if (--counter == 0) {
|
||||||
@ -239,13 +263,13 @@ uint16_t ReadV2x2()
|
|||||||
break;
|
break;
|
||||||
case V202_DATA:
|
case V202_DATA:
|
||||||
if (packet_sent && NRF24L01_packet_ack() != PKT_ACKED) {
|
if (packet_sent && NRF24L01_packet_ack() != PKT_ACKED) {
|
||||||
return PACKET_CHKTIME;
|
return V2X2_PACKET_CHKTIME;
|
||||||
}
|
}
|
||||||
V2X2_send_packet(0);
|
V2X2_send_packet(0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// Packet every 4ms
|
// Packet every 4ms
|
||||||
return PACKET_PERIOD;
|
return V2X2_PACKET_PERIOD;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16_t initV2x2()
|
uint16_t initV2x2()
|
||||||
@ -254,7 +278,7 @@ uint16_t initV2x2()
|
|||||||
//
|
//
|
||||||
if (IS_AUTOBIND_FLAG_on)
|
if (IS_AUTOBIND_FLAG_on)
|
||||||
{
|
{
|
||||||
counter = BIND_COUNT;
|
counter = V2X2_BIND_COUNT;
|
||||||
phase = V202_INIT2;
|
phase = V202_INIT2;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -63,7 +63,7 @@
|
|||||||
//Comment the protocols you are not using with "//" to save Flash space.
|
//Comment the protocols you are not using with "//" to save Flash space.
|
||||||
|
|
||||||
//The protocols below need an A7105 to be installed
|
//The protocols below need an A7105 to be installed
|
||||||
/*#define FLYSKY_A7105_INO
|
#define FLYSKY_A7105_INO
|
||||||
#define HUBSAN_A7105_INO
|
#define HUBSAN_A7105_INO
|
||||||
#define AFHDS2A_A7105_INO
|
#define AFHDS2A_A7105_INO
|
||||||
|
|
||||||
@ -90,15 +90,13 @@
|
|||||||
#define V2X2_NRF24L01_INO
|
#define V2X2_NRF24L01_INO
|
||||||
#define YD717_NRF24L01_INO
|
#define YD717_NRF24L01_INO
|
||||||
#define MT99XX_NRF24L01_INO
|
#define MT99XX_NRF24L01_INO
|
||||||
*/
|
|
||||||
#define MJXQ_NRF24L01_INO
|
#define MJXQ_NRF24L01_INO
|
||||||
/*
|
|
||||||
#define SHENQI_NRF24L01_INO
|
#define SHENQI_NRF24L01_INO
|
||||||
#define FY326_NRF24L01_INO
|
#define FY326_NRF24L01_INO
|
||||||
#define FQ777_NRF24L01_INO
|
#define FQ777_NRF24L01_INO
|
||||||
#define ASSAN_NRF24L01_INO
|
#define ASSAN_NRF24L01_INO
|
||||||
#define HONTAI_NRF24L01_INO
|
#define HONTAI_NRF24L01_INO
|
||||||
*/
|
|
||||||
|
|
||||||
/**************************/
|
/**************************/
|
||||||
/*** TELEMETRY SETTINGS ***/
|
/*** TELEMETRY SETTINGS ***/
|
||||||
@ -200,7 +198,8 @@ const PPM_Parameters PPM_prot[15]= {
|
|||||||
Hisky
|
Hisky
|
||||||
HK310
|
HK310
|
||||||
MODE_V2X2
|
MODE_V2X2
|
||||||
NONE
|
V2X2
|
||||||
|
JXD506
|
||||||
MODE_DSM
|
MODE_DSM
|
||||||
DSM2_22
|
DSM2_22
|
||||||
DSM2_11
|
DSM2_11
|
||||||
|
Loading…
x
Reference in New Issue
Block a user