aboutsummaryrefslogtreecommitdiffhomepage
path: root/backends/openpixelcontrol.h
blob: f1061ea017e7351dcd41949d6ade86c775979f54 (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
#include "midimonster.h"

MM_PLUGIN_API int init();
static int openpixel_configure(char* option, char* value);
static int openpixel_configure_instance(instance* inst, char* option, char* value);
static int openpixel_instance(instance* inst);
static channel* openpixel_channel(instance* inst, char* spec, uint8_t flags);
static int openpixel_set(instance* inst, size_t num, channel** c, channel_value* v);
static int openpixel_handle(size_t num, managed_fd* fds);
static int openpixel_start(size_t n, instance** inst);
static int openpixel_shutdown(size_t n, instance** inst);

#define OPENPIXEL_INPUT 1
#define OPENPIXEL_MARK 2

typedef struct /*_data_buffer*/ {
	uint8_t strip;
	uint8_t flags;
	uint16_t bytes;
	union {
		uint16_t* u16;
		uint8_t* u8;
	} data;
} openpixel_buffer;

#pragma pack(push, 1)
typedef struct /*_openpixel_hdr*/ {
	uint8_t strip;
	uint8_t mode;
	uint16_t length;
} openpixel_header;
#pragma pack(pop)

typedef struct {
	enum {
		rgb8 = 0,
		rgb16 = 2
	} mode;

	size_t buffers;
	openpixel_buffer* buffer;

	int dest_fd;
	int listen_fd;
	size_t clients;
	int* client_fd;
	size_t* bytes_left;
} openpixel_instance_data;