diff --git a/Makefile b/Makefile index d3e0b5c..ee52ace 100644 --- a/Makefile +++ b/Makefile @@ -46,7 +46,7 @@ ENABLE_BLMIN_TMP_OFF := 0 ENABLE_SCAN_RANGES := 1 ENABLE_MDC1200 := 1 ENABLE_MDC1200_SHOW_OP_ARG := 0 -ENABLE_MDC1200_SIDE_BEEP := 1 +ENABLE_MDC1200_SIDE_BEEP := 0 # ---- DEBUGGING ---- ENABLE_AM_FIX_SHOW_DATA := 0 ENABLE_AGC_SHOW_DATA := 0 diff --git a/app/aircopy.c b/app/aircopy.c index 9f964fa..372275e 100644 --- a/app/aircopy.c +++ b/app/aircopy.c @@ -85,6 +85,8 @@ void AIRCOPY_StorePacket(void) g_FSK_Buffer[i + 1] ^= Obfuscation[i % 8]; CRC = CRC_Calculate(&g_FSK_Buffer[1], 2 + 64); + CRC_Init(); + if (g_FSK_Buffer[34] == CRC) { const uint16_t *pData; diff --git a/app/mdc1200.c b/app/mdc1200.c index 2f41481..4941cd4 100644 --- a/app/mdc1200.c +++ b/app/mdc1200.c @@ -13,7 +13,7 @@ const uint8_t mdc1200_sync[5] = {0x07, 0x09, 0x2a, 0x44, 0x6f}; uint8_t mdc1200_sync_suc_xor[sizeof(mdc1200_sync)]; -#if 1 +#if 0 uint16_t compute_crc(const void *data, const unsigned int data_len) { // let the CPU's hardware do some work :) @@ -25,21 +25,24 @@ uint16_t compute_crc(const void *data, const unsigned int data_len) } #elif 1 +uint16_t compute_crc( void *data, const unsigned int data_len) { // let the CPU's hardware do some work :) -uint16_t compute_crc(const void *data, const unsigned int data_len) - { // using the reverse computation and polynominal avoids having to reverse the bit order during and after - unsigned int i; - const uint8_t *data8 = (const uint8_t *)data; - uint16_t crc = 0; - for (i = 0; i < data_len; i++) - { - unsigned int k; - crc ^= data8[i]; - for (k = 8; k > 0; k--) - crc = (crc & 1u) ? (crc >> 1) ^ 0x8408 : crc >> 1; - } - return crc ^ 0xffff; - } + return CRC_Calculate(data, data_len); +} +//uint16_t compute_crc( void *data, const unsigned int data_len) +// { // using the reverse computation and polynominal avoids having to reverse the bit order during and after +// unsigned int i; +// uint8_t *data8 = ( uint8_t *)data; +// uint16_t crc = 0; +// for (i = 0; i < data_len; i++) +// { +// unsigned int k; +// crc ^= data8[i]; +// for (k = 8; k > 0; k--) +// crc = (crc & 1u) ? (crc >> 1) ^ 0x8408 : crc >> 1; +// } +// return crc ^ 0xffff; +// } #else @@ -528,7 +531,7 @@ void MDC1200_process_rx(const uint16_t interrupt_bits) &mdc1200_op, &mdc1200_arg, &mdc1200_unit_id)) { - mdc1200_rx_ready_tick_500ms = 2 * 3; // 6 second MDC display time + mdc1200_rx_ready_tick_500ms = 2 * 5; // 6 second MDC display time gUpdateDisplay = true; } diff --git a/app/uart.c b/app/uart.c index 3e0aa69..748c3ac 100644 --- a/app/uart.c +++ b/app/uart.c @@ -516,9 +516,9 @@ bool UART_IsCommandAvailable(void) // for (int i = 0; i < Size; i++) { // tmp[i]=UART_Command.Buffer[i]; // } +bool judge=(CRC_Calculate1(UART_Command.Buffer, Size)!= CRC) ? false : true; - - return (CRC_Calculate(UART_Command.Buffer, Size)!= CRC) ? false : true; + return judge; } void UART_HandleCommand(void) diff --git a/driver/crc.c b/driver/crc.c index dea6fbe..cfe4016 100644 --- a/driver/crc.c +++ b/driver/crc.c @@ -48,28 +48,11 @@ void CRC_InitReverse(void) CRC_IV = 0; } #endif -// uint16_t CRC_Calculate(const void *pBuffer, uint16_t Size) -//{ -// const uint8_t *pData = (const uint8_t *)pBuffer; -// uint16_t i, Crc; -// UART_Send(pData, Size); -// -// CRC_CR = (CRC_CR & ~CRC_CR_CRC_EN_MASK) | CRC_CR_CRC_EN_BITS_ENABLE; -// UART_Send(pData, Size); -// -// for (i = 0; i < Size; i++) { -// CRC_DATAIN = pData[i]; -// } -// Crc = (uint16_t)CRC_DATAOUT; -// -// CRC_CR = (CRC_CR & ~CRC_CR_CRC_EN_MASK) | CRC_CR_CRC_EN_BITS_DISABLE; -// -// return Crc; -//} #define CRC16_XMODEM_POLY 0x1021 -uint16_t CRC_Calculate(const void *pBuffer, uint16_t Size) { - const uint8_t *pData = (const uint8_t *)pBuffer; + uint16_t CRC_Calculate1( void *pBuffer, uint16_t Size) +{ + uint8_t *pData = ( uint8_t *)pBuffer; uint16_t crc = 0; // 初始CRC值为0 while (Size--) { @@ -85,3 +68,32 @@ uint16_t CRC_Calculate(const void *pBuffer, uint16_t Size) { return crc; } + +uint16_t CRC_Calculate( void *pBuffer, uint16_t Size) { +// uint8_t *pData = ( uint8_t *)pBuffer; +// uint16_t crc = 0; // 初始CRC值为0 +// +// while (Size--) { +// crc ^= (*pData++) << 8; // 将数据字节的最高位与CRC异或 +// for (uint8_t i = 0; i < 8; i++) { +// if (crc & 0x8000) { // 检查最高位是否为1 +// crc = (crc << 1) ^ CRC16_XMODEM_POLY; // 如果最高位为1,执行CRC多项式计算 +// } else { +// crc = crc << 1; // 如果最高位为0,继续左移 +// } +// } +// } +// +// return crc; + unsigned int i; + uint8_t *data8 = ( uint8_t *)pBuffer; + uint16_t crc = 0; + for (i = 0; i < Size; i++) + { + unsigned int k; + crc ^= data8[i]; + for (k = 8; k > 0; k--) + crc = (crc & 1u) ? (crc >> 1) ^ 0x8408 : crc >> 1; + } + return crc ^ 0xffff; +} diff --git a/driver/crc.h b/driver/crc.h index 2cda491..45dd839 100644 --- a/driver/crc.h +++ b/driver/crc.h @@ -20,7 +20,9 @@ #include <stdint.h> void CRC_Init(void); - uint16_t CRC_Calculate(const void *pBuffer, uint16_t Size); + uint16_t CRC_Calculate( void *pBuffer, uint16_t Size); +uint16_t CRC_Calculate1( void *pBuffer, uint16_t Size); + void CRC_InitReverse(void); #endif diff --git a/version.c b/version.c index 945ed2d..4275215 100644 --- a/version.c +++ b/version.c @@ -4,7 +4,7 @@ #ifdef GIT_HASH #define VER GIT_HASH #else - #define VER "105" + #define VER "106" #endif #ifndef ONE_OF_ELEVEN_VER