diff options
Diffstat (limited to 'libraries')
-rw-r--r-- | libraries/HID/HID.cpp | 8 | ||||
-rw-r--r-- | libraries/HID/HID.h | 5 |
2 files changed, 11 insertions, 2 deletions
diff --git a/libraries/HID/HID.cpp b/libraries/HID/HID.cpp index b7aab6c..ff8e67b 100644 --- a/libraries/HID/HID.cpp +++ b/libraries/HID/HID.cpp @@ -21,7 +21,11 @@ #if defined(USBCON) -HID_ HID; +HID_& HID() +{ + static HID_ obj; + return obj; +} int HID_::getInterface(uint8_t* interfaceNum) { @@ -113,7 +117,7 @@ HID_::HID_(void) : PUSBListNode(1, 1, epType), protocol(1), idle(1) { epType[0] = EP_TYPE_INTERRUPT_IN; - PluggableUSB.plug(this); + PluggableUSB().plug(this); } int HID_::begin(void) diff --git a/libraries/HID/HID.h b/libraries/HID/HID.h index 2cd0f4a..a7f5c68 100644 --- a/libraries/HID/HID.h +++ b/libraries/HID/HID.h @@ -93,6 +93,11 @@ private: uint8_t idle; }; +// Replacement for global singleton. +// This function prevents static-initialization-order-fiasco +// https://isocpp.org/wiki/faq/ctors#static-init-order-on-first-use +HID_& HID(); + #define D_HIDREPORT(length) { 9, 0x21, 0x01, 0x01, 0, 1, 0x22, lowByte(length), highByte(length) } #endif // USBCON |