Skip to content

Commit 2874448

Browse files
authored
tooling: Replace wildcard imports with explicit imports (F403/F405). (#298)
* tooling: Replace wildcard imports with explicit imports (F403/F405). Wildcard imports removed across all drivers and examples. F401, F403, and F405 rules re-enabled in ruff configuration. * docs: Replace wildcard imports in mcp23009e README examples.
1 parent 7d7beee commit 2874448

29 files changed

Lines changed: 624 additions & 43 deletions

File tree

lib/apds9960/apds9960/device.py

Lines changed: 100 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,105 @@
11
from time import sleep_ms
22

3-
from apds9960.const import *
4-
from apds9960.exceptions import *
3+
from apds9960.const import (
4+
APDS9960_BIT_AVALID,
5+
APDS9960_BIT_GVALID,
6+
APDS9960_BIT_PON,
7+
APDS9960_BIT_PVALID,
8+
APDS9960_DEFAULT_AGAIN,
9+
APDS9960_DEFAULT_AIHT,
10+
APDS9960_DEFAULT_AILT,
11+
APDS9960_DEFAULT_ATIME,
12+
APDS9960_DEFAULT_CONFIG1,
13+
APDS9960_DEFAULT_CONFIG2,
14+
APDS9960_DEFAULT_CONFIG3,
15+
APDS9960_DEFAULT_GCONF1,
16+
APDS9960_DEFAULT_GCONF3,
17+
APDS9960_DEFAULT_GESTURE_PPULSE,
18+
APDS9960_DEFAULT_GEXTH,
19+
APDS9960_DEFAULT_GGAIN,
20+
APDS9960_DEFAULT_GIEN,
21+
APDS9960_DEFAULT_GLDRIVE,
22+
APDS9960_DEFAULT_GOFFSET,
23+
APDS9960_DEFAULT_GPENTH,
24+
APDS9960_DEFAULT_GPULSE,
25+
APDS9960_DEFAULT_GWTIME,
26+
APDS9960_DEFAULT_LDRIVE,
27+
APDS9960_DEFAULT_PERS,
28+
APDS9960_DEFAULT_PGAIN,
29+
APDS9960_DEFAULT_PIHT,
30+
APDS9960_DEFAULT_PILT,
31+
APDS9960_DEFAULT_POFFSET_DL,
32+
APDS9960_DEFAULT_POFFSET_UR,
33+
APDS9960_DEFAULT_PROX_PPULSE,
34+
APDS9960_DEFAULT_WTIME,
35+
APDS9960_DEV_ID,
36+
APDS9960_DIR_DOWN,
37+
APDS9960_DIR_FAR,
38+
APDS9960_DIR_LEFT,
39+
APDS9960_DIR_NEAR,
40+
APDS9960_DIR_NONE,
41+
APDS9960_DIR_RIGHT,
42+
APDS9960_DIR_UP,
43+
APDS9960_GESTURE_SENSITIVITY_1,
44+
APDS9960_GESTURE_SENSITIVITY_2,
45+
APDS9960_GESTURE_THRESHOLD_OUT,
46+
APDS9960_I2C_ADDR,
47+
APDS9960_LED_BOOST_300,
48+
APDS9960_MODE_ALL,
49+
APDS9960_MODE_AMBIENT_LIGHT,
50+
APDS9960_MODE_GESTURE,
51+
APDS9960_MODE_POWER,
52+
APDS9960_MODE_PROXIMITY,
53+
APDS9960_MODE_WAIT,
54+
APDS9960_REG_AICLEAR,
55+
APDS9960_REG_AIHTH,
56+
APDS9960_REG_AIHTL,
57+
APDS9960_REG_AILTH,
58+
APDS9960_REG_AILTL,
59+
APDS9960_REG_ATIME,
60+
APDS9960_REG_BDATAH,
61+
APDS9960_REG_BDATAL,
62+
APDS9960_REG_CDATAH,
63+
APDS9960_REG_CDATAL,
64+
APDS9960_REG_CONFIG1,
65+
APDS9960_REG_CONFIG2,
66+
APDS9960_REG_CONFIG3,
67+
APDS9960_REG_CONTROL,
68+
APDS9960_REG_ENABLE,
69+
APDS9960_REG_GCONF1,
70+
APDS9960_REG_GCONF2,
71+
APDS9960_REG_GCONF3,
72+
APDS9960_REG_GCONF4,
73+
APDS9960_REG_GDATAH,
74+
APDS9960_REG_GDATAL,
75+
APDS9960_REG_GEXTH,
76+
APDS9960_REG_GFIFO_U,
77+
APDS9960_REG_GFLVL,
78+
APDS9960_REG_GOFFSET_D,
79+
APDS9960_REG_GOFFSET_L,
80+
APDS9960_REG_GOFFSET_R,
81+
APDS9960_REG_GOFFSET_U,
82+
APDS9960_REG_GPENTH,
83+
APDS9960_REG_GPULSE,
84+
APDS9960_REG_GSTATUS,
85+
APDS9960_REG_ID,
86+
APDS9960_REG_PDATA,
87+
APDS9960_REG_PERS,
88+
APDS9960_REG_PICLEAR,
89+
APDS9960_REG_PIHT,
90+
APDS9960_REG_PILT,
91+
APDS9960_REG_POFFSET_DL,
92+
APDS9960_REG_POFFSET_UR,
93+
APDS9960_REG_PPULSE,
94+
APDS9960_REG_RDATAH,
95+
APDS9960_REG_RDATAL,
96+
APDS9960_REG_STATUS,
97+
APDS9960_REG_WTIME,
98+
APDS9960_STATE_FAR,
99+
APDS9960_STATE_NEAR,
100+
APDS9960_TIME_FIFO_PAUSE,
101+
)
102+
from apds9960.exceptions import APDS9960InvalidDevId, APDS9960InvalidMode
5103

6104

7105
class APDS9960(object):

lib/bq27441/bq27441/device.py

Lines changed: 52 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,58 @@
33

44
from machine import Pin
55

6-
from bq27441.const import *
7-
from bq27441.exceptions import *
6+
from bq27441.const import (
7+
BQ27441_COMMAND_AVAIL_CAPACITY,
8+
BQ27441_COMMAND_AVG_CURRENT,
9+
BQ27441_COMMAND_AVG_POWER,
10+
BQ27441_COMMAND_FLAGS,
11+
BQ27441_COMMAND_FULL_CAP_FIL,
12+
BQ27441_COMMAND_FULL_CAP_UNFL,
13+
BQ27441_COMMAND_FULL_CAPACITY,
14+
BQ27441_COMMAND_INT_TEMP,
15+
BQ27441_COMMAND_MAX_CURRENT,
16+
BQ27441_COMMAND_NOM_CAPACITY,
17+
BQ27441_COMMAND_REM_CAP_FIL,
18+
BQ27441_COMMAND_REM_CAP_UNFL,
19+
BQ27441_COMMAND_REM_CAPACITY,
20+
BQ27441_COMMAND_SOC,
21+
BQ27441_COMMAND_SOC_UNFL,
22+
BQ27441_COMMAND_SOH,
23+
BQ27441_COMMAND_STDBY_CURRENT,
24+
BQ27441_COMMAND_TEMP,
25+
BQ27441_COMMAND_VOLTAGE,
26+
BQ27441_CONTROL_DEVICE_TYPE,
27+
BQ27441_CONTROL_EXIT_CFGUPDATE,
28+
BQ27441_CONTROL_PULSE_SOC_INT,
29+
BQ27441_CONTROL_RESET,
30+
BQ27441_CONTROL_SEALED,
31+
BQ27441_CONTROL_SET_CFGUPDATE,
32+
BQ27441_CONTROL_SHUTDOWN,
33+
BQ27441_CONTROL_SHUTDOWN_ENABLE,
34+
BQ27441_CONTROL_SOFT_RESET,
35+
BQ27441_CONTROL_STATUS,
36+
BQ27441_DEVICE_ID,
37+
BQ27441_EXTENDED_BLOCKDATA,
38+
BQ27441_EXTENDED_CAPACITY,
39+
BQ27441_EXTENDED_CHECKSUM,
40+
BQ27441_EXTENDED_CONTROL,
41+
BQ27441_EXTENDED_DATABLOCK,
42+
BQ27441_EXTENDED_DATACLASS,
43+
BQ27441_EXTENDED_OPCONFIG,
44+
BQ27441_FLAG_CFGUPMODE,
45+
BQ27441_FLAG_SOC1,
46+
BQ27441_FLAG_SOCF,
47+
BQ27441_I2C_ADDRESS,
48+
BQ27441_I2C_TIMEOUT,
49+
BQ27441_ID_DISCHARGE,
50+
BQ27441_ID_REGISTERS,
51+
BQ27441_ID_STATE,
52+
BQ27441_OPCONFIG_BATLOWEN,
53+
BQ27441_OPCONFIG_GPIOPOL,
54+
BQ27441_STATUS_SS,
55+
BQ27441_UNSEAL_KEY,
56+
LIPO_BATTERY_CAPACITY,
57+
)
858

959

1060
# Parameters for the current() function, to specify which current to read

lib/daplink_bridge/README.md

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
# DAPLink Bridge MicroPython Driver
2+
3+
Low-level I2C bridge driver for the **STM32F103 DAPLink interface** on the STeaMi board.
4+
5+
This driver handles all direct I2C communication with the bridge: device identification, status/error registers, busy polling, and persistent config zone access (1 KB internal flash).
6+
7+
# I2C Address
8+
9+
Default 7-bit I2C address: `0x3B`
10+
11+
# Basic Usage
12+
13+
```python
14+
from machine import I2C
15+
from daplink_bridge import DaplinkBridge
16+
17+
i2c = I2C(1)
18+
bridge = DaplinkBridge(i2c)
19+
20+
print("WHO_AM_I:", hex(bridge.device_id()))
21+
print("Busy:", bridge.busy())
22+
```
23+
24+
# API
25+
26+
## Initialization
27+
28+
```python
29+
bridge = DaplinkBridge(i2c, address=0x3B)
30+
```
31+
32+
Create a new DAPLink bridge instance.
33+
34+
Parameters:
35+
36+
* `i2c`: initialized MicroPython `I2C` bus
37+
* `address`: I2C address of the bridge, default is `0x3B`
38+
39+
## Device identification
40+
41+
### `device_id()`
42+
43+
```python
44+
bridge.device_id()
45+
```
46+
47+
Read the `WHO_AM_I` register. Expected value: `0x4C`.
48+
49+
## Status
50+
51+
### `busy()`
52+
53+
```python
54+
bridge.busy()
55+
```
56+
57+
Returns `True` if the bridge is currently busy, otherwise `False`.
58+
59+
## Config zone
60+
61+
The config zone is a **1 KB persistent storage area** in the STM32F103 internal flash. It is separate from the external flash file storage and survives `clear_flash()` operations.
62+
63+
### `clear_config()`
64+
65+
```python
66+
bridge.clear_config()
67+
```
68+
69+
Erase the entire config zone. Raises `OSError` if the operation fails.
70+
71+
### `write_config(data, offset=0)`
72+
73+
```python
74+
bridge.write_config("board_rev=3", offset=0)
75+
bridge.write_config(b"\x01\x02\x03", offset=100)
76+
```
77+
78+
Write data into the config zone at the given byte offset.
79+
80+
Parameters:
81+
82+
* `data`: `str` or `bytes`
83+
* `offset`: byte offset in the range `0` to `1023`
84+
85+
Notes:
86+
87+
* existing data outside the written range is preserved
88+
* raises `ValueError` if the write would go out of bounds
89+
* raises `OSError` if the bridge reports a write error
90+
91+
### `read_config()`
92+
93+
```python
94+
cfg = bridge.read_config()
95+
```
96+
97+
Read back config zone content.
98+
99+
Returns:
100+
101+
* `bytes` up to the first `0xFF`
102+
* `b""` if the config zone is empty
103+
104+
# Architecture
105+
106+
```
107+
steami_config ──┐
108+
├──→ daplink_bridge ──→ I2C (STM32F103)
109+
daplink_flash ──┘
110+
```
111+
112+
* [`daplink_flash`](../daplink_flash/README.md) — high-level flash file operations
113+
* [`steami_config`](../steami_config/README.md) — persistent board configuration (JSON)
114+
115+
# Notes
116+
117+
* The bridge uses a `WHO_AM_I` value of `0x4C`.
118+
* The config zone (1 KB) is separate from the external flash file area.
119+
* All I2C operations go through private helpers (`_read_reg`, `_write_reg`, `_writeto`, `_readfrom`).

lib/daplink_bridge/daplink_bridge/device.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,18 @@
11
from time import sleep_ms
22

3-
from daplink_bridge.const import *
3+
from daplink_bridge.const import (
4+
CMD_CLEAR_CONFIG,
5+
CMD_READ_CONFIG,
6+
CMD_WHO_AM_I,
7+
CMD_WRITE_CONFIG,
8+
CONFIG_SIZE,
9+
DAPLINK_BRIDGE_DEFAULT_ADDR,
10+
MAX_WRITE_CHUNK,
11+
REG_ERROR,
12+
REG_STATUS,
13+
SECTOR_SIZE,
14+
STATUS_BUSY,
15+
)
416

517

618
class DaplinkBridge(object):

lib/daplink_flash/daplink_flash/device.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,17 @@
11
from time import sleep_ms
22

3-
from daplink_flash.const import *
3+
from daplink_flash.const import (
4+
CMD_CLEAR_FLASH,
5+
CMD_GET_FILENAME,
6+
CMD_READ_SECTOR,
7+
CMD_SET_FILENAME,
8+
CMD_WRITE_DATA,
9+
EXT_LEN,
10+
FILENAME_LEN,
11+
MAX_SECTORS,
12+
MAX_WRITE_CHUNK,
13+
SECTOR_SIZE,
14+
)
415

516

617
class DaplinkFlash(object):

lib/hts221/hts221/device.py

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,31 @@
11
from time import sleep_ms
22

3-
from machine import I2C
4-
5-
from hts221.const import *
3+
from hts221.const import (
4+
HTS221_AV_CONF,
5+
HTS221_CTRL1_BDU,
6+
HTS221_CTRL1_ODR_MASK,
7+
HTS221_CTRL1_PD,
8+
HTS221_CTRL2_BOOT,
9+
HTS221_CTRL2_ONE_SHOT,
10+
HTS221_CTRL_REG1,
11+
HTS221_CTRL_REG2,
12+
HTS221_H0_T0_OUT_L,
13+
HTS221_H1_T0_OUT_L,
14+
HTS221_HUMIDITY_OUT_L,
15+
HTS221_STATUS_H_DA,
16+
HTS221_STATUS_REG,
17+
HTS221_STATUS_T_DA,
18+
HTS221_T0_OUT_L,
19+
HTS221_T1_OUT_L,
20+
HTS221_TEMP_OUT_L,
21+
HTS221_WHO_AM_I,
22+
HTS_I2C_ADDR,
23+
HTS221_H0_rH_x2,
24+
HTS221_H1_rH_x2,
25+
HTS221_T0_degC_x8,
26+
HTS221_T1_degC_x8,
27+
HTS221_T1T0_msb,
28+
)
629

730

831
def int16(d):

0 commit comments

Comments
 (0)