288 lines
		
	
	
		
			8.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			288 lines
		
	
	
		
			8.4 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.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								****************************************************************************/
							 | 
						||
| 
								 | 
							
								#ifndef IOT_GRAPP_H
							 | 
						||
| 
								 | 
							
								#define IOT_GRAPP_H
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include "iot_uart_api.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef IOT_GE_CKQ_MODE_ENABLE
							 | 
						||
| 
								 | 
							
								#define IOT_GE_CKQ_MODE_ENABLE    0
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define INCLUDE_AT_COMMAND_MODULE 0
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include "iot_at.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include "iot_dev_test.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifdef __cplusplus
							 | 
						||
| 
								 | 
							
								extern "C" {
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** key, online upgraded  */
							 | 
						||
| 
								 | 
							
								#define ENABLE_GREE_UPGRADE    1
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if (IOT_LWIP_SUPPORT && HW_PLATFORM != HW_PLATFORM_SIMU)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define SUPPORT_HOST_PORT_ETH  1
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define IOT_GE_INCLUDE_HTTPD   1
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define IOT_GE_INCLUDE_LWMQTT  0
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								/** default not support eth port */
							 | 
						||
| 
								 | 
							
								#define SUPPORT_HOST_PORT_ETH 0
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** default not support httpd */
							 | 
						||
| 
								 | 
							
								#define IOT_GE_INCLUDE_HTTPD  0
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** default not support mqtt */
							 | 
						||
| 
								 | 
							
								#define IOT_GE_INCLUDE_LWMQTT 0
							 | 
						||
| 
								 | 
							
								#endif /* end (IOT_LWIP_SUPPORT && HW_PLATFORM != HW_PLATFORM_SIMU) */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** aes func ctrl **/
							 | 
						||
| 
								 | 
							
								#if (HW_PLATFORM == HW_PLATFORM_SIMU)
							 | 
						||
| 
								 | 
							
								#define IOT_GE_AES_ENABLE      0
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								#define IOT_GE_AES_ENABLE      0
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** paging func ctrl **/
							 | 
						||
| 
								 | 
							
								#define IOT_GE_PAGING_ENABLE   0
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** const, gree app task priority */
							 | 
						||
| 
								 | 
							
								#define APP_GR_PRIORITY        3
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** host port enum */
							 | 
						||
| 
								 | 
							
								enum host_port_e {
							 | 
						||
| 
								 | 
							
								    /** uart */
							 | 
						||
| 
								 | 
							
								    HOST_PORT_UART        = 0,
							 | 
						||
| 
								 | 
							
								    /** eth */
							 | 
						||
| 
								 | 
							
								    HOST_PORT_ETH         = 1,
							 | 
						||
| 
								 | 
							
								    /** MQTT */
							 | 
						||
| 
								 | 
							
								    HOST_PORT_MQTT        = 2,
							 | 
						||
| 
								 | 
							
								    /* custom task */
							 | 
						||
| 
								 | 
							
								    HOST_PORT_CUSTOM_TASK = 3,
							 | 
						||
| 
								 | 
							
								    /** max value */
							 | 
						||
| 
								 | 
							
								    HOST_PORT_MAX,
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** const, COM0 rev char dump buf size */
							 | 
						||
| 
								 | 
							
								#define IOT_GRAPP_LOG_BUF_LEN            64
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* uart baud rate macro */
							 | 
						||
| 
								 | 
							
								#define PROTO_GE_UART_BAUD_3000000       3000000
							 | 
						||
| 
								 | 
							
								#define PROTO_GE_UART_BAUD_256000        256000
							 | 
						||
| 
								 | 
							
								#define PROTO_GE_UART_BAUD_115200        115200
							 | 
						||
| 
								 | 
							
								#define PROTO_GE_UART_BAUD_19200         19200
							 | 
						||
| 
								 | 
							
								#define PROTO_GE_UART_BAUD_9600          9600
							 | 
						||
| 
								 | 
							
								#define PROTO_GE_UART_BAUD_4800          4800
							 | 
						||
| 
								 | 
							
								#define PROTO_GE_UART_BAUD_2400          2400
							 | 
						||
| 
								 | 
							
								/* uart baud rate value list */
							 | 
						||
| 
								 | 
							
								#define PROTO_GE_UART_BAUD_VALUE    {115200,9600,2400,256000,3000000,4800,19200}
							 | 
						||
| 
								 | 
							
								/* uart baud index maximum value */
							 | 
						||
| 
								 | 
							
								#define PROTO_GE_UART_BAUD_IDX_MAX       7
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* iot module board, stamps package, 22 pins */
							 | 
						||
| 
								 | 
							
								#define IOT_GRAPP_BOARD_STAMP_22P        (41)
							 | 
						||
| 
								 | 
							
								/* iot module board, goldenfinger package, 17 pins */
							 | 
						||
| 
								 | 
							
								#define IOT_GRAPP_BOARD_GOLDFINGER_17P   (42)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* define default uart parity */
							 | 
						||
| 
								 | 
							
								#if PLC_SUPPORT_CCO_ROLE
							 | 
						||
| 
								 | 
							
								#define DEF_UART_PARITY          IOT_UART_PARITY_NONE
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								#define DEF_UART_PARITY          IOT_UART_PARITY_EVEN
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** const, uart drv report rev buffer max size */
							 | 
						||
| 
								 | 
							
								#if PLC_SUPPORT_CCO_ROLE && ENABLE_GREE_UPGRADE
							 | 
						||
| 
								 | 
							
								#define UART_RECV_SIZE_MAX     500
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								#define UART_RECV_SIZE_MAX     256
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef uint8_t(*UART_RECV_HANDLER)(uint8_t* buffer, uint16_t len);
							 | 
						||
| 
								 | 
							
								typedef uint8_t(*ETH_RECV_HANDLER)(uint8_t* buffer, uint16_t len);
							 | 
						||
| 
								 | 
							
								typedef uint8_t(*MQTT_RECV_HANDLER)(uint8_t* buffer, uint16_t len);
							 | 
						||
| 
								 | 
							
								typedef uint8_t(*CUS_APP_RECV_HANDLER)(uint8_t* buffer, uint16_t len);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** app uart recv handler enum */
							 | 
						||
| 
								 | 
							
								enum app_uart_recv_handler_e {
							 | 
						||
| 
								 | 
							
								    /** gree proto mode */
							 | 
						||
| 
								 | 
							
								    GR_MCU_OP_MODE = 0,
							 | 
						||
| 
								 | 
							
								    /** at mode */
							 | 
						||
| 
								 | 
							
								    GR_AT_OP_MODE = 1,
							 | 
						||
| 
								 | 
							
								    /** dev test mode */
							 | 
						||
| 
								 | 
							
								    GR_DEV_TEST_OP_MODE = 2,
							 | 
						||
| 
								 | 
							
								    /** max mode */
							 | 
						||
| 
								 | 
							
								    UART_DISPATCH_METHOD_MAX,
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct _prototask_contxt_t prototask_contxt_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if IOT_GE_AES_ENABLE
							 | 
						||
| 
								 | 
							
								typedef enum {
							 | 
						||
| 
								 | 
							
								    ECB_MODE = 0,
							 | 
						||
| 
								 | 
							
								    CBC_MODE,
							 | 
						||
| 
								 | 
							
								    CTR_MODE,
							 | 
						||
| 
								 | 
							
								    INVALID_MODE,
							 | 
						||
| 
								 | 
							
								} GE_AES_MODE;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef enum {
							 | 
						||
| 
								 | 
							
								    AES_KEY_128 = 0,
							 | 
						||
| 
								 | 
							
								    AES_KEY_196,
							 | 
						||
| 
								 | 
							
								    AES_KEY_256,
							 | 
						||
| 
								 | 
							
								    INVALID_KEY_BITS,
							 | 
						||
| 
								 | 
							
								} GE_AES_KEY;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct _ge_aes_contxt_t {
							 | 
						||
| 
								 | 
							
								    /* reserve 1 byte for expansion and address casting */
							 | 
						||
| 
								 | 
							
								    uint8_t resv;
							 | 
						||
| 
								 | 
							
								    /* whether to enable aes function, 0->disable(default), 1->enable */
							 | 
						||
| 
								 | 
							
								    uint8_t enable      : 1,
							 | 
						||
| 
								 | 
							
								    /* key select 0->ge_key(default), 1->user_key */
							 | 
						||
| 
								 | 
							
								            key_type    : 1,
							 | 
						||
| 
								 | 
							
								    /* the secret key type, 0->128(default), 1->192, 2->256 */
							 | 
						||
| 
								 | 
							
								            key_bits    : 2,
							 | 
						||
| 
								 | 
							
								    /* the secret key type, 0->ECB(default), 1->CBC, 2->CTR */
							 | 
						||
| 
								 | 
							
								            mode        : 2,
							 | 
						||
| 
								 | 
							
								    /* in order to align */
							 | 
						||
| 
								 | 
							
								            resv_bit    : 2;
							 | 
						||
| 
								 | 
							
								} ge_aes_contxt_t;
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* gree app top layer structure*/
							 | 
						||
| 
								 | 
							
								typedef struct _greeplc_app_t
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    /** proto task handle*/
							 | 
						||
| 
								 | 
							
								    iot_task_h  proto_task;
							 | 
						||
| 
								 | 
							
								    /** proto task context pointer*/
							 | 
						||
| 
								 | 
							
								    prototask_contxt_t* proto_context;
							 | 
						||
| 
								 | 
							
								    /** plctxrx task handle*/
							 | 
						||
| 
								 | 
							
								    iot_task_h  plcxmit_task;
							 | 
						||
| 
								 | 
							
								    /** at task handler*/
							 | 
						||
| 
								 | 
							
								    iot_task_h  at_task;
							 | 
						||
| 
								 | 
							
								    /** at task context handler*/
							 | 
						||
| 
								 | 
							
								    at_context_t *at_context;
							 | 
						||
| 
								 | 
							
								    /** dev test task handler*/
							 | 
						||
| 
								 | 
							
								    iot_task_h  dev_test_task;
							 | 
						||
| 
								 | 
							
								    /** dev test context handler*/
							 | 
						||
| 
								 | 
							
								    dev_test_context_t *devtest_context;
							 | 
						||
| 
								 | 
							
								    /** handle of this app */
							 | 
						||
| 
								 | 
							
								    iot_plc_app_h app_handle;
							 | 
						||
| 
								 | 
							
								    /** com for upper host */
							 | 
						||
| 
								 | 
							
								    void*      uart_com;
							 | 
						||
| 
								 | 
							
								    /** uart work mode at or greeapp */
							 | 
						||
| 
								 | 
							
								    uint8_t    uart_mode;
							 | 
						||
| 
								 | 
							
								    /** host port, uart or eth */
							 | 
						||
| 
								 | 
							
								    uint8_t    host_port;
							 | 
						||
| 
								 | 
							
								    /** top level on uart interface with mcu */
							 | 
						||
| 
								 | 
							
								    UART_RECV_HANDLER uart_dispatch_fntable[UART_DISPATCH_METHOD_MAX];
							 | 
						||
| 
								 | 
							
								    /** top level on eth interface with mcu */
							 | 
						||
| 
								 | 
							
								    ETH_RECV_HANDLER eth_dispatch_fntable[UART_DISPATCH_METHOD_MAX];
							 | 
						||
| 
								 | 
							
								    /** top level on mqtt */
							 | 
						||
| 
								 | 
							
								    MQTT_RECV_HANDLER mqtt_dispatch_fntable[UART_DISPATCH_METHOD_MAX];
							 | 
						||
| 
								 | 
							
								    /** top level on led controller */
							 | 
						||
| 
								 | 
							
								    CUS_APP_RECV_HANDLER app_dispatch_fntable[UART_DISPATCH_METHOD_MAX];
							 | 
						||
| 
								 | 
							
								    /** grapp init flag */
							 | 
						||
| 
								 | 
							
								    bool_t grapp_init_success;
							 | 
						||
| 
								 | 
							
								#if IOT_GE_AES_ENABLE
							 | 
						||
| 
								 | 
							
								    /* aes contxt */
							 | 
						||
| 
								 | 
							
								    ge_aes_contxt_t aes;
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								}greeplc_app_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								extern greeplc_app_t *greeapp;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct _grapp_uart_cfg_t
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    /* uart port num */
							 | 
						||
| 
								 | 
							
								    uint8_t port;
							 | 
						||
| 
								 | 
							
								    /* uart baudrate */
							 | 
						||
| 
								 | 
							
								    uint32_t baud;
							 | 
						||
| 
								 | 
							
								    /* uart parity bit */
							 | 
						||
| 
								 | 
							
								    uint8_t parity;
							 | 
						||
| 
								 | 
							
								    /* uart number of data bit */
							 | 
						||
| 
								 | 
							
								    uint8_t data;
							 | 
						||
| 
								 | 
							
								    /* uart number of stop bit */
							 | 
						||
| 
								 | 
							
								    uint8_t stop;
							 | 
						||
| 
								 | 
							
								    /*the pointer of callback when the uart receive the data*/
							 | 
						||
| 
								 | 
							
								    iot_uart_recv_func_t  rec_ptr;
							 | 
						||
| 
								 | 
							
								    /* the receiver buffer size */
							 | 
						||
| 
								 | 
							
								    uint32_t recbuf_sz;
							 | 
						||
| 
								 | 
							
								}grapp_uart_cfg_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								  * @brief app_gr_app_entry() -  add gr app in os app list.
							 | 
						||
| 
								 | 
							
								  * @return                      ERR_OK -- for success case
							 | 
						||
| 
								 | 
							
								  * @return                      ERR_PENDING  -- system will not boot up
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								uint32_t app_gr_app_entry(void);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								  * @brief iot_grapp_set_uart() - config COM0 port setting
							 | 
						||
| 
								 | 
							
								  * @param uart:                 com0 handle
							 | 
						||
| 
								 | 
							
								  * @param cfg:                  config params
							 | 
						||
| 
								 | 
							
								  * @return                      false -- for failure case
							 | 
						||
| 
								 | 
							
								  * @return                      true  -- for success case
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								bool_t iot_grapp_set_uart(iot_uart_h uart, grapp_uart_cfg_t *cfg);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								  * @brief iot_grapp_set_uart_config() - config uart COM port setting
							 | 
						||
| 
								 | 
							
								  * @param uart:                 uart com handle
							 | 
						||
| 
								 | 
							
								  * @return                      false -- for failure case
							 | 
						||
| 
								 | 
							
								  * @return                      true  -- for success case
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								bool_t iot_grapp_set_uart_config(iot_uart_h uart);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								  * @brief iot_grapp_modify_uart_param() -modify uart meter port parameters
							 | 
						||
| 
								 | 
							
								  * @param baud_idx:             baud index
							 | 
						||
| 
								 | 
							
								  * @param parity:               parity check
							 | 
						||
| 
								 | 
							
								  * @param data_bit:             data bit
							 | 
						||
| 
								 | 
							
								  * @param stop_bit:             stop bit
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								void iot_grapp_modify_uart_param(uint8_t baud_idx, uint8_t parity,
							 | 
						||
| 
								 | 
							
								    uint8_t data_bit, uint8_t stop_bit);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								  * @brief : Get function pointer that send data to GE.
							 | 
						||
| 
								 | 
							
								  * @param : host - uplayer who sends data. Reference to enum host_port_e
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								#define iot_grapp_get_fn_send_to_ge(host)   \
							 | 
						||
| 
								 | 
							
								    (iot_proto_uplayer_data_recv_func)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								  * @brief : Register function that process data received from GE.
							 | 
						||
| 
								 | 
							
								  * @param : host - uplayer who receives data. Reference to enum host_port_e.
							 | 
						||
| 
								 | 
							
								  * @param : fn - function pointer for receiving data from GE.
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								#define iot_grapp_reg_fn_receive_from_ge(host, fn)   \
							 | 
						||
| 
								 | 
							
								    iot_proto_register_response_to_uplayer(fn)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if IOT_GE_EXT_SDK_ENABLE
							 | 
						||
| 
								 | 
							
								uint8_t iot_cus_task_message_to_ge(uint8_t *mq_str, uint16_t str_len);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								bool_t iot_grapp_init_success();
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifdef __cplusplus
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif // IOT_GRAPP_H
							 |