mirror of
https://github.com/mudita/MuditaOS.git
synced 2025-12-30 01:18:11 -05:00
The "connected" label did not appear on the home screen if the USB was connected during onboarding.
212 lines
5.3 KiB
C++
212 lines
5.3 KiB
C++
// Copyright (c) 2017-2024, Mudita Sp. z.o.o. All rights reserved.
|
|
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
|
|
|
|
#pragma once
|
|
|
|
// static lifetime read only cache for (hw) states to not poll
|
|
// right now it serves data from:
|
|
// - battery
|
|
// - gsm SIM tray
|
|
// it's not meant to serve as polling interface - rather to serve data
|
|
|
|
#include <hal/cellular/SIM.hpp>
|
|
|
|
#include <cstddef>
|
|
#include <string>
|
|
|
|
namespace cpp_freertos
|
|
{
|
|
class MutexStandard;
|
|
} // namespace cpp_freertos
|
|
|
|
namespace Store
|
|
{
|
|
struct Battery
|
|
{
|
|
private:
|
|
static bool updated;
|
|
|
|
public:
|
|
enum class LevelState : std::uint8_t
|
|
{
|
|
Normal,
|
|
Shutdown,
|
|
CriticalCharging,
|
|
CriticalNotCharging
|
|
} levelState = LevelState::Normal;
|
|
|
|
enum class State : std::uint8_t
|
|
{
|
|
Discharging,
|
|
Charging,
|
|
ChargingDone,
|
|
PluggedNotCharging,
|
|
} state = State::Discharging;
|
|
|
|
enum class Temperature : std::uint8_t
|
|
{
|
|
Normal,
|
|
TooLow,
|
|
TooHigh,
|
|
Unknown
|
|
} temperature = Temperature::Normal;
|
|
|
|
unsigned level = 0;
|
|
|
|
/// @brief Returns const reference to Battery instance, used to read battery state
|
|
/// @return const Battery&
|
|
static const Battery &get();
|
|
|
|
/// @brief Returns reference to Battery instance, used to change battery state
|
|
/// @return Battery&
|
|
static Battery &modify();
|
|
|
|
static void setUpdated();
|
|
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,
|
|
one = 1,
|
|
two = 2,
|
|
three = 3,
|
|
four = 4,
|
|
noOfSupportedBars
|
|
};
|
|
|
|
struct SignalStrength
|
|
{
|
|
int rssi = 0;
|
|
int rssidBm = 0;
|
|
RssiBar rssiBar = RssiBar::zero;
|
|
};
|
|
|
|
enum class Tethering
|
|
{
|
|
Off,
|
|
On
|
|
};
|
|
|
|
struct Network
|
|
{
|
|
enum class Status
|
|
{
|
|
NotRegistered,
|
|
RegisteredHomeNetwork,
|
|
Searching,
|
|
RegistrationDenied,
|
|
Unknown,
|
|
RegisteredRoaming
|
|
} status = Status::NotRegistered;
|
|
|
|
enum class AccessTechnology
|
|
{
|
|
Gsm = 0,
|
|
Utran = 2,
|
|
GsmWEgprs,
|
|
UtranWHsdpa,
|
|
UtranWHsupa,
|
|
UtranWHsdpaAndWHsupa,
|
|
EUtran,
|
|
Cdma = 100,
|
|
Wcdma,
|
|
Unknown = 255
|
|
} accessTechnology = AccessTechnology::Unknown;
|
|
|
|
inline bool operator==(const Network &rhs)
|
|
{
|
|
return this->status == rhs.status && this->accessTechnology == rhs.accessTechnology;
|
|
}
|
|
inline bool operator!=(const Network &rhs)
|
|
{
|
|
return !(*this == rhs);
|
|
}
|
|
};
|
|
|
|
struct GSM
|
|
{
|
|
private:
|
|
GSM() = default;
|
|
SignalStrength signalStrength;
|
|
Network network;
|
|
std::string networkOperatorName;
|
|
Tethering tethering;
|
|
|
|
static cpp_freertos::MutexStandard mutex;
|
|
|
|
public:
|
|
GSM(const GSM &) = delete;
|
|
GSM &operator=(const GSM &) = delete;
|
|
|
|
enum class Tray
|
|
{
|
|
OUT,
|
|
IN
|
|
} tray = Tray::IN;
|
|
/// tray - tray actual status which is visible right now on screen
|
|
/// selected - tray selection settings settable sim tray
|
|
enum class SIM
|
|
{
|
|
SIM1 = static_cast<int>(hal::cellular::SimSlot::SIM1),
|
|
SIM2 = static_cast<int>(hal::cellular::SimSlot::SIM2),
|
|
SIM_NEED_PIN,
|
|
SIM_NEED_PUK,
|
|
SIM_LOCKED,
|
|
SIM_FAIL,
|
|
SIM_UNKNOWN,
|
|
NONE,
|
|
} sim = SIM::SIM_UNKNOWN;
|
|
|
|
enum class SelectedSIM
|
|
{
|
|
SIM1 = static_cast<int>(SIM::SIM1),
|
|
SIM2 = static_cast<int>(SIM::SIM2),
|
|
NONE,
|
|
} selected = SelectedSIM::SIM1;
|
|
|
|
bool simCardInserted();
|
|
|
|
/// state of modem
|
|
enum class Modem
|
|
{
|
|
OFF, /// modem is off - it's not working
|
|
ON_INITIALIZING, /// modem is set to on, just started - initialization not done yet
|
|
ON_NEED_SIMFLOW, /// modem is on, initialized, no SIM initialization yet
|
|
ON_INITIALIZED, /// modem is on, and it's fully initialized
|
|
} modem = Modem::OFF;
|
|
|
|
void setSignalStrength(const SignalStrength &newSignalStrength);
|
|
SignalStrength getSignalStrength() const;
|
|
|
|
void setNetwork(const Network &network);
|
|
Network getNetwork() const;
|
|
|
|
void setNetworkOperatorName(const std::string &newNetworkOperatorName);
|
|
std::string getNetworkOperatorName() const;
|
|
|
|
void setTethering(const Tethering &newTethering);
|
|
Tethering getTethering() const;
|
|
|
|
static GSM *get();
|
|
};
|
|
}; // namespace Store
|