@@ -829,9 +829,6 @@ static void pios_openlrs_rx_loop(struct pios_openlrs_dev *openlrs_dev)
829829 OPLinkStatusData oplink_status ;
830830 OPLinkStatusGet (& oplink_status );
831831
832- // Update the RSSI
833- oplink_status .RSSI = openlrs_dev -> rssi ;
834-
835832 timeUs = PIOS_DELAY_GetuS ();
836833 timeMs = PIOS_Thread_Systime ();
837834
@@ -860,8 +857,8 @@ static void pios_openlrs_rx_loop(struct pios_openlrs_dev *openlrs_dev)
860857
861858 openlrs_dev -> lastPacketTimeUs = timeUs ;
862859 openlrs_dev -> numberOfLostPackets = 0 ;
863- oplink_status . LinkQuality <<= 1 ;
864- oplink_status . LinkQuality |= 1 ;
860+ openlrs_dev -> link_quality <<= 1 ;
861+ openlrs_dev -> link_quality |= 1 ;
865862
866863 if ((openlrs_dev -> rx_buf [0 ] & 0x3e ) == 0x00 ) {
867864 // This flag indicates receiving PPM data
@@ -928,7 +925,7 @@ static void pios_openlrs_rx_loop(struct pios_openlrs_dev *openlrs_dev)
928925 }
929926 tx_buf [4 ] = (openlrs_dev -> lastAFCCvalue >> 8 );
930927 tx_buf [5 ] = openlrs_dev -> lastAFCCvalue & 0xff ;
931- tx_buf [6 ] = countSetBits (oplink_status . LinkQuality & 0x7fff );
928+ tx_buf [6 ] = countSetBits (openlrs_dev -> link_quality & 0x7fff );
932929 }
933930 }
934931
@@ -949,7 +946,7 @@ static void pios_openlrs_rx_loop(struct pios_openlrs_dev *openlrs_dev)
949946 if ((openlrs_dev -> numberOfLostPackets < openlrs_dev -> hopcount ) && (PIOS_DELAY_GetuSSince (openlrs_dev -> lastPacketTimeUs ) > (getInterval (& openlrs_dev -> bind_data ) + packet_timeout_us ))) {
950947 DEBUG_PRINTF (2 , "OLRS WARN: Lost packet: %d\r\n" , openlrs_dev -> numberOfLostPackets );
951948 // we lost packet, hop to next channel
952- oplink_status . LinkQuality <<= 1 ;
949+ openlrs_dev -> link_quality <<= 1 ;
953950 openlrs_dev -> willhop = 1 ;
954951 if (openlrs_dev -> numberOfLostPackets == 0 ) {
955952 openlrs_dev -> linkLossTimeMs = timeMs ;
@@ -961,7 +958,7 @@ static void pios_openlrs_rx_loop(struct pios_openlrs_dev *openlrs_dev)
961958 } else if ((openlrs_dev -> numberOfLostPackets >= openlrs_dev -> hopcount ) && (PIOS_DELAY_GetuSSince (openlrs_dev -> lastPacketTimeUs ) > (getInterval (& openlrs_dev -> bind_data ) * openlrs_dev -> hopcount ))) {
962959 DEBUG_PRINTF (2 , "ORLS WARN: Trying to resync\r\n" );
963960 // hop slowly to allow resync with TX
964- oplink_status . LinkQuality = 0 ;
961+ openlrs_dev -> link_quality = 0 ;
965962 openlrs_dev -> willhop = 1 ;
966963 openlrs_dev -> lastPacketTimeUs = timeUs ;
967964 }
@@ -1029,6 +1026,19 @@ static void pios_openlrs_rx_loop(struct pios_openlrs_dev *openlrs_dev)
10291026 openlrs_dev -> willhop = 0 ;
10301027 }
10311028
1029+ if (oplink_status .LinkState > OPLINKSTATUS_LINKSTATE_DISCONNECTED ) {
1030+ // Convert raw Rssi to dBm
1031+ oplink_status .RSSI = (int8_t )(openlrs_dev -> rssi >> 1 ) - 122 ;
1032+
1033+ // Count number of bits set in link_quality
1034+ uint8_t linkquality_bits = countSetBits (openlrs_dev -> link_quality & 0x7fff );
1035+ // Translate link quality to 0 - 128 range
1036+ oplink_status .LinkQuality = (linkquality_bits + 1 ) * 8 ;
1037+ } else {
1038+ oplink_status .LinkQuality = 0 ;
1039+ oplink_status .RSSI = -127 ;
1040+ }
1041+
10321042 // Update UAVO
10331043 OPLinkStatusSet (& oplink_status );
10341044}
0 commit comments