320 lines
		
	
	
		
			9.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			320 lines
		
	
	
		
			9.3 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_board.h"
							 | 
						||
| 
								 | 
							
								#include "iot_io_api.h"
							 | 
						||
| 
								 | 
							
								#include "iot_upgrade_api.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include "iot_cli.h"
							 | 
						||
| 
								 | 
							
								#include "iot_cli_host_interface.h"
							 | 
						||
| 
								 | 
							
								#include "iot_cli_plc_module.h"
							 | 
						||
| 
								 | 
							
								#include "iot_cli_common.h"
							 | 
						||
| 
								 | 
							
								#include "iot_cli_plc_tx_rx.h"
							 | 
						||
| 
								 | 
							
								#include "iot_cli_set_info.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								extern iot_plc_host_config_t *host_config;
							 | 
						||
| 
								 | 
							
								extern iot_cli_t cli;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								timer_id_t set_info_timer;
							 | 
						||
| 
								 | 
							
								uint8_t    set_id;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if (IOT_STA_CONTROL_MODE == IOT_STA_CONTROL_TYPE_STA)
							 | 
						||
| 
								 | 
							
								static void cli_set_vendor_local_ack(uint8_t *src_mac)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    cli_vendor_report report;
							 | 
						||
| 
								 | 
							
								    report.set_id = set_id;
							 | 
						||
| 
								 | 
							
								    iot_mac_addr_cpy(report.dst, host_config->mac_addr);
							 | 
						||
| 
								 | 
							
								    iot_cli_send_to_host(CLI_MSGID_SET_VENDOR_ACK,
							 | 
						||
| 
								 | 
							
								        (uint8_t*)&report, sizeof(cli_vendor_report), src_mac);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* cli set vendor handler */
							 | 
						||
| 
								 | 
							
								void cli_set_vendor(
							 | 
						||
| 
								 | 
							
								    uint8_t *buffer, uint32_t bufferlen, uint8_t *src_mac)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    (void)src_mac;
							 | 
						||
| 
								 | 
							
								    cli_vendor_info *vendor_info =
							 | 
						||
