110 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			110 lines
		
	
	
		
			3.6 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_PING_H
							 | 
						||
| 
								 | 
							
								#define _IOT_PING_H
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include "iot_task_api.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifdef __cplusplus
							 | 
						||
| 
								 | 
							
								extern "C" {
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define IOT_PING_SET_NID_CNT_LIMIT     20
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* define priorities for message to be handle */
							 | 
						||
| 
								 | 
							
								#define IOT_PING_TASK_QUEUE_HP         0
							 | 
						||
| 
								 | 
							
								#define IOT_PING_TASK_QUEUE_LP         1
							 | 
						||
| 
								 | 
							
								#define IOT_PING_TASK_QUEUE_MAX_PRIO   2
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define IOT_PING_TASK_LIKE_ID          2
							 | 
						||
| 
								 | 
							
								#define IOT_PING_TASK_POOL_SIZE        128
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* message type */
							 | 
						||
| 
								 | 
							
								#define IOT_PING_MAC_MSG                0
							 | 
						||
| 
								 | 
							
								#define IOT_PING_TIMER_MSG              1
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* message id for TIMER_MSG */
							 | 
						||
| 
								 | 
							
								#define IOT_TIMER_QUERY_NB_NW       1   /* query neighbour network */
							 | 
						||
| 
								 | 
							
								#define IOT_TIMER_QUERY_NID         2   /* query nid */
							 | 
						||
| 
								 | 
							
								#define IOT_TIMER_SET_NID           3   /* set nid */
							 | 
						||
| 
								 | 
							
								#define IOT_TIMER_QUERY_NW_TOPO     4   /* query network topo */
							 | 
						||
| 
								 | 
							
								#define IOT_TIMER_QUERY_DEV_INTO    5   /* query device info */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* check device state every 3 second before device is ready */
							 | 
						||
| 
								 | 
							
								#define IOT_PING_CHECK_DEV_INTERVAL     (3*1000)
							 | 
						||
| 
								 | 
							
								/* check the topo structure and ping all STA/PCO every 15 seconds */
							 | 
						||
| 
								 | 
							
								#define IOT_PING_CHECK_TOPO_INTERVAL    (15*1000)
							 | 
						||
| 
								 | 
							
								/* STA check if it shall send bcast every 5 seconds */
							 | 
						||
| 
								 | 
							
								#define IOT_PING_STA_BCAST_INTERVAL     (5*1000)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* app_ping_entry() - entry point of ping app
							 | 
						||
| 
								 | 
							
								 * setup ipc and create a task for ping app
							 | 
						||
| 
								 | 
							
								 * @return:
							 | 
						||
| 
								 | 
							
								 *  ERR_PENDING -   if application want to delay the plc network formation.
							 | 
						||
| 
								 | 
							
								 *  otherwise   -   plc network formation will be started automatically.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								uint32_t app_ping_entry();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* message used in iot_ping_task.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								typedef struct _iot_plc_ping_msg {
							 | 
						||
| 
								 | 
							
								    /* standard iot_task message */
							 | 
						||
| 
								 | 
							
								    iot_task_msg_t  msg;
							 | 
						||
| 
								 | 
							
								    /* pointer to message data */
							 | 
						||
| 
								 | 
							
								    void            *data;
							 | 
						||
| 
								 | 
							
								    /* another data field */
							 | 
						||
| 
								 | 
							
								    uint32_t        data2;
							 | 
						||
| 
								 | 
							
								}iot_ping_task_msg_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct _iot_ping_task_data {
							 | 
						||
| 
								 | 
							
								    /* handle of the ping iot_task */
							 | 
						||
| 
								 | 
							
								    iot_task_h          task_handle;
							 | 
						||
| 
								 | 
							
								    /* ping iot_task configuration */
							 | 
						||
| 
								 | 
							
								    iot_task_config_t   task_cfg;
							 | 
						||
| 
								 | 
							
								    /* a flag indicating if app registered successfully */
							 | 
						||
| 
								 | 
							
								    uint8_t         app_registered;
							 | 
						||
| 
								 | 
							
								    /* link id used for sending msdu */
							 | 
						||
| 
								 | 
							
								    uint8_t         link_id;
							 | 
						||
| 
								 | 
							
								    /* is dev ready */
							 | 
						||
| 
								 | 
							
								    uint8_t         dev_ready;
							 | 
						||
| 
								 | 
							
								    /* role of local device */
							 | 
						||
| 
								 | 
							
								    uint8_t         dev_role;
							 | 
						||
| 
								 | 
							
								    /* flag to mark if ipv4 ping started */
							 | 
						||
| 
								 | 
							
								    uint8_t         ipv4_ping_start;
							 | 
						||
| 
								 | 
							
								    /* flag to mark if ipv6 ping started */
							 | 
						||
| 
								 | 
							
								    uint8_t         ipv6_ping_start;
							 | 
						||
| 
								 | 
							
								    /* mac address of local device */
							 | 
						||
| 
								 | 
							
								    uint8_t         mac_addr[IOT_MAC_ADDR_LEN];
							 | 
						||
| 
								 | 
							
								    /* handle of this app */
							 | 
						||
| 
								 | 
							
								    iot_plc_app_h   app_handle;
							 | 
						||
| 
								 | 
							
								    /* timer to call api periodically */
							 | 
						||
| 
								 | 
							
								    timer_id_t      ping_timer;
							 | 
						||
| 
								 | 
							
								    /* index of whitelist read in last request*/
							 | 
						||
| 
								 | 
							
								    uint16_t        wl_entry_index;
							 | 
						||
| 
								 | 
							
								    /* count of setting nid */
							 | 
						||
| 
								 | 
							
								    uint32_t        set_nid_count;
							 | 
						||
| 
								 | 
							
								    /* nid to be set */
							 | 
						||
| 
								 | 
							
								    uint32_t        nid;
							 | 
						||
| 
								 | 
							
								}iot_ping_task_data_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifdef __cplusplus
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif  //_IOT_PING_H
							 |