diff --git a/Multiprotocol/Multi_Names.ino b/Multiprotocol/Multi_Names.ino index 35d67ae..2844e9d 100644 --- a/Multiprotocol/Multi_Names.ino +++ b/Multiprotocol/Multi_Names.ino @@ -169,7 +169,7 @@ const mm_protocol_definition multi_protocols[] = { {PROTO_SYMAX, STR_SYMAX, 2, STR_SUBTYPE_SYMAX, OPTION_NONE }, #endif #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 #if defined(CX10_NRF24L01_INO) {PROTO_CX10, STR_CX10, 7, STR_SUBTYPE_CX10, OPTION_NONE }, diff --git a/Multiprotocol/SLT_nrf24l01.ino b/Multiprotocol/SLT_nrf24l01.ino index 924aaaa..066caa6 100644 --- a/Multiprotocol/SLT_nrf24l01.ino +++ b/Multiprotocol/SLT_nrf24l01.ino @@ -16,7 +16,7 @@ #if defined(SLT_NRF24L01_INO) -#include "iface_nrf24l01.h" +#include "iface_nrf250k.h" //#define SLT_Q200_FORCE_ID @@ -25,6 +25,7 @@ #define SLT_PAYLOADSIZE_V2 11 #define SLT_NFREQCHANNELS 15 #define SLT_TXID_SIZE 4 +#define SLT_BIND_CHANNEL 0x50 enum{ // flags going to packet[6] (Q200) @@ -53,25 +54,8 @@ enum { static void __attribute__((unused)) SLT_init() { - NRF24L01_Initialize(); - NRF24L01_WriteReg(NRF24L01_00_CONFIG, _BV(NRF24L01_00_EN_CRC) | _BV(NRF24L01_00_CRCO)); // 2-bytes CRC, radio off - 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); + NRF250K_Init(); + NRF250K_SetTXAddr(rx_tx_addr, SLT_TXID_SIZE); } 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() { if (packet_sent) - while (!(NRF24L01_ReadReg(NRF24L01_07_STATUS) & _BV(NRF24L01_07_TX_DS))); + while (!NRF250K_IsPacketSent()); packet_sent = 0; } static void __attribute__((unused)) SLT_send_packet(uint8_t len) { SLT_wait_radio(); - NRF24L01_FlushTx(); - NRF24L01_WriteReg(NRF24L01_07_STATUS, _BV(NRF24L01_07_TX_DS) | _BV(NRF24L01_07_RX_DR) | _BV(NRF24L01_07_MAX_RT)); - NRF24L01_WritePayload(packet, len); + NRF250K_WritePayload(packet, len); packet_sent = 1; } @@ -132,7 +120,7 @@ static void __attribute__((unused)) SLT_build_packet() static uint8_t calib_counter=0; // 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) hopping_frequency_no = 0; @@ -183,23 +171,22 @@ static void __attribute__((unused)) SLT_build_packet() static void __attribute__((unused)) SLT_send_bind_packet() { SLT_wait_radio(); - BIND_IN_PROGRESS; //Limit TX power to bind level - NRF24L01_SetPower(); + NRF250K_Hopping(SLT_NFREQCHANNELS); //Bind channel + BIND_IN_PROGRESS; //Limit TX power to bind level + NRF250K_SetPower(); BIND_DONE; - NRF24L01_WriteRegisterMulti(NRF24L01_10_TX_ADDR, (uint8_t *)"\x7E\xB8\x63\xA9", SLT_TXID_SIZE); - - NRF24L01_WriteReg(NRF24L01_05_RF_CH, 0x50); + NRF250K_SetTXAddr((uint8_t *)"\x7E\xB8\x63\xA9", SLT_TXID_SIZE); memcpy((void*)packet,(void*)rx_tx_addr,SLT_TXID_SIZE); if(phase==SLT_BIND2) SLT_send_packet(SLT_TXID_SIZE); else // SLT_BIND1 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 - 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_SetPower(); //Change power back to normal level + if(phase==SLT_BIND2) //After V1 bind and V2 second bind packet + NRF250K_SetTXAddr(rx_tx_addr, SLT_TXID_SIZE); } #define SLT_TIMING_BUILD 1000 @@ -253,7 +240,7 @@ uint16_t SLT_callback() } else {// Continue to send normal packets - NRF24L01_SetPower(); // Set tx_power + NRF250K_SetPower(); // Set tx_power phase = SLT_BUILD; if(sub_protocol==SLT_V1) return 20000-SLT_TIMING_BUILD;