This repository has been archived by the owner on Jun 30, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathProgram.h
68 lines (56 loc) · 1.57 KB
/
Program.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
/*
* Program.h
* Version: 0.1.1
* Since: 0.1.0
*/
#ifndef PROGRAM_H_
#define PROGRAM_H_
#include <EEPROM.h>
#define PROGRAM_COUNT 4
#define PROGRAM_DATA_SIZE (CONTROLS_NUM_POTS*2)
class Program {
public:
virtual Program() {
for (i = 0; i < PROGRAM_DATA_SIZE; i++) {
data[i] = 0;
}
}
virtual ~Program() {}
void read(uint8_t index = 0) {
lastIndex = index;
for (i = 0; i < CONTROLS_NUM_POTS; i++) {
data[i] = (uint16_t)(EEPROM.read((i << 1) + index * PROGRAM_DATA_SIZE) << 8);
data[i] += (uint16_t)EEPROM.read((i << 1 + 1) + index * PROGRAM_DATA_SIZE);
}
}
void write(uint8_t index = 0) {
lastIndex = index;
for (i = 0; i < CONTROLS_NUM_POTS; i++) {
EEPROM.write((i << 1) + index * PROGRAM_DATA_SIZE, (uint8_t)(data[i] & 0xFF00 >> 8));
EEPROM.write((i << 1 + 1) + index * PROGRAM_DATA_SIZE, (uint8_t)(data[i] & 0x00FF));
}
}
void clear(uint8_t index = 0, bool local = true) {
lastIndex = index;
for (i = 0; i < PROGRAM_DATA_SIZE; i++) {
if (!!local) data[i >> 1] = 0;
EEPROM.write(i + index * PROGRAM_DATA_SIZE, 0);
}
}
void clearAll() {
for (j = 0; j < PROGRAM_COUNT; j++) {
clear(j, false);
}
}
uint16_t get(uint8_t key) {
return data[key];
}
void set(uint8_t key, uint16_t value) {
data[key] = value;
}
uint16_t data[CONTROLS_NUM_POTS];
private:
uint16_t i, j;
uint8_t lastIndex;
};
#endif /* PROGRAM_H_ */