#ifndef LIVOXPROTO1_CORE_H #define LIVOXPROTO1_CORE_H #include #include #include #include #include "device.h" #include "broadcastListener.h" namespace livoxProto1 { class DeviceManager { public: DeviceManager(); ~DeviceManager() = default; static void deviceGoneAwayInd(const comms::DiscoveredDevice &device); std::shared_ptr getOrCreateDevice( const std::string &deviceIdentifier, const std::shared_ptr& componentThread, int handshakeTimeoutMs, int retryDelayMs, const std::string& smoIp, uint8_t smoSubnetNbits, uint16_t dataPort, uint16_t cmdPort, uint16_t imuPort); std::shared_ptr getDevice(const std::string &deviceIdentifier); std::shared_ptr getDevice(const comms::DiscoveredDevice &device) { return getDevice(device.deviceIdentifier); } private: // Helper methods bool isDeviceKnown(const std::string& deviceIdentifier); // Configuration static constexpr int RETRY_DELAY_SECONDS = 3; // seconds delay public: std::vector> devices; comms::BroadcastListener broadcastListener; }; void main(const std::shared_ptr &componentThread); void exit(void); // Global state structure struct ProtoState { bool isInitialized = false; std::shared_ptr componentThread; std::unique_ptr deviceManager; }; // Access to global state for extern "C" functions ProtoState& getProtoState(); } // namespace livoxProto1 #endif // LIVOXPROTO1_CORE_H