311 lines
		
	
	
		
			8.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			311 lines
		
	
	
		
			8.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_errno.h"
							 | 
						||
| 
								 | 
							
								#include "iot_io.h"
							 | 
						||
| 
								 | 
							
								#include "iot_app.h"
							 | 
						||
| 
								 | 
							
								#include "iot_config.h"
							 | 
						||
| 
								 | 
							
								#include "iot_system.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include "iot_oem_api.h"
							 | 
						||
| 
								 | 
							
								#include "iot_board_api.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include "iot_cli_host_interface.h"
							 | 
						||
| 
								 | 
							
								#include "iot_cli_plc_module.h"
							 | 
						||
| 
								 | 
							
								#include "iot_cli_plc_tx_rx.h"
							 | 
						||
| 
								 | 
							
								#include "iot_cli_plc_nw.h"
							 | 
						||
| 
								 | 
							
								#include "iot_cli_host_upgrade.h"
							 | 
						||
| 
								 | 
							
								#include "iot_cli_ckb.h"
							 | 
						||
| 
								 | 
							
								#include "iot_cli_dbg_log.h"
							 | 
						||
| 
								 | 
							
								#include "iot_cli_ada_dump.h"
							 | 
						||
| 
								 | 
							
								#include "iot_cli_ul_buf.h"
							 | 
						||
| 
								 | 
							
								#include "iot_cli_discovery.h"
							 | 
						||
| 
								 | 
							
								#include "iot_cli_rate_test.h"
							 | 
						||
| 
								 | 
							
								#include "iot_cli_set_info.h"
							 | 
						||
| 
								 | 
							
								#include "iot_cli_plc_mgr_alive.h"
							 | 
						||
| 
								 | 
							
								#include "iot_cli_hw_ver.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if PLC_SUPPORT_CCO_ROLE
							 | 
						||
| 
								 | 
							
								extern CLI_MSG_ENTRY
							 | 
						||
| 
								 | 
							
								all_cli_cco_msg_entry[];
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								extern CLI_MSG_ENTRY
							 | 
						||
| 
								 | 
							
								all_cli_sta_msg_entry[];
							 | 
						||
| 
								 | 
							
								extern iot_cli_host_info_t *host_info;
							 | 
						||
| 
								 | 
							
								extern iot_cli_t cli;
							 | 
						||
| 
								 | 
							
								extern uint8_t cli_ftm_mode;
							 | 
						||
| 
								 | 
							
								extern uint32_t cli_module_type;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								iot_plc_host_config_t *host_config = NULL;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if PLC_COMM_ENABLE
							 | 
						||
| 
								 | 
							
								static uint8_t iot_cli_register()
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    iot_plc_app_t host_app;
							 | 
						||
| 
								 | 
							
								    host_app.app_id = IOT_PLC_APP_HOST_INTERFACE;
							 | 
						||
| 
								 | 
							
								    host_app.param = NULL;
							 | 
						||
| 
								 | 
							
								    host_app.prio = 3;
							 | 
						||
| 
								 | 
							
								    host_app.recv = iot_cli_plc_recv;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    host_config->app_handle = iot_plc_register_app(&host_app);
							 | 
						||
| 
								 | 
							
								    if (host_config->app_handle == NULL) {
							 | 
						||
| 
								 | 
							
								        iot_printf("App handle NULL (%s)\n", __FUNCTION__);
							 | 
						||
| 
								 | 
							
								        return ERR_INVAL;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    return ERR_OK;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								static uint8_t iot_cli_register()
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    host_config->app_handle = NULL;
							 | 
						||
| 
								 | 
							
								    return ERR_OK;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								#endif /* PLC_COMM_ENABLE */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								uint8_t iot_cli_module_handle_msg(
							 | 
						||
| 
								 | 
							
								    cli_moduleid_t moduleid, uint32_t msgid, iot_cli_msg_t *msg)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								#if PLC_SUPPORT_CCO_ROLE
							 | 
						||
