mirror of
https://github.com/pascallanger/DIY-Multiprotocol-TX-Module.git
synced 2025-07-01 10:17:53 +00:00
Update TRAXXAS_cyrf6936.ino
This commit is contained in:
parent
72f87cade9
commit
2108912263
@ -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:
|
||||||
TRAXXAS_cyrf_bind_config();
|
//debugln("PREP_RX");
|
||||||
|
if(phase == TRAXXAS_BIND_PREP_RX)
|
||||||
|
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;
|
||||||
for(uint8_t i=0;i<2;i++)
|
if(phase == TRAXXAS_BIND_RX)
|
||||||
eeprom_write_byte((EE_ADDR)(addr+i),packet[i+1]);
|
{
|
||||||
//Store SOP index
|
// Store RX ID
|
||||||
eeprom_write_byte((EE_ADDR)(addr+2),packet[7]);
|
for(uint8_t i=0;i<2;i++)
|
||||||
|
eeprom_write_byte((EE_ADDR)(addr+i),packet[i+1]);
|
||||||
|
//Store SOP index
|
||||||
|
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,17 +184,22 @@ uint16_t TRAXXAS_callback()
|
|||||||
return 200;
|
return 200;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if( --packet_count == 0 )
|
if(phase == TRAXXAS_BIND_RX)
|
||||||
{ // Retry RX
|
{
|
||||||
CYRF_WriteRegister(CYRF_29_RX_ABORT, 0x20); // Enable RX abort
|
if( --packet_count == 0 )
|
||||||
CYRF_WriteRegister(CYRF_0F_XACT_CFG, 0x24); // Force end state
|
{ // Retry RX
|
||||||
CYRF_WriteRegister(CYRF_29_RX_ABORT, 0x00); // Disable RX abort
|
CYRF_WriteRegister(CYRF_29_RX_ABORT, 0x20); // Enable RX abort
|
||||||
if(--bind_counter != 0)
|
CYRF_WriteRegister(CYRF_0F_XACT_CFG, 0x24); // Force end state
|
||||||
phase=TRAXXAS_BIND_PREP_RX; // Retry receiving bind packet
|
CYRF_WriteRegister(CYRF_29_RX_ABORT, 0x00); // Disable RX abort
|
||||||
else
|
if(--bind_counter != 0)
|
||||||
phase=TRAXXAS_PREP_DATA; // Abort binding
|
phase=TRAXXAS_BIND_PREP_RX; // Retry receiving bind packet
|
||||||
|
else
|
||||||
|
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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user