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