aboutsummaryrefslogtreecommitdiff
path: root/src/survive_driverman.h
blob: 5e13caf866083473eb0608e09804dd9653d4bd6c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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