Skip to content

Commit 29ce74d

Browse files
committed
bluetooth: adjust signal strength algorithm
1 parent 2f20374 commit 29ce74d

File tree

1 file changed

+15
-16
lines changed

1 file changed

+15
-16
lines changed

src/bluetooth/device.cpp

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -56,24 +56,23 @@ BluetoothAdapter* BluetoothDevice::adapter() const {
5656
}
5757

5858
qint32 BluetoothDevice::signalStrength() const {
59-
// Convert RSSI (dBm) to a normalized 0-100 scale
60-
// Based on practical Bluetooth RSSI ranges:
61-
// -30 to -40 dBm = 85-100
62-
// -40 to -55 dBm = 65-85
63-
// -55 to -65 dBm = 45-65
64-
// -65 to -75 dBm = 25-45
65-
// -75 to -85 dBm = 10-25
66-
// <= -85 dBm = 0-10
67-
68-
auto rssiValue = this->bRssi.value();
69-
if (rssiValue == 0) {
70-
return 0;
71-
}
59+
if (this->bRssi.value() == 0) return 0;
7260

73-
auto rssi = std::max(static_cast<qint16>(-100), std::min(static_cast<qint16>(-30), rssiValue));
74-
auto normalized = static_cast<qint32>(((rssi + 100) / 70.0) * 100.0);
61+
auto rssi = std::clamp(static_cast<double>(this->bRssi.value()), -100.0, -30.0);
7562

76-
return std::max(0, std::min(100, normalized));
63+
if (rssi >= -60.0) {
64+
auto percentage = 75.0 + ((rssi + 60.0) / 30.0) * 25.0;
65+
return static_cast<qint32>(std::round(percentage));
66+
}
67+
if (rssi >= -80.0) {
68+
auto percentage = 9.0 + ((rssi + 80.0) / 20.0) * 66.0;
69+
return static_cast<qint32>(std::round(percentage));
70+
}
71+
if (rssi >= -90.0) {
72+
auto percentage = 0.0 + ((rssi + 90.0) / 10.0) * 9.0;
73+
return static_cast<qint32>(std::round(percentage));
74+
}
75+
return 0;
7776
}
7877

7978
void BluetoothDevice::setConnected(bool connected) {

0 commit comments

Comments
 (0)