3636#include "py/runtime.h"
3737#include "supervisor/shared/translate.h"
3838
39- //|class I2C:
40- //|""".. currentmodule:: busio
39+ //| class I2C:
40+ //| """.. currentmodule:: busio
4141//|
42- //|:class:`I2C` --- Two wire serial protocol
43- //|------------------------------------------"""
44- //|def __init__(self, scl: microcontroller.Pin, sda: microcontroller.Pin, *, frequency: int = 400000, timeout: int = 255):
45- //|"""I2C is a two-wire protocol for communicating between devices. At the
46- //|physical level it consists of 2 wires: SCL and SDA, the clock and data
47- //|lines respectively.
42+ //| :class:`I2C` --- Two wire serial protocol
43+ //| ------------------------------------------"""
4844//|
49- //|.. seealso:: Using this class directly requires careful lock management.
50- //|Instead, use :class:`~adafruit_bus_device.i2c_device.I2CDevice` to
51- //|manage locks.
45+ //| def __init__(self, scl: microcontroller.Pin, sda: microcontroller.Pin, *, frequency: int = 400000, timeout: int = 255):
5246//|
53- //|.. seealso:: Using this class to directly read registers requires manual
54- //|bit unpacking. Instead, use an existing driver or make one with
55- //|:ref:`Register <register-module-reference>` data descriptors .
47+ //| """I2C is a two-wire protocol for communicating between devices. At the
48+ //| physical level it consists of 2 wires: SCL and SDA, the clock and data
49+ //| lines respectively .
5650//|
57- //|:param ~microcontroller.Pin scl: The clock pin
58- //|:param ~microcontroller.Pin sda: The data pin
59- //|:param int frequency: The clock frequency in Hertz
60- //|:param int timeout: The maximum clock stretching timeut - (used only for bitbangio.I2C; ignored for busio.I2C)
51+ //| .. seealso:: Using this class directly requires careful lock management.
52+ //| Instead, use :class:`~adafruit_bus_device.i2c_device.I2CDevice` to
53+ //| manage locks.
6154//|
62- //|.. note:: On the nRF52840, only one I2C object may be created,
63- //|except on the Circuit Playground Bluefruit, which allows two,
64- //|one for the onboard accelerometer, and one for offboard use."""
65- //|...
55+ //| .. seealso:: Using this class to directly read registers requires manual
56+ //| bit unpacking. Instead, use an existing driver or make one with
57+ //| :ref:`Register <register-module-reference>` data descriptors.
58+ //|
59+ //| :param ~microcontroller.Pin scl: The clock pin
60+ //| :param ~microcontroller.Pin sda: The data pin
61+ //| :param int frequency: The clock frequency in Hertz
62+ //| :param int timeout: The maximum clock stretching timeut - (used only for bitbangio.I2C; ignored for busio.I2C)
63+ //|
64+ //| .. note:: On the nRF52840, only one I2C object may be created,
65+ //| except on the Circuit Playground Bluefruit, which allows two,
66+ //| one for the onboard accelerometer, and one for offboard use."""
67+ //| ...
6668STATIC 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 ) {
6769 busio_i2c_obj_t * self = m_new_obj (busio_i2c_obj_t );
6870 self -> base .type = & busio_i2c_type ;
@@ -83,9 +85,9 @@ STATIC mp_obj_t busio_i2c_make_new(const mp_obj_type_t *type, size_t n_args, con
8385 return (mp_obj_t )self ;
8486}
8587
86- //|def deinit(self, ) -> Any:
87- //|"""Releases control of the underlying hardware so other classes can use it."""
88- //|...
88+ //| def deinit(self, ) -> Any:
89+ //| """Releases control of the underlying hardware so other classes can use it."""
90+ //| ...
8991STATIC mp_obj_t busio_i2c_obj_deinit (mp_obj_t self_in ) {
9092 busio_i2c_obj_t * self = MP_OBJ_TO_PTR (self_in );
9193 common_hal_busio_i2c_deinit (self );
@@ -99,15 +101,15 @@ STATIC void check_for_deinit(busio_i2c_obj_t *self) {
99101 }
100102}
101103
102- //|def __enter__(self, ) -> Any:
103- //|"""No-op used in Context Managers."""
104- //|...
104+ //| def __enter__(self, ) -> Any:
105+ //| """No-op used in Context Managers."""
106+ //| ...
105107// Provided by context manager helper.
106108
107- //|def __exit__(self, ) -> Any:
108- //|"""Automatically deinitializes the hardware on context exit. See
109- //|:ref:`lifetime-and-contextmanagers` for more info."""
110- //|...
109+ //| def __exit__(self, ) -> Any:
110+ //| """Automatically deinitializes the hardware on context exit. See
111+ //| :ref:`lifetime-and-contextmanagers` for more info."""
112+ //| ...
111113STATIC mp_obj_t busio_i2c_obj___exit__ (size_t n_args , const mp_obj_t * args ) {
112114 (void )n_args ;
113115 common_hal_busio_i2c_deinit (args [0 ]);
@@ -122,13 +124,14 @@ static void check_lock(busio_i2c_obj_t *self) {
122124 }
123125}
124126
125- //|def scan(self, ) -> Any:
126- //|"""Scan all I2C addresses between 0x08 and 0x77 inclusive and return a
127- //|list of those that respond.
127+ //| def scan(self, ) -> Any:
128128//|
129- //|:return: List of device ids on the I2C bus
130- //|:rtype: list"""
131- //|...
129+ //| """Scan all I2C addresses between 0x08 and 0x77 inclusive and return a
130+ //| list of those that respond.
131+ //|
132+ //| :return: List of device ids on the I2C bus
133+ //| :rtype: list"""
134+ //| ...
132135STATIC mp_obj_t busio_i2c_scan (mp_obj_t self_in ) {
133136 busio_i2c_obj_t * self = MP_OBJ_TO_PTR (self_in );
134137 check_for_deinit (self );
@@ -145,21 +148,22 @@ STATIC mp_obj_t busio_i2c_scan(mp_obj_t self_in) {
145148}
146149MP_DEFINE_CONST_FUN_OBJ_1 (busio_i2c_scan_obj , busio_i2c_scan );
147150
148- //|def try_lock(self, ) -> Any:
149- //|"""Attempts to grab the I2C lock. Returns True on success.
150- //|:return: True when lock has been grabbed
151- //|:rtype: bool"""
152- //|...
151+ //| def try_lock(self, ) -> Any:
152+ //| """Attempts to grab the I2C lock. Returns True on success.
153+ //|
154+ //| :return: True when lock has been grabbed
155+ //| :rtype: bool"""
156+ //| ...
153157STATIC mp_obj_t busio_i2c_obj_try_lock (mp_obj_t self_in ) {
154158 busio_i2c_obj_t * self = MP_OBJ_TO_PTR (self_in );
155159 check_for_deinit (self );
156160 return mp_obj_new_bool (common_hal_busio_i2c_try_lock (self ));
157161}
158162MP_DEFINE_CONST_FUN_OBJ_1 (busio_i2c_try_lock_obj , busio_i2c_obj_try_lock );
159163
160- //|def unlock(self, ) -> Any:
161- //|"""Releases the I2C lock."""
162- //|...
164+ //| def unlock(self, ) -> Any:
165+ //| """Releases the I2C lock."""
166+ //| ...
163167STATIC mp_obj_t busio_i2c_obj_unlock (mp_obj_t self_in ) {
164168 busio_i2c_obj_t * self = MP_OBJ_TO_PTR (self_in );
165169 check_for_deinit (self );
@@ -168,20 +172,20 @@ STATIC mp_obj_t busio_i2c_obj_unlock(mp_obj_t self_in) {
168172}
169173MP_DEFINE_CONST_FUN_OBJ_1 (busio_i2c_unlock_obj , busio_i2c_obj_unlock );
170174
171- //|def readfrom_into(self, address: int, buffer: bytearray, *, start: int = 0, end: int = None) -> Any:
172- //|"""Read into ``buffer`` from the slave specified by ``address``.
173- //|The number of bytes read will be the length of ``buffer``.
174- //|At least one byte must be read.
175+ //| def readfrom_into(self, address: int, buffer: bytearray, *, start: int = 0, end: int = None) -> Any:
176+ //| """Read into ``buffer`` from the slave specified by ``address``.
177+ //| The number of bytes read will be the length of ``buffer``.
178+ //| At least one byte must be read.
175179//|
176- //|If ``start`` or ``end`` is provided, then the buffer will be sliced
177- //|as if ``buffer[start:end]``. This will not cause an allocation like
178- //|``buf[start:end]`` will so it saves memory.
180+ //| If ``start`` or ``end`` is provided, then the buffer will be sliced
181+ //| as if ``buffer[start:end]``. This will not cause an allocation like
182+ //| ``buf[start:end]`` will so it saves memory.
179183//|
180- //|:param int address: 7-bit device address
181- //|:param bytearray buffer: buffer to write into
182- //|:param int start: Index to start writing at
183- //|:param int end: Index to write up to but not include. Defaults to ``len(buffer)``"""
184- //|...
184+ //| :param int address: 7-bit device address
185+ //| :param bytearray buffer: buffer to write into
186+ //| :param int start: Index to start writing at
187+ //| :param int end: Index to write up to but not include. Defaults to ``len(buffer)``"""
188+ //| ...
185189// Shared arg parsing for readfrom_into and writeto_then_readfrom.
186190STATIC void readfrom (busio_i2c_obj_t * self , mp_int_t address , mp_obj_t buffer , int32_t start , mp_int_t end ) {
187191 mp_buffer_info_t bufinfo ;
@@ -219,26 +223,26 @@ STATIC mp_obj_t busio_i2c_readfrom_into(size_t n_args, const mp_obj_t *pos_args,
219223}
220224MP_DEFINE_CONST_FUN_OBJ_KW (busio_i2c_readfrom_into_obj , 3 , busio_i2c_readfrom_into );
221225
222- //|def writeto(self, address: int, buffer: bytearray, *, start: int = 0, end: int = None, stop: bool = True) -> Any:
223- //|"""Write the bytes from ``buffer`` to the slave specified by ``address``.
224- //|Transmits a stop bit when stop is True. Setting stop=False is deprecated and stop will be
225- //|removed in CircuitPython 6.x. Use `writeto_then_readfrom` when needing a write, no stop and
226- //|repeated start before a read.
226+ //| def writeto(self, address: int, buffer: bytearray, *, start: int = 0, end: int = None, stop: bool = True) -> Any:
227+ //| """Write the bytes from ``buffer`` to the slave specified by ``address``.
228+ //| Transmits a stop bit when stop is True. Setting stop=False is deprecated and stop will be
229+ //| removed in CircuitPython 6.x. Use `writeto_then_readfrom` when needing a write, no stop and
230+ //| repeated start before a read.
227231//|
228- //|If ``start`` or ``end`` is provided, then the buffer will be sliced
229- //|as if ``buffer[start:end]``. This will not cause an allocation like
230- //|``buffer[start:end]`` will so it saves memory.
232+ //| If ``start`` or ``end`` is provided, then the buffer will be sliced
233+ //| as if ``buffer[start:end]``. This will not cause an allocation like
234+ //| ``buffer[start:end]`` will so it saves memory.
231235//|
232- //|Writing a buffer or slice of length zero is permitted, as it can be used
233- //|to poll for the existence of a device.
236+ //| Writing a buffer or slice of length zero is permitted, as it can be used
237+ //| to poll for the existence of a device.
234238//|
235- //|:param int address: 7-bit device address
236- //|:param bytearray buffer: buffer containing the bytes to write
237- //|:param int start: Index to start writing from
238- //|:param int end: Index to read up to but not include. Defaults to ``len(buffer)``
239- //|:param bool stop: If true, output an I2C stop condition after the buffer is written.
240- //|Deprecated. Will be removed in 6.x and act as stop=True."""
241- //|...
239+ //| :param int address: 7-bit device address
240+ //| :param bytearray buffer: buffer containing the bytes to write
241+ //| :param int start: Index to start writing from
242+ //| :param int end: Index to read up to but not include. Defaults to ``len(buffer)``
243+ //| :param bool stop: If true, output an I2C stop condition after the buffer is written.
244+ //| Deprecated. Will be removed in 6.x and act as stop=True."""
245+ //| ...
242246// Shared arg parsing for writeto and writeto_then_readfrom.
243247STATIC void writeto (busio_i2c_obj_t * self , mp_int_t address , mp_obj_t buffer , int32_t start , mp_int_t end , bool stop ) {
244248 // get the buffer to write the data from
@@ -277,23 +281,23 @@ STATIC mp_obj_t busio_i2c_writeto(size_t n_args, const mp_obj_t *pos_args, mp_ma
277281}
278282STATIC MP_DEFINE_CONST_FUN_OBJ_KW (busio_i2c_writeto_obj , 1 , busio_i2c_writeto );
279283
280- //|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:
281- //|"""Write the bytes from ``out_buffer`` to the slave specified by ``address``, generate no stop
282- //|bit, generate a repeated start and read into ``in_buffer``. ``out_buffer`` and
283- //|``in_buffer`` can be the same buffer because they are used sequentially.
284+ //| 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:
285+ //| """Write the bytes from ``out_buffer`` to the slave specified by ``address``, generate no stop
286+ //| bit, generate a repeated start and read into ``in_buffer``. ``out_buffer`` and
287+ //| ``in_buffer`` can be the same buffer because they are used sequentially.
284288//|
285- //|If ``start`` or ``end`` is provided, then the corresponding buffer will be sliced
286- //|as if ``buffer[start:end]``. This will not cause an allocation like ``buf[start:end]``
287- //|will so it saves memory.
289+ //| If ``start`` or ``end`` is provided, then the corresponding buffer will be sliced
290+ //| as if ``buffer[start:end]``. This will not cause an allocation like ``buf[start:end]``
291+ //| will so it saves memory.
288292//|
289- //|:param int address: 7-bit device address
290- //|:param bytearray out_buffer: buffer containing the bytes to write
291- //|:param bytearray in_buffer: buffer to write into
292- //|:param int out_start: Index to start writing from
293- //|:param int out_end: Index to read up to but not include. Defaults to ``len(buffer)``
294- //|:param int in_start: Index to start writing at
295- //|:param int in_end: Index to write up to but not include. Defaults to ``len(buffer)``"""
296- //|...
293+ //| :param int address: 7-bit device address
294+ //| :param bytearray out_buffer: buffer containing the bytes to write
295+ //| :param bytearray in_buffer: buffer to write into
296+ //| :param int out_start: Index to start writing from
297+ //| :param int out_end: Index to read up to but not include. Defaults to ``len(buffer)``
298+ //| :param int in_start: Index to start writing at
299+ //| :param int in_end: Index to write up to but not include. Defaults to ``len(buffer)``"""
300+ //| ...
297301STATIC mp_obj_t busio_i2c_writeto_then_readfrom (size_t n_args , const mp_obj_t * pos_args , mp_map_t * kw_args ) {
298302 enum { ARG_address , ARG_out_buffer , ARG_in_buffer , ARG_out_start , ARG_out_end , ARG_in_start , ARG_in_end };
299303 static const mp_arg_t allowed_args [] = {
0 commit comments