}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