aboutsummaryrefslogtreecommitdiff
path: root/memoryAccess.cpp
blob: 6745a6332e6745b30484db877b3560defd009e03 (plain) (blame)
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
/*  This class is made spesifically for the IOT-clapSensor
    ADRESSES
    version and others {0, 9}
    deviceGuid         {10, 19}
    deviceName         {20, 69}
    deviceLocation     {70, 119}
    SSID               {120, 269}
    Password           {270, 219}
*/
#include "Arduino.h"
#include "memoryAccess.h"
#include <EEPROM.h>

void memoryAccess::init() {
    EEPROM.begin(512);
}

struct memoryAdress memoryAccess::getAdress(String varName) {
    memoryAdress tmp;
    if      ((String) "version" == varName)        { tmp = {0, 4}; }
    else if ((String) "deviceId" == varName)       { tmp = {10, 19}; }
    else if ((String) "deviceName" == varName)     { tmp = {20, 69}; }
    else if ((String) "deviceLocation" == varName) { tmp = {70, 119}; }
    else if ((String) "SSID" == varName)           { tmp = {120, 269}; }
    else if ((String) "Password" == varName)       { tmp = {270, 319}; }
    else {
        Serial.println("");
        Serial.print("UNKNOWN MEMNAME: ");
        Serial.println(varName);
    }
    return tmp;
}

void memoryAccess::write(int location, byte val) {
    EEPROM.write(location, val);
}

bool memoryAccess::writeAscii(String varName, String data) {
    /* Write ascii string to EEPROM */
    struct memoryAdress memAdress = this->getAdress(varName);
    int LString = data.length() - 1;
    int LMemory = memAdress.endPos - memAdress.startPos;

    if (LString > LMemory) { return false; }

    int o = 0;
    for (int i = memAdress.startPos; i <= memAdress.endPos; i++) {
        byte cChar = data.charAt(o);
        if (EEPROM.read(i) != cChar) {
            EEPROM.write(i, cChar);
        }
        o++;
    }
    return true;
}

String memoryAccess::readAscii(String varName) {
    /* Read ascii string from EEPROM */
    struct memoryAdress memAdress = this->getAdress(varName);
    String buffer = "";

    for (int i = memAdress.startPos; i <= memAdress.endPos; i++) {
        char tmpByte = EEPROM.read(i);
        if (tmpByte != '\0') {
            buffer += tmpByte;
        }
    }

    return buffer;
}

void memoryAccess::commit() {
    EEPROM.commit();
}

void memoryAccess::dump() {
    Serial.println("");
    Serial.println("EEPROM DUMP:");
    for (int i = 0; i < 512; i++) {
        char cChar = EEPROM.read(i);
        String cStr = String(cChar);
        Serial.print("[" + String(i) + "]: ");
        Serial.println(String(cStr));
    }
}