350 lines
13 KiB
C
Executable File
350 lines
13 KiB
C
Executable File
/****************************************************************************
|
|
|
|
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_PLC_DEV_TEST_H
|
|
#define _IOT_PLC_DEV_TEST_H
|
|
|
|
#include "iot_task_api.h"
|
|
#include "iot_proto_dev_test.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#define UART_0_BAUD_RATE 9600
|
|
|
|
/* define how many uart's baudrate is supported */
|
|
#define SUPPORTED_BAUD_CNT 4
|
|
/* default uart baudrate' index: 9600 */
|
|
#define DEFAULT_BAUDRATE_INDEX 2
|
|
/* define CKQ operation mode */
|
|
typedef enum {
|
|
IOT_DEV_TEST_APP_MODE_M2S = 0,
|
|
IOT_DEV_TEST_APP_MODE_M2M = 1,
|
|
IOT_DEV_TEST_APP_MODE_MAX
|
|
} iot_dev_test_app_mode;
|
|
|
|
/* indicate how long the collector's mac is vailid, unit: 250ms */
|
|
#define IOT_DEV_TEST_COLLECTOR_VAILID_CNT 80
|
|
/* indicate whether clear the clollector's mac automaticly or not */
|
|
#define IOT_DEV_TEST_COLLECTOR_AUTO_CLR 0
|
|
|
|
/* define flag to indicate switch to m2m mode or not */
|
|
#define IOT_DEV_TEST_M2M_MODE_SWITCH_DISABLE 0
|
|
#define IOT_DEV_TEST_M2M_MODE_SWITCH_ENABLE 1
|
|
|
|
/* indicate build CIU_TESTER or CIU */
|
|
#define IOT_DEV_TEST_BUILD_CIU_TESTER 0
|
|
/* indicate whether the dev_test support mutiband or not */
|
|
#define IOT_DEV_TEST_SUPPORT_MUTIBAND 0
|
|
/* indicate how to send mode cfg, broadcast or unicast,
|
|
* in HX's application, this should be 0
|
|
*/
|
|
#define IOT_DEV_TEST_BROADCAST_MODD_CFG 1
|
|
/* indicate whether the dev_test support pushed-data or not */
|
|
#define IOT_DEV_TEST_HANDLE_PUSH_DATA_EN 0
|
|
/* enable or disable to read the meter which belongs to the collector */
|
|
#define IOT_DEV_TEST_SUPPORT_CT_MR_EN 0
|
|
|
|
/* define flag indicating local m2m sub mode */
|
|
#define IOT_DEV_TEST_M2M_SUBMODE_CIU 0
|
|
#define IOT_DEV_TEST_M2M_SUBMODE_CIUTESTER 1
|
|
|
|
/* define flag to indicate CKQ addr is set or not */
|
|
#define IOT_DEV_TEST_ADDR_NOT_SET 0
|
|
#define IOT_DEV_TEST_ADDR_SET 1
|
|
|
|
/* define flag to indicate succeed to query CIU addr or not*/
|
|
#define IOT_DEV_TEST_QUERY_CIU_ADDR_FAIL 0
|
|
#define IOT_DEV_TEST_QUERY_CIU_ADDR_SUCC 1
|
|
|
|
/* define priorities for message to be handle */
|
|
#define IOT_DEV_TEST_TASK_QUEUE_HP 0
|
|
#define IOT_DEV_TEST_TASK_QUEUE_LP 1
|
|
#define IOT_DEV_TEST_TASK_QUEUE_MAX_PRIO 2
|
|
|
|
#define IOT_DEV_TEST_TASK_LINK_ID 2
|
|
#define IOT_DEV_TEST_TASK_POOL_SIZE 128
|
|
|
|
/* message type */
|
|
#define IOT_DEV_TEST_MAC_MSG 0
|
|
#define IOT_DEV_TEST_TIMER_MSG 1
|
|
#define IOT_DEV_TEST_UART_RECV_MSG 2
|
|
|
|
/* message id for timer */
|
|
#define IOT_DEV_TEST_TIMER_CHECK 1 /* check cache data in buffer */
|
|
#define IOT_DEV_TEST_TIMER_QUERY_ADDR 2 /* query addr at m2m ciu mode */
|
|
|
|
/* check cache data in sendq interval, unit is ms */
|
|
#define IOT_DEV_TEST_PERIODIC_TIMER_INTERVAL (250)
|
|
/* count for boardcast sta connection_less's mode config interval */
|
|
#define IOT_DEV_TEST_BCAST_TIMER_CNT 4
|
|
/* max life-span cnt, which decide how long will the buff keep the frame info */
|
|
#define IOT_DEV_TEST_MAX_LIFE_SPAN_CNT 24
|
|
/* parameter sent to sta for meter reading timeout config, uint is 100ms */
|
|
#define IOT_DEV_TEST_CFG_MR_TIMEOUT 16
|
|
|
|
/* query interval when query addr at m2m ciu mode, unit is ms */
|
|
#define IOT_DEV_TEST_QUERY_ADDR_TIMER_INTERVAL (1000)
|
|
/* max cnt for querying ciu addr at m2m ciu mode */
|
|
#define IOT_DEV_TEST_QUERY_ADDR_CNT_MAX 3
|
|
|
|
/* Macro to define msdu pkt pool number*/
|
|
#define IOT_DEV_TEST_POOL_NUM 8
|
|
/* UART received buffer size */
|
|
#define IOT_DEV_TEST_UART_RECV_BUF_SIZE 512
|
|
/* sta control configuring effective duration, unit is sec */
|
|
#define IOT_DEV_TEST_MODE_CFG_DUR 30
|
|
|
|
/* uart frame protocal */
|
|
#define IOT_DEV_TEST_PROTO_TYPE_TRANSPARENT 0
|
|
#define IOT_DEV_TEST_PROTO_TYPE_645_1997 1
|
|
#define IOT_DEV_TEST_PROTO_TYPE_645_2007 2
|
|
#define IOT_DEV_TEST_PROTO_TYPE_69845 3
|
|
|
|
/* define target device type ID */
|
|
#define IOT_DEV_TEST_TARGET_ID_CCO 0
|
|
#define IOT_DEV_TEST_TARGET_ID_STA 1
|
|
/* lenth of data buffer for DL/T 645-2007 cmd handling */
|
|
#define IOT_DEV_TEST_DATA_BUFF_LEN 200
|
|
|
|
/* defining target device type identifier mask */
|
|
#define IOT_DEV_TEST_TARGET_ID_MSK_CCO \
|
|
(1 << IOT_DEV_TEST_TARGET_ID_CCO)
|
|
#define IOT_DEV_TEST_TARGET_ID_MSK_STA \
|
|
(1 << IOT_DEV_TEST_TARGET_ID_STA)
|
|
|
|
/* rerty invterval , unit is IOT_DEV_TEST_PERIODIC_TIMER_INTERVAL */
|
|
#define IOT_DEV_TEST_APP_MAX_RETRY_INTV_CNT 4
|
|
|
|
/* magic code in flash head */
|
|
#define IOT_DEV_TEST_FLASHINFO_MAGIC1 0xAA55AA55
|
|
/* magic code in flash tail */
|
|
#define IOT_DEV_TEST_FLASHINFO_MAGIC2 0x55AA55AA
|
|
|
|
/* max retry count for sending bootup indication */
|
|
#define IOT_DEV_TEST_BOOT_IND_RETRY_MAX_CNT 3
|
|
/* retry interval for sending bootup indication, uint: 250ms */
|
|
#define IOT_DEV_TEST_BOOT_IND_RETRY_INTV 4
|
|
|
|
/* reserved flash size for future usage */
|
|
#define IOT_DEV_TEST_RESVD_FLASH_SIZE 55
|
|
|
|
#pragma pack(push) /* save the pack status */
|
|
#pragma pack(1) /* 1 byte align */
|
|
|
|
/* writable section layout in PIB */
|
|
typedef struct _iot_dev_test_pib_t {
|
|
/* 0xAA55AA55, the head of this struct */
|
|
uint32_t magic1;
|
|
/* mac addr for push-data filter */
|
|
uint8_t match_mac[IOT_MAC_ADDR_LEN];
|
|
/* counter of bootup */
|
|
uint8_t boot_cnt;
|
|
/* UART baudrate index */
|
|
uint8_t baud_index;
|
|
/* flag to mark if fix_ppm valid */
|
|
uint8_t ppm_valid : 1,
|
|
/* flag to mark if tool_ppm valid */
|
|
tool_ppm_valid : 1,
|
|
/* reserved for future usage */
|
|
rsvd : 6;
|
|
/* ppm value to be fixing */
|
|
int8_t fix_ppm;
|
|
/* target device address for ppm value */
|
|
uint8_t ppm_target_mac[IOT_MAC_ADDR_LEN];
|
|
/* ppm value from tool */
|
|
int8_t tool_ppm;
|
|
/* reserved for future usage */
|
|
uint8_t resv[IOT_DEV_TEST_RESVD_FLASH_SIZE];
|
|
/* 0x55AA55AA, the tail of this struct */
|
|
uint32_t magic2;
|
|
} iot_dev_test_pib_t;
|
|
|
|
#pragma pack(pop) /* restore the pack status */
|
|
|
|
/* store the frame and infor extracted from the frame */
|
|
typedef struct _frame_pkt_t {
|
|
/* msdu sequnce number */
|
|
uint16_t app_sn;
|
|
/* dst meter addresss */
|
|
uint8_t dst_mac[IOT_MAC_ADDR_LEN];
|
|
/* type of protocol, see CONN_LESS_PROTO_TYPE_XXX */
|
|
uint8_t p_type;
|
|
/* flag to mark if app_sn valid */
|
|
uint8_t sn_valid :1,
|
|
/* flag to mark if this package is used for ppm detect. */
|
|
ppm_detect :1,
|
|
/* reserved for future usage */
|
|
rsvd :6;
|
|
/* full 645/698 frame */
|
|
iot_pkt_t *data;
|
|
} frame_pkt_t;
|
|
|
|
/* frame infor extracted from the frame */
|
|
typedef struct _frame_info_t {
|
|
/* life-span counter */
|
|
uint16_t span_cnt;
|
|
/* msdu been sent counter, 0 means the buffer is not used */
|
|
uint8_t send_cnt;
|
|
/* frame data and releated infor */
|
|
frame_pkt_t frm;
|
|
} frame_info_t;
|
|
|
|
/* frame infor pool */
|
|
typedef struct _info_pool_t {
|
|
/* how many buffers are not used */
|
|
uint8_t remain_cnt;
|
|
/* infor extracted from the frame */
|
|
frame_info_t frm_info[IOT_DEV_TEST_POOL_NUM];
|
|
} info_pool_t;
|
|
|
|
/* ppm detect record info */
|
|
typedef struct _iot_dev_test_ppm_detect_info {
|
|
/* massage seq number */
|
|
uint16_t sn;
|
|
/* ppm for send */
|
|
int8_t fix_ppm;
|
|
} iot_dev_test_ppm_detect_info_t;
|
|
|
|
typedef struct _iot_dev_test_msg {
|
|
/* standard iot_task message */
|
|
iot_task_msg_t msg;
|
|
/* pointer to message data */
|
|
void *data;
|
|
}iot_dev_test_task_msg_t;
|
|
|
|
/* define ppm detect message info record buffer depth */
|
|
#define IOT_DEV_TEST_PPM_DETECT_REC_MAX 10
|
|
|
|
/* define PPM detect state */
|
|
#define PPM_DETECT_STATE_IDLE 0
|
|
#define PPM_DETECT_STATE_DONE 1
|
|
#define PPM_DETECT_STATE_DOING 2
|
|
|
|
/* define ppm detect step */
|
|
#define PPM_DETECT_STEP_VALUE 5
|
|
#define PPM_DETECT_STEP_MAX_CNT 4
|
|
|
|
/* ppm detect control descriptor */
|
|
typedef struct _iot_dev_test_ppm_detec_desc {
|
|
/* target address of the ppm detect */
|
|
uint8_t ppm_target_mac[IOT_MAC_ADDR_LEN];
|
|
/* pm value detected */
|
|
int8_t fix_ppm;
|
|
/* ppm detect state */
|
|
uint8_t ppm_detect_state;
|
|
/* ppm detect message info record buffer */
|
|
iot_dev_test_ppm_detect_info_t ppm_detect_rec[\
|
|
IOT_DEV_TEST_PPM_DETECT_REC_MAX];
|
|
/* update index for ppm_detect_rec */
|
|
uint8_t ppm_detect_rec_idx;
|
|
/* the number of valid information in "ppm_detect_rec" buffer */
|
|
uint8_t ppm_detect_rec_cnt;
|
|
/* detecting ppm index */
|
|
uint8_t ppm_detect_cnt;
|
|
} iot_dev_test_ppm_detec_desc_t;
|
|
|
|
typedef struct _iot_dev_test_task_data {
|
|
/* app sending sequnce number for msdu */
|
|
uint16_t app_sn;
|
|
/* sequence number for pushed-data pkt */
|
|
uint16_t pushed_seq;
|
|
/* sequence number for config data */
|
|
uint16_t config_seq;
|
|
/* handle of the ping iot_task */
|
|
iot_task_h task_handle;
|
|
/* a flag indicating if app registered successfully */
|
|
uint8_t app_registered;
|
|
/* link id used for sending msdu */
|
|
uint8_t link_id;
|
|
/* tx link type, see IOT_DEV_TEST_LINK_TYPE_XX */
|
|
uint8_t tx_link_type;
|
|
/* indication for device is ready for data transmition or not */
|
|
uint8_t dev_ready;
|
|
/* device type */
|
|
uint8_t dev_type;
|
|
/* role of local device */
|
|
uint8_t dev_role;
|
|
/* operation mode of local device */
|
|
uint8_t dev_mode;
|
|
/* flag indicating m2m test mode or not */
|
|
uint8_t m2m_sub_mode;
|
|
/* user type */
|
|
uint8_t user_type;
|
|
/* mac address of local device */
|
|
uint8_t mac_addr[IOT_MAC_ADDR_LEN];
|
|
/* mac address of qsxj meter */
|
|
uint8_t qsxj_addr[IOT_MAC_ADDR_LEN];
|
|
/* flag indicate in m2m mode, check receive pkt dst mac with self */
|
|
uint8_t m2m_check_addr;
|
|
/* flag indicate in m2m ciu mode, succeed to query ciu addr or not */
|
|
uint8_t m2m_ciu_query_addr;
|
|
/* frequency band value, see PLC_LIB_FREQ_BAND_X */
|
|
uint8_t band_id;
|
|
/* flag to mark if ext configuration is enabled.
|
|
* 1 means enable, 0 means disable
|
|
*/
|
|
uint8_t ext_cfg_en;
|
|
/* ext configuration */
|
|
dev_test_ext_cfg_t ext_cfg;
|
|
/* handle of this app */
|
|
iot_plc_app_h app_handle;
|
|
/* timer to call api periodically */
|
|
timer_id_t periodic_tm;
|
|
/* timer to query ciu addr periodically */
|
|
timer_id_t query_addr_tm;
|
|
/* counter for querying addr at m2m ciu mode */
|
|
uint8_t query_addr_cnt;
|
|
/* com for upper host */
|
|
void* host_com;
|
|
/* frame infor pool */
|
|
info_pool_t info_pool;
|
|
/* record the pib section's address */
|
|
uint8_t *section;
|
|
/* flash info stored in PIB */
|
|
iot_dev_test_pib_t flashinfo;
|
|
/* flag to indicate sending bootup indication is enabled or not */
|
|
uint32_t boot_ind_en;
|
|
/* app SN for msdu data reporting's de-reprocessing*/
|
|
uint32_t stored_app_sn;
|
|
/* collector's address */
|
|
uint8_t collector[IOT_MAC_ADDR_LEN];
|
|
/* indicate whether the collector's address is vaild or not */
|
|
uint16_t collector_vaild :1,
|
|
/* indicate how long the collector's address will be vaild */
|
|
collector_vaild_cnt :15;
|
|
/* ppm ctrl desc */
|
|
iot_dev_test_ppm_detec_desc_t ppm_desc;
|
|
/* dlt645-2007 data buffer */
|
|
uint8_t data_buf[IOT_DEV_TEST_DATA_BUFF_LEN];
|
|
}iot_dev_test_task_data_t;
|
|
|
|
/*
|
|
* brief: entry for dev_test app
|
|
* @return:
|
|
* @retval: ERR_PENDING - if app want to delay the plc network formation.
|
|
* @retval: other - plc network formation will be started automatically.
|
|
*/
|
|
uint32_t app_dev_test_entry();
|
|
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif //_IOT_PLC_DEV_TEST_H
|
|
|