23#ifndef VORTEX_COMM_CHANNELS_MANAGER_H_
24#define VORTEX_COMM_CHANNELS_MANAGER_H_
32#include "base/BaseSpi.h"
33#include "base/BaseI2c.h"
34#include "base/BaseUart.h"
35#include "base/BaseCan.h"
82 default:
return "Unknown error";
230 BaseI2c*
GetI2cDevice(uint8_t bus_index,
int device_index) noexcept;
242 int CreateI2cDevice(uint8_t device_address, uint32_t speed_hz = 400000) noexcept;
269 [[nodiscard]]
bool I2cProbeAddress(uint8_t address, uint32_t timeout_ms = 25) noexcept;
277 size_t I2cScanBus(uint8_t* out,
size_t max_results) noexcept;
369 last_error_.store(error, std::memory_order_release);
CommChannelsManager & GetCommChannelsManager() noexcept
Convenience accessor — equivalent to CommChannelsManager::GetInstance().
Definition CommChannelsManager.h:377
constexpr const char * CommErrorToString(CommError error) noexcept
Convert CommError to a human-readable string.
Definition CommChannelsManager.h:68
CommError
Communication channels manager error codes for consistent error reporting.
Definition CommChannelsManager.h:48
@ NOT_INITIALIZED
Manager not yet initialised.
@ INVALID_BUS_INDEX
Bus index out of range.
@ MUTEX_LOCK_FAILED
RTOS mutex acquire timed out.
@ INVALID_DEVICE_INDEX
Device index out of range.
@ COMMUNICATION_FAILED
A bus-level transfer failed.
@ DEVICE_ALREADY_EXISTS
A device at that address already exists.
@ DEVICE_NOT_FOUND
Device index or id not in registry.
@ SUCCESS
Operation completed successfully.
@ DEVICE_CREATION_FAILED
Heap allocation or driver init for device failed.
@ BUS_NOT_AVAILABLE
Requested bus is not present or not ready.
@ INITIALIZATION_FAILED
Bus or device initialisation failed.
@ INVALID_PARAMETER
Null pointer or out-of-range argument.
SpiDeviceId
SPI device identifiers for the Vortex V1 board.
Definition CommChannelsManager.h:113
@ DEVICE_COUNT
Sentinel — total number of SPI devices.
@ EXTERNAL_DEVICE_2
External device slot 2 (SPI Mode 0)
@ AS5047U_POSITION_ENCODER
AS5047U position encoder (SPI Mode 1)
@ TMC9660_MOTOR_CONTROLLER
TMC9660 motor controller (SPI Mode 3)
@ EXTERNAL_DEVICE_1
External device slot 1 (SPI Mode 0)
I2cDeviceId
I2C device identifiers for the Vortex V1 board (built-in devices).
Definition CommChannelsManager.h:128
@ DEVICE_COUNT
Sentinel — total number of built-in I2C devices.
@ PCAL9555_GPIO_EXPANDER
PCAL95555 GPIO expander (address 0x20)
@ BNO08X_IMU
BNO08x IMU sensor (address 0x4A)
Singleton managing all board communication channels for Vortex V1.
Definition CommChannelsManager.h:149
bool HasI2cDeviceAtAddress(uint8_t bus_index, uint8_t device_address) const noexcept
Check if an I2C device exists at the specified address.
Definition CommChannelsManager.cpp:333
static constexpr uint8_t kMaxI2cRuntimeDevices
Definition CommChannelsManager.h:349
size_t I2cScanBus(uint8_t *out, size_t max_results) noexcept
Scan the primary I²C bus and copy ACKing addresses into out.
Definition CommChannelsManager.cpp:391
BaseCan * GetCanOpenBus() noexcept
TWAI bus used for CANopen / hf-utils-canopen framing (HfUtilsCanOpenTransport).
Definition CommChannelsManager.h:307
BaseUart * GetUartBus() noexcept
Get the UART bus (TMC9660 TMCL).
Definition CommChannelsManager.cpp:415
bool RemoveI2cDevice(int device_index) noexcept
Remove a runtime-created I2C device.
Definition CommChannelsManager.cpp:351
void DumpStatistics() const noexcept
Log communication channel statistics and bus health to the console.
Definition CommChannelsManager.cpp:433
static constexpr uint8_t kI2cBuiltinCount
Definition CommChannelsManager.h:347
CommChannelsManager & operator=(const CommChannelsManager &)=delete
uint32_t GetCanBitRate() const noexcept
Nominal bit rate the TWAI bus was configured with (bit/s).
Definition CommChannelsManager.cpp:427
bool uart_bus_valid_
Definition CommChannelsManager.h:343
CommChannelsManager(const CommChannelsManager &)=delete
bool i2c_bus_valid_
Definition CommChannelsManager.h:351
bool I2cProbeAddress(uint8_t address, uint32_t timeout_ms=25) noexcept
Probe a single 7-bit address on the primary I²C bus.
Definition CommChannelsManager.cpp:383
std::array< int, kI2cBuiltinCount > i2c_builtin_indices_
Definition CommChannelsManager.h:350
BaseCan * GetCanBus() noexcept
Get the TWAI/CAN bus.
Definition CommChannelsManager.cpp:421
static constexpr uint8_t kSpiDeviceCount
Definition CommChannelsManager.h:339
CommError GetSystemDiagnostics(CommSystemDiagnostics &diagnostics) const noexcept
Fill a diagnostics snapshot with current system state.
Definition CommChannelsManager.cpp:457
bool I2cResetBus() noexcept
Reset the I²C peripheral / clear-bus sequence (only attempts when bus is up).
Definition CommChannelsManager.cpp:403
std::array< RuntimeI2cSlot, kMaxI2cRuntimeDevices > i2c_runtime_slots_
Definition CommChannelsManager.h:358
bool Initialize() noexcept
Definition CommChannelsManager.cpp:73
bool spi_bus_valid_
Definition CommChannelsManager.h:342
bool Deinitialize() noexcept
Release all bus resources and reset to uninitialized state.
Definition CommChannelsManager.cpp:491
std::array< int, kSpiDeviceCount > spi_device_indices_
Definition CommChannelsManager.h:341
CommChannelsManager(CommChannelsManager &&)=delete
void UpdateLastError(CommError error) noexcept
Definition CommChannelsManager.h:368
BaseUart * uart_bus_
Definition CommChannelsManager.h:361
BaseSpi * GetSpiDevice(SpiDeviceId device_id) noexcept
Get an SPI device handle by enum identifier.
Definition CommChannelsManager.cpp:237
bool can_bus_valid_
Definition CommChannelsManager.h:344
int CreateI2cDevice(uint8_t device_address, uint32_t speed_hz=400000) noexcept
Create an I2C device on the primary bus at runtime.
Definition CommChannelsManager.cpp:276
void ReleaseLocked() noexcept
Close every bus through the binding and forget the indices. Caller holds mutex_.
Definition CommChannelsManager.cpp:502
RtosMutex mutex_
Definition CommChannelsManager.h:366
std::atomic< bool > initialized_
Definition CommChannelsManager.h:364
static CommChannelsManager & GetInstance() noexcept
Return the singleton CommChannelsManager instance.
Definition CommChannelsManager.cpp:46
CommChannelsManager & operator=(CommChannelsManager &&)=delete
bool IsInitialized() const noexcept
Check whether the communication subsystem has been initialised.
Definition CommChannelsManager.h:174
BaseI2c * GetI2cDevice(I2cDeviceId device_id) noexcept
Get a built-in I²C device by enum identifier.
Definition CommChannelsManager.cpp:254
BaseCan * can_bus_
Definition CommChannelsManager.h:362
CommError GetLastError() const noexcept
Get the most recent error code.
Definition CommChannelsManager.h:180
bool EnsureInitialized() noexcept
Initialise all communication buses if not already initialised.
Definition CommChannelsManager.cpp:60
std::atomic< CommError > last_error_
Definition CommChannelsManager.h:365
Definition CommChannelsManager.h:353
uint8_t address
Definition CommChannelsManager.h:355
bool active
Definition CommChannelsManager.h:356
int device_index
Definition CommChannelsManager.h:354
System-level diagnostics snapshot for communication channels.
Definition CommChannelsManager.h:93
bool i2c_bus_valid
I²C bus initialised and usable.
Definition CommChannelsManager.h:97
bool system_healthy
True when all configured buses are operational.
Definition CommChannelsManager.h:94
bool can_bus_valid
CAN/TWAI bus initialised and usable.
Definition CommChannelsManager.h:99
bool uart_bus_valid
UART bus initialised and usable.
Definition CommChannelsManager.h:98
uint8_t i2c_runtime_device_count
Number of active runtime I²C devices.
Definition CommChannelsManager.h:101
uint8_t spi_device_count
Number of SPI devices with valid indices.
Definition CommChannelsManager.h:100
bool spi_bus_valid
SPI bus initialised and usable.
Definition CommChannelsManager.h:96
bool system_initialized
True if EnsureInitialized() completed.
Definition CommChannelsManager.h:95
CommError last_error
Most recent error code from any operation.
Definition CommChannelsManager.h:102