Fix RSSI bloccato al 39% nel modo MAVLINK

RADIO_STATUS.rssi/remrssi vanno su scala 0..254 (i GCS riscalano a %:
mwp fa raw*1023/255). Si mandava link_quality grezzo 0..100, quindi con
LQ=100 mwp mostrava 100/2.55 = 39% fisso. Riscalato a 0..254 (come gia'
fa il modo LTM). Root cause confermata dal sorgente mwp (mwp-mavlink_msg.vala).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Francesco Zanin
2026-06-23 19:35:00 +02:00
parent e22a47fce1
commit 67933bcfc1

View File

@@ -142,7 +142,13 @@ static void mav_tick() {
}
if (now - tRADIO >= 1000) { // RADIO_STATUS 1 Hz (RSSI / link quality)
tRADIO = now;
uint8_t r = c_lq; // link quality % (0..100)
// RADIO_STATUS.rssi/remrssi sono attesi su scala 0..254 (i GCS la
// riscalano a percentuale: mwp fa raw*1023/255, cioe' % = raw/2.55).
// c_lq e' 0..100: va riscalato a 0..254, altrimenti con LQ=100 mwp
// mostra 100/2.55 = 39% fisso (bug "RSSI bloccato al 39%"). Stesso
// scaling gia' usato dal modo LTM. 254 e non 255: alcuni reader
// trattano 255 come "invalido".
uint8_t r = (uint8_t)((uint16_t)c_lq * 254 / 100);
mavlink_msg_radio_status_pack(SYSID, COMPID, &mmsg,
r, r, 100, 0, 0, 0, 0); // rssi, remrssi, txbuf, noise...
sendMsg();