feat(network): signal strength

This commit is contained in:
Alexis 2018-08-09 22:05:15 +02:00
parent 6ccb029097
commit c276c3b907
4 changed files with 19 additions and 5 deletions

View File

@ -35,7 +35,8 @@ namespace waybar::modules {
double frequency;
} wireless_info_t;
private:
void _parseEssid(struct nlattr** bss);
void _parseEssid(struct nlattr **bss);
void _parseSignal(struct nlattr **bss);
bool _associatedOrJoined(struct nlattr **bss);
static int _scanCb(struct nl_msg *msg, void *data);
auto _getInfo() -> void;
@ -44,6 +45,7 @@ namespace waybar::modules {
Json::Value _config;
std::size_t _ifid;
std::string _essid;
int _signalStrength;
};
}

View File

@ -12,6 +12,6 @@
},
"network": {
"interface": "wlp2s0",
"format": "{} "
"format": "{essid} ({signalStrength}dBm) "
}
}

View File

@ -16,7 +16,10 @@ auto waybar::modules::Network::update() -> void
{
_getInfo();
auto format = _config["format"] ? _config["format"].asString() : "{}";
_label.set_text(fmt::format(format, _essid));
_label.set_text(fmt::format(format,
fmt::arg("essid", _essid),
fmt::arg("signalStrength", _signalStrength)
));
}
int waybar::modules::Network::_scanCb(struct nl_msg *msg, void *data) {
@ -44,7 +47,8 @@ int waybar::modules::Network::_scanCb(struct nl_msg *msg, void *data) {
if (!net->_associatedOrJoined(bss))
return NL_SKIP;
net->_parseEssid(bss);
// TODO: parse signal
net->_parseSignal(bss);
// TODO: parse quality
return NL_SKIP;
}
@ -70,6 +74,14 @@ void waybar::modules::Network::_parseEssid(struct nlattr **bss)
}
}
void waybar::modules::Network::_parseSignal(struct nlattr **bss) {
if (bss[NL80211_BSS_SIGNAL_MBM] != nullptr) {
// signalstrength in dBm
_signalStrength =
static_cast<int>(nla_get_u32(bss[NL80211_BSS_SIGNAL_MBM])) / 100;
}
}
bool waybar::modules::Network::_associatedOrJoined(struct nlattr** bss)
{
if (!bss[NL80211_BSS_STATUS])

View File

@ -59,7 +59,7 @@ void waybar::modules::Workspaces::_updateThread()
{
_thread = new waybar::util::SleeperThread([this] {
update();
_thread->sleep_for(waybar::chrono::milliseconds(250));
_thread->sleep_for(waybar::chrono::milliseconds(150));
});
}