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