Out-of-Band (OOB) Control and Simulation Accessors

Out-of-Band (OOB) Control and Simulation Accessors#

This directory contains the Out-of-Band (OOB) control and simulation framework for the all-devices-app.

The framework provides a generic interface (backdoor) for simulating physical events or writing to read-only attributes on simulated devices, decoupling the core device logic from specific transport protocols (like Pigweed RPC or Shell commands).

Architecture Overview#

The framework consists of a central OOBAccessorRegistry that manages a list of OOBAccessor instances. External interfaces (such as Pigweed RPC services or CLI shell handlers) route requests through the registry, which forwards them to the appropriate accessor based on the target Endpoint ID.

        classDiagram
    class OOBAccessorRegistry {
        -mAccessors: IntrusiveList~OOBAccessor~
        +Register(accessor: OOBAccessor&) void
        +HandleAction(actionName: CharSpan, tlvBuffer: ByteSpan) CHIP_ERROR
    }
    class OOBAccessor {
        <<Interface>>
        +HandleAction(actionName: CharSpan, tlvBuffer: ByteSpan) std::optional~CHIP_ERROR~*
    }
    class BooleanStateSensorAccessor {
        +HandleAction(actionName: CharSpan, tlvBuffer: ByteSpan) std::optional~CHIP_ERROR~
    }
    class BooleanStateSensorDevice {
    }

    class PigweedAttributeAccessor {
        <<Pigweed Interceptor>>
        +Write(path: ConcreteDataAttributePath, reader: TLVReader)
    }
    class ShellCommandHandler {
        +HandleCommand(args)
    }

    OOBAccessorRegistry "1" *-- "many" OOBAccessor
    BooleanStateSensorAccessor --|> OOBAccessor
    BooleanStateSensorAccessor "1" --> "1" BooleanStateSensorDevice : references
    PigweedAttributeAccessor --> OOBAccessorRegistry : uses
    ShellCommandHandler --> OOBAccessorRegistry : uses