From 2197dab6fa081ba4a78b4aadf76535999a1382b6 Mon Sep 17 00:00:00 2001 From: Benjamin Dengler Date: Tue, 26 May 2020 08:30:16 +0200 Subject: [PATCH] Moved BLE functionality to its own module --- kmk/ble.py | 60 +++++++++++++++++++++++++++++++++++++++++++++ kmk/hid.py | 56 ------------------------------------------ kmk/kmk_keyboard.py | 3 ++- 3 files changed, 62 insertions(+), 57 deletions(-) create mode 100644 kmk/ble.py diff --git a/kmk/ble.py b/kmk/ble.py new file mode 100644 index 0000000..f54c540 --- /dev/null +++ b/kmk/ble.py @@ -0,0 +1,60 @@ +from adafruit_ble import BLERadio +from adafruit_ble.advertising import Advertisement +from adafruit_ble.advertising.standard import ProvideServicesAdvertisement +from adafruit_ble.services.standard.hid import HIDService + +from kmk.hid import AbstractHID, HIDUsage, HIDUsagePage, HIDReportTypes, HID_REPORT_SIZES + + +BLE_APPEARANCE_HID_KEYBOARD = 961 + + +class BLEHID(AbstractHID): + def post_init(self): + self.devices = {} + + hid = HIDService() + + advertisement = ProvideServicesAdvertisement(hid) + advertisement.appearance = BLE_APPEARANCE_HID_KEYBOARD + scan_response = Advertisement() + scan_response.complete_name = "KMK Keyboard" + + ble = BLERadio() + if not ble.connected: + ble.start_advertising(advertisement, scan_response) + while not ble.connected: + pass + + for device in hid.devices: + us = device.usage + up = device.usage_page + + if up == HIDUsagePage.CONSUMER and us == HIDUsage.CONSUMER: + self.devices[HIDReportTypes.CONSUMER] = device + continue + + if up == HIDUsagePage.KEYBOARD and us == HIDUsage.KEYBOARD: + self.devices[HIDReportTypes.KEYBOARD] = device + continue + + if up == HIDUsagePage.MOUSE and us == HIDUsage.MOUSE: + self.devices[HIDReportTypes.MOUSE] = device + continue + + if up == HIDUsagePage.SYSCONTROL and us == HIDUsage.SYSCONTROL: + self.devices[HIDReportTypes.SYSCONTROL] = device + continue + + def hid_send(self, evt): + # int, can be looked up in HIDReportTypes + reporting_device_const = self.report_device[0] + + report_size = HID_REPORT_SIZES[reporting_device_const] + + while (len(evt) < report_size + 1): + evt.append(0) + + return self.devices[reporting_device_const].send_report( + evt[1 : report_size + 1] + ) \ No newline at end of file diff --git a/kmk/hid.py b/kmk/hid.py index de98700..af35d7f 100644 --- a/kmk/hid.py +++ b/kmk/hid.py @@ -1,10 +1,5 @@ import usb_hid -from adafruit_ble import BLERadio -from adafruit_ble.advertising import Advertisement -from adafruit_ble.advertising.standard import ProvideServicesAdvertisement -from adafruit_ble.services.standard.hid import HIDService - from kmk.keys import FIRST_KMK_INTERNAL_KEY, ConsumerKey, ModifierKey @@ -226,54 +221,3 @@ class USBHID(AbstractHID): return self.devices[reporting_device_const].send_report( evt[1 : HID_REPORT_SIZES[reporting_device_const] + 1] ) - - -class BLEHID(AbstractHID): - def post_init(self): - self.devices = {} - - hid = HIDService() - - advertisement = ProvideServicesAdvertisement(hid) - advertisement.appearance = 961 - scan_response = Advertisement() - scan_response.complete_name = "KMK Keyboard" - - ble = BLERadio() - if not ble.connected: - ble.start_advertising(advertisement, scan_response) - while not ble.connected: - pass - - for device in hid.devices: - us = device.usage - up = device.usage_page - - if up == HIDUsagePage.CONSUMER and us == HIDUsage.CONSUMER: - self.devices[HIDReportTypes.CONSUMER] = device - continue - - if up == HIDUsagePage.KEYBOARD and us == HIDUsage.KEYBOARD: - self.devices[HIDReportTypes.KEYBOARD] = device - continue - - if up == HIDUsagePage.MOUSE and us == HIDUsage.MOUSE: - self.devices[HIDReportTypes.MOUSE] = device - continue - - if up == HIDUsagePage.SYSCONTROL and us == HIDUsage.SYSCONTROL: - self.devices[HIDReportTypes.SYSCONTROL] = device - continue - - def hid_send(self, evt): - # int, can be looked up in HIDReportTypes - reporting_device_const = self.report_device[0] - - report_size = HID_REPORT_SIZES[reporting_device_const] - - while (len(evt) < report_size + 1): - evt.append(0) - - return self.devices[reporting_device_const].send_report( - evt[1 : report_size + 1] - ) diff --git a/kmk/kmk_keyboard.py b/kmk/kmk_keyboard.py index 5beb7cd..ed6d09a 100644 --- a/kmk/kmk_keyboard.py +++ b/kmk/kmk_keyboard.py @@ -8,7 +8,8 @@ import gc from kmk import led, rgb from kmk.consts import KMK_RELEASE, LeaderMode, UnicodeMode -from kmk.hid import BLEHID, USBHID, AbstractHID, HIDModes +from kmk.hid import USBHID, AbstractHID, HIDModes +from kmk.ble import BLEHID from kmk.internal_state import InternalState from kmk.keys import KC from kmk.kmktime import sleep_ms