Commit Graph

8738 Commits

Author SHA1 Message Date
Lucas De Marchi
a5924f6600 avrcp: handle GetElementAttributes pdu
Example responses for PTS test TC_TG_MDI_BV_04_C:

> ACL data: handle 11 flags 0x02 dlen 26
    L2CAP(d): cid 0x0042 len 22 [psm 23]
      AVCTP: Command : pt 0x00 transaction 2 pid 0x110e
        AV/C: Status: address 0x48 opcode 0x00
          Subunit: Panel
          Opcode: Vendor Dependent
          Company ID: 0x001958
          AVRCP: GetElementAttributes: pt 0x00 len 0x0009
            Identifier: 0x0 (PLAYING)
            AttributeCount: 0x00
< ACL data: handle 11 flags 0x02 dlen 70
    L2CAP(d): cid 0x0042 len 66 [psm 23]
      AVCTP: Response : pt 0x00 transaction 2 pid 0x110e
        AV/C: Stable: address 0x48 opcode 0x00
          Subunit: Panel
          Opcode: Vendor Dependent
          Company ID: 0x001958
          AVRCP: GetElementAttributes: pt 0x00 len 0x0035
            AttributeCount: 0x03
            Attribute: 0x00000001 (Title)
            CharsetID: 0x006a (UTF-8)
            AttributeValueLength: 0x0012
            AttributeValue: Walking on the Sun
            Attribute: 0x00000002 (Artist)
            CharsetID: 0x006a (UTF-8)
            AttributeValueLength: 0x0005
            AttributeValue: Lucas
            Attribute: 0x00000007 (Progress)
            CharsetID: 0x006a (UTF-8)
            AttributeValueLength: 0x0005
            AttributeValue: 32029

And TC_TG_MDI_BV_05_C:

> ACL data: handle 11 flags 0x02 dlen 30
    L2CAP(d): cid 0x0043 len 26 [psm 23]
      AVCTP: Command : pt 0x00 transaction 2 pid 0x110e
        AV/C: Status: address 0x48 opcode 0x00
          Subunit: Panel
          Opcode: Vendor Dependent
          Company ID: 0x001958
          AVRCP: GetElementAttributes: pt 0x00 len 0x000d
            Identifier: 0x0 (PLAYING)
            AttributeCount: 0x01
            Attribute: 0x00000001 (Title)
< ACL data: handle 11 flags 0x02 dlen 44
    L2CAP(d): cid 0x0043 len 40 [psm 23]
      AVCTP: Response : pt 0x00 transaction 2 pid 0x110e
        AV/C: Stable: address 0x48 opcode 0x00
          Subunit: Panel
          Opcode: Vendor Dependent
          Company ID: 0x001958
          AVRCP: GetElementAttributes: pt 0x00 len 0x001b
            AttributeCount: 0x01
            Attribute: 0x00000001 (Title)
            CharsetID: 0x006a (UTF-8)
            AttributeValueLength: 0x0012
            AttributeValue: Walking on the Sun
2011-08-12 11:05:08 +03:00
Lucas De Marchi
e468f8f1e9 avrcp: handle query for supported events 2011-08-12 11:04:52 +03:00
Lucas De Marchi
6ae019ed13 avrcp: handle RegisterNotification pdu
Handle mandatory events according to AVRCP 1.3 spec.
2011-08-12 11:04:50 +03:00
Lucas De Marchi
177d7aea76 avrcp: handle GetPlayStatus pdu
Example response for PTS test TC_TG_MDI_BV_02_C:

> ACL data: handle 11 flags 0x02 dlen 17
    L2CAP(d): cid 0x0043 len 13 [psm 23]
      AVCTP: Command : pt 0x00 transaction 2 pid 0x110e
        AV/C: Status: address 0x48 opcode 0x00
          Subunit: Panel
          Opcode: Vendor Dependent
          Company ID: 0x001958
          AVRCP: GetPlayStatus: pt 0x00 len 0x0000
