195 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			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 */
 |