Commit Graph
40 Commits
Author SHA1 Message Date
David Lechner 509c635a07 ble/sagas: add workaround for BlueZ quirk
The 'gattserverdisconnected' event is called before the device is
actually disconnected, so if the user tries to connect again
immediately, the web browser will show a still "paired" device, but
selecting this devices results in an infinite wait. This is a bug in
Chromium, but we can work around it by adding a delay to give BlueZ
time to actually disconnect the device.

Closes: https://github.com/pybricks/support/issues/600
2022-10-26 16:20:08 -05:00
David Lechner 964c18f12e ble/sagas: fix blePybricksServiceDidNotReceiveHubCapabilities firmware version
We were using the version from the @pybricks/firmware package but we
really want the version from the connected device.
2022-10-21 16:26:43 -05:00
dependabot[bot]andDavid Lechner 49cc0e2126 build(deps): bump @pybricks/firmware from 6.0.1 to 6.1.0 (#1243)
* build(deps): bump @pybricks/firmware from 6.0.1 to 6.1.0

Bumps [@pybricks/firmware](https://github.com/pybricks/pybricks-micropython/tree/HEAD/npm/firmware) from 6.0.1 to 6.1.0.
- [Release notes](https://github.com/pybricks/pybricks-micropython/releases)
- [Changelog](https://github.com/pybricks/pybricks-micropython/blob/master/npm/firmware/CHANGELOG.md)
- [Commits](https://github.com/pybricks/pybricks-micropython/commits/HEAD/npm/firmware)

---
updated-dependencies:
- dependency-name: "@pybricks/firmware"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* update firmware version in test

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: David Lechner <david@lechnology.com>
2022-10-21 20:05:10 +00:00
David Lechner fa27649fe3 toasterTypes: change toaster to ref
Instead of rendering the toaster separate from the main index, add it
there so we can inherit all of the context providers. This requires
passing the ref object instead of the toaster instance itself, so
sagas have to be updated.
2022-10-19 18:26:37 -05:00
David Lechner 960a3163ed add support for Pybricks Profile v1.2.0
This adds support to the BLE Pybricks Profile v1.2.0. This includes a
new method to download and run programs and a new file format for the
user program.

Code for the old download and run is kept for backwards compatibility.
However, the PnP ID characteristic is no longer optional, so the
minimum Pybricks Profile is now v1.1.0.
2022-10-14 16:21:18 -05:00
David Lechner db43cb3e99 remove use of deprecated DomException code property 2022-10-14 16:21:18 -05:00
9994e8f4b4 build(deps): bump jest and @types/jest (#1131)
* build(deps): bump jest and @types/jest

Bumps [jest](https://github.com/facebook/jest/tree/HEAD/packages/jest) and [@types/jest](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/jest). These dependencies needed to be updated together.

Updates `jest` from 28.1.3 to 29.0.3
- [Release notes](https://github.com/facebook/jest/releases)
- [Changelog](https://github.com/facebook/jest/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/jest/commits/v29.0.3/packages/jest)

Updates `@types/jest` from 28.1.8 to 29.0.1
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/jest)

---
updated-dependencies:
- dependency-name: jest
  dependency-type: direct:production
  update-type: version-update:semver-major
- dependency-name: "@types/jest"
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* [dependabot skip] Fix yarn.lock

* update test snapshots for jest 29

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: dependabot-fix <dependabot-fix@example.com>
Co-authored-by: David Lechner <david@pybricks.com>
2022-09-13 17:06:24 +00:00
David Lechner c84afea181 style: make use of more blueprint styles
https://blueprintjs.com/docs/#core/typography

Also fix wrapping license text while we are touching this.
2022-07-27 16:55:46 -05:00
David Lechner d6df128860 i18n: use automatic type inference of translation keys
Finally figured out a way to make typescript strongly type translation
keys so we can avoid the tedium of creating enums of translation keys.
2022-07-22 13:48:50 -05:00
David Lechner 1d2c55eba6 ble/alerts: move old firmware from notifications
also add button to open new install firmware dialog
2022-07-20 17:26:08 -05:00
David Lechner 85deb42f76 firmware: add multi-step dialog 2022-07-20 12:32:17 -05:00
David Lechner cabd53ac49 ble/actions: drop fail to connect reason
This is not longer used and can be removed.
2022-07-18 14:51:42 -05:00
David Lechner c0215aa3ec ble/sagas: move console logging to saga 2022-07-18 14:46:04 -05:00
David Lechner d3be7775b2 ble/alerts: move missing service from notifications 2022-07-18 14:43:30 -05:00
David Lechner 5a77686e27 ble/alerts/NoGatt: move gatt message from notifications 2022-07-15 18:26:48 -05:00
David Lechner a86967573c ble: add 1 second delay after connecting
This might help with some people that have connection issues where the
OS is still busy enumerating the device when we are trying to read
characteristics.
2022-07-15 18:05:48 -05:00
David Lechner 662a1ae097 ble/sagas: rework connect saga
This gets rid of a bunch of try/catch and repeated code.
2022-07-15 18:05:48 -05:00
David Lechner bbe7eb4df3 ble: avoid aliases for UUID constants 2022-07-15 18:05:48 -05:00
David Lechner 15ecdf998d ble/sagas: use alerts for unexpected error instead of notifications 2022-07-15 13:47:37 -05:00
David Lechner ef0cd6507d ble/alerts: move bluetooth not available from notifications 2022-07-15 13:19:31 -05:00
David Lechner f86a9ad051 ble/alerts: move and improve no web bluetooth message 2022-07-15 13:16:53 -05:00
David Lechner e9f9aca3ef ble/sagas: don't spam console in tests 2022-07-15 11:42:44 -05:00
David Lechner ecd32e61b9 ble/actions: namespace actions
This way we don't have to use aliases when importing.
2022-07-15 11:16:23 -05:00
David Lechner 25e86c2f60 ble/sagas: flatten tests
This removes much of the nesting in tests to make the code easier to
read. Also we can now add more coverage for all of the skipped error
paths.
2022-07-14 20:44:24 -05:00
David Lechner af2386178d ble/sagas: add basic test
This gets about 50% coverage of the ble sagas.
2022-07-14 18:15:34 -05:00
David Lechner a9f4eaa32d actions: simplify usage of Matchable
This removes use of the pseudo-internal toString() function and also
removes extraneous uses of ReturnType<>. Also, a new when() method
is added to simplify additional uses.
2022-02-26 12:43:10 -06:00
David Lechner 9641898a75 actions: refactor actions
The pattern we were using for actions required actions to be defined in
three places, an enum member containing the type string, an type
definition and a function. This combines all three of these into one by
using a helper function based on the ideas from [1].

[1]: https://phryneas.de/redux-typescript-no-discriminating-union
2022-02-25 17:58:30 -06:00
David Lechner 42051ba924 status-bar: add basic battery indicator
This adds a basic battery indicator that just shows green for OK and red
for low battery warning. This is all we can do for now since that is
the only information that the hub sends currently.

Fixes: https://github.com/pybricks/support/issues/559
2021-12-27 17:05:40 -06:00
David Lechner 4c4061561d ble-nordic-uart-service: rename directory
This follows the pattern of other ble service directories.
2021-12-27 13:30:36 -06:00
David Lechner 1e4bce6a14 ble: move sagas
This saga uses all ble services, not just NUS, so move it to the common
ble folder.
2021-12-27 13:20:36 -06:00
David Lechner 8d4680ba82 status-bar: add connected hub indicator
This adds an indicator to the status bar that shows the hub name. When
clicked, a popover will be displayed that lists more detailed information
about the connected hub.
2021-12-27 13:04:13 -06:00
David Lechner ade06ab2cc ble: add id and name to didConnect action 2021-12-27 12:38:51 -06:00
David Lechner e92d5c1511 ble-device-info-service: add actions
This adds actions that are triggered when the device info service
characteristics are read.
2021-12-27 12:38:51 -06:00
David Lechner 788b77fda0 notifications: add firmware version check
This adds a firmware version check that shows an error message if the
connected hub is running an older Pybricks firmware version.

Issue: https://github.com/pybricks/support/issues/482
2021-09-15 16:49:51 -05:00
David Lechner ec6753c314 yarn lint
rules seem to have changed a bit after upgrading packages
2021-05-11 12:45:43 -05:00
David Lechner ca1ec0a64e Add Device Information Service support
The Pybricks firmware now includes the BLE Device Information Service
to provide firmware and Pybricks protocol versions.

For now, checking that the service is present is enough to know that the
firmware is up to date. But we will need to add additional checks as
soon as the protocol is changed.
2021-04-01 13:29:10 -05:00
David Lechner bf2bb5e81d add a failed to disconnect action 2021-02-01 10:26:05 -06:00
David Lechner d3e67950a6 add tests for ble reducers 2021-02-01 10:26:05 -06:00
David Lechner e5073399a0 drop explicit state interfaces
This could cause subtle bugs like the one fixed here where license
was renamed to licenses.
2021-02-01 10:26:05 -06:00
David Lechner 6f204a65f6 reorganize src/ directory
Makes for much less scrolling/jumping around.

https://redux.js.org/style-guide/style-guide#structure-files-as-feature-folders-or-ducks
2021-02-01 10:26:05 -06:00