From owner-freebsd-bluetooth@freebsd.org Sat Sep 12 14:26:57 2015 Return-Path: Delivered-To: freebsd-bluetooth@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 2B2F5A02EE5 for ; Sat, 12 Sep 2015 14:26:57 +0000 (UTC) (envelope-from erdgeist@erdgeist.org) Received: from elektropost.org (elektropost.org [217.115.13.198]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 82E4F153D for ; Sat, 12 Sep 2015 14:26:55 +0000 (UTC) (envelope-from erdgeist@erdgeist.org) Received: (qmail 75605 invoked from network); 12 Sep 2015 14:26:54 -0000 Received: from elektropost.org (HELO elektropost.org) (erdgeist@erdgeist.org) by elektropost.org with ESMTPS (DHE-RSA-AES128-SHA encrypted); 12 Sep 2015 14:26:54 -0000 From: Dirk Engling Subject: Re: Apple Magic Mouse To: freebsd-bluetooth@freebsd.org References: <1437909200.57929.3.camel@yandex.com> Message-ID: <55F4362A.4050203@erdgeist.org> Date: Sat, 12 Sep 2015 16:26:50 +0200 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:38.0) Gecko/20100101 Thunderbird/38.2.0 MIME-Version: 1.0 In-Reply-To: Content-Type: multipart/mixed; boundary="------------000402030101070808000407" X-BeenThere: freebsd-bluetooth@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: Using Bluetooth in FreeBSD environments List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 12 Sep 2015 14:26:57 -0000 This is a multi-part message in MIME format. --------------000402030101070808000407 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit On 09.08.15 21:47, plunky at ogmig.net (Iain Hibbert) wrote: > I'd say that using the NetBSD driver (I am the author) is not really > possible on FreeBSD, since FreeBSD does things related to Bluetooth HIDs > differently. It should be simple enough to add the Magic Mouse handling to > the bthidd(8) daemon though, but I don't know how easy that would be, or a > separate daemon could be written instead. I've taken a look and there's several obstacles in the way. But first the good news, once I add if (fd == srv->ctrl) { static uint8_t rep[] = { 0x53, 0xd7, 0x01 }; write(new_fd, rep, 3 ); } to usr.sbin/bluetooth/bthidd/server.c:272, the hid_interrupt function in usr.sbin/bluetooth/bthidd/hid.c gets trackpad-events and mouse lift/drop from the magic mouse. My problem is now, that this feature report is hard coded and obviously not every device should be served this. But, > The way I worked the identification in NetBSD, was that when configuring a > HID device, I checked the descriptor as normal and also the > Manufacturer/Product ID via the PNP profile. When the latter matched the > Apple Magic Mouse, then it just attaches a different driver. it looks like the Manufacturer/Product ID is ignored on the hci level and thus not available at higher layers. Maybe I'm missing something here? > The Magic Mouse then needs an initialization command to be sent via the > standard HID protocol "SET_REPORT(FEATURE, 0xd7) = 0x01" once connected to > enable the special extra functionality that it provides. Also I noticed that the reports sent by the magic mouse are not reported in their hid descriptor. I get the following reports there (see attachment) 09 02 (LOCAL) USAGE Mouse (CA=Application Collection) 85 10 (GLOBAL) REPORT_ID 0x10 (16) 09 20 (LOCAL) USAGE Battery Strength 85 47 (GLOBAL) REPORT_ID 0x47 (71) 'G' 09 55 (LOCAL) USAGE 0xFF020055 85 55 (GLOBAL) REPORT_ID 0x55 (85) 'U' But when enabling the magic mouse modes as seen above, I see reports: HID Interrupt: A1 60 01 HID Interrupt: A1 61 01 Which is 0x60 and 0x61, corresponding with mouse surface lift and drop. When touching the trackpad area on the mouse, I get HID Interrupt: A1 29 00 00 80 D0 6B 9F E3 11 4D 16 83 80 32 which is report 0x29 and corresponds to the magic trackpad messages handled in the NetBSD [1] and Linux driver [2]. Problem is, that the bthidd code does not handle reports not announced in hid descriptors at all. So I would need to either manually inject the report id in hid_device->desc and add handler code, handle magic mouse in a completely different code path, or write my own driver. Maybe Maksim has some ideas, the daemon is his code, after all. Regards, erdgeist [1] http://cvsweb.netbsd.org/bsdweb.cgi/src/sys/dev/bluetooth/btmagic.c?rev=1.14&content-type=text/x-cvsweb-markup [2] http://lxr.free-electrons.com/source/drivers/hid/hid-magicmouse.c --------------000402030101070808000407 Content-Type: text/plain; charset=UTF-8; name="magic-mouse.txt" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="magic-mouse.txt" Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBEZWNvZGVkIEFwcGxpY2F0aW9uIENv bGxlY3Rpb24KLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKLyoKMDUgMDEgICAgICAg IChHTE9CQUwpIFVTQUdFX1BBR0UgICAgICAgICAweDAwMDEgR2VuZXJpYyBEZXNrdG9wIFBh Z2UKMDkgMDIgICAgICAgIChMT0NBTCkgIFVTQUdFICAgICAgICAgICAgICAweDAwMDEwMDAy IE1vdXNlIChDQT1BcHBsaWNhdGlvbiBDb2xsZWN0aW9uKQpBMSAwMSAgICAgICAgKE1BSU4p ICAgQ09MTEVDVElPTiAgICAgICAgIDB4MDEgQXBwbGljYXRpb24gKFVzYWdlPTB4MDAwMTAw MDI6IFBhZ2U9R2VuZXJpYyBEZXNrdG9wIFBhZ2UsIFVzYWdlPU1vdXNlLCBUeXBlPUNBKQo4 NSAxMCAgICAgICAgICAoR0xPQkFMKSBSRVBPUlRfSUQgICAgICAgICAgMHgxMCAoMTYpCjA1 IDA5ICAgICAgICAgIChHTE9CQUwpIFVTQUdFX1BBR0UgICAgICAgICAweDAwMDkgQnV0dG9u IFBhZ2UKMTkgMDEgICAgICAgICAgKExPQ0FMKSAgVVNBR0VfTUlOSU1VTSAgICAgIDB4MDAw OTAwMDEgQnV0dG9uIDEgUHJpbWFyeS90cmlnZ2VyIChNVUxUST1TZWxlY3RvciwgT24vT2Zm LCBNb21lbnRhcnksIG9yIE9uZSBTaG90KQoyOSAwMiAgICAgICAgICAoTE9DQUwpICBVU0FH RV9NQVhJTVVNICAgICAgMHgwMDA5MDAwMiBCdXR0b24gMiBTZWNvbmRhcnkgKE1VTFRJPVNl bGVjdG9yLCBPbi9PZmYsIE1vbWVudGFyeSwgb3IgT25lIFNob3QpCjE1IDAwICAgICAgICAg IChHTE9CQUwpIExPR0lDQUxfTUlOSU1VTSAgICAweDAwICgwKSA8LS0gUmVkdW5kYW50OiBM T0dJQ0FMX01JTklNVU0gaXMgYWxyZWFkeSAwCjI1IDAxICAgICAgICAgIChHTE9CQUwpIExP R0lDQUxfTUFYSU1VTSAgICAweDAxICgxKQo5NSAwMiAgICAgICAgICAoR0xPQkFMKSBSRVBP UlRfQ09VTlQgICAgICAgMHgwMiAoMikgTnVtYmVyIG9mIGZpZWxkcwo3NSAwMSAgICAgICAg ICAoR0xPQkFMKSBSRVBPUlRfU0laRSAgICAgICAgMHgwMSAoMSkgTnVtYmVyIG9mIGJpdHMg cGVyIGZpZWxkCjgxIDAyICAgICAgICAgIChNQUlOKSAgIElOUFVUICAgICAgICAgICAgICAw eDAwMDAwMDAyICgyIGZpZWxkcyB4IDEgYml0KSAwPURhdGEgMT1WYXJpYWJsZSAwPUFic29s dXRlIDA9Tm9XcmFwIDA9TGluZWFyIDA9UHJlZlN0YXRlIDA9Tm9OdWxsIDA9Tm9uVm9sYXRp bGUgMD1CaXRtYXAKOTUgMDEgICAgICAgICAgKEdMT0JBTCkgUkVQT1JUX0NPVU5UICAgICAg IDB4MDEgKDEpIE51bWJlciBvZiBmaWVsZHMKNzUgMDYgICAgICAgICAgKEdMT0JBTCkgUkVQ T1JUX1NJWkUgICAgICAgIDB4MDYgKDYpIE51bWJlciBvZiBiaXRzIHBlciBmaWVsZAo4MSAw MyAgICAgICAgICAoTUFJTikgICBJTlBVVCAgICAgICAgICAgICAgMHgwMDAwMDAwMyAoMSBm aWVsZCB4IDYgYml0cykgMT1Db25zdGFudCAxPVZhcmlhYmxlIDA9QWJzb2x1dGUgMD1Ob1dy YXAgMD1MaW5lYXIgMD1QcmVmU3RhdGUgMD1Ob051bGwgMD1Ob25Wb2xhdGlsZSAwPUJpdG1h cAowNSAwMSAgICAgICAgICAoR0xPQkFMKSBVU0FHRV9QQUdFICAgICAgICAgMHgwMDAxIEdl bmVyaWMgRGVza3RvcCBQYWdlCjA5IDAxICAgICAgICAgIChMT0NBTCkgIFVTQUdFICAgICAg ICAgICAgICAweDAwMDEwMDAxIFBvaW50ZXIgKENQPVBoeXNpY2FsIENvbGxlY3Rpb24pCkEx IDAwICAgICAgICAgIChNQUlOKSAgIENPTExFQ1RJT04gICAgICAgICAweDAwIFBoeXNpY2Fs IChVc2FnZT0weDAwMDEwMDAxOiBQYWdlPUdlbmVyaWMgRGVza3RvcCBQYWdlLCBVc2FnZT1Q b2ludGVyLCBUeXBlPUNQKQoxNiAwMUZFICAgICAgICAgIChHTE9CQUwpIExPR0lDQUxfTUlO SU1VTSAgICAweEZFMDEgKC01MTEpCjI2IEZGMDEgICAgICAgICAgKEdMT0JBTCkgTE9HSUNB TF9NQVhJTVVNICAgIDB4MDFGRiAoNTExKQozNiBDMEZFICAgICAgICAgIChHTE9CQUwpIFBI WVNJQ0FMX01JTklNVU0gICAweEZFQzAgKC0zMjApCjQ2IDQwMDEgICAgICAgICAgKEdMT0JB TCkgUEhZU0lDQUxfTUFYSU1VTSAgIDB4MDE0MCAoMzIwKQo2NSAxMyAgICAgICAgICAgIChH TE9CQUwpIFVOSVQgICAgICAgICAgICAgICAweDAwMDAwMDEzIERpc3RhbmNlIGluIGluY2hl cyBbMSBpbmNoIHVuaXRzXSAoMz1TeXN0ZW09RW5nbGlzaCBMaW5lYXIsIDE9TGVuZ3RoPUlu Y2gpCjU1IDBEICAgICAgICAgICAgKEdMT0JBTCkgVU5JVF9FWFBPTkVOVCAgICAgIDB4MEQg KFVuaXQgVmFsdWUgeCAxMOKBu8KzKQowOSAzMCAgICAgICAgICAgIChMT0NBTCkgIFVTQUdF ICAgICAgICAgICAgICAweDAwMDEwMDMwIFggKERWPUR5bmFtaWMgVmFsdWUpCjA5IDMxICAg ICAgICAgICAgKExPQ0FMKSAgVVNBR0UgICAgICAgICAgICAgIDB4MDAwMTAwMzEgWSAoRFY9 RHluYW1pYyBWYWx1ZSkKNzUgMTAgICAgICAgICAgICAoR0xPQkFMKSBSRVBPUlRfU0laRSAg ICAgICAgMHgxMCAoMTYpIE51bWJlciBvZiBiaXRzIHBlciBmaWVsZAo5NSAwMiAgICAgICAg ICAgIChHTE9CQUwpIFJFUE9SVF9DT1VOVCAgICAgICAweDAyICgyKSBOdW1iZXIgb2YgZmll bGRzCjgxIDA2ICAgICAgICAgICAgKE1BSU4pICAgSU5QVVQgICAgICAgICAgICAgIDB4MDAw MDAwMDYgKDIgZmllbGRzIHggMTYgYml0cykgMD1EYXRhIDE9VmFyaWFibGUgMT1SZWxhdGl2 ZSAwPU5vV3JhcCAwPUxpbmVhciAwPVByZWZTdGF0ZSAwPU5vTnVsbCAwPU5vblZvbGF0aWxl IDA9Qml0bWFwCkMwICAgICAgICAgICAgIChNQUlOKSAgIEVORF9DT0xMRUNUSU9OICAgICBQ aHlzaWNhbAowNSAwNiAgICAgICAgICAoR0xPQkFMKSBVU0FHRV9QQUdFICAgICAgICAgMHgw MDA2IEdlbmVyaWMgRGV2aWNlIENvbnRyb2xzIFBhZ2UKMDkgMjAgICAgICAgICAgKExPQ0FM KSAgVVNBR0UgICAgICAgICAgICAgIDB4MDAwNjAwMjAgQmF0dGVyeSBTdHJlbmd0aCAoRFY9 RHluYW1pYyBWYWx1ZSkKODUgNDcgICAgICAgICAgKEdMT0JBTCkgUkVQT1JUX0lEICAgICAg ICAgIDB4NDcgKDcxKSAnRycKMTUgMDAgICAgICAgICAgKEdMT0JBTCkgTE9HSUNBTF9NSU5J TVVNICAgIDB4MDAgKDApCjI1IDY0ICAgICAgICAgIChHTE9CQUwpIExPR0lDQUxfTUFYSU1V TSAgICAweDY0ICgxMDApCjc1IDA4ICAgICAgICAgIChHTE9CQUwpIFJFUE9SVF9TSVpFICAg ICAgICAweDA4ICg4KSBOdW1iZXIgb2YgYml0cyBwZXIgZmllbGQKOTUgMDEgICAgICAgICAg KEdMT0JBTCkgUkVQT1JUX0NPVU5UICAgICAgIDB4MDEgKDEpIE51bWJlciBvZiBmaWVsZHMK QjEgQTIgICAgICAgICAgKE1BSU4pICAgRkVBVFVSRSAgICAgICAgICAgIDB4MDAwMDAwQTIg KDEgZmllbGQgeCA4IGJpdHMpIDA9RGF0YSAxPVZhcmlhYmxlIDA9QWJzb2x1dGUgMD1Ob1dy YXAgMD1MaW5lYXIgMT1Ob1ByZWZTdGF0ZSAwPU5vTnVsbCAxPVZvbGF0aWxlIDA9Qml0bWFw CjA2IDAyRkYgICAgICAgIChHTE9CQUwpIFVTQUdFX1BBR0UgICAgICAgICAweEZGMDIgVmVu ZG9yLWRlZmluZWQKMDkgNTUgICAgICAgICAgKExPQ0FMKSAgVVNBR0UgICAgICAgICAgICAg IDB4RkYwMjAwNTUKODUgNTUgICAgICAgICAgKEdMT0JBTCkgUkVQT1JUX0lEICAgICAgICAg IDB4NTUgKDg1KSAnVScKMTUgMDAgICAgICAgICAgKEdMT0JBTCkgTE9HSUNBTF9NSU5JTVVN ICAgIDB4MDAgKDApIDwtLSBSZWR1bmRhbnQ6IExPR0lDQUxfTUlOSU1VTSBpcyBhbHJlYWR5 IDAKMjYgRkYwMCAgICAgICAgKEdMT0JBTCkgTE9HSUNBTF9NQVhJTVVNICAgIDB4MDBGRiAo MjU1KQo3NSAwOCAgICAgICAgICAoR0xPQkFMKSBSRVBPUlRfU0laRSAgICAgICAgMHgwOCAo OCkgTnVtYmVyIG9mIGJpdHMgcGVyIGZpZWxkIDwtLSBSZWR1bmRhbnQ6IFJFUE9SVF9TSVpF IGlzIGFscmVhZHkgOAo5NSA0MCAgICAgICAgICAoR0xPQkFMKSBSRVBPUlRfQ09VTlQgICAg ICAgMHg0MCAoNjQpIE51bWJlciBvZiBmaWVsZHMKQjEgQTIgICAgICAgICAgKE1BSU4pICAg RkVBVFVSRSAgICAgICAgICAgIDB4MDAwMDAwQTIgKDY0IGZpZWxkcyB4IDggYml0cykgMD1E YXRhIDE9VmFyaWFibGUgMD1BYnNvbHV0ZSAwPU5vV3JhcCAwPUxpbmVhciAxPU5vUHJlZlN0 YXRlIDA9Tm9OdWxsIDE9Vm9sYXRpbGUgMD1CaXRtYXAKQzAgICAgICAgICAgIChNQUlOKSAg IEVORF9DT0xMRUNUSU9OICAgICBBcHBsaWNhdGlvbgoqLwoKCg== --------------000402030101070808000407--