@@ -1372,41 +1372,86 @@ function updateVehicleInfo(vcallsign, newPosition) {
13721372
13731373 var callsign_list = [ ] ;
13741374
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 )
13871390 }
13881391 }
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 )
13921395 }
13931396 }
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 )
13971400 }
13981401 }
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" ) ;
14031444 }
1445+ if ( tempFields . length > 0 ) {
1446+ _new_call += " (" + tempFields . join ( ", " ) + ")" ;
1447+ }
1448+ callsign_list . push ( _new_call ) ; // catch cases where there are no fields
14041449 }
1405- callsign_list = callsign_list . join ( ", " ) ;
1450+ callsign_list = callsign_list . join ( "<br> " ) ;
14061451 }
14071452
14081453 var timeNow = new Date ( ) ;
1409- var timeSent = convert_time ( newPosition . server_time ) ;
1454+ var timeSent = convert_time ( newPosition . gps_time ) ;
14101455 var timeChosen = null ;
14111456
14121457 if ( timeSent > timeNow ) {
@@ -2551,7 +2596,8 @@ function addPosition(position) {
25512596 graph_data : [ ] ,
25522597 graph_yaxes : [ ] ,
25532598 updated : false ,
2554- start_time : 2147483647000
2599+ start_time : 2147483647000 ,
2600+ receiver_info : [ ]
25552601 } ;
25562602
25572603 // deep copy yaxes config for graph
@@ -2658,24 +2704,29 @@ function addPosition(position) {
26582704 if ( vehicle . num_positions > 0 && dt > 0 ) {
26592705 var search_ts = new_ts - 10000
26602706
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
26632714 }
26642715
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 )
26662718
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 ) {
26692720 var dtt = ( curr_ts - search_match ) / 1000 ;
26702721
26712722 // 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 ;
26732724 if ( ! isNaN ( rate ) && isFinite ( rate ) ) {
26742725 vehicle . ascent_rate = 0.2 * rate + 0.8 * vehicle . ascent_rate ;
26752726 }
26762727
26772728 // 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 ;
26792730 if ( ! isNaN ( horizontal_rate_temp ) && isFinite ( horizontal_rate_temp ) ) {
26802731 vehicle . horizontal_rate = horizontal_rate_temp ;
26812732 }
@@ -3310,6 +3361,7 @@ function refreshReceivers() {
33103361 updateReceivers ( response ) ;
33113362 } ,
33123363 complete : function ( request , textStatus ) {
3364+ periodical_receivers = setTimeout ( function ( ) { refreshReceivers ( false ) } , 60 * 5 * 1000 ) ;
33133365 if ( ! offline . get ( "opt_hide_chase" ) ) {
33143366 refreshNewReceivers ( true ) ;
33153367 }
0 commit comments