Fixed whitespace in busio

This commit is contained in:
dherrada 2020-04-28 18:39:58 -04:00
parent 78ea3ff584
commit 724dcda3ec
No known key found for this signature in database
GPG Key ID: CE2ADBAB8775CE81
4 changed files with 311 additions and 311 deletions

View File

@ -37,32 +37,32 @@
#include "supervisor/shared/translate.h" #include "supervisor/shared/translate.h"
//|class I2C: //|class I2C:
//| """.. currentmodule:: busio //|""".. currentmodule:: busio
//| //|
//| :class:`I2C` --- Two wire serial protocol //|:class:`I2C` --- Two wire serial protocol
//| ------------------------------------------""" //|------------------------------------------"""
//| def __init__(self, scl: microcontroller.Pin, sda: microcontroller.Pin, *, frequency: int = 400000, timeout: int = 255): //|def __init__(self, scl: microcontroller.Pin, sda: microcontroller.Pin, *, frequency: int = 400000, timeout: int = 255):
//| """I2C is a two-wire protocol for communicating between devices. At the //|"""I2C is a two-wire protocol for communicating between devices. At the
//| physical level it consists of 2 wires: SCL and SDA, the clock and data //|physical level it consists of 2 wires: SCL and SDA, the clock and data
//| lines respectively. //|lines respectively.
//| //|
//| .. seealso:: Using this class directly requires careful lock management. //|.. seealso:: Using this class directly requires careful lock management.
//| Instead, use :class:`~adafruit_bus_device.i2c_device.I2CDevice` to //|Instead, use :class:`~adafruit_bus_device.i2c_device.I2CDevice` to
//| manage locks. //|manage locks.
//| //|
//| .. seealso:: Using this class to directly read registers requires manual //|.. seealso:: Using this class to directly read registers requires manual
//| bit unpacking. Instead, use an existing driver or make one with //|bit unpacking. Instead, use an existing driver or make one with
//| :ref:`Register <register-module-reference>` data descriptors. //|:ref:`Register <register-module-reference>` data descriptors.
//| //|
//| :param ~microcontroller.Pin scl: The clock pin //|:param ~microcontroller.Pin scl: The clock pin
//| :param ~microcontroller.Pin sda: The data pin //|:param ~microcontroller.Pin sda: The data pin
//| :param int frequency: The clock frequency in Hertz //|:param int frequency: The clock frequency in Hertz
//| :param int timeout: The maximum clock stretching timeut - (used only for bitbangio.I2C; ignored for busio.I2C) //|:param int timeout: The maximum clock stretching timeut - (used only for bitbangio.I2C; ignored for busio.I2C)
//| //|
//| .. note:: On the nRF52840, only one I2C object may be created, //|.. note:: On the nRF52840, only one I2C object may be created,
//| except on the Circuit Playground Bluefruit, which allows two, //|except on the Circuit Playground Bluefruit, which allows two,
//| one for the onboard accelerometer, and one for offboard use.""" //|one for the onboard accelerometer, and one for offboard use."""
//| ... //|...
STATIC mp_obj_t busio_i2c_make_new(const mp_obj_type_t *type, size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) { STATIC mp_obj_t busio_i2c_make_new(const mp_obj_type_t *type, size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
busio_i2c_obj_t *self = m_new_obj(busio_i2c_obj_t); busio_i2c_obj_t *self = m_new_obj(busio_i2c_obj_t);
self->base.type = &busio_i2c_type; self->base.type = &busio_i2c_type;
@ -83,9 +83,9 @@ STATIC mp_obj_t busio_i2c_make_new(const mp_obj_type_t *type, size_t n_args, con
return (mp_obj_t)self; return (mp_obj_t)self;
} }
//| def deinit(self, ) -> Any: //|def deinit(self, ) -> Any:
//| """Releases control of the underlying hardware so other classes can use it.""" //|"""Releases control of the underlying hardware so other classes can use it."""
//| ... //|...
STATIC mp_obj_t busio_i2c_obj_deinit(mp_obj_t self_in) { STATIC mp_obj_t busio_i2c_obj_deinit(mp_obj_t self_in) {
busio_i2c_obj_t *self = MP_OBJ_TO_PTR(self_in); busio_i2c_obj_t *self = MP_OBJ_TO_PTR(self_in);
common_hal_busio_i2c_deinit(self); common_hal_busio_i2c_deinit(self);
@ -99,15 +99,15 @@ STATIC void check_for_deinit(busio_i2c_obj_t *self) {
} }
} }
//| def __enter__(self, ) -> Any: //|def __enter__(self, ) -> Any:
//| """No-op used in Context Managers.""" //|"""No-op used in Context Managers."""
//| ... //|...
// Provided by context manager helper. // Provided by context manager helper.
//| def __exit__(self, ) -> Any: //|def __exit__(self, ) -> Any:
//| """Automatically deinitializes the hardware on context exit. See //|"""Automatically deinitializes the hardware on context exit. See
//| :ref:`lifetime-and-contextmanagers` for more info.""" //|:ref:`lifetime-and-contextmanagers` for more info."""
//| ... //|...
STATIC mp_obj_t busio_i2c_obj___exit__(size_t n_args, const mp_obj_t *args) { STATIC mp_obj_t busio_i2c_obj___exit__(size_t n_args, const mp_obj_t *args) {
(void)n_args; (void)n_args;
common_hal_busio_i2c_deinit(args[0]); common_hal_busio_i2c_deinit(args[0]);
@ -122,13 +122,13 @@ static void check_lock(busio_i2c_obj_t *self) {
} }
} }
//| def scan(self, ) -> Any: //|def scan(self, ) -> Any:
//| """Scan all I2C addresses between 0x08 and 0x77 inclusive and return a //|"""Scan all I2C addresses between 0x08 and 0x77 inclusive and return a
//| list of those that respond. //|list of those that respond.
//| //|
//| :return: List of device ids on the I2C bus //|:return: List of device ids on the I2C bus
//| :rtype: list""" //|:rtype: list"""
//| ... //|...
STATIC mp_obj_t busio_i2c_scan(mp_obj_t self_in) { STATIC mp_obj_t busio_i2c_scan(mp_obj_t self_in) {
busio_i2c_obj_t *self = MP_OBJ_TO_PTR(self_in); busio_i2c_obj_t *self = MP_OBJ_TO_PTR(self_in);
check_for_deinit(self); check_for_deinit(self);
@ -145,11 +145,11 @@ STATIC mp_obj_t busio_i2c_scan(mp_obj_t self_in) {
} }
MP_DEFINE_CONST_FUN_OBJ_1(busio_i2c_scan_obj, busio_i2c_scan); MP_DEFINE_CONST_FUN_OBJ_1(busio_i2c_scan_obj, busio_i2c_scan);
//| def try_lock(self, ) -> Any: //|def try_lock(self, ) -> Any:
//| """Attempts to grab the I2C lock. Returns True on success. //|"""Attempts to grab the I2C lock. Returns True on success.
//| :return: True when lock has been grabbed //|:return: True when lock has been grabbed
//| :rtype: bool""" //|:rtype: bool"""
//| ... //|...
STATIC mp_obj_t busio_i2c_obj_try_lock(mp_obj_t self_in) { STATIC mp_obj_t busio_i2c_obj_try_lock(mp_obj_t self_in) {
busio_i2c_obj_t *self = MP_OBJ_TO_PTR(self_in); busio_i2c_obj_t *self = MP_OBJ_TO_PTR(self_in);
check_for_deinit(self); check_for_deinit(self);
@ -157,9 +157,9 @@ STATIC mp_obj_t busio_i2c_obj_try_lock(mp_obj_t self_in) {
} }
MP_DEFINE_CONST_FUN_OBJ_1(busio_i2c_try_lock_obj, busio_i2c_obj_try_lock); MP_DEFINE_CONST_FUN_OBJ_1(busio_i2c_try_lock_obj, busio_i2c_obj_try_lock);
//| def unlock(self, ) -> Any: //|def unlock(self, ) -> Any:
//| """Releases the I2C lock.""" //|"""Releases the I2C lock."""
//| ... //|...
STATIC mp_obj_t busio_i2c_obj_unlock(mp_obj_t self_in) { STATIC mp_obj_t busio_i2c_obj_unlock(mp_obj_t self_in) {
busio_i2c_obj_t *self = MP_OBJ_TO_PTR(self_in); busio_i2c_obj_t *self = MP_OBJ_TO_PTR(self_in);
check_for_deinit(self); check_for_deinit(self);
@ -168,20 +168,20 @@ STATIC mp_obj_t busio_i2c_obj_unlock(mp_obj_t self_in) {
} }
MP_DEFINE_CONST_FUN_OBJ_1(busio_i2c_unlock_obj, busio_i2c_obj_unlock); MP_DEFINE_CONST_FUN_OBJ_1(busio_i2c_unlock_obj, busio_i2c_obj_unlock);
//| def readfrom_into(self, address: int, buffer: bytearray, *, start: int = 0, end: int = None) -> Any: //|def readfrom_into(self, address: int, buffer: bytearray, *, start: int = 0, end: int = None) -> Any:
//| """Read into ``buffer`` from the slave specified by ``address``. //|"""Read into ``buffer`` from the slave specified by ``address``.
//| The number of bytes read will be the length of ``buffer``. //|The number of bytes read will be the length of ``buffer``.
//| At least one byte must be read. //|At least one byte must be read.
//| //|
//| If ``start`` or ``end`` is provided, then the buffer will be sliced //|If ``start`` or ``end`` is provided, then the buffer will be sliced
//| as if ``buffer[start:end]``. This will not cause an allocation like //|as if ``buffer[start:end]``. This will not cause an allocation like
//| ``buf[start:end]`` will so it saves memory. //|``buf[start:end]`` will so it saves memory.
//| //|
//| :param int address: 7-bit device address //|:param int address: 7-bit device address
//| :param bytearray buffer: buffer to write into //|:param bytearray buffer: buffer to write into
//| :param int start: Index to start writing at //|:param int start: Index to start writing at
//| :param int end: Index to write up to but not include. Defaults to ``len(buffer)``""" //|:param int end: Index to write up to but not include. Defaults to ``len(buffer)``"""
//| ... //|...
// Shared arg parsing for readfrom_into and writeto_then_readfrom. // Shared arg parsing for readfrom_into and writeto_then_readfrom.
STATIC void readfrom(busio_i2c_obj_t *self, mp_int_t address, mp_obj_t buffer, int32_t start, mp_int_t end) { STATIC void readfrom(busio_i2c_obj_t *self, mp_int_t address, mp_obj_t buffer, int32_t start, mp_int_t end) {
mp_buffer_info_t bufinfo; mp_buffer_info_t bufinfo;
@ -219,26 +219,26 @@ STATIC mp_obj_t busio_i2c_readfrom_into(size_t n_args, const mp_obj_t *pos_args,
} }
MP_DEFINE_CONST_FUN_OBJ_KW(busio_i2c_readfrom_into_obj, 3, busio_i2c_readfrom_into); MP_DEFINE_CONST_FUN_OBJ_KW(busio_i2c_readfrom_into_obj, 3, busio_i2c_readfrom_into);
//| def writeto(self, address: int, buffer: bytearray, *, start: int = 0, end: int = None, stop: bool = True) -> Any: //|def writeto(self, address: int, buffer: bytearray, *, start: int = 0, end: int = None, stop: bool = True) -> Any:
//| """Write the bytes from ``buffer`` to the slave specified by ``address``. //|"""Write the bytes from ``buffer`` to the slave specified by ``address``.
//| Transmits a stop bit when stop is True. Setting stop=False is deprecated and stop will be //|Transmits a stop bit when stop is True. Setting stop=False is deprecated and stop will be
//| removed in CircuitPython 6.x. Use `writeto_then_readfrom` when needing a write, no stop and //|removed in CircuitPython 6.x. Use `writeto_then_readfrom` when needing a write, no stop and
//| repeated start before a read. //|repeated start before a read.
//| //|
//| If ``start`` or ``end`` is provided, then the buffer will be sliced //|If ``start`` or ``end`` is provided, then the buffer will be sliced
//| as if ``buffer[start:end]``. This will not cause an allocation like //|as if ``buffer[start:end]``. This will not cause an allocation like
//| ``buffer[start:end]`` will so it saves memory. //|``buffer[start:end]`` will so it saves memory.
//| //|
//| Writing a buffer or slice of length zero is permitted, as it can be used //|Writing a buffer or slice of length zero is permitted, as it can be used
//| to poll for the existence of a device. //|to poll for the existence of a device.
//| //|
//| :param int address: 7-bit device address //|:param int address: 7-bit device address
//| :param bytearray buffer: buffer containing the bytes to write //|:param bytearray buffer: buffer containing the bytes to write
//| :param int start: Index to start writing from //|:param int start: Index to start writing from
//| :param int end: Index to read up to but not include. Defaults to ``len(buffer)`` //|:param int end: Index to read up to but not include. Defaults to ``len(buffer)``
//| :param bool stop: If true, output an I2C stop condition after the buffer is written. //|:param bool stop: If true, output an I2C stop condition after the buffer is written.
//| Deprecated. Will be removed in 6.x and act as stop=True.""" //|Deprecated. Will be removed in 6.x and act as stop=True."""
//| ... //|...
// Shared arg parsing for writeto and writeto_then_readfrom. // Shared arg parsing for writeto and writeto_then_readfrom.
STATIC void writeto(busio_i2c_obj_t *self, mp_int_t address, mp_obj_t buffer, int32_t start, mp_int_t end, bool stop) { STATIC void writeto(busio_i2c_obj_t *self, mp_int_t address, mp_obj_t buffer, int32_t start, mp_int_t end, bool stop) {
// get the buffer to write the data from // get the buffer to write the data from
@ -277,23 +277,23 @@ STATIC mp_obj_t busio_i2c_writeto(size_t n_args, const mp_obj_t *pos_args, mp_ma
} }
STATIC MP_DEFINE_CONST_FUN_OBJ_KW(busio_i2c_writeto_obj, 1, busio_i2c_writeto); STATIC MP_DEFINE_CONST_FUN_OBJ_KW(busio_i2c_writeto_obj, 1, busio_i2c_writeto);
//| def writeto_then_readfrom(self, address: int, out_buffer: bytearray, in_buffer: bytearray, *, out_start: int = 0, out_end: int = None, in_start: int = 0, in_end: int = None) -> Any: //|def writeto_then_readfrom(self, address: int, out_buffer: bytearray, in_buffer: bytearray, *, out_start: int = 0, out_end: int = None, in_start: int = 0, in_end: int = None) -> Any:
//| """Write the bytes from ``out_buffer`` to the slave specified by ``address``, generate no stop //|"""Write the bytes from ``out_buffer`` to the slave specified by ``address``, generate no stop
//| bit, generate a repeated start and read into ``in_buffer``. ``out_buffer`` and //|bit, generate a repeated start and read into ``in_buffer``. ``out_buffer`` and
//| ``in_buffer`` can be the same buffer because they are used sequentially. //|``in_buffer`` can be the same buffer because they are used sequentially.
//| //|
//| If ``start`` or ``end`` is provided, then the corresponding buffer will be sliced //|If ``start`` or ``end`` is provided, then the corresponding buffer will be sliced
//| as if ``buffer[start:end]``. This will not cause an allocation like ``buf[start:end]`` //|as if ``buffer[start:end]``. This will not cause an allocation like ``buf[start:end]``
//| will so it saves memory. //|will so it saves memory.
//| //|
//| :param int address: 7-bit device address //|:param int address: 7-bit device address
//| :param bytearray out_buffer: buffer containing the bytes to write //|:param bytearray out_buffer: buffer containing the bytes to write
//| :param bytearray in_buffer: buffer to write into //|:param bytearray in_buffer: buffer to write into
//| :param int out_start: Index to start writing from //|:param int out_start: Index to start writing from
//| :param int out_end: Index to read up to but not include. Defaults to ``len(buffer)`` //|:param int out_end: Index to read up to but not include. Defaults to ``len(buffer)``
//| :param int in_start: Index to start writing at //|:param int in_start: Index to start writing at
//| :param int in_end: Index to write up to but not include. Defaults to ``len(buffer)``""" //|:param int in_end: Index to write up to but not include. Defaults to ``len(buffer)``"""
//| ... //|...
STATIC mp_obj_t busio_i2c_writeto_then_readfrom(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) { STATIC mp_obj_t busio_i2c_writeto_then_readfrom(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
enum { ARG_address, ARG_out_buffer, ARG_in_buffer, ARG_out_start, ARG_out_end, ARG_in_start, ARG_in_end }; enum { ARG_address, ARG_out_buffer, ARG_in_buffer, ARG_out_start, ARG_out_end, ARG_in_start, ARG_in_end };
static const mp_arg_t allowed_args[] = { static const mp_arg_t allowed_args[] = {

View File

@ -35,35 +35,35 @@
#include "shared-bindings/util.h" #include "shared-bindings/util.h"
//|class OneWire: //|class OneWire:
//| """.. currentmodule:: busio //|""".. currentmodule:: busio
//| //|
//| :class:`OneWire` -- Lowest-level of the Maxim OneWire protocol //|:class:`OneWire` -- Lowest-level of the Maxim OneWire protocol
//| =================================================================""" //|================================================================="""
//| //|
//| def __init__(self, pin: microcontroller.Pin): //|__init__(self, pin: microcontroller.Pin):
//| """:class:`~busio.OneWire` implements the timing-sensitive foundation of the Maxim //|""":class:`~busio.OneWire` implements the timing-sensitive foundation of the Maxim
//| (formerly Dallas Semi) OneWire protocol. //|(formerly Dallas Semi) OneWire protocol.
//| //|
//| Protocol definition is here: https://www.maximintegrated.com/en/app-notes/index.mvp/id/126 //|Protocol definition is here: https://www.maximintegrated.com/en/app-notes/index.mvp/id/126
//| //|
//| .. class:: OneWire(pin) //|.. class:: OneWire(pin)
//| //|
//| Create a OneWire object associated with the given pin. The object //|Create a OneWire object associated with the given pin. The object
//| implements the lowest level timing-sensitive bits of the protocol. //|implements the lowest level timing-sensitive bits of the protocol.
//| //|
//| :param ~microcontroller.Pin pin: Pin connected to the OneWire bus //|:param ~microcontroller.Pin pin: Pin connected to the OneWire bus
//| //|
//| Read a short series of pulses:: //|Read a short series of pulses::
//| //|
//| import busio //|import busio
//| import board //|import board
//| //|
//| onewire = busio.OneWire(board.D7) //|onewire = busio.OneWire(board.D7)
//| onewire.reset() //|onewire.reset()
//| onewire.write_bit(True) //|onewire.write_bit(True)
//| onewire.write_bit(False) //|onewire.write_bit(False)
//| print(onewire.read_bit())""" //|print(onewire.read_bit())"""
//| ... //|...
STATIC mp_obj_t busio_onewire_make_new(const mp_obj_type_t *type, size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) { STATIC mp_obj_t busio_onewire_make_new(const mp_obj_type_t *type, size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
enum { ARG_pin }; enum { ARG_pin };
static const mp_arg_t allowed_args[] = { static const mp_arg_t allowed_args[] = {
@ -80,9 +80,9 @@ STATIC mp_obj_t busio_onewire_make_new(const mp_obj_type_t *type, size_t n_args,
return MP_OBJ_FROM_PTR(self); return MP_OBJ_FROM_PTR(self);
} }
//| def deinit(self, ) -> Any: //|def deinit(self, ) -> Any:
//| """Deinitialize the OneWire bus and release any hardware resources for reuse.""" //|"""Deinitialize the OneWire bus and release any hardware resources for reuse."""
//| ... //|...
STATIC mp_obj_t busio_onewire_deinit(mp_obj_t self_in) { STATIC mp_obj_t busio_onewire_deinit(mp_obj_t self_in) {
busio_onewire_obj_t *self = MP_OBJ_TO_PTR(self_in); busio_onewire_obj_t *self = MP_OBJ_TO_PTR(self_in);
common_hal_busio_onewire_deinit(self); common_hal_busio_onewire_deinit(self);
@ -96,15 +96,15 @@ STATIC void check_for_deinit(busio_onewire_obj_t *self) {
} }
} }
//| def __enter__(self, ) -> Any: //|def __enter__(self, ) -> Any:
//| """No-op used by Context Managers.""" //|"""No-op used by Context Managers."""
//| ... //|...
// Provided by context manager helper. // Provided by context manager helper.
//| def __exit__(self, ) -> Any: //|def __exit__(self, ) -> Any:
//| """Automatically deinitializes the hardware when exiting a context. See //|"""Automatically deinitializes the hardware when exiting a context. See
//| :ref:`lifetime-and-contextmanagers` for more info.""" //|:ref:`lifetime-and-contextmanagers` for more info."""
//| ... //|...
STATIC mp_obj_t busio_onewire_obj___exit__(size_t n_args, const mp_obj_t *args) { STATIC mp_obj_t busio_onewire_obj___exit__(size_t n_args, const mp_obj_t *args) {
(void)n_args; (void)n_args;
common_hal_busio_onewire_deinit(args[0]); common_hal_busio_onewire_deinit(args[0]);
@ -112,12 +112,12 @@ STATIC mp_obj_t busio_onewire_obj___exit__(size_t n_args, const mp_obj_t *args)
} }
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(busio_onewire___exit___obj, 4, 4, busio_onewire_obj___exit__); STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(busio_onewire___exit___obj, 4, 4, busio_onewire_obj___exit__);
//| def reset(self, ) -> Any: //|def reset(self, ) -> Any:
//| """Reset the OneWire bus and read presence //|"""Reset the OneWire bus and read presence
//| //|
//| :returns: False when at least one device is present //|:returns: False when at least one device is present
//| :rtype: bool""" //|:rtype: bool"""
//| ... //|...
STATIC mp_obj_t busio_onewire_obj_reset(mp_obj_t self_in) { STATIC mp_obj_t busio_onewire_obj_reset(mp_obj_t self_in) {
busio_onewire_obj_t *self = MP_OBJ_TO_PTR(self_in); busio_onewire_obj_t *self = MP_OBJ_TO_PTR(self_in);
check_for_deinit(self); check_for_deinit(self);
@ -126,12 +126,12 @@ STATIC mp_obj_t busio_onewire_obj_reset(mp_obj_t self_in) {
} }
MP_DEFINE_CONST_FUN_OBJ_1(busio_onewire_reset_obj, busio_onewire_obj_reset); MP_DEFINE_CONST_FUN_OBJ_1(busio_onewire_reset_obj, busio_onewire_obj_reset);
//| def read_bit(self, ) -> Any: //|def read_bit(self, ) -> Any:
//| """Read in a bit //|"""Read in a bit
//| //|
//| :returns: bit state read //|:returns: bit state read
//| :rtype: bool""" //|:rtype: bool"""
//| ... //|...
STATIC mp_obj_t busio_onewire_obj_read_bit(mp_obj_t self_in) { STATIC mp_obj_t busio_onewire_obj_read_bit(mp_obj_t self_in) {
busio_onewire_obj_t *self = MP_OBJ_TO_PTR(self_in); busio_onewire_obj_t *self = MP_OBJ_TO_PTR(self_in);
check_for_deinit(self); check_for_deinit(self);
@ -140,9 +140,9 @@ STATIC mp_obj_t busio_onewire_obj_read_bit(mp_obj_t self_in) {
} }
MP_DEFINE_CONST_FUN_OBJ_1(busio_onewire_read_bit_obj, busio_onewire_obj_read_bit); MP_DEFINE_CONST_FUN_OBJ_1(busio_onewire_read_bit_obj, busio_onewire_obj_read_bit);
//| def write_bit(self, value: Any) -> Any: //|def write_bit(self, value: Any) -> Any:
//| """Write out a bit based on value.""" //|"""Write out a bit based on value."""
//| ... //|...
STATIC mp_obj_t busio_onewire_obj_write_bit(mp_obj_t self_in, mp_obj_t bool_obj) { STATIC mp_obj_t busio_onewire_obj_write_bit(mp_obj_t self_in, mp_obj_t bool_obj) {
busio_onewire_obj_t *self = MP_OBJ_TO_PTR(self_in); busio_onewire_obj_t *self = MP_OBJ_TO_PTR(self_in);
check_for_deinit(self); check_for_deinit(self);

View File

@ -42,42 +42,42 @@
//|class SPI: //|class SPI:
//| """.. currentmodule:: busio //|""".. currentmodule:: busio
//| //|
//| `SPI` -- a 3-4 wire serial protocol //|`SPI` -- a 3-4 wire serial protocol
//| ----------------------------------------------- //|-----------------------------------------------
//| //|
//| SPI is a serial protocol that has exclusive pins for data in and out of the //|SPI is a serial protocol that has exclusive pins for data in and out of the
//| master. It is typically faster than :py:class:`~busio.I2C` because a //|master. It is typically faster than :py:class:`~busio.I2C` because a
//| separate pin is used to control the active slave rather than a transitted //|separate pin is used to control the active slave rather than a transitted
//| address. This class only manages three of the four SPI lines: `!clock`, //|address. This class only manages three of the four SPI lines: `!clock`,
//| `!MOSI`, `!MISO`. Its up to the client to manage the appropriate slave //|`!MOSI`, `!MISO`. Its up to the client to manage the appropriate slave
//| select line. (This is common because multiple slaves can share the `!clock`, //|select line. (This is common because multiple slaves can share the `!clock`,
//| `!MOSI` and `!MISO` lines and therefore the hardware.)""" //|`!MOSI` and `!MISO` lines and therefore the hardware.)"""
//| //|
//| def __init__(self, clock: microcontroller.Pin, MOSI: microcontroller.Pin = None, MISO: microcontroller.Pin = None): //|def __init__(self, clock: microcontroller.Pin, MOSI: microcontroller.Pin = None, MISO: microcontroller.Pin = None):
//| //|
//| """Construct an SPI object on the given pins. //|"""Construct an SPI object on the given pins.
//| //|
//| ..note:: The SPI peripherals allocated in order of desirability, if possible, //|..note:: The SPI peripherals allocated in order of desirability, if possible,
//| such as highest speed and not shared use first. For instance, on the nRF52840, //|such as highest speed and not shared use first. For instance, on the nRF52840,
//| there is a single 32MHz SPI peripheral, and multiple 8MHz peripherals, //|there is a single 32MHz SPI peripheral, and multiple 8MHz peripherals,
//| some of which may also be used for I2C. The 32MHz SPI peripheral is returned //|some of which may also be used for I2C. The 32MHz SPI peripheral is returned
//| first, then the exclusive 8MHz SPI peripheral, and finally the shared 8MHz //|first, then the exclusive 8MHz SPI peripheral, and finally the shared 8MHz
//| peripherals. //|peripherals.
//| //|
//| .. seealso:: Using this class directly requires careful lock management. //|.. seealso:: Using this class directly requires careful lock management.
//| Instead, use :class:`~adafruit_bus_device.spi_device.SPIDevice` to //|Instead, use :class:`~adafruit_bus_device.spi_device.SPIDevice` to
//| manage locks. //|manage locks.
//| //|
//| .. seealso:: Using this class to directly read registers requires manual //|.. seealso:: Using this class to directly read registers requires manual
//| bit unpacking. Instead, use an existing driver or make one with //|bit unpacking. Instead, use an existing driver or make one with
//| :ref:`Register <register-module-reference>` data descriptors. //|:ref:`Register <register-module-reference>` data descriptors.
//| //|
//| :param ~microcontroller.Pin clock: the pin to use for the clock. //|:param ~microcontroller.Pin clock: the pin to use for the clock.
//| :param ~microcontroller.Pin MOSI: the Master Out Slave In pin. //|:param ~microcontroller.Pin MOSI: the Master Out Slave In pin.
//| :param ~microcontroller.Pin MISO: the Master In Slave Out pin.""" //|:param ~microcontroller.Pin MISO: the Master In Slave Out pin."""
//| ... //|...
// TODO(tannewt): Support LSB SPI. // TODO(tannewt): Support LSB SPI.
@ -101,9 +101,9 @@ STATIC mp_obj_t busio_spi_make_new(const mp_obj_type_t *type, size_t n_args, con
return MP_OBJ_FROM_PTR(self); return MP_OBJ_FROM_PTR(self);
} }
//| def deinit(self, ) -> Any: //|def deinit(self, ) -> Any:
//| """Turn off the SPI bus.""" //|"""Turn off the SPI bus."""
//| ... //|...
STATIC mp_obj_t busio_spi_obj_deinit(mp_obj_t self_in) { STATIC mp_obj_t busio_spi_obj_deinit(mp_obj_t self_in) {
busio_spi_obj_t *self = MP_OBJ_TO_PTR(self_in); busio_spi_obj_t *self = MP_OBJ_TO_PTR(self_in);
common_hal_busio_spi_deinit(self); common_hal_busio_spi_deinit(self);
@ -111,15 +111,15 @@ STATIC mp_obj_t busio_spi_obj_deinit(mp_obj_t self_in) {
} }
MP_DEFINE_CONST_FUN_OBJ_1(busio_spi_deinit_obj, busio_spi_obj_deinit); MP_DEFINE_CONST_FUN_OBJ_1(busio_spi_deinit_obj, busio_spi_obj_deinit);
//| def __enter__(self, ) -> Any: //|def __enter__(self, ) -> Any:
//| """No-op used by Context Managers. //|"""No-op used by Context Managers.
//| Provided by context manager helper.""" //|Provided by context manager helper."""
//| ... //|...
//| def __exit__(self, ) -> Any: //|def __exit__(self, ) -> Any:
//| """Automatically deinitializes the hardware when exiting a context. See //|"""Automatically deinitializes the hardware when exiting a context. See
//| :ref:`lifetime-and-contextmanagers` for more info.""" //|:ref:`lifetime-and-contextmanagers` for more info."""
//| ... //|...
STATIC mp_obj_t busio_spi_obj___exit__(size_t n_args, const mp_obj_t *args) { STATIC mp_obj_t busio_spi_obj___exit__(size_t n_args, const mp_obj_t *args) {
(void)n_args; (void)n_args;
common_hal_busio_spi_deinit(args[0]); common_hal_busio_spi_deinit(args[0]);
@ -140,28 +140,28 @@ STATIC void check_for_deinit(busio_spi_obj_t *self) {
} }
} }
//| def configure(self, *, baudrate: int = 100000, polarity: int = 0, phase: int = 0, bits: int = 8) -> Any: //|def configure(self, *, baudrate: int = 100000, polarity: int = 0, phase: int = 0, bits: int = 8) -> Any:
//| """Configures the SPI bus. The SPI object must be locked. //|"""Configures the SPI bus. The SPI object must be locked.
//| //|
//| :param int baudrate: the desired clock rate in Hertz. The actual clock rate may be higher or lower //|:param int baudrate: the desired clock rate in Hertz. The actual clock rate may be higher or lower
//| due to the granularity of available clock settings. //|due to the granularity of available clock settings.
//| Check the `frequency` attribute for the actual clock rate. //|Check the `frequency` attribute for the actual clock rate.
//| :param int polarity: the base state of the clock line (0 or 1) //|:param int polarity: the base state of the clock line (0 or 1)
//| :param int phase: the edge of the clock that data is captured. First (0) //|:param int phase: the edge of the clock that data is captured. First (0)
//| or second (1). Rising or falling depends on clock polarity. //|or second (1). Rising or falling depends on clock polarity.
//| :param int bits: the number of bits per word //|:param int bits: the number of bits per word
//| //|
//| .. note:: On the SAMD21, it is possible to set the baudrate to 24 MHz, but that //|.. note:: On the SAMD21, it is possible to set the baudrate to 24 MHz, but that
//| speed is not guaranteed to work. 12 MHz is the next available lower speed, and is //|speed is not guaranteed to work. 12 MHz is the next available lower speed, and is
//| within spec for the SAMD21. //|within spec for the SAMD21.
//| //|
//| .. note:: On the nRF52840, these baudrates are available: 125kHz, 250kHz, 1MHz, 2MHz, 4MHz, //|.. note:: On the nRF52840, these baudrates are available: 125kHz, 250kHz, 1MHz, 2MHz, 4MHz,
//| and 8MHz. //|and 8MHz.
//| If you pick a a baudrate other than one of these, the nearest lower //|If you pick a a baudrate other than one of these, the nearest lower
//| baudrate will be chosen, with a minimum of 125kHz. //|baudrate will be chosen, with a minimum of 125kHz.
//| Two SPI objects may be created, except on the Circuit Playground Bluefruit, //|Two SPI objects may be created, except on the Circuit Playground Bluefruit,
//| which allows only one (to allow for an additional I2C object).""" //|which allows only one (to allow for an additional I2C object)."""
//| ... //|...
STATIC mp_obj_t busio_spi_configure(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) { STATIC mp_obj_t busio_spi_configure(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
enum { ARG_baudrate, ARG_polarity, ARG_phase, ARG_bits }; enum { ARG_baudrate, ARG_polarity, ARG_phase, ARG_bits };
@ -198,12 +198,12 @@ STATIC mp_obj_t busio_spi_configure(size_t n_args, const mp_obj_t *pos_args, mp_
} }
MP_DEFINE_CONST_FUN_OBJ_KW(busio_spi_configure_obj, 1, busio_spi_configure); MP_DEFINE_CONST_FUN_OBJ_KW(busio_spi_configure_obj, 1, busio_spi_configure);
//| def try_lock(self, ) -> Any: //|def try_lock(self, ) -> Any:
//| """Attempts to grab the SPI lock. Returns True on success. //|"""Attempts to grab the SPI lock. Returns True on success.
//| //|
//| :return: True when lock has been grabbed //|:return: True when lock has been grabbed
//| :rtype: bool""" //|:rtype: bool"""
//| ... //|...
STATIC mp_obj_t busio_spi_obj_try_lock(mp_obj_t self_in) { STATIC mp_obj_t busio_spi_obj_try_lock(mp_obj_t self_in) {
busio_spi_obj_t *self = MP_OBJ_TO_PTR(self_in); busio_spi_obj_t *self = MP_OBJ_TO_PTR(self_in);
@ -211,9 +211,9 @@ STATIC mp_obj_t busio_spi_obj_try_lock(mp_obj_t self_in) {
} }
MP_DEFINE_CONST_FUN_OBJ_1(busio_spi_try_lock_obj, busio_spi_obj_try_lock); MP_DEFINE_CONST_FUN_OBJ_1(busio_spi_try_lock_obj, busio_spi_obj_try_lock);
//| def unlock(self, ) -> Any: //|unlock(self, ) -> Any:
//| """Releases the SPI lock.""" //|"""Releases the SPI lock."""
//| ... //|...
STATIC mp_obj_t busio_spi_obj_unlock(mp_obj_t self_in) { STATIC mp_obj_t busio_spi_obj_unlock(mp_obj_t self_in) {
busio_spi_obj_t *self = MP_OBJ_TO_PTR(self_in); busio_spi_obj_t *self = MP_OBJ_TO_PTR(self_in);
@ -223,14 +223,14 @@ STATIC mp_obj_t busio_spi_obj_unlock(mp_obj_t self_in) {
} }
MP_DEFINE_CONST_FUN_OBJ_1(busio_spi_unlock_obj, busio_spi_obj_unlock); MP_DEFINE_CONST_FUN_OBJ_1(busio_spi_unlock_obj, busio_spi_obj_unlock);
//| def write(self, buffer: bytearray, *, start: Any = 0, end: int = None) -> Any: ... //|def write(self, buffer: bytearray, *, start: Any = 0, end: int = None) -> Any: ...
//| """Write the data contained in ``buffer``. The SPI object must be locked. //|"""Write the data contained in ``buffer``. The SPI object must be locked.
//| If the buffer is empty, nothing happens. //|If the buffer is empty, nothing happens.
//| //|
//| :param bytearray buffer: Write out the data in this buffer //|:param bytearray buffer: Write out the data in this buffer
//| :param int start: Start of the slice of ``buffer`` to write out: ``buffer[start:end]`` //|:param int start: Start of the slice of ``buffer`` to write out: ``buffer[start:end]``
//| :param int end: End of the slice; this index is not included. Defaults to ``len(buffer)``""" //|:param int end: End of the slice; this index is not included. Defaults to ``len(buffer)``"""
//| ... //|...
STATIC mp_obj_t busio_spi_write(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) { STATIC mp_obj_t busio_spi_write(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
enum { ARG_buffer, ARG_start, ARG_end }; enum { ARG_buffer, ARG_start, ARG_end };
@ -264,16 +264,16 @@ STATIC mp_obj_t busio_spi_write(size_t n_args, const mp_obj_t *pos_args, mp_map_
MP_DEFINE_CONST_FUN_OBJ_KW(busio_spi_write_obj, 2, busio_spi_write); MP_DEFINE_CONST_FUN_OBJ_KW(busio_spi_write_obj, 2, busio_spi_write);
//| def readinto(self, buffer: bytearray, *, start: Any = 0, end: int = None, write_value: int = 0) -> Any: //|def readinto(self, buffer: bytearray, *, start: Any = 0, end: int = None, write_value: int = 0) -> Any:
//| """Read into ``buffer`` while writing ``write_value`` for each byte read. //|"""Read into ``buffer`` while writing ``write_value`` for each byte read.
//| The SPI object must be locked. //|The SPI object must be locked.
//| If the number of bytes to read is 0, nothing happens. //|If the number of bytes to read is 0, nothing happens.
//| //|
//| :param bytearray buffer: Read data into this buffer //|:param bytearray buffer: Read data into this buffer
//| :param int start: Start of the slice of ``buffer`` to read into: ``buffer[start:end]`` //|:param int start: Start of the slice of ``buffer`` to read into: ``buffer[start:end]``
//| :param int end: End of the slice; this index is not included. Defaults to ``len(buffer)`` //|:param int end: End of the slice; this index is not included. Defaults to ``len(buffer)``
//| :param int write_value: Value to write while reading. (Usually ignored.)""" //|:param int write_value: Value to write while reading. (Usually ignored.)"""
//| ... //|...
STATIC mp_obj_t busio_spi_readinto(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) { STATIC mp_obj_t busio_spi_readinto(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
enum { ARG_buffer, ARG_start, ARG_end, ARG_write_value }; enum { ARG_buffer, ARG_start, ARG_end, ARG_write_value };
@ -307,20 +307,20 @@ STATIC mp_obj_t busio_spi_readinto(size_t n_args, const mp_obj_t *pos_args, mp_m
} }
MP_DEFINE_CONST_FUN_OBJ_KW(busio_spi_readinto_obj, 2, busio_spi_readinto); MP_DEFINE_CONST_FUN_OBJ_KW(busio_spi_readinto_obj, 2, busio_spi_readinto);
//| def write_readinto(self, buffer_out: bytearray, buffer_in: bytearray, *, out_start: Any = 0, out_end: int = None, in_start: Any = 0, in_end: int = None) -> Any: //|def write_readinto(self, buffer_out: bytearray, buffer_in: bytearray, *, out_start: Any = 0, out_end: int = None, in_start: Any = 0, in_end: int = None) -> Any:
//| """Write out the data in ``buffer_out`` while simultaneously reading data into ``buffer_in``. //|"""Write out the data in ``buffer_out`` while simultaneously reading data into ``buffer_in``.
//| The SPI object must be locked. //|The SPI object must be locked.
//| The lengths of the slices defined by ``buffer_out[out_start:out_end]`` and ``buffer_in[in_start:in_end]`` //|The lengths of the slices defined by ``buffer_out[out_start:out_end]`` and ``buffer_in[in_start:in_end]``
//| must be equal. //|must be equal.
//| If buffer slice lengths are both 0, nothing happens. //|If buffer slice lengths are both 0, nothing happens.
//| //|
//| :param bytearray buffer_out: Write out the data in this buffer //|:param bytearray buffer_out: Write out the data in this buffer
//| :param bytearray buffer_in: Read data into this buffer //|:param bytearray buffer_in: Read data into this buffer
//| :param int out_start: Start of the slice of buffer_out to write out: ``buffer_out[out_start:out_end]`` //|:param int out_start: Start of the slice of buffer_out to write out: ``buffer_out[out_start:out_end]``
//| :param int out_end: End of the slice; this index is not included. Defaults to ``len(buffer_out)`` //|:param int out_end: End of the slice; this index is not included. Defaults to ``len(buffer_out)``
//| :param int in_start: Start of the slice of ``buffer_in`` to read into: ``buffer_in[in_start:in_end]`` //|:param int in_start: Start of the slice of ``buffer_in`` to read into: ``buffer_in[in_start:in_end]``
//| :param int in_end: End of the slice; this index is not included. Defaults to ``len(buffer_in)``""" //|:param int in_end: End of the slice; this index is not included. Defaults to ``len(buffer_in)``"""
//| ... //|...
STATIC mp_obj_t busio_spi_write_readinto(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) { STATIC mp_obj_t busio_spi_write_readinto(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
enum { ARG_buffer_out, ARG_buffer_in, ARG_out_start, ARG_out_end, ARG_in_start, ARG_in_end }; enum { ARG_buffer_out, ARG_buffer_in, ARG_out_start, ARG_out_end, ARG_in_start, ARG_in_end };
@ -369,10 +369,10 @@ STATIC mp_obj_t busio_spi_write_readinto(size_t n_args, const mp_obj_t *pos_args
} }
MP_DEFINE_CONST_FUN_OBJ_KW(busio_spi_write_readinto_obj, 2, busio_spi_write_readinto); MP_DEFINE_CONST_FUN_OBJ_KW(busio_spi_write_readinto_obj, 2, busio_spi_write_readinto);
//| frequency: Any = //|frequency: Any =
//| """The actual SPI bus frequency. This may not match the frequency requested //|"""The actual SPI bus frequency. This may not match the frequency requested
//| due to internal limitations.""" //|due to internal limitations."""
//| ... //|...
STATIC mp_obj_t busio_spi_obj_get_frequency(mp_obj_t self_in) { STATIC mp_obj_t busio_spi_obj_get_frequency(mp_obj_t self_in) {
busio_spi_obj_t *self = MP_OBJ_TO_PTR(self_in); busio_spi_obj_t *self = MP_OBJ_TO_PTR(self_in);

View File

@ -40,30 +40,30 @@
#include "supervisor/shared/translate.h" #include "supervisor/shared/translate.h"
//|class UART: //|class UART:
//| """.. currentmodule:: busio //|""".. currentmodule:: busio
//| //|
//| :class:`UART` -- a bidirectional serial protocol //|:class:`UART` -- a bidirectional serial protocol
//| =================================================""" //|================================================="""
//| def __init__(self, tx: microcontroller.Pin, rx: microcontroller.Pin, *, baudrate: int = 9600, bits: int = 8, parity: Parity = None, stop: int = 1, timeout: float = 1, receiver_buffer_size: int = 64): //|def __init__(self, tx: microcontroller.Pin, rx: microcontroller.Pin, *, baudrate: int = 9600, bits: int = 8, parity: Parity = None, stop: int = 1, timeout: float = 1, receiver_buffer_size: int = 64):
//| """A common bidirectional serial protocol that uses an an agreed upon speed //|"""A common bidirectional serial protocol that uses an an agreed upon speed
//| rather than a shared clock line. //|rather than a shared clock line.
//| //|
//| :param ~microcontroller.Pin tx: the pin to transmit with, or ``None`` if this ``UART`` is receive-only. //|:param ~microcontroller.Pin tx: the pin to transmit with, or ``None`` if this ``UART`` is receive-only.
//| :param ~microcontroller.Pin rx: the pin to receive on, or ``None`` if this ``UART`` is transmit-only. //|:param ~microcontroller.Pin rx: the pin to receive on, or ``None`` if this ``UART`` is transmit-only.
//| :param ~microcontroller.Pin rts: the pin for rts, or ``None`` if rts not in use. //|:param ~microcontroller.Pin rts: the pin for rts, or ``None`` if rts not in use.
//| :param ~microcontroller.Pin cts: the pin for cts, or ``None`` if cts not in use. //|:param ~microcontroller.Pin cts: the pin for cts, or ``None`` if cts not in use.
//| :param ~microcontroller.Pin rs485_dir: the pin for rs485 direction setting, or ``None`` if rs485 not in use. //|:param ~microcontroller.Pin rs485_dir: the pin for rs485 direction setting, or ``None`` if rs485 not in use.
//| :param bool rs485_invert: set to invert the sense of the rs485_dir pin. //|:param bool rs485_invert: set to invert the sense of the rs485_dir pin.
//| :param int baudrate: the transmit and receive speed. //|:param int baudrate: the transmit and receive speed.
//| :param int bits: the number of bits per byte, 7, 8 or 9. //|:param int bits: the number of bits per byte, 7, 8 or 9.
//| :param Parity parity: the parity used for error checking. //|:param Parity parity: the parity used for error checking.
//| :param int stop: the number of stop bits, 1 or 2. //|:param int stop: the number of stop bits, 1 or 2.
//| :param float timeout: the timeout in seconds to wait for the first character and between subsequent characters when reading. Raises ``ValueError`` if timeout >100 seconds. //|:param float timeout: the timeout in seconds to wait for the first character and between subsequent characters when reading. Raises ``ValueError`` if timeout >100 seconds.
//| :param int receiver_buffer_size: the character length of the read buffer (0 to disable). (When a character is 9 bits the buffer will be 2 * receiver_buffer_size bytes.) //|:param int receiver_buffer_size: the character length of the read buffer (0 to disable). (When a character is 9 bits the buffer will be 2 * receiver_buffer_size bytes.)
//| //|
//| *New in CircuitPython 4.0:* ``timeout`` has incompatibly changed units from milliseconds to seconds. //|*New in CircuitPython 4.0:* ``timeout`` has incompatibly changed units from milliseconds to seconds.
//| The new upper limit on ``timeout`` is meant to catch mistaken use of milliseconds.""" //|The new upper limit on ``timeout`` is meant to catch mistaken use of milliseconds."""
//| ... //|...
typedef struct { typedef struct {
mp_obj_base_t base; mp_obj_base_t base;
} busio_uart_parity_obj_t; } busio_uart_parity_obj_t;
@ -141,9 +141,9 @@ STATIC mp_obj_t busio_uart_make_new(const mp_obj_type_t *type, size_t n_args, co
return (mp_obj_t)self; return (mp_obj_t)self;
} }
//| def deinit(self, ) -> Any: //|def deinit(self, ) -> Any:
//| """Deinitialises the UART and releases any hardware resources for reuse.""" //|"""Deinitialises the UART and releases any hardware resources for reuse."""
//| ... //|...
STATIC mp_obj_t busio_uart_obj_deinit(mp_obj_t self_in) { STATIC mp_obj_t busio_uart_obj_deinit(mp_obj_t self_in) {
busio_uart_obj_t *self = MP_OBJ_TO_PTR(self_in); busio_uart_obj_t *self = MP_OBJ_TO_PTR(self_in);
common_hal_busio_uart_deinit(self); common_hal_busio_uart_deinit(self);
@ -157,15 +157,15 @@ STATIC void check_for_deinit(busio_uart_obj_t *self) {
} }
} }
//| def __enter__(self, ) -> Any: //|def __enter__(self, ) -> Any:
//| """No-op used by Context Managers.""" //|"""No-op used by Context Managers."""
//| ... //|...
// Provided by context manager helper. // Provided by context manager helper.
//| def __exit__(self, ) -> Any: //|def __exit__(self, ) -> Any:
//| """Automatically deinitializes the hardware when exiting a context. See //|"""Automatically deinitializes the hardware when exiting a context. See
//| :ref:`lifetime-and-contextmanagers` for more info.""" //|:ref:`lifetime-and-contextmanagers` for more info."""
//| ... //|...
STATIC mp_obj_t busio_uart_obj___exit__(size_t n_args, const mp_obj_t *args) { STATIC mp_obj_t busio_uart_obj___exit__(size_t n_args, const mp_obj_t *args) {
(void)n_args; (void)n_args;
common_hal_busio_uart_deinit(args[0]); common_hal_busio_uart_deinit(args[0]);
@ -175,46 +175,46 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(busio_uart___exit___obj, 4, 4, busio_
// These are standard stream methods. Code is in py/stream.c. // These are standard stream methods. Code is in py/stream.c.
// //
//| def read(self, nbytes: Any = None) -> Any: //|def read(self, nbytes: Any = None) -> Any:
//| """Read characters. If ``nbytes`` is specified then read at most that many //|"""Read characters. If ``nbytes`` is specified then read at most that many
//| bytes. Otherwise, read everything that arrives until the connection //|bytes. Otherwise, read everything that arrives until the connection
//| times out. Providing the number of bytes expected is highly recommended //|times out. Providing the number of bytes expected is highly recommended
//| because it will be faster. //|because it will be faster.
//| //|
//| :return: Data read //|:return: Data read
//| :rtype: bytes or None""" //|:rtype: bytes or None"""
//| ... //|...
//| def readinto(self, buf: Any) -> Any: //|def readinto(self, buf: Any) -> Any:
//| """.. method:: readinto(buf) //|""".. method:: readinto(buf)
//| //|
//| Read bytes into the ``buf``. Read at most ``len(buf)`` bytes. //|Read bytes into the ``buf``. Read at most ``len(buf)`` bytes.
//| //|
//| :return: number of bytes read and stored into ``buf`` //|:return: number of bytes read and stored into ``buf``
//| :rtype: int or None (on a non-blocking error) //|:rtype: int or None (on a non-blocking error)
//| //|
//| *New in CircuitPython 4.0:* No length parameter is permitted.""" //|*New in CircuitPython 4.0:* No length parameter is permitted."""
//| ... //|...
//| def readline(self, ) -> Any: //|def readline(self, ) -> Any:
//| """.. method:: readline() //|""".. method:: readline()
//| //|
//| Read a line, ending in a newline character. //|Read a line, ending in a newline character.
//| //|
//| :return: the line read //|:return: the line read
//| :rtype: int or None""" //|:rtype: int or None"""
//| ... //|...
//| def write(self, buf: Any) -> Any: //|def write(self, buf: Any) -> Any:
//| """.. method:: write(buf) //|""".. method:: write(buf)
//| //|
//| Write the buffer of bytes to the bus. //|Write the buffer of bytes to the bus.
//| //|
//| *New in CircuitPython 4.0:* ``buf`` must be bytes, not a string. //|*New in CircuitPython 4.0:* ``buf`` must be bytes, not a string.
//| //|
//| :return: the number of bytes written //|:return: the number of bytes written
//| :rtype: int or None""" //|:rtype: int or None"""
//| ... //|...
// These three methods are used by the shared stream methods. // These three methods are used by the shared stream methods.
STATIC mp_uint_t busio_uart_read(mp_obj_t self_in, void *buf_in, mp_uint_t size, int *errcode) { STATIC mp_uint_t busio_uart_read(mp_obj_t self_in, void *buf_in, mp_uint_t size, int *errcode) {
@ -258,9 +258,9 @@ STATIC mp_uint_t busio_uart_ioctl(mp_obj_t self_in, mp_uint_t request, mp_uint_t
return ret; return ret;
} }
//| baudrate: Any = //|baudrate: Any =
//| """The current baudrate.""" //|"""The current baudrate."""
//| ... //|...
STATIC mp_obj_t busio_uart_obj_get_baudrate(mp_obj_t self_in) { STATIC mp_obj_t busio_uart_obj_get_baudrate(mp_obj_t self_in) {
busio_uart_obj_t *self = MP_OBJ_TO_PTR(self_in); busio_uart_obj_t *self = MP_OBJ_TO_PTR(self_in);
check_for_deinit(self); check_for_deinit(self);
@ -284,9 +284,9 @@ const mp_obj_property_t busio_uart_baudrate_obj = {
(mp_obj_t)&mp_const_none_obj}, (mp_obj_t)&mp_const_none_obj},
}; };
//| in_waiting: Any = //|in_waiting: Any =
//| """The number of bytes in the input buffer, available to be read""" //|"""The number of bytes in the input buffer, available to be read"""
//| ... //|...
STATIC mp_obj_t busio_uart_obj_get_in_waiting(mp_obj_t self_in) { STATIC mp_obj_t busio_uart_obj_get_in_waiting(mp_obj_t self_in) {
busio_uart_obj_t *self = MP_OBJ_TO_PTR(self_in); busio_uart_obj_t *self = MP_OBJ_TO_PTR(self_in);
check_for_deinit(self); check_for_deinit(self);
@ -301,9 +301,9 @@ const mp_obj_property_t busio_uart_in_waiting_obj = {
(mp_obj_t)&mp_const_none_obj}, (mp_obj_t)&mp_const_none_obj},
}; };
//| timeout: Any = //|timeout: Any =
//| """The current timeout, in seconds (float).""" //|"""The current timeout, in seconds (float)."""
//| ... //|...
STATIC mp_obj_t busio_uart_obj_get_timeout(mp_obj_t self_in) { STATIC mp_obj_t busio_uart_obj_get_timeout(mp_obj_t self_in) {
busio_uart_obj_t *self = MP_OBJ_TO_PTR(self_in); busio_uart_obj_t *self = MP_OBJ_TO_PTR(self_in);
check_for_deinit(self); check_for_deinit(self);
@ -329,9 +329,9 @@ const mp_obj_property_t busio_uart_timeout_obj = {
(mp_obj_t)&mp_const_none_obj}, (mp_obj_t)&mp_const_none_obj},
}; };
//| def reset_input_buffer(self, ) -> Any: //|def reset_input_buffer(self, ) -> Any:
//| """Discard any unread characters in the input buffer.""" //|"""Discard any unread characters in the input buffer."""
//| ... //|...
STATIC mp_obj_t busio_uart_obj_reset_input_buffer(mp_obj_t self_in) { STATIC mp_obj_t busio_uart_obj_reset_input_buffer(mp_obj_t self_in) {
busio_uart_obj_t *self = MP_OBJ_TO_PTR(self_in); busio_uart_obj_t *self = MP_OBJ_TO_PTR(self_in);
check_for_deinit(self); check_for_deinit(self);
@ -341,15 +341,15 @@ STATIC mp_obj_t busio_uart_obj_reset_input_buffer(mp_obj_t self_in) {
STATIC MP_DEFINE_CONST_FUN_OBJ_1(busio_uart_reset_input_buffer_obj, busio_uart_obj_reset_input_buffer); STATIC MP_DEFINE_CONST_FUN_OBJ_1(busio_uart_reset_input_buffer_obj, busio_uart_obj_reset_input_buffer);
//|class busio: //|class busio:
//| def __init__(self, ): //|def __init__(self, ):
//| """Enum-like class to define the parity used to verify correct data transfer.""" //|"""Enum-like class to define the parity used to verify correct data transfer."""
//| ODD: Any = //|ODD: Any =
//| """Total number of ones should be odd.""" //|"""Total number of ones should be odd."""
//| ... //|...
//| EVEN: Any = //|EVEN: Any =
//| """Total number of ones should be even.""" //|"""Total number of ones should be even."""
//| ... //|...
//| ... //|...
const mp_obj_type_t busio_uart_parity_type; const mp_obj_type_t busio_uart_parity_type;
const busio_uart_parity_obj_t busio_uart_parity_odd_obj = { const busio_uart_parity_obj_t busio_uart_parity_odd_obj = {