resource.h
00001 #ifndef MWARE_RESOURCE_H
00002 #define MWARE_RESOURCE_H
00003
00004 #include <drv/timer.h>
00005 #include <kern/sem.h>
00006
00007
00008
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
00017
00018 #include <freertos.h>
00019 #include <semphr.h>
00020 #include <task.h>
00021
00022 #define ResMan_sleep() vTaskDelay((portTickType)1 * portTICK_RATE_MS)
00023 #define ResMan_time_t portTickType
00024 #endif
00025
00026
00027
00028 struct Observer;
00029
00048 typedef struct Resource
00049 {
00050
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