Files
kunlun/app/grapp/iot_grapp.h
2024-09-28 14:24:04 +08:00

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