-
Notifications
You must be signed in to change notification settings - Fork 7
/
EEPROM_lib.cpp
109 lines (87 loc) · 2.83 KB
/
EEPROM_lib.cpp
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
98
99
100
101
102
103
104
105
106
107
108
109
/*
EEPROM_lib.cpp - Library for making it easier to save/load values to the Arduino's EEPROM for my QuadCopter
Created by Myles Grant <[email protected]>
See also: https://github.com/grantmd/QuadCopter
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "WProgram.h"
#include "Definitions.h"
#include <EEPROM.h>
#include "EEPROM_lib.h"
////////////
// Read a single value from eeprom
byte eeprom_read(int address){
return EEPROM.read(address);
}
// Read 4 bytes from eeprom and make it a float
float eeprom_read_float(int address){
// a union is a datatype that allows us to write to it in bytes and read back as a float
// (and vice versa)
union floatStore{
byte floatByte[4];
float floatVal;
} floatOut;
for (int i=0; i<4; i++){
floatOut.floatByte[i] = eeprom_read(address + i);
}
return floatOut.floatVal;
}
// Read 2 bytes from eeprom and make it an int
int eeprom_read_int(int address){
// a union is a datatype that allows us to write to it in bytes and read back as an int
// (and vice versa)
union intStore{
byte intByte[2];
int intVal;
} intOut;
for (int i=0; i<2; i++){
intOut.intByte[i] = eeprom_read(address + i);
}
return intOut.intVal;
}
// Write a single value to eeprom
void eeprom_write(int address, byte value){
EEPROM.write(address, value);
}
// Turn a float into 4 bytes and write them to eeprom
void eeprom_write(int address, float value){
// a union is a datatype that allows us to write to it in bytes and read back as a float
// (and vice versa)
union floatStore{
byte floatByte[4];
float floatVal;
} floatIn;
floatIn.floatVal = value;
for (int i=0; i<4; i++){
eeprom_write(address + i, floatIn.floatByte[i]);
}
}
// Turn an int into 2 bytes and write them to eeprom
void eeprom_write(int address, int value){
// a union is a datatype that allows us to write to it in bytes and read back as an int
// (and vice versa)
union intStore{
byte intByte[2];
int intVal;
} intIn;
intIn.intVal = value;
for (int i=0; i<2; i++){
eeprom_write(address + i, intIn.intByte[i]);
}
}
//////////////
// Write everything we care about to eeprom
void eeprom_write_all(){
}
// Reload everything we care about from eeprom
void eeprom_read_all(){
}