Renamed CX100 to QX100 and fixed the sub selection

This commit is contained in:
Herman 2020-06-02 16:18:12 +02:00
parent 50f1eca4be
commit 16585467f0
4 changed files with 375 additions and 374 deletions

View File

@ -1,370 +1,370 @@
/* /*
This project is free software: you can redistribute it and/or modify This project is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Multiprotocol is distributed in the hope that it will be useful, Multiprotocol is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Multiprotocol. If not, see <http://www.gnu.org/licenses/>. along with Multiprotocol. If not, see <http://www.gnu.org/licenses/>.
*/ */
// Compatible with EAchine H8 mini, H10, BayangToys X6/X7/X9, JJRC JJ850 ... // Compatible with EAchine H8 mini, H10, BayangToys X6/X7/X9, JJRC JJ850 ...
// Last sync with hexfet new_protocols/bayang_nrf24l01.c dated 2015-12-22 // Last sync with hexfet new_protocols/bayang_nrf24l01.c dated 2015-12-22
#if defined(BAYANG_NRF24L01_INO) #if defined(BAYANG_NRF24L01_INO)
#include "iface_nrf24l01.h" #include "iface_nrf24l01.h"
#define BAYANG_BIND_COUNT 1000 #define BAYANG_BIND_COUNT 1000
#define BAYANG_PACKET_PERIOD 2000 #define BAYANG_PACKET_PERIOD 2000
#define BAYANG_PACKET_TELEM_PERIOD 5000 #define BAYANG_PACKET_TELEM_PERIOD 5000
#define BAYANG_INITIAL_WAIT 500 #define BAYANG_INITIAL_WAIT 500
#define BAYANG_PACKET_SIZE 15 #define BAYANG_PACKET_SIZE 15
#define BAYANG_RF_NUM_CHANNELS 4 #define BAYANG_RF_NUM_CHANNELS 4
#define BAYANG_RF_BIND_CHANNEL 0 #define BAYANG_RF_BIND_CHANNEL 0
#define BAYANG_RF_BIND_CHANNEL_X16_AH 10 #define BAYANG_RF_BIND_CHANNEL_X16_AH 10
#define BAYANG_ADDRESS_LENGTH 5 #define BAYANG_ADDRESS_LENGTH 5
enum BAYANG_FLAGS { enum BAYANG_FLAGS {
// flags going to packet[2] // flags going to packet[2]
BAYANG_FLAG_RTH = 0x01, BAYANG_FLAG_RTH = 0x01,
BAYANG_FLAG_HEADLESS = 0x02, BAYANG_FLAG_HEADLESS = 0x02,
BAYANG_FLAG_FLIP = 0x08, BAYANG_FLAG_FLIP = 0x08,
BAYANG_FLAG_VIDEO = 0x10, BAYANG_FLAG_VIDEO = 0x10,
BAYANG_FLAG_PICTURE = 0x20, BAYANG_FLAG_PICTURE = 0x20,
// flags going to packet[3] // flags going to packet[3]
BAYANG_FLAG_INVERTED = 0x80, // inverted flight on Floureon H101 BAYANG_FLAG_INVERTED = 0x80, // inverted flight on Floureon H101
BAYANG_FLAG_TAKE_OFF = 0x20, // take off / landing on X16 AH BAYANG_FLAG_TAKE_OFF = 0x20, // take off / landing on X16 AH
BAYANG_FLAG_EMG_STOP = 0x04|0x08, // 0x08 for VISUO XS809H-W-HD-G BAYANG_FLAG_EMG_STOP = 0x04|0x08, // 0x08 for VISUO XS809H-W-HD-G
}; };
enum BAYANG_OPTION_FLAGS { enum BAYANG_OPTION_FLAGS {
BAYANG_OPTION_FLAG_TELEMETRY = 0x01, BAYANG_OPTION_FLAG_TELEMETRY = 0x01,
BAYANG_OPTION_FLAG_ANALOGAUX = 0x02, BAYANG_OPTION_FLAG_ANALOGAUX = 0x02,
}; };
static void __attribute__((unused)) BAYANG_send_packet() static void __attribute__((unused)) BAYANG_send_packet()
{ {
uint8_t i; uint8_t i;
if (IS_BIND_IN_PROGRESS) if (IS_BIND_IN_PROGRESS)
{ {
#ifdef BAYANG_HUB_TELEMETRY #ifdef BAYANG_HUB_TELEMETRY
if(option & BAYANG_OPTION_FLAG_TELEMETRY) if(option & BAYANG_OPTION_FLAG_TELEMETRY)
if(option & BAYANG_OPTION_FLAG_ANALOGAUX) if(option & BAYANG_OPTION_FLAG_ANALOGAUX)
packet[0]= 0xA1; // telemetry and analog aux are enabled packet[0]= 0xA1; // telemetry and analog aux are enabled
else else
packet[0]= 0xA3; // telemetry is enabled packet[0]= 0xA3; // telemetry is enabled
else if(option & BAYANG_OPTION_FLAG_ANALOGAUX) else if(option & BAYANG_OPTION_FLAG_ANALOGAUX)
packet[0]= 0xA2; // analog aux is enabled packet[0]= 0xA2; // analog aux is enabled
else else
#else #else
if(option & BAYANG_OPTION_FLAG_ANALOGAUX) if(option & BAYANG_OPTION_FLAG_ANALOGAUX)
packet[0]= 0xA2; // analog aux is enabled packet[0]= 0xA2; // analog aux is enabled
else else
#endif #endif
packet[0]= 0xA4; packet[0]= 0xA4;
if(sub_protocol==CX100) if(sub_protocol==QX100)
packet[0] = 0x53; packet[0] = 0x53;
for(i=0;i<5;i++) for(i=0;i<5;i++)
packet[i+1]=rx_tx_addr[i]; packet[i+1]=rx_tx_addr[i];
for(i=0;i<4;i++) for(i=0;i<4;i++)
packet[i+6]=hopping_frequency[i]; packet[i+6]=hopping_frequency[i];
switch (sub_protocol) switch (sub_protocol)
{ {
case CX100: case QX100:
case X16_AH: case X16_AH:
packet[10] = 0x00; packet[10] = 0x00;
packet[11] = 0x00; packet[11] = 0x00;
break; break;
case IRDRONE: case IRDRONE:
packet[10] = 0x30; packet[10] = 0x30;
packet[11] = 0x01; packet[11] = 0x01;
break; break;
case DHD_D4: case DHD_D4:
packet[10] = 0xC8; packet[10] = 0xC8;
packet[11] = 0x99; packet[11] = 0x99;
break; break;
default: default:
packet[10] = rx_tx_addr[0]; // txid[0] packet[10] = rx_tx_addr[0]; // txid[0]
packet[11] = rx_tx_addr[1]; // txid[1] packet[11] = rx_tx_addr[1]; // txid[1]
break; break;
} }
} }
else else
{ {
uint16_t val; uint16_t val;
uint8_t dyntrim = 1; uint8_t dyntrim = 1;
switch (sub_protocol) switch (sub_protocol)
{ {
case X16_AH: case X16_AH:
case IRDRONE: case IRDRONE:
packet[0] = 0xA6; packet[0] = 0xA6;
break; break;
default: default:
packet[0] = 0xA5; packet[0] = 0xA5;
break; break;
} }
if (option & BAYANG_OPTION_FLAG_ANALOGAUX) if (option & BAYANG_OPTION_FLAG_ANALOGAUX)
{ {
// Analog aux channel 1 (channel 14) // Analog aux channel 1 (channel 14)
packet[1] = convert_channel_8b(CH14); packet[1] = convert_channel_8b(CH14);
} }
else else
packet[1] = 0xFA; // normal mode is 0xF7, expert 0xFa , D4 normal is 0xF4 packet[1] = 0xFA; // normal mode is 0xF7, expert 0xFa , D4 normal is 0xF4
//Flags packet[2] //Flags packet[2]
packet[2] = 0x00; packet[2] = 0x00;
if(CH5_SW) if(CH5_SW)
packet[2] = BAYANG_FLAG_FLIP; packet[2] = BAYANG_FLAG_FLIP;
if(CH6_SW) if(CH6_SW)
packet[2] |= BAYANG_FLAG_RTH; packet[2] |= BAYANG_FLAG_RTH;
if(CH7_SW) if(CH7_SW)
packet[2] |= BAYANG_FLAG_PICTURE; packet[2] |= BAYANG_FLAG_PICTURE;
if(CH8_SW) if(CH8_SW)
packet[2] |= BAYANG_FLAG_VIDEO; packet[2] |= BAYANG_FLAG_VIDEO;
if(CH9_SW) if(CH9_SW)
{ {
packet[2] |= BAYANG_FLAG_HEADLESS; packet[2] |= BAYANG_FLAG_HEADLESS;
dyntrim = 0; dyntrim = 0;
} }
//Flags packet[3] //Flags packet[3]
packet[3] = 0x00; packet[3] = 0x00;
if(CH10_SW) if(CH10_SW)
packet[3] = BAYANG_FLAG_INVERTED; packet[3] = BAYANG_FLAG_INVERTED;
if(CH11_SW) if(CH11_SW)
dyntrim = 0; dyntrim = 0;
if(CH12_SW) if(CH12_SW)
packet[3] |= BAYANG_FLAG_TAKE_OFF; packet[3] |= BAYANG_FLAG_TAKE_OFF;
if(CH13_SW) if(CH13_SW)
packet[3] |= BAYANG_FLAG_EMG_STOP; packet[3] |= BAYANG_FLAG_EMG_STOP;
//Aileron //Aileron
val = convert_channel_10b(AILERON); val = convert_channel_10b(AILERON);
packet[4] = (val>>8) + (dyntrim ? ((val>>2) & 0xFC) : 0x7C); packet[4] = (val>>8) + (dyntrim ? ((val>>2) & 0xFC) : 0x7C);
packet[5] = val & 0xFF; packet[5] = val & 0xFF;
//Elevator //Elevator
val = convert_channel_10b(ELEVATOR); val = convert_channel_10b(ELEVATOR);
packet[6] = (val>>8) + (dyntrim ? ((val>>2) & 0xFC) : 0x7C); packet[6] = (val>>8) + (dyntrim ? ((val>>2) & 0xFC) : 0x7C);
packet[7] = val & 0xFF; packet[7] = val & 0xFF;
//Throttle //Throttle
val = convert_channel_10b(THROTTLE); val = convert_channel_10b(THROTTLE);
packet[8] = (val>>8) + 0x7C; packet[8] = (val>>8) + 0x7C;
packet[9] = val & 0xFF; packet[9] = val & 0xFF;
//Rudder //Rudder
val = convert_channel_10b(RUDDER); val = convert_channel_10b(RUDDER);
packet[10] = (val>>8) + (dyntrim ? ((val>>2) & 0xFC) : 0x7C); packet[10] = (val>>8) + (dyntrim ? ((val>>2) & 0xFC) : 0x7C);
packet[11] = val & 0xFF; packet[11] = val & 0xFF;
} }
switch (sub_protocol) switch (sub_protocol)
{ {
case H8S3D: case H8S3D:
packet[12] = rx_tx_addr[2]; // txid[2] packet[12] = rx_tx_addr[2]; // txid[2]
packet[13] = 0x34; packet[13] = 0x34;
break; break;
case CX100: case QX100:
case X16_AH: case X16_AH:
packet[12] = 0; packet[12] = 0;
packet[13] = 0; packet[13] = 0;
break; break;
case IRDRONE: case IRDRONE:
packet[12] = 0xE0; packet[12] = 0xE0;
packet[13] = 0x2E; packet[13] = 0x2E;
break; break;
case DHD_D4: case DHD_D4:
packet[12] = 0x37; //0x17 during bind packet[12] = 0x37; //0x17 during bind
packet[13] = 0xED; packet[13] = 0xED;
break; break;
default: default:
packet[12] = rx_tx_addr[2]; // txid[2] packet[12] = rx_tx_addr[2]; // txid[2]
if (option & BAYANG_OPTION_FLAG_ANALOGAUX) if (option & BAYANG_OPTION_FLAG_ANALOGAUX)
{ // Analog aux channel 2 (channel 15) { // Analog aux channel 2 (channel 15)
packet[13] = convert_channel_8b(CH15); packet[13] = convert_channel_8b(CH15);
} }
else else
packet[13] = 0x0A; packet[13] = 0x0A;
break; break;
} }
packet[14] = 0; packet[14] = 0;
for (uint8_t i=0; i < BAYANG_PACKET_SIZE-1; i++) for (uint8_t i=0; i < BAYANG_PACKET_SIZE-1; i++)
packet[14] += packet[i]; packet[14] += packet[i];
NRF24L01_WriteReg(NRF24L01_05_RF_CH, IS_BIND_IN_PROGRESS ? rf_ch_num:hopping_frequency[hopping_frequency_no++]); NRF24L01_WriteReg(NRF24L01_05_RF_CH, IS_BIND_IN_PROGRESS ? rf_ch_num:hopping_frequency[hopping_frequency_no++]);
hopping_frequency_no%=BAYANG_RF_NUM_CHANNELS; hopping_frequency_no%=BAYANG_RF_NUM_CHANNELS;
// Power on, TX mode, 2byte CRC // Power on, TX mode, 2byte CRC
// Why CRC0? xn297 does not interpret it - either 16-bit CRC or nothing // Why CRC0? xn297 does not interpret it - either 16-bit CRC or nothing
NRF24L01_FlushTx(); NRF24L01_FlushTx();
NRF24L01_SetTxRxMode(TX_EN); NRF24L01_SetTxRxMode(TX_EN);
XN297_Configure(_BV(NRF24L01_00_EN_CRC) | _BV(NRF24L01_00_CRCO) | _BV(NRF24L01_00_PWR_UP)); XN297_Configure(_BV(NRF24L01_00_EN_CRC) | _BV(NRF24L01_00_CRCO) | _BV(NRF24L01_00_PWR_UP));
XN297_WritePayload(packet, BAYANG_PACKET_SIZE); XN297_WritePayload(packet, BAYANG_PACKET_SIZE);
NRF24L01_SetPower(); // Set tx_power NRF24L01_SetPower(); // Set tx_power
} }
#ifdef BAYANG_HUB_TELEMETRY #ifdef BAYANG_HUB_TELEMETRY
static void __attribute__((unused)) BAYANG_check_rx(void) static void __attribute__((unused)) BAYANG_check_rx(void)
{ {
if (NRF24L01_ReadReg(NRF24L01_07_STATUS) & _BV(NRF24L01_07_RX_DR)) if (NRF24L01_ReadReg(NRF24L01_07_STATUS) & _BV(NRF24L01_07_RX_DR))
{ // data received from model { // data received from model
XN297_ReadPayload(packet, BAYANG_PACKET_SIZE); XN297_ReadPayload(packet, BAYANG_PACKET_SIZE);
NRF24L01_WriteReg(NRF24L01_07_STATUS, 255); NRF24L01_WriteReg(NRF24L01_07_STATUS, 255);
NRF24L01_FlushRx(); NRF24L01_FlushRx();
uint8_t check = packet[0]; uint8_t check = packet[0];
for (uint8_t i=1; i < BAYANG_PACKET_SIZE-1; i++) for (uint8_t i=1; i < BAYANG_PACKET_SIZE-1; i++)
check += packet[i]; check += packet[i];
// decode data , check sum is ok as well, since there is no crc // decode data , check sum is ok as well, since there is no crc
if (packet[0] == 0x85 && packet[14] == check) if (packet[0] == 0x85 && packet[14] == check)
{ {
// uncompensated battery volts*100/2 // uncompensated battery volts*100/2
v_lipo1 = (packet[3]<<7) + (packet[4]>>2); v_lipo1 = (packet[3]<<7) + (packet[4]>>2);
// compensated battery volts*100/2 // compensated battery volts*100/2
v_lipo2 = (packet[5]<<7) + (packet[6]>>2); v_lipo2 = (packet[5]<<7) + (packet[6]>>2);
// reception in packets / sec // reception in packets / sec
RX_LQI = packet[7]; RX_LQI = packet[7];
RX_RSSI = RX_LQI; RX_RSSI = RX_LQI;
//Flags //Flags
//uint8_t flags = packet[3] >> 3; //uint8_t flags = packet[3] >> 3;
// battery low: flags & 1 // battery low: flags & 1
telemetry_counter++; telemetry_counter++;
if(telemetry_lost==0) if(telemetry_lost==0)
telemetry_link=1; telemetry_link=1;
} }
} }
NRF24L01_SetTxRxMode(TXRX_OFF); NRF24L01_SetTxRxMode(TXRX_OFF);
} }
#endif #endif
static void __attribute__((unused)) BAYANG_init() static void __attribute__((unused)) BAYANG_init()
{ {
NRF24L01_Initialize(); NRF24L01_Initialize();
NRF24L01_SetTxRxMode(TX_EN); NRF24L01_SetTxRxMode(TX_EN);
XN297_SetTXAddr((uint8_t *)"\x00\x00\x00\x00\x00", BAYANG_ADDRESS_LENGTH); XN297_SetTXAddr((uint8_t *)"\x00\x00\x00\x00\x00", BAYANG_ADDRESS_LENGTH);
NRF24L01_FlushTx(); NRF24L01_FlushTx();
NRF24L01_FlushRx(); NRF24L01_FlushRx();
NRF24L01_WriteReg(NRF24L01_07_STATUS, 0x70); // Clear data ready, data sent, and retransmit NRF24L01_WriteReg(NRF24L01_07_STATUS, 0x70); // Clear data ready, data sent, and retransmit
NRF24L01_WriteReg(NRF24L01_01_EN_AA, 0x00); // No Auto Acknowldgement on all data pipes NRF24L01_WriteReg(NRF24L01_01_EN_AA, 0x00); // No Auto Acknowldgement on all data pipes
NRF24L01_WriteReg(NRF24L01_02_EN_RXADDR, 0x01); // Enable data pipe 0 only NRF24L01_WriteReg(NRF24L01_02_EN_RXADDR, 0x01); // Enable data pipe 0 only
NRF24L01_WriteReg(NRF24L01_11_RX_PW_P0, BAYANG_PACKET_SIZE); NRF24L01_WriteReg(NRF24L01_11_RX_PW_P0, BAYANG_PACKET_SIZE);
NRF24L01_SetBitrate(NRF24L01_BR_1M); // 1Mbps NRF24L01_SetBitrate(NRF24L01_BR_1M); // 1Mbps
NRF24L01_WriteReg(NRF24L01_04_SETUP_RETR, 0x00); // No retransmits NRF24L01_WriteReg(NRF24L01_04_SETUP_RETR, 0x00); // No retransmits
NRF24L01_SetPower(); NRF24L01_SetPower();
NRF24L01_Activate(0x73); // Activate feature register NRF24L01_Activate(0x73); // Activate feature register
NRF24L01_WriteReg(NRF24L01_1C_DYNPD, 0x00); // Disable dynamic payload length on all pipes NRF24L01_WriteReg(NRF24L01_1C_DYNPD, 0x00); // Disable dynamic payload length on all pipes
NRF24L01_WriteReg(NRF24L01_1D_FEATURE, 0x01); NRF24L01_WriteReg(NRF24L01_1D_FEATURE, 0x01);
NRF24L01_Activate(0x73); NRF24L01_Activate(0x73);
switch (sub_protocol) switch (sub_protocol)
{ {
case X16_AH: case X16_AH:
case IRDRONE: case IRDRONE:
rf_ch_num = BAYANG_RF_BIND_CHANNEL_X16_AH; rf_ch_num = BAYANG_RF_BIND_CHANNEL_X16_AH;
break; break;
default: default:
rf_ch_num = BAYANG_RF_BIND_CHANNEL; rf_ch_num = BAYANG_RF_BIND_CHANNEL;
break; break;
} }
} }
enum { enum {
BAYANG_BIND=0, BAYANG_BIND=0,
BAYANG_WRITE, BAYANG_WRITE,
BAYANG_CHECK, BAYANG_CHECK,
BAYANG_READ, BAYANG_READ,
}; };
#define BAYANG_CHECK_DELAY 1000 // Time after write phase to check write complete #define BAYANG_CHECK_DELAY 1000 // Time after write phase to check write complete
#define BAYANG_READ_DELAY 600 // Time before read phase #define BAYANG_READ_DELAY 600 // Time before read phase
uint16_t BAYANG_callback() uint16_t BAYANG_callback()
{ {
#ifdef BAYANG_HUB_TELEMETRY #ifdef BAYANG_HUB_TELEMETRY
uint16_t start; uint16_t start;
#endif #endif
switch(phase) switch(phase)
{ {
case BAYANG_BIND: case BAYANG_BIND:
if (--bind_counter == 0) if (--bind_counter == 0)
{ {
XN297_SetTXAddr(rx_tx_addr, BAYANG_ADDRESS_LENGTH); XN297_SetTXAddr(rx_tx_addr, BAYANG_ADDRESS_LENGTH);
#ifdef BAYANG_HUB_TELEMETRY #ifdef BAYANG_HUB_TELEMETRY
XN297_SetRXAddr(rx_tx_addr, BAYANG_ADDRESS_LENGTH); XN297_SetRXAddr(rx_tx_addr, BAYANG_ADDRESS_LENGTH);
#endif #endif
BIND_DONE; BIND_DONE;
phase++; //WRITE phase++; //WRITE
} }
else else
BAYANG_send_packet(); BAYANG_send_packet();
break; break;
case BAYANG_WRITE: case BAYANG_WRITE:
#ifdef MULTI_SYNC #ifdef MULTI_SYNC
telemetry_set_input_sync((option & BAYANG_OPTION_FLAG_TELEMETRY)?BAYANG_PACKET_TELEM_PERIOD:BAYANG_PACKET_PERIOD); telemetry_set_input_sync((option & BAYANG_OPTION_FLAG_TELEMETRY)?BAYANG_PACKET_TELEM_PERIOD:BAYANG_PACKET_PERIOD);
#endif #endif
BAYANG_send_packet(); BAYANG_send_packet();
#ifdef BAYANG_HUB_TELEMETRY #ifdef BAYANG_HUB_TELEMETRY
if (option & BAYANG_OPTION_FLAG_TELEMETRY) if (option & BAYANG_OPTION_FLAG_TELEMETRY)
{ // telemetry is enabled { // telemetry is enabled
state++; state++;
if (state > 200) if (state > 200)
{ {
state = 0; state = 0;
//telemetry reception packet rate - packets per second //telemetry reception packet rate - packets per second
TX_LQI = telemetry_counter>>1; TX_LQI = telemetry_counter>>1;
telemetry_counter = 0; telemetry_counter = 0;
telemetry_lost=0; telemetry_lost=0;
} }
phase++; //CHECK phase++; //CHECK
return BAYANG_CHECK_DELAY; return BAYANG_CHECK_DELAY;
} }
#endif #endif
break; break;
#ifdef BAYANG_HUB_TELEMETRY #ifdef BAYANG_HUB_TELEMETRY
case BAYANG_CHECK: case BAYANG_CHECK:
// switch radio to rx as soon as packet is sent // switch radio to rx as soon as packet is sent
start=(uint16_t)micros(); start=(uint16_t)micros();
while ((uint16_t)((uint16_t)micros()-(uint16_t)start) < 1000) // Wait max 1ms while ((uint16_t)((uint16_t)micros()-(uint16_t)start) < 1000) // Wait max 1ms
if((NRF24L01_ReadReg(NRF24L01_07_STATUS) & _BV(NRF24L01_07_TX_DS))) if((NRF24L01_ReadReg(NRF24L01_07_STATUS) & _BV(NRF24L01_07_TX_DS)))
break; break;
NRF24L01_WriteReg(NRF24L01_00_CONFIG, 0x03); NRF24L01_WriteReg(NRF24L01_00_CONFIG, 0x03);
phase++; // READ phase++; // READ
return BAYANG_PACKET_TELEM_PERIOD - BAYANG_CHECK_DELAY - BAYANG_READ_DELAY; return BAYANG_PACKET_TELEM_PERIOD - BAYANG_CHECK_DELAY - BAYANG_READ_DELAY;
case BAYANG_READ: case BAYANG_READ:
BAYANG_check_rx(); BAYANG_check_rx();
phase=BAYANG_WRITE; phase=BAYANG_WRITE;
return BAYANG_READ_DELAY; return BAYANG_READ_DELAY;
#endif #endif
} }
return BAYANG_PACKET_PERIOD; return BAYANG_PACKET_PERIOD;
} }
static void __attribute__((unused)) BAYANG_initialize_txid() static void __attribute__((unused)) BAYANG_initialize_txid()
{ {
//Could be using txid[0..2] but using rx_tx_addr everywhere instead... //Could be using txid[0..2] but using rx_tx_addr everywhere instead...
if(sub_protocol==DHD_D4) if(sub_protocol==DHD_D4)
hopping_frequency[0]=(rx_tx_addr[2]&0x07)|0x01; hopping_frequency[0]=(rx_tx_addr[2]&0x07)|0x01;
else else
hopping_frequency[0]=0; hopping_frequency[0]=0;
hopping_frequency[1]=(rx_tx_addr[3]&0x1F)+0x10; hopping_frequency[1]=(rx_tx_addr[3]&0x1F)+0x10;
hopping_frequency[2]=hopping_frequency[1]+0x20; hopping_frequency[2]=hopping_frequency[1]+0x20;
hopping_frequency[3]=hopping_frequency[2]+0x20; hopping_frequency[3]=hopping_frequency[2]+0x20;
hopping_frequency_no=0; hopping_frequency_no=0;
} }
uint16_t initBAYANG(void) uint16_t initBAYANG(void)
{ {
BIND_IN_PROGRESS; // autobind protocol BIND_IN_PROGRESS; // autobind protocol
phase=BAYANG_BIND; phase=BAYANG_BIND;
bind_counter = BAYANG_BIND_COUNT; bind_counter = BAYANG_BIND_COUNT;
BAYANG_initialize_txid(); BAYANG_initialize_txid();
BAYANG_init(); BAYANG_init();
packet_count=0; packet_count=0;
return BAYANG_INITIAL_WAIT+BAYANG_PACKET_PERIOD; return BAYANG_INITIAL_WAIT+BAYANG_PACKET_PERIOD;
} }
#endif #endif

View File

@ -101,7 +101,7 @@ const char STR_SUBTYPE_SYMAX[] = "\x03""Std""X5C";
const char STR_SUBTYPE_SLT[] = "\x06""V1_6ch""V2_8ch""Q100\0 ""Q200\0 ""MR100\0"; const char STR_SUBTYPE_SLT[] = "\x06""V1_6ch""V2_8ch""Q100\0 ""Q200\0 ""MR100\0";
const char STR_SUBTYPE_CX10[] = "\x07""Green\0 ""Blue\0 ""DM007\0 ""-\0 ""JC3015a""JC3015b""MK33041"; const char STR_SUBTYPE_CX10[] = "\x07""Green\0 ""Blue\0 ""DM007\0 ""-\0 ""JC3015a""JC3015b""MK33041";
const char STR_SUBTYPE_CG023[] = "\x05""Std\0 ""YD829"; const char STR_SUBTYPE_CG023[] = "\x05""Std\0 ""YD829";
const char STR_SUBTYPE_BAYANG[] = "\x07""Std\0 ""H8S3D\0 ""X16 AH\0""IRDrone""DHD D4\0""CX100\0 "; const char STR_SUBTYPE_BAYANG[] = "\x07""Std\0 ""H8S3D\0 ""X16 AH\0""IRDrone""DHD D4\0""QX100\0 ";
const char STR_SUBTYPE_MT99[] = "\x06""MT99\0 ""H7\0 ""YZ\0 ""LS\0 ""FY805"; const char STR_SUBTYPE_MT99[] = "\x06""MT99\0 ""H7\0 ""YZ\0 ""LS\0 ""FY805";
const char STR_SUBTYPE_MJXQ[] = "\x07""WLH08\0 ""X600\0 ""X800\0 ""H26D\0 ""E010\0 ""H26WH\0 ""Phoenix"; const char STR_SUBTYPE_MJXQ[] = "\x07""WLH08\0 ""X600\0 ""X800\0 ""H26D\0 ""E010\0 ""H26WH\0 ""Phoenix";
const char STR_SUBTYPE_FY326[] = "\x05""Std\0 ""FY319"; const char STR_SUBTYPE_FY326[] = "\x05""Std\0 ""FY319";
@ -157,7 +157,7 @@ const mm_protocol_definition multi_protocols[] = {
{PROTO_ASSAN, STR_ASSAN, 0, NO_SUBTYPE, OPTION_NONE }, {PROTO_ASSAN, STR_ASSAN, 0, NO_SUBTYPE, OPTION_NONE },
#endif #endif
#if defined(BAYANG_NRF24L01_INO) #if defined(BAYANG_NRF24L01_INO)
{PROTO_BAYANG, STR_BAYANG, 5, STR_SUBTYPE_BAYANG, OPTION_TELEM }, {PROTO_BAYANG, STR_BAYANG, 6, STR_SUBTYPE_BAYANG, OPTION_TELEM },
#endif #endif
#if defined(BAYANG_RX_NRF24L01_INO) #if defined(BAYANG_RX_NRF24L01_INO)
{PROTO_BAYANG_RX, STR_BAYANG_RX, 0, NO_SUBTYPE, OPTION_NONE }, {PROTO_BAYANG_RX, STR_BAYANG_RX, 0, NO_SUBTYPE, OPTION_NONE },
@ -369,4 +369,4 @@ const mm_protocol_definition multi_protocols[] = {
{0x00, nullptr, 0, nullptr, 0 } {0x00, nullptr, 0, nullptr, 0 }
}; };
#endif #endif

View File

@ -195,7 +195,7 @@ enum BAYANG
X16_AH = 2, X16_AH = 2,
IRDRONE = 3, IRDRONE = 3,
DHD_D4 = 4, DHD_D4 = 4,
CX100 = 5, QX100 = 5,
}; };
enum MT99XX enum MT99XX
{ {
@ -834,6 +834,7 @@ Serial: 100000 Baud 8e2 _ xxxx xxxx p --
X16_AH 2 X16_AH 2
IRDRONE 3 IRDRONE 3
DHD_D4 4 DHD_D4 4
QX100 5
sub_protocol==MT99XX sub_protocol==MT99XX
MT99 0 MT99 0
H7 1 H7 1

View File

@ -510,7 +510,7 @@ const PPM_Parameters PPM_prot[14*NBR_BANKS]= {
X16_AH X16_AH
IRDRONE IRDRONE
DHD_D4 DHD_D4
CX100 QX100
PROTO_BAYANG_RX PROTO_BAYANG_RX
NONE NONE
PROTO_BUGS PROTO_BUGS