diff --git a/Multiprotocol/SGF22_nrf24l01.ino b/Multiprotocol/SGF22_nrf24l01.ino index 6288165..8c7bd10 100644 --- a/Multiprotocol/SGF22_nrf24l01.ino +++ b/Multiprotocol/SGF22_nrf24l01.ino @@ -169,7 +169,7 @@ uint16_t SGF22_callback() } else {//send 3 times in total the same packet - NRF24L01_Strobe(REUSE_TX_PL); + XN297_ReSendPayload(); phase++; if(phase > 2) { diff --git a/Multiprotocol/UDIRC_ccnrf.ino b/Multiprotocol/UDIRC_ccnrf.ino index 8563742..b511e03 100644 --- a/Multiprotocol/UDIRC_ccnrf.ino +++ b/Multiprotocol/UDIRC_ccnrf.ino @@ -12,6 +12,8 @@ Multiprotocol is distributed in the hope that it will be useful, You should have received a copy of the GNU General Public License along with Multiprotocol. If not, see . */ +//Models: UDIRC UD160x(PRO), Pinecone Models SG-160x, Eachine EAT15 + #if defined(UDIRC_CCNRF_INO) #include "iface_xn297.h" @@ -60,8 +62,8 @@ static void __attribute__((unused)) UDIRC_send_packet() if(!bind_counter) {//Normal packet[0] = 0x08; - //Channels ST/TH/CH4 /CH3 /UNK/UNK/UNK/UNK/GYRO/ST_TRIM/ST_DR - //Channels ST/TH/RATE/LIGHT/UNK/UNK/UNK/UNK/GYRO/ST_TRIM/ST_DR + //Channels SG-16xx: ST/TH/CH4 /CH3 /UNK/UNK/UNK/UNK/GYRO/ST_TRIM/ST_DR + //Channels EAT15 : ST/TH/RATE/LIGHT/UNK/UNK/UNK/UNK/GYRO/ST_TRIM/ST_DR for(uint8_t i=0; i<9; i++) packet[i+1] = convert_channel_16b_limit(i,0,200); //Just for now let's set the additional channels to 0 @@ -152,7 +154,7 @@ uint16_t UDIRC_callback() return UDIRC_P1_P2_TIME; case UDIRC_DATA2: //Resend packet - NRF24L01_Strobe(NRF24L01_E3_REUSE_TX_PL); + XN297_ReSendPayload(); phase++; return UDIRC_WRITE_TIME; default: //UDIRC_RX diff --git a/Multiprotocol/XN297_EMU.ino b/Multiprotocol/XN297_EMU.ino index 5edb30c..c0565c2 100644 --- a/Multiprotocol/XN297_EMU.ino +++ b/Multiprotocol/XN297_EMU.ino @@ -207,6 +207,27 @@ static void __attribute__((unused)) XN297_SetTxRxMode(enum TXRX_State mode) #endif } +#ifdef CC2500_INSTALLED +uint8_t XN297_Buffer[32]; +uint8_t XN297_Buffer_Len = 0; + +static void __attribute__((unused)) XN297_SendCC2500Payload() +{ + // stop TX/RX + CC2500_Strobe(CC2500_SIDLE); + // flush tx FIFO + CC2500_Strobe(CC2500_SFTX); + // packet length + CC2500_WriteReg(CC2500_06_PKTLEN, XN297_Buffer_Len + 4); // Packet len, fix packet len + // xn297L preamble + CC2500_WriteRegisterMulti(CC2500_3F_TXFIFO, (uint8_t*)"\x0C\x71\x0F\x55", 4); + // xn297 packet + CC2500_WriteRegisterMulti(CC2500_3F_TXFIFO, XN297_Buffer, XN297_Buffer_Len); + // transmit + CC2500_Strobe(CC2500_STX); +} +#endif + static void __attribute__((unused)) XN297_SendPayload(uint8_t* msg, uint8_t len) { #ifdef NRF24L01_INSTALLED @@ -220,22 +241,25 @@ static void __attribute__((unused)) XN297_SendPayload(uint8_t* msg, uint8_t len) #ifdef CC2500_INSTALLED if(xn297_rf == XN297_CC2500) { - // stop TX/RX - CC2500_Strobe(CC2500_SIDLE); - // flush tx FIFO - CC2500_Strobe(CC2500_SFTX); - // packet length - CC2500_WriteReg(CC2500_06_PKTLEN, len + 4); // Packet len, fix packet len - // xn297L preamble - CC2500_WriteRegisterMulti(CC2500_3F_TXFIFO, (uint8_t*)"\x0C\x71\x0F\x55", 4); - // xn297 packet - CC2500_WriteRegisterMulti(CC2500_3F_TXFIFO, msg, len); - // transmit - CC2500_Strobe(CC2500_STX); + memcpy(XN297_Buffer, msg, len); + XN297_Buffer_Len = len; + XN297_SendCC2500Payload(); } #endif } +static void __attribute__((unused)) XN297_ReSendPayload() +{ + #ifdef NRF24L01_INSTALLED + if(xn297_rf == XN297_NRF) + NRF24L01_Strobe(NRF24L01_E3_REUSE_TX_PL); + #endif + #ifdef CC2500_INSTALLED + if(xn297_rf == XN297_CC2500) + XN297_SendCC2500Payload(); + #endif +} + static void __attribute__((unused)) XN297_WritePayload(uint8_t* msg, uint8_t len) { uint8_t buf[32]; diff --git a/Multiprotocol/iface_xn297.h b/Multiprotocol/iface_xn297.h index 4d65e1a..0be2d81 100644 --- a/Multiprotocol/iface_xn297.h +++ b/Multiprotocol/iface_xn297.h @@ -28,6 +28,7 @@ static void __attribute__((unused)) XN297_SetTXAddr(const uint8_t*, uint8_t); static void __attribute__((unused)) XN297_SetRXAddr(const uint8_t*, uint8_t); static void __attribute__((unused)) XN297_SetTxRxMode(enum TXRX_State); static void __attribute__((unused)) XN297_SendPayload(uint8_t*, uint8_t); +static void __attribute__((unused)) XN297_ReSendPayload(); static void __attribute__((unused)) XN297_WritePayload(uint8_t*, uint8_t); static void __attribute__((unused)) XN297_WriteEnhancedPayload(uint8_t*, uint8_t, uint8_t); static bool __attribute__((unused)) XN297_IsRX();