diff --git a/epicardium/modules/hw-lock.c b/epicardium/modules/hw-lock.c index 8e5844122207c855c730b769d6344a07d2fd626d..47929fe06cf80c263168be59de1265aa5c87daec 100644 --- a/epicardium/modules/hw-lock.c +++ b/epicardium/modules/hw-lock.c @@ -21,6 +21,22 @@ void hwlock_init(void) } } +void hwlock_acquire(enum hwlock_periph p) +{ + assert(p < _HWLOCK_MAX); + mutex_lock(&hwlock_mutex[p]); +} + +int hwlock_acquire_nonblock(enum hwlock_periph p) +{ + assert(p < _HWLOCK_MAX); + if (mutex_trylock(&hwlock_mutex[p])) { + return 0; + } else { + return -EBUSY; + } +} + int hwlock_acquire_timeout(enum hwlock_periph p, TickType_t wait) { assert(p < _HWLOCK_MAX); diff --git a/epicardium/modules/modules.h b/epicardium/modules/modules.h index ecfa12ae4e8b04478c51f196cb3ef912b394ac02..3d61abcce123969e773c78c773d5e03364045462 100644 --- a/epicardium/modules/modules.h +++ b/epicardium/modules/modules.h @@ -98,6 +98,8 @@ enum hwlock_periph { }; int hwlock_acquire_timeout(enum hwlock_periph p, TickType_t wait); +void hwlock_acquire(enum hwlock_periph p); +int hwlock_acquire_nonblock(enum hwlock_periph p); void hwlock_release(enum hwlock_periph p); /* ---------- Display ------------------------------------------------------ */