summaryrefslogtreecommitdiff
path: root/src/osal
diff options
context:
space:
mode:
authorhathach <[email protected]>2022-02-23 18:42:32 +0700
committerhathach <[email protected]>2022-02-25 18:35:21 +0700
commit4a5a53b3b88fcd2f5ec7f1f94eb07c27cb1e9bec (patch)
tree3f005e9cb4adcf39b8c67860890987f96b650212 /src/osal
parentb797d1aa50310a46d430ff0efd66d7e88028de3b (diff)
improve rphort management for usbd
Diffstat (limited to 'src/osal')
-rw-r--r--src/osal/osal.h54
-rw-r--r--src/osal/osal_freertos.h2
-rw-r--r--src/osal/osal_mynewt.h2
-rw-r--r--src/osal/osal_none.h41
-rw-r--r--src/osal/osal_pico.h2
-rw-r--r--src/osal/osal_rtthread.h2
-rw-r--r--src/osal/osal_rtx4.h2
7 files changed, 28 insertions, 77 deletions
diff --git a/src/osal/osal.h b/src/osal/osal.h
index b2943cc79..7111bbdb2 100644
--- a/src/osal/osal.h
+++ b/src/osal/osal.h
@@ -31,9 +31,6 @@
extern "C" {
#endif
-/** \addtogroup group_osal
- * @{ */
-
#include "common/tusb_common.h"
// Return immediately
@@ -67,47 +64,26 @@ typedef void (*osal_task_func_t)( void * );
//--------------------------------------------------------------------+
// OSAL Porting API
-//--------------------------------------------------------------------+
-
-#if __GNUC__ && !defined(__ARMCC_VERSION)
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wredundant-decls"
-#endif
-//------------- Semaphore -------------//
-static inline osal_semaphore_t osal_semaphore_create(osal_semaphore_def_t* semdef);
-static inline bool osal_semaphore_post(osal_semaphore_t sem_hdl, bool in_isr);
-static inline bool osal_semaphore_wait(osal_semaphore_t sem_hdl, uint32_t msec);
-
-static inline void osal_semaphore_reset(osal_semaphore_t sem_hdl); // TODO removed
+// Should be implemented as static inline function in osal_port.h header
+/*
+ static inline osal_semaphore_t osal_semaphore_create(osal_semaphore_def_t* semdef);
+ static inline bool osal_semaphore_post(osal_semaphore_t sem_hdl, bool in_isr);
+ static inline bool osal_semaphore_wait(osal_semaphore_t sem_hdl, uint32_t msec);
+ static inline void osal_semaphore_reset(osal_semaphore_t sem_hdl); // TODO removed
-//------------- Mutex -------------//
-static inline osal_mutex_t osal_mutex_create(osal_mutex_def_t* mdef);
-static inline bool osal_mutex_lock (osal_mutex_t sem_hdl, uint32_t msec);
-static inline bool osal_mutex_unlock(osal_mutex_t mutex_hdl);
+ static inline osal_mutex_t osal_mutex_create(osal_mutex_def_t* mdef);
+ static inline bool osal_mutex_lock (osal_mutex_t sem_hdl, uint32_t msec);
+ static inline bool osal_mutex_unlock(osal_mutex_t mutex_hdl);
-//------------- Queue -------------//
-static inline osal_queue_t osal_queue_create(osal_queue_def_t* qdef);
-static inline bool osal_queue_receive(osal_queue_t qhdl, void* data);
-static inline bool osal_queue_send(osal_queue_t qhdl, void const * data, bool in_isr);
-static inline bool osal_queue_empty(osal_queue_t qhdl);
-#if __GNUC__ && !defined(__ARMCC_VERSION)
-#pragma GCC diagnostic pop
-#endif
-
-#if 0 // TODO remove subtask related macros later
-// Sub Task
-#define OSAL_SUBTASK_BEGIN
-#define OSAL_SUBTASK_END return TUSB_ERROR_NONE;
-
-#define STASK_RETURN(_error) return _error;
-#define STASK_INVOKE(_subtask, _status) (_status) = _subtask
-#define STASK_ASSERT(_cond) TU_VERIFY(_cond, TUSB_ERROR_OSAL_TASK_FAILED)
-#endif
+ static inline osal_queue_t osal_queue_create(osal_queue_def_t* qdef);
+ static inline bool osal_queue_receive(osal_queue_t qhdl, void* data);
+ static inline bool osal_queue_send(osal_queue_t qhdl, void const * data, bool in_isr);
+ static inline bool osal_queue_empty(osal_queue_t qhdl);
+*/
+//--------------------------------------------------------------------+
#ifdef __cplusplus
}
#endif
-/** @} */
-
#endif /* _TUSB_OSAL_H_ */
diff --git a/src/osal/osal_freertos.h b/src/osal/osal_freertos.h
index aa102b15c..69a026df5 100644
--- a/src/osal/osal_freertos.h
+++ b/src/osal/osal_freertos.h
@@ -115,7 +115,7 @@ static inline bool osal_mutex_unlock(osal_mutex_t mutex_hdl)
//--------------------------------------------------------------------+
// role device/host is used by OS NONE for mutex (disable usb isr) only
-#define OSAL_QUEUE_DEF(_role, _name, _depth, _type) \
+#define OSAL_QUEUE_DEF(_int_set, _name, _depth, _type) \
static _type _name##_##buf[_depth];\
osal_queue_def_t _name = { .depth = _depth, .item_sz = sizeof(_type), .buf = _name##_##buf };
diff --git a/src/osal/osal_mynewt.h b/src/osal/osal_mynewt.h
index 6882329c1..78a257cd6 100644
--- a/src/osal/osal_mynewt.h
+++ b/src/osal/osal_mynewt.h
@@ -96,7 +96,7 @@ static inline bool osal_mutex_unlock(osal_mutex_t mutex_hdl)
//--------------------------------------------------------------------+
// role device/host is used by OS NONE for mutex (disable usb isr) only
-#define OSAL_QUEUE_DEF(_role, _name, _depth, _type) \
+#define OSAL_QUEUE_DEF(_int_set, _name, _depth, _type) \
static _type _name##_##buf[_depth];\
static struct os_event _name##_##evbuf[_depth];\
osal_queue_def_t _name = { .depth = _depth, .item_sz = sizeof(_type), .buf = _name##_##buf, .evbuf = _name##_##evbuf};\
diff --git a/src/osal/osal_none.h b/src/osal/osal_none.h
index a1f997cf2..e1dd95c34 100644
--- a/src/osal/osal_none.h
+++ b/src/osal/osal_none.h
@@ -103,59 +103,34 @@ static inline bool osal_mutex_unlock(osal_mutex_t mutex_hdl)
//--------------------------------------------------------------------+
#include "common/tusb_fifo.h"
-// extern to avoid including dcd.h and hcd.h
-#if TUSB_OPT_DEVICE_ENABLED
-extern void dcd_int_disable(uint8_t rhport);
-extern void dcd_int_enable(uint8_t rhport);
-#endif
-
-#if TUSB_OPT_HOST_ENABLED
-extern void hcd_int_disable(uint8_t rhport);
-extern void hcd_int_enable(uint8_t rhport);
-#endif
-
typedef struct
{
- uint8_t role; // device or host
- tu_fifo_t ff;
+ void (*interrupt_set)(bool);
+ tu_fifo_t ff;
}osal_queue_def_t;
typedef osal_queue_def_t* osal_queue_t;
// role device/host is used by OS NONE for mutex (disable usb isr) only
-#define OSAL_QUEUE_DEF(_role, _name, _depth, _type) \
+#define OSAL_QUEUE_DEF(_int_set, _name, _depth, _type) \
uint8_t _name##_buf[_depth*sizeof(_type)]; \
osal_queue_def_t _name = { \
- .role = _role, \
+ .interrupt_set = _int_set, \
.ff = TU_FIFO_INIT(_name##_buf, _depth, _type, false) \
}
// lock queue by disable USB interrupt
static inline void _osal_q_lock(osal_queue_t qhdl)
{
- (void) qhdl;
-
-#if TUSB_OPT_DEVICE_ENABLED
- if (qhdl->role == OPT_MODE_DEVICE) dcd_int_disable(TUD_OPT_RHPORT);
-#endif
-
-#if TUSB_OPT_HOST_ENABLED
- if (qhdl->role == OPT_MODE_HOST) hcd_int_disable(TUH_OPT_RHPORT);
-#endif
+ // disable dcd/hcd interrupt
+ qhdl->interrupt_set(false);
}
// unlock queue
static inline void _osal_q_unlock(osal_queue_t qhdl)
{
- (void) qhdl;
-
-#if TUSB_OPT_DEVICE_ENABLED
- if (qhdl->role == OPT_MODE_DEVICE) dcd_int_enable(TUD_OPT_RHPORT);
-#endif
-
-#if TUSB_OPT_HOST_ENABLED
- if (qhdl->role == OPT_MODE_HOST) hcd_int_enable(TUH_OPT_RHPORT);
-#endif
+ // enable dcd/hcd interrupt
+ qhdl->interrupt_set(true);
}
static inline osal_queue_t osal_queue_create(osal_queue_def_t* qdef)
diff --git a/src/osal/osal_pico.h b/src/osal/osal_pico.h
index 1c3366e01..4843d6450 100644
--- a/src/osal/osal_pico.h
+++ b/src/osal/osal_pico.h
@@ -114,7 +114,7 @@ typedef struct
typedef osal_queue_def_t* osal_queue_t;
// role device/host is used by OS NONE for mutex (disable usb isr) only
-#define OSAL_QUEUE_DEF(_role, _name, _depth, _type) \
+#define OSAL_QUEUE_DEF(_int_set, _name, _depth, _type) \
uint8_t _name##_buf[_depth*sizeof(_type)]; \
osal_queue_def_t _name = { \
.ff = TU_FIFO_INIT(_name##_buf, _depth, _type, false) \
diff --git a/src/osal/osal_rtthread.h b/src/osal/osal_rtthread.h
index d5c062ac1..0845175b8 100644
--- a/src/osal/osal_rtthread.h
+++ b/src/osal/osal_rtthread.h
@@ -90,7 +90,7 @@ static inline bool osal_mutex_unlock(osal_mutex_t mutex_hdl) {
//--------------------------------------------------------------------+
// role device/host is used by OS NONE for mutex (disable usb isr) only
-#define OSAL_QUEUE_DEF(_role, _name, _depth, _type) \
+#define OSAL_QUEUE_DEF(_int_set, _name, _depth, _type) \
static _type _name##_##buf[_depth]; \
osal_queue_def_t _name = { .depth = _depth, .item_sz = sizeof(_type), .buf = _name##_##buf };
diff --git a/src/osal/osal_rtx4.h b/src/osal/osal_rtx4.h
index f7e88e322..1856a5d9a 100644
--- a/src/osal/osal_rtx4.h
+++ b/src/osal/osal_rtx4.h
@@ -111,7 +111,7 @@ static inline bool osal_mutex_unlock(osal_mutex_t mutex_hdl)
//--------------------------------------------------------------------+
// role device/host is used by OS NONE for mutex (disable usb isr) only
-#define OSAL_QUEUE_DEF(_role, _name, _depth, _type) \
+#define OSAL_QUEUE_DEF(_int_set, _name, _depth, _type) \
os_mbx_declare(_name##__mbox, _depth); \
_declare_box(_name##__pool, sizeof(_type), _depth); \
osal_queue_def_t _name = { .depth = _depth, .item_sz = sizeof(_type), .pool = _name##__pool, .mbox = _name##__mbox };