mirror of
https://github.com/mudita/MuditaOS.git
synced 2026-07-03 20:57:19 -04:00
60 lines
1.4 KiB
C++
60 lines
1.4 KiB
C++
#include "SignalStrength.hpp"
|
|
#include <log/log.hpp>
|
|
|
|
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_five_bar_margin) {
|
|
return RssiBar::five;
|
|
}
|
|
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);
|
|
}
|