avdtp_server struct doesn't make sense to exist since there exist an
equivalent in the form of a2dp_server which can be used as context for
incoming connections.
'AVC Panel Subunit Specification' mandates that:
To help the target to decide whether a pressed button is hold
or not, it is recommended that the controller have capability
of issuing a “release” command within 300 ms, after it receives
a response to the last “press” command. The target should not
judge the user operation to be “press and hold” within this
300ms.". The kernel's default timeout is currently set to 250ms
with 33ms between repeats which means it will issue one repeat
key before 300ms window elapses.
Currently code would always release any key pressed upon any event
which breaks press and hold, this fix it by only releasing once a
different key is pressed.
When device name is read its length is of type uint16_t, change the type
of length parameter of name2utf8() to uint16_t to avoid unnecessary
truncation.
If value of device name characteristic does not contain valid UTF-8
characters, make sure the name is null terminated before converting
non-ascii characters to spaces.
ATT MTU exchange and handling of indications from the "Service Changed"
characteristic are now handled by shared/gatt-client, so this profile
should only deal with the GAP service.
session will be NULL if A2DP connection fails because of NO REPLY
from endpoint or if the configuration is aborted. Accessing session
device in such a scenario leads to bluetoothd crash.
(gdb) bt full
0 avdtp_get_device (session=0x0) at profiles/audio/avdtp.c:3987
No locals.
1 0xb6f0e352 in auto_config (data=<value optimized out>)
at profiles/audio/a2dp.c:382
setup = 0xb7a4f230
dev = <value optimized out>
2 0xb6f132f6 in config_cb (endpoint=<value optimized out>,
ret=<value optimized out>, size=<value optimized out>,
user_data=<value optimized out>) at profiles/audio/media.c:534
data = <value optimized out>
3 0xb6f1398a in media_endpoint_cancel (endpoint=0xb7a43e78)
at profiles/audio/media.c:136
endpoint = 0xb7a43e78
4 media_endpoint_cancel_all (endpoint=0xb7a43e78)
at profiles/audio/media.c:144
No locals.
5 0xb6f13e04 in clear_endpoint (endpoint=0xb7a43e78)
at profiles/audio/media.c:245
No locals.
6 0xb6f13f68 in endpoint_reply (call=<value optimized out>,
user_data=0xb7a4e538) at profiles/audio/media.c:275
request = 0xb7a4e538
endpoint = 0xb7a43e78
reply = 0xb7a3f560
err = {name = 0xb7a5de70 "org.freedesktop.DBus.Error.NoReply"
When UHID_SET_REPORT is received, hog has to send the given value
of the report to the device and send back the error code to the caller.
This function has to be synchronous, so the answer is sent in
set_report_cb().
(David: Track reports and cancel them on timeouts. Also fix some
"get"->"set" typos.)
When UHID_GET_REPORT is received, hog has to update the current value
of the report and send it back to the caller.
This function should be synchronous, so the answer is sent in
get_report_cb().
(David: Track reports and cancel them on uhid timeouts. Otherwise, we'd
incorrectly match reponses. Also fix "feature"->"get" typos and
handle reports without IDs)
HoG currently only implements UHID_OUTPUT. We need to also implement
UHID_GET_REPORT and UHID_SET_REPORT. Break out the report retrieval
to use this function in the two missing implementation.
Some bluetooth headset (BOSE) initates the avdtp connection immediately
after HFP connection is completed, so if application initates a2dp
connection and since already avdtp connection is ongoing should return
error EBUSY.