Merge branch 'adafruit:main' into adcdma

This commit is contained in:
Lee Atkinson 2022-08-11 17:57:01 -04:00 committed by GitHub
commit ce24469848
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 74 additions and 22 deletions

View File

@ -494,6 +494,45 @@ backticks ``:class:`~adafruit_motor.servo.Servo```. You must also add the refer
"adafruit_motor": ("https://circuitpython.readthedocs.io/projects/motor/en/latest/", None,), "adafruit_motor": ("https://circuitpython.readthedocs.io/projects/motor/en/latest/", None,),
Use ``adafruit_register`` when possible
--------------------------------------------------------------------------------
`Register <https://github.com/adafruit/Adafruit_CircuitPython_Register>`_ is
a foundational library that manages packing and unpacking data from I2C device
registers. There is also `Register SPI <https://github.com/adafruit/Adafruit_CircuitPython_Register_SPI>`_
for SPI devices. When possible, use one of these libraries for unpacking and
packing registers. This ensures the packing code is shared amongst all
registers (even across drivers). Furthermore, it simplifies device definitions
by making them declarative (only data.)
Values with non-consecutive bits in a register or that represent FIFO endpoints
may not map well to existing register classes. In unique cases like these, it is
ok to read and write the register directly.
*Do not* add all registers from a datasheet upfront. Instead, only add the ones
necessary for the functionality the driver exposes. Adding them all will lead to
unnecessary file size and API clutter. See `this video about outside-in design
from @tannewt <https://www.youtube.com/watch?v=3QewiyfBQh8>`_.
I2C Example
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. code-block:: python
from adafruit_register import i2c_bit
from adafruit_bus_device import i2c_device
class HelloWorldDevice:
"""Device with two bits to control when the words 'hello' and 'world' are lit."""
hello = i2c_bit.RWBit(0x0, 0x0)
"""Bit to indicate if hello is lit."""
world = i2c_bit.RWBit(0x1, 0x0)
"""Bit to indicate if world is lit."""
def __init__(self, i2c, device_address=0x0):
self.i2c_device = i2c_device.I2CDevice(i2c, device_address)
Use BusDevice Use BusDevice
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
@ -668,8 +707,24 @@ when using ``const()``, keep in mind these general guide lines:
- Always use via an import, ex: ``from micropython import const`` - Always use via an import, ex: ``from micropython import const``
- Limit use to global (module level) variables only. - Limit use to global (module level) variables only.
- If user will not need access to variable, prefix name with a leading - Only used when the user will not need access to variable and prefix name with
underscore, ex: ``_SOME_CONST``. a leading underscore, ex: ``_SOME_CONST``.
Example
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. code-block:: python
from adafruit_bus_device import i2c_device
from micropython import const
_DEFAULT_I2C_ADDR = const(0x42)
class Widget:
"""A generic widget."""
def __init__(self, i2c, address=_DEFAULT_I2C_ADDR):
self.i2c_device = i2c_device.I2CDevice(i2c, address)
Libraries Examples Libraries Examples
------------------ ------------------
@ -751,6 +806,16 @@ properties.
| ``sound_level`` | float | non-unit-specific sound level (monotonic but not actual decibels) | | ``sound_level`` | float | non-unit-specific sound level (monotonic but not actual decibels) |
+-----------------------+-----------------------+-------------------------------------------------------------------------+ +-----------------------+-----------------------+-------------------------------------------------------------------------+
Driver constant naming
--------------------------------------------------------------------------------
When adding variables for constant values for a driver. Do not include the
device's name in the variable name. For example, in ``adafruit_fancy123.py``,
variables should not start with ``FANCY123_``. Adding this prefix increases RAM
usage and .mpy file size because variable names are preserved. User code should
refer to these constants as ``adafruit_fancy123.HELLO_WORLD`` for clarity.
``adafruit_fancy123.FANCY123_HELLO_WORLD`` would be overly verbose.
Adding native modules Adding native modules
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------

@ -1 +1 @@
Subproject commit f993d5fac69f3a0cfa33988268666c462b72c0ec Subproject commit 9a8338b3bdaeac9eeb5b74d147107c67db33fdac

View File

@ -336,6 +336,9 @@ wifi_radio_error_t common_hal_wifi_radio_connect(wifi_radio_obj_t *self, uint8_t
return WIFI_RADIO_ERROR_NO_AP_FOUND; return WIFI_RADIO_ERROR_NO_AP_FOUND;
} }
return self->last_disconnect_reason; return self->last_disconnect_reason;
} else {
// We're connected, allow us to retry if we get disconnected.
self->retries_left = self->starting_retries;
} }
return WIFI_RADIO_ERROR_NONE; return WIFI_RADIO_ERROR_NONE;
} }

