libacfutils
A general purpose library of utility functions designed to make it easier to develop addons for the X-Plane flight simulator.
Loading...
Searching...
No Matches
airportdb.h
Go to the documentation of this file.
1/*
2 * CDDL HEADER START
3 *
4 * This file and its contents are supplied under the terms of the
5 * Common Development and Distribution License ("CDDL"), version 1.0.
6 * You may only use this file in accordance with the terms of version
7 * 1.0 of the CDDL.
8 *
9 * A full copy of the text of the CDDL should have accompanied this
10 * source. A copy of the CDDL is also available via the Internet at
11 * http://www.illumos.org/license/CDDL.
12 *
13 * CDDL HEADER END
14 *
15 * Copyright 2023 Saso Kiselkov. All rights reserved.
16 */
131#ifndef _AIRPORTDB_H_
132#define _AIRPORTDB_H_
133
134#include "avl.h"
135#include "geom.h"
136#include "list.h"
137#include "helpers.h"
138#include "htbl.h"
139#include "thread.h"
140
141#ifdef __cplusplus
142extern "C" {
143#endif
144
145typedef struct {
146 bool_t inited;
147 bool_t ifr_only;
148 bool_t normalize_gate_names;
149 bool_t override_settings;
150 char *xpdir;
151 char *cachedir;
152 int xp_airac_cycle;
153 double load_limit;
154
155 mutex_t lock;
156
157 avl_tree_t apt_dat;
158 avl_tree_t geo_table;
159 avl_tree_t arpt_index;
160 htbl2_t icao_index;
161 htbl2_t iata_index;
163
164typedef struct airport airport_t;
165typedef struct runway runway_t;
166typedef struct runway_end runway_end_t;
167
168typedef enum {
169 RAMP_START_GATE,
170 RAMP_START_HANGAR,
171 RAMP_START_TIEDOWN,
172 RAMP_START_MISC
173} ramp_start_type_t;
174
179typedef struct ramp_start {
180 char name[32];
182 float hdgt;
183 ramp_start_type_t type;
184 avl_node_t node;
186
187typedef enum {
188 RWY_SURF_ASPHALT = 1,
189 RWY_SURF_CONCRETE = 2,
190 RWY_SURF_GRASS = 3,
191 RWY_SURF_DIRT = 4,
192 RWY_SURF_GRAVEL = 5,
193 RWY_SURF_DRY_LAKEBED = 12,
194 RWY_SURF_WATER = 13,
195 RWY_SURF_SNOWICE = 14,
196 RWY_SURF_TRANSPARENT = 15
197} rwy_surf_t;
198
203 char id[4];
206 double displ;
207 double blast;
208 double gpa;
209 double tch;
210 double tch_m;
212 /* computed on load_airport */
215 double hdg;
217 double land_len;
218};
219
223struct runway {
224 airport_t *arpt;
225 double width;
226 runway_end_t ends[2];
227 char joint_id[8];
229 rwy_surf_t surf;
231 /* computed on load_airport */
232 double length;
238 avl_node_t node;
239};
240
250
254typedef struct {
256 uint64_t freq;
257 char name[32];
258 list_node_t node;
260
261#define AIRPORTDB_IDENT_LEN 8
262#define AIRPORTDB_ICAO_LEN 8
263#define AIRPORTDB_IATA_LEN 4
264#define AIRPORTDB_CC_LEN 4
265
269struct airport {
271 char ident[AIRPORTDB_IDENT_LEN];
273 char icao[AIRPORTDB_ICAO_LEN];
275 char iata[AIRPORTDB_IATA_LEN];
277 char cc[AIRPORTDB_CC_LEN];
279 char cc3[AIRPORTDB_CC_LEN];
280 char name[24];
281 char *name_orig;
282 char *country;
283 char *city;
287 bool_t geo_linked;
288 double TA;
289 double TL;
290 double TA_m;
291 double TL_m;
292 avl_tree_t rwys;
293 avl_tree_t ramp_starts;
299 bool_t in_navdb;
300 bool_t have_iaps;
302 avl_node_t apt_dat_node;
304 avl_node_t tile_node;
305};
306
318typedef struct {
320 char ident[AIRPORTDB_IDENT_LEN];
322 char icao[AIRPORTDB_ICAO_LEN];
324 char iata[AIRPORTDB_IATA_LEN];
326 char cc[AIRPORTDB_CC_LEN];
328 uint16_t max_rwy_len;
329 uint16_t TA;
330 uint16_t TL;
331 avl_node_t node;
333
334API_EXPORT void airportdb_create(airportdb_t *db, const char *xpdir,
335 const char *cachedir);
336API_EXPORT void airportdb_destroy(airportdb_t *db);
337
338API_EXPORT void airportdb_lock(airportdb_t *db);
339API_EXPORT void airportdb_unlock(airportdb_t *db);
340
341/*
342 * !!!! CAREFUL !!!!
343 * This function needs to use setlocale, which means it's not thread-safe.
344 * You should only call this on the main thread.
345 */
346#define recreate_cache(__db) adb_recreate_cache((__db), 0)
347API_EXPORT bool_t adb_recreate_cache(airportdb_t *db, int app_version);
348
349#define find_nearest_airports adb_find_nearest_airports
351 geo_pos2_t my_pos);
352
353#define free_nearest_airport_list adb_free_nearest_airport_list
354API_EXPORT void adb_free_nearest_airport_list(list_t *l);
355
356#define set_airport_load_limit adb_set_airport_load_limit
357API_EXPORT void adb_set_airport_load_limit(airportdb_t *db, double limit);
358
359#define load_nearest_airport_tiles adb_load_nearest_airport_tiles
361 geo_pos2_t my_pos);
362
363/*
364 * Query functions to look for airports
365 */
366#define unload_distant_airport_tiles adb_unload_distant_airport_tiles
368 geo_pos2_t my_pos);
369
370#define airport_lookup adb_airport_lookup
371API_EXPORT airport_t *adb_airport_lookup(airportdb_t *db, const char *icao,
372 geo_pos2_t pos);
373
374#define airport_lookup_global adb_airport_lookup_global
375API_EXPORT airport_t *adb_airport_lookup_global(airportdb_t *db,
376 const char *icao);
377
378#define airport_lookup_by_ident adb_airport_lookup_by_ident
379API_EXPORT airport_t *adb_airport_lookup_by_ident(airportdb_t *db,
380 const char *ident);
381
382#define airport_lookup_by_icao adb_airport_lookup_by_icao
383API_EXPORT size_t adb_airport_lookup_by_icao(airportdb_t *db, const char *icao,
384 void (*found_cb)(airport_t *airport, void *userinfo), void *userinfo);
385
386#define airport_lookup_by_iata adb_airport_lookup_by_iata
387API_EXPORT size_t adb_airport_lookup_by_iata(airportdb_t *db, const char *iata,
388 void (*found_cb)(airport_t *airport, void *userinfo), void *userinfo);
389
390#define airport_index_walk adb_airport_index_walk
391API_EXPORT size_t adb_airport_index_walk(const airportdb_t *db,
392 void (*found_cb)(const arpt_index_t *idx, void *userinfo), void *userinfo);
393/*
394 * Querying information about a particular airport.
395 */
396#define airport_find_runway adb_airport_find_runway
397API_EXPORT bool_t adb_airport_find_runway(airport_t *arpt, const char *rwy_id,
398 runway_t **rwy_p, unsigned *end_p);
399
400#define matching_airport_in_tile_with_TATL \
401 adb_matching_airport_in_tile_with_TATL
402API_EXPORT airport_t *adb_matching_airport_in_tile_with_TATL(airportdb_t *db,
403 geo_pos2_t pos, const char *search_icao);
404
405#define airportdb_xp11_airac_cycle adb_airportdb_xp_airac_cycle
406API_EXPORT bool_t adb_airportdb_xp_airac_cycle(const char *xpdir, int *cycle);
407
408#ifdef __cplusplus
409}
410#endif
411
412#endif /* _AIRPORTDB_H_ */
size_t adb_airport_lookup_by_iata(airportdb_t *db, const char *iata, void(*found_cb)(airport_t *airport, void *userinfo), void *userinfo)
Definition airportdb.c:3355
airport_t * adb_airport_lookup(airportdb_t *db, const char *icao, geo_pos2_t pos)
Definition airportdb.c:3382
freq_type_t
Definition airportdb.h:241
@ FREQ_TYPE_REC
Definition airportdb.h:242
@ FREQ_TYPE_DEP
Definition airportdb.h:248
@ FREQ_TYPE_APP
Definition airportdb.h:247
@ FREQ_TYPE_GND
Definition airportdb.h:245
@ FREQ_TYPE_CLNC
Definition airportdb.h:244
@ FREQ_TYPE_CTAF
Definition airportdb.h:243
@ FREQ_TYPE_TWR
Definition airportdb.h:246
airport_t * adb_airport_lookup_by_ident(airportdb_t *db, const char *ident)
Definition airportdb.c:3262
airport_t * adb_airport_lookup_global(airportdb_t *db, const char *icao)
Definition airportdb.c:3411
void airportdb_lock(airportdb_t *db)
Definition airportdb.c:3231
bool_t adb_airportdb_xp_airac_cycle(const char *xpdir, int *cycle)
Definition airportdb.c:2098
bool_t adb_recreate_cache(airportdb_t *db, int app_version)
Definition airportdb.c:2499
size_t adb_airport_index_walk(const airportdb_t *db, void(*found_cb)(const arpt_index_t *idx, void *userinfo), void *userinfo)
Definition airportdb.c:3443
list_t * adb_find_nearest_airports(airportdb_t *db, geo_pos2_t my_pos)
Definition airportdb.c:2953
void adb_free_nearest_airport_list(list_t *l)
Definition airportdb.c:2985
void adb_set_airport_load_limit(airportdb_t *db, double limit)
Definition airportdb.c:3049
void airportdb_create(airportdb_t *db, const char *xpdir, const char *cachedir)
Definition airportdb.c:3154
bool_t adb_airport_find_runway(airport_t *arpt, const char *rwy_id, runway_t **rwy_p, unsigned *end_p)
Definition airportdb.c:3477
void adb_load_nearest_airport_tiles(airportdb_t *db, geo_pos2_t my_pos)
Definition airportdb.c:3066
void adb_unload_distant_airport_tiles(airportdb_t *db, geo_pos2_t my_pos)
Definition airportdb.c:3114
size_t adb_airport_lookup_by_icao(airportdb_t *db, const char *icao, void(*found_cb)(airport_t *airport, void *userinfo), void *userinfo)
Definition airportdb.c:3328
void airportdb_unlock(airportdb_t *db)
Definition airportdb.c:3243
void airportdb_destroy(airportdb_t *db)
Definition airportdb.c:3190
char cc[4]
Definition airportdb.h:277
bool_t have_iaps
Definition airportdb.h:300
char * city
Definition airportdb.h:283
char iata[4]
Definition airportdb.h:275
char * name_orig
Definition airportdb.h:281
char name[24]
Definition airportdb.h:280
double TA_m
Definition airportdb.h:290
list_node_t cur_arpts_node
Definition airportdb.h:303
char ident[8]
Definition airportdb.h:271
double TA
Definition airportdb.h:288
list_t freqs
Definition airportdb.h:294
double TL
Definition airportdb.h:289
geo_pos3_t refpt
Definition airportdb.h:284
avl_node_t apt_dat_node
Definition airportdb.h:302
char cc3[4]
Definition airportdb.h:279
fpp_t fpp
Definition airportdb.h:298
double TL_m
Definition airportdb.h:291
char * country
Definition airportdb.h:282
char icao[8]
Definition airportdb.h:273
bool_t geo_linked
Definition airportdb.h:287
bool_t in_navdb
Definition airportdb.h:299
bool_t load_complete
Definition airportdb.h:296
geo_pos3_t refpt_m
Definition airportdb.h:286
avl_node_t tile_node
Definition airportdb.h:304
avl_tree_t rwys
Definition airportdb.h:292
avl_tree_t ramp_starts
Definition airportdb.h:293
vect3_t ecef
Definition airportdb.h:297
uint16_t TA
Definition airportdb.h:329
uint16_t TL
Definition airportdb.h:330
uint16_t max_rwy_len
Definition airportdb.h:328
geo_pos3_32_t pos
Definition airportdb.h:327
Definition geom.h:473
uint64_t freq
Definition airportdb.h:256
freq_type_t type
Definition airportdb.h:255
Definition htbl.h:70
ramp_start_type_t type
Definition airportdb.h:183
geo_pos2_t pos
Definition airportdb.h:181
vect2_t dthr_v
Definition airportdb.h:214
vect2_t thr_v
Definition airportdb.h:213
vect2_t * apch_bbox
Definition airportdb.h:216
double land_len
Definition airportdb.h:217
double displ
Definition airportdb.h:206
double gpa
Definition airportdb.h:208
geo_pos3_t thr_m
Definition airportdb.h:205
double tch_m
Definition airportdb.h:210
double blast
Definition airportdb.h:207
double tch
Definition airportdb.h:209
geo_pos3_t thr
Definition airportdb.h:204
double hdg
Definition airportdb.h:215
char joint_id[8]
Definition airportdb.h:227
runway_end_t ends[2]
Definition airportdb.h:226
vect2_t * prox_bbox
Definition airportdb.h:233
airport_t * arpt
Definition airportdb.h:224
rwy_surf_t surf
Definition airportdb.h:229
double length
Definition airportdb.h:232
double width
Definition airportdb.h:225
char rev_joint_id[8]
Definition airportdb.h:228
vect2_t * asda_bbox
Definition airportdb.h:236
vect2_t * rwy_bbox
Definition airportdb.h:234
vect2_t * tora_bbox
Definition airportdb.h:235
Definition geom.h:89