/* * IGC parser * @brief parse IGC file, get all data points, compute average horizontal/vertical speed, print to STDOUT * * @author xamidev * @license GNU GPL v3 */ #ifndef IGC_H #define IGC_H #define NAME_MAX 256 #define TMP_SIZE 8 void parse_igc_file(FILE* fp); enum IGC_RecordType { MANUFACTURER = 'A', HEADER = 'H', EXTENSION = 'I', J_EXTENSION = 'J', DECLARATION = 'C', SATELLITES = 'F', DATAPOINT = 'B', DIFFERENTIAL_GPS = 'D', PILOT_EVENT = 'E', GEN_PURPOSE_PLACEHOLDER = 'K', COMMENT = 'L', SEC_KEY = 'G' }; enum Cardinals { NORTH = 'N', SOUTH = 'S', EAST = 'E', WEST = 'W' }; struct Coord { char cardinal; int deg; int min; int sec; }; struct IGC_Header { int day; int month; int year; // Not exhaustive char pilot_name[NAME_MAX] = {0}; char crew2_name[NAME_MAX] = {0}; char aircraft_name[NAME_MAX] = {0}; char aircraft_registration_no[NAME_MAX] = {0}; char gps_datum[NAME_MAX] = {0}; char firmware_ver[NAME_MAX] = {0}; char hardware_ver[NAME_MAX] = {0}; char frtype[NAME_MAX] = {0}; char press_alt_sensor[NAME_MAX] = {0}; } struct IGC_DataPoint { // timestamp int hour; int minute; int second; // coordinates struct Coord lat; struct Coord lon; // altitude int baro_alt; int gps_alt; }; #endif