Continue to shuffle and burn stuff
- Remove the concept of "mcus". With only one target platform (CircuitPython), it no longer makes a bunch of sense and has been kept around for "what if" reasons, complicating our import chains and eating up RAM for pointless subclasses. If you're a `board`, you derive from `KeyboardConfig`. If you're a handwire, the user will derive from `KeyboardConfig`. The end. As part of this, `kmk.hid` was refactored heavily to emphasize that CircuitPython is our only supported HID stack, with stubs for future HID implementations (`USB_HID` becomes `AbstractHID`, probably only usable for testing purposes, `CircuitPython_USB_HID` becomes `USBHID`, and `BLEHID` is added with an immediate `NotImplementedError` on instantiation) - `KeyboardConfig` can now take a HID type at runtime. The NRF52840 boards will happily run in either configuration once CircuitPython support is in place, and a completely separate `mcu` subclass for each mode made no sense. This also potentially allows runtime *swaps* of HID driver down the line, but no code has been added to this effect. The default, and only functional value, for this is `HIDModes.USB` - Most consts have been moved to more logical homes - often, the main or, often only, component that uses them. `DiodeOrientation` moved to `kmk.matrix`, and anything HID-related moved to `kmk.hid`
This commit is contained in:
		
							
								
								
									
										47
									
								
								kmk/hid.py
									
									
									
									
									
								
							
							
						
						
									
										47
									
								
								kmk/hid.py
									
									
									
									
									
								
							@@ -1,10 +1,44 @@
 | 
			
		||||
import usb_hid
 | 
			
		||||
 | 
			
		||||
from kmk.consts import HID_REPORT_SIZES, HIDReportTypes, HIDUsage, HIDUsagePage
 | 
			
		||||
from kmk.keys import FIRST_KMK_INTERNAL_KEY, ConsumerKey, ModifierKey
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class USB_HID:
 | 
			
		||||
class HIDModes:
 | 
			
		||||
    NOOP = 0  # currently unused; for testing?
 | 
			
		||||
    USB = 1
 | 
			
		||||
    BLE = 2  # currently unused; for bluetooth
 | 
			
		||||
 | 
			
		||||
    ALL_MODES = (NOOP, USB, BLE)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class HIDReportTypes:
 | 
			
		||||
    KEYBOARD = 1
 | 
			
		||||
    MOUSE = 2
 | 
			
		||||
    CONSUMER = 3
 | 
			
		||||
    SYSCONTROL = 4
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class HIDUsage:
 | 
			
		||||
    KEYBOARD = 0x06
 | 
			
		||||
    MOUSE = 0x02
 | 
			
		||||
    CONSUMER = 0x01
 | 
			
		||||
    SYSCONTROL = 0x80
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class HIDUsagePage:
 | 
			
		||||
    CONSUMER = 0x0C
 | 
			
		||||
    KEYBOARD = MOUSE = SYSCONTROL = 0x01
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
HID_REPORT_SIZES = {
 | 
			
		||||
    HIDReportTypes.KEYBOARD: 8,
 | 
			
		||||
    HIDReportTypes.MOUSE: 4,
 | 
			
		||||
    HIDReportTypes.CONSUMER: 2,
 | 
			
		||||
    HIDReportTypes.SYSCONTROL: 8,  # TODO find the correct value for this
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class AbstractHID:
 | 
			
		||||
    REPORT_BYTES = 8
 | 
			
		||||
 | 
			
		||||
    def __init__(self):
 | 
			
		||||
@@ -154,7 +188,7 @@ class USB_HID:
 | 
			
		||||
        return self
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class CircuitPythonUSB_HID(USB_HID):
 | 
			
		||||
class USBHID(AbstractHID):
 | 
			
		||||
    REPORT_BYTES = 9
 | 
			
		||||
 | 
			
		||||
    def post_init(self):
 | 
			
		||||
@@ -187,3 +221,10 @@ class CircuitPythonUSB_HID(USB_HID):
 | 
			
		||||
        return self.devices[reporting_device_const].send_report(
 | 
			
		||||
            evt[1 : HID_REPORT_SIZES[reporting_device_const] + 1]
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class BLEHID(AbstractHID):
 | 
			
		||||
    def __init__(self, *args, **kwargs):
 | 
			
		||||
        raise NotImplementedError(
 | 
			
		||||
            'BLE HID is not supported by upstream CircuitPython yet'
 | 
			
		||||
        )
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user