199 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			199 lines
		
	
	
		
			7.1 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 _APP_MAIN_H_
							 | 
						||
| 
								 | 
							
								#define _APP_MAIN_H_
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include "app_common.h"
							 | 
						||
| 
								 | 
							
								#include "app_types.h"
							 | 
						||
| 
								 | 
							
								#include "app_config.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifdef __cplusplus
							 | 
						||
| 
								 | 
							
								  extern "C" {
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define APP_WORK_MODE_DISABLE       0
							 | 
						||
| 
								 | 
							
								#define APP_WORK_MODE_ENABLE        1
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define APP_WORK_MODE_BYPASS        0
							 | 
						||
| 
								 | 
							
								#define APP_WORK_MODE_AT            2
							 | 
						||
| 
								 | 
							
								#define APP_WORK_MODE_PROTO         1
							 | 
						||
| 
								 | 
							
								#define APP_WORK_MODE_MAX           2
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define APP_ENABLE_DUMP_PKT_INFO    1
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define APP_SW_VERSION_R            02     /* app software version, maximum is 0x0F */
							 | 
						||
| 
								 | 
							
								#define APP_BOOT_VER                01
							 | 
						||
| 
								 | 
							
								#define WQ_CHIP3011                 0x3011 /* Chip Type */
							 | 
						||
| 
								 | 
							
								#define MANU_CODE                   0x02D0 /* Manu Code */
							 | 
						||
| 
								 | 
							
								#define SDK_SW_VERSION              "WQ_PLC_3011"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define APP_DATA_BUF_SIZE           (2048)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define APP_PLC_CMD_PRIO            3
							 | 
						||
| 
								 | 
							
								#define APP_TASK_MSG_PRIO           0
							 | 
						||
| 
								 | 
							
								#define APP_MSG_HANDLE_TASK_PRIO    7
							 | 
						||
| 
								 | 
							
								#define APP_MSG_TASK_PRIO_QUE       1
							 | 
						||
| 
								 | 
							
								#define APP_MSG_PENDING_LIMIT       64
							 | 
						||
| 
								 | 
							
								#define APP_LINK_ID                 2
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define CHECK_ATCMD_BUF_SIZE        3
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define STA_OFFLINE_EVENT           0
							 | 
						||
| 
								 | 
							
								#define STA_ONLINE_EVENT            1
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* use for iot_print_config */
							 | 
						||
| 
								 | 
							
								#define ENABLE_PLC_LIB_LOG             (1)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* iot module board, stamps package, 22 pins */
							 | 
						||
| 
								 | 
							
								#define APP_BOARD_STAMP_22P            (41)
							 | 
						||
| 
								 | 
							
								/* iot module board, goldenfinger package, 17 pins */
							 | 
						||
| 
								 | 
							
								#define APP_BOARD_GOLDFINGER_17P       (42)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define APP_PKT_INFO_TIMER_PERIOD      (60*1000) /* unit is ms */
							 | 
						||
| 
								 | 
							
								/* interval to show signal led state, unit is ms */
							 | 
						||
| 
								 | 
							
								#define IOT_PLC_SIGNAL_LED_SHOW_INTVAL (2000)
							 | 
						||
| 
								 | 
							
								/* interval to check if all stas have joined the network, unit is ms */
							 | 
						||
| 
								 | 
							
								#define IOT_PLC_NET_DONE_CHECK_INTVAL  (500)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* snr good minimum threshold, below this value is weak */
							 | 
						||
| 
								 | 
							
								#define IOT_SNR_GOOD_MIN_THR           (5)
							 | 
						||
| 
								 | 
							
								/* snr strong minimum threshold */
							 | 
						||
| 
								 | 
							
								#define IOT_SNR_STRONG_MIN_THR         (20)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* sta support max groups */
							 | 
						||
| 
								 | 
							
								#define IOT_STA_SUPPORT_MAX_GROUP      (32)
							 | 
						||
| 
								 | 
							
								#define IOT_STA_GROUP_MAX_NUM          (256)
							 | 
						||
| 
								 | 
							
								#define IOT_STA_GROUP_BITMAP           ((IOT_STA_GROUP_MAX_NUM+7)/8)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef enum {
							 | 
						||
| 
								 | 
							
								    E_CMD_ID_START,
							 | 
						||
| 
								 | 
							
								    E_CMD_ID_RCV_FROM_PLC,
							 | 
						||
| 
								 | 
							
								    E_CMD_ID_RCV_FROM_UART,
							 | 
						||
| 
								 | 
							
								    E_CMD_ID_RCV_FROM_ETHERNET,
							 | 
						||
| 
								 | 
							
								    E_CMD_ID_RCV_FROM_PLC_CONNLESS,
							 | 
						||
| 
								 | 
							
								    E_CMD_ID_RCV_FROM_UDP_SOCKET,
							 | 
						||
| 
								 | 
							
								    E_CMD_ID_RCV_FROM_TCP_SOCKET,
							 | 
						||
| 
								 | 
							
								    E_CMD_ID_RCV_FROM_CLI,
							 | 
						||
| 
								 | 
							
								    E_CMD_ID_UART_TO_UDP4,
							 | 
						||
| 
								 | 
							
								    E_CMD_ID_UART_TO_UDP6,
							 | 
						||
| 
								 | 
							
								    E_CMD_ID_UART_TO_TCP4,
							 | 
						||
| 
								 | 
							
								    E_CMD_ID_UART_TO_TCP6,
							 | 
						||
| 
								 | 
							
								    E_CMD_ID_PLC_PROTO,
							 | 
						||
| 
								 | 
							
								    E_CMD_ID_SEND_DATA_TO_PLC,
							 | 
						||
| 
								 | 
							
								    E_CMD_ID_END
							 | 
						||
| 
								 | 
							
								} app_cmd_id_e;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef enum {
							 | 
						||
| 
								 | 
							
								    E_APP_MSG_START    = 0,
							 | 
						||
| 
								 | 
							
								    E_APP_MSG_FROM_MAC,
							 | 
						||
| 
								 | 
							
								    E_APP_MSG_PROCESS,
							 | 
						||
| 
								 | 
							
								    E_APP_MSG_TIMER,
							 | 
						||
| 
								 | 
							
								    E_APP_MSG_END
							 | 
						||
| 
								 | 
							
								} app_msg_id_e;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define APP_MSG_VALID(msg) ((msg) > E_APP_MSG_START && (msg) < E_APP_MSG_END)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct {
							 | 
						||
| 
								 | 
							
								    uint16_t rx_length;
							 | 
						||
| 
								 | 
							
								    uint8_t buffer[APP_DATA_BUF_SIZE];
							 | 
						||
| 
								 | 
							
								} app_data_buf;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct {
							 | 
						||
| 
								 | 
							
								    iot_task_msg_t msg;         /* The main entity of message. */
							 | 
						||
| 
								 | 
							
								    void           *data;       /* The user data inside this message. */
							 | 
						||
| 
								 | 
							
								} app_msg_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct {
							 | 
						||
| 
								 | 
							
								    iot_task_h        handle;   /* Task handle. */
							 | 
						||
| 
								 | 
							
								    iot_task_config_t cfg;      /* Keep the task configuration. */
							 | 
						||
| 
								 | 
							
								} app_msg_task_h;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct {
							 | 
						||
| 
								 | 
							
								    uint16_t group_cnt;         /* valid group count */
							 | 
						||
| 
								 | 
							
								    uint8_t  group[IOT_STA_GROUP_BITMAP];    /* group list */
							 | 
						||
| 
								 | 
							
								} sta_group_list_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct {
							 | 
						||
| 
								 | 
							
								    uint8_t          rmt_valid;           /* Indicates if the remote device is ready. */
							 | 
						||
| 
								 | 
							
								    uint8_t          link_id;
							 | 
						||
| 
								 | 
							
								    uint8_t          dev_ready;           /* Indicates if this local device is ready. */
							 | 
						||
| 
								 | 
							
								    uint8_t          dev_role;            /* This local device role, CCO or STA ... */
							 | 
						||
| 
								 | 
							
								    uint8_t          mac_addr[IOT_MAC_ADDR_LEN];  /* MAC of this local device. */
							 | 
						||
| 
								 | 
							
								    uint8_t          cco_addr[IOT_MAC_ADDR_LEN];  /* MAC of CCO in this topo. */
							 | 
						||
| 
								 | 
							
								    uint8_t          rmt_addr[IOT_MAC_ADDR_LEN];  /* MAC of remote device we communicate with. */
							 | 
						||
| 
								 | 
							
								    uint32_t         nid;                 /* The network ID of this topo. */
							 | 
						||
| 
								 | 
							
								    uint8_t          cco_net_done;        /* cco network done */
							 | 
						||
| 
								 | 
							
								    sta_group_list_t sta_group;           /* sta group info */
							 | 
						||
| 
								 | 
							
								} app_dev_info;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** plc recv data information  */
							 | 
						||
