This commit is contained in:
pascallanger 2016-11-18 16:51:46 +01:00
parent 4f9f10ddf2
commit 683bdc838d

View File

@ -24,10 +24,11 @@
#define SLT_TXID_SIZE 4 #define SLT_TXID_SIZE 4
enum { enum {
SLT_BIND=0, SLT_BUILD=0,
SLT_DATA1, SLT_DATA1,
SLT_DATA2, SLT_DATA2,
SLT_DATA3 SLT_DATA3,
SLT_BIND
}; };
static void __attribute__((unused)) SLT_init() static void __attribute__((unused)) SLT_init()
@ -102,6 +103,11 @@ static void __attribute__((unused)) SLT_send_data(uint8_t *data, uint8_t len)
static void __attribute__((unused)) SLT_build_packet() static void __attribute__((unused)) SLT_build_packet()
{ {
// Set radio channel - once per packet batch
NRF24L01_WriteReg(NRF24L01_05_RF_CH, hopping_frequency[hopping_frequency_no]);
if (++hopping_frequency_no >= SLT_NFREQCHANNELS)
hopping_frequency_no = 0;
// aileron, elevator, throttle, rudder, gear, pitch // aileron, elevator, throttle, rudder, gear, pitch
uint8_t e = 0; // byte where extension 2 bits for every 10-bit channel are packed uint8_t e = 0; // byte where extension 2 bits for every 10-bit channel are packed
for (uint8_t i = 0; i < 4; ++i) for (uint8_t i = 0; i < 4; ++i)
@ -115,11 +121,6 @@ static void __attribute__((unused)) SLT_build_packet()
// 8-bit channels // 8-bit channels
packet[5] = convert_channel_8b(AUX1); packet[5] = convert_channel_8b(AUX1);
packet[6] = convert_channel_8b(AUX2); packet[6] = convert_channel_8b(AUX2);
// Set radio channel - once per packet batch
NRF24L01_WriteReg(NRF24L01_05_RF_CH, hopping_frequency[hopping_frequency_no]);
if (++hopping_frequency_no >= SLT_NFREQCHANNELS)
hopping_frequency_no = 0;
} }
static void __attribute__((unused)) SLT_send_bind_packet() static void __attribute__((unused)) SLT_send_bind_packet()
@ -128,13 +129,12 @@ static void __attribute__((unused)) SLT_send_bind_packet()
BIND_IN_PROGRESS; //Limit TX power to bind level BIND_IN_PROGRESS; //Limit TX power to bind level
NRF24L01_SetPower(); NRF24L01_SetPower();
BIND_DONE; BIND_DONE;
NRF24L01_WriteRegisterMulti(NRF24L01_10_TX_ADDR, (uint8_t *)"\x7E\xB8\x63\xA9", 4); NRF24L01_WriteRegisterMulti(NRF24L01_10_TX_ADDR, (uint8_t *)"\x7E\xB8\x63\xA9", SLT_TXID_SIZE);
NRF24L01_WriteReg(NRF24L01_05_RF_CH, 0x50); NRF24L01_WriteReg(NRF24L01_05_RF_CH, 0x50);
SLT_send_data(rx_tx_addr, SLT_TXID_SIZE); SLT_send_data(rx_tx_addr, SLT_TXID_SIZE);
// W²ait until the packet's sent before changing TX address! SLT_wait_radio(); //Wait until the packet's sent before changing TX address!
SLT_wait_radio();
NRF24L01_SetPower(); //Change power back to normal level NRF24L01_SetPower(); //Change power back to normal level
NRF24L01_WriteRegisterMulti(NRF24L01_10_TX_ADDR, rx_tx_addr, SLT_TXID_SIZE); NRF24L01_WriteRegisterMulti(NRF24L01_10_TX_ADDR, rx_tx_addr, SLT_TXID_SIZE);
@ -142,41 +142,40 @@ static void __attribute__((unused)) SLT_send_bind_packet()
uint16_t SLT_callback() uint16_t SLT_callback()
{ {
uint16_t delay_us = 20000; // 3 packets with 1ms intervals every 22ms
switch (phase) switch (phase)
{ {
case SLT_BIND: case SLT_BUILD:
SLT_send_bind_packet();
phase = SLT_DATA1;
delay_us = 19000;
break;
case SLT_DATA1:
SLT_build_packet(); SLT_build_packet();
phase++;
return 1000;
case SLT_DATA1:
SLT_send_data(packet, SLT_PAYLOADSIZE); SLT_send_data(packet, SLT_PAYLOADSIZE);
phase = SLT_DATA2; phase++;
delay_us = 1000; return 1000;
break;
case SLT_DATA2: case SLT_DATA2:
SLT_send_data(packet, SLT_PAYLOADSIZE); SLT_send_data(packet, SLT_PAYLOADSIZE);
phase = SLT_DATA3; phase++;
delay_us = 1000; return 1000;
break;
case SLT_DATA3: case SLT_DATA3:
SLT_send_data(packet, SLT_PAYLOADSIZE); SLT_send_data(packet, SLT_PAYLOADSIZE);
if (++packet_count >= 100) if (++packet_count >= 100)
{ {
packet_count = 0; packet_count = 0;
phase = SLT_BIND; phase++;
delay_us = 1000; return 1000;
} }
else else
{ {
NRF24L01_SetPower(); // Set tx_power NRF24L01_SetPower(); // Set tx_power
phase = SLT_DATA1; phase = SLT_BUILD;
return 19000;
} }
break; case SLT_BIND:
SLT_send_bind_packet();
phase = SLT_BUILD;
return 18000;
} }
return delay_us; return 19000;
} }
uint16_t initSLT() uint16_t initSLT()