141 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			141 lines
		
	
	
		
			4.0 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 "iot_cli_host_interface.h"
 | ||
|  | #include "iot_cli_msg.h"
 | ||
|  | #include "iot_io.h"
 | ||
|  | 
 | ||
|  | #include "iot_cli_tput.h"
 | ||
|  | #include "iot_tput.h"
 | ||
|  | 
 | ||
|  | #if IOT_TPUT_APP_ENABLE
 | ||
|  | 
 | ||
|  | extern iot_plc_host_config_t *host_config; | ||
|  | extern iot_tput_global_t* p_iot_tput_glb; | ||
|  | 
 | ||
|  | uint32_t iot_cli_tput_interface_register( \ | ||
|  |     iot_cli_tput_interface_t *cli_interface) | ||
|  | { | ||
|  |     if (cli_interface == NULL) { | ||
|  |         return IOT_CLI_TPUT_REGISTER_FAILURE; | ||
|  |     } | ||
|  | 
 | ||
|  |     host_config->cli_tput_interface = cli_interface; | ||
|  |     return IOT_CLI_TPUT_REGISTER_SUCCESS; | ||
|  | } | ||
|  | 
 | ||
|  | static void iot_tput_cli_send_cmd(uint8_t req_id, uint8_t msg_id, | ||
|  |     uint8_t *data, uint32_t data_len) | ||
|  | { | ||
|  |     iot_pkt_t *pkt = NULL; | ||
|  |     uint8_t *data_ptr; | ||
|  | 
 | ||
|  |     iot_printf("[tput_dbg] %s\n", __FUNCTION__); | ||
|  | 
 | ||
|  |     if (host_config->cli_tput_interface == NULL) { | ||
|  |         return; | ||
|  |     } | ||
|  | 
 | ||
|  |     pkt = iot_pkt_alloc(data_len + sizeof(iot_cli_tput_msg_header_t), \ | ||
|  |         IOT_CLI_MID); | ||
|  |     IOT_ASSERT(pkt); | ||
|  | 
 | ||
|  |     data_ptr = iot_pkt_reserve(pkt, sizeof(iot_cli_tput_msg_header_t)); | ||
|  | 
 | ||
|  |     iot_cli_tput_msg_header_t *hd; | ||
|  |     hd = (iot_cli_tput_msg_header_t *)iot_pkt_block_ptr(pkt, \ | ||
|  |         IOT_PKT_BLOCK_HEAD); | ||
|  |     hd->msg_id = msg_id; | ||
|  |     hd->req_id = req_id; | ||
|  | 
 | ||
|  |     if (data && data_len) { | ||
|  |         iot_pkt_set_tail(pkt, | ||
|  |             iot_pkt_block_ptr(pkt, IOT_PKT_BLOCK_DATA) + data_len); | ||
|  |         os_mem_cpy(data_ptr, data, data_len); | ||
|  |     } | ||
|  | 
 | ||
|  |     if (host_config->cli_tput_interface->recv) { | ||
|  |         host_config->cli_tput_interface->recv(NULL, pkt); | ||
|  |     } | ||
|  |     else { | ||
|  |         iot_printf("[tput_dbg] rece is not register\n"); | ||
|  |     } | ||
|  | } | ||
|  | 
 | ||
|  | void cli_set_iot_tput_cfg( | ||
|  |     uint8_t *buffer, uint32_t bufferlen, uint8_t *src_mac) | ||
|  | { | ||
|  |     iot_tput_cli_send_cmd(0, IOT_CLI_SG_MSG_TEST_TPUT, buffer, bufferlen); | ||
|  |     // resport ack
 | ||
|  |     iot_cli_tput_report_t rsp = { 0 }; | ||
|  |     rsp.test_id = 0; | ||
|  |     iot_plc_host_send(CLI_MSGID_TPUT_CFG_ACK, (uint8_t*)&rsp, | ||
|  |             sizeof(iot_cli_tput_report_t), src_mac); | ||
|  | } | ||
|  | 
 | ||
|  | static void cli_send_tput_test_result(iot_cli_tput_report_t *rsp) | ||
|  | { | ||
|  |     iot_cli_tput_report_t result; | ||
|  |     os_mem_cpy(&result, rsp, sizeof(iot_cli_tput_report_t)); | ||
|  | 
 | ||
|  |     iot_plc_host_send(CLI_MSGID_TPUT_RLT, (uint8_t*)&result, | ||
|  |             sizeof(iot_cli_tput_report_t), 0); | ||
|  | } | ||
|  | 
 | ||
|  | void iot_cli_tput_send_data_to_cli_interface(iot_pkt_t *pkt) | ||
|  | { | ||
|  |     iot_task_msg_t *t_msg; | ||
|  |     if (pkt == NULL) { | ||
|  |         return; | ||
|  |     } | ||
|  | 
 | ||
|  |     t_msg = iot_task_alloc_msg(host_config->host_task_h); | ||
|  |     if (t_msg == NULL) { | ||
|  |         iot_printf("cli_send_module_msg iot_task_alloc_msg fail\n"); | ||
|  |         IOT_ASSERT(0); | ||
|  |         return; | ||
|  |     } | ||
|  | 
 | ||
|  |     iot_cli_msg_t *msg = (iot_cli_msg_t *)t_msg; | ||
|  | 
 | ||
|  |     t_msg->type = IOT_CLI_MSG_TYPE; | ||
|  |     t_msg->id = IOT_CLI_TPUT_MSG; | ||
|  |     msg->data = pkt; | ||
|  |     iot_task_queue_msg(host_config->host_task_h, t_msg, IOT_CLI_QUEUE_HOST); | ||
|  | } | ||
|  | 
 | ||
|  | void iot_cli_tput_handle_msg(iot_pkt_t *pkt) | ||
|  | { | ||
|  |     iot_cli_tput_msg_header_t *hdr = | ||
|  |         (iot_cli_tput_msg_header_t*)iot_pkt_block_ptr(pkt, \ | ||
|  |         IOT_PKT_BLOCK_HEAD); | ||
|  |     switch (hdr->msg_id) { | ||
|  |     case IOT_CLI_TPUT_REQ: | ||
|  |     { | ||
|  |         iot_cli_tput_report_t *rsp = \ | ||
|  |             (iot_cli_tput_report_t *)(iot_pkt_block_ptr(pkt, \ | ||
|  |             IOT_PKT_BLOCK_HEAD) + sizeof(iot_cli_tput_msg_header_t)); | ||
|  |         cli_send_tput_test_result(rsp); | ||
|  |         break; | ||
|  |     } | ||
|  |     default: | ||
|  |         IOT_ASSERT(0); | ||
|  |     } | ||
|  | 
 | ||
|  |     iot_pkt_free(pkt); | ||
|  |     return; | ||
|  | } | ||
|  | #endif
 |