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
 | |
| 
 |