Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/utility/PI4IOE5V6408_Class.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@ namespace m5

bool digitalRead(uint8_t pin) override;

bool getInputLevel(uint8_t pin, bool* level) override;

bool resetIrq() override;

bool disableIrq() override;
Expand Down
17 changes: 14 additions & 3 deletions src/utility/PI4IOE5V6408_Class.inl
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,10 @@ namespace m5
{
bool PI4IOE5V6408_Class::begin()
{
auto id = readRegister8(0x01);
if (id == 0) return false;
return true;
uint8_t id;
// Recheck the current address and port on every begin, including after reconnect.
_init = readRegister(0x01, &id, 1) && id != 0;
return _init;
}

// false input, true output
Expand Down Expand Up @@ -83,6 +84,16 @@ bool PI4IOE5V6408_Class::digitalRead(uint8_t pin)
return (data & (1 << pin)) != 0;
}

bool PI4IOE5V6408_Class::getInputLevel(uint8_t pin, bool* level)
{
if (pin >= 8 || level == nullptr) { return false; }
uint8_t value;
// Preserve the caller's value when the input register cannot be read.
if (!readRegister(0x0F, &value, 1)) { return false; }
*level = (value & (1 << pin)) != 0;
return true;
}

bool PI4IOE5V6408_Class::resetIrq()
{
uint8_t value;
Expand Down
Loading