196 lines
6.4 KiB
C
Raw Normal View History

2025-02-27 17:59:18 +08:00
// Copyright 2020-2021 Beken
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#pragma once
#include <common/bk_err.h>
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief BK EVENT API
* @addtogroup bk_api_event BK EVENT API
* @{
*/
/**
* @brief BK EVENT typedefs
* @defgroup bk_api_event_typedef
* @ingroup bk_api_event
* @{
*/
typedef enum {
EVENT_MOD_WIFI_INTERNAL, /**< WiFi internal event */
EVENT_MOD_WIFI, /**< WiFi public event */
EVENT_MOD_NETIF, /**< Netif event */
EVENT_MOD_COUNT, /**< Event module count */
} event_module_t;
#define BK_ERR_EVENT_MOD (BK_ERR_EVENT_BASE - 1) /**< Event module is not supported */
#define BK_ERR_EVENT_ID (BK_ERR_EVENT_BASE - 2) /**< Event ID is not supported */
#define BK_ERR_EVENT_MOD_OR_ID (BK_ERR_EVENT_BASE - 3) /**< Event ID or Module is invalid */
#define BK_ERR_EVENT_CB_EXIST (BK_ERR_EVENT_BASE - 4) /**< Event cb already registered */
#define BK_ERR_EVENT_NO_CB (BK_ERR_EVENT_BASE - 5) /**< No event cb is registered */
#define BK_ERR_EVENT_CREATE_QUEUE (BK_ERR_EVENT_BASE - 6) /**< Failed to create event message queue */
#define BK_ERR_EVENT_CREATE_MUTEX (BK_ERR_EVENT_BASE - 7) /**< Failed to create event mutex */
#define BK_ERR_EVENT_CREATE_TASK (BK_ERR_EVENT_BASE - 8) /**< Failed to create event task */
#define BK_ERR_EVENT_NULL_MSG (BK_ERR_EVENT_BASE - 9) /**< Event message is NULL */
#define BK_ERR_EVENT_INIT_SEM (BK_ERR_EVENT_BASE - 10) /**< Failed to init RTOS semaphore */
#define BK_ERR_EVENT_NOT_INIT (BK_ERR_EVENT_BASE - 11) /**< Event module not init */
#define BK_ERR_EVENT_POST_QUEUE (BK_ERR_EVENT_BASE - 12) /**< Failed to post event request to event queue */
#define BK_ERR_EVENT_UNKNOWN_MSG (BK_ERR_EVENT_BASE - 13) /**< Not supported event message */
#define EVENT_ID_ALL (-1) /**< All events in a event module */
/**
* @}
*/
/**
* @}
*/
/**
* @brief BK EVENT API
* @addtogroup bk_api_event BK EVENT API
* @{
*/
/**
* @brief Event callback
*
* The event callback get called when related event dispatched.
*/
typedef bk_err_t (*event_cb_t)(void *arg, event_module_t event_module,
int event_id, void *event_data);
/**
* @brief Register event callback
*
* @param event_module_id the module ID of the event to register the callback for
* @param event_id the id of the event to register the callback for
* @param event_cb the callback which gets called when the event is dispatched
* @param event_cb_arg data, aside from event data, that is passed to the handler when it is called
*
* @return
* - BK_OK: succeed
* - BK_ERR_EVENT_NOT_INIT: the event module is not initialized
* - BK_ERR_EVENT_MOD_OR_ID: the event module ID or event ID is invalid
* - BK_ERR_EVENT_NO_MEM: out of memory
* - BK_ERR_EVENT_INIT_SEM: failed to init the internal event semaphore
* - BK_ERR_EVENT_POST_QUEUE: failed to post the event to event queue
* - BK_ERR_EVENT_CB_EXIST: the event callback already unregistered
* - Others: Fail
*/
bk_err_t bk_event_register_cb(event_module_t event_module_id, int event_id,
event_cb_t event_cb, void *event_cb_arg);
/**
* @brief Unregister a callback
*
* This function can be used to unregister a callback so that it no longer gets called
* during dispatch.
*
* @param event_module_id the ID of the module with which to unregister the callback
* @param event_id the ID of the event with which to unregister the callback
* @param event_cb the callback to be unregistered
*
* @return
* - BK_OK: Success
* - BK_ERR_EVENT_NOT_INIT: the event module is not initialized
* - BK_ERR_EVENT_MOD_OR_ID: the event module ID or event ID is invalid
* - BK_ERR_EVENT_NO_MEM: out of memory
* - BK_ERR_EVENT_INIT_SEM: failed to init the internal event semaphore
* - BK_ERR_EVENT_POST_QUEUE: failed to post the event to event queue
* - BK_ERR_EVENT_NO_CB: the event callback already unregistered
* - Others: Fail
*/
bk_err_t bk_event_unregister_cb(event_module_t event_module_id, int event_id,
event_cb_t event_cb);
/**
* @brief Posts an event to the event task.
*
* @param event_module_id The ID of the module that generates the event
* @param event_id the event id that identifies the event
* @param event_data the data, specific to the event occurence, that gets passed to the callback
* @param event_data_size the size of the event data
* @param timeout number of milliseconds to block on a full event queue
*
* @return
* - BK_OK: Success
* - BK_ERR_EVENT_NOT_INIT: the event module is not initialized
* - BK_ERR_EVENT_MOD_OR_ID: the event module ID or event ID is not invalid
* - BK_ERR_EVENT_NO_MEM: out of memory
* - BK_ERR_EVENT_INIT_SEM: failed to init the internal event semaphore
* - BK_ERR_EVENT_POST_QUEUE: failed to post the event to event queue
* - Others: Fail
*/
bk_err_t bk_event_post(event_module_t event_module_id, int event_id,
void* event_data, size_t event_data_size, uint32_t timeout);
/**
* @brief Init the event module
*
* This API initializes the event queue and create the event task.
*
* This API should be called before any event API is called, generally it should
* be called before WiFi/BLE is initialized.
*
* @return
* - BK_OK: succeed
* - BK_ERR_EVENT_CREATE_QUEUE: failed to create event queue
* - BK_ERR_EVENT_CREATE_TASK: failed to create event task
* - Others: Fail
*/
bk_err_t bk_event_init(void);
/**
* @brief Deinit the event module
*
* This API destroy the event queue and delete the event task.
*
* @return
* - BK_OK: succeed
* - BK_ERR_NO_MEM: out of memory
* - Others: Fail
*/
bk_err_t bk_event_deinit(void);
/**
* @brief Dump all registered event callback
*
* @attention This API is for debug only
*
* @return
* - BK_OK: succeed
* - BK_ERR_NO_MEM: out of memory
* - Others: Fail
*/
bk_err_t bk_event_dump(void);
/**
* @}
*/
typedef bk_err_t (*event_callback_t)(void *arg, event_module_t event_module,
int event_id, void *event_data);
#ifdef __cplusplus
}
#endif