1717
1818#pragma once
1919
20- #ifdef __AVR__
20+ #if defined( __AVR__) || defined(KALEIDOSCOPE_VIRTUAL_BUILD)
2121
2222#include < Arduino.h>
2323#include " kaleidoscope/device/Base.h"
2727#include " kaleidoscope/driver/storage/ATmega32U4EEPROMProps.h"
2828#include " kaleidoscope/driver/storage/AVREEPROM.h"
2929
30- #define ATMEGA32U4_KEYBOARD (BOARD_, BOOTLOADER_, ROW_PINS_, COL_PINS_ ) \
31- struct BOARD_ ##Props : kaleidoscope::device::ATmega32U4KeyboardProps { \
32- struct KeyScannerProps : public kaleidoscope ::driver::keyscanner::ATmegaProps { \
33- ATMEGA_KEYSCANNER_PROPS (ROW_PIN_LIST(ROW_PINS_), COL_PIN_LIST(COL_PINS_)); \
34- }; \
35- typedef kaleidoscope::driver::keyscanner::ATmega<KeyScannerProps> KeyScanner; \
36- typedef kaleidoscope::driver::bootloader::avr::BOOTLOADER_ BootLoader; \
37- }; \
30+ #define ATMEGA32U4_DEVICE_PROPS (BOARD_, BOOTLOADER_, ROW_PINS_, COL_PINS_ ) \
31+ struct BOARD_ ##Props : kaleidoscope::device::ATmega32U4KeyboardProps { \
32+ struct KeyScannerProps \
33+ : public kaleidoscope::driver::keyscanner::ATmegaProps \
34+ { \
35+ ATMEGA_KEYSCANNER_PROPS (ROW_PIN_LIST(ROW_PINS_), \
36+ COL_PIN_LIST (COL_PINS_)); \
37+ }; \
38+ typedef kaleidoscope::driver::keyscanner::ATmega<KeyScannerProps> KeyScanner;\
39+ typedef kaleidoscope::driver::bootloader::avr::BOOTLOADER_ BootLoader; \
40+ };
41+
42+ #define ATMEGA32U4_DEVICE (BOARD_ ) \
3843 class BOARD_ : public kaleidoscope ::device::ATmega32U4Keyboard<BOARD_##Props> {};
3944
45+ #define FORWARD (...) __VA_ARGS__
46+
47+ #ifndef KALEIDOSCOPE_VIRTUAL_BUILD
48+
49+ #define ATMEGA32U4_KEYBOARD (BOARD_, BOOTLOADER_, ROW_PINS_, COL_PINS_ ) \
50+ ATMEGA32U4_DEVICE_PROPS (BOARD_, BOOTLOADER_, \
51+ FORWARD (ROW_PINS_), FORWARD(COL_PINS_)) \
52+ ATMEGA32U4_DEVICE(BOARD_)
53+
54+ #else // ifndef KALEIDOSCOPE_VIRTUAL_BUILD
55+
56+ #define ATMEGA32U4_KEYBOARD (BOARD_, BOOTLOADER_, ROW_PINS_, COL_PINS_ ) \
57+ ATMEGA32U4_DEVICE_PROPS (BOARD_, BOOTLOADER_, \
58+ FORWARD (ROW_PINS_), FORWARD(COL_PINS_)) \
59+ /* Device definition omitted for virtual device builds. \
60+ * We need to forward declare the device name, though, as there are \
61+ * some legacy extern references to boards whose definition \
62+ * depends on this. \
63+ */ \
64+ class BOARD_;
65+
66+ #endif // ifndef KALEIDOSCOPE_VIRTUAL_BUILD
67+
4068namespace kaleidoscope {
4169namespace device {
4270
@@ -46,13 +74,18 @@ struct ATmega32U4KeyboardProps : kaleidoscope::device::BaseProps {
4674 typedef kaleidoscope::driver::storage::AVREEPROM<StorageProps> Storage;
4775};
4876
77+ #ifndef KALEIDOSCOPE_VIRTUAL_BUILD
4978template <typename _DeviceProps>
5079class ATmega32U4Keyboard : public kaleidoscope ::device::Base<_DeviceProps> {
5180 public:
5281 auto serialPort () -> decltype(Serial) & {
5382 return Serial;
5483 }
5584};
85+ #else // ifndef KALEIDOSCOPE_VIRTUAL_BUILD
86+ template <typename _DeviceProps>
87+ class ATmega32U4Keyboard ;
88+ #endif // ifndef KALEIDOSCOPE_VIRTUAL_BUILD
5689
5790}
5891}
0 commit comments