Main Page | Modules | Data Structures | Directories | File List | Data Fields | Globals | Related Pages

driver.h

Go to the documentation of this file.
00001 /* ndk - [ driver.h ]
00002  *
00003  * Interface for creating and using drivers
00004  *
00005  * (c)2005 dcipher / neuraldk
00006  *           www.neuraldk.org
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 //typedef DriverItem (*DriverItemQueryFunction)(Driver driver, void **retVal, uint32 numParams, ...);
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;         /* contiguous list? */
00095    List subItems;
00096    ListIterator subItemsIterator;
00097    DriverParamType returnType;
00098 
00106    Driver driver;
00107    //DriverItemQueryFunction func;
00108    // TODO: union handler and get? (or set?  can set be NULL?)
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 // todo: define
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 driverCreateItem(&root, "serial", DriverItemCapabilitiesNoAccess, serialFunction);
00184 driverAddParam(root, "portNumber", DriverParamInteger16);
00185 
00186 driverCreateItem(&baudItem, "baud", DriverItemCapabilitiesReadWrite, baudGetSetFunction);
00187 driverAddParam(baudItem, "rate", DriverParamInteger32);
00188 
00189 driverAddItem(root, baudItem);
00190 
00191 serialFunction(Driver driver, DriverAccessType type, ...)
00192 switch(access)
00193 {
00194    case read:
00195       read from serial port
00196    case write:
00197       write to serial port
00198    case noAccess:
00199       set port in context (do for all?)
00200 }
00201 
00202 allows:
00203 cat 57600 > driver.serial(0).baud
00204 echo < driver.serial(0).baud
00205 */
00206 
00207 #endif
00208 

Generated on Wed Mar 22 20:36:33 2006 for ndk by  doxygen 1.4.4