568 lines
20 KiB
C
568 lines
20 KiB
C
/****************************************************************************
|
|
|
|
Copyright(c) 2019 by Aerospace C.Power (Chongqing) Microelectronics. ALL RIGHTS RESERVED.
|
|
|
|
This Information is proprietary to Aerospace C.Power (Chongqing) Microelectronics and MAY NOT
|
|
be copied by any method or incorporated into another program without
|
|
the express written consent of Aerospace C.Power. This Information or any portion
|
|
thereof remains the property of Aerospace C.Power. The Information contained herein
|
|
is believed to be accurate and Aerospace C.Power assumes no responsibility or
|
|
liability for its use in any way and conveys no license or title under
|
|
any patent or copyright and makes no representation or warranty that this
|
|
Information is free from patent or copyright infringement.
|
|
|
|
****************************************************************************/
|
|
#ifndef IOT_PROTO_DL645_H
|
|
#define IOT_PROTO_DL645_H
|
|
|
|
#include "iot_grapp.h"
|
|
#include "iot_proto_common.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#pragma pack(push) // save the pack status
|
|
#pragma pack(1) // 1 byte align
|
|
|
|
/* frame start char definition */
|
|
#define PROTO_645_START_CHAR 0x68
|
|
|
|
/* frame end char definition */
|
|
#define PROTO_645_END_CHAR 0x16
|
|
|
|
#define PROTO_645_CONTROL_POS (8)
|
|
|
|
/* the second start char position */
|
|
#define PROTO_645_SECOND_HEAD_POS (7)
|
|
|
|
/* meter address read frame length for DL/T 645-2007 */
|
|
#define PROTO_645_2007_READ_DATA_PKT_LEN 16
|
|
|
|
/* data identification length for DL/T 645-2007 */
|
|
#define PROTO_645_2007_DI_LEN (4)
|
|
|
|
/* Message direction: master->slave */
|
|
#define PROTO_645_DIR_MASTER 0
|
|
|
|
/* Message direction: slave->master */
|
|
#define PROTO_645_DIR_SLAVE 1
|
|
|
|
/* control function code definition for DL/T 645-2007 */
|
|
/* for cco report sta join or leave */
|
|
#define PROTO_645_2007_FN_REPORT_STA_STATE 0x07
|
|
|
|
/* read data control */
|
|
#define PROTO_645_2007_FN_READ_DATA 0x11
|
|
|
|
/* read data have Subsequent data frames */
|
|
#define PROTO_645_2007_FN_READ_DATA_C 0x12
|
|
|
|
#define PROTO_645_2007_FN_READ_ADDR 0x13
|
|
|
|
#define PROTO_645_2007_FN_WRITE_DATA 0x14
|
|
|
|
#define PROTO_645_2007_ERR_OK 0
|
|
#define PROTO_645_2007_ERR_OTHER 0x01
|
|
|
|
/* Follow data flag: means following data available */
|
|
#define DL645_FOLLOW_AVAILABLE (1)
|
|
/* Follow data flag: means no following data */
|
|
#define DL645_FOLLOW_INVALID (0)
|
|
|
|
/* value of resv set to 2 means DL645 frame*/
|
|
#define DL645_07_RESV0_RESV 0x02
|
|
|
|
/* Invalid di */
|
|
#define PROTO_645_INVALID_DI (0xffffffffu)
|
|
|
|
#define DL645_PARSE_FRM_MIN_LEN (12)
|
|
#define DL645_PARSE_FRM_MAX_LEN (255 + DL645_PARSE_FRM_MIN_LEN)
|
|
#define DL645_PREB_DATA_LEN (4)
|
|
#define DL645_FRM_DATA_MAX_LEN (GE_FRM_MAX_LEN)
|
|
|
|
/* nack frame length for DL/T 645-2007 */
|
|
#define DL645_NACK_FRM_LEN (13)
|
|
/* ack frame length for DL/T 645-2007 */
|
|
#define DL645_ACK_FRM_LEN (12)
|
|
|
|
#define DL645_DI_LEN 4
|
|
|
|
/************ local command, not open to customers ***********/
|
|
/* close hardware watchdog */
|
|
#define DL645_07_DI_CLOSE_HW_WATCHDOG (0x07000001u)
|
|
/* enable ckq read mode to handle ckq reading 645 meter data */
|
|
#define DL645_07_DI_CKQ_READ_MODE_EN (0x07000002u)
|
|
/* read 645 meter data in cqk mode */
|
|
#define DL645_07_DI_CKQ_MODE_READ (0x07000003u)
|
|
/* read 645 edge start time、starting/stopping time
|
|
each overtime handle */
|
|
#define DL645_07_DI_EDGE_TIME_PARAM_INNER (0x07000004u)
|
|
|
|
/*************************************************************/
|
|
|
|
/************ local command, open to customers ***************/
|
|
/* trans dl645 */
|
|
#define DL645_07_DI_DL645_TYPE (0x0800000Au)
|
|
/* trans modbus */
|
|
#define DL645_07_DI_MODBUS_TYPE (0x0800000Bu)
|
|
/* set/query uart config param */
|
|
#define DL645_07_DI_UART_PARAM (0x08000010u)
|
|
/* conrol voltage output */
|
|
#define DL645_07_DI_CTRL_VOUT (0x08000011u)
|
|
/* query device boot information */
|
|
#define DL645_07_DI_QUERY_BOOT_INFO (0x08000012u)
|
|
/* read monitor signal open/close */
|
|
#define DL645_07_DI_READ_MONITOR_SIGNAL (0x08000013u)
|
|
/* get delaytime */
|
|
#define DL645_07_DI_DELAYTIME (0x08000016u)
|
|
/* set/query edge interval time and overtime */
|
|
#define DL645_07_DI_EDGE_TIME_PARAM (0x08000020u)
|
|
/* query edge cmd count */
|
|
#define DL645_07_DI_QUERY_EDGE_CMD_CNT (0x08000021u)
|
|
/* set/query edge 645 cmd */
|
|
#define DL645_07_DI_EDGE_645_MIN_CMD (0x08000022u)
|
|
/* set/query edge 645 cmd */
|
|
#define DL645_07_DI_EDGE_645_MAX_CMD (0x0800002Bu)
|
|
/* set/query edge MODBUS cmd */
|
|
#define DL645_07_DI_EDGE_MODBUS_MIN_CMD (0x08000040u)
|
|
/* set/query edge MODBUS cmd */
|
|
#define DL645_07_DI_EDGE_MODBUS_MAX_CMD (0x08000049u)
|
|
/* set/query edge cmd buadrate */
|
|
#define DL645_07_DI_EDGE_CMD_BAUD (0x08000050u)
|
|
|
|
/*************************************************************/
|
|
|
|
#define DL645_ERR_OK (0)
|
|
#define DL645_ERR_OTHER_ERROR (0x1 << 0)
|
|
#define DL645_ERR_NO_REQ_DATA (0x1 << 1)
|
|
#define DL645_ERR_PARAMETER_ERROR (0x1 << 3)
|
|
|
|
#define DL645_LOCALMODE_CACHE_MAX_NUM (6)
|
|
|
|
#define HPLC_3P0_JY_EN_OUT12V_PIN (22)
|
|
#define HPLC_3P0_JY_EN_OUT3V3_PIN (23)
|
|
#define HPLC_3P0_JY_MONITOR_PIN (9)
|
|
#define HPLC_3P0_JY_HW_WDG_PIN (28)
|
|
|
|
/* to calc adc volt to rela data */
|
|
#define HPLC_3P0_JY_VOUT12V_RATE (11)
|
|
#define HPLC_3P0_JY_VOUT3V3_RATE (2)
|
|
|
|
#define HPLC_3P0_JY_VOUT_ON 0xAA
|
|
#define HPLC_3P0_JY_VOUT_OFF 0x55
|
|
#define HPLC_3P0_JY_INVALID_VOL 0xFF
|
|
|
|
#define HPLC_3P0_JY_MONITOR_OPEN 0xAA
|
|
#define HPLC_3P0_JY_MONITOR_CLOSE 0x55
|
|
|
|
#define HPLC_3P0_JY_CLOSE_HW_WDG 0x55
|
|
|
|
#define proto_645_2007_di_to_byte(di, ptr) \
|
|
do { \
|
|
((uint8_t *)(ptr))[3] = (uint8_t)((di) >> 24); \
|
|
((uint8_t *)(ptr))[2] = (uint8_t)((di) >> 16); \
|
|
((uint8_t *)(ptr))[1] = (uint8_t)((di) >> 8); \
|
|
((uint8_t *)(ptr))[0] = (uint8_t)((di) & 0xff); \
|
|
} while(0)
|
|
|
|
#define proto_645_2007_byte_to_di(ptr, di) \
|
|
do { \
|
|
di = (((uint8_t *)(ptr))[3] << 24) + \
|
|
(((uint8_t *)(ptr))[2] << 16) + \
|
|
(((uint8_t *)(ptr))[1] << 8) + \
|
|
((uint8_t *)(ptr))[0]; \
|
|
} while(0)
|
|
|
|
#define iot_sta_check_extend_645_di(di) \
|
|
((di == DL645_07_DI_DL645_TYPE) || (di == DL645_07_DI_MODBUS_TYPE))
|
|
/* no local cmd now */
|
|
/* TO DO */
|
|
#define iot_sta_check_local_645_di(di) \
|
|
((di == DL645_07_DI_UART_PARAM) || \
|
|
(di == DL645_07_DI_CTRL_VOUT) || \
|
|
(di == DL645_07_DI_QUERY_BOOT_INFO) || \
|
|
(di == DL645_07_DI_READ_MONITOR_SIGNAL) || \
|
|
(di == DL645_07_DI_CLOSE_HW_WATCHDOG) || \
|
|
(di == DL645_07_DI_EDGE_TIME_PARAM) || \
|
|
(di == DL645_07_DI_QUERY_EDGE_CMD_CNT) || \
|
|
((di >= DL645_07_DI_EDGE_645_MIN_CMD) && \
|
|
(di <= DL645_07_DI_EDGE_645_MAX_CMD)) || \
|
|
((di >= DL645_07_DI_EDGE_MODBUS_MIN_CMD) && \
|
|
(di <= DL645_07_DI_EDGE_MODBUS_MAX_CMD)) || \
|
|
(di == DL645_07_DI_EDGE_CMD_BAUD) || \
|
|
(di == DL645_07_DI_EDGE_TIME_PARAM_INNER))
|
|
|
|
#define iot_sta_check_local_mode_645_di(di) \
|
|
(di == DL645_07_DI_CKQ_MODE_READ)
|
|
|
|
enum proto_645_local_mode_state_e {
|
|
DL645_LOCAL_MODE_INIT = 0,
|
|
DL645_LOCAL_MODE_STARTED = 1
|
|
};
|
|
|
|
typedef struct _proto_645_ctrl
|
|
{
|
|
/* function code. see PROTO645_2007(1997)_FN_XXX */
|
|
uint8_t fn :5,
|
|
/* 0 means no following data. 1 means following data available.
|
|
* see PROTO_645_FOLLOW_XXX
|
|
*/
|
|
follow :1,
|
|
/* 0 means normal ack. 1 means abnormal ack.
|
|
* see PROTO_645_ACK_XXX
|
|
*/
|
|
ack :1,
|
|
/* direction. 1 means from primary to secondary. 0 means from secondary
|
|
* to primary,see PROTO_645_DIR_XXX
|
|
*/
|
|
dir :1;
|
|
} proto_645_ctrl_t;
|
|
|
|
typedef struct _proto_645_set_uart_param_t
|
|
{
|
|
/* di */
|
|
uint32_t di;
|
|
/* password */
|
|
uint32_t passwd;
|
|
uint32_t user_code;
|
|
uint32_t baudrate;
|
|
uint8_t parity;
|
|
uint8_t data_bit;
|
|
uint8_t stop_bit;
|
|
} proto_645_set_uart_param_t;
|
|
|
|
typedef struct _proto_645_resp_uart_param_t
|
|
{
|
|
/* di */
|
|
uint32_t di;
|
|
uint32_t baudrate;
|
|
uint8_t parity;
|
|
uint8_t data_bit;
|
|
uint8_t stop_bit;
|
|
} proto_645_resp_uart_param_t;
|
|
|
|
typedef struct _proto_645_write_vout_param_t
|
|
{
|
|
/* di */
|
|
uint32_t di;
|
|
/* password */
|
|
uint32_t passwd;
|
|
uint32_t user_code;
|
|
uint8_t v3p3_on_off;
|
|
uint8_t v12_on_off;
|
|
} proto_645_write_vout_param_t;
|
|
|
|
typedef struct _proto_645_resp_vol_info_t
|
|
{
|
|
/* di */
|
|
uint32_t di;
|
|
uint8_t v3p3_on_off;
|
|
/* unit: 100mv */
|
|
uint8_t v3p3_vol;
|
|
uint8_t v12_on_off;
|
|
/* unit: 100mv */
|
|
uint8_t v12_vol;
|
|
} proto_645_resp_vol_info_t;
|
|
|
|
typedef struct _proto_645_resp_boot_info_t
|
|
{
|
|
/* di */
|
|
uint32_t di;
|
|
uint32_t total_boot_cnt;
|
|
uint8_t last_reboot_reason;
|
|
} proto_645_resp_boot_info_t;
|
|
|
|
typedef struct _proto_645_resp_monitor_signal_t
|
|
{
|
|
/* di */
|
|
uint32_t di;
|
|
uint8_t signal;
|
|
} proto_645_resp_monitor_signal_t;
|
|
|
|
typedef struct _proto_645_close_hw_wdg_t
|
|
{
|
|
/* di */
|
|
uint32_t di;
|
|
/* password */
|
|
uint32_t passwd;
|
|
uint32_t user_code;
|
|
uint8_t close_wdg;
|
|
uint8_t src_mac[IOT_MAC_ADDR_LEN];
|
|
} proto_645_close_hw_wdg_t;
|
|
|
|
typedef struct _proto_645_set_edge_time_t
|
|
{
|
|
/* di */
|
|
uint32_t di;
|
|
/* password */
|
|
uint32_t passwd;
|
|
uint32_t user_code;
|
|
/* unit:ms */
|
|
uint16_t cmd_inverval;
|
|
/* unit:ms */
|
|
uint16_t cmd_tol_tm;
|
|
} proto_645_set_edge_time_t;
|
|
|
|
typedef struct _edge_inner_time_info_t
|
|
{
|
|
/* delay time for starting polling */
|
|
uint16_t edge_start_tm;
|
|
/* time for starting and stopping state delay */
|
|
uint16_t cmd_starting_stopping_tm;
|
|
/* for each uart rx wait time */
|
|
uint16_t cmd_each_tm;
|
|
} edge_inner_time_info_t;
|
|
|
|
typedef struct _proto_645_set_edge_time_inner_t
|
|
{
|
|
/* di */
|
|
uint32_t di;
|
|
/* password */
|
|
uint32_t passwd;
|
|
uint32_t user_code;
|
|
edge_inner_time_info_t time_info;
|
|
} proto_645_set_edge_time_inner_t;
|
|
|
|
typedef struct _proto_645_edge_dev_cmd_t
|
|
{
|
|
/* di */
|
|
uint32_t di;
|
|
/* password */
|
|
uint32_t passwd;
|
|
uint32_t user_code;
|
|
uint8_t data[0];
|
|
} proto_645_edge_dev_cmd_t;
|
|
|
|
typedef struct _parse_645_data_t
|
|
{
|
|
uint16_t frm_len;
|
|
uint16_t data_len;
|
|
uint16_t pos;
|
|
/* control code */
|
|
uint8_t control;
|
|
/* di */
|
|
uint32_t di;
|
|
/* checksum */
|
|
uint8_t cs;
|
|
uint8_t mac[IOT_MAC_ADDR_LEN];
|
|
uint32_t passwd;
|
|
uint32_t user_code;
|
|
uint8_t data[0];
|
|
} parse_645_data_t;
|
|
|
|
typedef struct _proto_645_header {
|
|
/* start char, see 645_START_CHAR */
|
|
uint8_t start_char_1;
|
|
/* target mac address */
|
|
uint8_t addr[IOT_MAC_ADDR_LEN];
|
|
/* start char, see 645_START_CHAR */
|
|
uint8_t start_char_2;
|
|
/* control code */
|
|
proto_645_ctrl_t control;
|
|
/* data length */
|
|
uint8_t len;
|
|
/* data */
|
|
uint8_t data[0];
|
|
} proto_645_header_t;
|
|
|
|
typedef struct _proto_645_tailer
|
|
{
|
|
/* check sum */
|
|
uint8_t cs;
|
|
/* end char. see 645_END_CHAR */
|
|
uint8_t end_char;
|
|
} proto_645_tailer_t;
|
|
|
|
typedef struct _proto_645_localmode_data
|
|
{
|
|
/* di */
|
|
uint32_t di;
|
|
/* mac address */
|
|
uint8_t mac[IOT_MAC_ADDR_LEN];
|
|
/* record the data from meter*/
|
|
uint8_t data[DL645_PARSE_FRM_MAX_LEN];
|
|
} proto_645_localmode_data_t;
|
|
|
|
typedef struct _proto_645_localmode_data_cache
|
|
{
|
|
uint8_t head;
|
|
uint8_t tail;
|
|
proto_645_localmode_data_t meter_data[DL645_LOCALMODE_CACHE_MAX_NUM];
|
|
} proto_645_localmode_data_cache_t;
|
|
|
|
typedef struct _devtest_645_cmd_cache
|
|
{
|
|
/* if the cmd is valid or not */
|
|
uint8_t cmd_valid;
|
|
/* buffer to hold 645 cmd */
|
|
uint8_t cmd_buf[DL645_PARSE_FRM_MAX_LEN];
|
|
/* destination mac address */
|
|
uint8_t dst_mac[IOT_MAC_ADDR_LEN];
|
|
} devtest_645_cmd_cache_t;
|
|
|
|
#pragma pack(pop)
|
|
|
|
uint8_t iot_proto_645_calc_cs(proto_645_header_t *hdr);
|
|
|
|
/* creat frame to query mac */
|
|
void iot_proto_dl645_read_addr(uint8_t *data);
|
|
|
|
/**
|
|
* @brief iot_proto_645_format_check() - To pickup DL645 frames from a buffer
|
|
* @param recv_data: point to the buffer data
|
|
* @param pdata: point to ge data get the struct which will reseive the
|
|
ge frames
|
|
* @param ret_size: point to the data length of ge_buf, if a dl645 frame is
|
|
checked, the data length of ge_buf should add the frame
|
|
length.
|
|
* @ge_len_out: point to the ge length if it exist
|
|
* @retval: - check result, GET_NO_FRAME, GET_ONE_FRAME or
|
|
GET_HALF_FRAME
|
|
*/
|
|
uint8_t iot_proto_645_format_check(mcu_data_handle_t *recv_data,
|
|
uint8_t *pdata, uint16_t *ret_size, uint16_t *ge_len_out);
|
|
|
|
/**
|
|
* @brief iot_pack_dl645_to_ge() - To pack a dl645 frame into a ge FEA0 frame,
|
|
then sned to plc
|
|
* @param data_input: point to the data frame, dl645, if the value is NULL,
|
|
need not to copy the dl645 data to ge data field
|
|
* @param pdata: point to the ge data buffer
|
|
* @param data_len: point the data length of input frame
|
|
when output means length of the ge frame
|
|
* @param mac: point to the destination mac
|
|
* @param b_conless: tx type of ge frame, connless or not
|
|
*/
|
|
void iot_pack_dl645_to_ge(uint8_t* data_input, uint8_t *pdata,
|
|
uint16_t *data_len, uint8_t* mac, bool_t b_conless);
|
|
|
|
/**
|
|
* @brief iot_proto_645_frm_format_check() check the data is 645 frame or not.
|
|
* @param data: point to the data
|
|
* @param len: len of the data
|
|
* @param integrity the integrity of 645 frm, see
|
|
proto_check_frame_result_e
|
|
* @param retval: 0:645 frame,others:not 645 frame
|
|
*/
|
|
uint8_t iot_proto_645_frm_format_check(uint8_t *data, uint16_t len,
|
|
uint8_t *integrity);
|
|
|
|
#if PLC_SUPPORT_STA_ROLE
|
|
/**
|
|
* @brief iot_proto_pack_data_to_dl645() - To pack data into a dl645 frame,
|
|
* @param data_input: point to the data frame to be packed
|
|
* @param dl645_data: point to the output dl645 data buffer
|
|
* @param data_len: point the data length of input frame
|
|
when output means length of the dl645 frame
|
|
* @param di: di of dl645 frame
|
|
* @param mac: mac of dl645 frame
|
|
* @param fn: fn of dl645 frame
|
|
* @param dir: dir of dl645 frame
|
|
*/
|
|
void iot_proto_pack_data_to_dl645(uint8_t *data_input, uint8_t *dl645_data,
|
|
uint16_t *data_len, uint32_t di, uint8_t *mac, uint8_t fn, uint8_t dir);
|
|
|
|
/**
|
|
* @brief iot_handle_ge_to_dl645() - check the FEA0 frame is include a
|
|
collector ii or not, if exist, pick the
|
|
collector ii dl645 or modbus frame out, if
|
|
it is not exist, pick the dl645 frame out.
|
|
* @param data_input: point to the FEA0 frame witch need to be check, if dl645
|
|
or modbus frame exist, copy the modbus or dl645 frame
|
|
to the head of data_output
|
|
* @param data_output: point to the position the dl645 frame should copy to
|
|
* @retval: the data length of unpacked frame
|
|
*/
|
|
uint8_t iot_handle_ge_to_dl645(uint8_t *data_input, uint8_t *data_output);
|
|
|
|
/**
|
|
* @brief iot_sta_pack_extend_dl645_to_ge() - To pack a dl645 or modbus frame
|
|
into a dl645 frame, then pack the
|
|
dl645 frame into a ge frame
|
|
* @param data_input: point to the data frame, dl645 or modbus frame
|
|
* @param ge_data: point to the ge data
|
|
* @param data_len: when input means length of the dl645 or modbus frame
|
|
when output means length of the ge frame
|
|
* @param protcotype: type of data MODBUS or DL645.
|
|
MODBUS - DI1-DI4 will be 0x0800000B
|
|
DL645 - DI1-DI4 will be 0x0800000A
|
|
* @return: err or not
|
|
*/
|
|
uint8_t iot_sta_pack_extend_dl645_to_ge(uint8_t *data_input,
|
|
uint8_t *ge_data, uint16_t *data_len, uint8_t protcotype);
|
|
|
|
/**
|
|
* @brief iot_proto_645_local_mode_timer_handler() - To get out the 645 local
|
|
read mode and clear the cache
|
|
*/
|
|
void iot_proto_645_local_mode_timer_handler(void);
|
|
|
|
#else
|
|
|
|
/**
|
|
* @brief iot_handle_cco_delay_tm_pack_ge_to_dl645() - cco handle the delay time
|
|
message from plc
|
|
* @param data_input: data in ptr
|
|
* @param data_output: data out ptr
|
|
* @return: dl645 frm len
|
|
*/
|
|
uint8_t iot_handle_cco_delay_tm_pack_ge_to_dl645(uint8_t *data_input,
|
|
uint8_t *data_output);
|
|
|
|
#endif /* PLC_SUPPORT_STA_ROLE */
|
|
|
|
void iot_proto_645_header_init(proto_645_header_t *hdr,
|
|
uint8_t *addr, uint8_t fn, uint8_t dir, uint8_t ack, uint8_t follow);
|
|
|
|
void iot_proto_645_tail_init(proto_645_header_t *hdr);
|
|
|
|
/**
|
|
* @brief iot_proto_edge_msg_output_msg_handler() - proto handle the message from
|
|
edge
|
|
* @param msg_id: the message id
|
|
* @param arg: the msg
|
|
*/
|
|
void iot_proto_edge_msg_output_msg_handler(uint8_t msg_id, void *arg);
|
|
|
|
/**
|
|
* @brief iot_proto_645_ext_sub33_handle() - sub 0x33 of the every data in the
|
|
* 645 protocol data field.
|
|
* @param ds: pointer to data field.
|
|
* @param size: length of data field.
|
|
*/
|
|
void iot_proto_645_ext_sub33_handle(uint8_t *ds, uint32_t size);
|
|
|
|
/**
|
|
* @brief iot_proto_645_ext_add33_handle() - add 0x33 of the every data in the
|
|
* 645 protocol data field.
|
|
* @param ds: pointer to data field.
|
|
* @param size: length of data field.
|
|
*/
|
|
void iot_proto_645_ext_add33_handle(uint8_t *ds, uint32_t size);
|
|
|
|
/**
|
|
* @brief iot_proto_645_get_di_by_sub33() - get di from a 645 frame.
|
|
* @param data: pointer to data field of 645 frame.
|
|
* @param len: length of data field.
|
|
* @param di: di of 645 frame.
|
|
*/
|
|
uint32_t iot_proto_645_get_di_by_sub33(uint8_t *data, uint8_t len, uint32_t *di);
|
|
|
|
/**
|
|
* @brief iot_proto_645_build_resp_msg() dl645 pack response frame.
|
|
* @param hdr: point to data which should pack a frame.
|
|
* @param in_data: to fill in the data of 645 fram
|
|
* @param len: in_data len
|
|
* @param reason: error reason, 0 is no error
|
|
* @param fn: function control code
|
|
*/
|
|
void iot_proto_645_build_resp_msg(proto_645_header_t *hdr,
|
|
uint8_t *in_data, uint8_t len, uint8_t reason, uint8_t fn);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* end IOT_PROTO_DL645_H */
|