Update TRAXXAS_cyrf6936.ino

This commit is contained in:
pascallanger 2024-02-17 11:03:37 +01:00
parent 72f87cade9
commit 2108912263

View File

@ -24,13 +24,15 @@
#define TRAXXAS_CHANNEL 0x0F #define TRAXXAS_CHANNEL 0x0F
#define TRAXXAS_BIND_CHANNEL 0x2B #define TRAXXAS_BIND_CHANNEL 0x2B
#define TRAXXAS_BIND_CHECK 0x22 #define TRAXXAS_CHECK_CHANNEL 0x22
#define TRAXXAS_PACKET_SIZE 16 #define TRAXXAS_PACKET_SIZE 16
enum { enum {
TRAXXAS_BIND_PREP_RX=0, TRAXXAS_BIND_PREP_RX=0,
TRAXXAS_BIND_RX, TRAXXAS_BIND_RX,
TRAXXAS_BIND_TX1, TRAXXAS_BIND_TX1,
TRAXXAS_PREP_RX,
TRAXXAS_RX,
TRAXXAS_PREP_DATA, TRAXXAS_PREP_DATA,
TRAXXAS_DATA, TRAXXAS_DATA,
}; };
@ -56,6 +58,14 @@ static void __attribute__((unused)) TRAXXAS_cyrf_bind_config()
CYRF_ConfigRFChannel(TRAXXAS_BIND_CHANNEL); CYRF_ConfigRFChannel(TRAXXAS_BIND_CHANNEL);
} }
static void __attribute__((unused)) TRAXXAS_cyrf_check_config()
{
CYRF_PROGMEM_ConfigSOPCode(DEVO_j6pro_sopcodes[9]);
CYRF_WriteRegister(CYRF_15_CRC_SEED_LSB, 0xA5);
CYRF_WriteRegister(CYRF_16_CRC_SEED_MSB, 0xA5);
CYRF_ConfigRFChannel(TRAXXAS_CHECK_CHANNEL);
}
static void __attribute__((unused)) TRAXXAS_cyrf_data_config() static void __attribute__((unused)) TRAXXAS_cyrf_data_config()
{ {
#ifdef TRAXXAS_FORCE_ID // data taken from TX dump #ifdef TRAXXAS_FORCE_ID // data taken from TX dump
@ -106,15 +116,20 @@ uint16_t TRAXXAS_callback()
switch(phase) switch(phase)
{ {
case TRAXXAS_BIND_PREP_RX: case TRAXXAS_BIND_PREP_RX:
//debugln("BIND_PREP_RX"); case TRAXXAS_PREP_RX:
//debugln("PREP_RX");
if(phase == TRAXXAS_BIND_PREP_RX)
TRAXXAS_cyrf_bind_config(); TRAXXAS_cyrf_bind_config();
else
TRAXXAS_cyrf_check_config();
CYRF_SetTxRxMode(RX_EN); //Receive mode CYRF_SetTxRxMode(RX_EN); //Receive mode
CYRF_WriteRegister(CYRF_05_RX_CTRL, 0x83); //Prepare to receive CYRF_WriteRegister(CYRF_05_RX_CTRL, 0x83); //Prepare to receive
packet_count=100; //Timeout for RX packet_count=100; //Timeout for RX
phase=TRAXXAS_BIND_RX; phase++; // TRAXXAS_BIND_RX or TRAXXAS_RX
return 700; return 7000;
case TRAXXAS_BIND_RX: case TRAXXAS_BIND_RX:
//debugln("BIND_RX"); case TRAXXAS_RX:
//debugln("RX");
//Read data from RX //Read data from RX
status = CYRF_ReadRegister(CYRF_07_RX_IRQ_STATUS); status = CYRF_ReadRegister(CYRF_07_RX_IRQ_STATUS);
if((status & 0x03) == 0x02) // RXC=1, RXE=0 then 2nd check is required (debouncing) if((status & 0x03) == 0x02) // RXC=1, RXE=0 then 2nd check is required (debouncing)
@ -138,12 +153,24 @@ uint16_t TRAXXAS_callback()
debug(" %02X",packet[i]); debug(" %02X",packet[i]);
debugln(""); debugln("");
#endif #endif
// Store RX ID
uint16_t addr=TRAXXAS_EEPROM_OFFSET+RX_num*3; uint16_t addr=TRAXXAS_EEPROM_OFFSET+RX_num*3;
if(phase == TRAXXAS_BIND_RX)
{
// Store RX ID
for(uint8_t i=0;i<2;i++) for(uint8_t i=0;i<2;i++)
eeprom_write_byte((EE_ADDR)(addr+i),packet[i+1]); eeprom_write_byte((EE_ADDR)(addr+i),packet[i+1]);
//Store SOP index //Store SOP index
eeprom_write_byte((EE_ADDR)(addr+2),packet[7]); eeprom_write_byte((EE_ADDR)(addr+2),packet[7]);
}
else
{
//check RX ID and SOP
if(eeprom_read_byte((EE_ADDR)(addr + 0)) != packet[1] || eeprom_read_byte((EE_ADDR)(addr + 1)) != packet[2] || eeprom_read_byte((EE_ADDR)(addr + 2)) != packet[7])
{ // Not our RX
phase++; // TRAXXAS_PREP_DATA
return 10000-7000-1000;
}
}
// Replace RX ID by TX ID // Replace RX ID by TX ID
for(uint8_t i=0;i<6;i++) for(uint8_t i=0;i<6;i++)
packet[i+1]=cyrfmfg_id[i]; packet[i+1]=cyrfmfg_id[i];
@ -157,6 +184,8 @@ uint16_t TRAXXAS_callback()
return 200; return 200;
} }
} }
if(phase == TRAXXAS_BIND_RX)
{
if( --packet_count == 0 ) if( --packet_count == 0 )
{ // Retry RX { // Retry RX
CYRF_WriteRegister(CYRF_29_RX_ABORT, 0x20); // Enable RX abort CYRF_WriteRegister(CYRF_29_RX_ABORT, 0x20); // Enable RX abort
@ -168,6 +197,9 @@ uint16_t TRAXXAS_callback()
phase=TRAXXAS_PREP_DATA; // Abort binding phase=TRAXXAS_PREP_DATA; // Abort binding
} }
return 700; return 700;
}
phase++; // TRAXXAS_PREP_DATA
return 10000-7000-1000;
case TRAXXAS_BIND_TX1: case TRAXXAS_BIND_TX1:
//debugln("BIND_TX1"); //debugln("BIND_TX1");
CYRF_WriteDataPacketLen(packet, TRAXXAS_PACKET_SIZE); CYRF_WriteDataPacketLen(packet, TRAXXAS_PACKET_SIZE);
@ -188,12 +220,13 @@ uint16_t TRAXXAS_callback()
case TRAXXAS_DATA: case TRAXXAS_DATA:
//debugln("DATA"); //debugln("DATA");
#ifdef MULTI_SYNC #ifdef MULTI_SYNC
telemetry_set_input_sync(13940); telemetry_set_input_sync(10000);
#endif #endif
TRAXXAS_send_data_packet(); TRAXXAS_send_data_packet();
break; phase = TRAXXAS_PREP_RX;
return 1000;
} }
return 13940; return 10000;
} }
void TRAXXAS_init() void TRAXXAS_init()
@ -242,7 +275,8 @@ TX1: 0x02 0x65 0xE2 0x5E 0x55 0x4D 0xFE 0xEE 0x00 0x00 0x01 0x01 0x06 0x05 0x00
Notes: Notes:
- RX cyrfmfg_id is 0x4A,0xA3,0x2D,0x1A,0x49,0xFE and TX cyrfmfg_id is 0x65,0xE2,0x5E,0x55,0x4D,0xFE - RX cyrfmfg_id is 0x4A,0xA3,0x2D,0x1A,0x49,0xFE and TX cyrfmfg_id is 0x65,0xE2,0x5E,0x55,0x4D,0xFE
- P[7] changes from 0x06 to 0xEE but not needed to complete the bind -> doesn't care?? - P[7] changes from 0x06 to 0xEE but not needed to complete the bind -> doesn't care??
- P[8..9]=0x00 unchanged?? - P[8] RF channel - 1 (on packets type 0x03)
- P[9] 0x00 unchanged??
- P[10] needs to be set to 0x01 to complete the bind -> normal packet P[0]?? - P[10] needs to be set to 0x01 to complete the bind -> normal packet P[0]??
- P[11] unchanged ?? -> no bind if set to 0x00 or 0x81 - P[11] unchanged ?? -> no bind if set to 0x00 or 0x81
- P[12] unchanged ?? -> no bind if set to 0x05 or 0x86 - P[12] unchanged ?? -> no bind if set to 0x05 or 0x86