diff options
| -rw-r--r-- | evdev.c (renamed from uinput.c) | 88 | ||||
| -rw-r--r-- | evdev.h | 26 | ||||
| -rw-r--r-- | makefile | 2 | ||||
| -rw-r--r-- | uinput.h | 28 | 
4 files changed, 70 insertions, 74 deletions
| @@ -8,40 +8,39 @@  #include <sys/ioctl.h>  #include "midimonster.h" -#include "uinput.h" +#include "evdev.h" -#define BACKEND_NAME "uinput" +#define BACKEND_NAME "evdev"  #define UINPUT_PATH "/dev/uinput" -int init() { - -	backend uinput = { +int init(){ +	backend evdev = {  		.name = BACKEND_NAME, -		.conf = backend_configure, -		.create = backend_instance, -		.conf_instance = backend_configure_instance, -		.channel = backend_channel, -		.handle = backend_set, -		.process = backend_handle, -		.start = backend_start, -		.shutdown = backend_shutdown +		.conf = evdev_configure, +		.create = evdev_instance, +		.conf_instance = evdev_configure_instance, +		.channel = evdev_channel, +		.handle = evdev_set, +		.process = evdev_handle, +		.start = evdev_start, +		.shutdown = evdev_shutdown  	}; -	if (mm_backend_register(uinput)) { -		fprintf(stderr, "Failed to register uinput backend\n"); +	if(mm_backend_register(evdev)){ +		fprintf(stderr, "Failed to register evdev backend\n");  		return 1;  	}  	return 0;  } -static int backend_configure(char* option, char* value) { -	fprintf(stderr, "Not implemented\n"); +static int evdev_configure(char* option, char* value) { +	//intentionally ignored  	return 0;  } -static int backend_configure_instance(instance* inst, char* option, char* value) { -	uinput_instance* data = (uinput_instance*) inst->impl; +static int evdev_configure_instance(instance* inst, char* option, char* value) { +	evdev_instance_data* data = (evdev_instance_data*) inst->impl;  	if (!strcmp(option, "device")) {  		if (data->device_path) { @@ -67,14 +66,14 @@ static int backend_configure_instance(instance* inst, char* option, char* value)  			return 1;  		}  	} else { -		fprintf(stderr, "Unkown configuration parameter %s for uinput backend\n", option); +		fprintf(stderr, "Unkown configuration parameter %s for evdev backend\n", option);  		return 1;  	}  	return 0;  } -static channel* backend_channel(instance* inst, char* spec) { -	uinput_instance* data = (uinput_instance*) inst->impl; +static channel* evdev_channel(instance* inst, char* spec) { +	evdev_instance_data* data = (evdev_instance_data*) inst->impl;  	char* next = spec;  	// type  	unsigned long type = strtoul(spec, &next, 10); @@ -180,13 +179,13 @@ static channel* backend_channel(instance* inst, char* spec) {  	return mm_channel(inst, u, 1);  } -static instance* backend_instance() { +static instance* evdev_instance() {  	instance* inst = mm_instance();  	if (!inst) {  		return NULL;  	} -	inst->impl = calloc(1, sizeof(uinput_instance)); +	inst->impl = calloc(1, sizeof(evdev_instance_data));  	if (!inst->impl) {  		fprintf(stderr, "Failed to allocate memory for instance\n");  		return NULL; @@ -194,7 +193,7 @@ static instance* backend_instance() {  	return inst;  } -static channel_value uinput_normalize(uinput_instance* data, uint64_t ident, struct input_event* event) { +static channel_value evdev_normalize(evdev_instance_data* data, uint64_t ident, struct input_event* event) {  	channel_value value = {};  	switch (event->type) { @@ -213,7 +212,7 @@ static channel_value uinput_normalize(uinput_instance* data, uint64_t ident, str  	return value;  } -static uint32_t uinput_convert_normalised(struct input_event event, channel_value* value) { +static uint32_t evdev_convert_normalised(struct input_event event, channel_value* value) {  	switch (event.type) {  		case EV_KEY:  			return value->normalised < 0.5; @@ -225,12 +224,12 @@ static uint32_t uinput_convert_normalised(struct input_event event, channel_valu  } -static int backend_handle(size_t num, managed_fd* fds) { +static int evdev_handle(size_t num, managed_fd* fds) {  	struct input_event event;  	ssize_t bytes = 0;  	uint64_t ident; -	uinput_instance* data; +	evdev_instance_data* data;  	channel* channel;  	for (int i = 0; i < num; i++) { @@ -240,7 +239,7 @@ static int backend_handle(size_t num, managed_fd* fds) {  			fprintf(stderr, "Failed to read an complete event\n");  			return 1;  		} -		data = (uinput_instance*) fds[0].impl; +		data = (evdev_instance_data*) fds[0].impl;  		for (ident = 0; ident < data->size_events; ident++) {  			if (data->events[ident].type == event.type  					&& data->events[ident].code == event.code) { @@ -257,7 +256,7 @@ static int backend_handle(size_t num, managed_fd* fds) {  		if (channel) {  			fprintf(stderr, "Channel found\n"); -			if (mm_channel_event(channel, uinput_normalize(data, ident, &event))) { +			if (mm_channel_event(channel, evdev_normalize(data, ident, &event))) {  				return 1;  			}  		} @@ -266,7 +265,7 @@ static int backend_handle(size_t num, managed_fd* fds) {  	return 0;  } -static int uinput_open_input_device(uinput_instance* data) { +static int evdev_open_input_device(evdev_instance_data* data) {  	if (!data->device_path) {  		return 0;  	} @@ -292,7 +291,7 @@ static int uinput_open_input_device(uinput_instance* data) {  	return 0;  } -static int enable_device_keys(uinput_instance* data, int uinput_fd, struct uinput_user_dev* dev) { +static int enable_device_keys(evdev_instance_data* data, int uinput_fd, struct uinput_user_dev* dev) {  	unsigned int u;  	int ret;  	int action; @@ -334,7 +333,7 @@ static int enable_device_keys(uinput_instance* data, int uinput_fd, struct uinpu  	return 0;  } -static int uinput_create_output_device(uinput_instance* data) { +static int uinput_create_output_device(evdev_instance_data* data) {  	int uinput_fd = open(UINPUT_PATH, O_WRONLY | O_NONBLOCK); @@ -377,11 +376,10 @@ static int uinput_create_output_device(uinput_instance* data) {  	return 0;  } -static int backend_start() { - +static int evdev_start() {  	size_t n;  	instance** inst = NULL; -	uinput_instance* data; +	evdev_instance_data* data;  	if (mm_backend_instances(BACKEND_NAME, &n, &inst)) {  		fprintf(stderr, "Failed to fetch instance list\n");  		return 1; @@ -393,14 +391,14 @@ static int backend_start() {  	}  	for (unsigned p = 0; p < n; p++) { -		data = (uinput_instance*) inst[p]->impl; +		data = (evdev_instance_data*) inst[p]->impl;  		if (data->name) {  			uinput_create_output_device(data);  		}  		if (data->device_path) { -			uinput_open_input_device(data); +			evdev_open_input_device(data);  		}  		data->ident = p;  		inst[p]->ident = data->ident; @@ -410,19 +408,19 @@ static int backend_start() {  	return 0;  } -static int backend_set(instance* inst, size_t num, channel** c, channel_value* v) { +static int evdev_set(instance* inst, size_t num, channel** c, channel_value* v) {  	size_t u; -	uinput_instance* data; +	evdev_instance_data* data;  	uint64_t ident;  	int ret;  	struct input_event event = {};  	for (u = 0; u < num; u++) { -		data = (uinput_instance*) c[u]->instance->impl; +		data = (evdev_instance_data*) c[u]->instance->impl;  		ident = c[u]->ident;  		memcpy(&event, &data->events[ident], sizeof(struct input_event)); -		event.value = uinput_convert_normalised(event, v); +		event.value = evdev_convert_normalised(event, v);  		ret = write(data->fd_out, &event, sizeof(event));  		if (ret < 0 ) { @@ -443,8 +441,8 @@ static int backend_set(instance* inst, size_t num, channel** c, channel_value* v  	return 0;  } -static int backend_shutdown() { -	uinput_instance* data = NULL; +static int evdev_shutdown() { +	evdev_instance_data* data = NULL;  	instance** instances = NULL;  	size_t n = 0; @@ -459,7 +457,7 @@ static int backend_shutdown() {  	}  	for (unsigned p = 0; p < n; p++) { -		data = (uinput_instance*) instances[p]->impl; +		data = (evdev_instance_data*) instances[p]->impl;  		if (data->fd_in < 0) {  			close(data->fd_in);  			data->fd_in = -1; @@ -0,0 +1,26 @@ +#include <sys/types.h> +#include <linux/input.h> + +#include "midimonster.h" + +int init(); +static int evdev_configure(char* option, char* value); +static int evdev_configure_instance(instance* instance, char* option, char* value); +static instance* evdev_instance(); +static channel* evdev_channel(instance* instance, char* spec); +static int evdev_set(instance* inst, size_t num, channel** c, channel_value* v); +static int evdev_handle(size_t num, managed_fd* fds); +static int evdev_start(); +static int evdev_shutdown(); + +/* uinput_instance */ +typedef struct { +	int ident; +	char* device_path; +	char* name; +	int fd_in; +	int fd_out; +	int exclusive; +	size_t size_events; +	struct input_event* events; +} evdev_instance_data; @@ -1,5 +1,5 @@  .PHONY: clean -BACKENDS = artnet.so midi.so osc.so loopback.so uinput.so +BACKENDS = artnet.so midi.so osc.so loopback.so evdev.so  OBJS = config.o backend.o plugin.o  PLUGINDIR = "\"./\"" diff --git a/uinput.h b/uinput.h deleted file mode 100644 index f61ca4f..0000000 --- a/uinput.h +++ /dev/null @@ -1,28 +0,0 @@ -#pragma once - -#include <sys/types.h> -#include <linux/input.h> - -#include "midimonster.h" - -int init(); -static int backend_configure(char* option, char* value); -static int backend_configure_instance(instance* instance, char* option, char* value); -static instance* backend_instance(); -static channel* backend_channel(instance* instance, char* spec); -static int backend_set(instance* inst, size_t num, channel** c, channel_value* v); -static int backend_handle(size_t num, managed_fd* fds); -static int backend_start(); -static int backend_shutdown(); - -/* uinput_instance */ -typedef struct { -	int ident; -	char* device_path; -	char* name; -	int fd_in; -	int fd_out; -	int exclusive; -	size_t size_events; -	struct input_event* events; -} uinput_instance; | 
