@@ -300,29 +300,6 @@ const uint16_t xn297_crc_xorout_enhanced[] = {
300300 0xABFC , 0xE68E , 0x0DE7 , 0x28A2 , 0x1965 };
301301#endif
302302
303- static uint8_t bit_reverse (uint8_t b_in)
304- {
305- uint8_t b_out = 0 ;
306- for (uint8_t i = 0 ; i < 8 ; ++i)
307- {
308- b_out = (b_out << 1 ) | (b_in & 1 );
309- b_in >>= 1 ;
310- }
311- return b_out;
312- }
313-
314- static const uint16_t polynomial = 0x1021 ;
315- static uint16_t crc16_update (uint16_t crc, uint8_t a, uint8_t bits)
316- {
317- crc ^= a << 8 ;
318- while (bits--)
319- if (crc & 0x8000 )
320- crc = (crc << 1 ) ^ polynomial;
321- else
322- crc = crc << 1 ;
323- return crc;
324- }
325-
326303void XN297_SetTXAddr (const uint8_t * addr, uint8_t len)
327304{
328305 if (len > 5 ) len = 5 ;
@@ -403,7 +380,7 @@ void XN297_WritePayload(uint8_t* msg, uint8_t len)
403380 uint8_t offset = xn297_addr_len < 4 ? 1 : 0 ;
404381 uint16_t crc = 0xb5d2 ;
405382 for (uint8_t i = offset; i < last; ++i)
406- crc = crc16_update (crc, buf[i], 8 );
383+ crc16_update ( buf[i], 8 );
407384 if (xn297_scramble_enabled)
408385 crc ^= pgm_read_word (&xn297_crc_xorout_scrambled[xn297_addr_len - 3 + len]);
409386 else
@@ -468,8 +445,8 @@ void XN297_WriteEnhancedPayload(uint8_t* msg, uint8_t len, uint8_t noack)
468445 uint8_t offset = xn297_addr_len < 4 ? 1 : 0 ;
469446 uint16_t crc = 0xb5d2 ;
470447 for (uint8_t i = offset; i < last; ++i)
471- crc = crc16_update (crc, packet[i], 8 );
472- crc = crc16_update (crc, packet[last] & 0xc0 , 2 );
448+ crc16_update ( packet[i], 8 );
449+ crc16_update ( packet[last] & 0xc0 , 2 );
473450 if (xn297_scramble_enabled)
474451 crc ^= pgm_read_word (&xn297_crc_xorout_scrambled_enhanced[xn297_addr_len-3 +len]);
475452 // else
@@ -512,11 +489,11 @@ boolean XN297_ReadPayload(uint8_t* msg, uint8_t len)
512489 uint8_t b_in=xn297_rx_addr[xn297_addr_len-i-1 ];
513490 if (xn297_scramble_enabled)
514491 b_in ^= xn297_scramble[i];
515- crc = crc16_update (crc, b_in, 8 );
492+ crc16_update ( b_in, 8 );
516493 }
517494 // process payload
518495 for (uint8_t i = 0 ; i < len; ++i)
519- crc = crc16_update (crc, buf[i], 8 );
496+ crc16_update ( buf[i], 8 );
520497 // xorout
521498 if (xn297_scramble_enabled)
522499 crc ^= pgm_read_word (&xn297_crc_xorout_scrambled[xn297_addr_len - 3 + len]);
@@ -559,12 +536,12 @@ uint8_t XN297_ReadEnhancedPayload(uint8_t* msg, uint8_t len)
559536 uint8_t b_in=xn297_rx_addr[xn297_addr_len-i-1 ];
560537 if (xn297_scramble_enabled)
561538 b_in ^= xn297_scramble[i];
562- crc = crc16_update (crc, b_in, 8 );
539+ crc16_update ( b_in, 8 );
563540 }
564541 // process payload
565542 for (uint8_t i = 0 ; i < len+1 ; ++i)
566- crc = crc16_update (crc, buffer[i], 8 );
567- crc = crc16_update (crc, buffer[len+1 ] & 0xc0 , 2 );
543+ crc16_update ( buffer[i], 8 );
544+ crc16_update ( buffer[len+1 ] & 0xc0 , 2 );
568545 // xorout
569546 if (xn297_scramble_enabled)
570547 crc ^= pgm_read_word (&xn297_crc_xorout_scrambled_enhanced[xn297_addr_len-3 +len]);
@@ -606,24 +583,25 @@ void HS6200_SetTXAddr(const uint8_t* addr, uint8_t len)
606583 NRF24L01_WriteRegisterMulti (NRF24L01_10_TX_ADDR, (uint8_t *)" \xaa\xaa\xaa\xaa\xaa " , 5 );
607584
608585 // precompute address crc
609- hs6200_crc_init = 0xffff ;
586+ crc = 0xffff ;
610587 for (int i=0 ; i<len; i++)
611- hs6200_crc_init = crc16_update (hs6200_crc_init, addr[len-1 -i], 8 );
588+ crc16_update (addr[len-1 -i], 8 );
589+ hs6200_crc_init=crc;
612590 memcpy (hs6200_tx_addr, addr, len);
613591 hs6200_address_length = len;
614592}
615593
616594static uint16_t hs6200_calc_crc (uint8_t * msg, uint8_t len)
617595{
618596 uint8_t pos;
619- uint16_t crc = hs6200_crc_init;
620597
598+ crc = hs6200_crc_init;
621599 // pcf + payload
622600 for (pos=0 ; pos < len-1 ; pos++)
623- crc = crc16_update (crc, msg[pos], 8 );
601+ crc16_update (msg[pos], 8 );
624602 // last byte (1 bit only)
625603 if (len > 0 )
626- crc = crc16_update (crc, msg[pos+1 ], 1 );
604+ crc16_update (msg[pos+1 ], 1 );
627605 return crc;
628606}
629607
@@ -817,14 +795,14 @@ uint8_t LT8900_ReadPayload(uint8_t* msg, uint8_t len)
817795 // Check len
818796 if (LT8900_Flags&_BV (LT8900_PACKET_LENGTH_EN))
819797 {
820- crc= crc16_update (crc, buffer[pos],8 );
798+ crc16_update (buffer[pos],8 );
821799 if (bit_reverse (len)!=buffer[pos++])
822800 return 0 ; // wrong len...
823801 }
824802 // Decode message
825803 for (i=0 ;i<len;i++)
826804 {
827- crc= crc16_update (crc, buffer[pos],8 );
805+ crc16_update (buffer[pos],8 );
828806 msg[i]=bit_reverse (buffer[pos++]);
829807 }
830808 // Check CRC
@@ -846,14 +824,14 @@ void LT8900_WritePayload(uint8_t* msg, uint8_t len)
846824 {
847825 tmp=bit_reverse (len);
848826 buffer[pos++]=tmp;
849- crc= crc16_update (crc, tmp,8 );
827+ crc16_update (tmp,8 );
850828 }
851829 // Add payload
852830 for (i=0 ;i<len;i++)
853831 {
854832 tmp=bit_reverse (msg[i]);
855833 buffer[pos++]=tmp;
856- crc= crc16_update (crc, tmp,8 );
834+ crc16_update (tmp,8 );
857835 }
858836 // Add CRC
859837 if (LT8900_Flags&_BV (LT8900_CRC_ON))
0 commit comments