resource.h

00001 #ifndef MWARE_RESOURCE_H
00002 #define MWARE_RESOURCE_H
00003 
00004 #include <drv/timer.h> // time_t
00005 #include <kern/sem.h>
00006 
00007 /*
00008  * Abstract locking primitives used by host OS.
00009  */
00010 #if CONFIG_KERNEL
00011 
00012     typedef Semaphore ResourceLock;
00013     #define ResMan_sleep()         timer_delay(1)
00014     #define ResMan_time_t          mtime_t
00015 
00016 #else /* FreeRTOS */
00017 
00018     #include <freertos.h>
00019     #include <semphr.h>
00020     #include <task.h> // vTaskDelay()
00021 
00022     #define ResMan_sleep()        vTaskDelay((portTickType)1 * portTICK_RATE_MS)
00023     #define ResMan_time_t         portTickType
00024 #endif
00025 
00026 
00027 // Forward decl
00028 struct Observer;
00029 
00048 typedef struct Resource
00049 {
00050 //Private
00052     Semaphore lock;
00053 
00055     struct Observer *owner;
00056 
00058     int pri;
00059 
00061     List queue;
00062 } Resource;
00063 
00065 enum { EVENT_RELEASE = 1 };
00066 
00068 bool ResMan_Alloc(Resource *res, int pri, ResMan_time_t timeout, struct Observer *releaseRequest);
00069 
00071 void ResMan_Free(Resource *res);
00072 
00073 void ResMan_Init(Resource *res);
00074 
00075 #endif /* MWARE_RESOURCE_H */