IoAbstraction
Loading...
Searching...
No Matches
ArduinoEEPROMAbstraction.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2018 https://www.thecoderscorner.com (Dave Cherry).
3 * This product is licensed under an Apache license, see the LICENSE file in the top-level directory.
4 */
5
6#if !defined(_ARDUNIO_EEPROM_ABS_H) && !defined(__MBED__) && !defined(BUILD_FOR_PICO_CMAKE)
7#define _ARDUNIO_EEPROM_ABS_H
8
9#include <Arduino.h>
10#include "EEPROM.h"
11#include "EepromAbstraction.h"
12
17
30class ArduinoEEPROMAbstraction : public EepromAbstraction {
31private:
32 EEPROMClass* eepromProxy;
33public:
34 ArduinoEEPROMAbstraction(EEPROMClass* proxy) {
35 this->eepromProxy = proxy;
36 }
37
38 uint8_t read8(EepromPosition position) override {
39 return eepromProxy->read(position);
40 }
41
42 uint16_t read16(EepromPosition pos) override {
43 return eepromProxy->read(pos + 1) << 8 | eepromProxy->read(pos);
44 }
45
46 uint32_t read32(EepromPosition pos) override {
47 return (uint32_t)eepromProxy->read(pos + 3) << 24 | (uint32_t)eepromProxy->read(pos + 2) << 16 |
48 (uint32_t)eepromProxy->read(pos + 1) << 8 | (uint32_t)eepromProxy->read(pos + 0);
49 }
50
51 void write8(EepromPosition pos, uint8_t val) override {
52 eepromProxy->write(pos, val);
53 }
54
55 void write16(EepromPosition pos, uint16_t val) override {
56 eepromProxy->write(pos, val);
57 val >>= 8;
58 eepromProxy->write(pos + 1, (uint8_t)val);
59 }
60
61 void write32(EepromPosition pos, uint32_t val) override {
62 eepromProxy->write(pos, (uint8_t)val);
63 val >>= 8;
64 eepromProxy->write(pos + 1, (uint8_t)val);
65 val >>= 8;
66 eepromProxy->write(pos + 2, (uint8_t)val);
67 val >>= 8;
68 eepromProxy->write(pos + 3, (uint8_t)val);
69 }
70
71 void readIntoMemArray(uint8_t* memDest, EepromPosition romSrc, uint8_t len) override {
72 for(int i=0;i<len;i++) {
73 *memDest = eepromProxy->read(romSrc + i);
74 memDest++;
75 }
76 }
77
78 void writeArrayToRom(EepromPosition romDest, const uint8_t* memSrc, uint8_t len) override {
79 for(int i=0;i<len;i++) {
80 eepromProxy->write(romDest + i, *memSrc);
81 memSrc++;
82 }
83 }
84};
85
86#endif // !defined(_ARDUNIO_EEPROM_ABS_H) && !defined(_NO_EEPROM_CLASS_)
Wraps up EEPROM support in a way that is compatible between implementations. For example presently th...
uint16_t EepromPosition
Definition EepromAbstraction.h:26
uint32_t read32(EepromPosition pos) override
Definition ArduinoEEPROMAbstraction.h:46
void write32(EepromPosition pos, uint32_t val) override
Definition ArduinoEEPROMAbstraction.h:61
uint16_t read16(EepromPosition pos) override
Definition ArduinoEEPROMAbstraction.h:42
void write8(EepromPosition pos, uint8_t val) override
Definition ArduinoEEPROMAbstraction.h:51
uint8_t read8(EepromPosition position) override
Definition ArduinoEEPROMAbstraction.h:38
void readIntoMemArray(uint8_t *memDest, EepromPosition romSrc, uint8_t len) override
Definition ArduinoEEPROMAbstraction.h:71
void writeArrayToRom(EepromPosition romDest, const uint8_t *memSrc, uint8_t len) override
Definition ArduinoEEPROMAbstraction.h:78
void write16(EepromPosition pos, uint16_t val) override
Definition ArduinoEEPROMAbstraction.h:55
Definition EepromAbstraction.h:33