kbd_task: Replace renderingInProgress() check with display mutex
This commit is contained in:
parent
3c00802330
commit
67aac8a68e
|
|
@ -38,6 +38,9 @@ static OS_Q ui_queue;
|
||||||
/* Mutex for concurrent access to RTX state variable */
|
/* Mutex for concurrent access to RTX state variable */
|
||||||
static OS_MUTEX rtx_mutex;
|
static OS_MUTEX rtx_mutex;
|
||||||
|
|
||||||
|
/* Mutex to avoid reading keyboard during display update */
|
||||||
|
static OS_MUTEX display_mutex;
|
||||||
|
|
||||||
/**************************** IMPORTANT NOTE ***********************************
|
/**************************** IMPORTANT NOTE ***********************************
|
||||||
* *
|
* *
|
||||||
* Rationale for "xx_TASK_STKSIZE/sizeof(CPU_STK)": uC/OS-III manages task *
|
* Rationale for "xx_TASK_STKSIZE/sizeof(CPU_STK)": uC/OS-III manages task *
|
||||||
|
|
@ -107,7 +110,10 @@ static void ui_task(void *arg)
|
||||||
|
|
||||||
if(renderNeeded)
|
if(renderNeeded)
|
||||||
{
|
{
|
||||||
|
// Lock display mutex and render display
|
||||||
|
OSMutexPend(&display_mutex, 0u, OS_OPT_PEND_BLOCKING, 0u, &os_err);
|
||||||
gfx_render();
|
gfx_render();
|
||||||
|
OSMutexPost(&display_mutex, OS_OPT_POST_NONE, &os_err);
|
||||||
}
|
}
|
||||||
|
|
||||||
// We don't need a delay because we lock on incoming events
|
// We don't need a delay because we lock on incoming events
|
||||||
|
|
@ -138,10 +144,10 @@ static void kbd_task(void *arg)
|
||||||
|
|
||||||
while(1)
|
while(1)
|
||||||
{
|
{
|
||||||
if(!gfx_renderingInProgress())
|
// Lock display mutex and read keyboard status
|
||||||
{
|
OSMutexPend(&display_mutex, 0u, OS_OPT_PEND_BLOCKING, 0u, &os_err);
|
||||||
// Get currently pressed keys
|
|
||||||
keys = kbd_getKeys();
|
keys = kbd_getKeys();
|
||||||
|
OSMutexPost(&display_mutex, OS_OPT_POST_NONE, &os_err);
|
||||||
// Compare with previous keyboard status
|
// Compare with previous keyboard status
|
||||||
if(keys != prev_keys)
|
if(keys != prev_keys)
|
||||||
{
|
{
|
||||||
|
|
@ -184,7 +190,6 @@ static void kbd_task(void *arg)
|
||||||
// Save current keyboard state as previous
|
// Save current keyboard state as previous
|
||||||
prev_keys = keys;
|
prev_keys = keys;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
// Read keyboard state at 20Hz
|
// Read keyboard state at 20Hz
|
||||||
OSTimeDlyHMSM(0u, 0u, 0u, 50u, OS_OPT_TIME_HMSM_STRICT, &os_err);
|
OSTimeDlyHMSM(0u, 0u, 0u, 50u, OS_OPT_TIME_HMSM_STRICT, &os_err);
|
||||||
}
|
}
|
||||||
|
|
@ -260,6 +265,11 @@ void create_threads()
|
||||||
(CPU_CHAR *) "RTX Mutex",
|
(CPU_CHAR *) "RTX Mutex",
|
||||||
(OS_ERR *) &os_err);
|
(OS_ERR *) &os_err);
|
||||||
|
|
||||||
|
// Create display mutex
|
||||||
|
OSMutexCreate((OS_MUTEX *) &display_mutex,
|
||||||
|
(CPU_CHAR *) "Display Mutex",
|
||||||
|
(OS_ERR *) &os_err);
|
||||||
|
|
||||||
// State initialization, execute before starting all tasks
|
// State initialization, execute before starting all tasks
|
||||||
state_init();
|
state_init();
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue