Skip to content

Commit bbc6a4f

Browse files
authored
Merge pull request #748 from adafruit/offline-mode-20250506-with-drivers
Offline mode PR fixes 20250506 with drivers
2 parents 5564777 + 1b4b617 commit bbc6a4f

28 files changed

+1346
-315
lines changed

.github/workflows/build-clang-doxy.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -523,7 +523,6 @@ jobs:
523523
run: |
524524
git clone --quiet https://github.com/pstolarz/OneWireNg.git /home/runner/Arduino/libraries/OneWireNg
525525
git clone --quiet https://github.com/pstolarz/Arduino-Temperature-Control-Library.git /home/runner/Arduino/libraries/Arduino-Temperature-Control-Library
526-
git clone --quiet https://github.com/brentru/Adafruit_SPIFlash.git /home/runner/Arduino/libraries/Adafruit_SPIFlash
527526
git clone --quiet https://github.com/adafruit/Adafruit_TinyUSB_Arduino /home/runner/Arduino/libraries/Adafruit_TinyUSB_Arduino
528527
- name: Download stable Nanopb
529528
id: download-nanopb

.github/workflows/release-offline.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ on:
77
branches:
88
- offline-mode
99
- offline-mode-*
10+
pull_request:
11+
branches:
12+
- offline-mode
1013
release:
1114
types: [published]
1215
branches:

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ Pre-compiled binaries and UF2 files for supported hardware are provided on the [
2424
|--|--|
2525
|[ESP32-x](https://github.com/espressif/arduino-esp32)| ESP32, ESP32-S2, ESP32-S3, ESP32-C3, ESP32-C6 |
2626
|[ESP8266](https://github.com/esp8266/Arduino)| ESP8266 |
27-
|[RP2040](https://github.com/earlephilhower/arduino-pico)| RP2040 MCU w/WiFi (i.e: Pico W) |
27+
|[RP2](https://github.com/earlephilhower/arduino-pico)| RP2040/RP2350 MCU w/WiFi (i.e: Pico W) |
2828
|[ATSAMD](https://github.com/adafruit/ArduinoCore-samd/)| SAMD51 MCU w/separate WiFi Co-Processor (i.e: Adafruit "AirLift")|
2929

3030
## Contributing to Adafruit.io and WipperSnapper

library.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,4 @@ paragraph=Arduino application for Adafruit.io WipperSnapper
77
category=Communication
88
url=https://github.com/adafruit/Adafruit_Wippersnapper_Arduino
99
architectures=*
10-
depends=SdFat - Adafruit Fork, Adafruit SPIFlash, Adafruit NeoPixel, ArduinoJson, Adafruit DotStar, Adafruit HDC302x, Adafruit INA219, Adafruit LTR329 and LTR303, Adafruit LTR390 Library, Adafruit MCP3421, Adafruit NAU7802 Library, Adafruit SleepyDog Library, Adafruit TMP117, Adafruit TinyUSB Library, Adafruit AHTX0, Adafruit BME280 Library, Adafruit BMP280 Library, Adafruit BMP3XX Library, Adafruit DPS310, Adafruit DS248x, Adafruit SCD30, Adafruit SGP30 Sensor, Adafruit SGP40 Sensor, Sensirion I2C SCD4x, Sensirion I2C SEN5X, Sensirion I2C SEN66, arduino-sht, Adafruit Si7021 Library, Adafruit MQTT Library, Adafruit MS8607, Adafruit MCP9808 Library, Adafruit MCP9600 Library, Adafruit MPL115A2, Adafruit MPRLS Library, Adafruit TSL2591 Library, Adafruit_VL53L0X, Adafruit VL53L1X, STM32duino VL53L4CD, STM32duino VL53L4CX, Adafruit_VL6180X, Adafruit PM25 AQI Sensor, Adafruit VCNL4020 Library, Adafruit VCNL4040, Adafruit VCNL4200 Library, Adafruit VEML7700 Library, Adafruit LC709203F, Adafruit LPS2X, Adafruit LPS28, Adafruit LPS35HW, Adafruit seesaw Library, Adafruit BME680 Library, Adafruit MAX1704X, Adafruit ADT7410 Library, Adafruit HTS221, Adafruit HTU21DF Library, Adafruit HTU31D Library, Adafruit PCT2075, hp_BH1750, ENS160 - Adafruit Fork, Adafruit BusIO, Adafruit Unified Sensor, Sensirion Core, Adafruit GFX Library, RTClib, StreamUtils, Adafruit SHT4x Library
10+
depends=SdFat - Adafruit Fork, Adafruit SPIFlash, Adafruit NeoPixel, ArduinoJson, Adafruit DotStar, Adafruit HDC302x, Adafruit INA219, Adafruit INA260 Library, Adafruit LTR329 and LTR303, Adafruit LTR390 Library, Adafruit MCP3421, Adafruit NAU7802 Library, Adafruit SleepyDog Library, Adafruit TMP117, Adafruit TinyUSB Library, Adafruit AHTX0, Adafruit BME280 Library, Adafruit BMP280 Library, Adafruit BMP3XX Library, Adafruit DPS310, Adafruit DS248x, Adafruit SCD30, Adafruit SGP30 Sensor, Adafruit SGP40 Sensor, Sensirion I2C SCD4x, Sensirion I2C SEN5X, Sensirion I2C SEN66, arduino-sht, Adafruit Si7021 Library, Adafruit MQTT Library, Adafruit MS8607, Adafruit MCP9808 Library, Adafruit MCP9600 Library, Adafruit MPL115A2, Adafruit MPRLS Library, Adafruit TSL2591 Library, Adafruit_VL53L0X, Adafruit VL53L1X, STM32duino VL53L4CD, STM32duino VL53L4CX, Adafruit_VL6180X, Adafruit PM25 AQI Sensor, Adafruit VCNL4020 Library, Adafruit VCNL4040, Adafruit VCNL4200 Library, Adafruit VEML7700 Library, Adafruit LC709203F, Adafruit LPS2X, Adafruit LPS28, Adafruit LPS35HW, Adafruit seesaw Library, Adafruit BME680 Library, Adafruit MAX1704X, Adafruit ADT7410 Library, Adafruit HTS221, Adafruit HTU21DF Library, Adafruit HTU31D Library, Adafruit PCT2075, hp_BH1750, ENS160 - Adafruit Fork, Adafruit BusIO, Adafruit Unified Sensor, Sensirion Core, Adafruit GFX Library, RTClib, StreamUtils, Adafruit SHT4x Library

platformio.ini

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,11 @@ lib_deps =
3131
adafruit/Adafruit DPS310
3232
adafruit/Adafruit DS248x
3333
adafruit/Adafruit INA219
34+
adafruit/Adafruit INA260 Library
3435
adafruit/Adafruit HTS221
3536
adafruit/Adafruit HTU21DF Library
3637
adafruit/Adafruit HTU31D Library
38+
adafruit/Adafruit HDC302x
3739
adafruit/Adafruit LTR390 Library
3840
adafruit/Adafruit LTR329 and LTR303
3941
adafruit/Adafruit PCT2075
@@ -43,6 +45,7 @@ lib_deps =
4345
adafruit/Adafruit Si7021 Library
4446
adafruit/Adafruit VCNL4020 Library
4547
adafruit/Adafruit VCNL4040
48+
adafruit/Adafruit VCNL4200 Library
4649
adafruit/Adafruit MCP3421
4750
adafruit/Adafruit MCP9808 Library
4851
adafruit/Adafruit MCP9600 Library
@@ -61,6 +64,7 @@ lib_deps =
6164
adafruit/Adafruit VEML7700 Library
6265
adafruit/Adafruit LC709203F
6366
adafruit/Adafruit LPS2X
67+
adafruit/Adafruit LPS28
6468
adafruit/Adafruit LPS35HW
6569
adafruit/Adafruit seesaw Library
6670
adafruit/Adafruit BME680 Library
@@ -76,6 +80,7 @@ lib_deps =
7680
https://github.com/pstolarz/OneWireNg.git
7781
https://github.com/Sensirion/arduino-sht.git
7882
https://github.com/Sensirion/arduino-i2c-sen5x.git
83+
https://github.com/Sensirion/arduino-i2c-sen66.git
7984
https://github.com/adafruit/WiFiNINA.git
8085
https://github.com/Starmbi/hp_BH1750.git
8186
https://github.com/adafruit/RTClib.git
@@ -84,9 +89,7 @@ lib_deps =
8489

8590
; Common build environment for ESP32 platform
8691
[common:esp32]
87-
; platform = https://github.com/pioarduino/platform-espressif32/releases/download/51.03.03/platform-espressif32.zip
88-
; platform = https://github.com/pioarduino/platform-espressif32#develop
89-
platform = https://github.com/pioarduino/platform-espressif32/releases/download/51.03.07/platform-espressif32.zip
92+
platform = https://github.com/pioarduino/platform-espressif32/releases/download/53.03.13/platform-espressif32.zip
9093
lib_ignore = WiFiNINA, WiFi101
9194
monitor_filters = esp32_exception_decoder, time
9295
; upload_speed = 921600
@@ -333,7 +336,6 @@ build_type = debug
333336
build_flags =
334337
-DUSE_TINYUSB=1
335338
-DARDUINO_ESPRESSIF_ESP32S3_DEVKITC_1_N8
336-
-DNDEBUG=1
337339
-DDEBUG=1
338340
-DESP_LOG_LEVEL=5
339341
-DARDUINO_CORE_DEBUG_LEVEL=5
@@ -391,7 +393,6 @@ build_flags = -DUSE_TINYUSB
391393
-DARDUINO_USB_CDC_ON_BOOT=1
392394
-DCFG_TUSB_DEBUG=1
393395
-DDEBUG=1
394-
-DNDEBUG=1
395396
-DUSE_AIRLIFT=1
396397
-g
397398
; -DUSBCON
@@ -472,7 +473,6 @@ build_flags =
472473
-DDEBUG_RP2040_SPI
473474
-DDEBUG_RP2040_CORE
474475
-DDEBUG_RP2040_WIFI
475-
-DNDEBUG
476476
-DLWIP_DEBUG
477477
-DDEBUG_RP2040_PORT=Serial1
478478
-DDEBUG_RP2040_UART_1

src/Wippersnapper_Boards.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -218,19 +218,19 @@
218218
#define USE_TINYUSB
219219
#define USE_STATUS_LED
220220
#define STATUS_LED_PIN 32
221-
#define SD_CS_PIN 33
221+
#define SD_CS_PIN 17
222222
#elif defined(ARDUINO_RASPBERRY_PI_PICO)
223223
#define BOARD_ID "rpi-pico"
224224
#define USE_TINYUSB
225225
#define USE_STATUS_LED
226226
#define STATUS_LED_PIN LED_BUILTIN
227-
#define SD_CS_PIN 33
227+
#define SD_CS_PIN 17
228228
#elif defined(ARDUINO_RASPBERRY_PI_PICO_2)
229229
#define BOARD_ID "rpi-pico-2"
230230
#define USE_TINYUSB
231231
#define USE_STATUS_LED
232232
#define STATUS_LED_PIN LED_BUILTIN
233-
#define SD_CS_PIN 33
233+
#define SD_CS_PIN 17
234234
#elif defined(ARDUINO_ADAFRUIT_FEATHER_RP2040_ADALOGGER)
235235
#define BOARD_ID "feather-rp2040-adalogger"
236236
#define USE_TINYUSB

src/Wippersnapper_V2.cpp

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -98,8 +98,8 @@ void Wippersnapper_V2::provision() {
9898
} else {
9999
haltErrorV2("SD initialization failed.\nDo not reformat the card!\nIs the "
100100
"card correctly inserted?\nIs there a wiring/soldering "
101-
"problem\nIs the config.json file malformed?");
102-
// SD card not initialized, so just continue with online-mode provisioning
101+
"problem\nIs the config.json file malformed?\nSD CS Pin: " +
102+
String(WsV2.pin_sd_cs));
103103
}
104104

105105
#ifdef USE_DISPLAY
@@ -882,7 +882,13 @@ void Wippersnapper_V2::runNetFSMV2() {
882882
*/
883883
/**************************************************************************/
884884
void Wippersnapper_V2::haltErrorV2(String error, ws_led_status_t ledStatusColor,
885-
bool reboot) {
885+
bool reboot, bool reattach_usb_filesystem) {
886+
#ifdef USE_TINYUSB
887+
if (reattach_usb_filesystem) {
888+
WsV2._fileSystemV2->InitUsbMsc();
889+
delay(1500);
890+
}
891+
#endif
886892
WS_DEBUG_PRINT("ERROR ");
887893
if (reboot) {
888894
WS_DEBUG_PRINT("[RESET]: ");

src/Wippersnapper_V2.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@ class Wippersnapper_V2 {
217217
// Error handling helpers
218218
void haltErrorV2(String error,
219219
ws_led_status_t ledStatusColor = WS_LED_STATUS_ERROR_RUNTIME,
220-
bool reboot = true);
220+
bool reboot = true, bool reattach_usb_filesystem = true);
221221
void errorWriteHangV2(String error);
222222

223223
bool _is_offline_mode; ///< Global flag for if the device is in offline mode

src/Wippersnapper_demo.ino

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,14 @@
99
// All text above must be included in any redistribution.
1010

1111
#include "ws_adapters.h"
12+
#if defined(ARDUINO_RASPBERRY_PI_PICO_2) || \
13+
defined(ARDUINO_RASPBERRY_PI_PICO) || \
14+
defined(ARDUINO_ADAFRUIT_FEATHER_RP2040_ADALOGGER) || \
15+
defined(ARDUINO_ADAFRUIT_METRO_RP2350)
16+
ws_adapter_offline wipper;
17+
#else
1218
ws_adapter_wifi wipper;
19+
#endif
1320

1421
#define WS_DEBUG // Enable debug output!
1522

src/components/i2c/controller.cpp

Lines changed: 113 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -123,11 +123,26 @@ static const std::map<std::string, FnCreateI2CDriver> I2cFactory = {
123123
const char *driver_name) -> drvBase * {
124124
return new drvHtu21d(i2c, addr, mux_channel, driver_name);
125125
}},
126+
{"htu31d",
127+
[](TwoWire *i2c, uint16_t addr, uint32_t mux_channel,
128+
const char *driver_name) -> drvBase * {
129+
return new drvHtu31d(i2c, addr, mux_channel, driver_name);
130+
}},
131+
{"hdc302x",
132+
[](TwoWire *i2c, uint16_t addr, uint32_t mux_channel,
133+
const char *driver_name) -> drvBase * {
134+
return new drvHdc302x(i2c, addr, mux_channel, driver_name);
135+
}},
126136
{"ina219",
127137
[](TwoWire *i2c, uint16_t addr, uint32_t mux_channel,
128138
const char *driver_name) -> drvBase * {
129139
return new drvIna219(i2c, addr, mux_channel, driver_name);
130140
}},
141+
{"ina260",
142+
[](TwoWire *i2c, uint16_t addr, uint32_t mux_channel,
143+
const char *driver_name) -> drvBase * {
144+
return new drvIna260(i2c, addr, mux_channel, driver_name);
145+
}},
131146
{"lc709203f",
132147
[](TwoWire *i2c, uint16_t addr, uint32_t mux_channel,
133148
const char *driver_name) -> drvBase * {
@@ -148,6 +163,11 @@ static const std::map<std::string, FnCreateI2CDriver> I2cFactory = {
148163
const char *driver_name) -> drvBase * {
149164
return new drvLps25hb(i2c, addr, mux_channel, driver_name);
150165
}},
166+
{"lps28dfw",
167+
[](TwoWire *i2c, uint16_t addr, uint32_t mux_channel,
168+
const char *driver_name) -> drvBase * {
169+
return new drvLps28dfw(i2c, addr, mux_channel, driver_name);
170+
}},
151171
{"ltr329",
152172
[](TwoWire *i2c, uint16_t addr, uint32_t mux_channel,
153173
const char *driver_name) -> drvBase * {
@@ -223,6 +243,11 @@ static const std::map<std::string, FnCreateI2CDriver> I2cFactory = {
223243
const char *driver_name) -> drvBase * {
224244
return new drvScd30(i2c, addr, mux_channel, driver_name);
225245
}},
246+
{"sgp30",
247+
[](TwoWire *i2c, uint16_t addr, uint32_t mux_channel,
248+
const char *driver_name) -> drvBase * {
249+
return new drvSgp30(i2c, addr, mux_channel, driver_name);
250+
}},
226251
{"sgp40",
227252
[](TwoWire *i2c, uint16_t addr, uint32_t mux_channel,
228253
const char *driver_name) -> drvBase * {
@@ -278,6 +303,36 @@ static const std::map<std::string, FnCreateI2CDriver> I2cFactory = {
278303
const char *driver_name) -> drvBase * {
279304
return new drvSen5x(i2c, addr, mux_channel, driver_name);
280305
}},
306+
{"sen60",
307+
[](TwoWire *i2c, uint16_t addr, uint32_t mux_channel,
308+
const char *driver_name) -> drvBase * {
309+
return new drvSen6x(i2c, addr, mux_channel, driver_name);
310+
}},
311+
{"sen63c",
312+
[](TwoWire *i2c, uint16_t addr, uint32_t mux_channel,
313+
const char *driver_name) -> drvBase * {
314+
return new drvSen6x(i2c, addr, mux_channel, driver_name);
315+
}},
316+
{"sen65",
317+
[](TwoWire *i2c, uint16_t addr, uint32_t mux_channel,
318+
const char *driver_name) -> drvBase * {
319+
return new drvSen6x(i2c, addr, mux_channel, driver_name);
320+
}},
321+
{"sen66",
322+
[](TwoWire *i2c, uint16_t addr, uint32_t mux_channel,
323+
const char *driver_name) -> drvBase * {
324+
return new drvSen6x(i2c, addr, mux_channel, driver_name);
325+
}},
326+
{"sen68",
327+
[](TwoWire *i2c, uint16_t addr, uint32_t mux_channel,
328+
const char *driver_name) -> drvBase * {
329+
return new drvSen6x(i2c, addr, mux_channel, driver_name);
330+
}},
331+
{"sen6x",
332+
[](TwoWire *i2c, uint16_t addr, uint32_t mux_channel,
333+
const char *driver_name) -> drvBase * {
334+
return new drvSen6x(i2c, addr, mux_channel, driver_name);
335+
}},
281336
{"shtc3",
282337
[](TwoWire *i2c, uint16_t addr, uint32_t mux_channel,
283338
const char *driver_name) -> drvBase * {
@@ -318,6 +373,11 @@ static const std::map<std::string, FnCreateI2CDriver> I2cFactory = {
318373
const char *driver_name) -> drvBase * {
319374
return new drvVncl4040(i2c, addr, mux_channel, driver_name);
320375
}},
376+
{"vncl4200",
377+
[](TwoWire *i2c, uint16_t addr, uint32_t mux_channel,
378+
const char *driver_name) -> drvBase * {
379+
return new drvVncl4200(i2c, addr, mux_channel, driver_name);
380+
}},
321381
{"vl53l0x",
322382
[](TwoWire *i2c, uint16_t addr, uint32_t mux_channel,
323383
const char *driver_name) -> drvBase * {
@@ -365,10 +425,14 @@ static const std::unordered_map<uint16_t, std::vector<const char *>>
365425
{0x2A, {"nau7802"}},
366426
{0x38, {"aht20", "max17048"}},
367427
{0x39, {"tsl2591"}},
368-
{0x40, {"htu21d", "ina219", "ms8607", "si7021", "stemma_soil"}},
369-
{0x41, {"ina219"}},
370-
{0x44, {"sht3x", "sht4x"}},
371-
{0x45, {"sht3x"}},
428+
{0x40,
429+
{"htu21d", "htu31d", "ina219", "ina260", "ms8607", "si7021",
430+
"stemma_soil"}},
431+
{0x41, {"htu31d", "ina219", "ina260"}},
432+
{0x44, {"hdc302x", "ina260", "sht3x", "sht4x"}},
433+
{0x45, {"hdc302x", "ina260", "sht3x"}},
434+
{0x46, {"hdc302x"}},
435+
{0x47, {"hdc302x"}},
372436
{0x48, {"adt7410", "pct2075", "tmp117"}},
373437
{0x49, {"adt7410", "pct2075", "tmp117", "tsl2591"}},
374438
{0x4A, {"adt7410", "pct2075", "tmp117"}},
@@ -377,17 +441,21 @@ static const std::unordered_map<uint16_t, std::vector<const char *>>
377441
{0x4D, {"pct2075"}},
378442
{0x4E, {"pct2075"}},
379443
{0x4F, {"pct2075"}},
444+
{0x51, {"vcnl4200"}},
380445
{0x52, {"ens160"}},
381446
{0x53, {"ens160", "ltr390"}},
447+
{0x58, {"sgp30"}},
382448
{0x59, {"sgp40"}},
383-
{0x5C, {"bh1750", "lps22hb", "lps25hb"}},
384-
{0x5D, {"lps22hb", "lps25hb"}},
449+
{0x5C,
450+
{"bh1750", "lps22hb", "lps25hb", "lps28dfw", "lps33hw", "lps35hw"}},
451+
{0x5D, {"lps22hb", "lps25hb", "lps28dfw", "lps33hw", "lps35hw"}},
385452
{0x5F, {"hts2221"}},
386453
{0x60, {"mpl115a2", "vncl4040"}},
387454
{0x61, {"scd30"}},
388455
{0x62, {"scd40"}},
389456
{0x68, {"mcp3421"}},
390-
{0x69, {"sen50"}},
457+
{0x69, {"sen55"}},
458+
{0x6B, {"sen66"}},
391459
{0x70, {"pct2075", "shtc3"}},
392460
{0x71, {"pct2075"}},
393461
{0x72, {"pct2075"}},
@@ -862,11 +930,39 @@ bool I2cController::Handle_I2cDeviceAddOrReplace(pb_istream_t *stream) {
862930
*/
863931
/***********************************************************************/
864932
bool I2cController::ScanI2cBus(bool default_bus = true) {
865-
_i2c_bus_default->InitBus(default_bus);
933+
// zero-out the scan I2cBusScanned message before attempting a scan
866934
_scan_results = wippersnapper_i2c_I2cBusScanned_init_zero;
867-
if (!default_bus)
935+
936+
// Scan the desired i2c bus
937+
if (default_bus) {
938+
if (_i2c_bus_default->GetBusStatus() !=
939+
wippersnapper_i2c_I2cBusStatus_I2C_BUS_STATUS_SUCCESS) {
940+
_i2c_bus_default->InitBus(default_bus);
941+
}
942+
return _i2c_bus_default->ScanBus(&_scan_results);
943+
} else {
944+
if (_i2c_bus_alt->GetBusStatus() !=
945+
wippersnapper_i2c_I2cBusStatus_I2C_BUS_STATUS_SUCCESS) {
946+
_i2c_bus_alt->InitBus(default_bus);
947+
}
868948
return _i2c_bus_alt->ScanBus(&_scan_results);
869-
return _i2c_bus_default->ScanBus(&_scan_results);
949+
}
950+
}
951+
952+
/***********************************************************************/
953+
/*!
954+
@brief Returns the I2C bus object.
955+
@param is_alt_bus
956+
True if the alternative I2C bus is being used, False
957+
otherwise.
958+
@returns A pointer to the I2C bus object.
959+
*/
960+
/***********************************************************************/
961+
TwoWire *I2cController::GetI2cBus(bool is_alt_bus) {
962+
if (is_alt_bus) {
963+
return _i2c_bus_alt->GetBus();
964+
}
965+
return _i2c_bus_default->GetBus();
870966
}
871967

872968
/***********************************************************************/
@@ -934,6 +1030,13 @@ void I2cController::ConfigureMuxChannel(uint32_t mux_channel, bool is_alt_bus) {
9341030
_i2c_bus_default->SelectMuxChannel(mux_channel);
9351031
}
9361032

1033+
void I2cController::PrintAllDrivers() {
1034+
WS_DEBUG_PRINTLN("[i2c] Printing all drivers...");
1035+
for (drvBase *drv : _i2c_drivers) {
1036+
drv->printSensorInfo();
1037+
}
1038+
}
1039+
9371040
/***********************************************************************/
9381041
/*!
9391042
@brief Handles polling, reading, and logger for i2c devices

0 commit comments

Comments
 (0)