rename subfolder source to src
This commit is contained in:
		
							
								
								
									
										54
									
								
								src/osal/osal.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								src/osal/osal.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,54 @@ | ||||
| /**************************************************************************/ | ||||
| /*! | ||||
|     @file     osal.c | ||||
|     @author   hathach | ||||
|  | ||||
|     @section LICENSE | ||||
|  | ||||
|     Software License Agreement (BSD License) | ||||
|  | ||||
|     Copyright (c) 2018, hathach (tinyusb.org) | ||||
|     All rights reserved. | ||||
|  | ||||
|     Redistribution and use in source and binary forms, with or without | ||||
|     modification, are permitted provided that the following conditions are met: | ||||
|     1. Redistributions of source code must retain the above copyright | ||||
|     notice, this list of conditions and the following disclaimer. | ||||
|     2. Redistributions in binary form must reproduce the above copyright | ||||
|     notice, this list of conditions and the following disclaimer in the | ||||
|     documentation and/or other materials provided with the distribution. | ||||
|     3. Neither the name of the copyright holders nor the | ||||
|     names of its contributors may be used to endorse or promote products | ||||
|     derived from this software without specific prior written permission. | ||||
|  | ||||
|     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY | ||||
|     EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
|     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
|     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY | ||||
|     DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
|     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
|     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||||
|     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
|     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
|     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
|  | ||||
|     This file is part of the tinyusb stack. | ||||
| */ | ||||
| /**************************************************************************/ | ||||
|  | ||||
| #include "tusb_option.h" | ||||
| #include "osal.h" | ||||
|  | ||||
|  | ||||
| //--------------------------------------------------------------------+ | ||||
| // TICK API | ||||
| //--------------------------------------------------------------------+ | ||||
| #if CFG_TUSB_OS == OPT_OS_FREERTOS | ||||
|  | ||||
| uint32_t tusb_hal_millis(void) | ||||
| { | ||||
|   return ( ( ((uint64_t) xTaskGetTickCount()) * 1000) / configTICK_RATE_HZ ); | ||||
| } | ||||
|  | ||||
| #endif | ||||
|  | ||||
							
								
								
									
										96
									
								
								src/osal/osal.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										96
									
								
								src/osal/osal.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,96 @@ | ||||
