IoAbstraction
Toggle main menu visibility
Loading...
Searching...
No Matches
src
MockEepromAbstraction.h
1
#ifndef _MOCK_EEPROM_ABSTRACTION_H_
2
#define _MOCK_EEPROM_ABSTRACTION_H_
3
4
#include "
EepromAbstraction.h
"
5
#include <IoLogging.h>
6
12
20
class
MockEepromAbstraction :
public
EepromAbstraction
{
21
private
:
22
bool
errorFlag;
23
uint8_t *data;
24
unsigned
int
memSize;
25
public
:
26
explicit
MockEepromAbstraction(
unsigned
int
size = 128) {
27
data =
new
uint8_t[size];
28
errorFlag =
false
;
29
memSize = size;
30
memset(data, 0, memSize);
31
}
32
~MockEepromAbstraction()
override
{
33
delete
[] data;
34
}
35
36
bool
hasErrorOccurred
()
override
{
return
errorFlag;}
37
void
clearError() {errorFlag =
false
;}
38
39
void
checkBounds(
EepromPosition
pos,
int
len) {
40
if
(uint16_t(pos + len) >= memSize) {
41
serlogF2(SER_DEBUG,
"checkbounds exceeded: "
, pos+len);
42
errorFlag =
true
;
43
}
44
}
45
46
void
reset() {
47
memset(data, 0, memSize);
48
}
49
50
uint8_t
read8
(
EepromPosition
position)
override
{
51
checkBounds(position, 1);
52
return
data[position];
53
}
54
55
void
write8
(
EepromPosition
position, uint8_t val)
override
{
56
checkBounds(position, 1);
57
data[position] = val;
58
}
59
60
uint16_t
read16
(
EepromPosition
position)
override
{
61
return
read8
(position) | (
read8
(position + 1) << 8);
62
}
63
64
void
write16
(
EepromPosition
position, uint16_t val)
override
{
65
write8
(position, val);
66
write8
(position + 1, val >> 8);
67
}
68
69
virtual
uint32_t
read32
(
EepromPosition
position)
override
{
70
checkBounds(position, 4);
71
return
(uint32_t)
read8
(position) | ((uint32_t)
read8
(position + 1) << 8) | ((uint32_t)
read8
(position + 2) << 16) | ((uint32_t)
read8
(position + 3) << 24);
72
}
73
74
virtual
void
write32
(
EepromPosition
position, uint32_t val)
override
{
75
checkBounds(position, 4);
76
write8
(position, val);
77
write8
(position + 1, val >> 8);
78
write8
(position + 2, val >> 16);
79
write8
(position + 3, val >> 24);
80
}
81
82
virtual
void
readIntoMemArray
(uint8_t* memDest,
EepromPosition
romSrc, uint8_t len)
override
{
83
checkBounds(romSrc, len);
84
memcpy(memDest, &data[romSrc], len);
85
}
86
87
virtual
void
writeArrayToRom
(
EepromPosition
romDest,
const
uint8_t* memSrc, uint8_t len)
override
{
88
checkBounds(romDest, len);
89
memcpy(&data[romDest], memSrc, len);
90
}
91
92
void
serPrintContents(
int
start,
int
len) {
93
if
(len >= 63) {
94
serlogF(SER_DEBUG,
"Mock rom debug - len too big"
);
95
return
;
96
}
97
char
str[64];
98
str[0] = 0;
99
int
i;
100
for
(i=0; i<len; i++) {
101
if
(data[i + start] >= 30)
102
str[i] = data[i + start];
103
else
104
str[i] =
'?'
;
105
}
106
str[i] = 0;
107
serlogF4(SER_DEBUG,
"MockRom contents start, len, data: "
, start, len, str);
108
}
109
};
110
111
#endif
EepromAbstraction.h
Wraps up EEPROM support in a way that is compatible between implementations. For example presently th...
EepromPosition
uint16_t EepromPosition
Definition
EepromAbstraction.h:26
EepromAbstraction
Definition
EepromAbstraction.h:33
MockEepromAbstraction::write16
void write16(EepromPosition position, uint16_t val) override
Definition
MockEepromAbstraction.h:64
MockEepromAbstraction::read32
virtual uint32_t read32(EepromPosition position) override
Definition
MockEepromAbstraction.h:69
MockEepromAbstraction::readIntoMemArray
virtual void readIntoMemArray(uint8_t *memDest, EepromPosition romSrc, uint8_t len) override
Definition
MockEepromAbstraction.h:82
MockEepromAbstraction::hasErrorOccurred
bool hasErrorOccurred() override
Definition
MockEepromAbstraction.h:36
MockEepromAbstraction::read16
uint16_t read16(EepromPosition position) override
Definition
MockEepromAbstraction.h:60
MockEepromAbstraction::read8
uint8_t read8(EepromPosition position) override
Definition
MockEepromAbstraction.h:50
MockEepromAbstraction::write32
virtual void write32(EepromPosition position, uint32_t val) override
Definition
MockEepromAbstraction.h:74
MockEepromAbstraction::writeArrayToRom
virtual void writeArrayToRom(EepromPosition romDest, const uint8_t *memSrc, uint8_t len) override
Definition
MockEepromAbstraction.h:87
MockEepromAbstraction::write8
void write8(EepromPosition position, uint8_t val) override
Definition
MockEepromAbstraction.h:55