View File

@ -42,9 +42,6 @@
//| //|
//| :param ~microcontroller.Pin pin: Pin connected to the OneWire bus //| :param ~microcontroller.Pin pin: Pin connected to the OneWire bus
//| //|
//| .. note:: The OneWire class is available on `busio` and `bitbangio` in CircuitPython
//| 7.x for backwards compatibility but will be removed in CircuitPython 8.0.0.
//|
//| Read a short series of pulses:: //| Read a short series of pulses::
//| //|
//| import onewireio //| import onewireio

View File

@ -48,9 +48,6 @@
//| :param int frequency: Carrier signal frequency in Hertz //| :param int frequency: Carrier signal frequency in Hertz
//| :param int duty_cycle: 16-bit duty cycle of carrier frequency (0 - 65536) //| :param int duty_cycle: 16-bit duty cycle of carrier frequency (0 - 65536)
//| //|
//| For backwards compatibility, ``pin`` may be a PWMOut object used as the carrier. This
//| compatibility will be removed in CircuitPython 8.0.0.
//|
//| Send a short series of pulses:: //| Send a short series of pulses::
//| //|
//| import array //| import array
@ -82,14 +79,6 @@ STATIC mp_obj_t pulseio_pulseout_make_new(const mp_obj_type_t *type, size_t n_ar
const mcu_pin_obj_t *pin = args[ARG_pin].u_obj; const mcu_pin_obj_t *pin = args[ARG_pin].u_obj;
mp_int_t frequency = args[ARG_frequency].u_int; mp_int_t frequency = args[ARG_frequency].u_int;
mp_int_t duty_cycle = args[ARG_duty_cycle].u_int; mp_int_t duty_cycle = args[ARG_duty_cycle].u_int;
if (mp_obj_is_type(args[ARG_pin].u_obj, &pwmio_pwmout_type)) {
pwmio_pwmout_obj_t *pwmout = args[ARG_pin].u_obj;
duty_cycle = common_hal_pwmio_pwmout_get_duty_cycle(pwmout);
frequency = common_hal_pwmio_pwmout_get_frequency(pwmout);
pin = common_hal_pwmio_pwmout_get_pin(pwmout);
// Deinit the pin so we can use it.
common_hal_pwmio_pwmout_deinit(pwmout);
}
validate_obj_is_free_pin(MP_OBJ_FROM_PTR(pin)); validate_obj_is_free_pin(MP_OBJ_FROM_PTR(pin));
pulseio_pulseout_obj_t *self = m_new_obj(pulseio_pulseout_obj_t); pulseio_pulseout_obj_t *self = m_new_obj(pulseio_pulseout_obj_t);
self->base.type = &pulseio_pulseout_type; self->base.type = &pulseio_pulseout_type;

View File

@ -78,6 +78,7 @@ void common_hal_touchio_touchin_construct(touchio_touchin_obj_t *self, const mcu
uint16_t raw_reading = get_raw_reading(self); uint16_t raw_reading = get_raw_reading(self);
if (raw_reading == TIMEOUT_TICKS) { if (raw_reading == TIMEOUT_TICKS) {
common_hal_touchio_touchin_deinit(self);
mp_raise_ValueError(translate("No pulldown on pin; 1Mohm recommended")); mp_raise_ValueError(translate("No pulldown on pin; 1Mohm recommended"));
} }
self->threshold = raw_reading * 1.05 + 100; self->threshold = raw_reading * 1.05 + 100;

View File

@ -248,9 +248,6 @@ static void _websocket_send(_websocket *ws, const char *text, size_t len) {
_send_raw(&ws->socket, extended_len, 4); _send_raw(&ws->socket, extended_len, 4);
} }
_send_raw(&ws->socket, (const uint8_t *)text, len); _send_raw(&ws->socket, (const uint8_t *)text, len);
char copy[len];
memcpy(copy, text, len);
copy[len] = '\0';
} }
void websocket_write(const char *text, size_t len) { void websocket_write(const char *text, size_t len) {

View File

@ -96,8 +96,8 @@ def set_boards_to_build(build_all):
if p in IGNORE: if p in IGNORE:
continue continue
# Boards don't run tests so ignore those as well. # Boards don't run tests or docs so ignore those as well.
if p.startswith("tests"): if p.startswith("tests") or p.startswith("docs"):
continue continue
# As a (nearly) last resort, for some certain files, we compute the settings from the # As a (nearly) last resort, for some certain files, we compute the settings from the