@@ -494,20 +494,22 @@ function startRepeaterTracking(sessionLi) {
494494 if ( packet . getPayloadType ( ) === Packet . PAYLOAD_TYPE_GRP_TXT &&
495495 packet . path && packet . path . length > 0 ) {
496496 // Extract repeater ID (first byte of path)
497- // Note: repeaterId can be 0 (valid byte value), so we check path.length instead
498497 const repeaterId = packet . path [ 0 ] ;
499498
500499 // Validate repeater ID is a valid byte value (0-255)
501- if ( typeof repeaterId !== 'number' || repeaterId < 0 || repeaterId > 255 ) {
500+ // Note: repeaterId can be 0 (valid byte value), so we check type and range
501+ if ( repeaterId === undefined || typeof repeaterId !== 'number' ||
502+ ! Number . isInteger ( repeaterId ) || repeaterId < 0 || repeaterId > 255 ) {
502503 console . warn ( `Invalid repeater ID: ${ repeaterId } ` ) ;
503504 return ;
504505 }
505506
506- // SNR ranges from -12 to +12 dB (Int8 / 4)
507+ // SNR ranges from -12 to +12 dB
508+ // Note: logData.lastSnr is already processed (readInt8() / 4) by the connection layer
507509 const snr = Math . round ( logData . lastSnr ) ;
508510
509- // Store or update repeater data (keep best/strongest SNR if duplicate)
510- // Higher (less negative) SNR values indicate better signal quality
511+ // Store or update repeater data
512+ // Keep the highest SNR value (closest to +12dB) for duplicate repeaters
511513 if ( ! state . repeaterData . repeaters . has ( repeaterId ) ||
512514 state . repeaterData . repeaters . get ( repeaterId ) < snr ) {
513515 state . repeaterData . repeaters . set ( repeaterId , snr ) ;
0 commit comments