Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 14 Sep 2015 02:03:36 +0200
From:      Dirk Engling <erdgeist@erdgeist.org>
To:        Maksim Yevmenkin <maksim.yevmenkin@gmail.com>
Cc:        "freebsd-bluetooth@freebsd.org" <freebsd-bluetooth@freebsd.org>
Subject:   Re: Apple Magic Mouse
Message-ID:  <55F60ED8.8080203@erdgeist.org>
In-Reply-To: <CAFPOs6p%2BEZDctPodY6DBbnhfZQFz%2Bo0uKSRvvqQBcM1QL3ACXw@mail.gmail.com>
References:  <1437909200.57929.3.camel@yandex.com> <alpine.NEB.2.11.1508092034290.5638@galant.ogmig.net> <55F4362A.4050203@erdgeist.org> <CAFPOs6p%2BEZDctPodY6DBbnhfZQFz%2Bo0uKSRvvqQBcM1QL3ACXw@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format.
--------------060602030404060108060001
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit

On 12.09.15 19:53, Maksim Yevmenkin wrote:

> i think it should be possible to teach bthidd to make another sdp
> request to pull device id sdp record (if available). if apple mouse
> answers it then it should very easy to identify it and enable all the
> features.

Apples magic mouse indeed answers the SDP request for its Device ID
Service Record.

Find attached a first patch that adds a vendor, product and version
member in the bthid_session object that is filled after both connections
for the session were attached.

This is done in a new function session_get_devid that issues and handles
the SDP requests.

There's also a new hid_initialise function, that gets a chance to take a
look at those new members and initialise devices based on those information.

Caveats:

Only the first DevIDService record is parsed without regard for the
PrimaryRecord flag. This is not necessarily correct for devices that
expose multiple services. For most HID it still should be good enough
and checking for multiple records and writing code to handle devices
with no PrimaryRecord is way too complex for what we want to achieve.

The libsdp actually issues a blocking write and, worse: a blocking read
on the bluetooth connection, potentially blocking the whole bthidd until
the read times out. However, since this happens after both channels were
successfully established, chances are pretty good that the device will
not die just when we send the request.

Depending on lingual preferences, you might want to rename initialise to
initialize.

Comments on the patch are appreciated.

I will now go on and blatantly rip off Iain Hibberts code from the
NetBSD driver to make use of what the mouse sends me.

Regards,

  erdgeist

--------------060602030404060108060001
Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0";
 name="bthidd.sdp.patch"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="bthidd.sdp.patch"