| 
								 | 
							
								typedef struct _recv_info_t {
							 | 
						||
| 
								 | 
							
								    uint8_t     mac[IOT_MAC_ADDR_LEN]; /* src mac */
							 | 
						||
| 
								 | 
							
								    uint8_t     recv_flag; /* recv plc msg flag, 0: connless 1: conn */
							 | 
						||
| 
								 | 
							
								    int8_t      recv_snr;  /* received plc packet snr */
							 | 
						||
| 
								 | 
							
								    int8_t      recv_rssi; /* received plc packet rssi */
							 | 
						||
| 
								 | 
							
								} recv_info_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef void (*app_data_parser_func) (uint8_t * buf, uint32_t len, app_source_e source);
							 | 
						||
| 
								 | 
							
								typedef void (*app_data_handle_func) (uint16_t data_id, app_source_e data_src,
							 | 
						||
| 
								 | 
							
								    const uint8_t *data, uint32_t data_len, void *info);
							 | 
						||
| 
								 | 
							
								typedef void (*app_onoffline_stat_report) (uint8_t *dev_mac, uint8_t status);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct {
							 | 
						||
| 
								 | 
							
								    uint8_t enable;
							 | 
						||
| 
								 | 
							
								    app_data_parser_func data_parser;
							 | 
						||
| 
								 | 
							
								    app_data_handle_func data_handle;
							 | 
						||
| 
								 | 
							
								    app_onoffline_stat_report on_off_report;
							 | 
						||
| 
								 | 
							
								} app_work_mode_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct {
							 | 
						||
| 
								 | 
							
								    app_config     app_cfg;
							 | 
						||
| 
								 | 
							
								    iot_uart_h     cmd_uart;
							 | 
						||
| 
								 | 
							
								    app_msg_task_h msg_task;            /* This task will process all messages
							 | 
						||
| 
								 | 
							
								                                        and events that from this very module. */
							 | 
						||
| 
								 | 
							
								    uint8_t        work_mode_now;
							 | 
						||
| 
								 | 
							
								    app_work_mode_t work_mode_reg[APP_WORK_MODE_MAX + 1];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    iot_plc_app_h  app_hdl;             /* The handle of this cus at APP. */
							 | 
						||
| 
								 | 
							
								    iot_plc_app_h  sila_nhm_hdl;        /* The handle of non header mode. */
							 | 
						||
| 
								 | 
							
								    uint32_t       app_reg;             /* Indicates if this APP has registered
							 | 
						||
| 
								 | 
							
								                                         to PLC-layer. */
							 | 
						||
| 
								 | 
							
								    app_dev_info   dev;                 /* Device information. */
							 | 
						||
| 
								 | 
							
								    uint8_t *      out_buf;             /* for save out buffer */
							 | 
						||
| 
								 | 
							
								    uint32_t       receivetime;         /* the time when get data from plc */
							 | 
						||
| 
								 | 
							
								    int8_t         u_snr;               /* record last recv msdu snr */
							 | 
						||
| 
								 | 
							
								    uint16_t       cco_bcast_per_cnt;   /* cco bcast period count */
							 | 
						||
| 
								 | 
							
								    /* flag of net enable, 1 mean enable, 0 mena disable. */
							 | 
						||
| 
								 | 
							
								    uint8_t        net_enable;
							 | 
						||
| 
								 | 
							
								    uint8_t        user_type;           /* user type */
							 | 
						||
| 
								 | 
							
								} app_entity_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								uint32_t app_post_msg(uint16_t msg_type, uint16_t msg_id, void *data);
							 | 
						||
| 
								 | 
							
								app_entity_t *app_get_main_entry();
							 | 
						||
| 
								 | 
							
								uint8_t app_work_mode_register(uint8_t work_mode, void *parser_func,
							 | 
						||
| 
								 | 
							
								    void *data_handle_func, void* reporter_func);
							 | 
						||
| 
								 | 
							
								uint8_t app_work_mode_unregister(uint8_t work_mode);
							 | 
						||
| 
								 | 
							
								uint8_t app_set_work_mode(uint8_t work_mode);
							 | 
						||
| 
								 | 
							
								uint8_t app_get_work_mode();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifdef __cplusplus
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif  /* _APP_MAIN_H_ */
							 | 
						||
| 
								 | 
							
								
							 |