Modified event_t structure to make it castable to void *

This commit is contained in:
Silvano Seva 2020-12-05 22:14:58 +01:00 committed by Federico Amedeo Izzo
parent 94b37d9137
commit 014262f4df
2 changed files with 16 additions and 8 deletions

View File

@ -40,10 +40,15 @@ enum eventType_t
* But if we keep the size under 32 bits, we can sent the * But if we keep the size under 32 bits, we can sent the
* entire message, casting it to a void * pointer. * entire message, casting it to a void * pointer.
*/ */
typedef struct typedef union
{ {
uint32_t type : 3; struct
uint32_t payload : 29; {
uint32_t type : 3,
payload : 29;
};
void *value;
}event_t; }event_t;
#endif /* EVENT_H */ #endif /* EVENT_H */

View File

@ -103,9 +103,12 @@ static void ui_task(void *arg)
while(1) while(1)
{ {
// Wait to receive an event message // Read from the keyboard queue (returns 0 if no message is present)
event_t event = (event_t)OSQPend(&ui_queue, 0u, OS_OPT_PEND_BLOCKING, // Copy keyboard_t keys from received void * pointer msg
&msg_size, 0u, &os_err); void *msg = OSQPend(&ui_queue, 0u, OS_OPT_PEND_BLOCKING,
&msg_size, 0u, &os_err);
event_t event = ((event_t) msg);
// Lock mutex, read and write state // Lock mutex, read and write state
OSMutexPend(&state_mutex, 0u, OS_OPT_PEND_BLOCKING, 0u, &os_err); OSMutexPend(&state_mutex, 0u, OS_OPT_PEND_BLOCKING, 0u, &os_err);
// React to keypresses and update FSM inside state // React to keypresses and update FSM inside state
@ -152,9 +155,9 @@ static void kbd_task(void *arg)
event_t kbd_msg; event_t kbd_msg;
kbd_msg.type = EVENT_KBD; kbd_msg.type = EVENT_KBD;
kbd_msg.payload = keys; kbd_msg.payload = keys;
void * msg = (void *) kbd_msg;
// Send keyboard status in queue // Send keyboard status in queue
OSQPost(&ui_queue, msg, sizeof(event_t), OSQPost(&ui_queue, (void *)kbd_msg.value, sizeof(event_t),
OS_OPT_POST_FIFO + OS_OPT_POST_NO_SCHED, &os_err); OS_OPT_POST_FIFO + OS_OPT_POST_NO_SCHED, &os_err);
} }
// Read keyboard state at 5Hz // Read keyboard state at 5Hz