| 
								 | 
							
								    if (iot_plc_is_client_mode())
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        if (cli_execute_msg_entry(moduleid, msgid, all_cli_sta_msg_entry, msg)) {
							 | 
						||
| 
								 | 
							
								            return 1;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    } else {
							 | 
						||
| 
								 | 
							
								        if (cli_execute_msg_entry(moduleid, msgid, all_cli_cco_msg_entry, msg)) {
							 | 
						||
| 
								 | 
							
								            return 1;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								    if (cli_execute_msg_entry(moduleid, msgid, all_cli_sta_msg_entry, msg)) {
							 | 
						||
| 
								 | 
							
								        return 1;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return 0;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								uint8_t iot_cli_module_handle_task_msg(iot_cli_msg_t *cli_msg, uint16_t id)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    uint8_t handled = 1;
							 | 
						||
| 
								 | 
							
								    switch (id) {
							 | 
						||
| 
								 | 
							
								    case IOT_CLI_HOST_MSG:
							 | 
						||
| 
								 | 
							
								        cli_handle_plc_msg(cli_msg->data);
							 | 
						||
| 
								 | 
							
								        break;
							 | 
						||
| 
								 | 
							
								    case IOT_CLI_UPGRADE_TIMER:
							 | 
						||
| 
								 | 
							
								        iot_cli_upgrade_handle_timer_msg();
							 | 
						||
| 
								 | 
							
								        break;
							 | 
						||
| 
								 | 
							
								    case IOT_CLI_RATE_TEST_TIMER:
							 | 
						||
| 
								 | 
							
								        iot_cli_rate_test_handle_timer_msg();
							 | 
						||
| 
								 | 
							
								        break;
							 | 
						||
| 
								 | 
							
								    case IOT_CLI_SG_MSG:
							 | 
						||
| 
								 | 
							
								        iot_cli_sg_handle_msg(cli_msg->data);
							 | 
						||
| 
								 | 
							
								        break;
							 | 
						||
| 
								 | 
							
								    case IOT_CLI_SET_TIMER:
							 | 
						||
| 
								 | 
							
								        iot_cli_set_info_handle_timer_msg();
							 | 
						||
| 
								 | 
							
								        break;
							 | 
						||
| 
								 | 
							
								    case IOT_CLI_QUERY_HW_TIMER:
							 | 
						||
| 
								 | 
							
								        iot_cli_query_hw_ver_handle_timer_msg();
							 | 
						||
| 
								 | 
							
								        break;
							 | 
						||
| 
								 | 
							
								#if PLC_SUPPORT_CCO_ROLE
							 | 
						||
| 
								 | 
							
								    case IOT_CLI_RPT_TOPO_TIMER:
							 | 
						||
| 
								 | 
							
								        iot_plc_query_nw_topo(host_config->app_handle,
							 | 
						||
| 
								 | 
							
								            host_config->cli_request_id, host_config->topo_ver,
							 | 
						||
| 
								 | 
							
								            IOT_PLC_QUERY_TOPO_START_AS_TEI,
							 | 
						||
| 
								 | 
							
								            host_config->topo_query_start_index,
							 | 
						||
| 
								 | 
							
								            host_config->topo_count_in_packet);
							 | 
						||
| 
								 | 
							
								        break;
							 | 
						||
| 
								 | 
							
								    case IOT_CLI_BCAST_TX_DONE:
							 | 
						||
| 
								 | 
							
								        cli_remote_upgrade_bcast_tx_done();
							 | 
						||
| 
								 | 
							
								        break;
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								#if (IOT_STA_CONTROL_MODE == IOT_STA_CONTROL_TYPE_STA)
							 | 
						||
| 
								 | 
							
								    case IOT_CLI_ADA_MSG:
							 | 
						||
| 
								 | 
							
								        iot_cli_handle_ada_msg(cli_msg->data);
							 | 
						||
| 
								 | 
							
								        break;
							 | 
						||
| 
								 | 
							
								    case IOT_CLI_DUMP_TIMER:
							 | 
						||
| 
								 | 
							
								        iot_cli_ada_dump_handle_timer_msg();
							 | 
						||
| 
								 | 
							
								        break;
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								#if IOT_TPUT_APP_ENABLE
							 | 
						||
| 
								 | 
							
								    case IOT_CLI_TPUT_MSG:
							 | 
						||
| 
								 | 
							
								        iot_cli_tput_handle_msg(cli_msg->data);
							 | 
						||
| 
								 | 
							
								        break;
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								    default:
							 | 
						||
| 
								 | 
							
								        handled = 0;
							 | 
						||
| 
								 | 
							
								        break;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return handled;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								uint8_t iot_cli_module_cancel_task_msg(
							 | 
						||
| 
								 | 
							
								    iot_cli_msg_t *cli_msg, uint16_t id)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    switch (id) {
							 | 
						||
| 
								 | 
							
								    case IOT_CLI_HOST_MSG:
							 | 
						||
| 
								 | 
							
								    case IOT_CLI_UPGRADE_TIMER:
							 | 
						||
| 
								 | 
							
								    case IOT_CLI_RATE_TEST_TIMER:
							 | 
						||
| 
								 | 
							
								    case IOT_CLI_SG_MSG:
							 | 
						||
| 
								 | 
							
								    case IOT_CLI_SET_TIMER:
							 | 
						||
| 
								 | 
							
								    case IOT_CLI_QUERY_HW_TIMER:
							 | 
						||
| 
								 | 
							
								    case IOT_CLI_RPT_TOPO_TIMER:
							 | 
						||
| 
								 | 
							
								    case IOT_CLI_BCAST_TX_DONE:
							 | 
						||
| 
								 | 
							
								#if IOT_TPUT_APP_ENABLE
							 | 
						||
| 
								 | 
							
								    case IOT_CLI_TPUT_MSG:
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								#if (IOT_STA_CONTROL_MODE == IOT_STA_CONTROL_TYPE_STA)
							 | 
						||
| 
								 | 
							
								    case IOT_CLI_ADA_MSG:
							 | 
						||
| 
								 | 
							
								    case IOT_CLI_DUMP_TIMER:
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								        if (cli_msg->data) {
							 | 
						||
| 
								 | 
							
								            iot_pkt_free(cli_msg->data);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        break;
							 | 
						||
| 
								 | 
							
								    default:
							 | 
						||
| 
								 | 
							
								        break;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return 1;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void iot_cli_module_init_uart(commnucator_t * com, uint8_t interface_type)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    if (com && (com->is_initiated == 0)) {
							 | 
						||
| 
								 | 
							
								#if (HW_PLATFORM != HW_PLATFORM_SIMU) && (!IOT_STA_CONTROL_MODE)
							 | 
						||
| 
								 | 
							
								        if ((MODULE_TYPE_CCO == cli_module_type) || cli_ftm_mode) {
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								            com->type = interface_type;
							 | 
						||
| 
								 | 
							
								            if (com->type == COMMUNICATOR_UART)
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                os_mem_set(&(com->uart_frame), 0, sizeof(iot_frame_fmt));
							 | 
						||
| 
								 | 
							
								                com->uart_frame.preamble_codelen = 2;
							 | 
						||
| 
								 | 
							
								                os_mem_cpy(com->uart_frame.preamble_code, "##", 2);
							 | 
						||
| 
								 | 
							
								                com->uart_frame.backcode_len = 2;
							 | 
						||
| 
								 | 
							
								                os_mem_cpy(com->uart_frame.backcode, "@@", 2);
							 | 
						||
| 
								 | 
							
								                com->uart_frame.datalen_offset = 20;
							 | 
						||
| 
								 | 
							
								                com->uart_frame.datalen_size = 4;
							 | 
						||
| 
								 | 
							
								                com->uart_frame.backcode_offset = 0;
							 | 
						||
| 
								 | 
							
								                com->uart_frame.frame_timeout = 200;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								#if IOT_STA_CONTROL_MODE > IOT_STA_CONTROL_TYPE_PPM_DETECT
							 | 
						||
| 
								 | 
							
								            // TODO:  reserved for config depending on GPIO
							 | 
						||
| 
								 | 
							
								            IOT_ASSERT(0);
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								#if HW_PLATFORM == HW_PLATFORM_SIMU
							 | 
						||
| 
								 | 
							
								            com->com_num = UART_CLI_PORT;
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								            com->com_num = iot_board_get_uart(UART_CLI_PORT);
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								            commnunicator_init(com, &cli, CALLER_PLC_CLI, 1);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if (HW_PLATFORM != HW_PLATFORM_SIMU) && (!IOT_STA_CONTROL_MODE)
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								        cli.commu.is_initiated = 1;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* timer for rpt topo data */
							 | 
						||
| 
								 | 
							
								void iot_cli_rpt_topo_data_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_RPT_TOPO_TIMER, NULL);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if (msg) {
							 | 
						||
| 
								 | 
							
								        iot_task_queue_msg(cli.cli_task_h, msg, IOT_CLI_QUEUE_TIMER);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								uint8_t iot_cli_proto_module_init()
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    uint8_t ret = ERR_OK;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    host_config = (iot_plc_host_config_t*)
							 | 
						||
| 
								 | 
							
								        os_mem_malloc(IOT_CLI_MID, sizeof(iot_plc_host_config_t));
							 | 
						||
| 
								 | 
							
								    if (host_config == NULL) {
							 | 
						||
| 
								 | 
							
								        ret = ERR_NOMEM;
							 | 
						||
| 
								 | 
							
								        goto label_failed1;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    os_mem_set(host_config, 0, sizeof(host_config));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // resiter cli app to plc lib
							 | 
						||
| 
								 | 
							
								    ret = iot_cli_register();
							 | 
						||
| 
								 | 
							
								    if (ret != ERR_OK) {
							 | 
						||
| 
								 | 
							
								        goto label_failed1;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    host_config->dev_role = IOT_PLC_DEV_ROLE_INVALID;
							 | 
						||
| 
								 | 
							
								    host_config->dev_type = IOT_PLC_DEV_TYPE_INVAL;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if PLC_SUPPORT_CCO_ROLE
							 | 
						||
| 
								 | 
							
								    host_config->topo_data_timer = os_create_timer(IOT_CLI_MID, 0,
							 | 
						||
| 
								 | 
							
								        iot_cli_rpt_topo_data_timer, NULL);
							 | 
						||
| 
								 | 
							
								    iot_cli_ckb_init();
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if IOT_CLI_CKB_ADDR_MAPPING
							 | 
						||
| 
								 | 
							
								    iot_cli_addr_mapping_init();
							 | 
						||
| 
								 | 
							
								#endif /* IOT_CLI_CKB_ADDR_MAPPING */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if (PLC_SUPPORT_CCO_ROLE || (IOT_STA_CONTROL_MODE == IOT_STA_CONTROL_TYPE_STA))
							 | 
						||
| 
								 | 
							
								    iot_cli_plc_mgr_alive_init();
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								    iot_cli_rate_test_init();
							 | 
						||
| 
								 | 
							
								    iot_cli_set_info_init();
							 | 
						||
| 
								 | 
							
								    iot_cli_dbg_log_init();
							 | 
						||
| 
								 | 
							
								    iot_cli_query_hw_ver_init();
							 | 
						||
| 
								 | 
							
								#if (IOT_STA_CONTROL_MODE == IOT_STA_CONTROL_TYPE_STA)
							 | 
						||
| 
								 | 
							
								    iot_cli_ada_dump_init();
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								#if PLC_SUPPORT_CCO_ROLE
							 | 
						||
| 
								 | 
							
								    iot_cli_ul_buf_init();
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if (IOT_STA_CONTROL_MODE == IOT_STA_CONTROL_TYPE_STA)
							 | 
						||
| 
								 | 
							
								    iot_cli_host_set_ckb_dev_type();
							 | 
						||
| 
								 | 
							
								    iot_plc_wdg_set(host_config->app_handle, 0, 0);
							 | 
						||
| 
								 | 
							
								    iot_plc_set_whitelist(host_config->app_handle,
							 | 
						||
| 
								 | 
							
								        IOT_PLC_API_REQ_ID_DEFAULT, IOT_PLC_WL_ENABLE, 0, NULL);
							 | 
						||
| 
								 | 
							
								    cli_discovery_init();
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								    return ERR_OK;
							 | 
						||
| 
								 | 
							
								label_failed1:
							 | 
						||
| 
								 | 
							
								    iot_cli_proto_module_deinit();
							 | 
						||
| 
								 | 
							
								    return ret;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void iot_cli_proto_module_deinit()
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								#if PLC_SUPPORT_CCO_ROLE
							 | 
						||
| 
								 | 
							
								    iot_cli_ckb_deinit();
							 | 
						||
| 
								 | 
							
								#endif /* PLC_SUPPORT_CCO_ROLE */
							 | 
						||
| 
								 | 
							
								#if IOT_CLI_CKB_ADDR_MAPPING
							 | 
						||
| 
								 | 
							
								    iot_cli_addr_mapping_deinit();
							 | 
						||
| 
								 | 
							
								#endif /* IOT_CLI_CKB_ADDR_MAPPING */
							 | 
						||
| 
								 | 
							
								    iot_cli_rate_test_deinit();
							 | 
						||
| 
								 | 
							
								#if (IOT_STA_CONTROL_MODE == IOT_STA_CONTROL_TYPE_STA)
							 | 
						||
| 
								 | 
							
								    cli_discovery_deinit();
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								    if (host_config) {
							 | 
						||
| 
								 | 
							
								        os_mem_free(host_config);
							 | 
						||
| 
								 | 
							
								        host_config = NULL;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |