Re: [Bluez PATCH v1 1/2] doc:adding a WidebandSpeechEnabled Api

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Luiz,

>>>>>>>>>>>>> This change adds an adapter Api to report the controller's
>>>>>>>>>>>>> widebandspeech enabled state.
>>>>>>>>>>> 
>>>>>>>>>>> I wonder if this shouldn't be queried over SCO socket, or simple fail
>>>>>>>>>>> with BT_VOICE when using BT_VOICE_TRANSPARENT which is how what is
>>>>>>>>>>> normally used when using mSBC.
>>>>>>>>>> 
>>>>>>>>>> I think there is value in both.
>>>>>>>>> 
>>>>>>>>> Can you expand on that? I think this might generate confusion if the
>>>>>>>>> property indicates support for it but HFP implementation don't support
>>>>>>>>> it, since the later is usually implemented as a external profile so we
>>>>>>>>> don't have the features it may support, or perhaps the intention here
>>>>>>>>> is to actually indicate when it is in use?
>>>>>>>> 
>>>>>>>> This is a signal that the adapter supports it and has everything
>>>>>>>> enabled to support it.   Driver indicated it supports it and erroneous
>>>>>>>> data reporting was enabled.  The profile has it's own state which may
>>>>>>>> indicate if msbc will be used, but this will be on a per connection
>>>>>>>> basis and is independent from this adapter property.
>>>>>>>> 
>>>>>>>> The value in this property is to support diagnostic UX about
>>>>>>>> controller capabilities/state and also allow profiles that are
>>>>>>>> implemented outside of bluetoothd to see which codec it can attempt to
>>>>>>>> negotiate with the device.
>>>>>>> 
>>>>>>> For diagnosic I think we would be better off with some dedicated
>>>>>>> interface to query this, as for the later the information we are
>>>>>>> giving does not actually tell anything about the codec support, which
>>>>>>> was part of my original argument that for the likes of HFP and other
>>>>>>> profiles using it it might not be enough and they still need to use
>>>>>>> BT_VOICE in order to enable the use of custom codecs, if you take
>>>>>>> ofono for example it does implement support for wideband speech
>>>>>>> already and it would completely disregard this property which can give
>>>>>>> the false impression that wideband speech cannot be activated when in
>>>>>>> fact it can, it just don't have erroneous data reporting enable, so
>>>>>>> perhaps we should indicate the actual adapter feature (e.g.
>>>>>>> ErrnoneousDataReporting) not the profile feature here, so the profile
>>>>>>> implementation can check weather this would disable use of wideband
>>>>>>> speech or not, futhermore we should probably report the errors back to
>>>>>>> the SCO socket or is that just for diagnostic and cannot be used to
>>>>>>> adjust the streaming?
>>>>>> 
>>>>>> My original patch actually had this MGMT feature called erroneous data
>>>>>> reporting and Marcel argued against it.  If you both agree, then I'm
>>>>>> happy to rename all of this to erroneous data reporting.  We'd still
>>>>>> need some way for the driver support to be messaged some other way
>>>>>> though. see:
>>>>>> 
>>>>>> if (id->driver_info & BTUSB_WIDEBAND_SPEECH)
>>>>>>        set_bit(HCI_QUIRK_WIDEBAND_SPEECH_SUPPORTED, &hdev->quirks);
>>> 
>>> So this will get a little bit confusing if we don't have a HFP
>>> implementation that actually does implement the profile parts to
>>> enable wideband speech so I wonder if we should rename it to the
>>> underline feature it enables, that said this sort of feature is
>>> probably easier to be queried over the socket itself rather than over
>>> D-Bus so it can be used in conjunction with the likes of BT_VOICE,
>>> also regarding the erroneous data should that be also enabled by the
>>> HFP profile, because depending on the platform it may not support
>>> wideband speech so enabling erroneous data automatically may result in
>>> artifacs, specially in cases where the codecs don't have error
>>> correction or data loss concealment to handle data with possible error
>>> and lost data respectively, btw we don't seem to be parsing the
>>> SCO/ESCO flags and even if we do this properly we need to find a way
>>> to notify them over the socket so things like plc works properly.
>> 
>> This indeed makes sense, but we'll need to decide how erroneous data
>> reporting gets enabled.  The SCO socket is a per connection scope
>> thing while erroneous data reporting is a controller level thing.
> 
> The way I would have done this is to make use of recvmsg and then add
> the packet flags as msg_flags:
> 
>   recvmsg()
>       The recvmsg() call uses a msghdr structure to minimize the
> number of directly supplied arguments.  This structure is defined as
> follows in <sys/socket.h>:
> 
>           struct iovec {                    /* Scatter/gather array items */
>               void  *iov_base;              /* Starting address */
>               size_t iov_len;               /* Number of bytes to transfer */
>           };
> 
>           struct msghdr {
>               void         *msg_name;       /* Optional address */
>               socklen_t     msg_namelen;    /* Size of address */
>               struct iovec *msg_iov;        /* Scatter/gather array */
>               size_t        msg_iovlen;     /* # elements in msg_iov */
>               void         *msg_control;    /* Ancillary data, see below */
>               size_t        msg_controllen; /* Ancillary data buffer len */
>               int           msg_flags;      /* Flags on received message */
>           };
> 
> But to make this backward compatible I would recommend adding a
> socketopt that enables this new behavior and in case there is more
> than one SCO socket those that did not use the sockopt should probably
> drop packets with error or lost data so they work as without erroneous
> data report since in that case the application will likely be using
> regular reads it won't be able to detect the use of msg_flags.

I think that I already send an example on how to do that a while ago. Don’t remember if that was a private email or addressed to the mailing list, but I remember showing how this can be done. Or I confused this with something similar :(

Regards

Marcel




[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux