More code optimization

This commit is contained in:
Pascal Langer 2021-02-12 11:21:42 +01:00
parent 5a49d99c4f
commit 29d1fb00b1
32 changed files with 114 additions and 206 deletions

View File

@ -364,10 +364,10 @@ static void __attribute__((unused)) CABELL_RF_init()
CABELL_setAddress(); CABELL_setAddress();
NRF24L01_WriteReg(NRF24L01_11_RX_PW_P0, 0x20); // 32 byte packet length NRF24L01_WriteReg(NRF24L01_11_RX_PW_P0, 0x20); // 32 byte packet length
NRF24L01_WriteReg(NRF24L01_12_RX_PW_P1, 0x20); // 32 byte packet length NRF24L01_WriteReg(NRF24L01_12_RX_PW_P1, 0x20); // 32 byte packet length
NRF24L01_Activate(0x73); // Activate feature register
NRF24L01_WriteReg(NRF24L01_1C_DYNPD, 0x3F); // Enable dynamic payload length on all pipes NRF24L01_WriteReg(NRF24L01_1C_DYNPD, 0x3F); // Enable dynamic payload length on all pipes
NRF24L01_WriteReg(NRF24L01_1D_FEATURE, 0x04); // Enable dynamic Payload Length NRF24L01_WriteReg(NRF24L01_1D_FEATURE, 0x04); // Enable dynamic Payload Length
NRF24L01_Activate(0x73);
NRF24L01_SetTxRxMode(TX_EN); // Clear data ready, data sent, retransmit and enable CRC 16bits, ready for TX
} }
//----------------------------------------------------------------------------------------- //-----------------------------------------------------------------------------------------

View File

@ -658,11 +658,10 @@ static void CFLIE_RF_init()
NRF24L01_WriteRegisterMulti(NRF24L01_0A_RX_ADDR_P0, rx_tx_addr, TX_ADDR_SIZE); NRF24L01_WriteRegisterMulti(NRF24L01_0A_RX_ADDR_P0, rx_tx_addr, TX_ADDR_SIZE);
NRF24L01_WriteRegisterMulti(NRF24L01_10_TX_ADDR, rx_tx_addr, TX_ADDR_SIZE); NRF24L01_WriteRegisterMulti(NRF24L01_10_TX_ADDR, rx_tx_addr, TX_ADDR_SIZE);
// this sequence necessary for module from stock tx
NRF24L01_Activate(0x73); // Activate feature register
NRF24L01_WriteReg(NRF24L01_1C_DYNPD, 0x01); // Enable Dynamic Payload Length on pipe 0 NRF24L01_WriteReg(NRF24L01_1C_DYNPD, 0x01); // Enable Dynamic Payload Length on pipe 0
NRF24L01_WriteReg(NRF24L01_1D_FEATURE, 0x06); // Enable Dynamic Payload Length, enable Payload with ACK NRF24L01_WriteReg(NRF24L01_1D_FEATURE, 0x06); // Enable Dynamic Payload Length, enable Payload with ACK
NRF24L01_Activate(0x73);
NRF24L01_SetTxRxMode(TX_EN); // Clear data ready, data sent, retransmit and enable CRC 16bits, ready for TX
} }
// TODO: Fix telemetry // TODO: Fix telemetry

View File