| /**************************************************************************/ | ||||
| /*! | ||||
|     @file     osal.h | ||||
|     @author   hathach (tinyusb.org) | ||||
|  | ||||
|     @section LICENSE | ||||
|  | ||||
|     Software License Agreement (BSD License) | ||||
|  | ||||
|     Copyright (c) 2013, hathach (tinyusb.org) | ||||
|     All rights reserved. | ||||
|  | ||||
|     Redistribution and use in source and binary forms, with or without | ||||
|     modification, are permitted provided that the following conditions are met: | ||||
|     1. Redistributions of source code must retain the above copyright | ||||
|     notice, this list of conditions and the following disclaimer. | ||||
|     2. Redistributions in binary form must reproduce the above copyright | ||||
|     notice, this list of conditions and the following disclaimer in the | ||||
|     documentation and/or other materials provided with the distribution. | ||||
|     3. Neither the name of the copyright holders nor the | ||||
|     names of its contributors may be used to endorse or promote products | ||||
|     derived from this software without specific prior written permission. | ||||
|  | ||||
|     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY | ||||
|     EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
|     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
|     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY | ||||
|     DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
|     INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
|     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION HOWEVER CAUSED AND | ||||
|     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
|     INCLUDING NEGLIGENCE OR OTHERWISE ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
|     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
|  | ||||
|     This file is part of the tinyusb stack. | ||||
| */ | ||||
| /**************************************************************************/ | ||||
|  | ||||
| #ifndef _TUSB_OSAL_H_ | ||||
| #define _TUSB_OSAL_H_ | ||||
|  | ||||
| #ifdef __cplusplus | ||||
|  extern "C" { | ||||
| #endif | ||||
|  | ||||
| /** \addtogroup group_osal | ||||
|  *  @{ */ | ||||
|  | ||||
| #include "tusb_option.h" | ||||
| #include "common/tusb_common.h" | ||||
|  | ||||
| enum | ||||
| { | ||||
|   OSAL_TIMEOUT_NOTIMEOUT    = 0,      // return immediately | ||||
|   OSAL_TIMEOUT_NORMAL       = 10,     // default timeout | ||||
|   OSAL_TIMEOUT_WAIT_FOREVER = 0xFFFFFFFFUL | ||||
| }; | ||||
|  | ||||
| #define OSAL_TIMEOUT_CONTROL_XFER  OSAL_TIMEOUT_WAIT_FOREVER | ||||
|  | ||||
|  | ||||
| #if CFG_TUSB_OS == OPT_OS_NONE | ||||
|   #include "osal_none.h" | ||||
|  | ||||
| #else | ||||
|    #if CFG_TUSB_OS == OPT_OS_FREERTOS | ||||
|     #include "osal_freeRTOS.h" | ||||
|   #else | ||||
|     #error CFG_TUSB_OS is not defined or OS is not supported yet | ||||
|   #endif | ||||
|  | ||||
|   #define OSAL_TASK_BEGIN while(1) { | ||||
|   #define OSAL_TASK_END   } | ||||
|  | ||||
|   //------------- 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 | ||||
|  | ||||
|   //------------- Sub Task Assert -------------// | ||||
|   #define STASK_ASSERT_ERR(_err)              VERIFY_ERR(_err) | ||||
|   #define STASK_ASSERT_ERR_HDLR(_err, _func)  VERIFY_ERR_HDLR(_err, _func) | ||||
|  | ||||
|   #define STASK_ASSERT(_cond)                 VERIFY(_cond, TUSB_ERROR_OSAL_TASK_FAILED) | ||||
|   #define STASK_ASSERT_HDLR(_cond, _func)     VERIFY_HDLR(_cond, _func) | ||||
| #endif | ||||
|  | ||||
| #ifdef __cplusplus | ||||
|  } | ||||
| #endif | ||||
|  | ||||
| /** @} */ | ||||
|  | ||||
| #endif /* _TUSB_OSAL_H_ */ | ||||
							
								
								
									
										200
									
								
								src/osal/osal_freeRTOS.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										200
									
								
								src/osal/osal_freeRTOS.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,200 @@ | ||||
