HONTAI: use the global CRC calculation routine

This commit is contained in:
Pascal Langer 2021-02-11 10:54:55 +01:00
parent addf2c5143
commit b41dccef67
3 changed files with 22 additions and 41 deletions

View File

@ -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;
} }

View File

@ -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 },

View File

@ -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