183 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			183 lines
		
	
	
		
			6.3 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_DEV_TEST_H
 | ||
|  | #define IOT_DEV_TEST_H
 | ||
|  | 
 | ||
|  | #include "iot_flashinfo.h"
 | ||
|  | 
 | ||
|  | #ifdef __cplusplus
 | ||
|  | extern "C" { | ||
|  | #endif
 | ||
|  | 
 | ||
|  | #define IOT_DEV_TEST_PRIO                           (7)
 | ||
|  | 
 | ||
|  | #if (IOT_PSRAM_ENABLE)
 | ||
|  | #define IOT_DEV_TEST_TASK_POOL_SIZE                 (128)
 | ||
|  | #else
 | ||
|  | #define IOT_DEV_TEST_TASK_POOL_SIZE                 (32)
 | ||
|  | #endif
 | ||
|  | 
 | ||
|  | /* define priorities for message to be handle */ | ||
|  | #define IOT_DEV_TEST_TASK_QUEUE_LP                  (0)
 | ||
|  | #define IOT_DEV_TEST_TASK_QUEUE_MAX_PRIO            (1)
 | ||
|  | 
 | ||
|  | /* message type host */ | ||
|  | #define DEV_TEST_MCU_RX_MSG                         (0)
 | ||
|  | /* message type plc */ | ||
|  | #define DEV_TEST_PLC_RX_MSG                         (1)
 | ||
|  | /* message type - timer */ | ||
|  | #define DEV_TEST_TIMER_MSG                          (2)
 | ||
|  | 
 | ||
|  | /* message id - timer for send mode config interval */ | ||
|  | #define DEV_TEST_TIMER_MODE_CONFIG_INTVL            (0)
 | ||
|  | /* message id - timer for ckq mode cmd interval */ | ||
|  | #define DEV_TEST_TIMER_CKQ_CMD_INTVL                (1)
 | ||
|  | /* message id - timer for ckq mode timeout */ | ||
|  | #define DEV_TEST_TIMER_CKQ_TIMEOUT                  (2)
 | ||
|  | 
 | ||
|  | #define DEV_TEST_TMR_MODE_CFG_INTVL                 (1000)     //unit ms
 | ||
|  | #define DEV_TEST_TMR_CKQ_CMD_INTVL                  (500)      //unit ms
 | ||
|  | #define DEV_TEST_TMR_CKQ_TIMEOUT_INTVL              (1000)     //unit ms
 | ||
|  | 
 | ||
|  | #define DEV_TEST_DEFAULT_FRQ_BAND                   PLC_LIB_FREQ_BAND_1
 | ||
|  | /*
 | ||
|  |   the duration of test mode, ckq config it to dut, dut will get in test | ||
|  |   mode by this duration, unit is second | ||
|  | */ | ||
|  | #define DEV_TEST_DEFAULT_MODE_CFG_DUR               (30)
 | ||
|  | 
 | ||
|  | #define DEV_TEST_UNICAST_RETRY_DEFAULT_CNT          (1)
 | ||
|  | 
 | ||
|  | /* define target device type ID */ | ||
|  | #define DEV_TEST_TARGET_ID_CCO                      (0)
 | ||
|  | #define DEV_TEST_TARGET_ID_STA                      (1)
 | ||
|  | 
 | ||
|  | /* defining target device type identifier mask */ | ||
|  | #define DEV_TEST_TARGET_ID_MSK_CCO                  (1 << DEV_TEST_TARGET_ID_CCO)
 | ||
|  | #define DEV_TEST_TARGET_ID_MSK_STA                  (1 << DEV_TEST_TARGET_ID_STA)
 | ||
|  | 
 | ||
|  | #define DEV_TEST_MODULE_MAGIC_KEY                   (0x78ab5434)
 | ||
|  | 
 | ||
|  | #define IOT_DEV_TEST_LOG_BUF_LEN                    (384)
 | ||
|  | 
 | ||
|  | #define IOT_DEV_TEST_UART_BAUD_IDX_9600             (1)
 | ||
|  | 
 | ||
|  | typedef struct _dev_test_message_t | ||
|  | { | ||
|  |     iot_task_msg_t  msg;    /* The main entity of message. */ | ||
|  |     void            *data;  /* The pointer of message. */ | ||
|  | }dev_test_msg_t; | ||
|  | 
 | ||
|  | #pragma pack(push)  // save the pack status
 | ||
|  | #pragma pack(1)     // 1 byte align
 | ||
|  | 
 | ||
|  | typedef struct _protpkt_list                protpkt_list_t; | ||
|  | typedef struct _plctxrx_rx_data_info_t      plctxrx_rx_data_info_t; | ||
|  | typedef struct _protpkt_tx_info_t           protpkt_tx_info_t; | ||
|  | 
 | ||
|  | /* send received frame to motherboard MCU.*/ | ||
|  | typedef uint32_t (*fn_send_to_ext_mcu_t)(iot_pkt_t *data); | ||
|  | 
 | ||
|  | /* send cmd to the downlayer. dev test uses it, downlayer registered. */ | ||
|  | typedef uint8_t(*fn_cmd_send_to_plc_t)(iot_pkt_t *data); | ||
|  | 
 | ||
|  | /* send data to the downlayer. dev test uses it, downlayer registered. */ | ||
|  | typedef uint8_t (*fn_data_send_to_plc_t)(uint8_t *data, uint8_t len, | ||
|  |                                     protpkt_tx_info_t *txinfo); | ||
|  | 
 | ||
|  | /* register callback handles for dev test module using. */ | ||
|  | typedef struct _dev_test_cb_t | ||
|  | { | ||
|  |     /*
 | ||
|  |     provied by grapp top uart, called by dev test moudle, send data to host uart. | ||
|  |     */ | ||
|  |     fn_send_to_ext_mcu_t    up_send_cb; | ||
|  |     /*
 | ||
|  |     provided by plctxrx moudle. used by dev test moudle. send cmd to plctxrx | ||
|  |     moudle. | ||
|  |     */ | ||
|  |     fn_cmd_send_to_plc_t    cmd_send_cb; | ||
|  |     /*
 | ||
|  |     provided by plctxrx moudle. used by dev test moudle. send data to plctxrx | ||
|  |     moudle. | ||
|  |     */ | ||
|  |     fn_data_send_to_plc_t   data_send_cb; | ||
|  | }dev_test_cb_t; | ||
|  | 
 | ||
|  | /* top level structure of dev test. */ | ||
|  | typedef struct _dev_test_context_t | ||
|  | { | ||
|  |     /*
 | ||
|  |     magic key to tell if dev test command module initialized. | ||
|  |     mkey = 0x78ab5434 : initialized, else NOT. | ||
|  |     */ | ||
|  |     uint32_t                mkey; | ||
|  |     /* indicate, proto layer is one task.*/ | ||
|  |     iot_task_h              task_handle; | ||
|  |     /* iot_task configuration */ | ||
|  |     iot_task_config_t       task_cfg; | ||
|  |     /* local device type. */ | ||
|  |     uint8_t                 dev_type; | ||
|  |     /* role of local device */ | ||
|  |     uint8_t                 dev_role; | ||
|  |     /* local mac address. */ | ||
|  |     uint8_t                 mac[IOT_MAC_ADDR_LEN]; | ||
|  |     /* callback handles for dev test module using */ | ||
|  |     dev_test_cb_t           fn_callback; | ||
|  |     /* timer for sending mode config */ | ||
|  |     timer_id_t              mod_cfg_tmr; | ||
|  |     /* the interval of ckq mode enable cmd and ckq mode read cmd */ | ||
|  |     timer_id_t              ckq_cmd_intvl_tmr; | ||
|  |     /* timer for ckq read timeout */ | ||
|  |     timer_id_t              ckq_timeout_tmr; | ||
|  |     /* cache of load/save info into custom flash */ | ||
|  |     custom_flash_info_t     flashinfo; | ||
|  | }dev_test_context_t; | ||
|  | 
 | ||
|  | #pragma pack(pop) // restore the pack status
 | ||
|  | 
 | ||
|  | #if IOT_GE_CKQ_MODE_ENABLE
 | ||
|  | 
 | ||
|  | /* regitster the function to send received frame to MCU*/ | ||
|  | uint8_t iot_dev_test_fn_register_send_to_uart(fn_send_to_ext_mcu_t fn); | ||
|  | 
 | ||
|  | /* registered in app, called when recv MCU data */ | ||
|  | uint8_t iot_dev_test_uart_meter_port_func(uint8_t *buf, uint16_t blen); | ||
|  | 
 | ||
|  | /* registered in app, called when recv plc data */ | ||
|  | uint8_t iot_dev_test_plc_data_recv_func(protpkt_list_t  *report_framelist, | ||
|  |                                         plctxrx_rx_data_info_t *rxinfo); | ||
|  | 
 | ||
|  | /* registered in app, called when recv plc cmd */ | ||
|  | uint8_t iot_dev_test_plctxrx_cmd_resp_func(iot_pkt_t *data); | ||
|  | 
 | ||
|  | /* hook interface with plctxrx layer */ | ||
|  | uint8_t iot_dev_test_fn_register_send_to_plc(fn_cmd_send_to_plc_t cmd_cb, | ||
|  |     fn_data_send_to_plc_t data_cb); | ||
|  | 
 | ||
|  | dev_test_context_t *iot_dev_test_context_get(void); | ||
|  | 
 | ||
|  | void iot_dev_test_task_deinit(void); | ||
|  | 
 | ||
|  | iot_task_h iot_dev_test_task_init(void); | ||
|  | 
 | ||
|  | #endif
 | ||
|  | 
 | ||
|  | #ifdef __cplusplus
 | ||
|  | } | ||
|  | #endif
 | ||
|  | 
 | ||
|  | #endif /* IOT_DEV_TEST_H */
 |