From 3081e0cccf0a2aa899f8095c37dd92dd7c330d0a Mon Sep 17 00:00:00 2001 From: fauxpark Date: Tue, 19 Apr 2022 13:42:36 +1000 Subject: [PATCH 1/2] [macOS] Add support for LUFA-HID/QMK-HID --- macos/QMK Toolbox.xcodeproj/project.pbxproj | 10 +++++++ .../QMK Toolbox/Resources/hid_bootloader_cli | Bin 0 -> 53960 bytes .../USB/Bootloader/BootloaderType.h | 2 ++ .../USB/Bootloader/LUFAHIDDevice.h | 4 +++ .../USB/Bootloader/LUFAHIDDevice.m | 28 ++++++++++++++++++ macos/QMK Toolbox/USB/USBListener.m | 9 ++++++ 6 files changed, 53 insertions(+) create mode 100755 macos/QMK Toolbox/Resources/hid_bootloader_cli create mode 100644 macos/QMK Toolbox/USB/Bootloader/LUFAHIDDevice.h create mode 100644 macos/QMK Toolbox/USB/Bootloader/LUFAHIDDevice.m diff --git a/macos/QMK Toolbox.xcodeproj/project.pbxproj b/macos/QMK Toolbox.xcodeproj/project.pbxproj index 3961abd8dd..5748a70e58 100644 --- a/macos/QMK Toolbox.xcodeproj/project.pbxproj +++ b/macos/QMK Toolbox.xcodeproj/project.pbxproj @@ -23,10 +23,12 @@ 09D79CBC1FB8A64B0086ABF6 /* libusb-0.1.4.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = 09D79CBB1FB8A6490086ABF6 /* libusb-0.1.4.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; 3A1AF21126FA31D700AC977B /* KeyTesterWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A1AF21026FA31D700AC977B /* KeyTesterWindow.m */; }; 3A245407270817DF001F4AE0 /* MicrocontrollerSelector.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A245406270817DF001F4AE0 /* MicrocontrollerSelector.m */; }; + 3A3B4E2E27D9FBF800526FBF /* LUFAHIDDevice.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A3B4E2D27D9FBF800526FBF /* LUFAHIDDevice.m */; }; 3A5166BC26E07F0000EBE3DC /* KeyView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A5166BB26E07F0000EBE3DC /* KeyView.m */; }; 3A5863112725A99D00354E07 /* APM32DFUDevice.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A5863102725A99D00354E07 /* APM32DFUDevice.m */; }; 3A62C86526A96AED001C655A /* reset_right.eep in Resources */ = {isa = PBXBuildFile; fileRef = 3A62C86326A96AED001C655A /* reset_right.eep */; }; 3A62C86626A96AED001C655A /* reset_left.eep in Resources */ = {isa = PBXBuildFile; fileRef = 3A62C86426A96AED001C655A /* reset_left.eep */; }; + 3A7492CC27DF96BF0073A5A0 /* hid_bootloader_cli in Resources */ = {isa = PBXBuildFile; fileRef = 3A7492CB27DF96BF0073A5A0 /* hid_bootloader_cli */; }; 3A7770DA22BD3BA300398C40 /* libftdi.1.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = 3A7770D822BD3B8200398C40 /* libftdi.1.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; 3A8F9EFF26E75012007480A7 /* KeyTesterWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3A8F9F0126E75012007480A7 /* KeyTesterWindow.xib */; }; 3A8F9F0226E7501E007480A7 /* KeyView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3A8F9F0426E7501E007480A7 /* KeyView.xib */; }; @@ -93,12 +95,15 @@ 3A1AF21026FA31D700AC977B /* KeyTesterWindow.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KeyTesterWindow.m; sourceTree = ""; }; 3A245405270817DF001F4AE0 /* MicrocontrollerSelector.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MicrocontrollerSelector.h; sourceTree = ""; }; 3A245406270817DF001F4AE0 /* MicrocontrollerSelector.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MicrocontrollerSelector.m; sourceTree = ""; }; + 3A3B4E2C27D9FBF800526FBF /* LUFAHIDDevice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LUFAHIDDevice.h; sourceTree = ""; }; + 3A3B4E2D27D9FBF800526FBF /* LUFAHIDDevice.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LUFAHIDDevice.m; sourceTree = ""; }; 3A5166BA26E07F0000EBE3DC /* KeyView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KeyView.h; sourceTree = ""; }; 3A5166BB26E07F0000EBE3DC /* KeyView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KeyView.m; sourceTree = ""; }; 3A58630F2725A99D00354E07 /* APM32DFUDevice.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = APM32DFUDevice.h; sourceTree = ""; }; 3A5863102725A99D00354E07 /* APM32DFUDevice.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = APM32DFUDevice.m; sourceTree = ""; }; 3A62C86326A96AED001C655A /* reset_right.eep */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = reset_right.eep; path = ../../../common/reset_right.eep; sourceTree = ""; }; 3A62C86426A96AED001C655A /* reset_left.eep */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = reset_left.eep; path = ../../../common/reset_left.eep; sourceTree = ""; }; + 3A7492CB27DF96BF0073A5A0 /* hid_bootloader_cli */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.executable"; path = hid_bootloader_cli; sourceTree = ""; }; 3A7770D822BD3B8200398C40 /* libftdi.1.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libftdi.1.dylib; sourceTree = ""; }; 3A8F9F0026E75012007480A7 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/KeyTesterWindow.xib; sourceTree = ""; }; 3A8F9F0326E7501E007480A7 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/KeyView.xib; sourceTree = ""; }; @@ -230,6 +235,7 @@ 3AB4BC9C2495540A00204A3F /* bootloadHID */, 0929640C1F5E403C004F2D3F /* dfu-programmer */, 098AEDFA1F5E45C300CA054D /* dfu-util */, + 3A7492CB27DF96BF0073A5A0 /* hid_bootloader_cli */, C9A09B5622EE6826008C3CF3 /* mdloader */, 0929640E1F5E4068004F2D3F /* teensy_loader_cli */, 3A7770D822BD3B8200398C40 /* libftdi.1.dylib */, @@ -286,6 +292,8 @@ 3AE6D9F02726C9B500CECA21 /* HalfKayDevice.m */, 3AE6D9F22726C9EC00CECA21 /* KiibohdDFUDevice.h */, 3AE6D9F32726C9EC00CECA21 /* KiibohdDFUDevice.m */, + 3A3B4E2C27D9FBF800526FBF /* LUFAHIDDevice.h */, + 3A3B4E2D27D9FBF800526FBF /* LUFAHIDDevice.m */, 3AE6D9F52726CA1C00CECA21 /* LUFAMSDevice.h */, 3AE6D9F62726CA1C00CECA21 /* LUFAMSDevice.m */, 3AE6D9FB2726CAF900CECA21 /* STM32DFUDevice.h */, @@ -372,6 +380,7 @@ 3AB4BC9D2495540A00204A3F /* bootloadHID in Resources */, 0929640D1F5E403C004F2D3F /* dfu-programmer in Resources */, 098AEDFB1F5E45C300CA054D /* dfu-util in Resources */, + 3A7492CC27DF96BF0073A5A0 /* hid_bootloader_cli in Resources */, C9A09B5722EE6826008C3CF3 /* mdloader in Resources */, 0929640F1F5E4068004F2D3F /* teensy_loader_cli in Resources */, ); @@ -404,6 +413,7 @@ 3AE6D9EE2726C95C00CECA21 /* CaterinaDevice.m in Sources */, 3AE6D9F12726C9B500CECA21 /* HalfKayDevice.m in Sources */, 3AE6D9F42726C9EC00CECA21 /* KiibohdDFUDevice.m in Sources */, + 3A3B4E2E27D9FBF800526FBF /* LUFAHIDDevice.m in Sources */, 3AE6D9F72726CA1C00CECA21 /* LUFAMSDevice.m in Sources */, 3AE6D9FD2726CAF900CECA21 /* STM32DFUDevice.m in Sources */, 3AE6DA002726CB2600CECA21 /* STM32DuinoDevice.m in Sources */, diff --git a/macos/QMK Toolbox/Resources/hid_bootloader_cli b/macos/QMK Toolbox/Resources/hid_bootloader_cli new file mode 100755 index 0000000000000000000000000000000000000000..c8575b11e47fee768636a2e013df31483315c0e2 GIT binary patch literal 53960 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 Q`a3N&F@m~37&O^`0;cG#N&o-= literal 0 HcmV?d00001 diff --git a/macos/QMK Toolbox/USB/Bootloader/BootloaderType.h b/macos/QMK Toolbox/USB/Bootloader/BootloaderType.h index 33b39c2ec0..6ec33b4846 100644 --- a/macos/QMK Toolbox/USB/Bootloader/BootloaderType.h +++ b/macos/QMK Toolbox/USB/Bootloader/BootloaderType.h @@ -7,8 +7,10 @@ typedef enum BootloaderType : NSUInteger { BootloaderTypeCaterina, BootloaderTypeHalfKay, BootloaderTypeKiibohdDFU, + BootloaderTypeLUFAHID, BootloaderTypeLUFAMS, BootloaderTypeQMKDFU, + BootloaderTypeQMKHID, BootloaderTypeSTM32DFU, BootloaderTypeSTM32Duino, BootloaderTypeUSBAsp, diff --git a/macos/QMK Toolbox/USB/Bootloader/LUFAHIDDevice.h b/macos/QMK Toolbox/USB/Bootloader/LUFAHIDDevice.h new file mode 100644 index 0000000000..081c9b2c18 --- /dev/null +++ b/macos/QMK Toolbox/USB/Bootloader/LUFAHIDDevice.h @@ -0,0 +1,4 @@ +#import "BootloaderDevice.h" + +@interface LUFAHIDDevice : BootloaderDevice +@end diff --git a/macos/QMK Toolbox/USB/Bootloader/LUFAHIDDevice.m b/macos/QMK Toolbox/USB/Bootloader/LUFAHIDDevice.m new file mode 100644 index 0000000000..60de271f29 --- /dev/null +++ b/macos/QMK Toolbox/USB/Bootloader/LUFAHIDDevice.m @@ -0,0 +1,28 @@ +#import "LUFAHIDDevice.h" + +@implementation LUFAHIDDevice + +- (id)initWithUSBDevice:(USBDevice *)usbDevice { + if (self = [super initWithUSBDevice:usbDevice]) { + if ([self revisionBCD] == 0x0936) { + self.name = @"QMK HID"; + self.type = BootloaderTypeQMKHID; + } else { + self.name = @"LUFA HID"; + self.type = BootloaderTypeLUFAHID; + } + } + return self; +} + +-(void)flashWithMCU:(NSString *)mcu file:(NSString *)file { + [self runProcess:@"hid_bootloader_cli" withArgs:@[[NSString stringWithFormat:@"-mmcu=%@", mcu], file, @"-v"]]; +} + +// hid_bootloader_cli 210130 lacks -b flag +// Next LUFA release should have it thanks to abcminiuser/lufa#173 +//-(void)resetWithMCU:(NSString *)mcu { +// [self runProcess:@"hid_bootloader_cli" withArgs:@[[NSString stringWithFormat:@"-mmcu=%@", mcu], @"-bv"]]; +//} + +@end diff --git a/macos/QMK Toolbox/USB/USBListener.m b/macos/QMK Toolbox/USB/USBListener.m index 1787bc80ab..a953dd767c 100644 --- a/macos/QMK Toolbox/USB/USBListener.m +++ b/macos/QMK Toolbox/USB/USBListener.m @@ -11,6 +11,7 @@ #import "CaterinaDevice.h" #import "HalfKayDevice.h" #import "KiibohdDFUDevice.h" +#import "LUFAHIDDevice.h" #import "LUFAMSDevice.h" #import "STM32DFUDevice.h" #import "STM32DuinoDevice.h" @@ -144,6 +145,9 @@ - (void)stop { return [[HalfKayDevice alloc] initWithUSBDevice:usbDevice]; case BootloaderTypeKiibohdDFU: return [[KiibohdDFUDevice alloc] initWithUSBDevice:usbDevice]; + case BootloaderTypeLUFAHID: + case BootloaderTypeQMKHID: + return [[LUFAHIDDevice alloc] initWithUSBDevice:usbDevice]; case BootloaderTypeLUFAMS: return [[LUFAMSDevice alloc] initWithUSBDevice:usbDevice]; case BootloaderTypeSTM32DFU: @@ -166,6 +170,11 @@ - (BootloaderType)deviceTypeForVendorID:(ushort)vendorID productID:(ushort)produ switch (productID) { case 0x2045: return BootloaderTypeLUFAMS; + case 0x2067: + if (revisionBCD == 0x0936) { // Unicode Ψ + return BootloaderTypeQMKHID; + } + return BootloaderTypeLUFAHID; case 0x2FEF: // ATmega16U2 case 0x2FF0: // ATmega32U2 case 0x2FF3: // ATmega16U4 From 6a754b81e55fe5b6e2973505d1a12de1dbbdd684 Mon Sep 17 00:00:00 2001 From: fauxpark Date: Tue, 19 Apr 2022 14:02:17 +1000 Subject: [PATCH 2/2] Add to support list --- macos/QMK Toolbox/AppDelegate.m | 1 + 1 file changed, 1 insertion(+) diff --git a/macos/QMK Toolbox/AppDelegate.m b/macos/QMK Toolbox/AppDelegate.m index 8d4086574f..8b7e990ab8 100644 --- a/macos/QMK Toolbox/AppDelegate.m +++ b/macos/QMK Toolbox/AppDelegate.m @@ -61,6 +61,7 @@ - (void)applicationDidFinishLaunching:(NSNotification *)aNotification { [self.logTextView logInfo:@" - BootloadHID (Atmel, PS2AVRGB) via bootloadHID (https://www.obdev.at/products/vusb/bootloadhid.html)"]; [self.logTextView logInfo:@" - Caterina (Arduino, Pro Micro) via avrdude (http://nongnu.org/avrdude/)"]; [self.logTextView logInfo:@" - HalfKay (Teensy, Ergodox EZ) via Teensy Loader (https://pjrc.com/teensy/loader_cli.html)"]; + [self.logTextView logInfo:@" - LUFA/QMK HID via hid_bootloader_cli (https://github.com/abcminiuser/lufa)"]; [self.logTextView logInfo:@" - LUFA Mass Storage"]; [self.logTextView logInfo:@"Supported ISP flashers:"]; [self.logTextView logInfo:@" - AVRISP (Arduino ISP)"];