@@ -1372,41 +1372,86 @@ function updateVehicleInfo(vcallsign, newPosition) {
1372
1372
1373
1373
var callsign_list = [ ] ;
1374
1374
1375
- if ( $ . type ( newPosition . callsign ) === "string" ) {
1376
- // Single callsign entry, as a string (chase cars)
1377
- callsign_list = newPosition . callsign ;
1378
- } else {
1379
- // Multiple callsigns, as an object
1380
- for ( var rxcall in newPosition . callsign ) {
1381
- if ( newPosition . callsign . hasOwnProperty ( rxcall ) ) {
1382
- _new_call = rxcall ;
1383
- tempFields = [ ] ;
1384
- if ( newPosition . callsign [ rxcall ] . hasOwnProperty ( 'snr' ) ) {
1385
- if ( newPosition . callsign [ rxcall ] . snr ) {
1386
- tempFields . push ( newPosition . callsign [ rxcall ] . snr . toFixed ( 0 ) + " dB" ) ;
1375
+ var current_time = convert_time ( newPosition . server_time )
1376
+
1377
+ for ( var i = 0 ; i < vehicle . receiver_info . length ; i ++ ) {
1378
+ if ( vehicle . receiver_info [ i ] [ "time" ] < current_time - 15000 ) {
1379
+ vehicle . receiver_info . splice ( i , 1 ) ;
1380
+ }
1381
+ }
1382
+
1383
+ function addReceiver ( callsign ) {
1384
+ for ( var i = 0 ; i < vehicle . receiver_info . length ; i ++ ) {
1385
+ if ( vehicle . receiver_info [ i ] [ "callsign" ] === callsign ) {
1386
+ vehicle . receiver_info [ i ] [ "time" ] = current_time
1387
+ if ( newPosition . callsign [ callsign ] . hasOwnProperty ( 'snr' ) ) {
1388
+ if ( newPosition . callsign [ callsign ] . snr ) {
1389
+ vehicle . receiver_info [ i ] . snr = newPosition . callsign [ rxcall ] . snr . toFixed ( 0 )
1387
1390
}
1388
1391
}
1389
- if ( newPosition . callsign [ rxcall ] . hasOwnProperty ( 'rssi' ) ) {
1390
- if ( newPosition . callsign [ rxcall ] . rssi ) {
1391
- tempFields . push ( newPosition . callsign [ rxcall ] . rssi . toFixed ( 0 ) + " dBm" ) ;
1392
+ if ( newPosition . callsign [ callsign ] . hasOwnProperty ( 'rssi' ) ) {
1393
+ if ( newPosition . callsign [ callsign ] . rssi ) {
1394
+ vehicle . receiver_info [ i ] . rssi = newPosition . callsign [ rxcall ] . rssi . toFixed ( 0 )
1392
1395
}
1393
1396
}
1394
- if ( newPosition . callsign [ rxcall ] . hasOwnProperty ( 'frequency' ) ) {
1395
- if ( newPosition . callsign [ rxcall ] . frequency ) {
1396
- tempFields . push ( newPosition . callsign [ rxcall ] . frequency + " MHz" ) ;
1397
+ if ( newPosition . callsign [ callsign ] . hasOwnProperty ( 'frequency' ) ) {
1398
+ if ( newPosition . callsign [ callsign ] . frequency ) {
1399
+ vehicle . receiver_info [ i ] . frequency = newPosition . callsign [ rxcall ] . frequency . toFixed ( 4 )
1397
1400
}
1398
1401
}
1399
- if ( tempFields . length > 0 ) {
1400
- _new_call += " (" + tempFields . join ( ", " ) + ")" ;
1401
- }
1402
- callsign_list . push ( _new_call ) ; // catch cases where there are no fields
1402
+ return
1403
+ }
1404
+ }
1405
+ var temp_receiver = { callsign : callsign , time : current_time }
1406
+ if ( newPosition . callsign [ callsign ] . hasOwnProperty ( 'snr' ) ) {
1407
+ if ( newPosition . callsign [ callsign ] . snr ) {
1408
+ temp_receiver . snr = newPosition . callsign [ rxcall ] . snr . toFixed ( 0 )
1409
+ }
1410
+ }
1411
+ if ( newPosition . callsign [ callsign ] . hasOwnProperty ( 'rssi' ) ) {
1412
+ if ( newPosition . callsign [ callsign ] . rssi ) {
1413
+ temp_receiver . rssi = newPosition . callsign [ rxcall ] . rssi . toFixed ( 0 )
1414
+ }
1415
+ }
1416
+ if ( newPosition . callsign [ callsign ] . hasOwnProperty ( 'frequency' ) ) {
1417
+ if ( newPosition . callsign [ callsign ] . frequency ) {
1418
+ temp_receiver . frequency = newPosition . callsign [ rxcall ] . frequency . toFixed ( 4 )
1419
+ }
1420
+ }
1421
+ vehicle . receiver_info . push ( temp_receiver )
1422
+ }
1423
+
1424
+ if ( $ . type ( newPosition . callsign ) === "string" ) {
1425
+ // Single callsign entry, as a string (chase cars)
1426
+ callsign_list = newPosition . callsign ;
1427
+ } else {
1428
+ // Multiple callsigns, as an object
1429
+ for ( var rxcall in newPosition . callsign ) {
1430
+ addReceiver ( rxcall )
1431
+ }
1432
+
1433
+ for ( var receiver in vehicle . receiver_info ) {
1434
+ _new_call = "- " + vehicle . receiver_info [ receiver ] . callsign ;
1435
+ tempFields = [ ] ;
1436
+ if ( vehicle . receiver_info [ receiver ] . hasOwnProperty ( 'snr' ) ) {
1437
+ tempFields . push ( vehicle . receiver_info [ receiver ] . snr + " dB" ) ;
1438
+ }
1439
+ if ( vehicle . receiver_info [ receiver ] . hasOwnProperty ( 'rssi' ) ) {
1440
+ tempFields . push ( vehicle . receiver_info [ receiver ] . rssi + " dBm" ) ;
1441
+ }
1442
+ if ( vehicle . receiver_info [ receiver ] . hasOwnProperty ( 'frequency' ) ) {
1443
+ tempFields . push ( vehicle . receiver_info [ receiver ] . frequency + " MHz" ) ;
1403
1444
}
1445
+ if ( tempFields . length > 0 ) {
1446
+ _new_call += " (" + tempFields . join ( ", " ) + ")" ;
1447
+ }
1448
+ callsign_list . push ( _new_call ) ; // catch cases where there are no fields
1404
1449
}
1405
- callsign_list = callsign_list . join ( ", " ) ;
1450
+ callsign_list = callsign_list . join ( "<br> " ) ;
1406
1451
}
1407
1452
1408
1453
var timeNow = new Date ( ) ;
1409
- var timeSent = convert_time ( newPosition . server_time ) ;
1454
+ var timeSent = convert_time ( newPosition . gps_time ) ;
1410
1455
var timeChosen = null ;
1411
1456
1412
1457
if ( timeSent > timeNow ) {
@@ -2551,7 +2596,8 @@ function addPosition(position) {
2551
2596
graph_data : [ ] ,
2552
2597
graph_yaxes : [ ] ,
2553
2598
updated : false ,
2554
- start_time : 2147483647000
2599
+ start_time : 2147483647000 ,
2600
+ receiver_info : [ ]
2555
2601
} ;
2556
2602
2557
2603
// deep copy yaxes config for graph
@@ -2658,24 +2704,29 @@ function addPosition(position) {
2658
2704
if ( vehicle . num_positions > 0 && dt > 0 ) {
2659
2705
var search_ts = new_ts - 10000
2660
2706
2661
- function searchPositions ( time ) {
2662
- return time <= search_ts
2707
+ function searchPositions ( times ) {
2708
+ for ( i = times . length ; i >= 0 ; i -- ) {
2709
+ if ( times [ i ] <= search_ts ) {
2710
+ return times [ i ]
2711
+ }
2712
+ }
2713
+ return null
2663
2714
}
2664
2715
2665
- var search_matches = vehicle . positions_ts . filter ( searchPositions )
2716
+ var search_match = searchPositions ( vehicle . positions_ts )
2717
+ var search_index = vehicle . positions_ts . indexOf ( search_match )
2666
2718
2667
- if ( search_matches . length > 0 && search_matches [ search_matches . length - 1 ] >= search_ts - 5000 ) {
2668
- var search_match = search_matches [ search_matches . length - 1 ]
2719
+ if ( search_match != null && search_match >= search_ts - 5000 ) {
2669
2720
var dtt = ( curr_ts - search_match ) / 1000 ;
2670
2721
2671
2722
// calculate vertical rate
2672
- var rate = ( position . gps_alt - vehicle . positions_alts [ search_matches . length - 1 ] ) / dtt ;
2723
+ var rate = ( position . gps_alt - vehicle . positions_alts [ search_index ] ) / dtt ;
2673
2724
if ( ! isNaN ( rate ) && isFinite ( rate ) ) {
2674
2725
vehicle . ascent_rate = 0.2 * rate + 0.8 * vehicle . ascent_rate ;
2675
2726
}
2676
2727
2677
2728
// calculate horizontal rate
2678
- horizontal_rate_temp = new_latlng . distanceTo ( vehicle . positions [ search_matches . length - 1 ] ) / dtt ;
2729
+ horizontal_rate_temp = new_latlng . distanceTo ( vehicle . positions [ search_index ] ) / dtt ;
2679
2730
if ( ! isNaN ( horizontal_rate_temp ) && isFinite ( horizontal_rate_temp ) ) {
2680
2731
vehicle . horizontal_rate = horizontal_rate_temp ;
2681
2732
}
@@ -3310,6 +3361,7 @@ function refreshReceivers() {
3310
3361
updateReceivers ( response ) ;
3311
3362
} ,
3312
3363
complete : function ( request , textStatus ) {
3364
+ periodical_receivers = setTimeout ( function ( ) { refreshReceivers ( false ) } , 60 * 5 * 1000 ) ;
3313
3365
if ( ! offline . get ( "opt_hide_chase" ) ) {
3314
3366
refreshNewReceivers ( true ) ;
3315
3367
}
0 commit comments