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