| 
								 | 
							
								        (cli_vendor_info *)buffer;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if ((!vendor_info) || (bufferlen < sizeof(*vendor_info))) {
							 | 
						||
| 
								 | 
							
								        iot_printf("dev save vendor, invalid para\n");
							 | 
						||
| 
								 | 
							
								        return;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if (host_config->dev_role != IOT_PLC_DEV_ROLE_CCO) {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if (set_id != vendor_info->set_id)
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            iot_printf("sta set vendor %lu %lu\n",
							 | 
						||
| 
								 | 
							
								                set_id, vendor_info->set_id);
							 | 
						||
| 
								 | 
							
								            iot_board_save_user_vendor_id(vendor_info->vendor);
							 | 
						||
| 
								 | 
							
								            set_id = vendor_info->set_id;
							 | 
						||
| 
								 | 
							
								        } else {
							 | 
						||
| 
								 | 
							
								            iot_printf("sta vendor already set\n");
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if (IOT_STA_CONTROL_MODE == IOT_STA_CONTROL_TYPE_STA)
							 | 
						||
| 
								 | 
							
								        cli_set_vendor_local_ack(src_mac);
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								        if (!os_is_timer_active(set_info_timer) &&
							 | 
						||
| 
								 | 
							
								            vendor_info->control) {
							 | 
						||
| 
								 | 
							
								            if (vendor_info->report_window >
							 | 
						||
| 
								 | 
							
								                CLI_SET_VENDOR_TIME_WINDOW) {
							 | 
						||
| 
								 | 
							
								                vendor_info->report_window =
							 | 
						||
| 
								 | 
							
								                    CLI_SET_VENDOR_TIME_WINDOW;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            os_start_timer(set_info_timer,
							 | 
						||
| 
								 | 
							
								                os_rand() % vendor_info->report_window);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								#if PLC_SUPPORT_CCO_ROLE
							 | 
						||
| 
								 | 
							
								    else {
							 | 
						||
| 
								 | 
							
								        cli_set_vendor_ack ack;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        ack.result = 0;
							 | 
						||
| 
								 | 
							
								        iot_cli_send_to_host(CLI_MSGID_SET_VENDOR_ACK,
							 | 
						||
| 
								 | 
							
								            (uint8_t *)&ack, sizeof(ack), src_mac);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if (iot_mac_addr_cmp(host_config->mac_addr, vendor_info->dst))
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            // set cco
							 | 
						||
| 
								 | 
							
								            if (set_id != vendor_info->set_id) {
							 | 
						||
| 
								 | 
							
								                iot_printf("cco set vendor %lu %lu\n",
							 | 
						||
| 
								 | 
							
								                    set_id, vendor_info->set_id);
							 | 
						||
| 
								 | 
							
								                iot_board_save_user_vendor_id(vendor_info->vendor);
							 | 
						||
| 
								 | 
							
								                set_id = vendor_info->set_id;
							 | 
						||
| 
								 | 
							
								            } else {
							 | 
						||
| 
								 | 
							
								                iot_printf("cco vendor already set\n");
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        } else {
							 | 
						||
| 
								 | 
							
								            // set sta
							 | 
						||
| 
								 | 
							
								            uint8_t send_type = IOT_PLC_MSG_TYPE_UNICAST;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            // store requet id for vendor report
							 | 
						||
| 
								 | 
							
								            host_config->cli_request_id =
							 | 
						||
| 
								 | 
							
								                add_addr_to_mapping_table(src_mac);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            // check if broadcast
							 | 
						||
| 
								 | 
							
								            if (iot_mac_is_bcast(vendor_info->dst)) {
							 | 
						||
| 
								 | 
							
								                send_type = IOT_PLC_MSG_TYPE_BCAST;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            iot_printf("cco forward set cmd stype %lu\n", send_type);
							 | 
						||
| 
								 | 
							
								            iot_cli_host_send_data_plc(
							 | 
						||
| 
								 | 
							
								                send_type, CLI_MSGID_SET_VENDOR,
							 | 
						||
| 
								 | 
							
								                vendor_info->dst, buffer, bufferlen);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* dev save build info func */
							 | 
						||
| 
								 | 
							
								static void cli_dev_save_build_info(cli_build_info *build_info)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    iot_build_info_t iot_build_info;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if (!build_info) {
							 | 
						||
| 
								 | 
							
								        iot_printf("dev save build info, invalid para\n");
							 | 
						||
| 
								 | 
							
								        return;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    iot_build_info.sw_ver = build_info->sw_ver;
							 | 
						||
| 
								 | 
							
								    iot_build_info.year = build_info->year;
							 | 
						||
| 
								 | 
							
								    iot_build_info.month = build_info->month;
							 | 
						||
| 
								 | 
							
								    iot_build_info.day = build_info->day;
							 | 
						||
| 
								 | 
							
								    iot_build_info.hour = build_info->hour;
							 | 
						||
| 
								 | 
							
								    iot_build_info.min = build_info->min;
							 | 
						||
| 
								 | 
							
								    iot_build_info.sec = build_info->sec;
							 | 
						||
| 
								 | 
							
								    iot_board_save_user_build_info(&iot_build_info);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* cli set build info handler */
							 | 
						||
| 
								 | 
							
								void cli_set_build_info(
							 | 
						||
| 
								 | 
							
								    uint8_t *buffer, uint32_t bufferlen, uint8_t *src_mac)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    (void)src_mac;
							 | 
						||
| 
								 | 
							
								    cli_build_info *build_info =
							 | 
						||
| 
								 | 
							
								        (cli_build_info *)buffer;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if ((!build_info) || (bufferlen < sizeof(*build_info))) {
							 | 
						||
| 
								 | 
							
								        return;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if (host_config->dev_role != IOT_PLC_DEV_ROLE_CCO) {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if (set_id != build_info->set_id)
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            iot_printf("sta set build info %lu %lu %lu\n",
							 | 
						||
| 
								 | 
							
								                set_id, build_info->set_id, build_info->sw_ver);
							 | 
						||
| 
								 | 
							
								            cli_dev_save_build_info(build_info);
							 | 
						||
| 
								 | 
							
								            set_id = build_info->set_id;
							 | 
						||
| 
								 | 
							
								        } else {
							 | 
						||
| 
								 | 
							
								            iot_printf("sta build info already set\n");
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if (!os_is_timer_active(set_info_timer) &&
							 | 
						||
| 
								 | 
							
								            build_info->control) {
							 | 
						||
| 
								 | 
							
								            if (build_info->report_window >
							 | 
						||
| 
								 | 
							
								                CLI_SET_VENDOR_TIME_WINDOW) {
							 | 
						||
| 
								 | 
							
								                build_info->report_window =
							 | 
						||
| 
								 | 
							
								                    CLI_SET_VENDOR_TIME_WINDOW;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            os_start_timer(
							 | 
						||
| 
								 | 
							
								                set_info_timer,
							 | 
						||
| 
								 | 
							
								                os_rand() % build_info->report_window);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								#if PLC_SUPPORT_CCO_ROLE
							 | 
						||
| 
								 | 
							
								    else {
							 | 
						||
| 
								 | 
							
								        cli_set_build_info_ack ack;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        ack.result = 0;
							 | 
						||
| 
								 | 
							
								        iot_cli_send_to_host(CLI_MSGID_SET_BUILD_INFO_ACK,
							 | 
						||
| 
								 | 
							
								            (uint8_t *)&ack, sizeof(ack), src_mac);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if (iot_mac_addr_cmp(host_config->mac_addr, build_info->dst))
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            // set cco
							 | 
						||
| 
								 | 
							
								            if (set_id != build_info->set_id) {
							 | 
						||
| 
								 | 
							
								                iot_printf("cco set build info %lu %lu\n",
							 | 
						||
| 
								 | 
							
								                    set_id, build_info->set_id);
							 | 
						||
| 
								 | 
							
								                cli_dev_save_build_info(build_info);
							 | 
						||
| 
								 | 
							
								                set_id = build_info->set_id;
							 | 
						||
| 
								 | 
							
								            } else {
							 | 
						||
| 
								 | 
							
								                iot_printf("cco build info already set\n");
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        else {
							 | 
						||
| 
								 | 
							
								            // set sta
							 | 
						||
| 
								 | 
							
								            uint8_t send_type = IOT_PLC_MSG_TYPE_UNICAST;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            // store requet id for vendor report
							 | 
						||
| 
								 | 
							
								            host_config->cli_request_id = add_addr_to_mapping_table(src_mac);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            // check if broadcast
							 | 
						||
| 
								 | 
							
								            if (iot_mac_is_bcast(build_info->dst)) {
							 | 
						||
| 
								 | 
							
								                send_type = IOT_PLC_MSG_TYPE_BCAST;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            iot_printf("cco forward set cmd stype %lu\n", send_type);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            iot_cli_host_send_data_plc(send_type, CLI_MSGID_SET_BUILD_INFO,
							 | 
						||
| 
								 | 
							
								                build_info->dst, buffer, bufferlen);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if PLC_SUPPORT_CCO_ROLE
							 | 
						||
| 
								 | 
							
								/* cco handle venfor report from sta */
							 | 
						||
| 
								 | 
							
								void cli_set_vendor_report(
							 | 
						||
| 
								 | 
							
								    uint8_t *buffer, uint32_t bufferlen, uint8_t *src_mac)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    (void)src_mac;
							 | 
						||
| 
								 | 
							
								    uint8_t *addr =
							 | 
						||
| 
								 | 
							
								        get_addr_from_mapping_table(host_config->cli_request_id);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    iot_cli_send_to_host(CLI_MSGID_VENDOR_REPORT,
							 | 
						||
| 
								 | 
							
								        buffer, bufferlen, addr);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* cco handle build info from sta */
							 | 
						||
| 
								 | 
							
								void cli_set_build_info_report(
							 | 
						||
| 
								 | 
							
								    uint8_t *buffer, uint32_t bufferlen, uint8_t *src_mac)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    (void)src_mac;
							 | 
						||
| 
								 | 
							
								    uint8_t *addr =
							 | 
						||
| 
								 | 
							
								        get_addr_from_mapping_table(host_config->cli_request_id);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    iot_cli_send_to_host(CLI_MSGID_BUILD_INFO_REPORT,
							 | 
						||
| 
								 | 
							
								        buffer, bufferlen, addr);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* timer for set info */
							 | 
						||
| 
								 | 
							
								static void iot_cli_set_info_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_SET_TIMER, NULL);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if (msg) {
							 | 
						||
| 
								 | 
							
								        iot_task_queue_msg(cli.cli_task_h, msg, IOT_CLI_QUEUE_TIMER);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* check if set venfor */
							 | 
						||
| 
								 | 
							
								static uint8_t iot_cli_is_set_vendor()
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    if (set_id <= CLI_SET_VENDOR_ID_MAX)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        return 1;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return 0;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								static void iot_cli_info_reset_report()
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    if (iot_cli_is_set_vendor()) {
							 | 
						||
| 
								 | 
							
								        cli_vendor_report report;
							 | 
						||
| 
								 | 
							
								        report.set_id = set_id;
							 | 
						||
| 
								 | 
							
								        iot_mac_addr_cpy(report.dst, host_config->mac_addr);
							 | 
						||
| 
								 | 
							
								        iot_cli_host_send_data_plc(IOT_PLC_MSG_TYPE_UNICAST,
							 | 
						||
| 
								 | 
							
								            CLI_MSGID_VENDOR_REPORT, host_config->cco_mac,
							 | 
						||
| 
								 | 
							
								            (uint8_t*)&report, sizeof(cli_vendor_report));
							 | 
						||
| 
								 | 
							
								    } else {
							 | 
						||
| 
								 | 
							
								        cli_build_info_report report;
							 | 
						||
| 
								 | 
							
								        report.set_id = set_id;
							 | 
						||
| 
								 | 
							
								        iot_mac_addr_cpy(report.dst, host_config->mac_addr);
							 | 
						||
| 
								 | 
							
								        iot_cli_host_send_data_plc(IOT_PLC_MSG_TYPE_UNICAST,
							 | 
						||
| 
								 | 
							
								            CLI_MSGID_BUILD_INFO_REPORT, host_config->cco_mac,
							 | 
						||
| 
								 | 
							
								            (uint8_t*)&report, sizeof(cli_build_info_report));
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* handle set timer msg */
							 | 
						||
| 
								 | 
							
								void iot_cli_set_info_handle_timer_msg()
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    iot_cli_info_reset_report();
							 | 
						||
| 
								 | 
							
								    // stop timer
							 | 
						||
| 
								 | 
							
								    os_stop_timer(set_info_timer);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* init cli set info */
							 | 
						||
| 
								 | 
							
								void iot_cli_set_info_init()
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    set_id = 0;
							 | 
						||
| 
								 | 
							
								    if (host_config->dev_role != IOT_PLC_DEV_ROLE_CCO)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        set_info_timer = os_create_timer(IOT_CLI_MID, 1,
							 | 
						||
| 
								 | 
							
								            iot_cli_set_info_timer, NULL);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* sta handle leave when ver change */
							 | 
						||
| 
								 | 
							
								void iot_cli_user_ver_change_reset()
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    if (set_id > 0) {
							 | 
						||
| 
								 | 
							
								        iot_upgrade_reset();
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |