~aleteoryx/muditaos

f388b77cc61ec7d433c7d26af06997f5e978faf5 — Maciej Gibowicz 2 years ago 54bf831
[BH-1882] Fix display of "Connected" label on home screen

The "connected" label did not appear on the home screen if the USB was
connected during onboarding.
M module-apps/apps-common/ApplicationCommon.cpp => module-apps/apps-common/ApplicationCommon.cpp +0 -3
@@ 115,9 115,6 @@ namespace app
        connect(typeid(sdesktop::usb::USBConnected),
                [&](sys::Message *msg) -> sys::MessagePointer { return handleUsbStatusChange(); });
        connect(typeid(sdesktop::usb::USBDisconnected), [&](sys::Message *msg) -> sys::MessagePointer {
            if (onUsbDisconnected != nullptr) {
                onUsbDisconnected();
            }
            return handleUsbStatusChange();
        });


M module-apps/apps-common/ApplicationCommon.hpp => module-apps/apps-common/ApplicationCommon.hpp +0 -2
@@ 176,8 176,6 @@ namespace app
        using OnActionReceived = std::function<ActionResult(manager::actions::ActionParamsPtr &&)>;

      protected:
        std::function<void()> onUsbDisconnected;

        virtual sys::MessagePointer handleKBDKeyEvent(sys::Message *msgl);
        virtual sys::MessagePointer handleApplicationSwitch(sys::Message *msgl);
        virtual sys::MessagePointer handleAppClose(sys::Message *msgl);

M module-services/service-desktop/WorkerDesktop.cpp => module-services/service-desktop/WorkerDesktop.cpp +30 -13
@@ 1,4 1,4 @@
// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2024, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "service-desktop/ServiceDesktop.hpp"


@@ 15,7 15,8 @@

#include <utility>
#include <vector>
#include "system/messages/SentinelRegistrationMessage.hpp"
#include <system/messages/SentinelRegistrationMessage.hpp>
#include <module-utils/EventStore/EventStore.hpp>

WorkerDesktop::WorkerDesktop(sys::Service *ownerServicePtr,
                             std::function<void()> messageProcessedCallback,


@@ 216,23 217,15 @@ bool WorkerDesktop::handleIrqQueueMessage(std::shared_ptr<sys::WorkerQueue> &que

    switch (notification) {
    case bsp::USBDeviceStatus::Connected:
        LOG_DEBUG("USB status: Connected");
        ownerService->bus.sendMulticast(std::make_shared<sdesktop::usb::USBConnected>(),
                                        sys::BusChannel::USBNotifications);
        handleUsbConnected();
        break;

    case bsp::USBDeviceStatus::Configured:
        LOG_DEBUG("USB status: Configured");
        ownerService->bus.sendMulticast(std::make_shared<sdesktop::usb::USBConfigured>(),
                                        sys::BusChannel::USBNotifications);
        configured = true;
        handleUsbConfigured();
        break;

    case bsp::USBDeviceStatus::Disconnected:
        LOG_DEBUG("USB status: Disconnected");
        ownerService->bus.sendMulticast(std::make_shared<sdesktop::usb::USBDisconnected>(),
                                        sys::BusChannel::USBNotifications);
        configured = false;
        handleUsbDisconnected();
        break;

    case bsp::USBDeviceStatus::DataReceived:


@@ 254,6 247,30 @@ bool WorkerDesktop::handleIrqQueueMessage(std::shared_ptr<sys::WorkerQueue> &que
    return true;
}

void WorkerDesktop::handleUsbConnected()
{
    LOG_DEBUG("USB status: Connected");
    ownerService->bus.sendMulticast(std::make_shared<sdesktop::usb::USBConnected>(), sys::BusChannel::USBNotifications);
}

void WorkerDesktop::handleUsbDisconnected()
{
    LOG_DEBUG("USB status: Disconnected");
    Store::Usb::modify().status = Store::Usb::Status::NotConfigured;
    ownerService->bus.sendMulticast(std::make_shared<sdesktop::usb::USBDisconnected>(),
                                    sys::BusChannel::USBNotifications);
    configured = false;
}

void WorkerDesktop::handleUsbConfigured()
{
    LOG_DEBUG("USB status: Configured");
    Store::Usb::modify().status = Store::Usb::Status::Configured;
    ownerService->bus.sendMulticast(std::make_shared<sdesktop::usb::USBConfigured>(),
                                    sys::BusChannel::USBNotifications);
    configured = true;
}

bool WorkerDesktop::handleSignallingQueueMessage(std::shared_ptr<sys::WorkerQueue> &queue)
{
    if (!initialized) {

M module-services/service-desktop/WorkerDesktop.hpp => module-services/service-desktop/WorkerDesktop.hpp +5 -1
@@ 1,4 1,4 @@
// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2024, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once


@@ 46,6 46,10 @@ class WorkerDesktop : public sys::Worker
    bool handleIrqQueueMessage(std::shared_ptr<sys::WorkerQueue> &queue);
    bool handleSignallingQueueMessage(std::shared_ptr<sys::WorkerQueue> &queue);

    void handleUsbConnected();
    void handleUsbDisconnected();
    void handleUsbConfigured();

    std::atomic<bool> initialized = false;
    std::atomic<bool> configured  = false;


M module-utils/EventStore/EventStore.cpp => module-utils/EventStore/EventStore.cpp +13 -1
@@ 1,4 1,4 @@
// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2024, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "EventStore.hpp"


@@ 38,6 38,18 @@ namespace Store
        return false;
    }

    Usb usb;

    const Usb &Usb::get()
    {
        return usb;
    }

    Usb &Usb::modify()
    {
        return usb;
    }

    cpp_freertos::MutexStandard GSM::mutex;

    GSM *GSM::get()

M module-utils/EventStore/EventStore.hpp => module-utils/EventStore/EventStore.hpp +19 -1
@@ 1,4 1,4 @@
// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2024, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once


@@ 65,6 65,24 @@ namespace Store
        static bool takeUpdated();
    };

    struct Usb
    {
      public:
        enum class Status : bool
        {
            NotConfigured,
            Configured
        } status = Status::NotConfigured;

        /// @brief Returns const reference to Usb instance, used to read Usb status
        /// @return const Usb&
        static const Usb &get();

        /// @brief Returns reference to Usb instance, used to change Usb status
        /// @return Usb&
        static Usb &modify();
    };

    enum class RssiBar : size_t
    {
        zero  = 0,

M products/BellHybrid/apps/application-bell-main/ApplicationBellMain.cpp => products/BellHybrid/apps/application-bell-main/ApplicationBellMain.cpp +0 -5
@@ 82,7 82,6 @@ namespace app
        });

        connect(typeid(sdesktop::usb::USBConfigured), [&](sys::Message *msg) -> sys::MessagePointer {
            usbStatusModel->setUsbStatus(app::AbstractUsbStatusModel::UsbStatus::Connected);
            if (getCurrentWindow()->getName() == gui::name::window::main_window) {
                homeScreenPresenter->updateUsbStatus();
            }


@@ 98,10 97,6 @@ namespace app
            alarmModel->activateAlarm(true);
            return sys::msgHandled();
        });

        onUsbDisconnected = [this]() {
            usbStatusModel->setUsbStatus(app::AbstractUsbStatusModel::UsbStatus::Disconnected);
        };
    }

    sys::ReturnCodes ApplicationBellMain::InitHandler()

M products/BellHybrid/apps/application-bell-main/models/UsbStatusModel.cpp => products/BellHybrid/apps/application-bell-main/models/UsbStatusModel.cpp +3 -3
@@ 7,11 7,11 @@ namespace app
{
    bool UsbStatusModel::isUsbConnected(const Store::Battery::State &state) const
    {
        return ((usbConnected == UsbStatus::Connected) && (state == Store::Battery::State::PluggedNotCharging));
        return (isUsbConfigured() && (state == Store::Battery::State::PluggedNotCharging));
    }

    void UsbStatusModel::setUsbStatus(UsbStatus status)
    bool UsbStatusModel::isUsbConfigured() const
    {
        usbConnected = status;
        return Store::Usb::get().status == Store::Usb::Status::Configured;
    }
} // namespace app

M products/BellHybrid/apps/application-bell-main/models/UsbStatusModel.hpp => products/BellHybrid/apps/application-bell-main/models/UsbStatusModel.hpp +1 -9
@@ 10,25 10,17 @@ namespace app
    class AbstractUsbStatusModel
    {
      public:
        enum class UsbStatus : bool
        {
            Disconnected,
            Connected
        };

        virtual ~AbstractUsbStatusModel() noexcept = default;

        virtual bool isUsbConnected(const Store::Battery::State &state) const = 0;
        virtual void setUsbStatus(UsbStatus status)                           = 0;
    };

    class UsbStatusModel : public AbstractUsbStatusModel
    {
      public:
        bool isUsbConnected(const Store::Battery::State &state) const override;
        void setUsbStatus(UsbStatus status) override;

      private:
        UsbStatus usbConnected{UsbStatus::Disconnected};
        bool isUsbConfigured() const;
    };
} // namespace app