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); | ||
|  | } |