159 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			159 lines
		
	
	
		
			4.6 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_io.h"
 | |
| #include "iot_utils_api.h"
 | |
| #include "iot_system.h"
 | |
| #include "iot_uart_h.h"
 | |
| 
 | |
| #include "iot_cli.h"
 | |
| #include "iot_cli_host_interface.h"
 | |
| #include "iot_cli_plc_module.h"
 | |
| #include "iot_oem_api.h"
 | |
| #include "iot_cli_tx_rx.h"
 | |
| #include "iot_cli_basic_operation.h"
 | |
| #include "iot_board_api.h"
 | |
| #include "iot_version_api.h"
 | |
| #if HW_PLATFORM == HW_PLATFORM_SIMU
 | |
| #include "simulator_txrx.h"
 | |
| extern uint32_t g_ip_addr;
 | |
| #else
 | |
| #include "iot_log_api.h"
 | |
| #endif
 | |
| 
 | |
| extern iot_cli_t cli;
 | |
| extern uint32_t g_fw_mode;
 | |
| extern iot_plc_host_config_t *host_config;
 | |
| 
 | |
| void cli_set_snr(uint8_t *buffer, uint32_t bufferlen, uint8_t *src_mac)
 | |
| {
 | |
| #if HW_PLATFORM == HW_PLATFORM_SIMU
 | |
|     (void)bufferlen;
 | |
|     (void)src_mac;
 | |
|     snr_hdr_t *hdr = (snr_hdr_t*)buffer;
 | |
|     uint8_t is_plc = 1;
 | |
|     if (sizeof(snr_hdr_t) > 8 && hdr->mode == 0) {
 | |
|         is_plc = 0;
 | |
|     }
 | |
|     uint32_t infonum = hdr->num;
 | |
|     uint8_t addr[52] = { 0 };
 | |
|     os_ntoa(hdr->dest_addr, addr);
 | |
|     if (hdr->dest_addr != g_ip_addr) {
 | |
|         return;
 | |
|     }
 | |
|     for (uint32_t i = 0; i < infonum; i++) {
 | |
|         memset(addr, 0, sizeof(addr));
 | |
|         snr_info_t *info =
 | |
|             (snr_info_t *)&buffer[sizeof(snr_hdr_t) + i*(sizeof(snr_info_t))];
 | |
|         if (info->ip_addr == 0) {
 | |
|             continue;
 | |
|         }
 | |
|         os_ntoa(info->ip_addr, addr);
 | |
|         iot_printf("set snr, ip:%s, sr:%d, phase:%d, src_phase:%d\n", addr,
 | |
|             info->snr, info->phase, info->src_phase);
 | |
|         if (is_plc) {
 | |
|             update_sr(
 | |
|                 (char*)&addr[0], (uint8_t)info->snr,
 | |
|                 info->phase, info->src_phase);
 | |
|         }
 | |
|         else {
 | |
|             update_rf_sr(
 | |
|                 (char*)&addr[0], (uint8_t)info->snr);
 | |
|         }
 | |
|     }
 | |
| #else
 | |
|     (void)buffer;
 | |
|     (void)bufferlen;
 | |
|     (void)src_mac;
 | |
| #endif
 | |
| }
 | |
| 
 | |
| void cli_force_crash(uint8_t *buffer, uint32_t bufferlen, uint8_t *src_mac)
 | |
| {
 | |
|     (void)src_mac;
 | |
| #if HW_PLATFORM == HW_PLATFORM_SIMU
 | |
|     IOT_ASSERT(bufferlen == sizeof(uint32_t));
 | |
|     uint32_t* dest_addr = (uint32_t*)buffer;
 | |
|     uint8_t addr[52] = { 0 };
 | |
|     os_ntoa(*dest_addr, addr);
 | |
|     if (*dest_addr != g_ip_addr) {
 | |
|         return;
 | |
|     }
 | |
|     IOT_ASSERT(0);
 | |
| #else
 | |
|     (void)buffer;
 | |
|     (void)bufferlen;
 | |
|     iot_printf("cli force crash\n");
 | |
|     IOT_ASSERT(0);
 | |
| #endif
 | |
| }
 | |
| 
 | |
| void cli_uart_test(uint8_t *buffer, uint32_t bufferlen, uint8_t *src_mac)
 | |
| {
 | |
|     (void)src_mac;
 | |
|     iot_printf("cli uart loop back test, bufferlen:%d\n", bufferlen);
 | |
|     cli_send_module_msg(CLI_MODULEID_COMMUNICATION, CLI_MSGID_UART_TEST_RESP,
 | |
|         buffer, bufferlen);
 | |
| }
 | |
| 
 | |
| void cli_set_baudrate(uint8_t *buffer, uint32_t bufferlen, uint8_t *src_mac)
 | |
| {
 | |
|     (void)src_mac;
 | |
|     uint32_t baudrate = 0;
 | |
|     uint8_t set = 0;
 | |
| 
 | |
|     if ((!buffer) || (bufferlen < sizeof(uint32_t))) {
 | |
|         return;
 | |
|     }
 | |
| 
 | |
|     baudrate = *((uint32_t *)buffer);
 | |
| 
 | |
|     if (g_fw_mode == FTM_MODE)
 | |
|     {
 | |
|         bool_t ret = false;
 | |
| 
 | |
|         ret = iot_uart_set_config(cli.commu.uart_handle, baudrate,
 | |
|             CLI_FTM_PARITY, CLI_FTM_DATA_BITS, CLI_FTM_STOP_BITS);
 | |
| 
 | |
|         if (ret)
 | |
|         {
 | |
|             set = 1;
 | |
|         }
 | |
| 
 | |
|         iot_printf("cli_set_baudrate baud %d ret %d\n", baudrate, ret);
 | |
|     }
 | |
|     else {
 | |
|         iot_printf("cli_set_baudrate ignore, not in ftm mode\n");
 | |
|     }
 | |
| 
 | |
|     iot_cli_send_to_host(
 | |
|         CLI_MSGID_SET_BAUD_RATE_ACK, &set, sizeof(set), src_mac);
 | |
| }
 | |
| void cli_get_local_info(uint8_t *buffer, uint32_t bufferlen, uint8_t *src_mac)
 | |
| {
 | |
|     (void)buffer;
 | |
|     (void)bufferlen;
 | |
|     local_info_t info;
 | |
| 
 | |
|     info.role = host_config->dev_role;
 | |
|     info.ver_type = iot_version_type();
 | |
|     info.user_type = iot_oem_get_user_type();
 | |
|     iot_mac_addr_cpy(info.mac_addr, host_config->mac_addr);
 | |
|     info.hw_ver = iot_board_hw_version_hex();
 | |
|     info.sw_ver = iot_version_hex();
 | |
| 
 | |
|     iot_cli_send_to_host(CLI_MSGID_GET_LOCAL_INFO_RESP, (uint8_t *)&info,
 | |
|         sizeof(info), src_mac);
 | |
| }
 |