@ -128,18 +128,14 @@ static void __attribute__((unused)) CG023_RF_init()
uint16_t CG023_callback() uint16_t CG023_callback()
{ {
if(IS_BIND_DONE) #ifdef MULTI_SYNC
{ telemetry_set_input_sync(packet_period);
#ifdef MULTI_SYNC #endif
telemetry_set_input_sync(packet_period); if(bind_counter)
#endif
}
else
{ {
bind_counter--;
if (bind_counter == 0) if (bind_counter == 0)
BIND_DONE; BIND_DONE;
else
bind_counter--;
} }
CG023_send_packet(); CG023_send_packet();
return packet_period; return packet_period;

View File

@ -37,10 +37,10 @@ enum DM002_FLAGS {
DM002_FLAG_CAMERA2 = 0x80, DM002_FLAG_CAMERA2 = 0x80,
}; };
static void __attribute__((unused)) DM002_send_packet(uint8_t bind) static void __attribute__((unused)) DM002_send_packet()
{ {
memcpy(packet+5,(uint8_t *)"\x00\x7F\x7F\x7F\x00\x00\x00",7); memcpy(packet+5,(uint8_t *)"\x00\x7F\x7F\x7F\x00\x00\x00",7);
if(bind) if(IS_BIND_IN_PROGRESS)
{ {
packet[0] = 0xAA; packet[0] = 0xAA;
packet[1] = rx_tx_addr[0]; packet[1] = rx_tx_addr[0];
@ -83,10 +83,7 @@ static void __attribute__((unused)) DM002_send_packet(uint8_t bind)
// 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
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));
if (bind) NRF24L01_WriteReg(NRF24L01_05_RF_CH, IS_BIND_IN_PROGRESS ? DM002_RF_BIND_CHANNEL : hopping_frequency[hopping_frequency_no]);
NRF24L01_WriteReg(NRF24L01_05_RF_CH, DM002_RF_BIND_CHANNEL);
else
NRF24L01_WriteReg(NRF24L01_05_RF_CH, hopping_frequency[hopping_frequency_no]);
// clear packet status bits and TX FIFO // clear packet status bits and TX FIFO
NRF24L01_WriteReg(NRF24L01_07_STATUS, 0x70); NRF24L01_WriteReg(NRF24L01_07_STATUS, 0x70);
NRF24L01_FlushTx(); NRF24L01_FlushTx();
@ -104,26 +101,19 @@ static void __attribute__((unused)) DM002_RF_init()
uint16_t DM002_callback() uint16_t DM002_callback()
{ {
if(IS_BIND_DONE) #ifdef MULTI_SYNC
{ telemetry_set_input_sync(DM002_PACKET_PERIOD);
#ifdef MULTI_SYNC #endif
telemetry_set_input_sync(DM002_PACKET_PERIOD); if (bind_counter)
#endif
DM002_send_packet(0);
}
else
{ {
bind_counter--;
if (bind_counter == 0) if (bind_counter == 0)
{ {
BIND_DONE; BIND_DONE;
XN297_SetTXAddr(rx_tx_addr, 5); XN297_SetTXAddr(rx_tx_addr, 5);
} }
else
{
DM002_send_packet(1);
bind_counter--;
}
} }
DM002_send_packet();
return DM002_PACKET_PERIOD; return DM002_PACKET_PERIOD;
} }

View File

@ -55,11 +55,8 @@ uint16_t E010R5_callback()
{ {
//Bind //Bind
if(bind_counter) if(bind_counter)
{ if(--bind_counter==0)
bind_counter--;
if(bind_counter==0)
BIND_DONE; BIND_DONE;
}
//Send packet //Send packet
RF2500_SendPayload(); RF2500_SendPayload();

View File

@ -95,14 +95,14 @@ static void __attribute__((unused)) E015_check_arming()
} }
} }
static void __attribute__((unused)) E01X_send_packet(uint8_t bind) static void __attribute__((unused)) E01X_send_packet()
{ {
uint8_t can_flip = 0, calibrate = 1; uint8_t can_flip = 0, calibrate = 1;
if(sub_protocol==E012) if(sub_protocol==E012)
{ {
packet_length=E012_PACKET_SIZE; packet_length=E012_PACKET_SIZE;
packet[0] = rx_tx_addr[1]; packet[0] = rx_tx_addr[1];
if(bind) if(IS_BIND_IN_PROGRESS)
{ {
packet[1] = 0xaa; packet[1] = 0xaa;
memcpy(&packet[2], hopping_frequency, E012_NUM_RF_CHANNELS); memcpy(&packet[2], hopping_frequency, E012_NUM_RF_CHANNELS);
@ -134,7 +134,7 @@ static void __attribute__((unused)) E01X_send_packet(uint8_t bind)
} }
else if(sub_protocol==E015) else if(sub_protocol==E015)
{ // E015 { // E015
if(bind) if(IS_BIND_IN_PROGRESS)
{ {
packet[0] = 0x18; packet[0] = 0x18;
packet[1] = 0x04; packet[1] = 0x04;
@ -173,7 +173,7 @@ static void __attribute__((unused)) E01X_send_packet(uint8_t bind)
else else
{ // E016H { // E016H
packet_length=E016H_PACKET_SIZE; packet_length=E016H_PACKET_SIZE;
if(bind) if(IS_BIND_IN_PROGRESS)
{ {
rf_ch_num=E016H_BIND_CHANNEL; rf_ch_num=E016H_BIND_CHANNEL;
memcpy(packet, &rx_tx_addr[1], 4); memcpy(packet, &rx_tx_addr[1], 4);
@ -258,8 +258,12 @@ static void __attribute__((unused)) E01X_RF_init()
uint16_t E01X_callback() uint16_t E01X_callback()
{ {
if(IS_BIND_IN_PROGRESS) #ifdef MULTI_SYNC
telemetry_set_input_sync(packet_period);
#endif
if(bind_counter)
{ {
bind_counter--;
if (bind_counter == 0) if (bind_counter == 0)
{ {
if(sub_protocol==E016H) if(sub_protocol==E016H)
@ -268,19 +272,8 @@ uint16_t E01X_callback()
HS6200_SetTXAddr(rx_tx_addr, E01X_ADDRESS_LENGTH); HS6200_SetTXAddr(rx_tx_addr, E01X_ADDRESS_LENGTH);
BIND_DONE; BIND_DONE;
} }
else
{
E01X_send_packet(1);
bind_counter--;
}
}
else
{
#ifdef MULTI_SYNC
telemetry_set_input_sync(packet_period);
#endif
E01X_send_packet(0);
} }
E01X_send_packet();
return packet_period; return packet_period;
} }

View File

@ -92,14 +92,11 @@ uint16_t E129_callback()
//Bind //Bind
if(bind_counter) if(bind_counter)
{ if(--bind_counter==0)
bind_counter--;
if(bind_counter==0)
{ {
BIND_DONE; BIND_DONE;
RF2500_SetTXAddr(rx_tx_addr); // 4 bytes of address RF2500_SetTXAddr(rx_tx_addr); // 4 bytes of address
} }
}
//Build packet //Build packet
E129_build_data_packet(); E129_build_data_packet();

View File

@ -36,11 +36,11 @@ static void __attribute__((unused)) ESKY150_RF_init()
NRF24L01_WriteReg(NRF24L01_11_RX_PW_P0, ESKY150_PAYLOADSIZE); // bytes of data payload for pipe 0 NRF24L01_WriteReg(NRF24L01_11_RX_PW_P0, ESKY150_PAYLOADSIZE); // bytes of data payload for pipe 0
NRF24L01_WriteRegisterMulti(NRF24L01_10_TX_ADDR, rx_tx_addr, ESKY150_TX_ADDRESS_SIZE); NRF24L01_WriteRegisterMulti(NRF24L01_10_TX_ADDR, rx_tx_addr, ESKY150_TX_ADDRESS_SIZE);
NRF24L01_Activate(0x73);
NRF24L01_WriteReg(NRF24L01_1C_DYNPD, 1); // Dynamic payload for data pipe 0 NRF24L01_WriteReg(NRF24L01_1C_DYNPD, 1); // Dynamic payload for data pipe 0
// Enable: Dynamic Payload Length, Payload with ACK , W_TX_PAYLOAD_NOACK // Enable: Dynamic Payload Length, Payload with ACK , W_TX_PAYLOAD_NOACK
NRF24L01_WriteReg(NRF24L01_1D_FEATURE, _BV(NRF2401_1D_EN_DPL) | _BV(NRF2401_1D_EN_ACK_PAY) | _BV(NRF2401_1D_EN_DYN_ACK)); NRF24L01_WriteReg(NRF24L01_1D_FEATURE, _BV(NRF2401_1D_EN_DPL) | _BV(NRF2401_1D_EN_ACK_PAY) | _BV(NRF2401_1D_EN_DYN_ACK));
NRF24L01_Activate(0x73);
NRF24L01_SetTxRxMode(TX_EN); // Clear data ready, data sent, retransmit and enable CRC 16bits, ready for TX
} }
static void __attribute__((unused)) ESKY150_bind_init() static void __attribute__((unused)) ESKY150_bind_init()

View File

@ -160,6 +160,9 @@ static void __attribute__((unused)) FQ777_RF_init()
uint16_t FQ777_callback() uint16_t FQ777_callback()
{ {
#ifdef MULTI_SYNC
telemetry_set_input_sync(FQ777_PACKET_PERIOD);
#endif
if(bind_counter) if(bind_counter)
{ {
bind_counter--; bind_counter--;
@ -169,11 +172,6 @@ uint16_t FQ777_callback()
BIND_DONE; BIND_DONE;
} }
} }
#ifdef MULTI_SYNC
else
telemetry_set_input_sync(FQ777_PACKET_PERIOD);
#endif
FQ777_send_packet(); FQ777_send_packet();
return FQ777_PACKET_PERIOD; return FQ777_PACKET_PERIOD;
} }

View File

@ -81,7 +81,7 @@ uint16_t FX816_callback()
#ifdef MULTI_SYNC #ifdef MULTI_SYNC
telemetry_set_input_sync(FX816_PACKET_PERIOD); telemetry_set_input_sync(FX816_PACKET_PERIOD);
#endif #endif
if(IS_BIND_IN_PROGRESS) if(bind_counter)
if(--bind_counter==0) if(--bind_counter==0)
BIND_DONE; BIND_DONE;
FX816_send_packet(); FX816_send_packet();

View File

@ -102,10 +102,8 @@ static void __attribute__((unused)) FY326_RF_init()
NRF24L01_WriteReg(NRF24L01_05_RF_CH, FY326_RF_BIND_CHANNEL); NRF24L01_WriteReg(NRF24L01_05_RF_CH, FY326_RF_BIND_CHANNEL);
NRF24L01_SetBitrate(NRF24L01_BR_250K); NRF24L01_SetBitrate(NRF24L01_BR_250K);
NRF24L01_Activate(0x73);
NRF24L01_WriteReg(NRF24L01_1C_DYNPD, 0x3f); NRF24L01_WriteReg(NRF24L01_1C_DYNPD, 0x3f);
NRF24L01_WriteReg(NRF24L01_1D_FEATURE, 0x07); NRF24L01_WriteReg(NRF24L01_1D_FEATURE, 0x07);
NRF24L01_Activate(0x73);
//Switch to RX //Switch to RX
NRF24L01_SetTxRxMode(TXRX_OFF); NRF24L01_SetTxRxMode(TXRX_OFF);

View File

@ -129,7 +129,7 @@ static void __attribute__((unused)) FLYSKY_apply_extension_flags()
} }
} }
static void __attribute__((unused)) FLYSKY_build_packet(uint8_t init) static void __attribute__((unused)) FLYSKY_send_packet()
{ {
uint8_t i; uint8_t i;
//servodata timing range for flysky. //servodata timing range for flysky.
@ -137,7 +137,7 @@ static void __attribute__((unused)) FLYSKY_build_packet(uint8_t init)
//+100% =~ 0x07ca//=1994us(max) //+100% =~ 0x07ca//=1994us(max)
//Center = 0x5d9//=1497us(center) //Center = 0x5d9//=1497us(center)
//channel order AIL;ELE;THR;RUD;CH5;CH6;CH7;CH8 //channel order AIL;ELE;THR;RUD;CH5;CH6;CH7;CH8
packet[0] = init ? 0xaa : 0x55; packet[0] = IS_BIND_IN_PROGRESS ? 0xaa : 0x55;
packet[1] = rx_tx_addr[3]; packet[1] = rx_tx_addr[3];
packet[2] = rx_tx_addr[2]; packet[2] = rx_tx_addr[2];
packet[3] = rx_tx_addr[1]; packet[3] = rx_tx_addr[1];
@ -151,31 +151,27 @@ static void __attribute__((unused)) FLYSKY_build_packet(uint8_t init)
packet[6 + i*2]=(temp>>8)&0xFF; //high byte of servo timing(1000-2000us) packet[6 + i*2]=(temp>>8)&0xFF; //high byte of servo timing(1000-2000us)
} }
FLYSKY_apply_extension_flags(); FLYSKY_apply_extension_flags();
A7105_SetPower();
A7105_WriteData(21, IS_BIND_IN_PROGRESS ? 0x01:hopping_frequency[hopping_frequency_no & 0x0F]);
hopping_frequency_no++;
} }
uint16_t FLYSKY_callback() uint16_t FLYSKY_callback()
{ {
#ifdef MULTI_SYNC
telemetry_set_input_sync(packet_period);
#endif
#ifndef FORCE_FLYSKY_TUNING #ifndef FORCE_FLYSKY_TUNING
A7105_AdjustLOBaseFreq(1); A7105_AdjustLOBaseFreq(1);
#endif #endif
if(IS_BIND_IN_PROGRESS) if(bind_counter)
{ {
FLYSKY_build_packet(1);
A7105_WriteData(21, 1);
bind_counter--; bind_counter--;
if (bind_counter==0) if (bind_counter==0)
BIND_DONE; BIND_DONE;
} }
else FLYSKY_send_packet();
{
#ifdef MULTI_SYNC
telemetry_set_input_sync(packet_period);
#endif
FLYSKY_build_packet(0);
A7105_WriteData(21, hopping_frequency[hopping_frequency_no & 0x0F]);
A7105_SetPower();
}
hopping_frequency_no++;
return packet_period; return packet_period;
} }

View File

@ -204,13 +204,13 @@ static void __attribute__((unused)) GD00X_initialize_txid()
uint16_t GD00X_callback() uint16_t GD00X_callback()
{ {
if(IS_BIND_IN_PROGRESS)
if(--bind_counter==0)
BIND_DONE;
GD00X_send_packet();
#ifdef MULTI_SYNC #ifdef MULTI_SYNC
telemetry_set_input_sync(packet_period); telemetry_set_input_sync(packet_period);
#endif #endif
if(bind_counter)
if(--bind_counter==0)
BIND_DONE;
GD00X_send_packet();
return packet_period; return packet_period;
} }

View File

@ -141,14 +141,14 @@ static void __attribute__((unused)) HONTAI_RF_init()
else else
XN297_SetTXAddr((const uint8_t*)"\xd2\xb5\x99\xb3\x4a", 5); XN297_SetTXAddr((const uint8_t*)"\xd2\xb5\x99\xb3\x4a", 5);
NRF24L01_Activate(0x73); // Activate feature register
if(sub_protocol == JJRCX1) if(sub_protocol == JJRCX1)
{ {
NRF24L01_WriteReg(NRF24L01_04_SETUP_RETR, 0xff); // JJRC uses dynamic payload length NRF24L01_WriteReg(NRF24L01_04_SETUP_RETR, 0xff); // JJRC uses dynamic payload length
NRF24L01_WriteReg(NRF24L01_1C_DYNPD, 0x3f); // match other stock settings even though AA disabled... NRF24L01_WriteReg(NRF24L01_1C_DYNPD, 0x3f); // match other stock settings even though AA disabled...
NRF24L01_WriteReg(NRF24L01_1D_FEATURE, 0x07); NRF24L01_WriteReg(NRF24L01_1D_FEATURE, 0x07);
} }
NRF24L01_Activate(0x73); // Deactivate feature register
NRF24L01_SetTxRxMode(TX_EN); // Clear data ready, data sent, retransmit and enable CRC 16bits, ready for TX
} }
const uint8_t PROGMEM HONTAI_hopping_frequency_nonels[][3] = { const uint8_t PROGMEM HONTAI_hopping_frequency_nonels[][3] = {
@ -201,7 +201,9 @@ static void __attribute__((unused)) HONTAI_initialize_txid()
uint16_t HONTAI_callback() uint16_t HONTAI_callback()
{ {
HONTAI_send_packet(); #ifdef MULTI_SYNC
telemetry_set_input_sync(packet_period);
#endif
if(bind_counter) if(bind_counter)
{ {
bind_counter--; bind_counter--;
@ -211,11 +213,7 @@ uint16_t HONTAI_callback()
BIND_DONE; BIND_DONE;
} }
} }
#ifdef MULTI_SYNC HONTAI_send_packet();
else
telemetry_set_input_sync(packet_period);
#endif
return packet_period; return packet_period;
} }

