-
Notifications
You must be signed in to change notification settings - Fork 30
/
MonomeSerialDevice.h
97 lines (79 loc) · 2.54 KB
/
MonomeSerialDevice.h
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
94
95
96
97
#ifndef MONOMESERIAL_H
#define MONOMESERIAL_H
#include <Arduino.h>
class MonomeGridEvent {
public:
uint8_t x;
uint8_t y;
uint8_t pressed;
};
class MonomeArcEvent {
public:
uint8_t index;
int8_t delta;
};
class MonomeEventQueue {
public:
//void clearQueue();
bool gridEventAvailable();
MonomeGridEvent readGridEvent();
MonomeGridEvent sendGridKey();
bool arcEventAvailable();
MonomeArcEvent readArcEvent();
MonomeArcEvent sendArcDelta();
MonomeArcEvent sendArcKey();
void addGridEvent(uint8_t x, uint8_t y, uint8_t pressed);
void sendGridKey(uint8_t x, uint8_t y, uint8_t pressed);
void addArcEvent(uint8_t index, int8_t delta);
void sendArcDelta(uint8_t index, int8_t delta);
void sendArcKey(uint8_t index, uint8_t pressed);
void sendTiltEvent(uint8_t n,uint8_t xh,uint8_t xl, uint8_t yh,uint8_t yl, uint8_t zh,uint8_t zl);
protected:
private:
static const int MAXEVENTCOUNT = 50;
MonomeGridEvent emptyGridEvent;
MonomeGridEvent gridEvents[MAXEVENTCOUNT];
int gridEventCount = 0;
int gridFirstEvent = 0;
MonomeArcEvent emptyArcEvent;
MonomeArcEvent arcEvents[MAXEVENTCOUNT];
int arcEventCount = 0;
int arcFirstEvent = 0;
};
class MonomeSerialDevice : public MonomeEventQueue {
public:
MonomeSerialDevice();
void initialize();
void setupAsGrid(uint8_t _rows, uint8_t _columns);
void setupAsArc(uint8_t _encoders);
void getDeviceInfo();
void poll();
void refresh();
void setGridLed(uint8_t x, uint8_t y, uint8_t level);
void clearGridLed(uint8_t x, uint8_t y);
void setArcLed(uint8_t enc, uint8_t led, uint8_t level);
void setAllLEDs(int value);
void clearArcLed(uint8_t enc, uint8_t led);
void clearAllLeds();
void clearArcRing(uint8_t ring);
void refreshGrid();
void refreshArc();
bool active;
bool isMonome;
bool isGrid;
uint8_t rows;
uint8_t columns;
uint8_t encoders;
uint8_t gridX;
uint8_t gridY;
static const int variMonoThresh = 0;
static const int MAXLEDCOUNT = 256;
uint8_t leds[MAXLEDCOUNT];
String deviceID;
private :
bool arcDirty = false;
bool gridDirty = false;
// MonomeSerialDevice();
void processSerial();
};
#endif