626 lines
21 KiB
C
626 lines
21 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.
|
|
|
|
****************************************************************************/
|
|
|
|
#include "os_utils_api.h"
|
|
|
|
#include "iot_io.h"
|
|
|
|
#include "iot_cli_host_interface.h"
|
|
#include "iot_cli_plc_module.h"
|
|
#include "iot_cli_rate_test.h"
|
|
#include "iot_cli_msg.h"
|
|
#include "iot_cli_plc_tx_rx.h"
|
|
|
|
#if IOT_CLI_RATE_TEST_EN
|
|
|
|
iot_plc_host_rate_test_t *rate_test_info = NULL;
|
|
extern iot_plc_host_config_t *host_config;
|
|
extern iot_cli_host_info_t *host_info;
|
|
extern iot_cli_t cli;
|
|
|
|
/* timer for rate test timer */
|
|
static void iot_cli_rate_test_timer(timer_id_t timer_id, void *arg)
|
|
{
|
|
(void)timer_id;
|
|
(void)arg;
|
|
|
|
iot_task_msg_t *msg;
|
|
msg = iot_cli_create_cli_msg(IOT_CLI_RATE_TEST_TIMER, NULL);
|
|
|
|
if (msg) {
|
|
iot_task_queue_msg(cli.cli_task_h, msg, IOT_CLI_QUEUE_TIMER);
|
|
}
|
|
}
|
|
|
|
#if PLC_SUPPORT_CCO_ROLE
|
|
static void iot_cli_rate_test_send_start_param()
|
|
{
|
|
cli_host_rate_test_param param;
|
|
|
|
param.downlink = rate_test_info->downlink;
|
|
param.msdu_size = rate_test_info->msdu_size;
|
|
param.send_rate = rate_test_info->send_rate;
|
|
param.test_duration = rate_test_info->test_duration;
|
|
param.test_id = rate_test_info->test_id;
|
|
|
|
iot_printf("send rate test start to sta, downlink %d, msdu size %d,"
|
|
" rate %d, duration %d\n", param.downlink, param.msdu_size,
|
|
param.send_rate, param.test_duration);
|
|
|
|
iot_cli_host_send_data_plc(IOT_PLC_MSG_TYPE_UNICAST,
|
|
CLI_MSGID_RATE_START, rate_test_info->dst,
|
|
(uint8_t*)¶m, sizeof(cli_host_rate_test_param));
|
|
}
|
|
#endif
|
|
|
|
static void cli_send_rate_test_packet()
|
|
{
|
|
iot_pkt_t *test_pkt = NULL;
|
|
uint32_t data_len = IOT_PLC_RATE_TEST_HEADER_SIZE;
|
|
|
|
IOT_ASSERT(rate_test_info);
|
|
|
|
if (rate_test_info->msdu_size > data_len) {
|
|
data_len = rate_test_info->msdu_size - data_len;
|
|
} else {
|
|
data_len = rate_test_info->msdu_size;
|
|
}
|
|
|
|
if (data_len < sizeof(cli_host_test_rate_packet)) {
|
|
data_len = sizeof(cli_host_test_rate_packet);
|
|
}
|
|
|
|
test_pkt = iot_cli_create_pkt_plc(IOT_PLC_MSG_TYPE_UNICAST,
|
|
IOT_PLC_LOCAL_RETRY_CNT, CLI_MODULEID_HOSTINTERFACE,
|
|
CLI_MSGID_RATE_TEST, NULL, rate_test_info->dst, rate_test_info->dst,
|
|
data_len);
|
|
|
|
if (test_pkt != NULL) {
|
|
uint8_t *ptr = iot_pkt_block_ptr(test_pkt, IOT_PKT_BLOCK_TAIL);
|
|
cli_host_test_rate_packet * rate_test_pkt =
|
|
(cli_host_test_rate_packet *)ptr;
|
|
if (rate_test_pkt) {
|
|
rate_test_pkt->packet_idx = rate_test_info->send_packet_idx;
|
|
rate_test_pkt->test_id = rate_test_info->test_id;
|
|
rate_test_pkt->test_duration = rate_test_info->test_duration;
|
|
}
|
|
|
|
iot_printf("send rate test packet, idx %d, test id %d\n",
|
|
rate_test_pkt->packet_idx, rate_test_pkt->test_id);
|
|
|
|
for (uint32_t i = sizeof(cli_host_test_rate_packet); i < data_len; i++)
|
|
{
|
|
ptr[i] = (uint8_t)os_rand();
|
|
}
|
|
|
|
iot_pkt_put(test_pkt, data_len);
|
|
iot_plc_send_msdu(host_config->app_handle, test_pkt);
|
|
|
|
rate_test_info->send_packet_idx++;
|
|
}
|
|
}
|
|
|
|
static void cli_send_rate_test_result(
|
|
uint8_t downlink, uint8_t *mac, uint8_t *dest_mac)
|
|
{
|
|
cli_host_test_rate_result result;
|
|
result.test_id = rate_test_info->test_id;
|
|
result.downlink = downlink;
|
|
result.recv_pkts = rate_test_info->recv_packets;
|
|
iot_mac_addr_cpy(result.dst, mac);
|
|
|
|
iot_cli_host_send_data_plc(IOT_PLC_MSG_TYPE_UNICAST,
|
|
CLI_MSGID_RATE_TEST_RESP, dest_mac,
|
|
(uint8_t*)&result, sizeof(cli_host_test_rate_result));
|
|
}
|
|
|
|
/* rate test timer handler */
|
|
void iot_cli_rate_test_handle_timer_msg()
|
|
{
|
|
switch (rate_test_info->rate_test_state)
|
|
{
|
|
case IOT_PLC_RATE_TEST_SENDER:
|
|
rate_test_info->ticks_count++;
|
|
// sta stop sending timer when no reply for more than 5s
|
|
if ((IOT_PLC_DEV_ROLE_CCO != host_config->dev_role) &&
|
|
(!rate_test_info->test_duration)) {
|
|
if (0 ==
|
|
(rate_test_info->ticks_count % IOT_PLC_RATE_TEST_MAX_TICKS)) {
|
|
if (rate_test_info->rate_test_result) {
|
|
rate_test_info->rate_test_result = 0;
|
|
} else {
|
|
iot_printf("sta stop sending rate "
|
|
"test packets since no reply\n");
|
|
if (os_is_timer_active(rate_test_info->rate_test_timer)) {
|
|
os_stop_timer(rate_test_info->rate_test_timer);
|
|
}
|
|
}
|
|
rate_test_info->ticks_count = 0;
|
|
}
|
|
}
|
|
|
|
for (uint16_t i = 0; i < rate_test_info->pakcets_per_second; i++) {
|
|
cli_send_rate_test_packet();
|
|
}
|
|
|
|
// stop test when duration hit
|
|
if (rate_test_info->test_duration) {
|
|
if (0 == (rate_test_info->ticks_count %
|
|
(rate_test_info->test_duration / IOT_PLC_RATE_TEST_INTERVAL))) {
|
|
iot_printf("stop sending rate test packet"
|
|
" since duration expired\n");
|
|
if (os_is_timer_active(rate_test_info->rate_test_timer)) {
|
|
os_stop_timer(rate_test_info->rate_test_timer);
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case IOT_PLC_RATE_TEST_RECVER:
|
|
#if PLC_SUPPORT_CCO_ROLE
|
|
if (IOT_PLC_DEV_ROLE_CCO == host_config->dev_role) {
|
|
if (!rate_test_info->recv_packets) {
|
|
rate_test_info->ticks_count++;
|
|
if (0 ==
|
|
(rate_test_info->ticks_count %
|
|
IOT_PLC_RATE_TEST_MAX_TICKS)) {
|
|
//send start cmd to sta
|
|
iot_cli_rate_test_send_start_param();
|
|
rate_test_info->ticks_count = 0;
|
|
}
|
|
} else if(rate_test_info->test_duration) {
|
|
rate_test_info->ticks_count = 0;
|
|
rate_test_info->rate_test_state = IOT_PLC_RATE_TEST_IN_TEST;
|
|
}
|
|
}
|
|
#endif
|
|
break;
|
|
case IOT_PLC_RATE_TEST_IN_TEST:
|
|
rate_test_info->ticks_count++;
|
|
if (rate_test_info->ticks_count >
|
|
(rate_test_info->test_duration / IOT_PLC_RATE_TEST_INTERVAL)) {
|
|
if (0 == (rate_test_info->ticks_count %
|
|
(rate_test_info->test_duration /
|
|
(IOT_PLC_RATE_TEST_INTERVAL * 5)))) {
|
|
iot_printf("send rate test result in completed state\n");
|
|
if (IOT_PLC_DEV_ROLE_CCO != host_config->dev_role) {
|
|
cli_send_rate_test_result(
|
|
1, host_config->mac_addr, host_config->cco_mac);
|
|
}
|
|
#if PLC_SUPPORT_CCO_ROLE
|
|
else {
|
|
cli_send_rate_test_result(
|
|
0, rate_test_info->dst, rate_test_info->dst);
|
|
}
|
|
#endif
|
|
}
|
|
|
|
// report at most 10 times then terminate
|
|
if (rate_test_info->ticks_count ==
|
|
(rate_test_info->test_duration /
|
|
IOT_PLC_RATE_TEST_INTERVAL * 3)) {
|
|
if (os_is_timer_active(rate_test_info->rate_test_timer)) {
|
|
os_stop_timer(rate_test_info->rate_test_timer);
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case IOT_PLC_RATE_TEST_STOP:
|
|
#if PLC_SUPPORT_CCO_ROLE
|
|
if (IOT_PLC_DEV_ROLE_CCO == host_config->dev_role) {
|
|
rate_test_info->ticks_count++;
|
|
if (0 ==
|
|
(rate_test_info->ticks_count % IOT_PLC_RATE_TEST_STOP_TICKS)) {
|
|
cli_host_rate_test_stop stop;
|
|
iot_cli_host_send_data_plc(IOT_PLC_MSG_TYPE_UNICAST,
|
|
CLI_MSGID_RATE_STOP, rate_test_info->dst,
|
|
(uint8_t*)&stop, sizeof(cli_host_rate_test_stop));
|
|
}
|
|
}
|
|
#endif
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void cli_recv_rate_test_packet(
|
|
uint8_t *buffer, uint32_t bufferlen, uint8_t *src_mac)
|
|
{
|
|
(void)src_mac;
|
|
cli_host_test_rate_packet * rate_test_pkt = NULL;
|
|
|
|
rate_test_pkt = (cli_host_test_rate_packet *)buffer;
|
|
|
|
IOT_ASSERT(rate_test_pkt);
|
|
IOT_ASSERT(bufferlen >= sizeof(*rate_test_pkt));
|
|
|
|
if ((rate_test_pkt->test_id == rate_test_info->test_id) &&
|
|
((IOT_PLC_RATE_TEST_STOP == rate_test_info->rate_test_state) ||
|
|
((IOT_PLC_RATE_TEST_IN_TEST == rate_test_info->rate_test_state) &&
|
|
(rate_test_info->ticks_count > rate_test_info->test_duration /
|
|
IOT_PLC_RATE_TEST_INTERVAL)))) {
|
|
iot_printf("rate test drop packet\n");
|
|
return;
|
|
}
|
|
|
|
if (rate_test_info->test_id != rate_test_pkt->test_id) {
|
|
iot_printf("drop old test %d, start new %d\n",
|
|
rate_test_info->test_id, rate_test_pkt->test_id);
|
|
rate_test_info->test_id = rate_test_pkt->test_id;
|
|
rate_test_info->recv_packets = 0;
|
|
}
|
|
|
|
rate_test_info->recv_packets++;
|
|
|
|
iot_printf("recv rate test packet, idx %d, test id %d, recv packets %d\n",
|
|
rate_test_pkt->packet_idx, rate_test_pkt->test_id,
|
|
rate_test_info->recv_packets);
|
|
|
|
if (!rate_test_pkt->test_duration) {
|
|
rate_test_info->rate_test_state = IOT_PLC_RATE_TEST_RECVER;
|
|
rate_test_info->test_duration = rate_test_pkt->test_duration;
|
|
#if PLC_SUPPORT_CCO_ROLE
|
|
if (IOT_PLC_DEV_ROLE_CCO == host_config->dev_role) {
|
|
// for no duration test, stop cco timer for start sta
|
|
if (os_is_timer_active(rate_test_info->rate_test_timer)) {
|
|
os_stop_timer(rate_test_info->rate_test_timer);
|
|
}
|
|
}
|
|
#endif
|
|
} else if (rate_test_info->recv_packets == 1) {
|
|
rate_test_info->ticks_count = 0;
|
|
rate_test_info->test_duration = rate_test_pkt->test_duration;
|
|
rate_test_info->rate_test_state = IOT_PLC_RATE_TEST_IN_TEST;
|
|
if (!os_is_timer_active(rate_test_info->rate_test_timer)) {
|
|
os_start_timer(rate_test_info->rate_test_timer,
|
|
IOT_PLC_RATE_TEST_INTERVAL);
|
|
}
|
|
}
|
|
|
|
//for no duration, report rate test result per 10 recved packets
|
|
if ((!rate_test_info->test_duration) &&
|
|
(0 ==
|
|
(rate_test_info->recv_packets % IOT_PLC_RATE_TEST_RESULT_TICKS))) {
|
|
if (IOT_PLC_DEV_ROLE_CCO != host_config->dev_role) {
|
|
//send test result to cco
|
|
iot_printf("sta send downlink rate test result , recv rate %d\n",
|
|
rate_test_info->recv_packets);
|
|
cli_send_rate_test_result(
|
|
1, host_config->mac_addr, host_config->cco_mac);
|
|
}
|
|
#if PLC_SUPPORT_CCO_ROLE
|
|
else {
|
|
iot_printf("coo send uplink rate test result, recv rate %d\n",
|
|
rate_test_info->recv_packets);
|
|
cli_send_rate_test_result(
|
|
0, rate_test_info->dst, rate_test_info->dst);
|
|
}
|
|
#endif
|
|
}
|
|
}
|
|
|
|
void cli_recv_rate_test_result(
|
|
uint8_t *buffer, uint32_t bufferlen, uint8_t *src_mac)
|
|
{
|
|
(void)src_mac;
|
|
cli_host_test_rate_result *result = NULL;
|
|
|
|
result = (cli_host_test_rate_result *)buffer;
|
|
|
|
IOT_ASSERT(result);
|
|
IOT_ASSERT(bufferlen >= sizeof(*result));
|
|
|
|
iot_printf("recv rate test result, test id %d\n", result->test_id);
|
|
|
|
//if plcmgr connect a 3rd STA
|
|
if ((!(iot_mac_addr_valid(rate_test_info->launch_mac)) &&
|
|
(!iot_mac_addr_valid(rate_test_info->dst)))){
|
|
iot_cli_send_to_host(CLI_MSGID_RATE_TEST_RESP,
|
|
(uint8_t*)result, sizeof(cli_host_test_rate_result), NULL);
|
|
return;
|
|
}
|
|
|
|
if (IOT_PLC_RATE_TEST_STOP == rate_test_info->rate_test_state) {
|
|
iot_printf("rate test stop\n");
|
|
return;
|
|
}
|
|
|
|
if (result->test_id != rate_test_info->test_id) {
|
|
iot_printf("drop test id not match result current id %d, "
|
|
"result id %d\n", rate_test_info->test_id, result->test_id);
|
|
return;
|
|
}
|
|
|
|
if (IOT_PLC_DEV_ROLE_CCO != host_config->dev_role) {
|
|
rate_test_info->rate_test_result = 1;
|
|
result->downlink = 0;
|
|
iot_printf("sta recv uplink rate test result , result->recv_pkts %d,"
|
|
" rate_test_info->send_packet_idx %d\n",
|
|
result->recv_pkts, rate_test_info->send_packet_idx);
|
|
result->recv_pkts =
|
|
result->recv_pkts * 100 / (rate_test_info->send_packet_idx + 1);
|
|
|
|
iot_cli_host_send_data_plc(IOT_PLC_MSG_TYPE_UNICAST,
|
|
CLI_MSGID_RATE_TEST_RESP, rate_test_info->launch_mac,
|
|
(uint8_t*)result, sizeof(cli_host_test_rate_result));
|
|
}
|
|
#if PLC_SUPPORT_CCO_ROLE
|
|
else {
|
|
if (result->downlink) {
|
|
if ((IOT_PLC_RATE_TEST_RECVER ==
|
|
rate_test_info->rate_test_state) ||
|
|
(IOT_PLC_RATE_TEST_IN_TEST ==
|
|
rate_test_info->rate_test_state)) {
|
|
iot_printf("drop test result since new test started\n");
|
|
return;
|
|
}
|
|
iot_printf("cco recv downlink rate test result"
|
|
" , result->recv_pkts %d, rate_test_info->send_packet_idx %d\n",
|
|
result->recv_pkts, rate_test_info->send_packet_idx);
|
|
result->downlink = 1;
|
|
result->recv_pkts =
|
|
result->recv_pkts * 100 / (rate_test_info->send_packet_idx + 1);
|
|
} else {
|
|
iot_printf("cco forward uplink rate test result"
|
|
" , test id %d, recv rate %d\n",
|
|
result->test_id, result->recv_pkts);
|
|
}
|
|
iot_cli_send_to_host(CLI_MSGID_RATE_TEST_RESP,
|
|
(uint8_t*)result,
|
|
sizeof(cli_host_test_rate_result),
|
|
rate_test_info->launch_mac);
|
|
}
|
|
#endif
|
|
}
|
|
|
|
void cli_rate_test_start(uint8_t *buffer, uint32_t bufferlen, uint8_t *src_mac)
|
|
{
|
|
(void)src_mac;
|
|
cli_host_rate_test_param *param = NULL;
|
|
|
|
param = (cli_host_rate_test_param *)buffer;
|
|
|
|
IOT_ASSERT(param);
|
|
IOT_ASSERT(bufferlen >= sizeof(*param));
|
|
|
|
IOT_ASSERT(rate_test_info);
|
|
|
|
if (rate_test_info->send_packet_idx) {
|
|
iot_printf("rate test started, drop new test\n");
|
|
}
|
|
|
|
rate_test_info->downlink = param->downlink;
|
|
rate_test_info->msdu_size = param->msdu_size;
|
|
rate_test_info->send_rate = param->send_rate;
|
|
rate_test_info->test_duration = param->test_duration;
|
|
if (src_mac)
|
|
os_mem_cpy(rate_test_info->launch_mac, src_mac, \
|
|
sizeof(rate_test_info->launch_mac));
|
|
else
|
|
os_mem_set(rate_test_info->launch_mac, 0, \
|
|
sizeof(rate_test_info->launch_mac));
|
|
if (rate_test_info->test_duration &&
|
|
(rate_test_info->test_duration < IOT_PLC_RATE_TEST_DEFAULT_DURATION)) {
|
|
rate_test_info->test_duration = IOT_PLC_RATE_TEST_DEFAULT_DURATION;
|
|
}
|
|
rate_test_info->recv_packets = 0;
|
|
rate_test_info->ticks_count = 0;
|
|
rate_test_info->rate_test_result = 0;
|
|
rate_test_info->send_packet_idx = 0;
|
|
if (!rate_test_info->msdu_size) {
|
|
rate_test_info->msdu_size = IOT_PLC_RATE_TEST_DEFAULT_MSDU_SIZE;
|
|
}
|
|
rate_test_info->pakcets_per_second =
|
|
rate_test_info->send_rate /
|
|
rate_test_info->msdu_size / IOT_PLC_RATE_TEST_TICKS_SECOND;
|
|
if (IOT_PLC_DEV_ROLE_CCO != host_config->dev_role) {
|
|
iot_mac_addr_cpy(rate_test_info->dst, host_config->cco_mac);
|
|
} else {
|
|
iot_mac_addr_cpy(rate_test_info->dst, param->dst);
|
|
}
|
|
|
|
if (IOT_PLC_DEV_ROLE_CCO == host_config->dev_role) {
|
|
//cco send stop ack to plc mgr
|
|
cli_host_rate_test_param_ack start_ack;
|
|
iot_cli_send_to_host(CLI_MSGID_RATE_START_ACK,
|
|
(uint8_t*)&start_ack,
|
|
sizeof(cli_host_rate_test_param_ack), src_mac);
|
|
}
|
|
|
|
if (rate_test_info->downlink) {
|
|
// create new test id
|
|
rate_test_info->test_id++;
|
|
iot_printf("sta start uplink rate test start, test id %d\n",
|
|
rate_test_info->test_id);
|
|
// set state to sender and send rate test packet in timer
|
|
rate_test_info->rate_test_state = IOT_PLC_RATE_TEST_SENDER;
|
|
} else if (IOT_PLC_DEV_ROLE_CCO != host_config->dev_role) {
|
|
// create new test id
|
|
rate_test_info->test_id = param->test_id;
|
|
// set state to sender and send rate test packet in timer
|
|
iot_printf("sta start upink rate test start, test id %d\n",
|
|
rate_test_info->test_id);
|
|
rate_test_info->rate_test_state = IOT_PLC_RATE_TEST_SENDER;
|
|
}
|
|
#if PLC_SUPPORT_CCO_ROLE
|
|
else {
|
|
rate_test_info->test_id++;
|
|
iot_printf("cco forward rate test start to sta, test id %d\n",
|
|
rate_test_info->test_id);
|
|
param->test_id = rate_test_info->test_id;
|
|
iot_cli_host_send_data_plc(IOT_PLC_MSG_TYPE_UNICAST,
|
|
CLI_MSGID_RATE_START, param->dst,
|
|
(uint8_t*)param, sizeof(cli_host_rate_test_param));
|
|
|
|
//set state to recver and start sta in timer
|
|
rate_test_info->rate_test_state = IOT_PLC_RATE_TEST_RECVER;
|
|
}
|
|
#endif
|
|
|
|
//start timer for rate test
|
|
if (!os_is_timer_active(rate_test_info->rate_test_timer)) {
|
|
os_start_timer(rate_test_info->rate_test_timer,
|
|
IOT_PLC_RATE_TEST_INTERVAL);
|
|
}
|
|
}
|
|
|
|
void cli_rate_test_stop(uint8_t *buffer, uint32_t bufferlen, uint8_t *src_mac)
|
|
{
|
|
(void)src_mac;
|
|
cli_host_rate_test_stop *stop = NULL;
|
|
|
|
stop = (cli_host_rate_test_stop *)buffer;
|
|
|
|
IOT_ASSERT(stop);
|
|
IOT_ASSERT(bufferlen >= sizeof(*stop));
|
|
|
|
rate_test_info->rate_test_state = IOT_PLC_RATE_TEST_STOP;
|
|
|
|
if (IOT_PLC_DEV_ROLE_CCO != host_config->dev_role) {
|
|
cli_host_rate_test_stop_ack stop_ack;
|
|
|
|
// sta stop send rate test timer
|
|
if (os_is_timer_active(rate_test_info->rate_test_timer)) {
|
|
os_stop_timer(rate_test_info->rate_test_timer);
|
|
}
|
|
|
|
//sta send stop ack to cco
|
|
iot_cli_host_send_data_plc(IOT_PLC_MSG_TYPE_UNICAST,
|
|
CLI_MSGID_RATE_STOP_ACK, host_config->cco_mac,
|
|
(uint8_t*)&stop_ack, sizeof(cli_host_rate_test_stop_ack));
|
|
}
|
|
#if PLC_SUPPORT_CCO_ROLE
|
|
else {
|
|
//cco send stop ack to plc mgr
|
|
cli_host_rate_test_stop_ack stop_ack;
|
|
iot_cli_send_to_host(CLI_MSGID_RATE_STOP_ACK,
|
|
(uint8_t*)&stop_ack, sizeof(cli_host_rate_test_stop_ack), \
|
|
rate_test_info->launch_mac);
|
|
|
|
if (rate_test_info->downlink) {
|
|
// cco stop send rate test timer
|
|
if (os_is_timer_active(rate_test_info->rate_test_timer)) {
|
|
os_stop_timer(rate_test_info->rate_test_timer);
|
|
}
|
|
} else {
|
|
//cco forward stop cmd to sta
|
|
iot_cli_host_send_data_plc(IOT_PLC_MSG_TYPE_UNICAST,
|
|
CLI_MSGID_RATE_STOP, rate_test_info->dst,
|
|
(uint8_t*)stop, sizeof(cli_host_rate_test_stop));
|
|
|
|
if (!os_is_timer_active(rate_test_info->rate_test_timer)) {
|
|
os_start_timer(rate_test_info->rate_test_timer,
|
|
IOT_PLC_RATE_TEST_INTERVAL);
|
|
}
|
|
}
|
|
}
|
|
#endif
|
|
}
|
|
|
|
void cli_rate_test_stop_ack(uint8_t *buffer, uint32_t bufferlen)
|
|
{
|
|
(void)buffer;
|
|
(void)bufferlen;
|
|
// cco stop stop rate test timer
|
|
if (os_is_timer_active(rate_test_info->rate_test_timer)) {
|
|
os_stop_timer(rate_test_info->rate_test_timer);
|
|
}
|
|
}
|
|
|
|
void iot_cli_rate_test_init()
|
|
{
|
|
rate_test_info = (iot_plc_host_rate_test_t *)os_mem_malloc(IOT_CLI_MID,
|
|
sizeof(iot_plc_host_rate_test_t));
|
|
|
|
if (rate_test_info) {
|
|
rate_test_info->rate_test_timer = os_create_timer(IOT_CLI_MID, 1,
|
|
iot_cli_rate_test_timer, NULL);
|
|
rate_test_info->send_packet_idx = 0;
|
|
rate_test_info->recv_packets = 0;
|
|
rate_test_info->test_id = 0;
|
|
} else {
|
|
iot_printf("rate test info alloc failed\n");
|
|
}
|
|
}
|
|
|
|
void iot_cli_rate_test_deinit()
|
|
{
|
|
if (rate_test_info) {
|
|
if (rate_test_info->rate_test_timer) {
|
|
os_delete_timer(rate_test_info->rate_test_timer);
|
|
rate_test_info->rate_test_timer = 0;
|
|
rate_test_info->rate_test_state = IOT_PLC_RATE_TEST_INIT;
|
|
}
|
|
|
|
os_mem_free(rate_test_info);
|
|
rate_test_info = NULL;
|
|
}
|
|
}
|
|
|
|
#else /* IOT_CLI_RATE_TEST_EN */
|
|
|
|
void cli_recv_rate_test_packet(uint8_t *buffer, uint32_t bufferlen,
|
|
uint8_t *src_mac)
|
|
{
|
|
(void)buffer;
|
|
(void)bufferlen;
|
|
(void)src_mac;
|
|
}
|
|
|
|
void cli_recv_rate_test_result(uint8_t *buffer, uint32_t bufferlen,
|
|
uint8_t *src_mac)
|
|
{
|
|
(void)buffer;
|
|
(void)bufferlen;
|
|
(void)src_mac;
|
|
}
|
|
|
|
void cli_rate_test_start(uint8_t *buffer, uint32_t bufferlen, uint8_t *src_mac)
|
|
{
|
|
(void)buffer;
|
|
(void)bufferlen;
|
|
(void)src_mac;
|
|
}
|
|
|
|
void cli_rate_test_stop(uint8_t *buffer, uint32_t bufferlen, uint8_t *src_mac)
|
|
{
|
|
(void)buffer;
|
|
(void)bufferlen;
|
|
(void)src_mac;
|
|
}
|
|
|
|
void cli_rate_test_stop_ack(uint8_t *buffer, uint32_t bufferlen)
|
|
{
|
|
(void)buffer;
|
|
(void)bufferlen;
|
|
}
|
|
|
|
void iot_cli_rate_test_handle_timer_msg()
|
|
{
|
|
|
|
}
|
|
|
|
void iot_cli_rate_test_init()
|
|
{
|
|
|
|
}
|
|
|
|
void iot_cli_rate_test_deinit()
|
|
{
|
|
|
|
}
|
|
|
|
#endif /* IOT_CLI_RATE_TEST_EN */
|