Files
kunlun/app/tput/iot_tput.h
2024-09-28 14:24:04 +08:00

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