< ACL data: handle 11 flags 0x02 dlen 26
    L2CAP(d): cid 0x0043 len 22 [psm 23]
      AVCTP: Response : pt 0x00 transaction 2 pid 0x110e
        AV/C: Stable: address 0x48 opcode 0x00
          Subunit: Panel
          Opcode: Vendor Dependent
          Company ID: 0x001958
          AVRCP: GetPlayStatus: pt 0x00 len 0x0009
            SongLength: 0x0000a7f8 (43000 miliseconds)
            SongPosition: 0x00012fad (77741 miliconds)
            PlayStatus: 0x01 (PLAYING)
2011-08-12 11:04:49 +03:00
Lucas De Marchi
ea42bc7391 avrcp: handle InformBatteryStatusOfCT pdu 2011-08-12 11:04:47 +03:00
Lucas De Marchi
bb8e4d6a12 avrcp: handle InformDisplayableCharacterSet pdu 2011-08-12 11:04:45 +03:00
Lucas De Marchi
3e5bde2244 avrcp: handle commands for future extension
AVRCP_GET_PLAYER_ATTRIBUTE_TEXT and AVRCP_GET_PLAYER_VALUE_TEXT shall
only be used if TG has extended attributes.

For the ones defined in AVRCP spec these commands should not be called.
Since we do not have extended attributes yet we can ignore those
commands.
2011-08-12 11:04:43 +03:00
Lucas De Marchi
81b99b59ad avrcp: handle SetPlayerApplicationSettingValue pdu 2011-08-12 11:04:42 +03:00
Lucas De Marchi
908d91867b avrcp: handle GetCurrentPlayerAplicationSettingValue pdu
Example response for PTS test TC_TG_PAS_BV_10_C:

> ACL data: handle 11 flags 0x02 dlen 19
    L2CAP(d): cid 0x0043 len 15 [psm 23]
      AVCTP: Command : pt 0x00 transaction 3 pid 0x110e
        AV/C: Status: address 0x48 opcode 0x00
          Subunit: Panel
          Opcode: Vendor Dependent
          Company ID: 0x001958
          AVRCP: GetCurrentPlayerApplicationSettingValue: pt 0x00 len 0x0002
            AttributeCount: 0x01
            AttributeID: 0x01 (Equalizer ON/OFF Status)
< ACL data: handle 11 flags 0x02 dlen 20
    L2CAP(d): cid 0x0043 len 16 [psm 23]
      AVCTP: Response : pt 0x00 transaction 3 pid 0x110e
        AV/C: Stable: address 0x48 opcode 0x00
          Subunit: Panel
          Opcode: Vendor Dependent
          Company ID: 0x001958
          AVRCP: GetCurrentPlayerApplicationSettingValue: pt 0x00 len 0x0003
            ValueCount: 0x01
            AttributeID: 0x01 (Equalizer ON/OFF Status)
            ValueID: 0x02 (ON)
2011-08-12 11:04:40 +03:00
Lucas De Marchi
0834a161e6 avrcp: handle ListPlayerApplicationSettingValues pdu
Example of response obtained with PTS test TC_TG_PAS_BV_06_C:

> ACL data: handle 11 flags 0x02 dlen 18
    L2CAP(d): cid 0x0043 len 14 [psm 23]
      AVCTP: Command : pt 0x00 transaction 3 pid 0x110e
        AV/C: Status: address 0x48 opcode 0x00
          Subunit: Panel
          Opcode: Vendor Dependent
          Company ID: 0x001958
          AVRCP: ListPlayerApplicationSettingValues: pt 0x00 len 0x0001
            AttributeID: 0x01 (Equalizer ON/OFF Status)
< ACL data: handle 11 flags 0x02 dlen 20
    L2CAP(d): cid 0x0043 len 16 [psm 23]
      AVCTP: Response : pt 0x00 transaction 3 pid 0x110e
        AV/C: Stable: address 0x48 opcode 0x00
          Subunit: Panel
          Opcode: Vendor Dependent
          Company ID: 0x001958
          AVRCP: ListPlayerApplicationSettingValues: pt 0x00 len 0x0003
            ValueCount: 0x02
            ValueID: 0x01 (OFF)
            ValueID: 0x02 (ON)