View File

@ -143,11 +143,10 @@ uint16_t JJRC345_callback()
#ifdef MULTI_SYNC #ifdef MULTI_SYNC
telemetry_set_input_sync(JJRC345_PACKET_PERIOD); telemetry_set_input_sync(JJRC345_PACKET_PERIOD);
#endif #endif
if(IS_BIND_IN_PROGRESS) if(bind_counter)
{ {
if (bind_counter) bind_counter--;
bind_counter--; if (bind_counter==0)
else
BIND_DONE; BIND_DONE;
} }
JJRC345_send_packet(); JJRC345_send_packet();

View File

@ -89,7 +89,7 @@ uint16_t KF606_callback()
#ifdef MULTI_SYNC #ifdef MULTI_SYNC
telemetry_set_input_sync(KF606_PACKET_PERIOD); telemetry_set_input_sync(KF606_PACKET_PERIOD);
#endif #endif
if(IS_BIND_IN_PROGRESS) if(bind_counter)
if(--bind_counter==0) if(--bind_counter==0)
{ {
BIND_DONE; BIND_DONE;

View File

@ -247,11 +247,11 @@ static void __attribute__((unused)) KN_RF_init()
NRF24L01_Initialize(); NRF24L01_Initialize();
NRF24L01_WriteReg(NRF24L01_11_RX_PW_P0, 0x20); // bytes of data payload for pipe 0 NRF24L01_WriteReg(NRF24L01_11_RX_PW_P0, 0x20); // bytes of data payload for pipe 0
NRF24L01_Activate(0x73);
NRF24L01_WriteReg(NRF24L01_1C_DYNPD, 1); // Dynamic payload for data pipe 0 NRF24L01_WriteReg(NRF24L01_1C_DYNPD, 1); // Dynamic payload for data pipe 0
// Enable: Dynamic Payload Length to enable PCF // Enable: Dynamic Payload Length to enable PCF
NRF24L01_WriteReg(NRF24L01_1D_FEATURE, _BV(NRF2401_1D_EN_DPL)); NRF24L01_WriteReg(NRF24L01_1D_FEATURE, _BV(NRF2401_1D_EN_DPL));
NRF24L01_Activate(0x73);
NRF24L01_SetTxRxMode(TX_EN); // Clear data ready, data sent, retransmit and enable CRC 16bits, ready for TX
} }
//================================================================================================ //================================================================================================

