mirror of
https://github.com/pascallanger/DIY-Multiprotocol-TX-Module.git
synced 2025-02-04 21:48:12 +00:00
Update DSM_Rx_cyrf6936.ino
This commit is contained in:
parent
4290c75478
commit
ee080839b1
@ -33,6 +33,7 @@ enum {
|
|||||||
static void __attribute__((unused)) DSM_Rx_init()
|
static void __attribute__((unused)) DSM_Rx_init()
|
||||||
{
|
{
|
||||||
DSM_cyrf_config();
|
DSM_cyrf_config();
|
||||||
|
rx_disable_lna = IS_POWER_FLAG_on;
|
||||||
if(IS_BIND_IN_PROGRESS)
|
if(IS_BIND_IN_PROGRESS)
|
||||||
{
|
{
|
||||||
//64 SDR Mode is configured so only the 8 first values are needed but need to write 16 values...
|
//64 SDR Mode is configured so only the 8 first values are needed but need to write 16 values...
|
||||||
@ -44,9 +45,10 @@ static void __attribute__((unused)) DSM_Rx_init()
|
|||||||
CYRF_WriteRegister(CYRF_05_RX_CTRL, 0x83); // Prepare to receive
|
CYRF_WriteRegister(CYRF_05_RX_CTRL, 0x83); // Prepare to receive
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
DSM_cyrf_configdata();
|
DSM_cyrf_configdata();
|
||||||
rx_disable_lna = IS_POWER_FLAG_on;
|
CYRF_WriteRegister(CYRF_06_RX_CFG, rx_disable_lna ? 0x0A:0x4A); // AGC disabled, LNA disabled/enabled, Attenuator disabled, RX override enabled, Fast turn mode enabled, RX is 1MHz below TX
|
||||||
CYRF_WriteRegister(CYRF_06_RX_CFG, rx_disable_lna ? 0x0A:0xCA); // AGC enabled/disabled, LNA enabled/disabled, Attenuator disabled, RX override enabled, Fast turn mode enabled, RX is 1MHz below TX
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16_t convert_channel_DSM_nolimit(int32_t val)
|
uint16_t convert_channel_DSM_nolimit(int32_t val)
|
||||||
@ -67,11 +69,15 @@ static uint8_t __attribute__((unused)) DSM_Rx_check_packet()
|
|||||||
rx_status |= CYRF_ReadRegister(CYRF_07_RX_IRQ_STATUS);
|
rx_status |= CYRF_ReadRegister(CYRF_07_RX_IRQ_STATUS);
|
||||||
if((rx_status & 0x07) == 0x02)
|
if((rx_status & 0x07) == 0x02)
|
||||||
{ // data received with no errors
|
{ // data received with no errors
|
||||||
if(CYRF_ReadRegister(CYRF_09_RX_COUNT)==16)
|
len=CYRF_ReadRegister(CYRF_09_RX_COUNT);
|
||||||
{// 16 bytes
|
#ifdef DSM_DEBUG_RF
|
||||||
|
debugln("l=%d",len);
|
||||||
|
#endif
|
||||||
|
if(len>=2 && len<=16)
|
||||||
|
{
|
||||||
// Read packet
|
// Read packet
|
||||||
CYRF_WriteRegister(CYRF_07_RX_IRQ_STATUS, 0x80); // Need to set RXOW before data read
|
CYRF_WriteRegister(CYRF_07_RX_IRQ_STATUS, 0x80); // Need to set RXOW before data read
|
||||||
CYRF_ReadDataPacketLen(packet, 16);
|
CYRF_ReadDataPacketLen(packet, len);
|
||||||
|
|
||||||
// Check packet ID
|
// Check packet ID
|
||||||
if ((DSM_rx_type&0x80) == 0)
|
if ((DSM_rx_type&0x80) == 0)
|
||||||
@ -93,9 +99,14 @@ static void __attribute__((unused)) DSM_Rx_build_telemetry_packet()
|
|||||||
if((DSM_rx_type&0xF0) == 0x00)
|
if((DSM_rx_type&0xF0) == 0x00)
|
||||||
nbr_bits=10; // Only DSM_22 is using a resolution of 1024
|
nbr_bits=10; // Only DSM_22 is using a resolution of 1024
|
||||||
|
|
||||||
|
// Use packet length to calculate the number of channels
|
||||||
|
len -= 2; // Remove header length
|
||||||
|
len >>= 1; // Channels are on 2 bytes
|
||||||
|
if(len==0) return; // No channels...
|
||||||
|
|
||||||
// Extract channels
|
// Extract channels
|
||||||
uint8_t idx;
|
uint8_t idx;
|
||||||
for (uint8_t i = 0; i < 7; i++)
|
for (uint8_t i = 0; i < len; i++)
|
||||||
{
|
{
|
||||||
uint16_t value=(packet[i*2+2]<<8) | packet[i*2+3];
|
uint16_t value=(packet[i*2+2]<<8) | packet[i*2+3];
|
||||||
if(value!=0xFFFF)
|
if(value!=0xFFFF)
|
||||||
@ -174,10 +185,10 @@ static void __attribute__((unused)) DSM_abort_channel_rx(uint8_t ch)
|
|||||||
{
|
{
|
||||||
CYRF_WriteRegister(CYRF_29_RX_ABORT, 0x20); // Abort RX operation
|
CYRF_WriteRegister(CYRF_29_RX_ABORT, 0x20); // Abort RX operation
|
||||||
CYRF_SetTxRxMode(IS_POWER_FLAG_on ? TXRX_OFF:RX_EN); // Force end state read
|
CYRF_SetTxRxMode(IS_POWER_FLAG_on ? TXRX_OFF:RX_EN); // Force end state read
|
||||||
if (rx_disable_lna != IS_POWER_FLAG_on)
|
if (rx_disable_lna != IS_POWER_FLAG_on && IS_BIND_DONE)
|
||||||
{
|
{
|
||||||
rx_disable_lna = IS_POWER_FLAG_on;
|
rx_disable_lna = IS_POWER_FLAG_on;
|
||||||
CYRF_WriteRegister(CYRF_06_RX_CFG, rx_disable_lna ? 0x0A:0xCA); // AGC enabled/disabled, LNA enabled/disabled, Attenuator disabled, RX override enabled, Fast turn mode enabled, RX is 1MHz below TX
|
CYRF_WriteRegister(CYRF_06_RX_CFG, rx_disable_lna ? 0x0A:0x4A); // AGC disabled, LNA disabled/enabled, Attenuator disabled, RX override enabled, Fast turn mode enabled, RX is 1MHz below TX
|
||||||
}
|
}
|
||||||
if(ch&0x02) DSM_set_sop_data_crc(true ,DSM_rx_type&0x80); // Set sop data,crc seed and rf channel using CH1, DSM2/X
|
if(ch&0x02) DSM_set_sop_data_crc(true ,DSM_rx_type&0x80); // Set sop data,crc seed and rf channel using CH1, DSM2/X
|
||||||
if(ch&0x01) DSM_set_sop_data_crc(false,DSM_rx_type&0x80); // Set sop data,crc seed and rf channel using CH1, DSM2/X
|
if(ch&0x01) DSM_set_sop_data_crc(false,DSM_rx_type&0x80); // Set sop data,crc seed and rf channel using CH1, DSM2/X
|
||||||
@ -215,7 +226,7 @@ uint16_t DSM_Rx_callback()
|
|||||||
for(uint8_t i=0;i<4;i++)
|
for(uint8_t i=0;i<4;i++)
|
||||||
{
|
{
|
||||||
cyrfmfg_id[i]=packet_in[i]^0xFF;
|
cyrfmfg_id[i]=packet_in[i]^0xFF;
|
||||||
//eeprom_write_byte((EE_ADDR)temp++, cyrfmfg_id[i]);
|
eeprom_write_byte((EE_ADDR)temp++, cyrfmfg_id[i]);
|
||||||
debug(" %02X", cyrfmfg_id[i]);
|
debug(" %02X", cyrfmfg_id[i]);
|
||||||
}
|
}
|
||||||
// check num_ch
|
// check num_ch
|
||||||
@ -248,7 +259,7 @@ uint16_t DSM_Rx_callback()
|
|||||||
DSM_rx_type = 0xB2;
|
DSM_rx_type = 0xB2;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// eeprom_write_byte((EE_ADDR)temp, DSM_rx_type);
|
eeprom_write_byte((EE_ADDR)temp, DSM_rx_type);
|
||||||
debugln(", num_ch=%d, type=%02X",num_ch, DSM_rx_type);
|
debugln(", num_ch=%d, type=%02X",num_ch, DSM_rx_type);
|
||||||
CYRF_WriteRegister(CYRF_29_RX_ABORT, 0x20); // Abort RX operation
|
CYRF_WriteRegister(CYRF_29_RX_ABORT, 0x20); // Abort RX operation
|
||||||
CYRF_SetTxRxMode(TX_EN); // Force end state TX
|
CYRF_SetTxRxMode(TX_EN); // Force end state TX
|
||||||
@ -456,7 +467,7 @@ uint16_t initDSM_Rx()
|
|||||||
cyrfmfg_id[i]=eeprom_read_byte((EE_ADDR)temp++);
|
cyrfmfg_id[i]=eeprom_read_byte((EE_ADDR)temp++);
|
||||||
debug(" %02X", cyrfmfg_id[i]);
|
debug(" %02X", cyrfmfg_id[i]);
|
||||||
}
|
}
|
||||||
DSM_rx_type=0xB2; //eeprom_read_byte((EE_ADDR)temp);
|
DSM_rx_type=eeprom_read_byte((EE_ADDR)temp);
|
||||||
debugln(", type=%02X", DSM_rx_type);
|
debugln(", type=%02X", DSM_rx_type);
|
||||||
phase = DSM_RX_DATA_PREP;
|
phase = DSM_RX_DATA_PREP;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user