mirror of
https://github.com/pascallanger/DIY-Multiprotocol-TX-Module.git
synced 2025-07-03 12:07:52 +00:00
Fin d'ajout du WK2X01
This commit is contained in:
parent
37bfd96bb8
commit
bdb8eec3ea
@ -31,7 +31,7 @@ static const uint8_t sopcode[8] = {
|
|||||||
static const uint8_t fail_map[8] = {2, 1, 0, 3, 4, 5, 6, 7};
|
static const uint8_t fail_map[8] = {2, 1, 0, 3, 4, 5, 6, 7};
|
||||||
|
|
||||||
static uint8_t wk_pkt_num;
|
static uint8_t wk_pkt_num;
|
||||||
static u8 *radio_ch_ptr;
|
static uint8_t *radio_ch_ptr;
|
||||||
static uint16_t WK_BIND_COUNTer;
|
static uint16_t WK_BIND_COUNTer;
|
||||||
static uint8_t last_beacon;
|
static uint8_t last_beacon;
|
||||||
/*
|
/*
|
||||||
@ -41,11 +41,11 @@ static const char * const wk2601_opts[] = {
|
|||||||
_tr_noop("COL Limit"), "-100", "100", NULL,
|
_tr_noop("COL Limit"), "-100", "100", NULL,
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
*/
|
|
||||||
#define WK2601_OPT_CHANMODE 0
|
#define WK2601_OPT_CHANMODE 0
|
||||||
#define WK2601_OPT_PIT_INV 1
|
#define WK2601_OPT_PIT_INV 1
|
||||||
#define WK2601_OPT_PIT_LIMIT 2
|
#define WK2601_OPT_PIT_LIMIT 2
|
||||||
#define LAST_PROTO_OPT 3
|
#define LAST_PROTO_OPT 3
|
||||||
|
*/
|
||||||
|
|
||||||
static void add_pkt_crc(uint8_t init) {
|
static void add_pkt_crc(uint8_t init) {
|
||||||
uint8_t add = init;
|
uint8_t add = init;
|
||||||
@ -177,14 +177,14 @@ static void channels_heli_2601(int frame, int *v1, int *v2) {
|
|||||||
//pitch is controlled by rx
|
//pitch is controlled by rx
|
||||||
//we can only control fmode, pit-reverse and pit/thr rate
|
//we can only control fmode, pit-reverse and pit/thr rate
|
||||||
int pit_rev = 0;
|
int pit_rev = 0;
|
||||||
if (Model.proto_opts[WK2601_OPT_PIT_INV]) { pit_rev = 1; }
|
if ((option/10)%10) { pit_rev = 1; }
|
||||||
uint16_t pit_rate = get_channel(5, 0x400, 0, 0x400);
|
uint16_t pit_rate = get_channel(5, 0x400, 0, 0x400);
|
||||||
int fmode = 1;
|
int fmode = 1;
|
||||||
if (pit_rate < 0) { pit_rate = -pit_rate; fmode = 0; }
|
if (pit_rate < 0) { pit_rate = -pit_rate; fmode = 0; }
|
||||||
if (frame == 1) {
|
if (frame == 1) {
|
||||||
//Pitch curve and range
|
//Pitch curve and range
|
||||||
*v1 = pit_rate;
|
*v1 = pit_rate;
|
||||||
*v2 = Model.proto_opts[WK2601_OPT_PIT_LIMIT] * 0x400 / 100 + 0x400;
|
*v2 = ((option/100) ? -100 : 100) * 0x400 / 100 + 0x400;
|
||||||
}
|
}
|
||||||
packet[7] = (pit_rev << 2); //reverse bits
|
packet[7] = (pit_rev << 2); //reverse bits
|
||||||
packet[8] = fmode ? 0x02 : 0x00;
|
packet[8] = fmode ? 0x02 : 0x00;
|
||||||
@ -207,8 +207,8 @@ static void build_data_pkt_2601() {
|
|||||||
v1 = get_channel(6, 0x200, 0x200, 0x200);
|
v1 = get_channel(6, 0x200, 0x200, 0x200);
|
||||||
v2 = 0;
|
v2 = 0;
|
||||||
}
|
}
|
||||||
if (Model.proto_opts[WK2601_OPT_CHANMODE] == 1) { channels_heli_2601(frame, &v1, &v2); }
|
if (option%10 == 1) { channels_heli_2601(frame, &v1, &v2); }
|
||||||
else if (Model.proto_opts[WK2601_OPT_CHANMODE] == 2) { channels_6plus1_2601(frame, &v1, &v2); }
|
else if (option%10 == 2) { channels_6plus1_2601(frame, &v1, &v2); }
|
||||||
else { channels_5plus1_2601(frame, &v1, &v2); }
|
else { channels_5plus1_2601(frame, &v1, &v2); }
|
||||||
if (v1 > 1023) { v1 = 1023; }
|
if (v1 > 1023) { v1 = 1023; }
|
||||||
if (v2 > 1023) { v2 = 1023; }
|
if (v2 > 1023) { v2 = 1023; }
|
||||||
|
@ -24,7 +24,7 @@
|
|||||||
#include <avr/eeprom.h>
|
#include <avr/eeprom.h>
|
||||||
#include <avr/pgmspace.h>
|
#include <avr/pgmspace.h>
|
||||||
#include <util/delay.h>
|
#include <util/delay.h>
|
||||||
#include "multiprotocol.h"
|
#include "Multiprotocol.h"
|
||||||
|
|
||||||
//Multiprotocol module configuration file
|
//Multiprotocol module configuration file
|
||||||
#include "_Config.h"
|
#include "_Config.h"
|
||||||
|
@ -23,21 +23,11 @@
|
|||||||
#define FY326_SIZE 15
|
#define FY326_SIZE 15
|
||||||
#define FY326_BIND_COUNT 16
|
#define FY326_BIND_COUNT 16
|
||||||
|
|
||||||
|
|
||||||
static const char * const fy326_opts[] = {
|
|
||||||
_tr_noop("Expert"), _tr_noop("On"), _tr_noop("Off"), NULL,
|
|
||||||
NULL
|
|
||||||
};
|
|
||||||
#define EXPERT_ON 0
|
|
||||||
#define EXPERT_OFF 1
|
|
||||||
|
|
||||||
#define CHANNEL_FLIP AUX1
|
#define CHANNEL_FLIP AUX1
|
||||||
#define CHANNEL_HEADLESS AUX2
|
#define CHANNEL_HEADLESS AUX2
|
||||||
#define CHANNEL_RTH AUX3
|
#define CHANNEL_RTH AUX3
|
||||||
#define CHANNEL_CALIBRATE AUX4
|
#define CHANNEL_CALIBRATE AUX4
|
||||||
|
#define CHANNEL_EXPERT AUX5
|
||||||
static uint8_t tx_power;
|
|
||||||
static uint8_t packet[FY326_SIZE];
|
|
||||||
|
|
||||||
// frequency channel management
|
// frequency channel management
|
||||||
#define RF_BIND_CHANNEL 0x17
|
#define RF_BIND_CHANNEL 0x17
|
||||||
@ -51,24 +41,27 @@ enum {
|
|||||||
FY326_INIT1 = 0,
|
FY326_INIT1 = 0,
|
||||||
FY326_BIND1,
|
FY326_BIND1,
|
||||||
FY326_BIND2,
|
FY326_BIND2,
|
||||||
FY326_DATA
|
FY326_DATA,
|
||||||
|
FY319_INIT1,
|
||||||
|
FY319_BIND1,
|
||||||
|
FY319_BIND2,
|
||||||
};
|
};
|
||||||
|
|
||||||
// Bit vector from bit position
|
// Bit vector from bit position
|
||||||
#define BV(bit) (1 << bit)
|
#define BV(bit) (1 << bit)
|
||||||
|
|
||||||
#define CHAN_RANGE (CHAN_MAX_VALUE - CHAN_MIN_VALUE)
|
#define CHAN_RANGE (PPM_MAX - PPM_MIN)
|
||||||
static uint8_t scale_channel(uint8_t ch, uint8_t destMin, uint8_t destMax)
|
static uint8_t scale_channel(uint8_t ch, uint8_t destMin, uint8_t destMax)
|
||||||
{
|
{
|
||||||
uint32_t chanval = Channels[ch];
|
uint32_t chanval = Servo_data[ch];
|
||||||
uint32_t range = destMax - destMin;
|
uint32_t range = destMax - destMin;
|
||||||
|
|
||||||
if (chanval < CHAN_MIN_VALUE) chanval = CHAN_MIN_VALUE;
|
if (chanval < PPM_MIN) chanval = PPM_MIN;
|
||||||
else if (chanval > CHAN_MAX_VALUE) chanval = CHAN_MAX_VALUE;
|
else if (chanval > PPM_MAX) chanval = PPM_MAX;
|
||||||
return (range * (chanval - CHAN_MIN_VALUE)) / CHAN_RANGE + destMin;
|
return (range * (chanval - PPM_MIN)) / CHAN_RANGE + destMin;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define GET_FLAG(ch, mask) (Channels[ch] > 0 ? mask : 0)
|
#define GET_FLAG(ch, mask) (Servo_data[ch] > PPM_MIN_COMMAND ? mask : 0)
|
||||||
#define CHAN_TO_TRIM(chanval) ((uint8_t)(((uint16_t)chanval/10)-10)) // scale to [-10,10]. [-20,20] caused problems.
|
#define CHAN_TO_TRIM(chanval) ((uint8_t)(((uint16_t)chanval/10)-10)) // scale to [-10,10]. [-20,20] caused problems.
|
||||||
static void send_packet(uint8_t bind)
|
static void send_packet(uint8_t bind)
|
||||||
{
|
{
|
||||||
@ -80,15 +73,22 @@ static void send_packet(uint8_t bind)
|
|||||||
| GET_FLAG(CHANNEL_RTH, 0x40)
|
| GET_FLAG(CHANNEL_RTH, 0x40)
|
||||||
| GET_FLAG(CHANNEL_FLIP, 0x02)
|
| GET_FLAG(CHANNEL_FLIP, 0x02)
|
||||||
| GET_FLAG(CHANNEL_CALIBRATE, 0x01)
|
| GET_FLAG(CHANNEL_CALIBRATE, 0x01)
|
||||||
| (Model.proto_opts[PROTOOPTS_EXPERT] == EXPERT_ON ? 4 : 0);
|
| GET_FLAG(CHANNEL_EXPERT, 4);
|
||||||
}
|
}
|
||||||
packet[2] = 200 - scale_channel(AILERON, 0, 200); // aileron
|
packet[2] = 200 - scale_channel(AILERON, 0, 200); // aileron
|
||||||
packet[3] = scale_channel(ELEVATOR, 0, 200); // elevator
|
packet[3] = scale_channel(ELEVATOR, 0, 200); // elevator
|
||||||
packet[4] = 200 - scale_channel(RUDDER, 0, 200); // rudder
|
packet[4] = 200 - scale_channel(RUDDER, 0, 200); // rudder
|
||||||
packet[5] = scale_channel(THROTTLE, 0, 200); // throttle
|
packet[5] = scale_channel(THROTTLE, 0, 200); // throttle
|
||||||
packet[6] = txid[0];
|
if(sub_protocol == FY319) {
|
||||||
packet[7] = txid[1];
|
packet[6] = 255 - scale_channel(CHANNEL1, 0, 255);
|
||||||
packet[8] = txid[2];
|
packet[7] = scale_channel(CHANNEL2, 0, 255);
|
||||||
|
packet[8] = 255 - scale_channel(CHANNEL4, 0, 255);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
packet[6] = txid[0];
|
||||||
|
packet[7] = txid[1];
|
||||||
|
packet[8] = txid[2];
|
||||||
|
}
|
||||||
packet[9] = CHAN_TO_TRIM(packet[2]); // aileron_trim;
|
packet[9] = CHAN_TO_TRIM(packet[2]); // aileron_trim;
|
||||||
packet[10] = CHAN_TO_TRIM(packet[3]); // elevator_trim;
|
packet[10] = CHAN_TO_TRIM(packet[3]); // elevator_trim;
|
||||||
packet[11] = CHAN_TO_TRIM(packet[4]); // rudder_trim;
|
packet[11] = CHAN_TO_TRIM(packet[4]); // rudder_trim;
|
||||||
@ -108,25 +108,18 @@ static void send_packet(uint8_t bind)
|
|||||||
NRF24L01_FlushTx();
|
NRF24L01_FlushTx();
|
||||||
|
|
||||||
NRF24L01_WritePayload(packet, FY326_SIZE);
|
NRF24L01_WritePayload(packet, FY326_SIZE);
|
||||||
|
|
||||||
// Check and adjust transmission power. We do this after
|
|
||||||
// transmission to not bother with timeout after power
|
|
||||||
// settings change - we have plenty of time until next
|
|
||||||
// packet.
|
|
||||||
if (tx_power != Model.tx_power) {
|
|
||||||
//Keep transmit power updated
|
|
||||||
tx_power = Model.tx_power;
|
|
||||||
NRF24L01_SetPower(tx_power);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void fy326_init()
|
static void fy326_init()
|
||||||
{
|
{
|
||||||
const uint8_t rx_tx_addr[] = {0x15, 0x59, 0x23, 0xc6, 0x29};
|
uint8_t rx_tx_addr[] = {0x15, 0x59, 0x23, 0xc6, 0x29};
|
||||||
|
|
||||||
NRF24L01_Initialize();
|
NRF24L01_Initialize();
|
||||||
NRF24L01_SetTxRxMode(TX_EN);
|
NRF24L01_SetTxRxMode(TX_EN);
|
||||||
NRF24L01_WriteReg(NRF24L01_03_SETUP_AW, 0x01); // Three-byte rx/tx address
|
if(sub_protocol == FY319)
|
||||||
|
NRF24L01_WriteReg(NRF24L01_03_SETUP_AW, 0x03); // Five-byte rx/tx address
|
||||||
|
else
|
||||||
|
NRF24L01_WriteReg(NRF24L01_03_SETUP_AW, 0x01); // Three-byte rx/tx address
|
||||||
NRF24L01_WriteRegisterMulti(NRF24L01_10_TX_ADDR, rx_tx_addr, sizeof(rx_tx_addr));
|
NRF24L01_WriteRegisterMulti(NRF24L01_10_TX_ADDR, rx_tx_addr, sizeof(rx_tx_addr));
|
||||||
NRF24L01_WriteRegisterMulti(NRF24L01_0A_RX_ADDR_P0, rx_tx_addr, sizeof(rx_tx_addr));
|
NRF24L01_WriteRegisterMulti(NRF24L01_0A_RX_ADDR_P0, rx_tx_addr, sizeof(rx_tx_addr));
|
||||||
NRF24L01_FlushTx();
|
NRF24L01_FlushTx();
|
||||||
@ -137,7 +130,7 @@ static void fy326_init()
|
|||||||
NRF24L01_WriteReg(NRF24L01_11_RX_PW_P0, FY326_SIZE);
|
NRF24L01_WriteReg(NRF24L01_11_RX_PW_P0, FY326_SIZE);
|
||||||
NRF24L01_WriteReg(NRF24L01_05_RF_CH, RF_BIND_CHANNEL);
|
NRF24L01_WriteReg(NRF24L01_05_RF_CH, RF_BIND_CHANNEL);
|
||||||
NRF24L01_SetBitrate(NRF24L01_BR_250K);
|
NRF24L01_SetBitrate(NRF24L01_BR_250K);
|
||||||
NRF24L01_SetPower(Model.tx_power);
|
NRF24L01_SetPower();
|
||||||
|
|
||||||
NRF24L01_Activate(0x73);
|
NRF24L01_Activate(0x73);
|
||||||
NRF24L01_WriteReg(NRF24L01_1C_DYNPD, 0x3f);
|
NRF24L01_WriteReg(NRF24L01_1C_DYNPD, 0x3f);
|
||||||
@ -146,9 +139,51 @@ static void fy326_init()
|
|||||||
|
|
||||||
static uint16_t fy326_callback()
|
static uint16_t fy326_callback()
|
||||||
{
|
{
|
||||||
|
uint8_t i;
|
||||||
switch (phase) {
|
switch (phase) {
|
||||||
|
case FY319_INIT1:
|
||||||
|
NRF24L01_SetTxRxMode(TXRX_OFF);
|
||||||
|
NRF24L01_FlushRx();
|
||||||
|
NRF24L01_SetTxRxMode(RX_EN);
|
||||||
|
NRF24L01_WriteReg(NRF24L01_05_RF_CH, RF_BIND_CHANNEL);
|
||||||
|
phase = FY319_BIND1;
|
||||||
|
BIND_IN_PROGRESS;
|
||||||
|
return PACKET_CHKTIME;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FY319_BIND1:
|
||||||
|
if(NRF24L01_ReadReg(NRF24L01_07_STATUS) & BV(NRF24L01_07_RX_DR)) {
|
||||||
|
NRF24L01_ReadPayload(packet, FY326_SIZE);
|
||||||
|
rxid = packet[13];
|
||||||
|
packet[0] = txid[3];
|
||||||
|
packet[1] = 0x80;
|
||||||
|
packet[14]= txid[4];
|
||||||
|
bind_counter = BIND_COUNT;
|
||||||
|
NRF24L01_SetTxRxMode(TXRX_OFF);
|
||||||
|
NRF24L01_SetTxRxMode(TX_EN);
|
||||||
|
NRF24L01_WriteReg(NRF24L01_07_STATUS, 0x70);
|
||||||
|
NRF24L01_FlushTx();
|
||||||
|
bind_counter = 255;
|
||||||
|
for(i=2; i<6; i++)
|
||||||
|
packet[i] = rf_chans[0];
|
||||||
|
phase = FY319_BIND2;
|
||||||
|
}
|
||||||
|
return PACKET_CHKTIME;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FY319_BIND2:
|
||||||
|
NRF24L01_WriteReg(NRF24L01_07_STATUS, 0x70);
|
||||||
|
NRF24L01_FlushTx();
|
||||||
|
NRF24L01_WritePayload(packet, FY326_SIZE);
|
||||||
|
if(bind_counter == 250)
|
||||||
|
packet[1] = 0x40;
|
||||||
|
if(--bind_counter == 0) {
|
||||||
|
BIND_DONE;
|
||||||
|
phase = FY326_DATA;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case FY326_INIT1:
|
case FY326_INIT1:
|
||||||
MUSIC_Play(MUSIC_TELEMALARM1);
|
|
||||||
bind_counter = FY326_BIND_COUNT;
|
bind_counter = FY326_BIND_COUNT;
|
||||||
phase = FY326_BIND2;
|
phase = FY326_BIND2;
|
||||||
send_packet(1);
|
send_packet(1);
|
||||||
@ -156,19 +191,13 @@ static uint16_t fy326_callback()
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case FY326_BIND1:
|
case FY326_BIND1:
|
||||||
#ifdef EMULATOR
|
|
||||||
if (1) {
|
|
||||||
packet[13] = 0x7e;
|
|
||||||
#else
|
|
||||||
if( NRF24L01_ReadReg(NRF24L01_07_STATUS) & BV(NRF24L01_07_RX_DR)) { // RX fifo data ready
|
if( NRF24L01_ReadReg(NRF24L01_07_STATUS) & BV(NRF24L01_07_RX_DR)) { // RX fifo data ready
|
||||||
NRF24L01_ReadPayload(packet, FY326_SIZE);
|
NRF24L01_ReadPayload(packet, FY326_SIZE);
|
||||||
#endif
|
|
||||||
rxid = packet[13];
|
rxid = packet[13];
|
||||||
txid[0] = 0xaa;
|
txid[0] = 0xaa;
|
||||||
NRF24L01_SetTxRxMode(TXRX_OFF);
|
NRF24L01_SetTxRxMode(TXRX_OFF);
|
||||||
NRF24L01_SetTxRxMode(TX_EN);
|
NRF24L01_SetTxRxMode(TX_EN);
|
||||||
PROTOCOL_SetBindState(0);
|
BIND_DONE;
|
||||||
MUSIC_Play(MUSIC_DONE_BINDING);
|
|
||||||
phase = FY326_DATA;
|
phase = FY326_DATA;
|
||||||
} else if (bind_counter-- == 0) {
|
} else if (bind_counter-- == 0) {
|
||||||
bind_counter = FY326_BIND_COUNT;
|
bind_counter = FY326_BIND_COUNT;
|
||||||
@ -181,11 +210,7 @@ static uint16_t fy326_callback()
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case FY326_BIND2:
|
case FY326_BIND2:
|
||||||
#ifdef EMULATOR
|
|
||||||
if (1) {
|
|
||||||
#else
|
|
||||||
if( NRF24L01_ReadReg(NRF24L01_07_STATUS) & BV(NRF24L01_07_TX_DS)) { // TX data sent
|
if( NRF24L01_ReadReg(NRF24L01_07_STATUS) & BV(NRF24L01_07_TX_DS)) { // TX data sent
|
||||||
#endif
|
|
||||||
// switch to RX mode
|
// switch to RX mode
|
||||||
NRF24L01_SetTxRxMode(TXRX_OFF);
|
NRF24L01_SetTxRxMode(TXRX_OFF);
|
||||||
NRF24L01_FlushRx();
|
NRF24L01_FlushRx();
|
||||||
@ -210,7 +235,7 @@ static void fy_txid()
|
|||||||
txid[1] = ((MProtocol_id_master >> 16) & 0xFF);
|
txid[1] = ((MProtocol_id_master >> 16) & 0xFF);
|
||||||
txid[2] = (MProtocol_id_master >> 8) & 0xFF;
|
txid[2] = (MProtocol_id_master >> 8) & 0xFF;
|
||||||
txid[3] = MProtocol_id_master & 0xFF;
|
txid[3] = MProtocol_id_master & 0xFF;
|
||||||
for (uint8_t i = 0; i < sizeof(MProtocol_id_master); ++i) rand32_r(&MProtocol_id_master, 0);
|
// for (uint8_t i = 0; i < sizeof(MProtocol_id_master); ++i) rand32_r(&MProtocol_id_master, 0);
|
||||||
txid[4] = MProtocol_id_master & 0xFF;
|
txid[4] = MProtocol_id_master & 0xFF;
|
||||||
|
|
||||||
rf_chans[0] = txid[0] & 0x0F;
|
rf_chans[0] = txid[0] & 0x0F;
|
||||||
@ -218,14 +243,21 @@ static void fy_txid()
|
|||||||
rf_chans[2] = 0x20 + (txid[1] & 0x0F);
|
rf_chans[2] = 0x20 + (txid[1] & 0x0F);
|
||||||
rf_chans[3] = 0x30 + (txid[1] >> 4);
|
rf_chans[3] = 0x30 + (txid[1] >> 4);
|
||||||
rf_chans[4] = 0x40 + (txid[2] >> 4);
|
rf_chans[4] = 0x40 + (txid[2] >> 4);
|
||||||
|
|
||||||
|
if(sub_protocol == FY319) {
|
||||||
|
for(uint8_t i=0; i<5; i++)
|
||||||
|
rf_chans[i] = txid[0] & ~0x80;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint16_t FY326_setup()
|
static uint16_t FY326_setup()
|
||||||
{
|
{
|
||||||
BIND_IN_PROGRESS;
|
BIND_IN_PROGRESS;
|
||||||
tx_power = Model.tx_power;
|
|
||||||
rxid = 0xaa;
|
rxid = 0xaa;
|
||||||
phase = FY326_INIT1;
|
if(sub_protocol == FY319)
|
||||||
|
phase = FY319_INIT1;
|
||||||
|
else
|
||||||
|
phase = FY326_INIT1;
|
||||||
bind_counter = FY326_BIND_COUNT;
|
bind_counter = FY326_BIND_COUNT;
|
||||||
fy_txid();
|
fy_txid();
|
||||||
fy326_init();
|
fy326_init();
|
||||||
|
@ -48,7 +48,7 @@
|
|||||||
#endif
|
#endif
|
||||||
#ifdef CYRF6936_INSTALLED
|
#ifdef CYRF6936_INSTALLED
|
||||||
#define J6PRO_CYRF6936_INO
|
#define J6PRO_CYRF6936_INO
|
||||||
// #define WK2x01_CYRF6936_INO
|
#define WK2x01_CYRF6936_INO
|
||||||
|
|
||||||
#define DEVO_CYRF6936_INO
|
#define DEVO_CYRF6936_INO
|
||||||
#define DSM2_CYRF6936_INO
|
#define DSM2_CYRF6936_INO
|
||||||
@ -61,6 +61,7 @@
|
|||||||
#define HM830_NRF24L01_INO
|
#define HM830_NRF24L01_INO
|
||||||
#define CFlie_NRF24L01_INO
|
#define CFlie_NRF24L01_INO
|
||||||
#define H377_NRF24L01_INO
|
#define H377_NRF24L01_INO
|
||||||
|
#define FY326_NRF24L01_INO
|
||||||
|
|
||||||
#define BAYANG_NRF24L01_INO
|
#define BAYANG_NRF24L01_INO
|
||||||
#define CG023_NRF24L01_INO
|
#define CG023_NRF24L01_INO
|
||||||
|
@ -1,65 +0,0 @@
|
|||||||
MODE_SERIAL = 0, // Serial / Manche commands
|
|
||||||
MODE_FLYSKY = 1, // =>A7105 { Flysky=0, V9X9=1, V6X6=2, V912=3 };
|
|
||||||
MODE_HUBSAN = 2, // =>A7105
|
|
||||||
MODE_CG023 = 3, // =>NRF24L01 { CG023 = 0, YD829 = 1, H8_3D = 2 };
|
|
||||||
MODE_CX10 = 4, // =>NRF24L01 { CX10_GREEN = 0, DM007=2, CX10_BLUE=1, // also compatible with CX10-A, CX12 };
|
|
||||||
MODE_HISKY = 6, // =>NRF24L01 { Hisky=0, HK310=1 };
|
|
||||||
MODE_DSM2 = 6, // =>CYRF6936 { DSM2=0, DSMX=1};
|
|
||||||
MODE_DEVO =7, // =>CYRF6936
|
|
||||||
MODE_YD717 = 8, // =>NRF24L01 { YD717=0, SKYWLKR=1, SYMAX2=2, XINXUN=3, NIHUI=4 };
|
|
||||||
MODE_KN = 9, // =>NRF24L01
|
|
||||||
MODE_SYMAX = 10, // =>NRF24L01 { SYMAX=0, SYMAX5C=1, };
|
|
||||||
MODE_SLT = 11, // =>NRF24L01
|
|
||||||
MODE_V2X2 = 12, // =>NRF24L01
|
|
||||||
MODE_BAYANG = 13, // =>NRF24L01
|
|
||||||
MODE_FRSKY = 14, // =>CC2500
|
|
||||||
= 15, // =>
|
|
||||||
|
|
||||||
BAYANG
|
|
||||||
AUX1 FLIP
|
|
||||||
AUX2 HEADLESS
|
|
||||||
AUX3 RTH
|
|
||||||
AUX4 SNAPSHOT
|
|
||||||
AUX5 VIDEO
|
|
||||||
|
|
||||||
CG023
|
|
||||||
AUX1 FLIP
|
|
||||||
AUX2 LED
|
|
||||||
AUX3 STILL
|
|
||||||
AUX4 VIDEO
|
|
||||||
AUX5 EASY
|
|
||||||
|
|
||||||
CX10
|
|
||||||
AUX1 FLIP
|
|
||||||
AUX2 mode 1-2-3 (headless on CX-10A)
|
|
||||||
AUX3 SNAPSHOT
|
|
||||||
AUX4 VIDEO
|
|
||||||
AUX5 HEADLESS
|
|
||||||
|
|
||||||
HUBSAN
|
|
||||||
AUX1 FLIP
|
|
||||||
AUX2 LED
|
|
||||||
AUX3 VIDEO
|
|
||||||
|
|
||||||
KN
|
|
||||||
AUX1 Dual rate
|
|
||||||
AUX2 Throttle Hold
|
|
||||||
AUX3 Idle up
|
|
||||||
AUX4 Gyro
|
|
||||||
|
|
||||||
V2X2
|
|
||||||
AUX1 FLIP
|
|
||||||
AUX2 LED
|
|
||||||
AUX3 CAMERA
|
|
||||||
AUX4 VIDEO
|
|
||||||
AUX5 HEADLESS
|
|
||||||
AUX6 MAG_CAL_X
|
|
||||||
AUX7 MAG_CAL_Y
|
|
||||||
|
|
||||||
YD717
|
|
||||||
AUX1 FLIP
|
|
||||||
AUX2 LED
|
|
||||||
AUX3 PICTURE
|
|
||||||
AUX4 VIDEO
|
|
||||||
AUX5 HEADLESS
|
|
||||||
|
|
@ -14,9 +14,6 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
// Check selected board type
|
// Check selected board type
|
||||||
#ifndef ARDUINO_AVR_PRO
|
|
||||||
// #error You must select the board type "Arduino Pro or Pro Mini"
|
|
||||||
#endif
|
|
||||||
#if F_CPU != 16000000L || not defined(__AVR_ATmega328P__)
|
#if F_CPU != 16000000L || not defined(__AVR_ATmega328P__)
|
||||||
#error You must select the processor type "ATmega328(5V, 16MHz)"
|
#error You must select the processor type "ATmega328(5V, 16MHz)"
|
||||||
#endif
|
#endif
|
||||||
@ -118,12 +115,18 @@ enum MJXQ
|
|||||||
X800 = 2,
|
X800 = 2,
|
||||||
H26D = 3
|
H26D = 3
|
||||||
};
|
};
|
||||||
|
|
||||||
enum WK2X01
|
enum WK2X01
|
||||||
{
|
{
|
||||||
WK2801 = 0,
|
WK2801 = 0,
|
||||||
WK2601 = 1,
|
WK2601 = 1,
|
||||||
WK2401 = 2
|
WK2401 = 2
|
||||||
};
|
};
|
||||||
|
enum FY326
|
||||||
|
{
|
||||||
|
FY326 = 0,
|
||||||
|
FY319 = 1
|
||||||
|
};
|
||||||
|
|
||||||
#define NONE 0
|
#define NONE 0
|
||||||
#define P_HIGH 1
|
#define P_HIGH 1
|
||||||
|
41
README.md
41
README.md
@ -38,7 +38,36 @@ CH1|CH2|CH3|CH4|CH5|CH6|CH7|CH8|CH9|CH10|CH11|CH12
|
|||||||
###WK2x01
|
###WK2x01
|
||||||
Autobind
|
Autobind
|
||||||
|
|
||||||
En cours ...
|
####Sub_protocol WK2401
|
||||||
|
CH1|CH2|CH3|CH4
|
||||||
|
---|---|---|---
|
||||||
|
CH1|CH2|CH3|CH4
|
||||||
|
|
||||||
|
|
||||||
|
####Sub_protocol WK2601
|
||||||
|
Option:
|
||||||
|
|
||||||
|
0 = 5+1
|
||||||
|
2 = 6+1
|
||||||
|
..1 = Hélicoptère (. = autres options pour ce mode)
|
||||||
|
.01 = Hélicoptère normal
|
||||||
|
.11 = Hélicoptère avec pit inversé
|
||||||
|
0.1 = Pitch curve -100
|
||||||
|
1.1 = Pitch curve 100
|
||||||
|
|
||||||
|
CH1|CH2|CH3|CH4|CH5|CH6|CH7
|
||||||
|
---|---|---|---|---|---|---
|
||||||
|
CH1|CH2|CH3|CH4|???|CONF|Gyro & Rudder mix
|
||||||
|
|
||||||
|
CONF: Option 1 = Rate Throtle
|
||||||
|
Option 2 = Pitch
|
||||||
|
|
||||||
|
|
||||||
|
####Sub_protocol WK2801
|
||||||
|
CH1|CH2|CH3|CH4|CH5|CH6|CH7|CH8
|
||||||
|
---|---|---|---|---|---|---|---
|
||||||
|
CH1|CH2|CH3|CH4|CH5|CH6|CH7|CH8
|
||||||
|
|
||||||
|
|
||||||
##A7105 RF Module
|
##A7105 RF Module
|
||||||
###Joysway
|
###Joysway
|
||||||
@ -59,9 +88,12 @@ A|E|T|R
|
|||||||
###Fy326
|
###Fy326
|
||||||
Autobind
|
Autobind
|
||||||
|
|
||||||
CH1|CH2|CH3|CH4|CH5|CH6|CH7|CH8
|
CH1|CH2|CH3|CH4|CH5|CH6|CH7|CH8|CH9
|
||||||
---|---|---|---|---|---|---|---
|
---|---|---|---|---|---|---|---|---
|
||||||
A|E|T|R|FLIP|HEADLESS|RTH|Calibrate
|
A|E|T|R|FLIP|HEADLESS|RTH|Calibrate|Expert
|
||||||
|
|
||||||
|
####Sub_protocol FY319
|
||||||
|
Same channels assignement as above.
|
||||||
|
|
||||||
###H377
|
###H377
|
||||||
CH1|CH2|CH3|CH4|CH5|CH6|CH7|CH8
|
CH1|CH2|CH3|CH4|CH5|CH6|CH7|CH8
|
||||||
@ -77,3 +109,4 @@ CH1|CH2|CH3|CH4|CH5
|
|||||||
---|---|---|---
|
---|---|---|---
|
||||||
A|Turbo|T|Trim|Bouton ???
|
A|Turbo|T|Trim|Bouton ???
|
||||||
|
|
||||||
|
###D'autres à venir
|
BIN
sync.ffs_db
BIN
sync.ffs_db
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user