unified: API changes to event handling
Allows event objects to pend signals in a cumulative way using the semaphore in a non-binary way. Jira: ZEP-928 Change-Id: I3ce8a075ef89309118596ec5781c15d4f3289d34 Signed-off-by: Peter Mitsis <peter.mitsis@windriver.com>
This commit is contained in:
parent
900fbc20ba
commit
058fa4e493
4 changed files with 17 additions and 10 deletions
|
@ -1391,12 +1391,12 @@ struct k_alert {
|
||||||
|
|
||||||
extern void _alert_deliver(struct k_work *work);
|
extern void _alert_deliver(struct k_work *work);
|
||||||
|
|
||||||
#define K_ALERT_INITIALIZER(obj, alert_handler) \
|
#define K_ALERT_INITIALIZER(obj, alert_handler, max_num_pending_alerts) \
|
||||||
{ \
|
{ \
|
||||||
.handler = (k_alert_handler_t)alert_handler, \
|
.handler = (k_alert_handler_t)alert_handler, \
|
||||||
.send_count = ATOMIC_INIT(0), \
|
.send_count = ATOMIC_INIT(0), \
|
||||||
.work_item = K_WORK_INITIALIZER(_alert_deliver), \
|
.work_item = K_WORK_INITIALIZER(_alert_deliver), \
|
||||||
.sem = K_SEM_INITIALIZER(obj.sem, 0, 1), \
|
.sem = K_SEM_INITIALIZER(obj.sem, 0, max_num_pending_alerts), \
|
||||||
_DEBUG_TRACING_KERNEL_OBJECTS_INIT \
|
_DEBUG_TRACING_KERNEL_OBJECTS_INIT \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1411,11 +1411,13 @@ extern void _alert_deliver(struct k_work *work);
|
||||||
*
|
*
|
||||||
* @param name Alert name
|
* @param name Alert name
|
||||||
* @param alert_handler Handler to invoke after the delivery of the alert
|
* @param alert_handler Handler to invoke after the delivery of the alert
|
||||||
|
* @param max_num_pending_alerts Maximum number of concurrent pending alerts
|
||||||
*/
|
*/
|
||||||
#define K_ALERT_DEFINE(name, alert_handler) \
|
#define K_ALERT_DEFINE(name, alert_handler, max_num_pending_alerts) \
|
||||||
struct k_alert name \
|
struct k_alert name \
|
||||||
__in_section(_k_event_list, alert, name) = \
|
__in_section(_k_event_list, alert, name) = \
|
||||||
K_ALERT_INITIALIZER(name, alert_handler)
|
K_ALERT_INITIALIZER(name, alert_handler, \
|
||||||
|
max_num_pending_alerts)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Initialize an alert object.
|
* @brief Initialize an alert object.
|
||||||
|
@ -1425,10 +1427,12 @@ extern void _alert_deliver(struct k_work *work);
|
||||||
*
|
*
|
||||||
* @param alert Pointer to the alert object
|
* @param alert Pointer to the alert object
|
||||||
* @param handler Routine to invoke after delivery of alert
|
* @param handler Routine to invoke after delivery of alert
|
||||||
|
* @param max_num_pending_alerts Maximum number of concurrent pending alerts
|
||||||
*
|
*
|
||||||
* @return N/A
|
* @return N/A
|
||||||
*/
|
*/
|
||||||
extern void k_alert_init(struct k_alert *alert, k_alert_handler_t handler);
|
extern void k_alert_init(struct k_alert *alert, k_alert_handler_t handler,
|
||||||
|
unsigned int max_num_pending_alerts);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Receive an alert
|
* @brief Receive an alert
|
||||||
|
|
|
@ -1515,7 +1515,7 @@ static inline int task_event_recv(kevent_t legacy_event, int32_t timeout)
|
||||||
* @param event_handler Function to handle the event (can be NULL)
|
* @param event_handler Function to handle the event (can be NULL)
|
||||||
*/
|
*/
|
||||||
#define DEFINE_EVENT(name, event_handler) \
|
#define DEFINE_EVENT(name, event_handler) \
|
||||||
K_ALERT_DEFINE(_k_event_obj_##name, event_handler); \
|
K_ALERT_DEFINE(_k_event_obj_##name, event_handler, 1); \
|
||||||
struct k_alert * const name = &(_k_event_obj_##name)
|
struct k_alert * const name = &(_k_event_obj_##name)
|
||||||
|
|
||||||
/* memory maps */
|
/* memory maps */
|
||||||
|
|
|
@ -44,14 +44,17 @@ void _alert_deliver(struct k_work *work)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void k_alert_init(struct k_alert *alert, k_alert_handler_t handler)
|
void k_alert_init(struct k_alert *alert, k_alert_handler_t handler,
|
||||||
|
unsigned int max_num_pending_alerts)
|
||||||
{
|
{
|
||||||
const struct k_work my_work_item = { NULL, _alert_deliver, { 1 } };
|
const struct k_work my_work_item = {
|
||||||
|
NULL, _alert_deliver, { max_num_pending_alerts }
|
||||||
|
};
|
||||||
|
|
||||||
alert->handler = handler;
|
alert->handler = handler;
|
||||||
alert->send_count = ATOMIC_INIT(0);
|
alert->send_count = ATOMIC_INIT(0);
|
||||||
alert->work_item = my_work_item;
|
alert->work_item = my_work_item;
|
||||||
k_sem_init(&alert->sem, 0, 1);
|
k_sem_init(&alert->sem, 0, max_num_pending_alerts);
|
||||||
SYS_TRACING_OBJ_INIT(micro_event, alert);
|
SYS_TRACING_OBJ_INIT(micro_event, alert);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -618,7 +618,7 @@ def kernel_main_c_events():
|
||||||
if kernel_type == 'micro':
|
if kernel_type == 'micro':
|
||||||
kernel_main_c_out("DEFINE_EVENT(%s, %s);\n" % (event[0], event[1]))
|
kernel_main_c_out("DEFINE_EVENT(%s, %s);\n" % (event[0], event[1]))
|
||||||
else:
|
else:
|
||||||
kernel_main_c_out("K_ALERT_DEFINE(_k_event_obj_%s, %s);\n" %
|
kernel_main_c_out("K_ALERT_DEFINE(_k_event_obj_%s, %s, 1);\n" %
|
||||||
(event[0], event[1]))
|
(event[0], event[1]))
|
||||||
|
|
||||||
def kernel_main_c_mutexes():
|
def kernel_main_c_mutexes():
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue