W3C home > Mailing lists > Public > public-web-bluetooth@w3.org > April 2016

Re: How to unsubscribe?

From: Jeffrey Yasskin <jyasskin@google.com>
Date: Fri, 8 Apr 2016 08:31:01 -0700
Message-ID: <CANh-dXnBf1T30RzKHrRRABfBgX861ybnjMnrC0w8BtHcQEDtRw@mail.gmail.com>
To: Amol P <electronicsguy123@gmail.com>
Cc: François Beaufort 🇫🇷 <fbeaufort@google.com>, public-web-bluetooth <public-web-bluetooth@w3.org>
See the "unsubscribe from this list" link at
https://lists.w3.org/Archives/Public/public-web-bluetooth/.

On Thu, Mar 31, 2016 at 4:46 PM, Amol P <electronicsguy123@gmail.com> wrote:

> Hello,
>    How do I unsubscribe from this mailing list? I did try sending an email
> with the subject "unsubscribe" but it bounces back with an error.
>
> On Thu, Mar 31, 2016 at 7:41 PM, Jeffrey Yasskin <jyasskin@google.com>
> wrote:
>
>> I think we're going to want to treat things as-if-bonded with 1 queued
>> notification, in the long run, but so far the folks writing sample apps are
>> asking for as-if-non-bonded, and that's simpler for Chrome to implement, so
>> let's go with that for now, until we start getting complaints.
>>
>> I've filed https://github.com/WebBluetoothCG/web-bluetooth/issues/226 so
>> I remember to spec this.
>>
>>
>> On Thu, Mar 31, 2016 at 7:47 AM, François Beaufort 🇫🇷 <
>> fbeaufort@google.com> wrote:
>>
>>> What is the status on this?
>>>
>>> On Fri, Mar 18, 2016 at 8:18 PM Jeffrey Yasskin <jyasskin@google.com>
>>> wrote:
>>>
>>>> On Fri, Mar 18, 2016 at 7:57 AM, Von Dentz, Luiz
>>>> <luiz.von.dentz@intel.com> wrote:
>>>> > Hi Jeffrey,
>>>> >
>>>> > On Thu, Mar 17, 2016 at 11:00 PM, Jeffrey Yasskin <
>>>> jyasskin@google.com> wrote:
>>>> >> On Thu, Mar 17, 2016 at 10:12 AM, Rob Moran <Rob.Moran@arm.com>
>>>> wrote:
>>>> >>>
>>>> >>> I agree that registering service changed events is the same in both
>>>> cases,
>>>> >>> but having to register for these across re-connects feels
>>>> unintuitive versus
>>>> >>> scanning after a re-connect.
>>>> >>> I am assuming that discovering services again would still return the
>>>> >>> cached ones, however.
>>>> >>
>>>> >>
>>>> >> If we treat devices as not-bonded, I think we get:
>>>> >>
>>>> >>   await device.gatt.connect();
>>>> >>   // Depends on
>>>> https://github.com/WebBluetoothCG/web-bluetooth/issues/53:
>>>> >>   device.addEventListener('servicechanged', change =>
>>>> console.log(change));
>>>> >>   let service = await device.gatt.getPrimaryService('uuid');
>>>> >>   let characteristic = await service.getCharacteristic('uuid2');
>>>> >>   device.gatt.disconnect();
>>>> >>   await device.gatt.connect();
>>>> >>   await service.getCharacteristic('uuid2') // Throws
>>>> InvalidStateError:
>>>> >> service no longer exists?
>>>> >>   let service2 = await device.gatt.getPrimaryService('uuid'); //
>>>> Waits until
>>>> >> discovery process finishes.
>>>> >>   service ?== service2; // ???
>>>> >>   device.gatt.disconnect();
>>>> >>   // 'uuid' service removed, replaced with 'uuid3' service.
>>>> >>   await device.gatt.connect();
>>>> >>   await service.getCharacteristic('uuid2') // Throws
>>>> InvalidStateError:
>>>> >> service no longer exists?
>>>> >>   let service3 = await device.gatt.getPrimaryService('uuid'); //
>>>> >> NotFoundError.
>>>> >>   let service4 = await device.gatt.getPrimaryService('uuid3');
>>>> >>   service4 !== service2;
>>>> >>
>>>> >> I think we wouldn't get any 'servicechanged' events in this
>>>> scenario, since
>>>> >> the changes happen when no services are known.
>>>> >
>>>> > Well if that would be the case 'servicechanged' cannot be used for
>>>> > detecting new services since it appears to ignore any change outside
>>>> > the known range.
>>>>
>>>> In the design I've got so far, to detect a service you expect to be
>>>> added, you'd getPrimaryService('the-service'), catch the rejection if
>>>> it's not there, and then watch for 'servicechanged' to tell you it's
>>>> been added. Skipping the getPrimaryService() call could indeed cause
>>>> the browser to skip the 'servicechanged' event because of the rules in
>>>>
>>>> https://webbluetoothcg.github.io/web-bluetooth/#only-notify-for-requested-services
>>>> .
>>>> Those are there so the browser doesn't have to do a full discovery on
>>>> connect().
>>>>
>>>> >> If we treat devices as bonded, I think we get the following flow
>>>> instead:
>>>> >>
>>>> >>   await device.gatt.connect();
>>>> >>   // Depends on
>>>> https://github.com/WebBluetoothCG/web-bluetooth/issues/53:
>>>> >>   device.addEventListener('servicechanged', change => console.log);
>>>> >>   let service = await device.gatt.getPrimaryService('uuid');
>>>> >>   let characteristic = await service.getCharacteristic('uuid2');
>>>> >>   let value = await characteristic.readValue();
>>>> >>   device.gatt.disconnect();
>>>> >>   await device.gatt.connect();
>>>> >>   characteristic === await service.getCharacteristic('uuid2');
>>>> >>   service === await device.gatt.getPrimaryService('uuid');
>>>> >>   await device.gatt.getPrimaryService('uuid3');  // NotFoundError
>>>> >>   device.gatt.disconnect();
>>>> >>   // 'uuid' service removed, replaced with 'uuid3' service.
>>>> >>   await device.gatt.connect();
>>>> >
>>>> > This seems to ignore that fact that the changes can happens while
>>>> > connected where the following events would be exactly the same.
>>>>
>>>> This example happens to show the change occurring while disconnected,
>>>> in order to highlight the difference from the as-if-non-bonded case.
>>>> If the change happens while the device is connected and after the
>>>> service has been retrieved during the current connection, I think the
>>>> bonded and non-bonded options act the same. Have I missed something?
>>>>
>>>> >>   // 'servicechanged' fired some time after this.. Let's say it
>>>> doesn't
>>>> >> arrive for a while.
>>>> >>   service === await device.gatt.getPrimaryService('uuid');  //
>>>> Cached.
>>>> >>   characteristic === await service.getCharacteristic('uuid2');  //
>>>> Cached.
>>>> >>   let value = await characteristic.readValue(); //
>>>> InvalidStateError? What
>>>> >> GATT error does this cause?
>>>> >>   await device.gatt.getPrimaryService('uuid3');  // Cached
>>>> NotFoundError.
>>>> >>   // Say 'servicechanged' arrives now. Listener logs it to console.
>>>> >>   let service2 = await device.gatt.getPrimaryService('uuid3');  //
>>>> Succeeds.
>>>> >>   let service3 = await device.gatt.getPrimaryService('uuid'); //
>>>> >> NotFoundError.
>>>> >>
>>>> >>
>>>> >> Does that all make sense? Does it convince anyone to prefer
>>>> as-if-bonded or
>>>> >> as-if-not-bonded?
>>>> >
>>>> > The main concept difference appears to be persistent cache vs
>>>> > temporary cache, the miss chance is slightly bigger on the former but
>>>> > handling is almost the same either way.
>>>>
>>>> I don't really follow, sorry. IIUC, the persistent/as-if-bonded option
>>>> guarantees sites don't miss a single notification sent right after the
>>>> connection is established, and allows sites to write less code, but
>>>> requires more code from the browser. The temporary/as-if-non-bonded
>>>> option allows missed notifications, but allows a simpler browser
>>>> implementation.
>>>>
>>>> > Btw, the persistent cache can
>>>> > be used to check the services matches during the connection phase
>>>> > which further reduces the chance of cache miss.
>>>>
>>>> I still think the persistent-but-non-bonded cache can fail to notice
>>>> added and removed characteristics within an existing service whose
>>>> range doesn't change. We don't need that to change in Bluez to
>>>> implement Web Bluetooth, since we can just blame any resulting bugs on
>>>> the user's platform, but I don't want to bake it into the web API.
>>>>
>>>> Jeffrey
>>>>
>>>> >> Jeffrey
>>>> >>
>>>> >>>
>>>> >>> Rob
>>>> >>>
>>>> >>> Hi Rob,
>>>> >>>
>>>> >>> I really meant GATT notifications, even though advertise would
>>>> >>> probably make more sense but Im not sure it is supported in a lot of
>>>> >>> systems, certainly not Web Bluetooth. Anyway, I don't think
>>>> suggesting
>>>> >>> to use advertise will make the problem go away as devices may
>>>> already
>>>> >>> be in the market.
>>>> >>>
>>>> >>> Btw, the statement about having to register service changed events
>>>> and
>>>> >>> possibly holding stale services is true in any case regardless if we
>>>> >>> persist the attributes or not because the device may change them
>>>> while
>>>> >>> connected not only when it is offline.
>>>> >>>
>>>> >>> On Thu, Mar 17, 2016 at 1:47 PM, Rob Moran <Rob.Moran@arm.com>
>>>> wrote:
>>>> >>> > Hi Luiz,
>>>> >>> >
>>>> >>> > I assume you are meaning devices such as eddystone beacons?
>>>> >>> > I'm not sure if the Web Bluetooth requestDevice() function is the
>>>> best
>>>> >>> > interface to observe these sorts of beacons, but is more geared
>>>> towards
>>>> >>> > connecting and interacting with devices.
>>>> >>> > For purely observing devices, I think another function alongside
>>>> >>> > requestDevice() (observeDevices()?) may be a better approach
>>>> which can
>>>> >>> > maintain the cache required for these sorts of devices, is
>>>> read-only and may
>>>> >>> > not need the security restrictions of requestDevice().
>>>> >>> >
>>>> >>> > Specific scanning apps (such as the physical web app) may also be
>>>> >>> > another option?
>>>> >>> >
>>>> >>> > ________________________________________
>>>> >>> > From: Von Dentz, Luiz <luiz.von.dentz@intel.com>
>>>> >>> > Sent: 17 March 2016 11:11
>>>> >>> > To: Rob Moran
>>>> >>> > Cc: Christiansen, Kenneth R; Jeffrey Yasskin; public-web-bluetooth
>>>> >>> > Subject: Re: Should we expose all devices as if they were bonded?
>>>> >>> >
>>>> >>> > Hi Rob,
>>>> >>> >
>>>> >>> > There are device that advertise, notify one value and disconnect,
>>>> >>> > which creates a race condition where the application/page may not
>>>> be
>>>> >>> > quick enough to catch the value which is then lost as the device
>>>> >>> > disconnects immediately to save power.
>>>> >>> >
>>>> >>> > On Thu, Mar 17, 2016 at 1:06 PM, Rob Moran <Rob.Moran@arm.com>
>>>> wrote:
>>>> >>> >>
>>>> >>> >> IMO having the device appear unbonded and requiring a user to
>>>> >>> >> re-discover services and re-register for events, etc. after a
>>>> disconnect is
>>>> >>> >> a cleaner and more atomic approach.
>>>> >>> >> Requiring the user to register for service changed events and
>>>> possibly
>>>> >>> >> holding stale services (as they may not exist after a reconnect)
>>>> could
>>>> >>> >> create more edge cases and potential errors to cover.
>>>> >>> >>
>>>> >>> >> In this scenario, I think the item to persist between
>>>> connections is
>>>> >>> >> the security context, so that any further reconnections don't
>>>> require a user
>>>> >>> >> action to undertake, but still honour the original service /
>>>> name filters.
>>>> >>> >>
>>>> >>> >> Cheers,
>>>> >>> >>
>>>> >>> >> Rob
>>>> >>> >> ________________________________________
>>>> >>> >> From: Christiansen, Kenneth R <kenneth.r.christiansen@intel.com>
>>>> >>> >> Sent: 17 March 2016 10:39
>>>> >>> >> To: Jeffrey Yasskin; public-web-bluetooth
>>>> >>> >> Subject: RE: Should we expose all devices as if they were bonded?
>>>> >>> >>
>>>> >>> >> At least for development purposes it would be nice to have them
>>>> >>> >> unbounded (but I guess we could have a way to change the
>>>> behavior in
>>>> >>> >> devtools when it is open)
>>>> >>> >>
>>>> >>> >> I am not sure whether I want the notifications to be queued, at
>>>> least
>>>> >>> >> not by default. Think about something like temperature change
>>>> and heart rate
>>>> >>> >> measurements.
>>>> >>> >>
>>>> >>> >> Kenneth
>>>> >>> >>
>>>> >>> >>> -----Original Message-----
>>>> >>> >>> From: Jeffrey Yasskin [mailto:jyasskin@google.com]
>>>> >>> >>> Sent: Thursday, March 17, 2016 2:22 AM
>>>> >>> >>> To: public-web-bluetooth <public-web-bluetooth@w3.org>
>>>> >>> >>> Subject: Should we expose all devices as if they were bonded?
>>>> >>> >>>
>>>> >>> >>> Two issues came up recently where the Bluetooth spec defines
>>>> different
>>>> >>> >>> behavior depending on whether a device is bonded.
>>>> >>> >>>
>>>> >>> >>> In https://groups.google.com/a/chromium.org/d/topic/web-
>>>> >>> >>> bluetooth/PQpZAFNlvT4/discussion
>>>> >>> >>> and https://github.com/thegecko/web-bluetooth-dfu/issues/12,
>>>> Luiz is
>>>> >>> >>> suggesting that we have Web Bluetooth remember services,
>>>> >>> >>> characteristics,
>>>> >>> >>> and descriptors across disconnection, even when there's no
>>>> physical
>>>> >>> >>> bond.
>>>> >>> >>> That's similar to treating the web site as bonded to the
>>>> peripheral.
>>>> >>> >>> We'd in
>>>> >>> >>> the case of no bond, we'd re-discover the known services, etc.
>>>> after
>>>> >>> >>> re-
>>>> >>> >>> connecting, and send service-changed events for the ones that
>>>> have
>>>> >>> >>> changed. We'd also allow users to hold onto Service, etc.
>>>> objects
>>>> >>> >>> across
>>>> >>> >>> disconnect/connect pairs, and continue using the objects
>>>> afterward. On
>>>> >>> >>> the
>>>> >>> >>> other hand, if we treat pages as un-bonded, users would need to
>>>> >>> >>> re-fetch
>>>> >>> >>> services, etc. before using them after a disconnect/reconnect
>>>> pair.
>>>> >>> >>>
>>>> >>> >>> In https://github.com/WebBluetoothCG/web-bluetooth/issues/220
>>>> and
>>>> >>> >>> https://bugs..chromium.org/p/chromium/issues/detail?id=589796
>>>> <https://bugs.chromium.org/p/chromium/issues/detail?id=589796>, we have
>>>> >>> >>> to decide whether users need to re-subscribe to notifications
>>>> after a
>>>> >>> >>> disconnection. If we treat pages as bonded, the notification
>>>> state
>>>> >>> >>> should
>>>> >>> >>> persist across disconnections. If we treat pages as non-bonded,
>>>> the
>>>> >>> >>> state
>>>> >>> >>> should reset to unsubscribed on disconnection. (3..G.3.3.3.3)
>>>> If we
>>>> >>> >>> keep the
>>>> >>> >>> page subscribed across disconnection, users might expect us to
>>>> queue
>>>> >>> >>> notifications, or at least indications, and deliver them the
>>>> next time
>>>> >>> >>> the page
>>>> >>> >>> is connected. Should we do the same if the page is unloaded?
>>>> That kind
>>>> >>> >>> of
>>>> >>> >>> unbounded queueing seems problematic.
>>>> >>> >>>
>>>> >>> >>> And, of course, beyond always treating a page as bonded or
>>>> not-bonded,
>>>> >>> >>> we
>>>> >>> >>> could make the page's bonded-ness depend on the presence of a
>>>> physical
>>>> >>> >>> bond.
>>>> >>> >>>
>>>> >>> >>> Are there other areas where treating the page as having or
>>>> not-having
>>>> >>> >>> a
>>>> >>> >>> bond would cause divergent behavior?
>>>> >>> >>>
>>>> >>> >>> Which behavior do you folks think makes more sense for the web
>>>> API?
>>>> >>> >>>
>>>> >>> >>> Jeffrey
>>>> >>> >>
>>>> >>> >> IMPORTANT NOTICE: The contents of this email and any attachments
>>>> are
>>>> >>> >> confidential and may also be privileged. If you are not the
>>>> intended
>>>> >>> >> recipient, please notify the sender immediately and do not
>>>> disclose the
>>>> >>> >> contents to any other person, use it for any purpose, or store
>>>> or copy the
>>>> >>> >> information in any medium. Thank you.
>>>> >>> >>
>>>> >>> >>
>>>> >>> >
>>>> >>> > IMPORTANT NOTICE: The contents of this email and any attachments
>>>> are
>>>> >>> > confidential and may also be privileged. If you are not the
>>>> intended
>>>> >>> > recipient, please notify the sender immediately and do not
>>>> disclose the
>>>> >>> > contents to any other person, use it for any purpose, or store or
>>>> copy the
>>>> >>> > information in any medium. Thank you.
>>>> >>> >
>>>> >>>
>>>> >>> IMPORTANT NOTICE: The contents of this email and any attachments are
>>>> >>> confidential and may also be privileged. If you are not the intended
>>>> >>> recipient, please notify the sender immediately and do not disclose
>>>> the
>>>> >>> contents to any other person, use it for any purpose, or store or
>>>> copy the
>>>> >>> information in any medium. Thank you.
>>>> >>>
>>>> >>
>>>>
>>>>
>>
>
Received on Friday, 8 April 2016 15:31:50 UTC

This archive was generated by hypermail 2.3.1 : Friday, 8 April 2016 15:31:50 UTC