David Lechner
1e764b4e95
ble/sagas: spawn ble writes
...
Code depends on always receiving a didWrite/didFailToWrite, however
when a hub disconnected, these tasks were being cancelled. Spawning
protects them from cancellation.
2023-04-01 15:17:22 -05:00
David Lechner
3baaff5b61
ble/sagas: avoid Linux 5 second disconnect when possible
...
If the user did not request disconnection, then we know this is a true
disconnect event and not an early one so we don't need the delay hack
in that case.
Issue: https://github.com/pybricks/support/issues/600
Issue: https://github.com/pybricks/support/issues/1021
2023-04-01 13:38:19 -05:00
David Lechner
70020275a7
ble/alerts/Disconnected: better error message for disconnected
...
WebBluetooth generally uses DomException with name NetworkError to mean
that Bluetooth is disconnected, so we can use that to provide a helpful
error message.
2023-04-01 13:38:19 -05:00
David Lechner
d88ce8998f
test: wrap all user calls in act()
...
Some user events trigger react dom changes. These need to be wrapped in
act() to avoid a warning printed to the console. To be save, we wrap
all instances.
2023-03-10 18:16:27 -06:00
David Lechner
af160c99a8
more code coverage
2023-03-08 15:07:16 -06:00
David Lechner
b366f777ca
tree-wide: fix version comparison
...
We were using satisfies in a few places where we should have just been
using a comparison operator.
2022-12-20 15:39:26 -06:00
David Lechner
dd322b5aac
tree-wide: use noopener instead of noreferrer for target="_blank"
...
This will allow us to see when users click links to the pybricks.com
website from the app.
2022-12-20 12:09:04 -06:00
Laurens Valk
97ea2b1ac7
ble/alerts/translations: Copy edit.
2022-12-15 14:59:36 -06:00
Laurens Valk
0f02c64800
src/components: Move ClipboardIcon and ExternalLinkIcon from utils.
...
See https://github.com/pybricks/pybricks-code/pull/1321#pullrequestreview-1190431986
2022-11-25 13:40:44 -06:00
David Lechner
9fe62467d5
alerts: use shorthand return
2022-11-22 15:56:56 -06:00
David Lechner
597419be47
ble/alerts/BluetoothNotAvailable: add browser support paragraph
...
Browsers such as Brave and Opera are based on Chromium but disable
Web Bluetooth. In this case, we can't tell the difference between the
browser not supporting it or the Bluetooth adapter not being present.
So we make the error message cover all possibilities.
Issue: https://github.com/pybricks/support/discussions/804
Issue: https://github.com/pybricks/support/issues/635
2022-11-18 19:28:00 -06:00
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] and David 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