198 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			198 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
| /****************************************************************************
 | |
| 
 | |
| 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_cli_tx_rx.h"
 | |
| #include "iot_cli_host_interface.h"
 | |
| #include "iot_cli_dbg_log.h"
 | |
| #include "iot_cli_ul_buf.h"
 | |
| #include "iot_cli_plc_mgr_alive.h"
 | |
| 
 | |
| extern CLI_MSG_ENTRY
 | |
| cli_common_msg_entry[];
 | |
| extern iot_cli_t cli;
 | |
| 
 | |
| /* ctrl connect flag */
 | |
| #define CLI_CTRL_PROTO_CONNECT_FLAG                 (0x80)
 | |
| /* join connect flag */
 | |
| #define CLI_PLC_PROTO_JOIN_FLAG                     (0x01)
 | |
| 
 | |
| iot_cli_host_info_t *host_info = NULL;
 | |
| 
 | |
| uint8_t cli_execute_msg_entry(
 | |
|     cli_moduleid_t moduleid, uint32_t msgid,
 | |
|     CLI_MSG_ENTRY *msg_entry, iot_cli_msg_t *msg)
 | |
| {
 | |
|     uint8_t executed = 0;
 | |
|     if (msg_entry) {
 | |
|         for (int i = 0;
 | |
|             msg_entry[i].module_id != CLI_MODULEID_MAX_NUM; i++) {
 | |
|             if ((moduleid == msg_entry[i].module_id) &&
 | |
|                 (msgid == msg_entry[i].msg_id) &&
 | |
|                 msg_entry[i].pFun) {
 | |
|                 msg_entry[i].pFun(iot_pkt_data(msg->data),
 | |
|                     iot_pkt_data_len(msg->data), &(msg->src_mac[0]));
 | |
|                 executed = 1;
 | |
|                 break;
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     return executed;
 | |
| }
 | |
| 
 | |
| uint8_t iot_cli_host_interface_handle_msg(
 | |
|     cli_moduleid_t moduleid, uint32_t msgid, iot_cli_msg_t *msg)
 | |
| {
 | |
|     if (cli_execute_msg_entry(
 | |
|         moduleid, msgid, cli_common_msg_entry, msg)) {
 | |
|         return 1;
 | |
|     } else if(iot_cli_module_handle_msg(
 | |
|         moduleid, msgid, msg)) {
 | |
|         return 1;
 | |
|     }
 | |
| 
 | |
|     return 0;
 | |
| }
 | |
| 
 | |
| uint8_t iot_cli_host_interface_handle_task_msg(
 | |
|     iot_cli_msg_t *cli_msg, uint16_t id)
 | |
| {
 | |
|     uint8_t handled = 1;
 | |
| 
 | |
|     switch (id) {
 | |
|     case IOT_CLI_LOG_TIMER:
 | |
|         iot_cli_handle_timer_log();
 | |
|         break;
 | |
| #ifdef HOST_APP_FEATURE_ENABLE
 | |
|     case IOT_CLI_UL_BUF_TIMER:
 | |
|         iot_cli_handle_ul_buf_timer_msg();
 | |
|         break;
 | |
|     case IOT_CLI_ALIVE_TIMER:
 | |
|         iot_cli_plc_mgr_alive_handle_timer_msg();
 | |
|         break;
 | |
| #endif
 | |
|     default:
 | |
|         handled = 0;
 | |
|     }
 | |
| 
 | |
|     if (!handled) {
 | |
|         iot_cli_module_handle_task_msg(cli_msg, id);
 | |
|     }
 | |
| 
 | |
|     return handled;
 | |
| }
 | |
| 
 | |
| uint8_t iot_cli_host_interface_cancel_task_msg(
 | |
|     iot_cli_msg_t *cli_msg, uint16_t id)
 | |
| {
 | |
|     switch (id) {
 | |
|     case IOT_CLI_LOG_TIMER:
 | |
| #ifdef HOST_APP_FEATURE_ENABLE
 | |
|     case IOT_CLI_UL_BUF_TIMER:
 | |
|     case IOT_CLI_ALIVE_TIMER:
 | |
| #endif
 | |
|         if (cli_msg->data) {
 | |
|             iot_pkt_free(cli_msg->data);
 | |
|         }
 | |
|         break;
 | |
|     default:
 | |
|         iot_cli_module_cancel_task_msg(cli_msg, id);
 | |
|         break;
 | |
|     }
 | |
| 
 | |
|     return 1;
 | |
| }
 | |
| 
 | |
| void iot_cli_host_interface_init_uart(
 | |
|     commnucator_t * com, uint8_t interface_type)
 | |
| {
 | |
|     iot_cli_module_init_uart(com, interface_type);
 | |
| }
 | |
| 
 | |
| uint8_t iot_cli_host_interface_init(HOST_SEND_PACKAGE_EVENT_CB cb,
 | |
|     iot_task_h task_h)
 | |
| {
 | |
|     uint8_t ret = ERR_OK;
 | |
|     host_info = (iot_cli_host_info_t *)
 | |
|         os_mem_malloc(IOT_CLI_MID, sizeof(iot_cli_host_info_t));
 | |
|     if (host_info == NULL) {
 | |
|         ret = ERR_NOMEM;
 | |
|         goto label_failed1;
 | |
|     }
 | |
|     os_mem_set(host_info, 0, sizeof(host_info));
 | |
| 
 | |
|     // set cli link_id to 2
 | |
|     host_info->link_id = 2;
 | |
|     host_info->host_task_h = task_h;
 | |
|     host_info->pfunc_send_ul_package = cb;
 | |
|     host_info->link_load = 0;
 | |
| 
 | |
|     ret = iot_cli_proto_module_init();
 | |
|     if (ret != ERR_OK) {
 | |
|         goto label_failed1;
 | |
|     }
 | |
| 
 | |
|     return ERR_OK;   // initialized successfully
 | |
| 
 | |
| label_failed1:
 | |
|     iot_cli_host_interface_deinit();
 | |
|     iot_cli_proto_module_deinit();
 | |
|     return ERR_NOMEM;
 | |
| }
 | |
| 
 | |
| /* iot_plc_host_deinit() - deinit host application */
 | |
| void iot_cli_host_interface_deinit()
 | |
| {
 | |
|     if (host_info) {
 | |
|         os_mem_free(host_info);
 | |
|         host_info = NULL;
 | |
|     }
 | |
| }
 | |
| 
 | |
| uint8_t iot_cli_host_is_ctrl_connected()
 | |
| {
 | |
|     return (host_info->is_ready & CLI_CTRL_PROTO_CONNECT_FLAG) ? 1 : 0;
 | |
| }
 | |
| 
 | |
| void iot_cli_host_set_ctrl_connected(uint8_t setting)
 | |
| {
 | |
|     if (!setting) {
 | |
|         host_info->is_ready &= (~CLI_CTRL_PROTO_CONNECT_FLAG);
 | |
|     } else {
 | |
|         host_info->is_ready |= CLI_CTRL_PROTO_CONNECT_FLAG;
 | |
|     }
 | |
| }
 | |
| 
 | |
| uint8_t iot_cli_host_is_join_connected()
 | |
| {
 | |
|     return (host_info->is_ready & CLI_PLC_PROTO_JOIN_FLAG) ? 1 : 0;
 | |
| }
 | |
| 
 | |
| void iot_cli_host_set_join_connected(uint8_t setting)
 | |
| {
 | |
|     if (!setting) {
 | |
|         host_info->is_ready &= (~CLI_PLC_PROTO_JOIN_FLAG);
 | |
|     } else {
 | |
|         host_info->is_ready |= CLI_PLC_PROTO_JOIN_FLAG;
 | |
|     }
 | |
| }
 | |
| 
 |