This commit fixes a typo and changes a tuple that needs to be mutable to a
list (because other parts of the code change elements of this list).
Signed-off-by: Damien George <damien@micropython.org>
The value of the STATUS register is always transmitted by the chip when
reading any command. So a R_REGISTER command and the turnaround time can
be spared by issuing a NOP command instead.
This implementation suggested by the datasheet.
This operation is compatible with both nRF24L01 and nRF24L01+.
Signed-off-by: Marcell Pünkösd <punkosdmarcell@rocketmail.com>
The timeout condition was not handled before. Upon timeout, this caused
the chip to stay active until another send command changed it's state.
Sometimes when it was unable to transmit the data, it got stuck in the tx
fifo causing it to fill up over time, which set the TX_FULL flag in the
STATUS register.
Since there was no exceptions raised, the user code could not differentiate
a successful send or a timeout condition.
Signed-off-by: Marcell Pünkösd <punkosdmarcell@rocketmail.com>
According to the datasheet of the NRF240L1 chip, 150 μs startup time is
only acceptable when the chip is clocked externally. Most modules use a
crystal, which require 1.5 ms to settle. It should be okay to wait more in
both cases, for a reliable startup.
Signed-off-by: Marcell Pünkösd <punkosdmarcell@rocketmail.com>
Commit 35d41dbb0e changed the API for using
SSL with umqtt, but only did a minor version increase. This broke various
uses of this library, eg
https://github.com/aws-samples/aws-iot-core-getting-started-micropython
Reinstate the original API for specifying an SSL connection. This library
now supports the following:
- default, ssl=None or ssl=False: no SSL
- ssl=True and optional ssl_params specified: use ssl.wrap_socket
- ssl=<SSLContext instance>: use provided SSL context to wrap socket
Signed-off-by: Damien George <damien@micropython.org>
If a ROMFS is mounted then "/rom/lib" is usually in `sys.path` before the
writable filesystem's "lib" entry. The ROMFS directory cannot be installed
to, so skip it if found.
Signed-off-by: Damien George <damien@micropython.org>
This allows to specify relative URLs in package.json, which are resolved
relative to the package.json URL. This mirrors the functionality added to
mpremote in https://github.com/micropython/micropython/pull/12477.
Signed-off-by: Glenn Moloney <glenn.moloney@gmail.com>
If there are any network issues, mqtt will block on the socket
non-deterministically. This commit introduces a `timeout` option which
can be used to set a finite timeout on the socket. Upon any issue, mqtth
lib will throw exception.
This allows the following arguments to be passed to `device.connect()`:
* scan_duration_ms
* min_conn_interval_us
* max_conn_interval_us
These are passed as-is to `gap_connect()`. The default value for all of
these is `None`, which causes gap_connect to use its own defaults.
Signed-off-by: Joris van der Wel <joris@jorisvanderwel.com>
To use this feature you need to create a usb device signaling remote wakeup
and then enable remote wakeup on the host (on linux write enabled to
/sys/bus/usb/devices/<device>/power/wakeup). Then you can wake up the host
when is on standby using USBDevice.remote_wakeup.
Signed-off-by: Felix Dörre <felix@dogcraft.de>
This is to replace a commit which added locking here but caused some other
problems. The idea behind the Buffer class is that a single producer can
call pend_write() more than once and it's idempotent, however this is very
complex to extend across multiple threads.
Signed-off-by: Angus Gratton <angus@redyak.com.au>
The USB pending transfer flag was cleared before calling the completion
callback, to allow the callback code to call submit_xfer() again.
Unfortunately this isn't safe in a multi-threaded environment, as another
thread may see the endpoint is available before the callback is done
executing and submit a new transfer.
Rather than adding extra locking, specifically treat the transfer as still
pending if checked from another thread while the callback is executing.
Closes#874
Signed-off-by: Angus Gratton <angus@redyak.com.au>
It looks like this example file was not added to the original commit back
in 6190cec14a.
Fixes issue #320.
Signed-off-by: Angus Gratton <angus@redyak.com.au>
Currently, the LoRa SX126x driver dynamically creates at least one,
sometimes two, memoryview objects with each call to `_cmd`. This commit
simply provides the class with a long-lived memoryview object for `_cmd` to
easily slice as necessary.
Unlike the SX127x chips, Semtech unfortunately designed the SX126x modems
to be more command-centric (as opposed to directly setting registers).
Given the amount `_cmd` is called during normal device operation, even a
minor improvement here should have a decent impact.
Basic TX and RX tests pass on hardware.
Signed-off-by: Max Holliday <maholli@stanford.edu>
If the CDC receive buffer was full and some code read less than 64 bytes
(wMaxTransferSize), the CDC code would submit an OUT transfer with N<64
bytes length to fill the buffer back up.
However if the host had more than N bytes to send then it would still send
the full 64 bytes (correctly) in the transfer. The remaining (64-N) bytes
would be lost.
Adds the restriction that CDCInterface rxbuf has to be at least 64 bytes.
Fixes issue #885.
This work was funded through GitHub Sponsors.
Signed-off-by: Angus Gratton <angus@redyak.com.au>
Storing references to tasks is required by CPython, and enforced by Ruff
RUF006. In this case it's also reasonable to cancel these tasks once the
test is finished.
Signed-off-by: Damien George <damien@micropython.org>
This changes almost all uses of "u-module" to just "module" for the
following built-in modules:
- binascii
- collections
- errno
- io
- json
- socket
- struct
- sys
- time
There are some remaining uses of "u-module" naming, for the cases where the
built-in module is extended in Python, eg `python-stdlib/os` uses `uos`.
Also, there are remaining uses of `utime` when non-standard (compared to
CPython) functions are used, like `utime.ticks_ms()`.
Signed-off-by: Damien George <damien@micropython.org>
Testing shows that the first two writes always go through and the rest are
dropped, so update the .exp file to match that.
Signed-off-by: Damien George <damien@micropython.org>
This tests both encoding and decoding multiple 16-bit and 32-bit services
within the one advertising field.
Signed-off-by: Damien George <damien@micropython.org>
Fixes are needed to support the cases of:
- There may be more than one UUID per advertising field.
- The UUID advertising field may be empty (no UUIDs).
- Constructing 32-bit `bluetooth.UUID()` entities, which must be done by
passing in a 4-byte bytes object, not an integer.
Signed-off-by: Damien George <damien@micropython.org>
When multiple UUIDs of the same size are advertised, they should all be
listed in a single LTV. Supplement to the Bluetooth Core Specification,
Part A, §1.1.1: "A packet or data block shall not contain more than one
instance for each Service UUID data size."
When aioble construct the advertisement data, it is creating a new data
block for each UUID that contains only that single UUID. Rather than,
e.g., a single 16-bit UUID block with a list of multiple UUIDs.
Not only is this against the specification, it wastes two bytes of limited
advertisement space per UUID beyond the first for the repeated data block
length and type fields.
Fix this by grouping each UUID size together.
Signed-off-by: Trent Piepho <tpiepho@gmail.com>
The value for the `timeout_ms` optional argument to
`DeviceConnection.disconnected()` async method is changed from 60000 to
None. This way users awaiting a device disconnection using `await
connection.disconnected()` won't be surprised by a 1 minute timeout.
Only read from the temp characteristic if the connection is still active.
Improves the example by avoiding a TypeError exception if/when the sensor
disconnects.
This sets the disconnected timeout to None, so that the peripheral waits
forever for the client to disconnect. Previously the peripheral would
abort the connection after 60 seconds (because that's the default timeout).
Signed-off-by: Stephen More <stephen.more@gmail.com>
This ensures that the peripheral notifies subscribed clients when the
characteristic is written to.
Signed-off-by: Stephen More <stephen.more@gmail.com>
Mostly small cleanups to put each top-level import on its own line. But
explicitly disable the lint for examples/tests which insert the current
directory into the path before importing.
Signed-off-by: Angus Gratton <angus@redyak.com.au>
Most of these look like they were used for print debugging and then kept in
when the print statements were removed or commented.
Some look like missing or incomplete functionality, these have been marked
with comments where possible.
Signed-off-by: Angus Gratton <angus@redyak.com.au>
These packages build on top of machine.USBDevice() to provide high level
and flexible support for implementing USB devices in Python code.
Additional credits, as per included copyright notices:
- CDC support based on initial implementation by @hoihu with fixes by
@linted.
- MIDI support based on initial implementation by @paulhamsh.
- HID keypad example based on work by @turmoni.
- Everyone who tested and provided feedback on early versions of these
packages.
This work was funded through GitHub Sponsors.
Signed-off-by: Angus Gratton <angus@redyak.com.au>
Changes are cosmetic - and maybe very minor code size - but not functional.
_reg_read() was calling struct.packinto() with an incorrect number of
arguments but it seems like MicroPython didn't mind, as result is correct
for both versions.
This work was funded through GitHub Sponsors.
Signed-off-by: Angus Gratton <angus@redyak.com.au>
If send completes before the first call to poll_send(), the driver could
get stuck in _sync_wait(). This had much less impact before rp2 port went
tickless, as _sync_wait(will_irq=True) calls machine.idle() which may not
wake very frequently on a tickless port.
This work was funded through GitHub Sponsors.
Signed-off-by: Angus Gratton <angus@redyak.com.au>
According to the docs, only freq_khz was needed for working output.
However:
- Without output_power setting, no output from SX1262 antenna (theory:
output routed to the SX1261 antenna).
- SF,BW,etc. settings were different from the SX127x power on defaults, so
modems with an identical configuration were unable to communicate.
This work was funded through GitHub Sponsors.
Signed-off-by: Angus Gratton <angus@redyak.com.au>