View File

@ -166,14 +166,11 @@ uint16_t LOLI_callback()
{ {
case LOLI_BIND1: case LOLI_BIND1:
if(bind_counter) if(bind_counter)
{ if(--bind_counter==0)
bind_counter--;
if(bind_counter==0)
{ {
phase=LOLI_PREP_DATA; phase=LOLI_PREP_DATA;
break; break;
} }
}
// send bind packet // send bind packet
NRF24L01_SetTxRxMode(TXRX_OFF); NRF24L01_SetTxRxMode(TXRX_OFF);
NRF24L01_SetTxRxMode(TX_EN); NRF24L01_SetTxRxMode(TX_EN);

View File

@ -320,6 +320,9 @@ static void __attribute__((unused)) MT99XX_initialize_txid()
uint16_t MT99XX_callback() uint16_t MT99XX_callback()
{ {
#ifdef MULTI_SYNC
telemetry_set_input_sync(packet_period);
#endif
if(bind_counter) if(bind_counter)
{ {
bind_counter--; bind_counter--;
@ -333,10 +336,6 @@ uint16_t MT99XX_callback()
BIND_DONE; BIND_DONE;
} }
} }
#ifdef MULTI_SYNC
else
telemetry_set_input_sync(packet_period);
#endif
MT99XX_send_packet(); MT99XX_send_packet();
return packet_period; return packet_period;

View File

@ -19,7 +19,7 @@
#define VERSION_MAJOR 1 #define VERSION_MAJOR 1
#define VERSION_MINOR 3 #define VERSION_MINOR 3
#define VERSION_REVISION 2 #define VERSION_REVISION 2
#define VERSION_PATCH_LEVEL 39 #define VERSION_PATCH_LEVEL 40
//****************** //******************
// Protocols // Protocols

View File

@ -38,12 +38,8 @@ void NRF24L01_Initialize()
NRF24L01_WriteReg(NRF24L01_03_SETUP_AW, 0x03); // 5 bytes rx/tx address NRF24L01_WriteReg(NRF24L01_03_SETUP_AW, 0x03); // 5 bytes rx/tx address
NRF24L01_WriteReg(NRF24L01_04_SETUP_RETR, 0x00); // no retransmits NRF24L01_WriteReg(NRF24L01_04_SETUP_RETR, 0x00); // no retransmits
NRF24L01_SetBitrate(NRF24L01_BR_1M); // 1Mbps NRF24L01_SetBitrate(NRF24L01_BR_1M); // 1Mbps
/* Already done in NRF24L01_Reset
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); // Set feature bits off and enable the command NRF24L01_B0_TX_PYLD_NOACK NRF24L01_WriteReg(NRF24L01_1D_FEATURE, 0x01); // Set feature bits off and enable the command NRF24L01_B0_TX_PYLD_NOACK
NRF24L01_Activate(0x73);
*/
NRF24L01_SetPower(); NRF24L01_SetPower();
NRF24L01_SetTxRxMode(TX_EN); // Clear data ready, data sent, retransmit and enable CRC 16bits, ready for TX NRF24L01_SetTxRxMode(TX_EN); // Clear data ready, data sent, retransmit and enable CRC 16bits, ready for TX
} }
@ -134,13 +130,13 @@ static uint8_t NRF24L01_GetDynamicPayloadSize()
return len; return len;
} }
void NRF24L01_Activate(uint8_t code) /*void NRF24L01_Activate(uint8_t code)
{ {
NRF_CSN_off; NRF_CSN_off;
SPI_Write(ACTIVATE); SPI_Write(ACTIVATE);
SPI_Write(code); SPI_Write(code);
NRF_CSN_on; NRF_CSN_on;
} }*/
void NRF24L01_SetBitrate(uint8_t bitrate) void NRF24L01_SetBitrate(uint8_t bitrate)
{ {
@ -234,13 +230,6 @@ void NRF24L01_SetTxRxMode(enum TXRX_State mode)
void NRF24L01_Reset() void NRF24L01_Reset()
{ {
//** not in deviation but needed to hot switch between models
NRF24L01_Activate(0x73); // Activate feature register
NRF24L01_WriteReg(NRF24L01_1C_DYNPD, 0x00); // Disable dynamic payload length on all pipes
NRF24L01_WriteReg(NRF24L01_1D_FEATURE, 0x01); // Set feature bits off
NRF24L01_Activate(0x73);
//**
NRF24L01_FlushTx(); NRF24L01_FlushTx();
NRF24L01_FlushRx(); NRF24L01_FlushRx();
NRF24L01_Strobe(0xff); // NOP NRF24L01_Strobe(0xff); // NOP

View File

@ -91,15 +91,15 @@ static void __attribute__((unused)) POTENSIC_initialize_txid()
uint16_t POTENSIC_callback() uint16_t POTENSIC_callback()
{ {
if(IS_BIND_IN_PROGRESS) #ifdef MULTI_SYNC
telemetry_set_input_sync(POTENSIC_PACKET_PERIOD);
#endif
if(bind_counter)
if(--bind_counter==0) if(--bind_counter==0)
{ {
BIND_DONE; BIND_DONE;
XN297_SetTXAddr(rx_tx_addr,5); XN297_SetTXAddr(rx_tx_addr,5);
} }
#ifdef MULTI_SYNC
telemetry_set_input_sync(POTENSIC_PACKET_PERIOD);
#endif
POTENSIC_send_packet(); POTENSIC_send_packet();
return POTENSIC_PACKET_PERIOD; return POTENSIC_PACKET_PERIOD;
} }

View File

@ -160,16 +160,16 @@ static void __attribute__((unused)) PROPEL_RF_init()
NRF24L01_Initialize(); NRF24L01_Initialize();
NRF24L01_WriteReg(NRF24L01_00_CONFIG, 0x7f); NRF24L01_WriteReg(NRF24L01_00_CONFIG, 0x7f);
NRF24L01_WriteReg(NRF24L01_01_EN_AA, 0x3f); // AA on all pipes NRF24L01_WriteReg(NRF24L01_01_EN_AA, 0x3f); // AA on all pipes
NRF24L01_WriteReg(NRF24L01_02_EN_RXADDR, 0x3f); // Enable all pipes NRF24L01_WriteReg(NRF24L01_02_EN_RXADDR, 0x3f); // Enable all pipes
NRF24L01_WriteReg(NRF24L01_04_SETUP_RETR, 0x36); // retransmit 1ms, 6 times NRF24L01_WriteReg(NRF24L01_04_SETUP_RETR, 0x36); // retransmit 1ms, 6 times
NRF24L01_WriteRegisterMulti(NRF24L01_0A_RX_ADDR_P0, (uint8_t *)"\x99\x77\x55\x33\x11", PROPEL_ADDRESS_LENGTH); //Bind address NRF24L01_WriteRegisterMulti(NRF24L01_0A_RX_ADDR_P0, (uint8_t *)"\x99\x77\x55\x33\x11", PROPEL_ADDRESS_LENGTH); //Bind address
NRF24L01_WriteRegisterMulti(NRF24L01_10_TX_ADDR, (uint8_t *)"\x99\x77\x55\x33\x11", PROPEL_ADDRESS_LENGTH); //Bind address NRF24L01_WriteRegisterMulti(NRF24L01_10_TX_ADDR, (uint8_t *)"\x99\x77\x55\x33\x11", PROPEL_ADDRESS_LENGTH); //Bind address
NRF24L01_WriteReg(NRF24L01_05_RF_CH, PROPEL_BIND_RF_CHANNEL); NRF24L01_WriteReg(NRF24L01_05_RF_CH, PROPEL_BIND_RF_CHANNEL);
NRF24L01_Activate(0x73); // Activate feature register NRF24L01_WriteReg(NRF24L01_1C_DYNPD, 0x3f); // Enable dynamic payload length
NRF24L01_WriteReg(NRF24L01_1C_DYNPD, 0x3f); // Enable dynamic payload length NRF24L01_WriteReg(NRF24L01_1D_FEATURE, 0x07); // Enable all features
NRF24L01_WriteReg(NRF24L01_1D_FEATURE, 0x07); // Enable all features
NRF24L01_Activate(0x73); // Activate feature register NRF24L01_SetTxRxMode(TX_EN); // Clear data ready, data sent, retransmit and enable CRC 16bits, ready for TX
} }
const uint8_t PROGMEM PROPEL_hopping []= { 0x47,0x36,0x27,0x44,0x33,0x0D,0x3C,0x2E,0x1B,0x39,0x2A,0x18 }; const uint8_t PROGMEM PROPEL_hopping []= { 0x47,0x36,0x27,0x44,0x33,0x0D,0x3C,0x2E,0x1B,0x39,0x2A,0x18 };

View File

@ -174,10 +174,10 @@ static uint8_t __attribute__((unused)) cx35_lastButton()
return command; return command;
} }
static void __attribute__((unused)) Q303_send_packet(uint8_t bind) static void __attribute__((unused)) Q303_send_packet()
{ {
uint16_t aileron, elevator, throttle, rudder, slider; uint16_t aileron, elevator, throttle, rudder, slider;
if(bind) if(IS_BIND_IN_PROGRESS)
{ {
packet[0] = 0xaa; packet[0] = 0xaa;
memcpy(&packet[1], rx_tx_addr + 1, 4); memcpy(&packet[1], rx_tx_addr + 1, 4);
@ -270,7 +270,7 @@ static void __attribute__((unused)) Q303_send_packet(uint8_t bind)
// Power on, TX mode, CRC enabled // Power on, TX mode, CRC enabled
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));
NRF24L01_WriteReg(NRF24L01_05_RF_CH, bind ? Q303_RF_BIND_CHANNEL : hopping_frequency[hopping_frequency_no++]); NRF24L01_WriteReg(NRF24L01_05_RF_CH, IS_BIND_IN_PROGRESS ? Q303_RF_BIND_CHANNEL : hopping_frequency[hopping_frequency_no++]);
hopping_frequency_no %= rf_ch_num; hopping_frequency_no %= rf_ch_num;
NRF24L01_WriteReg(NRF24L01_07_STATUS, 0x70); NRF24L01_WriteReg(NRF24L01_07_STATUS, 0x70);
@ -334,27 +334,20 @@ static void __attribute__((unused)) Q303_initialize_txid()
uint16_t Q303_callback() uint16_t Q303_callback()
{ {
if(IS_BIND_DONE) #ifdef MULTI_SYNC
{ telemetry_set_input_sync(packet_period);
#ifdef MULTI_SYNC #endif
telemetry_set_input_sync(packet_period); if(bind_counter)
#endif
Q303_send_packet(0);
}
else
{ {
bind_counter--;
if (bind_counter == 0) if (bind_counter == 0)
{ {
XN297_SetTXAddr(rx_tx_addr, 5); XN297_SetTXAddr(rx_tx_addr, 5);
packet_count = 0; packet_count = 0;
BIND_DONE; BIND_DONE;
} }
else
{
Q303_send_packet(1);
bind_counter--;
}
} }
Q303_send_packet();
return packet_period; return packet_period;
} }

View File

@ -147,7 +147,7 @@ uint16_t Q90C_callback()
#ifdef MULTI_SYNC #ifdef MULTI_SYNC
telemetry_set_input_sync(Q90C_PACKET_PERIOD); telemetry_set_input_sync(Q90C_PACKET_PERIOD);
#endif #endif
if(IS_BIND_IN_PROGRESS) if(bind_counter)
if(--bind_counter==0) if(--bind_counter==0)
{ {
BIND_DONE; BIND_DONE;

View File

@ -120,7 +120,7 @@ uint16_t TIGER_callback()
#ifdef MULTI_SYNC #ifdef MULTI_SYNC
telemetry_set_input_sync(TIGER_PACKET_PERIOD); telemetry_set_input_sync(TIGER_PACKET_PERIOD);
#endif #endif
if(IS_BIND_IN_PROGRESS) if(bind_counter)
if(--bind_counter==0) if(--bind_counter==0)
{ {
BIND_DONE; BIND_DONE;

View File

@ -225,8 +225,7 @@ uint16_t V2X2_callback()
#ifdef MULTI_SYNC #ifdef MULTI_SYNC
telemetry_set_input_sync(V2X2_PACKET_PERIOD); telemetry_set_input_sync(V2X2_PACKET_PERIOD);
#endif #endif
V2X2_send_packet(); if(bind_counter)
if(IS_BIND_IN_PROGRESS)
{ {
if (--bind_counter == 0) if (--bind_counter == 0)
{ {
@ -241,6 +240,7 @@ uint16_t V2X2_callback()
hopping_frequency_no = 0; hopping_frequency_no = 0;
} }
} }
V2X2_send_packet();
// Packet every 4ms // Packet every 4ms
return V2X2_PACKET_PERIOD; return V2X2_PACKET_PERIOD;
} }

View File

@ -35,9 +35,9 @@
// flags going to packet[2] // flags going to packet[2]
#define V911S_FLAG_CALIB 0x01 #define V911S_FLAG_CALIB 0x01
static void __attribute__((unused)) V911S_send_packet(uint8_t bind) static void __attribute__((unused)) V911S_send_packet()
{ {
if(bind) if(IS_BIND_IN_PROGRESS)
{ {
packet[0] = 0x42; packet[0] = 0x42;
packet[1] = 0x4E; packet[1] = 0x4E;
@ -104,7 +104,7 @@ static void __attribute__((unused)) V911S_send_packet(uint8_t bind)
if(sub_protocol==V911S_STD) if(sub_protocol==V911S_STD)
XN297L_WritePayload(packet, V911S_PACKET_SIZE); XN297L_WritePayload(packet, V911S_PACKET_SIZE);
else else
XN297L_WriteEnhancedPayload(packet, V911S_PACKET_SIZE, bind?0:1); XN297L_WriteEnhancedPayload(packet, V911S_PACKET_SIZE, IS_BIND_IN_PROGRESS?0:1);
XN297L_SetPower(); // Set tx_power XN297L_SetPower(); // Set tx_power
XN297L_SetFreqOffset(); // Set frequency offset XN297L_SetFreqOffset(); // Set frequency offset
@ -135,29 +135,22 @@ static void __attribute__((unused)) V911S_initialize_txid()
uint16_t V911S_callback() uint16_t V911S_callback()
{ {
if(IS_BIND_DONE) #ifdef MULTI_SYNC
{ telemetry_set_input_sync(V911S_PACKET_PERIOD);
#ifdef MULTI_SYNC #endif
telemetry_set_input_sync(V911S_PACKET_PERIOD); if(bind_counter)
#endif
V911S_send_packet(0);
}
else
{ {
bind_counter--;
if (bind_counter == 0) if (bind_counter == 0)
{ {
BIND_DONE; BIND_DONE;
XN297_SetTXAddr(rx_tx_addr, 5); XN297_SetTXAddr(rx_tx_addr, 5);
packet_period=V911S_PACKET_PERIOD; packet_period=V911S_PACKET_PERIOD;
} }
else else if(bind_counter==100) // same as original TX...
{ packet_period=V911S_BIND_PACKET_PERIOD*3;
V911S_send_packet(1);
bind_counter--;
if(bind_counter==100) // same as original TX...
packet_period=V911S_BIND_PACKET_PERIOD*3;
}
} }
V911S_send_packet();
return packet_period; return packet_period;
} }

View File

@ -200,7 +200,7 @@ uint16_t XK_callback()
#ifdef MULTI_SYNC #ifdef MULTI_SYNC
telemetry_set_input_sync(XK_PACKET_PERIOD); telemetry_set_input_sync(XK_PACKET_PERIOD);
#endif #endif
if(IS_BIND_IN_PROGRESS) if(bind_counter)
if(--bind_counter==0) if(--bind_counter==0)
{ {
BIND_DONE; BIND_DONE;

View File

@ -43,11 +43,6 @@ static void __attribute__((unused)) XN297Dump_RF_init()
NRF24L01_Initialize(); NRF24L01_Initialize();
NRF24L01_SetTxRxMode(RX_EN); NRF24L01_SetTxRxMode(RX_EN);
NRF24L01_FlushTx();
NRF24L01_FlushRx();
NRF24L01_WriteReg(NRF24L01_07_STATUS, 0x70); // Clear data ready, data sent, and retransmit
NRF24L01_WriteReg(NRF24L01_01_EN_AA, 0x00); // No Auto Acknowledgment on all data pipes
NRF24L01_WriteReg(NRF24L01_02_EN_RXADDR, 0x01); // Enable data pipe 0 only
NRF24L01_WriteReg(NRF24L01_03_SETUP_AW, 0x01); // 3 bytes RX/TX address NRF24L01_WriteReg(NRF24L01_03_SETUP_AW, 0x01); // 3 bytes RX/TX address
NRF24L01_WriteRegisterMulti(NRF24L01_0A_RX_ADDR_P0, (uint8_t*)"\x55\x0F\x71", 3); // set up RX address to xn297 preamble NRF24L01_WriteRegisterMulti(NRF24L01_0A_RX_ADDR_P0, (uint8_t*)"\x55\x0F\x71", 3); // set up RX address to xn297 preamble
NRF24L01_WriteReg(NRF24L01_11_RX_PW_P0, XN297DUMP_MAX_PACKET_LEN); // Enable rx pipe 0 NRF24L01_WriteReg(NRF24L01_11_RX_PW_P0, XN297DUMP_MAX_PACKET_LEN); // Enable rx pipe 0
@ -69,11 +64,6 @@ static void __attribute__((unused)) XN297Dump_RF_init()
break; break;
} }
NRF24L01_Activate(0x73); // Activate feature register
NRF24L01_WriteReg(NRF24L01_1C_DYNPD, 0x00); // Disable dynamic payload length on all pipes
NRF24L01_WriteReg(NRF24L01_1D_FEATURE, 0x01);
NRF24L01_Activate(0x73);
NRF24L01_SetPower();
} }
static boolean __attribute__((unused)) XN297Dump_process_packet(void) static boolean __attribute__((unused)) XN297Dump_process_packet(void)
@ -636,11 +626,6 @@ static uint16_t XN297Dump_callback()
NRF24L01_Initialize(); NRF24L01_Initialize();
NRF24L01_SetTxRxMode(TXRX_OFF); NRF24L01_SetTxRxMode(TXRX_OFF);
NRF24L01_SetTxRxMode(RX_EN); NRF24L01_SetTxRxMode(RX_EN);
NRF24L01_FlushTx();
NRF24L01_FlushRx();
NRF24L01_WriteReg(NRF24L01_07_STATUS, 0x70); // Clear data ready, data sent, and retransmit
NRF24L01_WriteReg(NRF24L01_01_EN_AA, 0x00); // No Auto Acknowledgment on all data pipes
NRF24L01_WriteReg(NRF24L01_02_EN_RXADDR, 0x01); // Enable data pipe 0 only
NRF24L01_WriteReg(NRF24L01_03_SETUP_AW, address_length-2); // RX/TX address length NRF24L01_WriteReg(NRF24L01_03_SETUP_AW, address_length-2); // RX/TX address length
NRF24L01_WriteRegisterMulti(NRF24L01_0A_RX_ADDR_P0, rx_tx_addr, address_length); // set up RX address NRF24L01_WriteRegisterMulti(NRF24L01_0A_RX_ADDR_P0, rx_tx_addr, address_length); // set up RX address
NRF24L01_WriteReg(NRF24L01_11_RX_PW_P0, packet_length); // Enable rx pipe 0 NRF24L01_WriteReg(NRF24L01_11_RX_PW_P0, packet_length); // Enable rx pipe 0
@ -663,11 +648,6 @@ static uint16_t XN297Dump_callback()
break; break;
} }
NRF24L01_Activate(0x73); // Activate feature register
NRF24L01_WriteReg(NRF24L01_1C_DYNPD, 0x00); // Disable dynamic payload length on all pipes
NRF24L01_WriteReg(NRF24L01_1D_FEATURE, 0x01);
NRF24L01_Activate(0x73);
NRF24L01_SetPower();
NRF24L01_WriteReg(NRF24L01_00_CONFIG, _BV(NRF24L01_00_PWR_UP) | _BV(NRF24L01_00_PRIM_RX)); //_BV(NRF24L01_00_EN_CRC) | _BV(NRF24L01_00_CRCO) | NRF24L01_WriteReg(NRF24L01_00_CONFIG, _BV(NRF24L01_00_PWR_UP) | _BV(NRF24L01_00_PRIM_RX)); //_BV(NRF24L01_00_EN_CRC) | _BV(NRF24L01_00_CRCO) |
phase++; phase++;
} }

View File

@ -127,10 +127,8 @@ static void __attribute__((unused)) YD717_RF_init()
NRF24L01_WriteReg(NRF24L01_04_SETUP_RETR, 0x1A); // 500uS retransmit t/o, 10 tries NRF24L01_WriteReg(NRF24L01_04_SETUP_RETR, 0x1A); // 500uS retransmit t/o, 10 tries
NRF24L01_WriteReg(NRF24L01_05_RF_CH, YD717_RF_CHANNEL); // Channel 3C NRF24L01_WriteReg(NRF24L01_05_RF_CH, YD717_RF_CHANNEL); // Channel 3C
NRF24L01_Activate(0x73); // Activate feature register
NRF24L01_WriteReg(NRF24L01_1C_DYNPD, 0x3F); // Enable dynamic payload length on all pipes NRF24L01_WriteReg(NRF24L01_1C_DYNPD, 0x3F); // Enable dynamic payload length on all pipes
NRF24L01_WriteReg(NRF24L01_1D_FEATURE, 0x07); // Set feature bits on NRF24L01_WriteReg(NRF24L01_1D_FEATURE, 0x07); // Set feature bits on
NRF24L01_Activate(0x73);
// for bind packets set address to prearranged value known to receiver // for bind packets set address to prearranged value known to receiver
uint8_t bind_rx_tx_addr[5]; uint8_t bind_rx_tx_addr[5];
@ -144,26 +142,24 @@ static void __attribute__((unused)) YD717_RF_init()
bind_rx_tx_addr[i] = 0x60 + offset; bind_rx_tx_addr[i] = 0x60 + offset;
NRF24L01_WriteRegisterMulti(NRF24L01_10_TX_ADDR, bind_rx_tx_addr, 5); NRF24L01_WriteRegisterMulti(NRF24L01_10_TX_ADDR, bind_rx_tx_addr, 5);
NRF24L01_WriteRegisterMulti(NRF24L01_0A_RX_ADDR_P0, bind_rx_tx_addr, 5); NRF24L01_WriteRegisterMulti(NRF24L01_0A_RX_ADDR_P0, bind_rx_tx_addr, 5);
NRF24L01_WriteReg(NRF24L01_00_CONFIG, _BV(NRF24L01_00_EN_CRC) | _BV(NRF24L01_00_PWR_UP));
} }
uint16_t YD717_callback() uint16_t YD717_callback()
{ {
#ifdef MULTI_SYNC
telemetry_set_input_sync(YD717_PACKET_PERIOD);
#endif
if (bind_counter) if (bind_counter)
{ if(--bind_counter==0)
bind_counter--;
if(bind_counter==0)
{ {
NRF24L01_WriteRegisterMulti(NRF24L01_10_TX_ADDR, rx_tx_addr, 5); // set address NRF24L01_WriteRegisterMulti(NRF24L01_10_TX_ADDR, rx_tx_addr, 5); // set address
NRF24L01_WriteRegisterMulti(NRF24L01_0A_RX_ADDR_P0, rx_tx_addr, 5); NRF24L01_WriteRegisterMulti(NRF24L01_0A_RX_ADDR_P0, rx_tx_addr, 5);
BIND_DONE; // bind complete BIND_DONE; // bind complete
} }
}
else
#ifdef MULTI_SYNC
telemetry_set_input_sync(YD717_PACKET_PERIOD);
#endif
YD717_send_packet(); YD717_send_packet();
return YD717_PACKET_PERIOD; // Packet every 8ms return YD717_PACKET_PERIOD; // Packet every 8ms
} }
void YD717_init() void YD717_init()

View File

@ -76,7 +76,7 @@ uint16_t ZSX_callback()
#ifdef MULTI_SYNC #ifdef MULTI_SYNC
telemetry_set_input_sync(ZSX_PACKET_PERIOD); telemetry_set_input_sync(ZSX_PACKET_PERIOD);
#endif #endif
if(IS_BIND_IN_PROGRESS) if(bind_counter)
if(--bind_counter==0) if(--bind_counter==0)
{ {
BIND_DONE; BIND_DONE;