Files
tactility/Tactility/Source/app/i2cscanner/I2cHelpers.cpp
T
Ken Van Hoeylandt 71f8369377 TactilityKernel improvements (#464)
* **New Features**
  * Thread API with lifecycle, priority, affinity and state monitoring
  * Timer subsystem: one-shot/periodic timers, reset, pending callbacks, expiry queries
  * Expanded I²C: register-level ops, bulk writes, presence checks, ESP32 integration and new config properties
  * GPIO controller: pin level and options APIs
  * Error utilities: new error code, error-to-string, timeout helper and common macros
  * Device construction helpers (construct+start)

* **Tests**
  * New unit tests for thread and timer behavior

* **Documentation**
  * Expanded coding style guide (files/folders, C conventions)
2026-01-28 23:58:11 +01:00

50 lines
1.3 KiB
C++

#include "Tactility/app/i2cscanner/I2cHelpers.h"
#include <Tactility/Tactility.h>
#include <Tactility/StringUtils.h>
#include <iomanip>
#include <vector>
#include <sstream>
namespace tt::app::i2cscanner {
std::string getAddressText(uint8_t address) {
std::stringstream stream;
stream << "0x"
<< std::uppercase << std::setfill ('0')
<< std::setw(2) << std::hex << (uint32_t)address;
return stream.str();
}
std::string getPortNamesForDropdown() {
std::vector<std::string> config_names;
for (int port = 0; port < I2C_NUM_MAX; ++port) {
auto native_port = static_cast<i2c_port_t>(port);
if (hal::i2c::isStarted(native_port)) {
auto* name = hal::i2c::getName(native_port);
if (name != nullptr) {
config_names.push_back(name);
}
}
}
return string::join(config_names, "\n");
}
bool getActivePortAtIndex(int32_t index, int32_t& out) {
int current_index = -1;
for (int port = 0; port < I2C_NUM_MAX; ++port) {
auto native_port = static_cast<i2c_port_t>(port);
if (hal::i2c::isStarted(native_port)) {
current_index++;
if (current_index == index) {
out = port;
return true;
}
}
}
return false;
}
}