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