2011-08-12 11:04:38 +03:00
Lucas De Marchi
0c6cadf915 avrcp: handle ListPlayerApplicationSettingAttributes pdu
Example of response obtained with PTS test TC_TG_PAS_BV_06_C:

> ACL data: handle 11 flags 0x02 dlen 17
    L2CAP(d): cid 0x0043 len 13 [psm 23]
      AVCTP: Command : pt 0x00 transaction 2 pid 0x110e
        AV/C: Status: address 0x48 opcode 0x00
          Subunit: Panel
          Opcode: Vendor Dependent
          Company ID: 0x001958
          AVRCP: ListPlayerApplicationSettingAttributes: pt 0x00 len 0x0000
< ACL data: handle 11 flags 0x02 dlen 20
    L2CAP(d): cid 0x0043 len 16 [psm 23]
      AVCTP: Response : pt 0x00 transaction 2 pid 0x110e
        AV/C: Stable: address 0x48 opcode 0x00
          Subunit: Panel
          Opcode: Vendor Dependent
          Company ID: 0x001958
          AVRCP: ListPlayerApplicationSettingAttributes: pt 0x00 len 0x0003
            AttributeCount: 0x02
            AttributeID: 0x01 (Equalizer ON/OFF Status)
            AttributeID: 0x04 (Scan ON/OFF Status)
2011-08-12 11:04:37 +03:00
Lucas De Marchi
f25568f3b6 avrcp: handle query for company ids
Example of response for PTS test TC_TG_CFG_BV_02_C:

> ACL data: handle 11 flags 0x02 dlen 18
    L2CAP(d): cid 0x0043 len 14 [psm 23]
      AVCTP: Command : pt 0x00 transaction 2 pid 0x110e
        AV/C: Status: address 0x48 opcode 0x00
          Subunit: Panel
          Opcode: Vendor Dependent
          Company ID: 0x001958
          AVRCP: GetCapabilities: pt 0x00 len 0x0001
            CapabilityID: 0x02 (CompanyID)
< ACL data: handle 11 flags 0x02 dlen 22
    L2CAP(d): cid 0x0043 len 18 [psm 23]
      AVCTP: Response : pt 0x00 transaction 2 pid 0x110e
        AV/C: Stable: address 0x48 opcode 0x00
          Subunit: Panel
          Opcode: Vendor Dependent
          Company ID: 0x001958
          AVRCP: GetCapabilities: pt 0x00 len 0x0005
            CapabilityID: 0x02 (CompanyID)
            CapabilityCount: 0x01
            CompanyID: 0x001958
