summaryrefslogtreecommitdiff
path: root/hid/lib/drivers-avr
diff options
context:
space:
mode:
authortomaszduda23 <[email protected]>2022-07-11 11:59:56 +0900
committerGitHub <[email protected]>2022-07-11 05:59:56 +0300
commitdc1bc121c89600e2d5a18458283aa5960aa39e24 (patch)
tree9c212046147cdea8a65973b3b0fd1405cbdeb5c4 /hid/lib/drivers-avr
parent89aff795fd7905aaf192428bb99814c13b98d5c2 (diff)
add interface for storage (#99)
Diffstat (limited to 'hid/lib/drivers-avr')
-rw-r--r--hid/lib/drivers-avr/eeprom.h40
-rw-r--r--hid/lib/drivers-avr/factory.cpp13
2 files changed, 53 insertions, 0 deletions
diff --git a/hid/lib/drivers-avr/eeprom.h b/hid/lib/drivers-avr/eeprom.h
new file mode 100644
index 00000000..7868f03d
--- /dev/null
+++ b/hid/lib/drivers-avr/eeprom.h
@@ -0,0 +1,40 @@
+/*****************************************************************************
+# #
+# KVMD - The main PiKVM daemon. #
+# #
+# Copyright (C) 2018-2022 Maxim Devaev <[email protected]> #
+# #
+# This program is free software: you can redistribute it and/or modify #
+# it under the terms of the GNU General Public License as published by #
+# the Free Software Foundation, either version 3 of the License, or #
+# (at your option) any later version. #
+# #
+# This program is distributed in the hope that it will be useful, #
+# but WITHOUT ANY WARRANTY; without even the implied warranty of #
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
+# GNU General Public License for more details. #
+# #
+# You should have received a copy of the GNU General Public License #
+# along with this program. If not, see <https://www.gnu.org/licenses/>. #
+# #
+*****************************************************************************/
+
+#include "storage.h"
+#ifdef HID_DYNAMIC
+#include <avr/eeprom.h>
+#endif
+
+namespace DRIVERS {
+
+ struct Eeprom : public Storage {
+ using Storage::Storage;
+
+ void read_block (void *_dst, const void *_src, size_t _n) override {
+ eeprom_read_block(_dst, _src, _n);
+ }
+
+ void update_block (const void *_src, void *_dst, size_t _n) override {
+ eeprom_update_block(_src, _dst, _n);
+ }
+ };
+}
diff --git a/hid/lib/drivers-avr/factory.cpp b/hid/lib/drivers-avr/factory.cpp
index 26f10583..c6968777 100644
--- a/hid/lib/drivers-avr/factory.cpp
+++ b/hid/lib/drivers-avr/factory.cpp
@@ -23,6 +23,7 @@
#include "usb/hid.h"
#include "ps2/hid.h"
#include "factory.h"
+#include "eeprom.h"
namespace DRIVERS {
@@ -56,4 +57,16 @@ namespace DRIVERS {
return new Mouse(DRIVERS::DUMMY);
}
}
+ Storage* Factory::makeStorage(type _type) {
+ switch (_type)
+ {
+# ifdef HID_DYNAMIC
+ case NON_VOLATILE_STORAGE:
+ return new Eeprom(DRIVERS::NON_VOLATILE_STORAGE);
+# endif
+ default:
+ return new Storage(DRIVERS::DUMMY);
+ }
+ }
+
}