WFLYRF: use Radio ID

This commit is contained in:
Pascal Langer 2020-12-11 13:55:50 +01:00
parent ae27c8b671
commit 5f0ed395ba
3 changed files with 18 additions and 23 deletions

View File

@ -27,13 +27,16 @@ void A7105_WriteData(uint8_t len, uint8_t channel)
for (i = 0; i < len; i++)
SPI_Write(packet[i]);
A7105_CSN_on;
if(!(protocol==PROTO_FLYSKY || protocol==PROTO_KYOSHO))
if(protocol!=PROTO_WFLYRF)
{
A7105_Strobe(A7105_STANDBY); //Force standby mode, ie cancel any TX or RX...
A7105_SetTxRxMode(TX_EN); //Switch to PA
if(!(protocol==PROTO_FLYSKY || protocol==PROTO_KYOSHO))
{
A7105_Strobe(A7105_STANDBY); //Force standby mode, ie cancel any TX or RX...
A7105_SetTxRxMode(TX_EN); //Switch to PA
}
A7105_WriteReg(A7105_0F_PLL_I, channel);
A7105_Strobe(A7105_TX);
}
A7105_WriteReg(A7105_0F_PLL_I, channel);
A7105_Strobe(A7105_TX);
}
void A7105_ReadData(uint8_t len)

View File

@ -19,7 +19,7 @@
#define VERSION_MAJOR 1
#define VERSION_MINOR 3
#define VERSION_REVISION 1
#define VERSION_PATCH_LEVEL 80
#define VERSION_PATCH_LEVEL 81
//******************
// Protocols

View File

@ -17,10 +17,10 @@
#include "iface_a7105.h"
#define WFLYRF_FORCE_ID
//#define WFLYRF_FORCE_ID
//WFLYRF constants & variables
#define WFLYRF_BIND_COUNT 2500
#define WFLYRF_BIND_COUNT 1000
#define WFLYRF_PACKET_SIZE 32
enum{
@ -105,7 +105,7 @@ static void __attribute__((unused)) WFLYRF_build_packet()
//Partial ID
packet[3] = rx_tx_addr[3];
packet[4] = rx_tx_addr[2] & 0x1F; //not sure... could be 0x1F down to 0x03
packet[4] = rx_tx_addr[2] & 0x03;
//10 channels
for(uint8_t i = 0; i < 5; i++)
@ -113,7 +113,7 @@ static void __attribute__((unused)) WFLYRF_build_packet()
uint16_t temp=convert_channel_16b_nolimit(i*2 , 0x0000, 0x0FFF); // need to check channels min/max...
packet[5 + i*3] = temp&0xFF; // low byte
packet[7 + i*3] = (temp>>8)&0x0F; // high byte
temp=convert_channel_16b_nolimit(i*2+1, 0x0000, 0x0FFF); // need to check channels min/max...
temp=convert_channel_16b_nolimit(i*2+1, 0x0000, 0x0FFF); // need to check channels min/max...
packet[6 + i*3] = temp&0xFF; // low byte
packet[7 + i*3] |= (temp>>4)&0xF0; // high byte
}
@ -188,13 +188,7 @@ uint16_t ReadWFLYRF()
WFLYRF_build_packet();
//Fill the TX buffer without sending
A7105_WriteReg(A7105_03_FIFOI, 0x1F);
A7105_CSN_off;
SPI_Write(A7105_RST_WRPTR);
SPI_Write(A7105_05_FIFO_DATA);
for (uint8_t i = 0; i < WFLYRF_PACKET_SIZE; i++)
SPI_Write(packet[i]);
A7105_CSN_on;
A7105_WriteData(WFLYRF_PACKET_SIZE,0);
#ifdef WFLYRF_HUB_TELEMETRY
//LQI calculation
@ -237,7 +231,7 @@ uint16_t ReadWFLYRF()
debugln("");
#endif
//Packet match the ID ?
if(packet[0]==0 && packet[1]==rx_tx_addr[3] && packet[2]==(rx_tx_addr[2] & 0x1F)) //not sure... could be 0x1F down to 0x03
if(packet[0]==0 && packet[1]==rx_tx_addr[3] && packet[2]==(rx_tx_addr[2] & 0x03))
WFLYRF_Send_Telemetry(); // Packet looks good do send telem to the radio
}
#endif
@ -260,8 +254,6 @@ uint16_t ReadWFLYRF()
if(!(A7105_ReadReg(A7105_00_MODE) & 0x01))
break;
//A7105_WriteReg(A7105_0F_PLL_I, (rf_ch_num<<1)+0x10); // Again in dumps?? It should not be needed...
//Switch to RX
A7105_SetTxRxMode(RX_EN);
A7105_Strobe(A7105_RX);
@ -277,10 +269,10 @@ uint16_t initWFLYRF()
A7105_Init();
#ifdef WFLYRF_FORCE_ID
//MProtocol_id = 0x50002313; //Richard
MProtocol_id = 0x50000223; //Pascal
MProtocol_id = 0x50002313; //Richard
//MProtocol_id = 0x50000223; //Pascal
#endif
MProtocol_id &= 0x0FFFFFFF; // Since the bind ID starts with 50 this mask might start with 00 instead 0F
MProtocol_id &= 0x00FFFFFF; // Since the bind ID starts with 50, let's keep only the last 3 bytes of the ID
MProtocol_id |= 0x50000000; // As recommended on the A7105 datasheet
set_rx_tx_addr(MProtocol_id); // Update the ID