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,),
|
||||
|
||||
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
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
|
@ -668,8 +707,24 @@ when using ``const()``, keep in mind these general guide lines:
|
|||
|
||||
- Always use via an import, ex: ``from micropython import const``
|
||||
- Limit use to global (module level) variables only.
|
||||
- If user will not need access to variable, prefix name with a leading
|
||||
underscore, ex: ``_SOME_CONST``.
|
||||
- Only used when the user will not need access to variable and prefix name with
|
||||
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
|
||||
------------------
|
||||
|
@ -751,6 +806,16 @@ properties.
|
|||
| ``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
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
|
|
|
@ -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 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;
|
||||
}
|
||||
|
|
|
@ -42,9 +42,6 @@
|
|||
//|
|
||||
//| :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::
|
||||
//|
|
||||
//| import onewireio
|
||||
|
|
|
@ -48,9 +48,6 @@
|
|||
//| :param int frequency: Carrier signal frequency in Hertz
|
||||
//| :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::
|
||||
//|
|
||||
//| 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;
|
||||
mp_int_t frequency = args[ARG_frequency].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));
|
||||
pulseio_pulseout_obj_t *self = m_new_obj(pulseio_pulseout_obj_t);
|
||||
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);
|
||||
if (raw_reading == TIMEOUT_TICKS) {
|
||||
common_hal_touchio_touchin_deinit(self);
|
||||
mp_raise_ValueError(translate("No pulldown on pin; 1Mohm recommended"));
|
||||
}
|
||||
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, (const uint8_t *)text, len);
|
||||
char copy[len];
|
||||
memcpy(copy, text, len);
|
||||
copy[len] = '\0';
|
||||
}
|
||||
|
||||
void websocket_write(const char *text, size_t len) {
|
||||
|
|
|
@ -96,8 +96,8 @@ def set_boards_to_build(build_all):
|
|||
if p in IGNORE:
|
||||
continue
|
||||
|
||||
# Boards don't run tests so ignore those as well.
|
||||
if p.startswith("tests"):
|
||||
# Boards don't run tests or docs so ignore those as well.
|
||||
if p.startswith("tests") or p.startswith("docs"):
|
||||
continue
|
||||
|
||||
# As a (nearly) last resort, for some certain files, we compute the settings from the
|
||||
|
|
Loading…
Reference in New Issue