aboutsummaryrefslogtreecommitdiff
path: root/src/survive_driverman.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/survive_driverman.h')
-rw-r--r--src/survive_driverman.h38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/survive_driverman.h b/src/survive_driverman.h
new file mode 100644
index 0000000..5e13caf
--- /dev/null
+++ b/src/survive_driverman.h
@@ -0,0 +1,38 @@
+// (C) 2017 <>< C. N. Lohr, Under MIT/x11 License.
+//
+// This file is intended to be used for self-registering functions. By using
+// this it means that you do not need to have complicated switch statements or
+// #defines for dfferent inclusion of drivers/other code. You can simply
+// register your function and it will be put into a list.
+//
+//
+
+#ifndef SURVIVE_DRIVERMAN_H
+#define SURVIVE_DRIVERMAN_H
+
+//Driver registration
+#define MAX_DRIVERS 32
+
+void RegisterDriver( const char * name, void * data );
+void * GetDriver( const char * name );
+const char * GetDriverNameMatching( const char * prefix, int place );
+void ListDrivers();
+
+#define REGISTER_LINKTIME( func ) \
+ void __attribute__((constructor)) Register##func() { RegisterDriver( #func, &func ); }
+
+
+//
+// Specific types of drivers.
+//
+
+struct SurviveContext;
+
+//Device drivers (prefix your drivers with "DriverReg") i.e.
+// REGISTER_LINKTIME( DriverRegHTCVive );
+typedef int (*DeviceDriver)( struct SurviveContext * ctx );
+
+//more driver types here? i.e. posefinders, etc.
+
+#endif
+