@@ -56,24 +56,23 @@ BluetoothAdapter* BluetoothDevice::adapter() const {
5656}
5757
5858qint32 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
7978void BluetoothDevice::setConnected (bool connected) {
0 commit comments