34 lines
571 B
C++
34 lines
571 B
C++
|
|
||
|
#include <avr/pgmspace.h>
|
||
|
#include "midi_data.hpp"
|
||
|
#include "eeprom.hpp"
|
||
|
|
||
|
static int address = 0;
|
||
|
|
||
|
void eeprom::jump(int loc) {
|
||
|
address = loc;
|
||
|
}
|
||
|
|
||
|
inline size_t proc_len(size_t len) {
|
||
|
if(address + len >= sizeof(MIDI)) {
|
||
|
return sizeof(MIDI) - address;
|
||
|
} else {
|
||
|
return len;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void eeprom::read(void* data, size_t len) {
|
||
|
char* bytes = (char*)data;
|
||
|
len = proc_len(len);
|
||
|
memcpy_P(data, &MIDI[address], len);
|
||
|
address += len;
|
||
|
}
|
||
|
|
||
|
void eeprom::write(const void* data, size_t len) {
|
||
|
const char* bytes = (const char*)data;
|
||
|
len = proc_len(len);
|
||
|
address += len;
|
||
|
}
|
||
|
|
||
|
|