00001
00002
00003
00004
00005
00006
00007
00008
00031 #ifndef __ndk_driver_h__
00032 #define __ndk_driver_h__
00033
00034 #include <types.h>
00035 #include <errorCodes.h>
00036 #include <messageQueue.h>
00037 #include <semaphore.h>
00038 #include <object.h>
00039 #include <task.h>
00040
00044 #define DRIVER_ITEM_MAX_LENGTH (64)
00045
00046 typedef struct _DriverItem *DriverItem;
00047 typedef struct _Driver *Driver;
00048
00049
00050
00051 typedef ErrorCode(*DriverInitFunction) (Driver drv);
00052 typedef ErrorCode(*DriverFinalFunction) (Driver drv);
00053
00054 typedef enum _DriverParamType
00055 {
00056 DriverParamVoid,
00057 DriverParamCharacter,
00058 DriverParamString,
00059 DriverParamStringUtf,
00060 DriverParamInteger64,
00061 DriverParamInteger32,
00062 DriverParamInteger16,
00063 DriverParamInteger8,
00064 DriverParamUnsignedInteger64,
00065 DriverParamUnsignedInteger32,
00066 DriverParamUnsignedInteger16,
00067 DriverParamUnsignedInteger8,
00068 DriverParamBoolean,
00069 DriverParamPointer
00070 } DriverParamType;
00071
00072 typedef union _DriverVariable
00073 {
00074 char character;
00075 uint64 longInteger;
00076 uint32 integer;
00077 String string;
00078 Pointer pointer;
00079 Boolean boolean;
00080 } DriverVariable;
00081
00082 typedef struct _DriverParam
00083 {
00084 DriverParamType type;
00085 String name;
00086 } *DriverParam;
00087
00088 typedef DriverVariable (*DriverItemHandlerFunction) (Driver driver, DriverVariable vars[]);
00089
00090 struct _DriverItem
00091 {
00092 String name;
00093 uint32 numParams;
00094 DriverParam *params;
00095 List subItems;
00096 ListIterator subItemsIterator;
00097 DriverParamType returnType;
00098
00106 Driver driver;
00107
00108
00109 DriverItemHandlerFunction handlerFunc;
00110 DriverItemHandlerFunction getHandlerFunc;
00111 DriverItemHandlerFunction setHandlerFunc;
00112 };
00113
00114 struct _Driver
00115 {
00116 DriverItem rootItem;
00117 String baseLoc;
00118 MessageQueue queue;
00119 DriverInitFunction init;
00120 DriverFinalFunction final;
00121 ErrorCode initReturnCode;
00122 Semaphore syncSemaphore;
00123 Task task;
00124 };
00125
00126
00127 typedef struct _DriverContext
00128 {
00133 Driver driver;
00134 DriverItem location;
00135 Pointer contextInfo;
00136 } *DriverContext;
00137
00138 ErrorCode driverCreate(Driver *driver);
00139 ErrorCode driverCreateFromObject(Driver *driver, Object object);
00140 ErrorCode driverSetRoot(Driver driver, String loc, DriverItem root);
00141 ErrorCode driverSetMetaData(Driver driver, String key, String value);
00142 ErrorCode driverGetMessageQueue(Driver driver, MessageQueue *queue);
00143 ErrorCode driverReserveIrq(Driver drv, uint32 irq);
00144 ErrorCode driverReservePort(Driver drv, uint32 port);
00145 ErrorCode driverReserveMemory(Driver drv, uint32 port);
00146 ErrorCode driverReserveIrqRange(Driver drv, uint32 lowest, uint32 highest);
00147 ErrorCode driverReservePortRange(Driver drv, uint32 lowest, uint32 highest);
00148 ErrorCode driverReserveMemoryRange(Driver drv, uint32 lowest, uint32 highest);
00149 ErrorCode driverDestroy(Driver *driver);
00150
00152 ErrorCode driverItemCreateFunction(DriverItem *dItem, String name, DriverParamType returnType,
00153 uint32 numParams, DriverParam params[],
00154 DriverItemHandlerFunction func);
00155 ErrorCode driverItemCreateParameter(DriverItem *dItem, String name, DriverParamType type,
00156 DriverItemHandlerFunction getHandler,
00157 DriverItemHandlerFunction setHandler);
00158 ErrorCode driverItemCreateNamespace(DriverItem *dItem, String name);
00159 ErrorCode driverItemAdd(DriverItem root, DriverItem child);
00160
00162 ErrorCode driverParamCreate(DriverParam *param, String name, DriverParamType type);
00163 ErrorCode driverParamDestroy(DriverParam *param);
00164
00166 ErrorCode driverManagerInit(void);
00167 ErrorCode driverManagerFinal(void);
00168 ErrorCode driverManagerAdd(Driver driver);
00169 ErrorCode driverManagerRemove(Driver driver);
00170
00172 ErrorCode driverManagerShowTree(void);
00173
00175 ErrorCode driverContextCreate(DriverContext *dc, String url);
00176
00178 ErrorCode driverContextExecute(DriverContext dc, String url);
00179 ErrorCode driverContextTraverse(DriverContext *to, DriverContext from, String url);
00180 ErrorCode driverContextDestroy(DriverContext *dc);
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193
00194
00195
00196
00197
00198
00199
00200
00201
00202
00203
00204
00205
00206
00207 #endif
00208