蓝牙产测
authorpenglei <1624952103@qq.com>
Mon, 1 Apr 2024 01:17:53 +0000 (09:17 +0800)
committerpenglei <1624952103@qq.com>
Mon, 1 Apr 2024 01:17:53 +0000 (09:17 +0800)
1  2 
code/sdk/application/wearable/service/factorytest_service/factorytest_protocol.c
code/sdk/drivers/peripheral/utils/custom_utils_at_cmd.c

@@@ -31,40 -18,21 +31,36 @@@ typedef struct factorytest_cmd_header_
  }factorytest_cmd_header_t;\r
  #pragma pack()\r
  \r
- uint16_t modbus_crc16(uint8_t *data, uint16_t length) {  \r
-     uint8_t crc_hi = 0xFF;  \r
-     uint8_t crc_lo = 0xFF;  \r
-     int i;  \r
-   \r
-     while (length--) {  \r
-         crc_hi ^= *data++;\r
-         for (i = 0; i < 8; i++) {  \r
-             if (crc_hi & 0x80) {  \r
-                 crc_hi = (crc_hi << 1) ^ 0x8005;  \r
-             } else {  \r
-                 crc_hi <<= 1;  \r
-             }  \r
-         }  \r
-     }  \r
-   \r
-     return (crc_hi << 8) | crc_lo;  \r
- }  \r
-  \r
 +static osTimerId_t g_ble_vibrator_timer;\r
 +\r
 +static osTimerId_t g_ble_acc_timer;\r
 +\r
 +static osTimerId_t g_ble_hrs_timer;\r
 +static osTimerId_t g_ble_spo2_timer;\r
 +static osTimerId_t g_ble_graycard_timer;\r
 +static osTimerId_t g_ble_leaklight_timer;\r
 +\r
 +static uint8_t graycard_flag = 0;\r
 +static uint8_t leaklight_flag = 0;\r
 +\r
 +static uint16_t cycle_time_ms = 200;\r
 +static uint16_t duty = 20;\r
 +\r
+ static int CRC16_XMODEM(uint8_t *bytes,uint16_t length) {\r
+     int crc = 0x0000;          // initial value\r
+     int polynomial = 0x1021;\r
+     for (int index = 0; index < length; index++) {\r
+         uint8_t b = bytes[index];\r
+         for (int i = 0; i < 8; i++) {\r
+             uint8_t bit = ((b >> (7 - i) & 1) == 1);\r
+             uint8_t c15 = ((crc >> 15 & 1) == 1);\r
+             crc <<= 1;\r
+             if (c15 ^ bit) crc ^= polynomial;\r
+         }\r
+     }\r
+     crc &= 0xffff;\r
+     return crc;\r
+ }\r
  errcode_t factorytest_protocol_replymsg(uint8_t mode, uint8_t submode,uint8_t testitem,\r
                                  uint8_t *input_data,uint16_t input_len)\r
  {\r
      if (input_len>0)\r
          memcpy_s(replybuf+1+2+1+1+1/*header+len+mode+submod+testitem*/,input_len,input_data,input_len);\r
      //计算除了crc外的所有数据\r
-     uint16_t crc16 = modbus_crc16(replybuf,total_len - 2);\r
+     uint16_t crc16 = CRC16_XMODEM(replybuf,total_len - 2);\r
      \r
 -    replybuf[total_len-1] = ((uint8_t *) &crc16 )[0];\r
 -    replybuf[total_len-2] = ((uint8_t *) &crc16 )[1];\r
 -    for ( int i = 0; i<total_len;i++){\r
 -        printf("%02X ",replybuf[i]);\r
 -    }\r
 -    printf("\r\n");\r
 +    uint8_t* plen =(uint8_t*)(&pcmdheader->len);\r
 +    uint8_t t = plen[0];\r
 +    plen[0] = plen[1];\r
 +    plen[1] = t;\r
 +\r
 +    replybuf[(total_len-1)] = ((uint8_t *) &crc16 )[0];\r
 +    replybuf[(total_len-2)] = ((uint8_t *) &crc16 )[1];\r
 +    \r
      ret = ble_factorytest_server_send_input_report(replybuf,total_len);\r
      free(replybuf);\r
      return ret;\r