Merge branch 'adafruit:main' into adcdma
This commit is contained in:
commit
ce24469848
|
@ -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
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue