From 9250ff98355603258c9c36a93dec309663fce359 Mon Sep 17 00:00:00 2001 From: NicoHood Date: Sun, 11 Oct 2015 10:14:08 +0200 Subject: [PATCH] Added System API --- src/HID-APIs/SystemAPI.h | 55 +++++++++++++++++++++++++++++++++ src/HID-APIs/SystemAPI.hpp | 63 ++++++++++++++++++++++++++++++++++++++ src/HID-Project.h | 2 +- src/MultiReport/System.cpp | 58 +++++++++++++++++++++++++++++++++++ src/MultiReport/System.h | 43 ++++++++++++++++++++++++++ 5 files changed, 220 insertions(+), 1 deletion(-) create mode 100644 src/HID-APIs/SystemAPI.h create mode 100644 src/HID-APIs/SystemAPI.hpp create mode 100644 src/MultiReport/System.cpp create mode 100644 src/MultiReport/System.h diff --git a/src/HID-APIs/SystemAPI.h b/src/HID-APIs/SystemAPI.h new file mode 100644 index 0000000..69e4833 --- /dev/null +++ b/src/HID-APIs/SystemAPI.h @@ -0,0 +1,55 @@ +/* +Copyright (c) 2014-2015 NicoHood +See the readme for credit to other people. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ + +// Include guard +#pragma once + +#include +#include "HID-Settings.h" + +#define SYSTEM_POWER_DOWN 0x81 +#define SYSTEM_SLEEP 0x82 +#define SYSTEM_WAKE_UP 0x83 + +typedef union{ + // Every usable system control key possible + uint8_t whole8[]; + uint8_t key; +} HID_SystemControlReport_Data_t; + +class SystemAPI{ +public: + inline SystemAPI(void); + inline void begin(void); + inline void end(void); + inline void write(uint8_t s); + inline void press(uint8_t s); + inline void release(void); + inline void releaseAll(void); + + // Sending is public in the base class for advanced users. + virtual void SendReport(void* data, int length) = 0; +}; + +// Implementation is inline +#include "SystemAPI.hpp" diff --git a/src/HID-APIs/SystemAPI.hpp b/src/HID-APIs/SystemAPI.hpp new file mode 100644 index 0000000..ba9d75c --- /dev/null +++ b/src/HID-APIs/SystemAPI.hpp @@ -0,0 +1,63 @@ +/* +Copyright (c) 2014-2015 NicoHood +See the readme for credit to other people. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ + +// Include guard +#pragma once + +SystemAPI::SystemAPI(void) +{ + // Empty +} + +void SystemAPI::begin(void){ + // release all buttons + end(); +} + +void SystemAPI::end(void){ + uint8_t _report = 0; + SendReport(&_report, sizeof(_report)); +} + +void SystemAPI::write(uint8_t s){ + press(s); + release(); +} + +void SystemAPI::release(void){ + begin(); +} + +void SystemAPI::releaseAll(void){ + begin(); +} + +void SystemAPI::press(uint8_t s){ +#ifdef USBCON + if (s == SYSTEM_WAKE_UP) + USBDevice.wakeupHost(); + else +#endif + SendReport(&s, sizeof(s)); +} + diff --git a/src/HID-Project.h b/src/HID-Project.h index 199eaef..84e897b 100644 --- a/src/HID-Project.h +++ b/src/HID-Project.h @@ -43,7 +43,7 @@ THE SOFTWARE. #include "MultiReport/ImprovedMouse.h" //#include "Consumer.h" //#include "Gamepad.h" -//#include "System.h" +#include "MultiReport/System.h" //#include "RawHID.h" // Include Teensy HID afterwards to overwrite key definitions if used diff --git a/src/MultiReport/System.cpp b/src/MultiReport/System.cpp new file mode 100644 index 0000000..b3e9af5 --- /dev/null +++ b/src/MultiReport/System.cpp @@ -0,0 +1,58 @@ +/* +Copyright (c) 2014-2015 NicoHood +See the readme for credit to other people. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ + +#include "System.h" + + +static const uint8_t _hidMultiReportDescriptorSystem[] PROGMEM = { + //TODO limit to system keys only? + /* System Control (Power Down, Sleep, Wakeup, ...) */ + 0x05, 0x01, /* USAGE_PAGE (Generic Desktop) */ + 0x09, 0x80, /* USAGE (System Control) */ + 0xa1, 0x01, /* COLLECTION (Application) */ + 0x85, HID_REPORTID_SYSTEMCONTROL, /* REPORT_ID */ + /* 1 system key */ + 0x15, 0x00, /* LOGICAL_MINIMUM (0) */ + 0x26, 0xff, 0x00, /* LOGICAL_MAXIMUM (255) */ + 0x19, 0x00, /* USAGE_MINIMUM (Undefined) */ + 0x29, 0xff, /* USAGE_MAXIMUM (System Menu Down) */ + 0x95, 0x01, /* REPORT_COUNT (1) */ + 0x75, 0x08, /* REPORT_SIZE (8) */ + 0x81, 0x00, /* INPUT (Data,Ary,Abs) */ + 0xc0 /* END_COLLECTION */ +}; + +System_::System_(void) +{ + static HIDDescriptorListNode node(_hidMultiReportDescriptorSystem, sizeof(_hidMultiReportDescriptorSystem)); + HID().AppendDescriptor(&node); +} + + +void System_::SendReport(void* data, int length) +{ + HID().SendReport(HID_REPORTID_SYSTEMCONTROL, data, length); +} + +System_ System; + diff --git a/src/MultiReport/System.h b/src/MultiReport/System.h new file mode 100644 index 0000000..a2336e8 --- /dev/null +++ b/src/MultiReport/System.h @@ -0,0 +1,43 @@ +/* +Copyright (c) 2014-2015 NicoHood +See the readme for credit to other people. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ + +// Include guard +#pragma once + +#include +#include "PluggableUSB.h" +#include "HID.h" +#include "HID-Settings.h" +#include "../HID-APIs/SystemAPI.h" + + +class System_ : public SystemAPI +{ +public: + System_(void); + +protected: + virtual inline void SendReport(void* data, int length) override; +}; +extern System_ System; +