111 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			111 lines
		
	
	
		
			3.1 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_io_api.h"
 | ||
|  | 
 | ||
|  | #include "iot_cli.h"
 | ||
|  | #include "iot_cli_msg.h"
 | ||
|  | #include "iot_cli_common.h"
 | ||
|  | #include "iot_cli_tx_rx.h"
 | ||
|  | #include "iot_cli_module_config.h"
 | ||
|  | #include "iot_cli_host_interface.h"
 | ||
|  | #include "iot_cli_ul_buf.h"
 | ||
|  | #include "iot_cli_plc_mgr_alive.h"
 | ||
|  | 
 | ||
|  | #ifdef HOST_APP_FEATURE_ENABLE
 | ||
|  | 
 | ||
|  | #ifdef CLI_FULL_FEATURE_ENABLE
 | ||
|  | #include "iot_cli_sg.h"
 | ||
|  | #endif
 | ||
|  | 
 | ||
|  | extern iot_cli_host_info_t *host_info; | ||
|  | extern iot_cli_t cli; | ||
|  | 
 | ||
|  | /* keep alive cli handler*/ | ||
|  | void cli_plc_mgr_alive( | ||
|  |     uint8_t *buffer, uint32_t bufferlen, uint8_t *src_mac) | ||
|  | { | ||
|  |     (void)buffer; | ||
|  |     (void)bufferlen; | ||
|  |     (void)src_mac; | ||
|  |     iot_plc_mgr_alive_ack_t ack_rpt = { 0 }; | ||
|  | 
 | ||
|  |     ack_rpt.is_ready = (!!host_info->is_ready); | ||
|  |     host_info->host_app_live = 1; | ||
|  | 
 | ||
|  |     iot_cli_send_to_host(CLI_MSGID_PLC_MGR_ALIVE_ACK, (uint8_t *)&ack_rpt, | ||
|  |         sizeof(ack_rpt), src_mac); | ||
|  | } | ||
|  | 
 | ||
|  | /* set plc mgr state */ | ||
|  | void cli_set_plc_mgr_state(uint8_t state) | ||
|  | { | ||
|  |     if (state != host_info->host_app_state) | ||
|  |     { | ||
|  | #ifdef CLI_FULL_FEATURE_ENABLE
 | ||
|  |         // send live msg to sg
 | ||
|  |         iot_cli_sg_plc_mgr_state_change_t state_change; | ||
|  |         state_change.state = state; | ||
|  |         iot_sg_cli_plc_mgr_state_change( | ||
|  |             CLI_HOST_USE_API_BY_PLCM, &state_change); | ||
|  | #endif
 | ||
|  | 
 | ||
|  |         host_info->host_app_state = state; | ||
|  |         cli_set_ul_buf_active(state); | ||
|  |         iot_printf("set plc mgr state %lu\n", state); | ||
|  |     } | ||
|  | } | ||
|  | 
 | ||
|  | void iot_cli_plc_mgr_alive_handle_timer_msg() | ||
|  | { | ||
|  |     if (host_info->host_app_live) | ||
|  |     { | ||
|  |         // change plc mgr state to 1
 | ||
|  |         cli_set_plc_mgr_state(1); | ||
|  |         host_info->host_app_live = 0; | ||
|  |     } else { | ||
|  |         // change plc mgr state to 0
 | ||
|  |         cli_set_plc_mgr_state(0); | ||
|  |     } | ||
|  | } | ||
|  | 
 | ||
|  | /* timer alive */ | ||
|  | static void iot_cli_alive_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_ALIVE_TIMER, NULL); | ||
|  | 
 | ||
|  |     if (msg) { | ||
|  |         iot_task_queue_msg(cli.cli_task_h, msg, IOT_CLI_QUEUE_TIMER); | ||
|  |     } | ||
|  | } | ||
|  | 
 | ||
|  | /* init plc mgr alive */ | ||
|  | void iot_cli_plc_mgr_alive_init() | ||
|  | { | ||
|  |     host_info->host_app_state = 0; | ||
|  |     host_info->host_app_live = 0; | ||
|  |     host_info->live_timer = | ||
|  |         os_create_timer(IOT_CLI_MID, 1, | ||
|  |             iot_cli_alive_timer, NULL); | ||
|  |     os_start_timer(host_info->live_timer, CLI_PLC_MGR_STATE_TIMER); | ||
|  | } | ||
|  | #endif
 |