// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #include "DriverI2C.hpp" #include "critical.hpp" #if defined(TARGET_RT1051) #include "board/rt1051/drivers/RT1051DriverI2C.hpp" #elif defined(TARGET_Linux) #else #error "Unsupported target" #endif namespace drivers { std::weak_ptr DriverI2C::singleton[static_cast(I2CInstances::COUNT)]; std::shared_ptr DriverI2C::Create(const drivers::I2CInstances instance, const drivers::DriverI2CParams ¶ms) { { cpp_freertos::CriticalSection::Enter(); std::shared_ptr inst = singleton[static_cast(instance)].lock(); if (!inst) { #if defined(TARGET_RT1051) inst = std::make_shared(instance, params); #elif defined(TARGET_Linux) #else #error "Unsupported target" #endif singleton[static_cast(instance)] = inst; } cpp_freertos::CriticalSection::Exit(); return inst; } } } // namespace drivers