| /**************************************************************************/ | ||||
| /*! | ||||
|     @file     osal_freeRTOS.h | ||||
|     @author   hathach (tinyusb.org) | ||||
|  | ||||
|     @section LICENSE | ||||
|  | ||||
|     Software License Agreement (BSD License) | ||||
|  | ||||
|     Copyright (c) 2013, hathach (tinyusb.org) | ||||
|     All rights reserved. | ||||
|  | ||||
|     Redistribution and use in source and binary forms, with or without | ||||
|     modification, are permitted provided that the following conditions are met: | ||||
|     1. Redistributions of source code must retain the above copyright | ||||
|     notice, this list of conditions and the following disclaimer. | ||||
|     2. Redistributions in binary form must reproduce the above copyright | ||||
|     notice, this list of conditions and the following disclaimer in the | ||||
|     documentation and/or other materials provided with the distribution. | ||||
|     3. Neither the name of the copyright holders nor the | ||||
|     names of its contributors may be used to endorse or promote products | ||||
|     derived from this software without specific prior written permission. | ||||
|  | ||||
|     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY | ||||
|     EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
|     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
|     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY | ||||
|     DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
|     INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
|     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION HOWEVER CAUSED AND | ||||
|     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
|     INCLUDING NEGLIGENCE OR OTHERWISE ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
|     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
|  | ||||
|     This file is part of the tinyusb stack. | ||||
| */ | ||||
| /**************************************************************************/ | ||||
|  | ||||
| /** \ingroup group_osal | ||||
|  * @{ | ||||
|  *  \defgroup Group_FreeRTOS  FreeRTOS | ||||
|  *  @{ */ | ||||
|  | ||||
| #ifndef _TUSB_OSAL_FREERTOS_H_ | ||||
| #define _TUSB_OSAL_FREERTOS_H_ | ||||
|  | ||||
| //------------- FreeRTOS Headers -------------// | ||||
| #include "FreeRTOS.h" | ||||
| #include "semphr.h" | ||||
| #include "queue.h" | ||||
| #include "task.h" | ||||
|  | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
| #if 0 | ||||
| // Helper to determine if we are in ISR to use ISR API (only cover ARM Cortex) | ||||
| static inline bool in_isr(void) | ||||
| { | ||||
|   return (SCB->ICSR & SCB_ICSR_VECTACTIVE_Msk); | ||||
| } | ||||
| #endif | ||||
|  | ||||
| //--------------------------------------------------------------------+ | ||||
| // TASK API | ||||
| //--------------------------------------------------------------------+ | ||||
| #define OSAL_TASK_DEF(_name, _str, _func, _prio, _stack_sz) \ | ||||
|   uint8_t _name##_##buf[_stack_sz*sizeof(StackType_t)]; \ | ||||
|   osal_task_def_t _name = { .func = _func, .prio = _prio, .stack_sz = _stack_sz, .buf = _name##_##buf, .strname = _str }; | ||||
|  | ||||
| typedef struct | ||||
| { | ||||
|   void (*func)(void *param); | ||||
|  | ||||
|   uint16_t prio; | ||||
|   uint16_t stack_sz; | ||||
|   void*    buf; | ||||
|   const char* strname; | ||||
|  | ||||
|   StaticTask_t stask; | ||||
| }osal_task_def_t; | ||||
|  | ||||
| typedef TaskHandle_t osal_task_t; | ||||
|  | ||||
| static inline osal_task_t osal_task_create(osal_task_def_t* taskdef) | ||||
| { | ||||
|   return xTaskCreateStatic(taskdef->func, taskdef->strname, taskdef->stack_sz, NULL, taskdef->prio, taskdef->buf, &taskdef->stask); | ||||
| } | ||||
|  | ||||
| static inline void osal_task_delay(uint32_t msec) | ||||
| { | ||||
|   vTaskDelay( pdMS_TO_TICKS(msec) ); | ||||
| } | ||||
|  | ||||
| //--------------------------------------------------------------------+ | ||||
| // QUEUE API | ||||
| //--------------------------------------------------------------------+ | ||||
| #define OSAL_QUEUE_DEF(_name, _depth, _type) \ | ||||
|   uint8_t _name##_##buf[_depth*sizeof(_type)];\ | ||||
|   osal_queue_def_t _name = { .depth = _depth, .item_sz = sizeof(_type), .buf = _name##_##buf }; | ||||
|  | ||||
| typedef struct | ||||
| { | ||||
|   uint16_t depth; | ||||
|   uint16_t item_sz; | ||||
|   void*    buf; | ||||
|  | ||||
|   StaticQueue_t sq; | ||||
| }osal_queue_def_t; | ||||
|  | ||||
| typedef QueueHandle_t osal_queue_t; | ||||
|  | ||||
| static inline osal_queue_t osal_queue_create(osal_queue_def_t* qdef) | ||||
| { | ||||
|   return xQueueCreateStatic(qdef->depth, qdef->item_sz, qdef->buf, &qdef->sq); | ||||
| } | ||||
|  | ||||
| static inline void osal_queue_receive (osal_queue_t const queue_hdl, void *p_data, uint32_t msec, tusb_error_t *p_error) | ||||
| { | ||||
|   uint32_t const ticks = (msec == OSAL_TIMEOUT_WAIT_FOREVER) ? portMAX_DELAY : pdMS_TO_TICKS(msec); | ||||
|   (*p_error) = ( xQueueReceive(queue_hdl, p_data, ticks) ? TUSB_ERROR_NONE : TUSB_ERROR_OSAL_TIMEOUT); | ||||
| } | ||||
|  | ||||
| static inline bool osal_queue_send_isr(osal_queue_t const queue_hdl, void const * data) | ||||
| { | ||||
|   return xQueueSendToBackFromISR(queue_hdl, data, NULL); | ||||
| } | ||||
|  | ||||
| static inline bool osal_queue_send(osal_queue_t const queue_hdl, void const * data) | ||||
| { | ||||
|   return xQueueSendToBack(queue_hdl, data, OSAL_TIMEOUT_WAIT_FOREVER) == pdTRUE; | ||||
| } | ||||
|  | ||||
| static inline void osal_queue_flush(osal_queue_t const queue_hdl) | ||||
| { | ||||
|   // TODO move to thread context | ||||
| //  xQueueReset(queue_hdl); | ||||
| } | ||||
|  | ||||
| //--------------------------------------------------------------------+ | ||||
| // Semaphore API | ||||
| //--------------------------------------------------------------------+ | ||||
| typedef StaticSemaphore_t osal_semaphore_def_t; | ||||
| typedef SemaphoreHandle_t osal_semaphore_t; | ||||
|  | ||||
| static inline osal_semaphore_t osal_semaphore_create(osal_semaphore_def_t* semdef) | ||||
| { | ||||
|   return xSemaphoreCreateBinaryStatic(semdef); | ||||
| } | ||||
|  | ||||
| static inline bool osal_semaphore_post_isr(osal_semaphore_t sem_hdl) | ||||
| { | ||||
|   return xSemaphoreGiveFromISR(sem_hdl, NULL) == pdTRUE; | ||||
| } | ||||
|  | ||||
| static inline bool osal_semaphore_post(osal_semaphore_t sem_hdl) | ||||
| { | ||||
|   return xSemaphoreGive(sem_hdl) == pdTRUE; | ||||
| } | ||||
|  | ||||
| static inline void osal_semaphore_wait(osal_semaphore_t sem_hdl, uint32_t msec, tusb_error_t *p_error) | ||||
| { | ||||
|   uint32_t const ticks = (msec == OSAL_TIMEOUT_WAIT_FOREVER) ? portMAX_DELAY : pdMS_TO_TICKS(msec); | ||||
|   (*p_error) = (xSemaphoreTake(sem_hdl, ticks) ? TUSB_ERROR_NONE : TUSB_ERROR_OSAL_TIMEOUT); | ||||
| } | ||||
|  | ||||
| static inline void osal_semaphore_reset_isr(osal_semaphore_t const sem_hdl) | ||||
| { | ||||
|   xSemaphoreTakeFromISR(sem_hdl, NULL); | ||||
| } | ||||
|  | ||||
| //--------------------------------------------------------------------+ | ||||
| // MUTEX API (priority inheritance) | ||||
| //--------------------------------------------------------------------+ | ||||
| typedef SemaphoreHandle_t osal_mutex_t; | ||||
|  | ||||
| #define osal_mutex_create(x) xSemaphoreCreateMutex() | ||||
|  | ||||
| static inline bool osal_mutex_release(osal_mutex_t mutex_hdl) | ||||
| { | ||||
|   return xSemaphoreGive(mutex_hdl); | ||||
| } | ||||
|  | ||||
| static inline void osal_mutex_wait(osal_mutex_t mutex_hdl, uint32_t msec, tusb_error_t *p_error) | ||||
| { | ||||
|   uint32_t const ticks = (msec == OSAL_TIMEOUT_WAIT_FOREVER) ? portMAX_DELAY : pdMS_TO_TICKS(msec); | ||||
|   (*p_error) = (xSemaphoreTake(mutex_hdl, ticks) ? TUSB_ERROR_NONE : TUSB_ERROR_OSAL_TIMEOUT); | ||||
| } | ||||
|  | ||||
|  | ||||
| #ifdef __cplusplus | ||||
|  } | ||||
| #endif | ||||
|  | ||||
| #endif /* _TUSB_OSAL_FREERTOS_H_ */ | ||||
|  | ||||
| /** @} */ | ||||
| /** @} */ | ||||
|  | ||||
							
								
								
									
										247
									
								
								src/osal/osal_none.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										247
									
								
								src/osal/osal_none.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,247 @@ | ||||
| /**************************************************************************/ | ||||
| /*! | ||||
|     @file     osal_none.h | ||||
|     @author   hathach (tinyusb.org) | ||||
|  | ||||
|     @section LICENSE | ||||
|  | ||||
|     Software License Agreement (BSD License) | ||||
|  | ||||
|     Copyright (c) 2013, hathach (tinyusb.org) | ||||
|     All rights reserved. | ||||
|  | ||||
|     Redistribution and use in source and binary forms, with or without | ||||
|     modification, are permitted provided that the following conditions are met: | ||||
|     1. Redistributions of source code must retain the above copyright | ||||
|     notice, this list of conditions and the following disclaimer. | ||||
|     2. Redistributions in binary form must reproduce the above copyright | ||||
|     notice, this list of conditions and the following disclaimer in the | ||||
|     documentation and/or other materials provided with the distribution. | ||||
|     3. Neither the name of the copyright holders nor the | ||||
|     names of its contributors may be used to endorse or promote products | ||||
|     derived from this software without specific prior written permission. | ||||
|  | ||||
|     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY | ||||
|     EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
|     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
|     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY | ||||
|     DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
|     INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
|     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION HOWEVER CAUSED AND | ||||
|     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
|     INCLUDING NEGLIGENCE OR OTHERWISE ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
|     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
|  | ||||
|     This file is part of the tinyusb stack. | ||||
| */ | ||||
| /**************************************************************************/ | ||||
|  | ||||
| /** \ingroup group_osal | ||||
|  * \defgroup Group_OSNone None OS | ||||
|  *  @{ */ | ||||
|  | ||||
| #ifndef _TUSB_OSAL_NONE_H_ | ||||
| #define _TUSB_OSAL_NONE_H_ | ||||
|  | ||||
| #include "common/tusb_fifo.h" | ||||
|  | ||||
| #ifdef __cplusplus | ||||
|  extern "C" { | ||||
| #endif | ||||
|  | ||||
| //--------------------------------------------------------------------+ | ||||
| // TASK API | ||||
| // NOTES: Each blocking OSAL_NONE services such as semaphore wait, | ||||
| // queue receive embedded return statement, therefore local variable | ||||
| // retain value before/after such services needed to declare as static | ||||
| // OSAL_TASK_LOOP | ||||
| // { | ||||
| //   OSAL_TASK_BEGIN | ||||
| // | ||||
| //   task body statements | ||||
| // | ||||
| //   OSAL_TASK_LOOP_ENG | ||||
| // } | ||||
| // | ||||
| // NOTE: no switch statement is allowed in Task and subtask | ||||
| //--------------------------------------------------------------------+ | ||||
| #define OSAL_TASK_DEF(_name, _str, _func, _prio, _stack_sz)  osal_task_def_t _name; | ||||
|  | ||||
| typedef uint8_t osal_task_def_t; | ||||
| typedef void* osal_task_t; | ||||
|  | ||||
| static inline osal_task_t osal_task_create(osal_task_def_t* taskdef) | ||||
| { | ||||
|   (void) taskdef; | ||||
|   return (osal_task_t) 1; // return non zero | ||||
| } | ||||
|  | ||||
| #define TASK_RESTART                             \ | ||||
|   _state = 0 | ||||
|  | ||||
| #define OSAL_TASK_BEGIN                          \ | ||||
|   static uint16_t _state = 0;                    \ | ||||
|   ATTR_UNUSED static uint32_t _timeout = 0;      \ | ||||
|   (void) _timeout;                               \ | ||||
|   switch(_state) {                               \ | ||||
|     case 0: { | ||||
|  | ||||
| #define OSAL_TASK_END                            \ | ||||
|   default:  TASK_RESTART; break;                 \ | ||||
|   }}                                             \ | ||||
|   return; | ||||
|  | ||||
| #define osal_task_delay(msec)                    \ | ||||
|   do {                                           \ | ||||
|     _timeout = tusb_hal_millis();                \ | ||||
|     _state = __LINE__; case __LINE__:            \ | ||||
|       if ( _timeout + msec > tusb_hal_millis() ) \ | ||||
|         return TUSB_ERROR_OSAL_WAITING;          \ | ||||
|   }while(0) | ||||
|  | ||||
| //--------------------------------------------------------------------+ | ||||
| // SUBTASK (a sub function that uses OS blocking services & called by a task | ||||
| //--------------------------------------------------------------------+ | ||||
| #define OSAL_SUBTASK_BEGIN  OSAL_TASK_BEGIN | ||||
|  | ||||
| #define OSAL_SUBTASK_END                                                        \ | ||||
|   default: TASK_RESTART; break;                                                 \ | ||||
|   }}                                                                            \ | ||||
|   return TUSB_ERROR_NONE; | ||||
|  | ||||
| #define STASK_INVOKE(_subtask, _status)                                         \ | ||||
|   do {                                                                          \ | ||||
|     _state = __LINE__; case __LINE__:                                           \ | ||||
|     {                                                                           \ | ||||
|       (_status) = _subtask; /* invoke sub task */                               \ | ||||
|       if (TUSB_ERROR_OSAL_WAITING == (_status)) return TUSB_ERROR_OSAL_WAITING; \ | ||||
|     }                                                                           \ | ||||
|   }while(0) | ||||
|  | ||||
| //------------- Sub Task Assert -------------// | ||||
| #define STASK_RETURN(error)     do { TASK_RESTART; return error; } while(0) | ||||
|  | ||||
| #define STASK_ASSERT_ERR(_err)                VERIFY_ERR_HDLR(_err, verify_breakpoint(); TASK_RESTART) | ||||
| #define STASK_ASSERT_ERR_HDLR(_err, _func)    VERIFY_ERR_HDLR(_err, verify_breakpoint(); _func; TASK_RESTART ) | ||||
|  | ||||
| #define STASK_ASSERT(_cond)                   VERIFY_HDLR(_cond, verify_breakpoint(); TASK_RESTART) | ||||
| #define STASK_ASSERT_HDLR(_cond, _func)       VERIFY_HDLR(_cond, verify_breakpoint(); _func; TASK_RESTART) | ||||
|  | ||||
| //--------------------------------------------------------------------+ | ||||
| // QUEUE API | ||||
| //--------------------------------------------------------------------+ | ||||
| #define OSAL_QUEUE_DEF(_name, _depth, _type)    FIFO_DEF(_name, _depth, _type, false) | ||||
|  | ||||
| typedef fifo_t  osal_queue_def_t; | ||||
| typedef fifo_t* osal_queue_t; | ||||
|  | ||||
| static inline osal_queue_t osal_queue_create(osal_queue_def_t* qdef) | ||||
| { | ||||
|   fifo_clear(qdef); | ||||
|   return (osal_queue_t) qdef; | ||||
| } | ||||
|  | ||||
| static inline bool osal_queue_send_isr(osal_queue_t const queue_hdl, void const * data) | ||||
| { | ||||
|   return fifo_write( (fifo_t*) queue_hdl, data); | ||||
| } | ||||
|  | ||||
| static inline void osal_queue_flush(osal_queue_t const queue_hdl) | ||||
| { | ||||
|   queue_hdl->count = queue_hdl->rd_idx = queue_hdl->wr_idx = 0; | ||||
| } | ||||
|  | ||||
| #define osal_queue_receive(queue_hdl, p_data, msec, p_error)                                \ | ||||
|   do {                                                                                      \ | ||||
|     _timeout = tusb_hal_millis();                                                           \ | ||||
|     _state = __LINE__; case __LINE__:                                                       \ | ||||
|     if( queue_hdl->count == 0 ) {                                                           \ | ||||
|       if ( (msec != OSAL_TIMEOUT_WAIT_FOREVER) && ( _timeout + msec <= tusb_hal_millis()) ) \ | ||||
|         *(p_error) = TUSB_ERROR_OSAL_TIMEOUT;                                               \ | ||||
|       else                                                                                  \ | ||||
|         return TUSB_ERROR_OSAL_WAITING;                                                     \ | ||||
|     } else{                                                                                 \ | ||||
|       /*tusb_hal_int_disable_all();*/                                                       \ | ||||
|       fifo_read(queue_hdl, p_data);                                                         \ | ||||
|       /*tusb_hal_int_enable_all();*/                                                            \ | ||||
|       *(p_error) = TUSB_ERROR_NONE;                                                         \ | ||||
|     }                                                                                       \ | ||||
|   }while(0) | ||||
|  | ||||
|  | ||||
| //--------------------------------------------------------------------+ | ||||
| // Semaphore API | ||||
| //--------------------------------------------------------------------+ | ||||
| typedef struct | ||||
| { | ||||
|   volatile uint16_t count; | ||||
|            uint16_t max_count; | ||||
| }osal_semaphore_def_t; | ||||
|  | ||||
| typedef osal_semaphore_def_t* osal_semaphore_t; | ||||
|  | ||||
|  | ||||
| static inline osal_semaphore_t osal_semaphore_create(osal_semaphore_def_t* semdef) | ||||
| { | ||||
|   semdef->count     = 0; | ||||
|   semdef->max_count = 1; | ||||
|   return semdef; | ||||
| } | ||||
|  | ||||
| #define osal_semaphore_post_isr osal_semaphore_post | ||||
|  | ||||
| static inline  bool osal_semaphore_post(osal_semaphore_t sem_hdl) | ||||
| { | ||||
|   if (sem_hdl->count < sem_hdl->max_count ) sem_hdl->count++; | ||||
|   return true; | ||||
| } | ||||
|  | ||||
| static inline void osal_semaphore_reset_isr(osal_semaphore_t sem_hdl) | ||||
| { | ||||
|   sem_hdl->count = 0; | ||||
| } | ||||
|  | ||||
| #define osal_semaphore_wait(sem_hdl, msec, p_error)                                        \ | ||||
|   do {                                                                                     \ | ||||
|     _timeout = tusb_hal_millis();                                                          \ | ||||
|     _state = __LINE__; case __LINE__:                                                      \ | ||||
|     if( sem_hdl->count == 0 ) {                                                            \ | ||||
|       if ( (msec != OSAL_TIMEOUT_WAIT_FOREVER) && (_timeout + msec <= tusb_hal_millis()) ) \ | ||||
|         *(p_error) = TUSB_ERROR_OSAL_TIMEOUT;                                              \ | ||||
|       else                                                                                 \ | ||||
|         return TUSB_ERROR_OSAL_WAITING;                                                    \ | ||||
|     } else{                                                                                \ | ||||
|       /*tusb_hal_int_disable_all();*/                                                          \ | ||||
|       sem_hdl->count--;                                                                    \ | ||||
|       /*tusb_hal_int_enable_all();*/                                                           \ | ||||
|       *(p_error) = TUSB_ERROR_NONE;                                                        \ | ||||
|     }                                                                                      \ | ||||
|   }while(0) | ||||
|  | ||||
| //--------------------------------------------------------------------+ | ||||
| // MUTEX API (priority inheritance) | ||||
| //--------------------------------------------------------------------+ | ||||
| #if 0 | ||||
| typedef osal_semaphore_t osal_mutex_t; | ||||
|  | ||||
| static inline osal_mutex_t osal_mutex_create(void) | ||||
| { | ||||
|   return osal_semaphore_create(1, 0); | ||||
| } | ||||
|  | ||||
| static inline bool osal_mutex_release(osal_mutex_t mutex_hdl) | ||||
| { | ||||
|   return osal_semaphore_post(mutex_hdl); | ||||
| } | ||||
|  | ||||
| #define osal_mutex_wait osal_semaphore_wait | ||||
| #endif | ||||
|  | ||||
|  | ||||
| #ifdef __cplusplus | ||||
|  } | ||||
| #endif | ||||
|  | ||||
| #endif /* _TUSB_OSAL_NONE_H_ */ | ||||
|  | ||||
| /** @} */ | ||||
		Reference in New Issue
	
	Block a user
	 hathach
					hathach