aboutsummaryrefslogtreecommitdiff
path: root/src/survive_driver_dummy.c
blob: e305b3303c61fa374ffe344f3f8ccdedf76e6b16 (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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
// All MIT/x11 Licensed Code in this file may be relicensed freely under the GPL
// or LGPL licenses.

#include <stdio.h>
#include <stdlib.h>
#include <survive.h>
#include <string.h>
#include "survive_config.h"
#include "os_generic.h"

STATIC_CONFIG_ITEM( DUMMY_DRIVER_ENABLE, "dummy-driver-enable", 'i', "Load a dummy driver for testing.", 0 );

struct SurviveDriverDummy {
	SurviveContext * ctx;
	SurviveObject * so;
};
typedef struct SurviveDriverDummy SurviveDriverDummy;

static int dummy_poll(struct SurviveContext *ctx, void *_driver) {
	SurviveDriverDummy *driver = _driver;

/* 
	To emit an IMU event, send this:
		driver->ctx->imuproc(so, mask, accelgyro, timecode, id);

	To emit light data, send this:
		LightcapElement le;
		le.sensor_id = X		//8 bits
		le.length = Z			//16 bits
		le.timestamp = Y		//32 bits
		handle_lightcap(so, &le);
*/

	return 0;
}

static int dummy_close(struct SurviveContext *ctx, void *_driver) {
	SurviveDriverDummy *driver = _driver;

/*
	If you need to handle any cleanup here, like closing handles, etc.
	you can perform it here.
*/

	return 0;
}

int dummy_haptic( SurviveObject * so, uint8_t reserved, uint16_t pulseHigh, uint16_t pulseLow, uint16_t repeatCount )
{
/*
	If your device has haptics, you can add the control for them here.
*/
	return 0;
}

int DriverRegDummy(SurviveContext *ctx)
{
	int enable = survive_configi( ctx, "dummy-driver-enable", SC_GET, 9 );
	if( !enable ) return 0;

	SurviveDriverDummy *sp = calloc(1, sizeof(SurviveDriverDummy));
	sp->ctx = ctx;

	SV_INFO("Setting up dummy driver.");

	//Create a new SurviveObject...
	SurviveObject *device = calloc(1, sizeof(SurviveObject));
	device->ctx = ctx;
	device->driver = sp;
	memcpy(device->codename, "DM0", 4);
	memcpy(device->drivername, "DUM", 4);
	device->sensor_ct = 1;
	device->sensor_locations = malloc( sizeof(FLT)*3 );
	device->sensor_normals = malloc( sizeof(FLT)*3 );
	device->sensor_locations[0] = 0;
	device->sensor_locations[1] = 0;
	device->sensor_locations[2] = 0;
	device->sensor_normals[0] = 0;
	device->sensor_normals[1] = 0;
	device->sensor_normals[2] = 1;

	device->timebase_hz = 48000000;
	device->imu_freq = 1000.0f;
	device->haptic = dummy_haptic;

	sp->so = device;
	survive_add_object( ctx, device );
	survive_add_driver( ctx, sp, dummy_poll, dummy_close, 0 );
	return 0;
}

REGISTER_LINKTIME(DriverRegDummy);