RTOS Class

class Mail {
public:
    Mail(){
        _mail_id = osMailCreate(&_mail_def, NULL);
    }
    T* alloc(uint32_t millisec=0) {
        return (T*)osMailAlloc(_mail_id, millisec);
    }
    T* calloc(uint32_t millisec=0) {
        return (T*)osMailCAlloc(_mail_id, millisec);
    }
    osStatus put(T *mptr) {
        return osMailPut(_mail_id, (void*)mptr);
    }
    osEvent get(uint32_t millisec=osWaitForever) {
        return osMailGet(_mail_id, millisec);
    }
    osStatus free(T *mptr) {
        return osMailFree(_mail_id, (void*)mptr);
    }

class MemoryPool {
public:
    MemoryPool() {
        _pool_id = osPoolCreate(&_pool_def);
    }
    T* alloc(void) {
      return (T*)osPoolAlloc(_pool_id);
    }
    T* calloc(void) {
        return (T*)osPoolCAlloc(_pool_id);
    }   
    osStatus free(T *block) {
        return osPoolFree(_pool_id, (void*)block);
    }

class Mutex {
public:
    Mutex();
    osStatus lock(uint32_t millisec=osWaitForever);
    bool trylock();
    osStatus unlock();
}


class Queue {
public:
    Queue(){
        _queue_id = osMessageCreate(&_queue_def, NULL);
    }
    osStatus put(T* data, uint32_t millisec=0) {
        return osMessagePut(_queue_id, (uint32_t)data, millisec);
    }
    osEvent get(uint32_t millisec=osWaitForever) {
        return osMessageGet(_queue_id, millisec);
    }

class RtosTimer {
public:
    RtosTimer(void (*task)(void const *argument),
          os_timer_type type=osTimerPeriodic,
          void *argument=NULL);
    osStatus stop(void);	   
    osStatus start(uint32_t millisec);
}

class Semaphore {
public:
    Semaphore(int32_t count);
    int32_t wait(uint32_t millisec=osWaitForever);
    osStatus release(void);
}

class Thread {
public:
    Thread(void (*task)(void const *argument),
          void *argument=NULL,
          osPriority priority=osPriorityNormal,
          uint32_t stacksize=DEFAULT_STACK_SIZE);
   
    osStatus terminate();
    osStatus set_priority(osPriority priority);
    osPriority get_priority();
    int32_t signal_set(int32_t signals);
    static osEvent signal_wait(int32_t signals, uint32_t millisec=osWaitForever);
    static osStatus wait(uint32_t millisec);
    static osStatus yield();
    static osThreadId gettid();
}


Please log in to post comments.