@@ -56,24 +56,23 @@ BluetoothAdapter* BluetoothDevice::adapter() const {
56
56
}
57
57
58
58
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 ;
72
60
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 );
75
62
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 ;
77
76
}
78
77
79
78
void BluetoothDevice::setConnected (bool connected) {
0 commit comments