190 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			190 lines
		
	
	
		
			5.8 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_TPUT_H
 | |
| #define IOT_TPUT_H
 | |
| 
 | |
| #include "iot_task_api.h"
 | |
| #include "iot_utils_api.h"
 | |
| #include "iot_plc_api.h"
 | |
| #include "os_timer_api.h"
 | |
| #include "iot_cli_sg_api.h"
 | |
| #include "iot_cli_tput_api.h"
 | |
| 
 | |
| #ifdef __cplusplus
 | |
| extern "C" {
 | |
| #endif
 | |
| 
 | |
| /* define priorities for message to be handle */
 | |
| #define IOT_TPUT_TASK_QUEUE_HP                      0
 | |
| #define IOT_TPUT_TASK_QUEUE_LP                      1
 | |
| #define IOT_TPUT_TASK_QUEUE_MAX_PRIO                2
 | |
| 
 | |
| #define IOT_TPUT_TASK_LIKE_ID                       2
 | |
| #define IOT_TPUT_TASK_POOL_SIZE                     128
 | |
| 
 | |
| /* msg type */
 | |
| #define IOT_TPUT_PLC_MSG                            0
 | |
| #define IOT_TPUT_TIMER_MSG                          1
 | |
| #define IOT_TPUT_CLI_MSG                            2
 | |
| 
 | |
| /* message id for TIMER_MSG */
 | |
| #define IOT_TIMER_SEND_PKT                          1
 | |
| #define IOT_TIMER_REQ                               2
 | |
| 
 | |
| #define IOT_TPUT_NID                                1
 | |
| 
 | |
| /* tput send msdu len */
 | |
| #define IOT_TPUT_LEN_2032                           2032
 | |
| #define IOT_TPUT_LEN_1024                           1024
 | |
| #define IOT_TPUT_LEN_520                            520
 | |
| #define IOT_TPUT_LEN_72                             72
 | |
| 
 | |
| #define IOT_SEQ_INVAILD                             0xFFFFFF
 | |
| 
 | |
| /* down link mode . cco -> sta */
 | |
| #define IOT_TPUT_DOWN_LINK                          1
 | |
| /* up link mode . sta -> cco */
 | |
| #define IOT_TPUT_UP_LINK                            0
 | |
| 
 | |
| /* every 10ms send 1 pkt*/
 | |
| #define IOT_TPUT_SEND_PKT_DUR                       6        // 6ms
 | |
| /* 10s a cycle */
 | |
| #define IOT_TPUT_STATIS_DUR                         10*1000   // 10 S
 | |
| 
 | |
| /* CCO trigger sta send pkt, 10 pkt */
 | |
| #define IOT_TPUT_STATIS_TG_DUR                      10*10     // 10 PKT
 | |
| /* down mode sta resport receive cnt .
 | |
|  * or up mode cco check receive pkt whether complete .
 | |
|  * every 5s is reported once .
 | |
|  */
 | |
| #define IOT_TPUT_STA_REQ_DUR                        5*1000     // 5s
 | |
| 
 | |
| #pragma pack(push)  // save the pack status
 | |
| #pragma pack(1)     // 1 byte align
 | |
| 
 | |
| /* message used in iot_tput_task.
 | |
|  */
 | |
| typedef struct _iot_tput_msg {
 | |
|     /* standard iot_task message */
 | |
|     iot_task_msg_t  msg;
 | |
|     /* pointer to message data */
 | |
|     void            *data;
 | |
| }iot_tput_msg_t;
 | |
| 
 | |
| typedef struct iot_tput_device {
 | |
|     /* Indicates if the remote device is ready. */
 | |
|     uint8_t         rmt_valid;
 | |
|     /* link id used for sending msdu */
 | |
|     uint8_t         link_id;
 | |
|     /* Indicates if this local device is ready. */
 | |
|     uint8_t         dev_ready;
 | |
|     /* This local device role, CCO or STA ... */
 | |
|     uint8_t         dev_role;
 | |
|     /* MAC of this local device. */
 | |
|     uint8_t         mac_addr[IOT_MAC_ADDR_LEN];
 | |
|     /* MAC of CCO in this topo. */
 | |
|     uint8_t         cco_addr[IOT_MAC_ADDR_LEN];
 | |
|     /* MAC of remote device wef */
 | |
|     uint8_t         rmt_addr[IOT_MAC_ADDR_LEN];
 | |
|     /* The network ID of this topo. */
 | |
|     uint32_t        nid;
 | |
| } iot_tput_dev_t;
 | |
| 
 | |
| /** rate test param */
 | |
| typedef struct _iot_tput_cfg_info {
 | |
|     uint32_t test_id;
 | |
|     /** if downlink test */
 | |
|     uint8_t downlink;
 | |
|     /** msdu size */
 | |
|     uint16_t msdu_size;
 | |
|     /** send rate */
 | |
|     uint16_t send_rate;
 | |
|     /** test duration */
 | |
|     uint16_t test_duration;
 | |
|     /** test dst addr */
 | |
|     uint8_t dst[6];
 | |
| } iot_tput_cfg_info_t;
 | |
| 
 | |
| typedef struct _iot_tput_send_info {
 | |
|     uint32_t seq;
 | |
|     uint32_t statistics_cnt;
 | |
| } iot_tput_send_info_t;
 | |
| 
 | |
| /* iot tput global descriptor */
 | |
| typedef struct _iot_tput_global {
 | |
|     /* Task handle. */
 | |
|     iot_task_h          handle;
 | |
|     /* Keep the task configuration. */
 | |
|     iot_task_config_t   cfg;
 | |
|     /* a flag indicating if app registered successfully */
 | |
|     uint8_t             app_registered;
 | |
| 
 | |
|     /* handle of this app */
 | |
|     iot_plc_app_h       app_handle;
 | |
|     /* timer to call api periodically */
 | |
|     timer_id_t          tput_send_timer;
 | |
|     /* timer to statistics send cnt */
 | |
|     timer_id_t          tput_period_timer;
 | |
|     /* timer to sta report cnt or cco check receive pkt over */
 | |
|     timer_id_t          tput_req_timer;
 | |
|     /* tput device*/
 | |
|     iot_tput_dev_t      tput_dev;
 | |
|     /* cli interface for smart grid */
 | |
|     iot_cli_tput_interface_t  cli_tput_interface;
 | |
| 
 | |
|     /* tput cfg info*/
 | |
|     iot_tput_cfg_info_t tput_cfg;
 | |
| 
 | |
|     /* sta receive cnt last */
 | |
|     uint32_t            sta_last_rece_cnt;
 | |
|     /* receive cnt */
 | |
|     uint32_t            receive_cnt;
 | |
|     /* tput reslut kpbs */
 | |
|     uint32_t            tput_kpbs;
 | |
|     /* record send pkt cnt */
 | |
|     uint32_t            send_cnt;
 | |
| 
 | |
|     uint8_t             sta_send_flag       : 1,
 | |
|                         cco_check_rece_flag : 1,
 | |
|                         resv                : 6;
 | |
| } iot_tput_global_t;
 | |
| 
 | |
| #pragma pack(pop)    // restore the pack status
 | |
| 
 | |
| #if IOT_TPUT_APP_ENABLE
 | |
| 
 | |
| uint32_t iot_tput_send_pkt(uint8_t *src_addr, uint8_t *dst_addr,
 | |
|     uint32_t msdu_len);
 | |
| 
 | |
| uint32_t iot_tput_timer_start(timer_id_t timer_id, uint32_t dur);
 | |
| 
 | |
| uint32_t iot_tput_timer_stop(timer_id_t timer_id);
 | |
| 
 | |
| uint32_t iot_tput_sta_req();
 | |
| 
 | |
| 
 | |
| void iot_tput_report_rate_test(uint8_t *dst, uint8_t down_or_up_link, \
 | |
|     uint32_t rate_kpbs);
 | |
| 
 | |
| #endif
 | |
| 
 | |
| 
 | |
| #ifdef __cplusplus
 | |
| }
 | |
| #endif
 | |
| 
 | |
| #endif
 | |
| 
 |