// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #include "service-cellular/SignalStrength.hpp" #include SignalStrength::SignalStrength(int rssi) { setRssi(rssi); } int SignalStrength::rssiTodBm(const int rssi) { int ret = rssidBm_invalid; if (rssi == rssi_invalid || rssi == rssi_tdscmda_invalid) { return ret; } if (rssi >= rssi_low && rssi <= rssi_max) { ret = rssi_low_dBm - rssi * rssi_step; } else if (rssi >= rssi_tdscmda_low && rssi <= rssi_tdscmda_max) { LOG_WARN("TD-SCDMA rssi range - signal strength indicator not fully supported"); ret = rssi_tdscmda_low_dBm - rssi * rssi_tdscmda_step; } return ret; } Store::RssiBar SignalStrength::rssidBmToBar(const int rssidBm) { using namespace Store; if (rssidBm == rssidBm_invalid) { return RssiBar::zero; } else if (rssidBm >= rssidBm_four_bar_margin) { return RssiBar::four; } else if (rssidBm >= rssidBm_three_bar_margin) { return RssiBar::three; } else if (rssidBm >= rssidBm_two_bar_margin) { return RssiBar::two; } else if (rssidBm >= rssidBm_one_bar_margin) { return RssiBar::one; } else { return RssiBar::zero; } } void SignalStrength::setRssi(const int rssi) { data.rssi = rssi; data.rssidBm = rssiTodBm(data.rssi); data.rssiBar = rssidBmToBar(data.rssidBm); }