288 lines
		
	
	
		
			8.4 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			288 lines
		
	
	
		
			8.4 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.
 | |
| 
 | |
| ****************************************************************************/
 | |
| #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
 |