2011-08-12 11:04:35 +03:00
Lucas De Marchi
65e27905fe avrcp: implement ChangeTrack() method
ChangeTrack() is used by applications to inform bluetoothd that current
track changed, passing also the metadata.
2011-08-12 11:04:33 +03:00
Lucas De Marchi
85206cbbde avrcp: implement ChangePlayback() method
ChangePlayback() is used by applications to inform bluetoothd of the
current status of playback.
2011-08-12 11:04:32 +03:00
Lucas De Marchi
b7dd3c8a8a avrcp: implement SetProperty() method of MediaPlayer
SetProperty() is used by an application to set player specific
settings.
2011-08-12 11:04:30 +03:00
Lucas De Marchi
8c8eaec49b avrcp: add skeleton of MediaPlayer interface 2011-08-12 11:04:29 +03:00
Lucas De Marchi
be70215da3 audio: move interface declarations to their headers 2011-08-12 11:04:27 +03:00
Syam Sidhardhan
6e863c7e83 Fix crash when disconnecting A2DP
When we disconnect an A2DP device by immediate power off and quickly
also initiate a disconnection from our side, a crash is occurring. This
is happening because of the disconnect_timeout coming after freeing the
session.
2011-08-12 10:57:36 +03:00
Claudio Takahasi
cf71a33981 Fix wrong alert value for ImmediateAlertLevel
GetProperties method is returning wrong value for ImmediateAlertLevel.
Bug introduced by ffd21d4027
2011-08-09 10:23:25 +03:00
Claudio Takahasi
8aeefd684c Write Immediate Alert if connected
When SetProperty for ImmediateAlertLevel is called, write operation to
update the characteristic in the Immediate Alert Service can be sent
if the connection is established.
2011-08-09 10:23:23 +03:00
Claudio Takahasi
9925efa4fe Set default value for ImmediateAlertLevel
Alert Level of the Immediate Alert service is write only. "none" can be
the default value since the alert/alarm is disabled at disconnection.
2011-08-09 10:23:21 +03:00
Claudio Takahasi
117ae0ffbd Reset the Immediate Alert at disconnection
Reporter will turn off the alert when the link is disconnected. At the
Proximity Monitor side, the Immediate Alert level should also follow
the same logic.
2011-08-09 10:23:19 +03:00
Claudio Takahasi
9f2c31aacf Reset Immediate Alert after 5 seconds
Add implementation specific timeout. Immediate Alert is set to "none"
after the timeout. Reporter can also implement a timeout for reseting
the alert level. Alert level is a write only and not notifiable
characteristic. In the timeout source, the Proximity Monitor writes
"none" in the Reporter and notifies the D-Bus clients that the alert
level has changed.
2011-08-09 10:23:17 +03:00
Claudio Takahasi
f43d9216d0 Request connection when writting Immediate alert
When Link and Path Loss are disabled, ATT connection callback will
be registered. Client using FindMe Profile needs to request ATT
connection before writting the Immediate Alert characteristic value.
2011-08-09 10:23:15 +03:00
Claudio Takahasi
b5a72304ac Write Immediate Alert after discovering handle
Write the Immediate Alert level characteristic if there is a pending
alert value to be written after discovering the characteristic handle.
2011-08-09 10:23:13 +03:00
Claudio Takahasi
3aa6ac9726 Emit PropertyChanged after writting alert
Wait sending write characteristic value for Immediate Alert before
sending a PropertyChanged signal in the Proximity Monitor. Applied
to FindMe Profile and Path Loss service when the threshold is reached.
2011-08-09 10:23:12 +03:00
Claudio Takahasi
9f0ecf1940 Write Immediate Alert if necessary
Immediate Alert value needs to be written when the connection is
established.
2011-08-09 10:23:10 +03:00
Claudio Takahasi
0dfc8a9a41 Add Immediate Alert handle discovery 2011-08-09 10:23:08 +03:00
Bruna Moreira
dc8ebb30a3 Add read remote Tx Power
Read the remote Tx Power when the connection is established.
2011-08-09 10:23:06 +03:00
Luiz Augusto von Dentz
bd3ca4fdf4 Fix possible invalid read/free on media.c
This also fix the circular dependency of media.c and a2dp.c

 Invalid read of size 8
    at 0x4EA8CC2: g_slice_free_chain_with_offset (in /lib64/libglib-2.0.so.0.2908.0)
    by 0x13AF33: path_free (media.c:417)
    by 0x11EB39: remove_interface (object.c:563)
    by 0x11F360: g_dbus_unregister_interface (object.c:715)
    by 0x120C49: media_server_remove (manager.c:1098)
    by 0x4EA9826: g_slist_foreach (in /lib64/libglib-2.0.so.0.2908.0)
    by 0x178915: adapter_remove (adapter.c:2326)
    by 0x17535F: btd_manager_unregister_adapter (manager.c:293)
    by 0x154081: device_event (hciops.c:2643)
    by 0x1543C1: io_stack_event (hciops.c:2763)
    by 0x4E8C88C: g_main_context_dispatch (in /lib64/libglib-2.0.so.0.2908.0)
    by 0x4E8D087: ??? (in /lib64/libglib-2.0.so.0.2908.0)
  Address 0x63f6638 is 8 bytes inside a block of size 16 free'd
    at 0x4A055FE: free (vg_replace_malloc.c:366)
    by 0x4E938F2: g_free (in /lib64/libglib-2.0.so.0.2908.0)
    by 0x4EA854E: g_slice_free1 (in /lib64/libglib-2.0.so.0.2908.0)
    by 0x4EA930C: g_slist_remove (in /lib64/libglib-2.0.so.0.2908.0)
    by 0x13AE53: media_endpoint_remove (media.c:118)
    by 0x4EA9826: g_slist_foreach (in /lib64/libglib-2.0.so.0.2908.0)
    by 0x4EA984A: g_slist_free_full (in /lib64/libglib-2.0.so.0.2908.0)
    by 0x13AF33: path_free (media.c:417)
    by 0x11EB39: remove_interface (object.c:563)
    by 0x11F360: g_dbus_unregister_interface (object.c:715)
    by 0x120C49: media_server_remove (manager.c:1098)
    by 0x4EA9826: g_slist_foreach (in /lib64/libglib-2.0.so.0.2908.0)
