Browse Source

i2c: actually show addresses on boot

pull/2516/head
Maxim Prokhorov 2 years ago
parent
commit
c0e6372559
1 changed files with 28 additions and 8 deletions
  1. +28
    -8
      code/espurna/i2c.cpp

+ 28
- 8
code/espurna/i2c.cpp View File

@ -58,6 +58,10 @@ constexpr unsigned char scl() {
return I2C_SCL_PIN;
}
constexpr bool performScanOnBoot() {
return I2C_PERFORM_SCAN == 1;
}
#if I2C_USE_BRZO
constexpr unsigned long cst() {
return I2C_CLOCK_STRETCH_TIME;
@ -115,6 +119,23 @@ void scan(Callback&& callback) {
}
}
void bootScan() {
String addresses;
scan([&](unsigned char address) {
if (addresses.length()) {
addresses += F(", ");
}
addresses += String(address, 10);
});
if (addresses.length()) {
DEBUG_MSG_P(PSTR("[I2C] Found addresses: %s\n"), addresses.c_str());
} else {
DEBUG_MSG_P(PSTR("[I2C] No devices found\n"));
}
}
int clear(unsigned char sda, unsigned char scl) {
#if defined(TWCR) && defined(TWEN)
// Disable the Atmel 2-Wire interface so we can control the SDA and SCL pins directly
@ -237,19 +258,20 @@ void initTerminalCommands() {
unsigned char devices { 0 };
i2c::scan([&](unsigned char address) {
++devices;
ctx.output.printf("found 0x%02X\n", address);
ctx.output.printf("0x%02X\n", address);
});
if (devices) {
ctx.output.printf("found %hhu device(s)\n", devices);
terminalOK(ctx);
return;
}
terminalError(ctx, F("No devices found"));
terminalError(ctx, F("no devices found"));
});
terminalRegisterCommand(F("I2C.CLEAR"), [](::terminal::CommandContext&& ctx) {
ctx.output.printf("result: %d\n", i2c::clear());
ctx.output.printf("result %d\n", i2c::clear());
terminalOK(ctx);
});
}
@ -520,11 +542,9 @@ void i2cSetup() {
i2c::initTerminalCommands();
#endif
#if I2C_PERFORM_SCAN
i2c::scan([](unsigned char address) {
DEBUG_MSG_P(PSTR("[I2C] Found 0x02X\n"), address);
});
#endif
if (i2c::build::performScanOnBoot()) {
i2c::bootScan();
}
}
#endif

Loading…
Cancel
Save