SLT: use the CC2500 emulation layer if requested/available

This commit is contained in:
Pascal Langer 2020-02-17 11:45:28 +01:00
parent 73d7728e08
commit 5124c2a96d
2 changed files with 23 additions and 36 deletions

View File

@ -169,7 +169,7 @@ const mm_protocol_definition multi_protocols[] = {
{PROTO_SYMAX, STR_SYMAX, 2, STR_SUBTYPE_SYMAX, OPTION_NONE }, {PROTO_SYMAX, STR_SYMAX, 2, STR_SUBTYPE_SYMAX, OPTION_NONE },
#endif #endif
#if defined(SLT_NRF24L01_INO) #if defined(SLT_NRF24L01_INO)
{PROTO_SLT, STR_SLT, 5, STR_SUBTYPE_SLT, OPTION_NONE }, {PROTO_SLT, STR_SLT, 5, STR_SUBTYPE_SLT, OPTION_RFTUNE },
#endif #endif
#if defined(CX10_NRF24L01_INO) #if defined(CX10_NRF24L01_INO)
{PROTO_CX10, STR_CX10, 7, STR_SUBTYPE_CX10, OPTION_NONE }, {PROTO_CX10, STR_CX10, 7, STR_SUBTYPE_CX10, OPTION_NONE },

View File

@ -16,7 +16,7 @@
#if defined(SLT_NRF24L01_INO) #if defined(SLT_NRF24L01_INO)
#include "iface_nrf24l01.h" #include "iface_nrf250k.h"
//#define SLT_Q200_FORCE_ID //#define SLT_Q200_FORCE_ID
@ -25,6 +25,7 @@
#define SLT_PAYLOADSIZE_V2 11 #define SLT_PAYLOADSIZE_V2 11
#define SLT_NFREQCHANNELS 15 #define SLT_NFREQCHANNELS 15
#define SLT_TXID_SIZE 4 #define SLT_TXID_SIZE 4
#define SLT_BIND_CHANNEL 0x50
enum{ enum{
// flags going to packet[6] (Q200) // flags going to packet[6] (Q200)
@ -53,25 +54,8 @@ enum {
static void __attribute__((unused)) SLT_init() static void __attribute__((unused)) SLT_init()
{ {
NRF24L01_Initialize(); NRF250K_Init();
NRF24L01_WriteReg(NRF24L01_00_CONFIG, _BV(NRF24L01_00_EN_CRC) | _BV(NRF24L01_00_CRCO)); // 2-bytes CRC, radio off NRF250K_SetTXAddr(rx_tx_addr, SLT_TXID_SIZE);
NRF24L01_WriteReg(NRF24L01_01_EN_AA, 0x00); // No Auto Acknoledgement
NRF24L01_WriteReg(NRF24L01_02_EN_RXADDR, 0x01); // Enable data pipe 0
NRF24L01_WriteReg(NRF24L01_03_SETUP_AW, 0x02); // 4-byte RX/TX address
NRF24L01_WriteReg(NRF24L01_04_SETUP_RETR, 0x00); // Disable auto retransmit
NRF24L01_WriteReg(NRF24L01_07_STATUS, 0x70); // Clear data ready, data sent, and retransmit
NRF24L01_WriteReg(NRF24L01_11_RX_PW_P0, 4); // bytes of data payload for pipe 1
NRF24L01_SetBitrate(NRF24L01_BR_250K); // 256kbps
NRF24L01_SetPower();
if(sub_protocol==SLT_V1)
NRF24L01_WriteRegisterMulti(NRF24L01_0A_RX_ADDR_P0, (uint8_t*)"\xC3\xC3\xAA\x55", SLT_TXID_SIZE);
else // V2
NRF24L01_WriteRegisterMulti(NRF24L01_0A_RX_ADDR_P0, (uint8_t*)"\x7E\xB8\x63\xA9", SLT_TXID_SIZE);
NRF24L01_FlushRx();
NRF24L01_WriteRegisterMulti(NRF24L01_10_TX_ADDR, rx_tx_addr, SLT_TXID_SIZE);
NRF24L01_FlushTx();
// Turn radio power on
NRF24L01_SetTxRxMode(TX_EN);
} }
static void __attribute__((unused)) SLT_set_freq(void) static void __attribute__((unused)) SLT_set_freq(void)
@ -109,21 +93,25 @@ static void __attribute__((unused)) SLT_set_freq(void)
} }
} }
} }
//Bind channel
hopping_frequency[SLT_NFREQCHANNELS]=SLT_BIND_CHANNEL;
//Calib all channels
NRF250K_HoppingCalib(SLT_NFREQCHANNELS+1);
} }
static void __attribute__((unused)) SLT_wait_radio() static void __attribute__((unused)) SLT_wait_radio()
{ {
if (packet_sent) if (packet_sent)
while (!(NRF24L01_ReadReg(NRF24L01_07_STATUS) & _BV(NRF24L01_07_TX_DS))); while (!NRF250K_IsPacketSent());
packet_sent = 0; packet_sent = 0;
} }
static void __attribute__((unused)) SLT_send_packet(uint8_t len) static void __attribute__((unused)) SLT_send_packet(uint8_t len)
{ {
SLT_wait_radio(); SLT_wait_radio();
NRF24L01_FlushTx(); NRF250K_WritePayload(packet, len);
NRF24L01_WriteReg(NRF24L01_07_STATUS, _BV(NRF24L01_07_TX_DS) | _BV(NRF24L01_07_RX_DR) | _BV(NRF24L01_07_MAX_RT));
NRF24L01_WritePayload(packet, len);
packet_sent = 1; packet_sent = 1;
} }
@ -132,7 +120,7 @@ static void __attribute__((unused)) SLT_build_packet()
static uint8_t calib_counter=0; static uint8_t calib_counter=0;
// Set radio channel - once per packet batch // Set radio channel - once per packet batch
NRF24L01_WriteReg(NRF24L01_05_RF_CH, hopping_frequency[hopping_frequency_no]); NRF250K_Hopping(hopping_frequency_no);
if (++hopping_frequency_no >= SLT_NFREQCHANNELS) if (++hopping_frequency_no >= SLT_NFREQCHANNELS)
hopping_frequency_no = 0; hopping_frequency_no = 0;
@ -183,23 +171,22 @@ static void __attribute__((unused)) SLT_build_packet()
static void __attribute__((unused)) SLT_send_bind_packet() static void __attribute__((unused)) SLT_send_bind_packet()
{ {
SLT_wait_radio(); SLT_wait_radio();
BIND_IN_PROGRESS; //Limit TX power to bind level NRF250K_Hopping(SLT_NFREQCHANNELS); //Bind channel
NRF24L01_SetPower(); BIND_IN_PROGRESS; //Limit TX power to bind level
NRF250K_SetPower();
BIND_DONE; BIND_DONE;
NRF24L01_WriteRegisterMulti(NRF24L01_10_TX_ADDR, (uint8_t *)"\x7E\xB8\x63\xA9", SLT_TXID_SIZE); NRF250K_SetTXAddr((uint8_t *)"\x7E\xB8\x63\xA9", SLT_TXID_SIZE);
NRF24L01_WriteReg(NRF24L01_05_RF_CH, 0x50);
memcpy((void*)packet,(void*)rx_tx_addr,SLT_TXID_SIZE); memcpy((void*)packet,(void*)rx_tx_addr,SLT_TXID_SIZE);
if(phase==SLT_BIND2) if(phase==SLT_BIND2)
SLT_send_packet(SLT_TXID_SIZE); SLT_send_packet(SLT_TXID_SIZE);
else // SLT_BIND1 else // SLT_BIND1
SLT_send_packet(SLT_PAYLOADSIZE_V2); SLT_send_packet(SLT_PAYLOADSIZE_V2);
SLT_wait_radio(); //Wait until the packet's sent before changing TX address! SLT_wait_radio(); //Wait until the packet's sent before changing TX address!
NRF24L01_SetPower(); //Change power back to normal level NRF250K_SetPower(); //Change power back to normal level
if(phase==SLT_BIND2) // after V1 bind and V2 second bind packet if(phase==SLT_BIND2) //After V1 bind and V2 second bind packet
NRF24L01_WriteRegisterMulti(NRF24L01_10_TX_ADDR, rx_tx_addr, SLT_TXID_SIZE); NRF250K_SetTXAddr(rx_tx_addr, SLT_TXID_SIZE);
} }
#define SLT_TIMING_BUILD 1000 #define SLT_TIMING_BUILD 1000
@ -253,7 +240,7 @@ uint16_t SLT_callback()
} }
else else
{// Continue to send normal packets {// Continue to send normal packets
NRF24L01_SetPower(); // Set tx_power NRF250K_SetPower(); // Set tx_power
phase = SLT_BUILD; phase = SLT_BUILD;
if(sub_protocol==SLT_V1) if(sub_protocol==SLT_V1)
return 20000-SLT_TIMING_BUILD; return 20000-SLT_TIMING_BUILD;