2011-08-08 16:47:02 +03:00
Johan Hedberg
62e53bd9c8 Remove redundant semicolon 2011-08-08 13:35:44 +03:00
Claudio Takahasi
bf12408007 Skip Link Loss handle discovery
Skip characteristic value handle discovery for Link Loss service if the
handle is already known.
2011-08-08 13:26:46 +03:00
Claudio Takahasi
37267653ed Add function to check invalid alert level value 2011-08-08 13:24:15 +03:00
Bruna Moreira
44bc8f5572 Add enum for alert level values 2011-08-08 13:24:12 +03:00
Claudio Takahasi
eb0d86a71f Add utility function to convert alert levels
Convert Link Loss or Immediate Alert Level string to byte.
2011-08-08 13:24:11 +03:00
Claudio Takahasi
daf610e464 Write Link Loss alert if the service is enabled
Verifies if the Link Loss service is enabled before writting the Link
Loss Alert Level in the Proximity Reporter.
2011-08-08 13:24:09 +03:00
Claudio Takahasi
17dfaf0eb0 Request connection if Link or Path Loss is enabled
Proximity Monitor needs to keep the link up if Link Loss and/or Path
Loss service is enabled.
2011-08-08 13:24:08 +03:00
Claudio Takahasi
bd084a4cfd Parse handles when probing on Proximity
Primary services start and end handles can now be obtained during
probing. This approach avoids primary service parsing on each
connection in the Proximity Monitor.
2011-08-08 13:24:04 +03:00
Claudio Takahasi
b2873faecd Fix error when proximity config file is missing
Adds checking to avoid the following GLib critical error:
Parsing /etc/bluetooth/proximity.conf failed: No such file or directory
GLib-CRITICAL **: g_key_file_get_string_list: assertion `key_file !=
NULL' failed
2011-08-08 13:22:35 +03:00
Claudio Takahasi
d7ea6429e1 Fix memory allocation in Proximity Monitor
textfile get functions returns memory allocated using malloc. String
is now being re-allocated using glib functions to keep the code standard
in the Proximity Monitor code.
2011-08-08 13:22:32 +03:00
Claudio Takahasi
b5494d7a8d Add get Path Loss RSSI signal level
Extends GetProperties method of the Proximity Monitor adding SignalLevel
Property. Possible values: "unknown", "good", "regular", "weak".
"unknown" will be returned if the link is disconnected.
2011-08-08 13:16:40 +03:00
Claudio Takahasi
ffd21d4027 Add get Immediate Alert for Proximity Monitor
Extends GetProperties method of the Proximity Monitor adding
ImmediateAlertLevel property when Path Loss and/or Find Me is enabled
2011-08-08 13:16:39 +03:00
Claudio Takahasi
1cbbcf3500 Add set Immediate Alert for Proximity Monitor
Extends SetProperty of the Proximity Monitor adding ImmediateAlertLevel
property. The value will be written in the Alert level of the remote's
Immediate Alert Level service. Property shared between FindMe and Path
Loss.
2011-08-08 13:16:27 +03:00
Anderson Lizardo
3c19214717 Remove bogus extra semicolons 2011-08-08 13:04:34 +03:00
Dmitriy Paliy
fad552de92 Fix cancel pending D-Bus call to ohmd
Pending D-Bus call to ohmd daemon is canceled if telephony driver is
unloaded before reply comes.
2011-08-05 12:40:29 +03:00
Johan Hedberg
fb25161654 Move around static functions to avoid forward-declarations 2011-08-05 12:40:06 +03:00
Dmitriy Paliy
ccd40753e9 Add stop playing ringtone to maemo6 telephony driver
If ringtone is loud enough, it may leak to microphone when call is
answered via Bluetooth headset. As result, it can be heard on remote
end. Therefore, playing ringtone shall be stopped as fast as possible
before answering a call.
2011-08-05 12:39:42 +03:00
Frédéric Dalleau
bc66f33f63 Minor style fix in audio/gateway.c 2011-08-05 12:19:35 +03:00
Frédéric Dalleau
b15f606312 Add watch for RFCOMM disconnect to HFP HF role 2011-08-05 12:18:41 +03:00
Frédéric Danis
3163523575 audio: add profile version to HandsfreeAgent
Some phones with HFP Audio Gateway version previous to 1.5 (e.g.
Samsung SGH-D600 returning 0x0101 as profile version) do not accept an
AT+BRSF with latest features. The Handsfree agent should adapt its
AT+BRSF command depending on the remote version, so add version
information as parameter of NewConnection method.

Here is traces of buggy exchange:

< ACL data: handle 12 flags 0x02 dlen 20
    L2CAP(d): cid 0x0046 len 16 [psm 3]
      RFCOMM(d): UIH: cr 1 dlci 10 pf 0 ilen 12 fcs 0xb0
      0000: 41 54 2b 42 52 53 46 3d  31 31 38 0d              AT+BRSF=118.
> ACL data: handle 12 flags 0x02 dlen 18
    L2CAP(d): cid 0x0041 len 14 [psm 3]
      RFCOMM(d): UIH: cr 0 dlci 10 pf 1 ilen 9 fcs 0x76 credits 1
      0000: 0d 0a 45 52 52 4f 52 0d  0a                       ..ERROR..
< ACL data: handle 12 flags 0x02 dlen 8
    L2CAP(d): cid 0x0046 len 4 [psm 3]
      RFCOMM(s): DISC: cr 1 dlci 10 pf 1 ilen 0 fcs 0x6d

and after the fix (and corresponding fix in oFono):

< ACL data: handle 12 flags 0x02 dlen 19
    L2CAP(d): cid 0x0048 len 15 [psm 3]
      RFCOMM(d): UIH: cr 1 dlci 10 pf 0 ilen 11 fcs 0xb0
      0000: 41 54 2b 42 52 53 46 3d  32 32 0d                 AT+BRSF=22.
> ACL data: handle 12 flags 0x02 dlen 28
    L2CAP(d): cid 0x0041 len 24 [psm 3]
      RFCOMM(d): UIH: cr 0 dlci 10 pf 1 ilen 19 fcs 0x76 credits 1
      0000: 0d 0a 2b 42 52 53 46 3a  20 33 33 0d 0a 0d 0a 4f  ..+BRSF: 33....O
      0010: 4b 0d 0a                                          K..
< ACL data: handle 12 flags 0x02 dlen 18
    L2CAP(d): cid 0x0048 len 14 [psm 3]
      RFCOMM(d): UIH: cr 1 dlci 10 pf 0 ilen 10 fcs 0xb0
      0000: 41 54 2b 43 49 4e 44 3d  3f 0d                    AT+CIND=?.
2011-08-04 14:02:39 +03:00