From 817b91d2cd0671ff137c222a8d6ede87a1bd4a77 Mon Sep 17 00:00:00 2001 From: zhji Date: Sat, 13 Jul 2024 22:57:08 +0800 Subject: [PATCH] [feat] add cali data --- lark1s/lark1s.c | 53 ++++++++++++++++++++++++++++++++++++++++++++++++- lark1s/lark1s.h | 2 ++ 2 files changed, 54 insertions(+), 1 deletion(-) diff --git a/lark1s/lark1s.c b/lark1s/lark1s.c index 3422428..ea072dd 100644 --- a/lark1s/lark1s.c +++ b/lark1s/lark1s.c @@ -214,7 +214,58 @@ int lark1s_parse_gas3_info(uint8_t *buffer, int length, struct lark1s_gas_info_s info->unit_name[j] = buffer[i + 20 + j]; } info->range = MB_GET_UWORD(buffer + i + 32); - info->min_cali = MB_GET_UWORD(buffer + i + 56); + info->min_cali = MB_GET_UWORD(buffer + i + 76); + + return LARK1S_PARSE_OK; +} + +int lark1s_req_gas3_cali_data(uint8_t *buffer) +{ + struct crc16_result_s crc; + int i = 0; + + buffer[i++] = mb_addr; + buffer[i++] = MODBUS_FUNCTION_CODE_READ_INPUT; + buffer[i++] = (LARK1S_REG_GAS3_CALI_DATA >> 8) & 0xFF; + buffer[i++] = LARK1S_REG_GAS3_CALI_DATA & 0xFF; + buffer[i++] = (LARK1S_SIZE_GAS3_CALI_DATA >> 8) & 0xFF; + buffer[i++] = LARK1S_SIZE_GAS3_CALI_DATA & 0xFF; + crc16_8005_calc(buffer, i, &crc); + buffer[i++] = crc.crcl; + buffer[i++] = crc.crch; + + return i; +} + +int lark1s_parse_gas3_cali_data(uint8_t *buffer, int length, struct lark1s_gas_cali_data_s *data) +{ + int ret; + int i = 0; + + if (length != LARK1S_SIZE_GAS3_CALI_DATA * 2 + 5) { + return LARK1S_PARSE_FRAME_ERROR; + } + ret = lark1s_frame_check(buffer, length); + if (ret) { + return ret; + } + i++; + if (buffer[i++] != MODBUS_FUNCTION_CODE_READ_INPUT) { + return LARK1S_PARSE_FUNCTION_CODE_ERROR; + } + if (buffer[i++] != LARK1S_SIZE_GAS3_CALI_DATA * 2) { + return LARK1S_PARSE_DATA_LENGTH_ERROR; + } + data->available = MB_GET_UWORD(buffer + i); + data->zero_sig_cts = MB_GET_UWORD(buffer + i + 4); + data->zero_ref_cts = MB_GET_UWORD(buffer + i + 8); + data->zero_det_temp = MB_GET_UWORD(buffer + i + 12); + data->zero_lamp_temp = MB_GET_UWORD(buffer + i + 16); + data->span_concentration = MB_GET_UWORD(buffer + i + 28); + data->span_sig_cts = MB_GET_UWORD(buffer + i + 32); + data->span_ref_cts = MB_GET_UWORD(buffer + i + 36); + data->span_det_temp = MB_GET_UWORD(buffer + i + 40); + data->span_lamp_temp = MB_GET_UWORD(buffer + i + 44); return LARK1S_PARSE_OK; } diff --git a/lark1s/lark1s.h b/lark1s/lark1s.h index 99f55b7..c3cd6cc 100644 --- a/lark1s/lark1s.h +++ b/lark1s/lark1s.h @@ -63,6 +63,8 @@ int lark1s_req_sn(uint8_t *buffer); int lark1s_parse_sn(uint8_t *buffer, int length, char *sn); int lark1s_req_gas3_info(uint8_t *buffer); int lark1s_parse_gas3_info(uint8_t *buffer, int length, struct lark1s_gas_info_s *info); +int lark1s_req_gas3_cali_data(uint8_t *buffer); +int lark1s_parse_gas3_cali_data(uint8_t *buffer, int length, struct lark1s_gas_cali_data_s *cali); int lark1s_req_data(uint8_t *buffer); int lark1s_parse_data(uint8_t *buffer, int length, struct lark1s_data_s *data); int lark1s_req_gas3_cali_zero_record(uint8_t *buffer, uint16_t type);