Files
kunlun/inc/utils/iot_share_task.h
2024-09-28 14:24:04 +08:00

195 lines
6.6 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_SHARE_TASK_H
#define IOT_SHARE_TASK_H
/* os shim includes */
#include "os_types.h"
#include "os_task.h"
/* common includes */
#include "iot_queue.h"
#include "iot_task.h"
#ifdef __cplusplus
extern "C" {
#endif
/** \defgroup SHARE_TASK_APIs Share Task APIs
* @brief Share Task APIs
*
*
*
*/
/** @addtogroup SHARE_TASK_APIs
* @{
*/
/* define priorities for message to be handle */
#define IOT_SHARE_TASK_QUEUE_HP 0
#define IOT_SHARE_TASK_QUEUE_LP 1
#define IOT_SHARE_TASK_QUEUE_MAX_PRIO 2
/* define message type for posting msg to share task */
#define IOT_SHARE_TASK_MT_INVALID 0
#define IOT_SHARE_TASK_MT_PIB 1
#define IOT_SHARE_TASK_MT_PLC_LED 2
#define IOT_SHARE_TASK_MT_CLI 3
#define IOT_SHARE_TASK_MT_UPGRADE 4
#define IOT_SHARE_TASK_MT_BH_INIT 5
#define IOT_SHARE_TASK_MT_CCO_PK_HDL 6
#define IOT_SHARE_TASK_MT_PLC_PM 7
#define IOT_SHARE_TASK_MT_DRIVER_I2S 8
#define IOT_SHARE_TASK_MT_HW_TSFM 9
#define IOT_SHARE_TASK_MT_EM_EXT 10
#define IOT_SHARE_TASK_MT_CRYPTO 11
#define IOT_SHARE_TASK_MT_SPI 12
/* maximum supported message types, should always keep this number accurate */
#define IOT_SHARE_TASK_MT_MAX 12
/* Event ID NOT the Message ID */
typedef enum
{
IOT_SHARE_EVENT_START = 1,
IOT_SHARE_EVENT_GPIO_INT = 1,
IOT_SHARE_EVENT_LED_PLC_TX_PHASE_A = 2,
IOT_SHARE_EVENT_LED_PLC_TX_PHASE_B = 3,
IOT_SHARE_EVENT_LED_PLC_TX_PHASE_C = 4,
IOT_SHARE_EVENT_LED_PLC_RX = 5,
IOT_SHARE_EVENT_LED_PLC_485_TX = 6,
IOT_SHARE_EVENT_LED_PLC_485_RX = 7,
IOT_SHARE_EVENT_ETH0_INT = 8,
IOT_SHARE_EVENT_GP_TIMER_INT = 9,
IOT_SHARE_EVENT_PM_TIMER = 10,
IOT_SHARE_EVENT_I2S_DMA_INT = 11,
IOT_SHARE_EVENT_I2S_DMA_OUT_T_EOF = 12,
IOT_SHARE_EVENT_I2S_TX_POOL = 13,
IOT_SHARE_EVENT_LED_PLC_APP_TX = 14,
IOT_SHARE_EVENT_LED_PLC_APP_RX = 15,
IOT_SHARE_EVENT_SADC0_DMA_INT = 16,
IOT_SHARE_EVENT_SADC1_DMA_INT = 17,
IOT_SHARE_EVENT_UART_DMA_INT = 18,
IOT_SHARE_EVENT_EM_EXT = 19,
IOT_SHARE_EVENT_LED_PLC_SM_FOUND = 20,
IOT_SHARE_EVENT_HW_TSFM = 21,
IOT_SHARE_EVENT_DBG_MSG_TIMER = 22,
IOT_SHARE_EVENT_CRYPTO = 23,
IOT_SHARE_EVENT_SPI0_DMA_SEND_OVER = 24,
IOT_SHARE_EVENT_SPI2_DMA_SEND_OVER = 25,
IOT_SHARE_EVENT_LED_RF_APP_TX = 26,
IOT_SHARE_EVENT_END = 32
}iot_share_event_type;
#define IOT_SHARE_TASK_MSG_ID_ALL IOT_TASK_MSG_ID_ALL
typedef void (*iot_share_msg_func_t)(iot_msg_entry_t *entry);
typedef void (*iot_share_msg_cancel_func_t)(iot_msg_entry_t *entry);
typedef void (*iot_share_event_func)(int);
typedef struct _iot_share_task_msg {
iot_task_msg_t msg;
/* data1 */
uint32_t data1;
/* data2*/
void* data2;
}iot_share_task_msg_t;
/* @brief iot_share_task_init - create the background
* iot_task shared by all tasks
* @return return 0 for success case. other for failed case.
*/
uint32_t iot_share_task_init();
/* @brief iot_share_task_deinit - delete the background share task.
*/
void iot_share_task_deinit();
/* @brief iot_share_task_post_msg - post msg to share task with high priority
* @param prio: priority to handle this message
* @param msg_type: message type
* @param msg_id: id of the message
* @param data1: data1 field of the message
* @param data2: a pointer field of the message
*
* @return ERR_FAIL -- Operation failed.
* @return ERR_OK -- Operation Successful.
*/
uint32_t iot_share_task_post_msg
(uint32_t prio, uint16_t msg_type, uint16_t msg_id, uint32_t data1,
void *data2);
/* @brief iot_share_task_clean_msg - clean msg with specified type and id
* @param msg_type: type of the message to be removed from share task queue
* @param msg_id: if of the message to be removed.
*/
void iot_share_task_clean_msg
(uint16_t msg_type, uint16_t msg_id);
/* @brief iot_share_task_event_register - bind a event with a callback function.
* @param type: The event type.
* @param func: The callback function.
* @param arg: Argument for the callback function.
* @return ERR_FAIL -- Operation failed.
* @return ERR_OK -- Operation Successful.
*/
uint32_t iot_share_task_event_register
(iot_share_event_type type, iot_share_event_func func, int arg);
/* @brief iot_share_task_msg_register - bind a message type with handling
* callback function. note that this function can only be invoked in
* initialization stage as there is no lock protection for this function.
* @param msg_type: the message type. see IOT_SHARE_TASK_MT_XXX.
* @param exe_func: the callback function for message excuting
* @param cancel_func: the callback function for message canceling
*
* @return ERR_FAIL -- Operation failed.
* @return ERR_OK -- Operation Successful.
*/
uint32_t iot_share_task_msg_register(uint16_t msg_type,
iot_share_msg_func_t exe_func, iot_share_msg_cancel_func_t cancel_func);
/* @brief iot_share_task_post_event_from_isr - post event to share task,
* caller is an ISR
* @param prio: priority to handle this message
* @param type: event type
* @return ERR_FAIL -- Operation failed.
* @return ERR_OK -- Operation Successful.
*/
uint32_t iot_share_task_post_event_from_isr
(uint32_t prio, iot_share_event_type type);
/* @brief iot_share_task_post_event_from_isr - post event to share task,
* caller is a TASK
* @param prio: priority to handle this message
* @param type: event type
* @return ERR_FAIL -- Operation failed.
* @return ERR_OK -- Operation Successful.
*/
uint32_t iot_share_task_post_event_from_task
(uint32_t prio, iot_share_event_type type);
/**
* @}
*/
#ifdef __cplusplus
}
#endif
#endif /* IOT_SHARE_TASK_H */