aboutsummaryrefslogtreecommitdiff
path: root/arduino/rpmcount/config.cpp
blob: a46c6634052ca20a26ca5e40b531036d41962c72 (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
49
50
51
52
53
54
55
56
57
58
59
60
61
#include "config.h"

#include <Arduino.h>
#include <EEPROM.h>

#define ROM_INITIALISED 17

#define DEFAULT_SIGNALS_PER_RPM 133
#define DEFAULT_START_DELAY_MILLIS 1000
#define DEFAULT_RPM_COUNT 5000

static Config config;

int writeLong (int address, unsigned long val)
{
    const char* p = (char*) &val;
    int i = 0;
    for (; i < sizeof(val); ++i, ++p)
    {
        EEPROM.write(address + i, *p);
    }
    return address + i;
}

int readLong (int address, unsigned long& val)
{
    char* p = (char*) &val;
    int i = 0;
    for (; i < sizeof(val); ++i, ++p)
    {
        *p = EEPROM.read(address + i);
    }
    return address + i;
}

const Config& readConfig ()
{
    byte initialised = EEPROM.read(0);
    if (initialised != ROM_INITIALISED)
    {
        int addr = 1;
        addr = writeLong(addr, DEFAULT_START_DELAY_MILLIS);
        addr = writeLong(addr, DEFAULT_RPM_COUNT);
        addr = writeLong(addr, DEFAULT_SIGNALS_PER_RPM);
        EEPROM.write(0, ROM_INITIALISED);
    }
    int addr = 1;
    addr = readLong(addr, config.startDelay);
    addr = readLong(addr, config.rpmCount);
    addr = readLong(addr, config.signalsPerRPM);
    return config;
}

void writeConfig (const Config& config)
{
    int addr = 1;
    addr = writeLong(addr, config.startDelay);
    addr = writeLong(addr, config.rpmCount);
    addr = writeLong(addr, config.signalsPerRPM);
    EEPROM.write(0, ROM_INITIALISED);
}