mirror of
https://github.com/pascallanger/DIY-Multiprotocol-TX-Module.git
synced 2025-02-04 17:58:13 +00:00
HONTAI: use the global CRC calculation routine
This commit is contained in:
parent
addf2c5143
commit
b41dccef67
@ -34,37 +34,13 @@ enum{
|
|||||||
HONTAI_FLAG_CALIBRATE = 0x20,
|
HONTAI_FLAG_CALIBRATE = 0x20,
|
||||||
};
|
};
|
||||||
|
|
||||||
// proudly swiped from http://www.drdobbs.com/implementing-the-ccitt-cyclical-redundan/199904926
|
static void __attribute__((unused)) HONTAI_send_packet()
|
||||||
#define HONTAI_POLY 0x8408
|
|
||||||
static void __attribute__((unused)) crc16(uint8_t *data_p, uint8_t length)
|
|
||||||
{
|
{
|
||||||
crc = 0xffff;
|
if (IS_BIND_IN_PROGRESS)
|
||||||
|
|
||||||
length -= 2;
|
|
||||||
do
|
|
||||||
{
|
|
||||||
for (uint8_t i = 0, data = (uint8_t)*data_p++;
|
|
||||||
i < 8;
|
|
||||||
i++, data >>= 1)
|
|
||||||
{
|
|
||||||
if ((crc & 0x01) ^ (data & 0x01))
|
|
||||||
crc = (crc >> 1) ^ HONTAI_POLY;
|
|
||||||
else
|
|
||||||
crc >>= 1;
|
|
||||||
}
|
|
||||||
} while (--length);
|
|
||||||
|
|
||||||
crc = ~crc;
|
|
||||||
*data_p++ = crc & 0xff;
|
|
||||||
*data_p = crc >> 8;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void __attribute__((unused)) HONTAI_send_packet(uint8_t bind)
|
|
||||||
{
|
|
||||||
if (bind)
|
|
||||||
{
|
{
|
||||||
memcpy(packet, rx_tx_addr, 5);
|
memcpy(packet, rx_tx_addr, 5);
|
||||||
memset(&packet[5], 0, 3);
|
memset(&packet[5], 0, 3);
|
||||||
|
packet_length = HONTAI_BIND_PACKET_SIZE;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -125,8 +101,16 @@ static void __attribute__((unused)) HONTAI_send_packet(uint8_t bind)
|
|||||||
packet[6] |= GET_FLAG(CH9_SW, 0x40); // Headless
|
packet[6] |= GET_FLAG(CH9_SW, 0x40); // Headless
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
packet_length = HONTAI_PACKET_SIZE;
|
||||||
}
|
}
|
||||||
crc16(packet, bind ? HONTAI_BIND_PACKET_SIZE:HONTAI_PACKET_SIZE);
|
|
||||||
|
// CRC 16 bits reflected in and out
|
||||||
|
crc=0xFFFF;
|
||||||
|
for(uint8_t i=0; i< packet_length-2; i++)
|
||||||
|
crc16_update(bit_reverse(packet[i]),8);
|
||||||
|
crc ^= 0xFFFF;
|
||||||
|
packet[packet_length-2]=bit_reverse(crc>>8);
|
||||||
|
packet[packet_length-1]=bit_reverse(crc);
|
||||||
|
|
||||||
// Power on, TX mode, 2byte CRC
|
// Power on, TX mode, 2byte CRC
|
||||||
if(sub_protocol == JJRCX1)
|
if(sub_protocol == JJRCX1)
|
||||||
@ -134,16 +118,16 @@ static void __attribute__((unused)) HONTAI_send_packet(uint8_t bind)
|
|||||||
else
|
else
|
||||||
XN297_Configure(_BV(NRF24L01_00_EN_CRC) | _BV(NRF24L01_00_CRCO) | _BV(NRF24L01_00_PWR_UP));
|
XN297_Configure(_BV(NRF24L01_00_EN_CRC) | _BV(NRF24L01_00_CRCO) | _BV(NRF24L01_00_PWR_UP));
|
||||||
|
|
||||||
NRF24L01_WriteReg(NRF24L01_05_RF_CH, bind ? HONTAI_RF_BIND_CHANNEL : hopping_frequency[hopping_frequency_no++]);
|
NRF24L01_WriteReg(NRF24L01_05_RF_CH, IS_BIND_IN_PROGRESS ? HONTAI_RF_BIND_CHANNEL : hopping_frequency[hopping_frequency_no++]);
|
||||||
hopping_frequency_no %= 3;
|
hopping_frequency_no %= 3;
|
||||||
|
|
||||||
NRF24L01_WriteReg(NRF24L01_07_STATUS, 0x70);
|
NRF24L01_WriteReg(NRF24L01_07_STATUS, 0x70);
|
||||||
NRF24L01_FlushTx();
|
NRF24L01_FlushTx();
|
||||||
|
|
||||||
if(sub_protocol == JJRCX1)
|
if(sub_protocol == JJRCX1)
|
||||||
NRF24L01_WritePayload(packet, bind ? HONTAI_BIND_PACKET_SIZE:HONTAI_PACKET_SIZE);
|
NRF24L01_WritePayload(packet, packet_length);
|
||||||
else
|
else
|
||||||
XN297_WritePayload(packet, bind ? HONTAI_BIND_PACKET_SIZE:HONTAI_PACKET_SIZE);
|
XN297_WritePayload(packet, packet_length);
|
||||||
|
|
||||||
NRF24L01_SetPower();
|
NRF24L01_SetPower();
|
||||||
}
|
}
|
||||||
@ -231,9 +215,9 @@ static void __attribute__((unused)) HONTAI_initialize_txid()
|
|||||||
|
|
||||||
uint16_t HONTAI_callback()
|
uint16_t HONTAI_callback()
|
||||||
{
|
{
|
||||||
if(bind_counter!=0)
|
HONTAI_send_packet();
|
||||||
|
if(bind_counter)
|
||||||
{
|
{
|
||||||
HONTAI_send_packet(1);
|
|
||||||
bind_counter--;
|
bind_counter--;
|
||||||
if (bind_counter == 0)
|
if (bind_counter == 0)
|
||||||
{
|
{
|
||||||
@ -241,13 +225,10 @@ uint16_t HONTAI_callback()
|
|||||||
BIND_DONE;
|
BIND_DONE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#ifdef MULTI_SYNC
|
||||||
else
|
else
|
||||||
{
|
telemetry_set_input_sync(packet_period);
|
||||||
#ifdef MULTI_SYNC
|
#endif
|
||||||
telemetry_set_input_sync(packet_period);
|
|
||||||
#endif
|
|
||||||
HONTAI_send_packet(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
return packet_period;
|
return packet_period;
|
||||||
}
|
}
|
||||||
|
@ -296,7 +296,7 @@ const mm_protocol_definition multi_protocols[] = {
|
|||||||
{PROTO_HITEC, STR_HITEC, STR_SUBTYPE_HITEC, 3, OPTION_RFTUNE, 0, 0, SW_CC2500, HITEC_init, HITEC_callback },
|
{PROTO_HITEC, STR_HITEC, STR_SUBTYPE_HITEC, 3, OPTION_RFTUNE, 0, 0, SW_CC2500, HITEC_init, HITEC_callback },
|
||||||
#endif
|
#endif
|
||||||
#if defined(HONTAI_NRF24L01_INO)
|
#if defined(HONTAI_NRF24L01_INO)
|
||||||
{PROTO_HONTAI, STR_HONTAI, STR_SUBTYPE_HONTAI, 4, OPTION_NONE, 0, 0, SW_NRF, HONTAI_init, HONTAI_callback }, // review crc
|
{PROTO_HONTAI, STR_HONTAI, STR_SUBTYPE_HONTAI, 4, OPTION_NONE, 0, 0, SW_NRF, HONTAI_init, HONTAI_callback },
|
||||||
#endif
|
#endif
|
||||||
#if defined(HOTT_CC2500_INO)
|
#if defined(HOTT_CC2500_INO)
|
||||||
{PROTO_HOTT, STR_HOTT, STR_SUBTYPE_HOTT, 2, OPTION_RFTUNE, 1, 0, SW_CC2500, HOTT_init, HOTT_callback },
|
{PROTO_HOTT, STR_HOTT, STR_SUBTYPE_HOTT, 2, OPTION_RFTUNE, 1, 0, SW_CC2500, HOTT_init, HOTT_callback },
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
#define VERSION_MAJOR 1
|
#define VERSION_MAJOR 1
|
||||||
#define VERSION_MINOR 3
|
#define VERSION_MINOR 3
|
||||||
#define VERSION_REVISION 2
|
#define VERSION_REVISION 2
|
||||||
#define VERSION_PATCH_LEVEL 37
|
#define VERSION_PATCH_LEVEL 38
|
||||||
|
|
||||||
//******************
|
//******************
|
||||||
// Protocols
|
// Protocols
|
||||||
|
Loading…
x
Reference in New Issue
Block a user