ZGlmZiAtdXIgYnRoaWRkL01ha2VmaWxlIC91c3Ivc3JjL3Vzci5zYmluL2JsdWV0b290aC9i
dGhpZGQvTWFrZWZpbGUKLS0tIGJ0aGlkZC9NYWtlZmlsZQkyMDE1LTA4LTEyIDE2OjIxOjM2
LjAwMDAwMDAwMCArMDIwMAorKysgL3Vzci9zcmMvdXNyLnNiaW4vYmx1ZXRvb3RoL2J0aGlk
ZC9NYWtlZmlsZQkyMDE1LTA5LTE0IDAxOjIzOjU4Ljc0NTg0MjMxNyArMDIwMApAQCAtMTEs
NyArMTEsNyBAQAogREVCVUdfRkxBR1M9CS1nCiAKIERQQUREPSAgICAgICAgICAke0xJQkJM
VUVUT09USH0gJHtMSUJVU0JISUR9Ci1MREFERD0JCS1sYmx1ZXRvb3RoIC1sdXNiaGlkCitM
REFERD0JCS1sYmx1ZXRvb3RoIC1sdXNiaGlkIC1sc2RwCiAKIE5PX1dNSVNTSU5HX1ZBUklB
QkxFX0RFQ0xBUkFUSU9OUz0KIApkaWZmIC11ciBidGhpZGQvYnRoaWRkLmggL3Vzci9zcmMv
dXNyLnNiaW4vYmx1ZXRvb3RoL2J0aGlkZC9idGhpZGQuaAotLS0gYnRoaWRkL2J0aGlkZC5o
CTIwMTUtMDgtMTIgMTY6MjE6MzYuMDAwMDAwMDAwICswMjAwCisrKyAvdXNyL3NyYy91c3Iu
c2Jpbi9ibHVldG9vdGgvYnRoaWRkL2J0aGlkZC5oCTIwMTUtMDktMTQgMDE6MjA6NDkuODYz
ODgwODg3ICswMjAwCkBAIC02MSw2ICs2MSw5IEBACiAJaW50MzJfdAkJCQkgaW50cjsJLyog
aW50ZXJydXB0IGNoYW5uZWwgKi8KIAlpbnQzMl90CQkJCSB2a2JkOwkvKiB2aXJ1YWwga2V5
Ym9hcmQgKi8KIAliZGFkZHJfdAkJCSBiZGFkZHI7LyogcmVtb3RlIGJkYWRkciAqLworCXVp
bnQxNl90CQkJIHZlbmRvcjsvKiByZW1vdGUgdmVuZG9yIGlkICovCisJdWludDE2X3QJCQkg
cHJvZHVjdDsvKnJlbW90ZSBwcm9kdWN0IGlkICovCisJdWludDE2X3QJCQkgdmVyc2lvbjsv
KnJlbW90ZSB2ZXJzaW9uIGlkICovCiAJdWludDE2X3QJCQkgc3RhdGU7CS8qIHNlc3Npb24g
c3RhdGUgKi8KICNkZWZpbmUgQ0xPU0VECTAKICNkZWZpbmUJVzRDVFJMCTEKQEAgLTg0LDgg
Kzg3LDEwIEBACiBidGhpZF9zZXNzaW9uX3AJc2Vzc2lvbl9vcGVuICAgICAoYnRoaWRfc2Vy
dmVyX3Agc3J2LCBoaWRfZGV2aWNlX3AgY29uc3QgZCk7CiBidGhpZF9zZXNzaW9uX3AJc2Vz
c2lvbl9ieV9iZGFkZHIoYnRoaWRfc2VydmVyX3Agc3J2LCBiZGFkZHJfcCBiZGFkZHIpOwog
YnRoaWRfc2Vzc2lvbl9wCXNlc3Npb25fYnlfZmQgICAgKGJ0aGlkX3NlcnZlcl9wIHNydiwg
aW50MzJfdCBmZCk7Cit2b2lkIAkJc2Vzc2lvbl9nZXRfZGV2aWQoYnRoaWRfc2Vzc2lvbl9w
IHMpOwogdm9pZAkJc2Vzc2lvbl9jbG9zZSAgICAoYnRoaWRfc2Vzc2lvbl9wIHMpOwogCit2
b2lkCQloaWRfaW5pdGlhbGlzZQkgKGJ0aGlkX3Nlc3Npb25fcCBzKTsKIGludDMyX3QJCWhp
ZF9jb250cm9sICAgICAgKGJ0aGlkX3Nlc3Npb25fcCBzLCB1aW50OF90ICpkYXRhLCBpbnQz
Ml90IGxlbik7CiBpbnQzMl90CQloaWRfaW50ZXJydXB0ICAgIChidGhpZF9zZXNzaW9uX3Ag
cywgdWludDhfdCAqZGF0YSwgaW50MzJfdCBsZW4pOwogCmRpZmYgLXVyIGJ0aGlkZC9oaWQu
YyAvdXNyL3NyYy91c3Iuc2Jpbi9ibHVldG9vdGgvYnRoaWRkL2hpZC5jCi0tLSBidGhpZGQv
aGlkLmMJMjAxNS0wOC0xMiAxNjoyMTozNi4wMDAwMDAwMDAgKzAyMDAKKysrIC91c3Ivc3Jj
L3Vzci5zYmluL2JsdWV0b290aC9idGhpZGQvaGlkLmMJMjAxNS0wOS0xNCAwMTo0Mzo0OC42
NDQ3NTQ2NzggKzAyMDAKQEAgLTQ5LDYgKzQ5LDE5IEBACiAjaW5jbHVkZSAia2JkLmgiCiAK
IC8qCisgKiBQcm9iZSBmb3IgcGVyLWRldmljZSBpbml0aWFsaXNhdGlvbgorICovCit2b2lk
CitoaWRfaW5pdGlhbGlzZShidGhpZF9zZXNzaW9uX3AgcykKK3sKKwkvKiBNYWdpYyByZXBv
cnQgdG8gZW5hYmxlIHRyYWNrcGFkIG9uIEFwcGxlJ3MgTWFnaWMgTW91c2UKKwlzdGF0aWMg
dWludDhfdCByZXBbXSA9IHsgMHg1MywgMHhkNywgMHgwMSB9OworCWlmKHMtPnZlbmRvciAg
PT0gMHg1YWMgJiYgcy0+cHJvZHVjdCA9PSAweDMwZCApCisJCXdyaXRlKHMtPmN0cmwsIHJl
cCwgMyApOworCSovCit9CisKKy8qCiAgKiBQcm9jZXNzIGRhdGEgZnJvbSBjb250cm9sIGNo
YW5uZWwKICAqLwogCmRpZmYgLXVyIGJ0aGlkZC9zZXJ2ZXIuYyAvdXNyL3NyYy91c3Iuc2Jp
bi9ibHVldG9vdGgvYnRoaWRkL3NlcnZlci5jCi0tLSBidGhpZGQvc2VydmVyLmMJMjAxNS0w
OC0xMiAxNjoyMTozNi4wMDAwMDAwMDAgKzAyMDAKKysrIC91c3Ivc3JjL3Vzci5zYmluL2Js
dWV0b290aC9idGhpZGQvc2VydmVyLmMJMjAxNS0wOS0xNCAwMTo0NDoxMi44NDM3NjUwNDkg
KzAyMDAKQEAgLTI4Niw2ICsyODYsMTIgQEAKIAkJCXNydi0+bWF4ZmQgPSBzLT52a2JkOwog
CX0KIAorCS8qIEdldCBWZW5kb3JJRCBhbmQgUHJvZHVjdElEIGFmdGVyIGJvdGggY2hhbm5l
bHMgYXJlIGVzdGFibGlzaGVkICovCisJaWYgKHMtPnN0YXRlID09IE9QRU4pIHsKKwkJc2Vz
c2lvbl9nZXRfZGV2aWQocyk7CisJCWhpZF9pbml0aWFsaXNlKHMpOworCX0KKwogCXJldHVy
biAoMCk7CiB9CiAKZGlmZiAtdXIgYnRoaWRkL3Nlc3Npb24uYyAvdXNyL3NyYy91c3Iuc2Jp
bi9ibHVldG9vdGgvYnRoaWRkL3Nlc3Npb24uYwotLS0gYnRoaWRkL3Nlc3Npb24uYwkyMDE1
LTA4LTEyIDE2OjIxOjM2LjAwMDAwMDAwMCArMDIwMAorKysgL3Vzci9zcmMvdXNyLnNiaW4v
Ymx1ZXRvb3RoL2J0aGlkZC9zZXNzaW9uLmMJMjAxNS0wOS0xNCAwMTo1MDoxOS44NjI3MjY0
MTggKzAyMDAKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDxibHVldG9vdGguaD4KICNp
bmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c2RwLmg+
CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxz
dHJpbmcuaD4KQEAgLTYxLDcgKzYyLDcgQEAKIAlpZiAoKHMgPSAoYnRoaWRfc2Vzc2lvbl9w
KSBtYWxsb2Moc2l6ZW9mKCpzKSkpID09IE5VTEwpCiAJCXJldHVybiAoTlVMTCk7CiAKLQlz
LT5zcnYgPSBzcnY7ICAKKwlzLT5zcnYgPSBzcnY7CiAJbWVtY3B5KCZzLT5iZGFkZHIsICZk
LT5iZGFkZHIsIHNpemVvZihzLT5iZGFkZHIpKTsKIAlzLT5jdHJsID0gLTE7CiAJcy0+aW50
ciA9IC0xOwpAQCAtODAsNiArODEsNyBAQAogCQlzLT52a2JkID0gLTE7CiAKIAlzLT5zdGF0
ZSA9IENMT1NFRDsKKwlzLT52ZW5kb3IgPSBzLT5wcm9kdWN0ID0gcy0+dmVyc2lvbiA9IDA7
CiAKIAlzLT5rZXlzMSA9IGJpdF9hbGxvYyhrYmRfbWF4a2V5KCkpOwogCWlmIChzLT5rZXlz
MSA9PSBOVUxMKSB7CkBAIC0xMzgsNiArMTQwLDg5IEBACiB9CiAKIC8qCisgKiBHZXQgRGV2
aWNlIElEIFNlcnZpY2UgUmVjb3JkIGZvciBzZXNzaW9uCisKKyAgIEhhcmQgY29kZWQgYXR0
aWJ1dGUgSURzIHRha2VuIGZyb20gdGhlCisgICBERVZJQ0UgSURFTlRJRklDQVRJT04gUFJP
RklMRSBTUEVDSUZJQ0FUSU9OIFYxMyBwLjEyCisgKi8KKworI2RlZmluZSBTRFBfREVWSUNF
X0lEX1NFUlZJQ0VfQVRUUl9WRU5ET1JJRCAgMHgwMjAxCisjZGVmaW5lIFNEUF9ERVZJQ0Vf
SURfU0VSVklDRV9BVFRSX1BST0RVQ1RJRCAweDAyMDIKKyNkZWZpbmUgU0RQX0RFVklDRV9J
RF9TRVJWSUNFX0FUVFJfVkVSU0lPTiAgIDB4MDIwMworI2RlZmluZSBTRFBfREVWSUNFX0lE
X1JBTkdFIFNEUF9BVFRSX1JBTkdFKCBcCisgU0RQX0RFVklDRV9JRF9TRVJWSUNFX0FUVFJf
VkVORE9SSUQsIFNEUF9ERVZJQ0VfSURfU0VSVklDRV9BVFRSX1ZFUlNJT04gKQorCit2b2lk
CitzZXNzaW9uX2dldF9kZXZpZChidGhpZF9zZXNzaW9uX3AgcykKK3sKKwlzZHBfYXR0cl90
IHZhbFszXTsKKwl1aW50OF90IGJ1ZlsxNl07CisJdWludDE2X3QgZGV2aWRfc2VydnJlY191
dWlkID0gU0RQX1NFUlZJQ0VfQ0xBU1NfUE5QX0lORk9STUFUSU9OOworCXVpbnQzMl90IGRl
dmlkX3NlcnZyZWNfYXR0cl9yYW5nZSA9IFNEUF9ERVZJQ0VfSURfUkFOR0U7CisJdWludDMy
X3QgdHlwZTsKKwl2b2lkICp4czsKKwl1aW50OF90ICp2OworCWludCBpOworCisJYXNzZXJ0
KHMgIT0gTlVMTCk7CisJYXNzZXJ0KHMtPnN0YXRlID09IE9QRU4pOworCisJeHMgPSBzZHBf
b3BlbihOR19IQ0lfQkRBRERSX0FOWSwgJnMtPmJkYWRkcik7CisJaWYgKCF4cykKKwkJcmV0
dXJuOworCisJLyogSW5pdGlhbGlzZSByZXR1cm4gYXJyYXkgKi8KKwlmb3IgKGk9MDsgaTwz
OyArK2kpIHsKKwkJdmFsW2ldLmZsYWdzID0gU0RQX0FUVFJfSU5WQUxJRDsKKwkJdmFsW2ld
LmF0dHIgID0gMDsKKwkJdmFsW2ldLnZhbHVlID0gYnVmICsgaSo0OworCQl2YWxbaV0udmxl
biAgPSA0OyAvKiBNYXggc2l6ZSBzaG91bGQgYmUgMyAqLworCX0KKworCS8qIEdldHRpbmcg
b25seSB0aGUgZmlyc3Qgc2V0IG9mIGF0dHJpYnV0ZXMsIGFzc3VtaW5nIHRoZQorCSAgIHBy
aW1hcnkgcmVjb3JkIHRvIGNvbWUgZmlyc3QuIFRPRE8uICovCisJaWYgKHNkcF9zZWFyY2go
eHMsIDEsICZkZXZpZF9zZXJ2cmVjX3V1aWQsCisJCQkgICAxLCAmZGV2aWRfc2VydnJlY19h
dHRyX3JhbmdlLAorCQkJICAgMywgdmFsKSAhPSAwICkgeworCQlzZHBfY2xvc2UoeHMpOwor
CQlyZXR1cm47CisJfQorCisKKwkvKiBJZiBzZWFyY2ggaXMgc3VjY2Vzc2Z1bCwgc2NhbiB0
aHJvdWdoIHJldHVybiB2YWxzICovCisJZm9yIChpPTA7IGk8MzsgKytpKSB7CisJCWlmICh2
YWxbaV0uZmxhZ3MgPT0gU0RQX0FUVFJfSU5WQUxJRCApCisJCQljb250aW51ZTsKKworCQkv
KiBFeHBlY3RpbmcgdGFnICsgdWludDE2X3Qgb24gYWxsIDMgYXR0cmlidXRlcyAqLworCQlp
ZiAodmFsW2ldLnZsZW4gIT0gMykKKwkJCWNvbnRpbnVlOworCisJCS8qIE1ha2Ugc3VyZSwg
d2UncmUgcmVhZGluZyBhIHVpbnQxNl90ICovCisJCXYgPSB2YWxbaV0udmFsdWU7CisJCVNE
UF9HRVQ4KHR5cGUsIHYpOworCQlpZiAodHlwZSAhPSBTRFBfREFUQV9VSU5UMTYgKQorCQkJ
Y29udGludWU7CisKKwkJc3dpdGNoICh2YWxbaV0uYXR0cikgeworCQkJY2FzZSBTRFBfREVW
SUNFX0lEX1NFUlZJQ0VfQVRUUl9WRU5ET1JJRDoKKwkJCQlTRFBfR0VUMTYocy0+dmVuZG9y
LCB2KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgU0RQX0RFVklDRV9JRF9TRVJWSUNFX0FUVFJf
UFJPRFVDVElEOgorCQkJCVNEUF9HRVQxNihzLT5wcm9kdWN0LCB2KTsKKwkJCQlicmVhazsK
KwkJCWNhc2UgU0RQX0RFVklDRV9JRF9TRVJWSUNFX0FUVFJfVkVSU0lPTjoKKwkJCQlTRFBf
R0VUMTYocy0+dmVyc2lvbiwgdik7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWJy
ZWFrOworCQl9CisJfQorCisJc2RwX2Nsb3NlKHhzKTsKK30KKworLyoKICAqIENsb3NlIHNl
c3Npb24KICAqLwogCg==
--------------060602030404060108060001--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?55F60ED8.8080203>