82 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			82 lines
		
	
	
		
			2.8 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 "app_uart.h"
							 | 
						||
| 
								 | 
							
								#include "app_common.h"
							 | 
						||
| 
								 | 
							
								#include "app_main_task.h"
							 | 
						||
| 
								 | 
							
								#include "app_proto_dlt645.h"
							 | 
						||
| 
								 | 
							
								#include "app_main_dlt645.h"
							 | 
						||
| 
								 | 
							
								#include "proto_645.h"
							 | 
						||
| 
								 | 
							
								#include "app_dlt645_di_def.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define APP_DLT645_CCO_REBOOT_DELAY_MS          1000
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								static uint32_t dlt645_get_sw_ver_handle(proto_645_header_t *frame,
							 | 
						||
| 
								 | 
							
								    uint8_t * out_buf,  uint16_t *out_len)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    uint32_t di = PROTO_645_2007_EXT_READ_SW_VER;
							 | 
						||
| 
								 | 
							
								    uint32_t err_code = ERR_OK;
							 | 
						||
| 
								 | 
							
								    uint16_t cnt = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    proto_645_2007_di_to_byte(di, out_buf);
							 | 
						||
| 
								 | 
							
								    cnt = PROTO_645_2007_DI_LEN;
							 | 
						||
| 
								 | 
							
								    out_buf[cnt++] = iot_version_major();
							 | 
						||
| 
								 | 
							
								    out_buf[cnt++] = iot_version_minor();
							 | 
						||
| 
								 | 
							
								    out_buf[cnt++] = iot_version_micro();
							 | 
						||
| 
								 | 
							
								    out_buf[cnt++] = iot_version_build() & 0x3F;
							 | 
						||
| 
								 | 
							
								    *out_len = cnt;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return err_code;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if PLC_SUPPORT_STA_ROLE
							 | 
						||
| 
								 | 
							
								#else   /* PLC_SUPPORT_STA_ROLE */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								static uint32_t dlt645_cco_reboot_handle(proto_645_header_t *frame,
							 | 
						||
| 
								 | 
							
								    uint8_t * out_buf, uint16_t *out_len)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    uint32_t di = PROTO_645_2007_EXT_RESET_CCO;
							 | 
						||
| 
								 | 
							
								    uint32_t err_code = ERR_OK;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    app_timer_start(APP_TIMER_ID_REBOOT, APP_DLT645_CCO_REBOOT_DELAY_MS,
							 | 
						||
| 
								 | 
							
								        TIMER_TYPE_ONCE);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    proto_645_2007_di_to_byte(di, out_buf);
							 | 
						||
| 
								 | 
							
								    *out_len = PROTO_645_2007_DI_LEN;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return err_code;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								#endif  /* PLC_SUPPORT_STA_ROLE */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* dlt645 local handle list for main task. */
							 | 
						||
| 
								 | 
							
								static proto_dlt645_proc_func_pair g_main_task_dlt645_handle_list[] = {
							 | 
						||
| 
								 | 
							
								    {PROTO_645_2007_FN_READ_DATA,   PROTO_645_2007_EXT_READ_SW_VER,      dlt645_get_sw_ver_handle},
							 | 
						||
| 
								 | 
							
								#if PLC_SUPPORT_STA_ROLE
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#else   /* PLC_SUPPORT_STA_ROLE */
							 | 
						||
| 
								 | 
							
								    {PROTO_645_2007_FN_WRITE_DATA,  PROTO_645_2007_EXT_RESET_CCO,      dlt645_cco_reboot_handle},
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif  /* PLC_SUPPORT_STA_ROLE */
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void iot_main_dlt645_local_handle_register(void)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    if (app_dlt645_local_handle_list_register(APP_TASK_MAIN,
							 | 
						||
| 
								 | 
							
								        g_main_task_dlt645_handle_list,
							 | 
						||
| 
								 | 
							
								        APP_ARRAY_COUNT(g_main_task_dlt645_handle_list)) != ERR_OK) {
							 | 
						||
| 
								 | 
							
								            APP_PRINTF("[ERR] MAIN TASK DLT645 HANDLE INIT FAILED !!");
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |