From: Flightgear-commitlogs <ma...@hy...> - 2013-09-01 13:49:10
|
The branch, master has been updated - Log ----------------------------------------------------------------- - Summary ------------------------------------------------------------- src/fgcom.cpp | 28 +++++++++++++++++----------- src/fgcom.h | 4 +++- src/position.cpp | 24 +++++++++++++++++++++++- src/position.h | 1 + 4 files changed, 44 insertions(+), 13 deletions(-) - Diff ---------------------------------------------------------------- diff --git a/src/fgcom.cpp b/src/fgcom.cpp index 3095274..0bace3f 100644 --- a/src/fgcom.cpp +++ b/src/fgcom.cpp @@ -29,7 +29,7 @@ #ifdef HAVE_CONFIG_H #include "config.h" #endif -#include<sys/types.h> +#include <sys/types.h> #include <iostream> #include <stdlib.h> #include <errno.h> @@ -553,17 +553,11 @@ main (int argc, char *argv[]) } else { - /* only in ATC mode */ - struct pos p; - /* mic on, speaker on */ - iaxc_input_level_set (level_in); - iaxc_output_level_set (level_out); - - /* get geo positions of the airport */ - p = posbyicao (airportlist, airport); + iaxc_input_level_set (1.0); + iaxc_output_level_set (0.0); - icao2number (airport, frequency, tmp); + icao2atisnumber (airport, frequency, tmp); #ifdef DEBUG printf ("DEBUG: dialing %s %3.3f MHz: %s\n", airport, frequency, tmp); #endif @@ -1314,10 +1308,22 @@ int check_special_frq (double frq) void do_iaxc_call (const char *username, const char *password, - const char *voipserver, const char *number) + const char *voipserver, char *number) { char dest[256]; + if( strcmp(voipserver, "fgcom.flightgear.org") == 0 ) { + if( (number[strlen(number)-2] == '2' || number[strlen(number)-2] == '7') && (number[strlen(number)-1] == '0') ) { + number[strlen(number)-1] = '5'; + } + } + + if( strcmp(voipserver, "delta384.server4you.de") == 0 ) { + if( number[strlen(number)-1] == '5' ) { + number[strlen(number)-1] = '0'; + } + } + snprintf (dest, sizeof (dest), "%s:%s@%s/%s", username, password, voipserver, number); iaxc_call (dest); diff --git a/src/fgcom.h b/src/fgcom.h index f95844e..350765e 100644 --- a/src/fgcom.h +++ b/src/fgcom.h @@ -29,6 +29,7 @@ #define DEFAULT_FG_SERVER "localhost" #define DEFAULT_FG_PORT 16661 #define DEFAULT_CODE 1 +#define ATIS_CODE 99 #define DEFAULT_VOIP_SERVER "fgcom.flightgear.org.uk" #define DEFAULT_CODEC 'u' #define DEFAULT_IAX_CODEC IAXC_FORMAT_ULAW @@ -103,6 +104,7 @@ void event_unknown (int type); void event_netstats (struct iaxc_ev_netstats stat); void event_level (double in, double out); void icao2number (char *icao, float frequency, char *buf); +void icao2atisnumber (char *icao, float frequency, char *buf); void ptt (int mode); double distance (double lat1, double lon1, double lat2, double lon2); int split (char *string, char *fields[], int nfields, const char *sep); @@ -118,4 +120,4 @@ struct pos posbyicao (struct airport *airports, char *icao); void parse_fgdata (struct fgdata *data, char *buf); int check_special_frq (double frq); void do_iaxc_call (const char *username, const char *password, - const char *voipserver, const char *number); + const char *voipserver, char *number); diff --git a/src/position.cpp b/src/position.cpp index 3265162..8dd9830 100644 --- a/src/position.cpp +++ b/src/position.cpp @@ -29,18 +29,40 @@ icao2number (char *icao, float frequency, char *buf) buf[16] = '\0'; } +void +icao2atisnumber (char *icao, float frequency, char *buf) +{ + char icao_work[5]; + + if (strlen (icao) == 0) + strcpy (icao, "ZZZZ"); + + sprintf (icao_work, "%4s", icao); + sprintf (buf, "%02d%02d%02d%02d%02d%06d", ATIS_CODE, icao_work[0], + icao_work[1], icao_work[2], icao_work[3], + (int) (frequency * 1000 + 0.5)); + buf[16] = '\0'; +} + + const char * icaobypos (struct airport *airports, double frequency, double plane_lat, double plane_lon, double range) { double r; + int frq = (int) (frequency * 1000 + 0.5); + + if( (frq%10) !=0 && (frq%5) == 0 ){ + frequency -= 0.005; + frequency = ceilf(frequency*1000.0)/1000.0; + } if (frequency >= DEFAULT_LOWER_FRQ_LIMIT && frequency <= DEFAULT_UPPER_FRQ_LIMIT) { while (airports->next != NULL) { - if (airports->frequency == frequency) + if ( ceilf(airports->frequency*1000.0)/1000.0 == frequency || airports->frequency == frequency) { r = distance (plane_lat, plane_lon, airports->lat, airports->lon); diff --git a/src/position.h b/src/position.h index f401a47..edc5a5f 100644 --- a/src/position.h +++ b/src/position.h @@ -8,6 +8,7 @@ double distance (double lat1, double lon1, double lat2, double lon2); /* Build the phone number based on the ICAO code and airport frequency. */ void icao2number (char *icao, float frequency, char *buf); +void icao2atisnumber (char *icao, float frequency, char *buf); /* Search for the closest airport on selected frequency. */ const char * ----------------------------------------------------------------------- FGCom |