DualOptiboot/ActualOptiboot/optiboot/examples/test_eeprom/test_eeprom.ino

108 lines
2.2 KiB
C++

/*
EEPROM test program with more features.
*/
#include <EEPROM.h>
void setup() {
// initialize the LED pin as an output.
pinMode(13, OUTPUT);
Serial.begin(115200);
Serial.println("EEPROM test program.\n"
"Enter one of (C)lear, (E)rase, (I)incrementing, (U)p&Down, (0)check,\n"
"(D)ump, (F)check, (T)inccheck");
}
void hex2(uint8_t n) {
if (n <= 15)
Serial.write('0');
Serial.print(n, HEX);
Serial.write(' ');
}
void print16(uint8_t *buf) {
for (int i = 0; i < 16; i++) {
hex2(buf[i]);
}
Serial.print(" ");
for (int i = 0; i < 16; i++) {
uint8_t c = buf[i];
if (c < 32 || c > 126)
Serial.write('.');
else
Serial.write(c);
}
Serial.println();
}
void dump16(uint16_t addr) {
struct {
uint8_t buf[16];
} s;
EEPROM.get(addr, s);
print16(s.buf);
}
int cmd = -1;
void loop() {
uint16_t i;
do {
cmd = Serial.read();
} while (cmd < 0);
switch (cmd & ~('a' - 'A')) {
case 'C':
for (i = 0 ; i < EEPROM.length() ; i++) {
EEPROM.write(i, 0);
}
break;
case 'D':
Serial.println("EEPROM Dump\n");
for (i = 0; i < EEPROM.length(); i += 16) {
Serial.print(i, HEX);
Serial.print(": ");
dump16(i);
}
Serial.println();
break;
case 'E':
for (i = 0 ; i < EEPROM.length() ; i++) {
EEPROM.write(i, 0xFF);
}
break;
case 'I':
for (i = 0 ; i < EEPROM.length() ; i++) {
EEPROM.write(i, i & 0xFF);
}
break;
case 'U':
for (i = 0 ; i < EEPROM.length() ; i++) {
if ((i & 0x100) == 0) {
EEPROM.write(i, i & 0xFF);
} else {
EEPROM.write(i, 255 - (i & 0xFF));
}
}
break;
case '?':
Serial.println("EEPROM test program.\n"
"Enter one of (C)lear, (E)rase, (I)incrementing, (0)check,\n"
"(D)ump, (F)check, (T)inccheck");
// Fall through
case '\n':
case '\r':
break;
default:
Serial.print("unrecognized command ");
Serial.println(cmd);
break;
// turn the LED on when we're done
digitalWrite(13, HIGH);
}
}