~aleteoryx/muditaos

82922d21bee6716a07387a3a4c53a2d174ac09d2 — Mateusz Piesta 4 years ago 51a8925
[BH-795] Add temperature mock

Added temperature interface implementation
for Linux. Added dummy implementation for
RT1051 target.
M module-bsp/CMakeLists.txt => module-bsp/CMakeLists.txt +3 -0
@@ 23,6 23,9 @@ target_sources(
        drivers/pwm/DriverPWM.cpp
        drivers/semc/DriverSEMC.cpp
        drivers/usdhc/DriverUSDHC.cpp

    PUBLIC
        hal/temperature_source/TemperatureSource.hpp
)
add_board_subdirectory(board)


M module-bsp/board/linux/CMakeLists.txt => module-bsp/board/linux/CMakeLists.txt +1 -0
@@ 23,6 23,7 @@ target_sources(module-bsp
                vibrator/vibrator.cpp
                watchdog/software_watchdog.cpp
                watchdog/watchdog.cpp
                hal/temperature_source/TemperatureSource.cpp

                ${CMAKE_CURRENT_BINARY_DIR}/eink-config.h
)

A module-bsp/board/linux/hal/temperature_source/TemperatureSource.cpp => module-bsp/board/linux/hal/temperature_source/TemperatureSource.cpp +32 -0
@@ 0,0 1,32 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include <module-bsp/hal/temperature_source/TemperatureSource.hpp>
#include <hal/GenericFactory.hpp>

namespace hal::temperature
{

    class LinuxTemperatureSource : public AbstractTemperatureSource
    {
      public:
        Result read()
        {
            temperature += 1.0;
            if (temperature > limitUp) {
                temperature = limitDown;
            }
            return temperature;
        }

      private:
        static constexpr AbstractTemperatureSource::Temperature limitUp   = 10.0;
        static constexpr AbstractTemperatureSource::Temperature limitDown = -10.0;
        AbstractTemperatureSource::Temperature temperature{};
    };

    std::shared_ptr<AbstractTemperatureSource> AbstractTemperatureSource::Factory::create()
    {
        return hal::impl::factory<LinuxTemperatureSource, AbstractTemperatureSource>();
    }
} // namespace hal::temperature

M module-bsp/board/rt1051/bellpx/CMakeLists.txt => module-bsp/board/rt1051/bellpx/CMakeLists.txt +4 -0
@@ 8,6 8,10 @@ target_include_directories(

target_sources(
        module-bsp

    PRIVATE
        hal/temperature_source/TemperatureSource.cpp

    PUBLIC
        eink-config.h
)

A module-bsp/board/rt1051/bellpx/hal/temperature_source/TemperatureSource.cpp => module-bsp/board/rt1051/bellpx/hal/temperature_source/TemperatureSource.cpp +23 -0
@@ 0,0 1,23 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include <module-bsp/hal/temperature_source/TemperatureSource.hpp>
#include <hal/GenericFactory.hpp>

namespace hal::temperature
{

    class RT1051TemperatureSource : public AbstractTemperatureSource
    {
      public:
        Result read() override
        {
            return hal::temperature::AbstractTemperatureSource::Result();
        }
    };

    std::shared_ptr<AbstractTemperatureSource> AbstractTemperatureSource::Factory::create()
    {
        return hal::impl::factory<RT1051TemperatureSource, AbstractTemperatureSource>();
    }
} // namespace hal::temperature

A module-bsp/hal/GenericFactory.hpp => module-bsp/hal/GenericFactory.hpp +24 -0
@@ 0,0 1,24 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once

#include <module-os/CriticalSectionGuard.hpp>

#include <memory>

namespace hal::impl
{
    template <typename TDerived, typename TInterface, typename... Args>
    inline std::shared_ptr<TInterface> factory(Args... args)
    {
        const auto criticalSection = cpp_freertos::CriticalSectionGuard{};
        static std::weak_ptr<TDerived> singleton;
        auto inst = singleton.lock();
        if (not inst) {
            inst      = std::make_shared<TDerived>(args...);
            singleton = inst;
        }
        return inst;
    }
} // namespace hal::impl

M module-bsp/hal/temperature_source/TemperatureSource.hpp => module-bsp/hal/temperature_source/TemperatureSource.hpp +14 -5
@@ 3,15 3,24 @@

#pragma once

#include <memory>
#include <optional>

namespace bsp::hal
namespace hal::temperature
{
    class TemperatureSource
    class AbstractTemperatureSource
    {
      public:
        using Temperature     = float; ///< Celsius degrees
        using Result          = std::optional<Temperature>;
        struct Factory
        {
            static std::shared_ptr<AbstractTemperatureSource> create();
        };

        virtual ~AbstractTemperatureSource() = default;

        using Temperature = float; ///< Celsius degrees
        using Result      = std::optional<Temperature>;

        virtual Result read() = 0;
    };
} // namespace bsp::hal
} // namespace hal::temperature