void Localizer::getFrequency() { // Get frequency int rawFrequency; XPLMGetNavAidInfo(ref_, nullptr, nullptr, nullptr, nullptr, &rawFrequency, &heading_, nullptr, nullptr, nullptr); frequency_ = Frequency(rawFrequency * 10000); }
void XSALoadNavRef(XPLMNavRef ref, navinfo_t* nav) { XPLMGetNavAidInfo( ref, &nav->xplmType, &nav->lat, &nav->lon, &nav->height, &nav->frequency, NULL, nav->id, nav->name, NULL); nav->xsaType = xsaNavTypeUnknown; switch (nav->xplmType) { case xplm_Nav_Airport: const static char heli[] = "[H]"; if (strncmp(heli, nav->name, strlen(heli)) == 0) { nav->xsaType = xsaNavTypeHelipad; break; } const static char seap[] = "[S]"; if (strncmp(seap, nav->name, strlen(seap)) == 0) { nav->xsaType = xsaNavTypeSeaport; break; } nav->xsaType = xsaNavTypeAirport; break; case xplm_Nav_VOR: const static char uss[] = "USS"; if (strncmp(uss, nav->name, strlen(uss)) == 0) { nav->xsaType = xsaNavTypeShip; break; } nav->xsaType = xsaNavTypeVOR; break; case xplm_Nav_NDB: nav->xsaType = xsaNavTypeNDB; break; case xplm_Nav_Fix: nav->xsaType = xsaNavTypeFix; break; // case xplm_Nav_OuterMarker: // case xplm_Nav_Localizer: // case xplm_Nav_GlideSlope: // case xplm_Nav_DME: // case xplm_Nav_ILS: case xplm_Nav_MiddleMarker: case xplm_Nav_InnerMarker: nav->xsaType = xsaNavTypeNDB; break; } }
int GetClosestAirportId(char *id, int index) { XPLMNavRef waypoint; float lat = 0.f, lon = 0.f; XPLMGetFMSEntryInfo(index, NULL, NULL, &waypoint, NULL, &lat, &lon); if (lat == 0.f || lon == 0.f) return 0; XPLMNavRef airport = XPLMFindNavAid(NULL, NULL, &lat, &lon, NULL, xplm_Nav_Airport); XPLMGetNavAidInfo(airport, NULL, NULL, NULL, NULL, NULL, NULL, id, NULL, NULL); return 1; }
void sendRepositionedAtAirport() { XPLMDebugString("XData: sendRepositionedAtAirport called.\n"); // where are we? float inLat; float inLon; XPLMDataRef dataref_latitude = XPLMFindDataRef("sim/flightmodel/position/latitude"); inLat = XPLMGetDataf(dataref_latitude); XPLMDataRef dataref_longitude = XPLMFindDataRef("sim/flightmodel/position/longitude"); inLon = XPLMGetDataf(dataref_longitude); XPLMNavRef navref = XPLMFindNavAid( NULL, NULL, &inLat, &inLon, NULL, xplm_Nav_Airport); float apt_lat; float apt_lon; float apt_height; char apt_id[32]; char apt_name[256]; XPLMGetNavAidInfo( navref, NULL, &apt_lat, &apt_lon, &apt_height, NULL, NULL, &apt_id, &apt_name, NULL); int i; int res; char msg[256]; sprintf(msg, "Repositioned at airport: %s (name: %s) height=%f lat=%f lon=%f\n", apt_id, apt_name, apt_height, apt_lat, apt_lon); XPLMDebugString(msg); // make endian corrections // COMMENTED OUT - THIS CRASHES X-PLANE. WHY? // apt_lat = custom_htonf(apt_lat); // apt_lon = custom_htonf(apt_lon); // apt_height = custom_htonf(apt_height); strncpy(airport_packet.apt_id, apt_id, 32); strncpy(airport_packet.apt_name, apt_name, 256); airport_packet.apt_height = apt_height; airport_packet.apt_lat = apt_lat; airport_packet.apt_lon = apt_lon; if (xdata_plugin_enabled && xdata_send_enabled && xdata_socket_open) { strncpy(airport_packet.packet_id, "RAPT", 4); for (i=0; i<NUM_DEST; i++) { if (dest_enable[i]) { res = sendto(sockfd, (const char*)&airport_packet, sizeof(airport_packet), 0, (struct sockaddr *)&dest_sockaddr[i], sizeof(struct sockaddr)); #if IBM if ( res == SOCKET_ERROR ) { XPLMDebugString("XData: caught error while sending RAPT packet! ("); sprintf(msg, "%d", WSAGetLastError()); XPLMDebugString(msg); XPLMDebugString(")\n"); } #else if ( res < 0 ) { XPLMDebugString("XData: caught error while sending RAPT packet! ("); XPLMDebugString((char * const) strerror(GET_ERRNO)); XPLMDebugString(")\n"); } #endif } } } }
int htmlStateXML( char *header, char *html ){ //prepare GPS nav data. XPLMNavRef navRef = XPLMGetGPSDestination(); XPLMNavType navType;// = XPLMGetGPSDestinationType(); float gpsLat, gpsLon, gpsAlt; int gpsFreq; float gpsHeading; char gpsID[32]; char gpsName[256]; char gpsReg[256]; XPLMGetNavAidInfo( navRef, &navType, &gpsLat, &gpsLon, &gpsAlt, &gpsFreq, &gpsHeading, gpsID, gpsName, gpsReg ); header200OK_XML( header ); sprintf(html, "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n" //"<?xml-stylesheet type=\"text/xsl\" href=\"state.xsl\"?>\n" "<x-plane>\n" "<aircraft>\n" "<position>\n" "<world lat=\"%2.5f\" lon=\"%3.5f\" alt_msl=\"%2.3f\" alt_agl=\"%2.3f\" />\n" "<opengl x=\"%2.5f\" y=\"%3.5f\" z=\"%2.3f\"/>\n" "<heading true=\"%2.3f\" mag=\"%2.3f\" track=\"%2.3f\" />\n" "<speed tas=\"%2.3f\" ias=\"%2.3f\" gs=\"%2.3f\" />\n" "</position>\n" "<weather>\n" "<wind speed=\"%2.3f\" direction=\"%2.3f\" />\n" "</weather>\n" "<radios>\n" "<nav one=\"%i\" two=\"%i\" />\n" "<com one=\"%i\" two=\"%i\" />\n" "</radios>\n" //"<gps lat=\"%2.5f\" lon=\"%2.5f\" alt=\"%2.5f\" freq=\"%i\" hdg=\"%2.5f\" id=\"%s\" name=\"%s\" reg=\"%s\" />" "<gps lat=\"%2.5f\" lon=\"%2.5f\" alt=\"%2.5f\" id=\"%s\" name=\"%s\" />" "</aircraft>\n" "<traffic>\n" "</traffic>\n" "</x-plane>\n", XPLMGetDataf( xpdr_Lat ), XPLMGetDataf( xpdr_Lon ), XPLMGetDataf( xpdr_AltMSL ), XPLMGetDataf( xpdr_AltAGL ), //world XPLMGetDataf( xpdr_X ), XPLMGetDataf( xpdr_Y ), XPLMGetDataf( xpdr_Z ), //local XPLMGetDataf( xpdr_Heading ), XPLMGetDataf( xpdr_HeadingMag ), XPLMGetDataf( xpdr_HeadingTrack ), XPLMGetDataf( xpdr_Kias ), XPLMGetDataf( xpdr_Ktas ), XPLMGetDataf( xpdr_Kgs ), XPLMGetDataf( xpdr_WindSpeed ), XPLMGetDataf( xpdr_WindDirection ), XPLMGetDatai( xpdr_Nav1 ), XPLMGetDatai( xpdr_Nav1s ), XPLMGetDatai( xpdr_Com1 ), XPLMGetDatai( xpdr_Com1s ), //gpsLat, gpsLon, gpsAlt, gpsFreq, gpsHeading, gpsID, gpsName, gpsReg gpsLat, gpsLon, gpsAlt, gpsID, gpsName ); return strlen( html ); }
int htmlMiscStateXML( char *header, char *html, char *queryString ){ //prepare GPS nav data. XPLMNavRef navRef = XPLMGetGPSDestination(); XPLMNavType navType;// = XPLMGetGPSDestinationType(); float gpsLat, gpsLon, gpsAlt; int gpsFreq; float gpsHeading; char gpsID[32]; char gpsName[256]; char gpsReg[256]; XPLMGetNavAidInfo( navRef, &navType, &gpsLat, &gpsLon, &gpsAlt, &gpsFreq, &gpsHeading, gpsID, gpsName, gpsReg ); //this function fires as the root(/) url, it relies on /index.xsl for formatting. header200OK_XML( header ); sprintf(html, "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n" //"<?xml-stylesheet type=\"text/xsl\" href=\"full-state.xsl\"?>\n" "<x-plane_full>\n" "<query-string value=\"%s\" />" "<aircraft>\n" "<position>\n" "<world lat=\"%2.5f\" lon=\"%3.5f\" alt_msl=\"%2.3f\" alt_agl=\"%2.3f\" />\n" "<opengl x=\"%2.5f\" y=\"%3.5f\" z=\"%2.3f\"/>\n" "<heading true=\"%2.3f\" mag=\"%2.3f\" track=\"%2.3f\" />\n" "<speed tas=\"%2.3f\" ias=\"%2.3f\" gs=\"%2.3f\" />\n" "</position>\n" "<weather>\n" "<wind speed=\"%2.3f\" direction=\"%2.3f\" />\n" "</weather>\n" "<radios>\n" "<nav one=\"%i\" two=\"%i\" />\n" "<com one=\"%i\" two=\"%i\" />\n" "</radios>\n" //"<gps lat=\"%2.5f\" lon=\"%2.5f\" alt=\"%2.5f\" freq=\"%i\" hdg=\"%2.5f\" id=\"%s\" name=\"%s\" reg=\"%s\" />" "<gps lat=\"%2.5f\" lon=\"%2.5f\" alt=\"%2.5f\" id=\"%s\" name=\"%s\" />" "<cockpit>\n" "<buttons/>\n" "</cockpit>\n" "<failures/>\n" "</aircraft>\n" "<weather>\n" "<wind>\n" "<high " "alt=\"%1.3f\" " "speed=\"%1.3f\" " "dir=\"%1.3f\" " "sheer-speed=\"%1.3f\" " "sheer-direction=\"%1.3f\" " "turbulence=\"%1.3f\" />\n" "<med " "alt=\"%1.3f\" " "speed=\"%1.3f\" " "dir=\"%1.3f\" " "sheer-speed=\"%1.3f\" " "sheer-direction=\"%1.3f\" " "turbulence=\"%1.3f\" />\n" "<low " "alt=\"%1.3f\" " "speed=\"%1.3f\" " "dir=\"%1.3f\" " "sheer-speed=\"%1.3f\" " "sheer-direction=\"%1.3f\" " "turbulence=\"%1.3f\" />\n" "</wind>\n" "<clouds>\n" "\n" "</clouds>\n" "<misc>\n" "\n" "</misc>\n" "<sea_level_temp c=\"\" />\n" "<sea_level_pressure value=\"\" />\n" "</weather>\n" "</x-plane_full>\n" , queryString, //aircraft position and gps/radio state data XPLMGetDataf( xpdr_Lat ), XPLMGetDataf( xpdr_Lon ), XPLMGetDataf( xpdr_AltMSL ), XPLMGetDataf( xpdr_AltAGL ), //world XPLMGetDataf( xpdr_X ), XPLMGetDataf( xpdr_Y ), XPLMGetDataf( xpdr_Z ), //local XPLMGetDataf( xpdr_Heading ), XPLMGetDataf( xpdr_HeadingMag ), XPLMGetDataf( xpdr_HeadingTrack ), XPLMGetDataf( xpdr_Kias ), XPLMGetDataf( xpdr_Ktas ), XPLMGetDataf( xpdr_Kgs ), XPLMGetDataf( xpdr_WindSpeed ), XPLMGetDataf( xpdr_WindDirection ), XPLMGetDatai( xpdr_Nav1 ), XPLMGetDatai( xpdr_Nav1s ), XPLMGetDatai( xpdr_Com1 ), XPLMGetDatai( xpdr_Com1s ), //gpsLat, gpsLon, gpsAlt, gpsFreq, gpsHeading, gpsID, gpsName, gpsReg gpsLat, gpsLon, gpsAlt, gpsID, gpsName, //weather wind data XPLMGetDataf( xpdr_windAltHigh ), XPLMGetDataf( xpdr_windSpeedHigh ), XPLMGetDataf( xpdr_windDirHigh ), XPLMGetDataf( xpdr_windSheerSpeedHigh ), XPLMGetDataf( xpdr_windSheerDirectionHigh ), XPLMGetDataf( xpdr_windTurbulenceHigh ), XPLMGetDataf( xpdr_windAltMed ), XPLMGetDataf( xpdr_windSpeedMed ), XPLMGetDataf( xpdr_windDirMed ), XPLMGetDataf( xpdr_windSheerSpeedMed ), XPLMGetDataf( xpdr_windSheerDirectionMed ), XPLMGetDataf( xpdr_windTurbulenceMed ), XPLMGetDataf( xpdr_windAltLow ), XPLMGetDataf( xpdr_windSpeedLow ), XPLMGetDataf( xpdr_windDirLow ), XPLMGetDataf( xpdr_windSheerSpeedLow ), XPLMGetDataf( xpdr_windSheerDirectionLow ), XPLMGetDataf( xpdr_windTurbulenceLow ) ); return strlen( html ); }