feat(service): Added service macro functions.
1.New macros for obtaining the number of variable parameters, adaptive parameter concatenation macros, and separated concatenation macros have been added (in preparation for the device tree).
This commit is contained in:
@@ -78,7 +78,7 @@ mr_driver_t *mr_driver_create(mr_uint16_t type, const mr_driver_dops_t *dops,
|
||||
mr_err_t mr_driver_del(mr_driver_t *drv) {
|
||||
/* Check parameter */
|
||||
MR_ASSERT((drv != MR_NULL) && MR_OBJECT_IS_INITED(drv));
|
||||
MR_ASSERT(MR_OBJECT_CLAZZ_IS_NAME(drv, driver));
|
||||
MR_ASSERT(MR_OBJECT_CLAZZ_IS(drv, driver));
|
||||
|
||||
/* Mark driver as dying */
|
||||
mr_atomic_fetch_or(&drv->flags, MR_DRIVER_FLAG_DYING);
|
||||
@@ -121,7 +121,7 @@ mr_err_t mr_driver_setup(mr_driver_t *drv) {
|
||||
|
||||
/* Check parameter */
|
||||
MR_ASSERT((drv != MR_NULL) && MR_OBJECT_IS_INITED(drv));
|
||||
MR_ASSERT(MR_OBJECT_CLAZZ_IS_NAME(drv, driver));
|
||||
MR_ASSERT(MR_OBJECT_CLAZZ_IS(drv, driver));
|
||||
|
||||
/* Lock driver */
|
||||
ret = driver_lock(drv);
|
||||
@@ -161,7 +161,7 @@ mr_err_t mr_driver_shutdown(mr_driver_t *drv) {
|
||||
|
||||
/* Check parameter */
|
||||
MR_ASSERT((drv != MR_NULL) && MR_OBJECT_IS_INITED(drv));
|
||||
MR_ASSERT(MR_OBJECT_CLAZZ_IS_NAME(drv, driver));
|
||||
MR_ASSERT(MR_OBJECT_CLAZZ_IS(drv, driver));
|
||||
|
||||
/* Lock driver */
|
||||
ret = driver_lock(drv);
|
||||
@@ -199,7 +199,7 @@ _exit:
|
||||
void mr_driver_state_set(mr_driver_t *drv, mr_err_t errcode) {
|
||||
/* Check parameter */
|
||||
MR_ASSERT((drv != MR_NULL) && MR_OBJECT_IS_INITED(drv));
|
||||
MR_ASSERT(MR_OBJECT_CLAZZ_IS_NAME(drv, driver));
|
||||
MR_ASSERT(MR_OBJECT_CLAZZ_IS(drv, driver));
|
||||
MR_ASSERT(errcode <= 0);
|
||||
|
||||
/* Limit error code(0 ~ 255) */
|
||||
@@ -217,7 +217,7 @@ void mr_driver_state_set(mr_driver_t *drv, mr_err_t errcode) {
|
||||
mr_err_t mr_driver_state(mr_driver_t *drv) {
|
||||
/* Check parameter */
|
||||
MR_ASSERT((drv != MR_NULL) && MR_OBJECT_IS_INITED(drv));
|
||||
MR_ASSERT(MR_OBJECT_CLAZZ_IS_NAME(drv, driver));
|
||||
MR_ASSERT(MR_OBJECT_CLAZZ_IS(drv, driver));
|
||||
|
||||
/* Get driver state */
|
||||
return -((mr_err_t)drv->state);
|
||||
|
||||
@@ -290,7 +290,7 @@ mr_err_t mr_gpio_irq_attach(mr_driver_t *drv, mr_waiter_t *entry) {
|
||||
/* Auto set GPIO irq event */
|
||||
mr_waiter_event_set(entry, mr_waiter_event(entry) | MR_WAIT_IN);
|
||||
|
||||
/* Request GPIO irq */
|
||||
/* Attach GPIO irq */
|
||||
return mr_waiter_wait(entry, &gp_data->irq);
|
||||
}
|
||||
|
||||
|
||||
@@ -32,8 +32,8 @@ struct mr_driver;
|
||||
/* Driver type definition */
|
||||
enum mr_driver_type {
|
||||
MR_DRIVER_TYPE_NONE = 0,
|
||||
MR_DRIVER_TYPE_GPIO = 0x100,
|
||||
MR_DRIVER_TYPE_MAX,
|
||||
MR_DRIVER_TYPE_GPIO = 0x0100,
|
||||
MR_DRIVER_TYPE_MASK = 0xff00,
|
||||
};
|
||||
|
||||
/* Driver flag definition */
|
||||
@@ -248,7 +248,8 @@ mr_driver_t *mr_driver_create(mr_uint16_t type, const mr_driver_dops_t *dops,
|
||||
* @param _drv The driver.
|
||||
* @return The driver type.
|
||||
*/
|
||||
#define MR_DRIVER_TYPE(_drv) (((mr_driver_t *)(_drv))->type)
|
||||
#define MR_DRIVER_TYPE(_drv) \
|
||||
(((mr_driver_t *)(_drv))->type & MR_DRIVER_TYPE_MASK)
|
||||
|
||||
/**
|
||||
* @brief This macro function checks if a driver is of a type.
|
||||
@@ -257,7 +258,8 @@ mr_driver_t *mr_driver_create(mr_uint16_t type, const mr_driver_dops_t *dops,
|
||||
* @param _type The driver type.
|
||||
* @return MR_TRUE if the driver is of the type, MR_FALSE otherwise.
|
||||
*/
|
||||
#define MR_DRIVER_IS_TYPE(_drv, _type) (MR_DRIVER_TYPE(_drv) == (_type))
|
||||
#define MR_DRIVER_IS_TYPE(_drv, _type) \
|
||||
(MR_DRIVER_TYPE(_drv) == ((_type) & MR_DRIVER_TYPE_MASK))
|
||||
|
||||
/**
|
||||
* @brief This macro function gets the private data.
|
||||
@@ -299,6 +301,18 @@ mr_err_t mr_driver_del(mr_driver_t *drv);
|
||||
*/
|
||||
mr_err_t mr_driver_setup(mr_driver_t *drv);
|
||||
|
||||
/**
|
||||
* @brief This macro function checks a driver.
|
||||
*
|
||||
* @param _drv The driver.
|
||||
* @param _type The driver type.
|
||||
*/
|
||||
#define MR_DRIVER_ASSERT(_drv, _type) \
|
||||
MR_ASSERT(((_drv) != MR_NULL) && MR_OBJECT_IS_INITED(_drv)); \
|
||||
MR_ASSERT(MR_OBJECT_CLAZZ_IS((_drv), driver)); \
|
||||
MR_ASSERT(MR_DRIVER_IS_SETUP(_drv)); \
|
||||
MR_ASSERT(MR_DRIVER_IS_TYPE((_drv), (_type)))
|
||||
|
||||
/**
|
||||
* @brief This function shuts down a driver.
|
||||
*
|
||||
@@ -323,18 +337,6 @@ void mr_driver_state_set(mr_driver_t *drv, mr_err_t errcode);
|
||||
*/
|
||||
mr_err_t mr_driver_state(mr_driver_t *drv);
|
||||
|
||||
/**
|
||||
* @brief This macro function checks a driver.
|
||||
*
|
||||
* @param _drv The driver.
|
||||
* @param _type The driver type.
|
||||
*/
|
||||
#define MR_DRIVER_ASSERT(_drv, _type) \
|
||||
MR_ASSERT(((_drv) != MR_NULL) && MR_OBJECT_IS_INITED(_drv)); \
|
||||
MR_ASSERT(MR_OBJECT_CLAZZ_IS_NAME((_drv), driver)); \
|
||||
MR_ASSERT(MR_DRIVER_IS_SETUP(_drv)); \
|
||||
MR_ASSERT(MR_DRIVER_IS_TYPE((_drv), (_type)))
|
||||
|
||||
/**
|
||||
* @brief This function finds a driver.
|
||||
*
|
||||
|
||||
@@ -153,7 +153,7 @@ mr_err_t mr_object_init(mr_object_t *obj, const mr_clazz_t *clazz);
|
||||
* @param _name The clazz name.
|
||||
* @return MR_TRUE on success, MR_FALSE otherwise.
|
||||
*/
|
||||
#define MR_OBJECT_CLAZZ_IS_NAME(_obj, _name) \
|
||||
#define MR_OBJECT_CLAZZ_IS(_obj, _name) \
|
||||
(mr_strcmp(MR_OBJECT_CLAZZ(_obj)->name, #_name) == 0)
|
||||
|
||||
/**
|
||||
|
||||
@@ -40,14 +40,6 @@ extern "C" {
|
||||
*/
|
||||
#define MR_ARRAY_SIZE(_array) (sizeof(_array) / sizeof((_array)[0]))
|
||||
|
||||
/**
|
||||
* @brief This macro function makes a local variable.
|
||||
*
|
||||
* @param _type The local variable type.
|
||||
* @param ... The local variable value.
|
||||
*/
|
||||
#define MR_MAKE_LOCAL(_type, ...) (&((_type){__VA_ARGS__}))
|
||||
|
||||
/**
|
||||
* @brief This macro function gets the minimum value.
|
||||
*
|
||||
@@ -85,14 +77,99 @@ extern "C" {
|
||||
#define MR_ALIGN_DOWN(_x, _ali) ((_x) & ~((_ali) - 1))
|
||||
|
||||
/**
|
||||
* @brief This macro function concatenates two strings.
|
||||
* @brief This macro function makes a local variable.
|
||||
*
|
||||
* @param _a The first string.
|
||||
* @param _b The second string.
|
||||
* @param _type The local variable type.
|
||||
* @param ... The local variable value.
|
||||
*/
|
||||
#define MR_MAKE_LOCAL(_type, ...) (&((_type){__VA_ARGS__}))
|
||||
|
||||
/**
|
||||
* @brief This macro function gets the number of arguments.
|
||||
*
|
||||
* @param ... The arguments
|
||||
* @return The number of arguments(0-63).
|
||||
*/
|
||||
#define MR_VA_ARGS_NUM(...) \
|
||||
__MR_VA_ARGS_NUM(, ##__VA_ARGS__, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, \
|
||||
53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, \
|
||||
39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, \
|
||||
25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, \
|
||||
11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0)
|
||||
#define __MR_VA_ARGS_NUM( \
|
||||
_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, \
|
||||
_17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, \
|
||||
_32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, \
|
||||
_47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, \
|
||||
_62, _63, _n, ...) \
|
||||
_n
|
||||
|
||||
/**
|
||||
* @brief This macro function concatenates n strings.
|
||||
*
|
||||
* @param ... The strings.
|
||||
* @return The concatenated string.
|
||||
*/
|
||||
#define __MR_CAT(_a, _b) _a##_b
|
||||
#define MR_CAT(_a, _b) __MR_CAT(_a, _b)
|
||||
#define MR_CAT(...) \
|
||||
__MR_CAT(MR_CAT_, MR_VA_ARGS_NUM(__VA_ARGS__))(__VA_ARGS__)
|
||||
#define __MR_CAT_IMPL(_a, ...) _a##__VA_ARGS__
|
||||
#define __MR_CAT(_a, ...) __MR_CAT_IMPL(_a, __VA_ARGS__)
|
||||
#define MR_CAT_0(_a, ...)
|
||||
#define MR_CAT_1(_a, ...) _a
|
||||
#define MR_CAT_2(_a, ...) __MR_CAT(_a, MR_CAT_1(__VA_ARGS__))
|
||||
#define MR_CAT_3(_a, ...) __MR_CAT(_a, MR_CAT_2(__VA_ARGS__))
|
||||
#define MR_CAT_4(_a, ...) __MR_CAT(_a, MR_CAT_3(__VA_ARGS__))
|
||||
#define MR_CAT_5(_a, ...) __MR_CAT(_a, MR_CAT_4(__VA_ARGS__))
|
||||
#define MR_CAT_6(_a, ...) __MR_CAT(_a, MR_CAT_5(__VA_ARGS__))
|
||||
#define MR_CAT_7(_a, ...) __MR_CAT(_a, MR_CAT_6(__VA_ARGS__))
|
||||
#define MR_CAT_8(_a, ...) __MR_CAT(_a, MR_CAT_7(__VA_ARGS__))
|
||||
#define MR_CAT_9(_a, ...) __MR_CAT(_a, MR_CAT_8(__VA_ARGS__))
|
||||
#define MR_CAT_10(_a, ...) __MR_CAT(_a, MR_CAT_9(__VA_ARGS__))
|
||||
#define MR_CAT_11(_a, ...) __MR_CAT(_a, MR_CAT_10(__VA_ARGS__))
|
||||
#define MR_CAT_12(_a, ...) __MR_CAT(_a, MR_CAT_11(__VA_ARGS__))
|
||||
#define MR_CAT_13(_a, ...) __MR_CAT(_a, MR_CAT_12(__VA_ARGS__))
|
||||
#define MR_CAT_14(_a, ...) __MR_CAT(_a, MR_CAT_13(__VA_ARGS__))
|
||||
#define MR_CAT_15(_a, ...) __MR_CAT(_a, MR_CAT_14(__VA_ARGS__))
|
||||
|
||||
/**
|
||||
* @brief This macro function concatenates n strings with a separator.
|
||||
*
|
||||
* @param _s The separator.
|
||||
* @param ... The strings.
|
||||
* @return The concatenated string.
|
||||
*/
|
||||
#define MR_CAT_SEP(_s, ...) \
|
||||
__MR_CAT(MR_CAT_SEP_, MR_VA_ARGS_NUM(__VA_ARGS__))(_s, __VA_ARGS__)
|
||||
#define MR_CAT_SEP_0(_s, _a, ...)
|
||||
#define MR_CAT_SEP_1(_s, _a, ...) MR_CAT(_s, _a)
|
||||
#define MR_CAT_SEP_2(_s, _a, ...) \
|
||||
MR_CAT(_s, _a, MR_CAT_SEP_1(_s, __VA_ARGS__))
|
||||
#define MR_CAT_SEP_3(_s, _a, ...) \
|
||||
MR_CAT(_s, _a, MR_CAT_SEP_2(_s, __VA_ARGS__))
|
||||
#define MR_CAT_SEP_4(_s, _a, ...) \
|
||||
MR_CAT(_s, _a, MR_CAT_SEP_3(_s, __VA_ARGS__))
|
||||
#define MR_CAT_SEP_5(_s, _a, ...) \
|
||||
MR_CAT(_s, _a, MR_CAT_SEP_4(_s, __VA_ARGS__))
|
||||
#define MR_CAT_SEP_6(_s, _a, ...) \
|
||||
MR_CAT(_s, _a, MR_CAT_SEP_5(_s, __VA_ARGS__))
|
||||
#define MR_CAT_SEP_7(_s, _a, ...) \
|
||||
MR_CAT(_s, _a, MR_CAT_SEP_6(_s, __VA_ARGS__))
|
||||
#define MR_CAT_SEP_8(_s, _a, ...) \
|
||||
MR_CAT(_s, _a, MR_CAT_SEP_7(_s, __VA_ARGS__))
|
||||
#define MR_CAT_SEP_9(_s, _a, ...) \
|
||||
MR_CAT(_s, _a, MR_CAT_SEP_8(_s, __VA_ARGS__))
|
||||
#define MR_CAT_SEP_10(_s, _a, ...) \
|
||||
MR_CAT(_s, _a, MR_CAT_SEP_9(_s, __VA_ARGS__))
|
||||
#define MR_CAT_SEP_11(_s, _a, ...) \
|
||||
MR_CAT(_s, _a, MR_CAT_SEP_10(_s, __VA_ARGS__))
|
||||
#define MR_CAT_SEP_12(_s, _a, ...) \
|
||||
MR_CAT(_s, _a, MR_CAT_SEP_11(_s, __VA_ARGS__))
|
||||
#define MR_CAT_SEP_13(_s, _a, ...) \
|
||||
MR_CAT(_s, _a, MR_CAT_SEP_12(_s, __VA_ARGS__))
|
||||
#define MR_CAT_SEP_14(_s, _a, ...) \
|
||||
MR_CAT(_s, _a, MR_CAT_SEP_13(_s, __VA_ARGS__))
|
||||
#define MR_CAT_SEP_15(_s, _a, ...) \
|
||||
MR_CAT(_s, _a, MR_CAT_SEP_14(_s, __VA_ARGS__))
|
||||
|
||||
/**
|
||||
* @brief This function verifies the parity(even).
|
||||
|
||||
@@ -122,7 +122,7 @@ mr_err_t mr_timer_stop(mr_timer_t *timer);
|
||||
MR_INLINE mr_tick_t mr_timer_tick(mr_timer_t *timer) {
|
||||
/* Check parameter */
|
||||
MR_ASSERT((timer != MR_NULL) && MR_OBJECT_IS_INITED(timer));
|
||||
MR_ASSERT(MR_OBJECT_CLAZZ_IS_NAME(timer, timer));
|
||||
MR_ASSERT(MR_OBJECT_CLAZZ_IS(timer, timer));
|
||||
|
||||
/* Return timer tick */
|
||||
return timer->itick;
|
||||
|
||||
@@ -221,7 +221,7 @@ mr_err_t mr_waiter_cancel(mr_waiter_t *wait);
|
||||
MR_INLINE mr_uint32_t mr_waiter_event(mr_waiter_t *wait) {
|
||||
/* Check parameter */
|
||||
MR_ASSERT((wait != MR_NULL) && MR_OBJECT_IS_INITED(wait));
|
||||
MR_ASSERT(MR_OBJECT_CLAZZ_IS_NAME(wait, waiter));
|
||||
MR_ASSERT(MR_OBJECT_CLAZZ_IS(wait, waiter));
|
||||
|
||||
/* Return waiter event */
|
||||
return wait->event;
|
||||
|
||||
@@ -140,7 +140,7 @@ MR_INLINE mr_err_t mr_workqueue_hook_set(mr_workqueue_t *queue,
|
||||
const mr_workqueue_hook_t *hook) {
|
||||
/* Check parameter */
|
||||
MR_ASSERT((queue != MR_NULL) && MR_OBJECT_IS_INITED(queue));
|
||||
MR_ASSERT(MR_OBJECT_CLAZZ_IS_NAME(queue, workqueue));
|
||||
MR_ASSERT(MR_OBJECT_CLAZZ_IS(queue, workqueue));
|
||||
MR_ASSERT(hook != MR_NULL);
|
||||
|
||||
/* Set workqueue hook */
|
||||
@@ -256,9 +256,9 @@ mr_err_t mr_work_cancel(mr_work_t *work);
|
||||
MR_INLINE mr_err_t mr_work_bind(mr_work_t *work, mr_workqueue_t *queue) {
|
||||
/* Check parameter */
|
||||
MR_ASSERT((work != MR_NULL) && MR_OBJECT_IS_INITED(work));
|
||||
MR_ASSERT(MR_OBJECT_CLAZZ_IS_NAME(work, work));
|
||||
MR_ASSERT(MR_OBJECT_CLAZZ_IS(work, work));
|
||||
MR_ASSERT((queue != MR_NULL) && MR_OBJECT_IS_INITED(queue));
|
||||
MR_ASSERT(MR_OBJECT_CLAZZ_IS_NAME(queue, workqueue));
|
||||
MR_ASSERT(MR_OBJECT_CLAZZ_IS(queue, workqueue));
|
||||
|
||||
/* Set workqueue */
|
||||
work->queue = queue;
|
||||
|
||||
@@ -189,7 +189,7 @@ mr_irq_t *mr_irq_create(mr_uint32_t irq_start, mr_uint32_t irq_end,
|
||||
mr_err_t mr_irq_del(mr_irq_t *irq) {
|
||||
/* Check parameter */
|
||||
MR_ASSERT((irq != MR_NULL) && MR_OBJECT_IS_INITED(irq));
|
||||
MR_ASSERT(MR_OBJECT_CLAZZ_IS_NAME(irq, irq));
|
||||
MR_ASSERT(MR_OBJECT_CLAZZ_IS(irq, irq));
|
||||
|
||||
/* Mark irq as dying */
|
||||
mr_atomic_store(&irq->dying, MR_TRUE);
|
||||
|
||||
@@ -86,7 +86,7 @@ static void timer_remove(mr_timer_t *timer) {
|
||||
mr_err_t mr_timer_del(mr_timer_t *timer) {
|
||||
/* Check parameter */
|
||||
MR_ASSERT((timer != MR_NULL) && MR_OBJECT_IS_INITED(timer));
|
||||
MR_ASSERT(MR_OBJECT_CLAZZ_IS_NAME(timer, timer));
|
||||
MR_ASSERT(MR_OBJECT_CLAZZ_IS(timer, timer));
|
||||
|
||||
/* Remove timer */
|
||||
timer_remove(timer);
|
||||
@@ -128,7 +128,7 @@ mr_err_t mr_timer_start(mr_timer_t *timer) {
|
||||
|
||||
/* Check parameter */
|
||||
MR_ASSERT((timer != MR_NULL) && MR_OBJECT_IS_INITED(timer));
|
||||
MR_ASSERT(MR_OBJECT_CLAZZ_IS_NAME(timer, timer));
|
||||
MR_ASSERT(MR_OBJECT_CLAZZ_IS(timer, timer));
|
||||
|
||||
/* Lock */
|
||||
mask = mr_spinlock_lock_irqsave(&__lock);
|
||||
@@ -144,7 +144,7 @@ mr_err_t mr_timer_start(mr_timer_t *timer) {
|
||||
mr_err_t mr_timer_stop(mr_timer_t *timer) {
|
||||
/* Check parameter */
|
||||
MR_ASSERT((timer != MR_NULL) && MR_OBJECT_IS_INITED(timer));
|
||||
MR_ASSERT(MR_OBJECT_CLAZZ_IS_NAME(timer, timer));
|
||||
MR_ASSERT(MR_OBJECT_CLAZZ_IS(timer, timer));
|
||||
|
||||
/* Remove timer */
|
||||
timer_remove(timer);
|
||||
@@ -156,7 +156,7 @@ mr_err_t mr_timer_tick_set(mr_timer_t *timer, mr_tick_t tick) {
|
||||
|
||||
/* Check parameter */
|
||||
MR_ASSERT((timer != MR_NULL) && MR_OBJECT_IS_INITED(timer));
|
||||
MR_ASSERT(MR_OBJECT_CLAZZ_IS_NAME(timer, timer));
|
||||
MR_ASSERT(MR_OBJECT_CLAZZ_IS(timer, timer));
|
||||
MR_ASSERT(tick > 0);
|
||||
|
||||
/* Lock */
|
||||
|
||||
@@ -96,7 +96,7 @@ static void waitable_remove(mr_waitable_t *able) {
|
||||
mr_err_t mr_waitable_del(mr_waitable_t *able) {
|
||||
/* Check parameter */
|
||||
MR_ASSERT((able != MR_NULL) && MR_OBJECT_IS_INITED(able));
|
||||
MR_ASSERT(MR_OBJECT_CLAZZ_IS_NAME(able, waitable));
|
||||
MR_ASSERT(MR_OBJECT_CLAZZ_IS(able, waitable));
|
||||
|
||||
/* Remove waitable */
|
||||
waitable_remove(able);
|
||||
@@ -205,7 +205,7 @@ mr_err_t mr_waitable_complete(mr_waitable_t *able) {
|
||||
|
||||
/* Check parameter */
|
||||
MR_ASSERT((able != MR_NULL) && MR_OBJECT_IS_INITED(able));
|
||||
MR_ASSERT(MR_OBJECT_CLAZZ_IS_NAME(able, waitable));
|
||||
MR_ASSERT(MR_OBJECT_CLAZZ_IS(able, waitable));
|
||||
|
||||
/* Reduce unnecessary check operations */
|
||||
if (mr_list_is_empty(&able->list)) {
|
||||
@@ -223,7 +223,7 @@ mr_err_t mr_waitable_complete(mr_waitable_t *able) {
|
||||
mr_err_t mr_waitable_raise(mr_waitable_t *able, mr_uint32_t event) {
|
||||
/* Check parameter */
|
||||
MR_ASSERT((able != MR_NULL) && MR_OBJECT_IS_INITED(able));
|
||||
MR_ASSERT(MR_OBJECT_CLAZZ_IS_NAME(able, waitable));
|
||||
MR_ASSERT(MR_OBJECT_CLAZZ_IS(able, waitable));
|
||||
|
||||
/* Raise waitable event */
|
||||
waitable_handle(able, event);
|
||||
@@ -312,7 +312,7 @@ static void waiter_remove(mr_waiter_t *wait) {
|
||||
mr_err_t mr_waiter_del(mr_waiter_t *wait) {
|
||||
/* Check parameter */
|
||||
MR_ASSERT((wait != MR_NULL) && MR_OBJECT_IS_INITED(wait));
|
||||
MR_ASSERT(MR_OBJECT_CLAZZ_IS_NAME(wait, waiter));
|
||||
MR_ASSERT(MR_OBJECT_CLAZZ_IS(wait, waiter));
|
||||
|
||||
/* Remove waiter */
|
||||
waiter_remove(wait);
|
||||
@@ -331,9 +331,9 @@ mr_err_t mr_waiter_wait(mr_waiter_t *wait, mr_waitable_t *able) {
|
||||
|
||||
/* Check parameter */
|
||||
MR_ASSERT((wait != MR_NULL) && MR_OBJECT_IS_INITED(wait));
|
||||
MR_ASSERT(MR_OBJECT_CLAZZ_IS_NAME(wait, waiter));
|
||||
MR_ASSERT(MR_OBJECT_CLAZZ_IS(wait, waiter));
|
||||
MR_ASSERT((able != MR_NULL) && MR_OBJECT_IS_INITED(able));
|
||||
MR_ASSERT(MR_OBJECT_CLAZZ_IS_NAME(able, waitable));
|
||||
MR_ASSERT(MR_OBJECT_CLAZZ_IS(able, waitable));
|
||||
|
||||
/* Lock */
|
||||
mask = mr_spinlock_lock_irqsave(&__lock);
|
||||
@@ -386,7 +386,7 @@ _exit:
|
||||
mr_err_t mr_waiter_cancel(mr_waiter_t *wait) {
|
||||
/* Check parameter */
|
||||
MR_ASSERT((wait != MR_NULL) && MR_OBJECT_IS_INITED(wait));
|
||||
MR_ASSERT(MR_OBJECT_CLAZZ_IS_NAME(wait, waiter));
|
||||
MR_ASSERT(MR_OBJECT_CLAZZ_IS(wait, waiter));
|
||||
|
||||
/* Remove waiter */
|
||||
waiter_remove(wait);
|
||||
@@ -398,7 +398,7 @@ mr_err_t mr_waiter_event_set(mr_waiter_t *wait, mr_uint32_t event) {
|
||||
|
||||
/* Check parameter */
|
||||
MR_ASSERT((wait != MR_NULL) && MR_OBJECT_IS_INITED(wait));
|
||||
MR_ASSERT(MR_OBJECT_CLAZZ_IS_NAME(wait, waiter));
|
||||
MR_ASSERT(MR_OBJECT_CLAZZ_IS(wait, waiter));
|
||||
MR_ASSERT((event & WAIT_TYPE_MASK) != 0);
|
||||
|
||||
/* Lock */
|
||||
|
||||
@@ -159,7 +159,7 @@ mr_workqueue_t *mr_workqueue_create(void) {
|
||||
mr_err_t mr_workqueue_del(mr_workqueue_t *queue) {
|
||||
/* Check parameter */
|
||||
MR_ASSERT((queue != MR_NULL) && MR_OBJECT_IS_INITED(queue));
|
||||
MR_ASSERT(MR_OBJECT_CLAZZ_IS_NAME(queue, workqueue));
|
||||
MR_ASSERT(MR_OBJECT_CLAZZ_IS(queue, workqueue));
|
||||
|
||||
/* Mark workqueue as dying */
|
||||
mr_atomic_store(&queue->dying, MR_TRUE);
|
||||
@@ -196,7 +196,7 @@ mr_err_t mr_workqueue_execute(mr_workqueue_t *queue) {
|
||||
|
||||
/* Check parameter */
|
||||
MR_ASSERT((queue != MR_NULL) && MR_OBJECT_IS_INITED(queue));
|
||||
MR_ASSERT(MR_OBJECT_CLAZZ_IS_NAME(queue, workqueue));
|
||||
MR_ASSERT(MR_OBJECT_CLAZZ_IS(queue, workqueue));
|
||||
|
||||
/* Reduce unnecessary lock operations */
|
||||
if (mr_list_is_empty(&queue->list)
|
||||
@@ -255,9 +255,9 @@ mr_err_t mr_workqueue_work(mr_workqueue_t *queue, mr_work_t *work) {
|
||||
|
||||
/* Check parameter */
|
||||
MR_ASSERT((queue != MR_NULL) && MR_OBJECT_IS_INITED(queue));
|
||||
MR_ASSERT(MR_OBJECT_CLAZZ_IS_NAME(queue, workqueue));
|
||||
MR_ASSERT(MR_OBJECT_CLAZZ_IS(queue, workqueue));
|
||||
MR_ASSERT((work != MR_NULL) && MR_OBJECT_IS_INITED(work));
|
||||
MR_ASSERT(MR_OBJECT_CLAZZ_IS_NAME(work, work));
|
||||
MR_ASSERT(MR_OBJECT_CLAZZ_IS(work, work));
|
||||
|
||||
/* Check if workqueue is dying */
|
||||
if (mr_atomic_load(&queue->dying)) {
|
||||
@@ -298,9 +298,9 @@ mr_err_t mr_workqueue_delayed_work(mr_workqueue_t *queue, mr_work_t *work,
|
||||
|
||||
/* Check parameter */
|
||||
MR_ASSERT((queue != MR_NULL) && MR_OBJECT_IS_INITED(queue));
|
||||
MR_ASSERT(MR_OBJECT_CLAZZ_IS_NAME(queue, workqueue));
|
||||
MR_ASSERT(MR_OBJECT_CLAZZ_IS(queue, workqueue));
|
||||
MR_ASSERT((work != MR_NULL) && MR_OBJECT_IS_INITED(work));
|
||||
MR_ASSERT(MR_OBJECT_CLAZZ_IS_NAME(work, work));
|
||||
MR_ASSERT(MR_OBJECT_CLAZZ_IS(work, work));
|
||||
MR_ASSERT(tick < (MR_TICK_MAX / 2));
|
||||
|
||||
/* Check if tick is zero */
|
||||
@@ -457,7 +457,7 @@ mr_work_t *mr_work_create(mr_work_entry_t *entry, void *param) {
|
||||
mr_err_t mr_work_del(mr_work_t *work) {
|
||||
/* Check parameter */
|
||||
MR_ASSERT((work != MR_NULL) && MR_OBJECT_IS_INITED(work));
|
||||
MR_ASSERT(MR_OBJECT_CLAZZ_IS_NAME(work, work));
|
||||
MR_ASSERT(MR_OBJECT_CLAZZ_IS(work, work));
|
||||
|
||||
/* Cancel work */
|
||||
mr_work_cancel(work);
|
||||
@@ -473,7 +473,7 @@ mr_err_t mr_work_schedule(mr_work_t *work) {
|
||||
|
||||
/* Check parameter */
|
||||
MR_ASSERT((work != MR_NULL) && MR_OBJECT_IS_INITED(work));
|
||||
MR_ASSERT(MR_OBJECT_CLAZZ_IS_NAME(work, work));
|
||||
MR_ASSERT(MR_OBJECT_CLAZZ_IS(work, work));
|
||||
|
||||
/* Get workqueue */
|
||||
queue = mr_workqueue_get(work->queue);
|
||||
@@ -495,7 +495,7 @@ mr_err_t mr_work_delayed_schedule(mr_work_t *work, mr_tick_t tick) {
|
||||
|
||||
/* Check parameter */
|
||||
MR_ASSERT((work != MR_NULL) && MR_OBJECT_IS_INITED(work));
|
||||
MR_ASSERT(MR_OBJECT_CLAZZ_IS_NAME(work, work));
|
||||
MR_ASSERT(MR_OBJECT_CLAZZ_IS(work, work));
|
||||
MR_ASSERT(tick < (MR_TICK_MAX / 2));
|
||||
|
||||
/* Get workqueue */
|
||||
@@ -528,7 +528,7 @@ static void work_remove(mr_work_t *work) {
|
||||
mr_err_t mr_work_cancel(mr_work_t *work) {
|
||||
/* Check parameter */
|
||||
MR_ASSERT((work != MR_NULL) && MR_OBJECT_IS_INITED(work));
|
||||
MR_ASSERT(MR_OBJECT_CLAZZ_IS_NAME(work, work));
|
||||
MR_ASSERT(MR_OBJECT_CLAZZ_IS(work, work));
|
||||
|
||||
/* Remove work */
|
||||
work_remove(work);
|
||||
|
||||
Reference in New Issue
Block a user