| Home | About Us | Contact Us | Support | Search | | Facility | | PBO | Education & Outreach | ||
![]() |
![]() |
|||||||
|
Software Remote PC Software RedHat Linux Auxiliary utilities Downloading & Data Transfer AOA Ashtech Trimble Other Pre-Processing TEQC Other Processing GAMIT/GLOBK Bernese GIPSY-OASIS II Trimble Geomatics (TGO) |
TEQC — Development & Release Log
Contact: UNAVCO teqc guru Index
changes/bug fixes/enhancements in next teqc release
2010 Mar 17 release 2009 Oct 19 release 2009 Mar 23 release 2008 Oct 02 release 2008 Feb 15 release Last modified: 17 Mar 2010 changes/bug fixes/enhancements in next teqc release:2010 Mar 17: change of compiler notation for Solaris Sparc 5.10 builds, which are now compiled with SunStudio 12.1 compilers 2010 Mar 15: modification of code in NetRS_ize_firmware() for parsing user-supplied firmware version for NetRS via -O.rv with non-RINEX input 2010 Mar 13: changes to obs_receiver_clock_offset() (reading of RINEX obs header line RCV CLOCK OFFS APPL): change to reading of applied flag to %hd from %d (%d was not working on Solaris Sparc and other big-endian builds), and better exit message when an applied value of 1 is encountered when using qc mode (e.g. +qc) 2010 Mar 4: modification of decompose_Trimble_0_7() to allow metadata extraction of old Trimble .dat with records 0 or 7 (+meta or +mds options), but still no reading capability for the observables 2010 Mar 2: update of igs_rx_designation[], IGS_receiver_designation(), extract_Trimble_rx_type(), and Trimble_rx_specifics() for the max SV limit on modern Trimble receivers from the 7400MSI through to the NetR8 2010 Feb 26: some minor code improvements to changes made to binex_observables_7f_03() (see 25 Feb 2010) 2010 Feb 25: due to the changes introduced in recording anti-spoofing information on observables for L2C (see 3 Aug 2009), the logic in binex_observables_7f_03() (outputting BINEX 0x7f-03) became problematical, e.g. leading to no C/A or P2 pseudoranges being stored when there is no anti-spoofing flag on the L1C/A phase; changes were made to make the logic more robust check for DO_SNR in qc_satellite_obs_update() for whether to call store_compact_plot_data() for sn1, sn2, or sn5 (to prevent segmentation fault/bus error if using -sn option with +qc +plot) 2010 Feb 11: code additions to detect new Navcom Sapphire SF-3050 binary format (assuming the file or stream starts at the beginning of a valid SF-3050 message) and inform the user that this format cannot (yet) be read by teqc addition of cases in window_OK() for Navman SiRF and NovAtel binary formats to also inform the user that these formats cannot (yet) be read by teqc 2010 Feb 10: (hopefully this doesn't cause too many problems:) new function radome() is now called in dump_metadata() (i.e. using +meta option) and obs_out_antenna_id() (RINEX obs out) to put the IGS radome code of "NONE" at the end of the antenna type field if all four of the following conditions occur: the option -O.rt is not being used, the antenna type field is less than 16 characters (i.e. there is no radome specified at the end), the input format is not RINEX (i.e. this is a translation operation), and teqc has not labeled the antenna type as "-Unknown-" 2010 Feb 9: added logic to shut off use of option -phc if input is not RINEX in process_input(); allowing -phc with non-RINEX is not a defined operation and may cause a segmentation fault 2010 Feb 8: a few more entries to extract_Trimble_ant_type() 2010 Feb 5: quite a bit of updating extract_Trimble_ant_type() (reading of Trimble 2-char antenna codes in .dat/.tgd records), mostly for antennae combinations with various radomes 2010 Feb 4: updated IGS receiver/antenna designations up through 3 Feb 2010 entry 2010 Feb 1: for reading Leica MDB format, the measurement engine version is now included when decoding record 4 (0x04) and 104 (0x68) as part of the receiver's firmware version; change to decompose_Leica_MDB_04() and decompose_Leica_MDB_68() 2010 Jan 29: decimation option -O.dec in now overloaded to allow, if needed, a decimation offset, i.e. -O.dec <new interval>[:<offset>]; this is mainly for use where the user wants something unusual, say, the original sampling interval is 0.01 seconds and the user want to decimate to every 0.07 seconds (which will not always lead to an epoch on the integer second), and the user wants flexibility as to which epoch starts the output and uses e.g. -O.int 0.01 -O.dec 0.07:-0.01; changes to struct modulo_decimation_info and the functions extract_modulo_decimation() and obs_epoch_check(); note: this can be extended to decimation in met epochs with -M.dec with analogous changes to met_epoch_check() 2010 Jan 28: updated IGS receiver/antenna designations up through 19 Jan 2010 entry 2010 Jan 27: increased the test value in dec_fmod() on fabs(f-y) for sample intervals < 1 second down to 5e-6 (from previous value of 1e-7) for correct decimation of 100-Hz data 2010 Jan 19: bug fix in Trimble_17_57h_0_obs() that resets the tracked SV constellation total to a reduced value when an invalid GPS or SBAS PRN is encountered (e.g. as with corrupted Trimble binary stream data) reading of the optional 22-bit receiver clock offset value in BINEX 0x7f-05 in binex_7f_05_obs() changed from the incorrect extract_xNb() to extract_2cNb() 2010 Jan 11: update to Topcon_TPS_rM_obs() (for reading TPS/JPS [rM] message) to include the fractional (0.1 dBHz) part of the signal-to-noise now included in [rM] correction to Topcon_TPS_rM_obs() (for reading TPS/JPS [rM] message) to correctly store the doppler values (which had not previously been stored in the obs struct correctly due to a coding error) 2010 Jan 6: correction to binex_7f_05_constellation() (for reading BINEX 0x7f-05) so that the SBAS PRN is adjusted by 100 for RINEX 2009 Dec 18: additional check added to obs_system_check(): if -O.s is not being used and no system filtering is being used (i.e. not using ±G, ±R, ±S or ±E) and if the current input specifies that that data is mixed ('M' in RINEX obs), then this is assumed to be correct and obs_system_check() is aborted 2009 Dec 14: -O.-obs and -M.-obs now work for raw-to-RINEX translation, requiring splitting off the new code in obs_types() to a new function called obs_drop() and additional logic in set_obs() and set_met_obs_out() 2009 Dec 11: when using the -tbin option, the tbin increment is now forced to be positive in tbin_init() two new options, -O.-obs and -M.-obs for listing observables to be excluded on output, which should be used for only for RINEX-to-RINEX and in place of the usual -O.obs and -M.obs; the input observable list is modified at the end of non-renaming switch block in obs_types() 2009 Dec 10: call to obs_system_check() is now included in obs_out_standard_header() (rather than just prior to calling obs_out_standard_header() in a few locations) for RINEX-to-RINEX obs filtering with changes made on 10 Nov 2009, the calls to obs_out_start(), rinex_out_end_of_header(), and (if the obs header start has not occurred) obs_out_standard_header() have to be suppressed in obs_out() — otherwise the reported start time in the obs header is set to be the default of 1 Jan 1980 2009 Dec 9: binary_OBS() modified so that a RINEX obs header comment is added if use TPS/JPS formats and using option -sv_reset 2009 Dec 7: cleanup of some old preprocessor blocks in trimble.c 2009 Dec 4: the standard deviation calculation in find_position() was changed to avoid taking the sqrt() of negative numbers — which can (though rarely) occur on little-endian processors (i.e. should be sqrt() of zero) but is handled gracefully on all little-endian compilations except with Borland for Windows; this change eliminates the rare, but possible, sqrt() of negative number cases showing up in certain qc full runs on Windows 2009 Dec 2: binex_7e_00_met() was modified to allow reading of BINEX 0x7e records with more than 1 byte of observables listed as per suggestion by Topcon, GLONASS SVs with slot numbers duplicated in [NN] should be dropped; this required minor changes to decompose_Topcon_NN() and Topcon_TPS_constellation() and a major overhaul of Topcon_SI_NN_validation(), and sets duplicated slot numbers to 255 which are later rejected 2009 Nov 23: GPS_week_check() was modified to accept the test week value as a 4-byte signed integer (instead of the previous 2-byte unsigned integer) 2009 Nov 19: the state change of the boolean teq.any_initial_epoch is now managed from any_initial_epoch() instead of where any_initial_epoch() is called from 2009 Nov 18: cleanup of some test preprocessor logic blocks start of code modifications for I/O normalization: stdout.h redone with associated changes in the code 2009 Nov 16: addition of Ashtech Z-max (GPS-only receiver) to Ashtech_rx_specifics() and Ashtech_snr() finished with changes to -tbin functions — mainly tbin_init(), tbin_file(), and new tbin_set() started 27 Oct 2009 — to correctly reopen time-binned BINEX files with sorted nav messages which have time of clock which can jump around combined with GNSS and/or met observables which tend to have epochs that are time sequential 2009 Nov 13: slight change in the conditional logic of window_OK() (12 Nov 2009) so that +dX can be used alone with +qc 2009 Nov 12: addition of completion of window end by calling window_next_epoch() in any_initial_epoch() when -ne mask is in use overhaul of conditional logic in window_OK() for the switch cases of non-ASCII formats in the "else if" block for not qc mode and/or files present: better conditions when using -ns, -ne, and/or +qc, in addition to the previous use of -st, -e, and/or ±dX; e.g. the new conditional logic allows +qc to be used with -ns and ±dX or with -ns and -ne on binary formats the static int in adjust_week() to hold the GPS week in the last nav message was moved to the nav struct in rinex.h; this is now reset to zero in initialize() and in filename_loop() for second and subsequent files when extracting metadata 2009 Nov 10: changes to obs_out_standard_header(), obs_out_start(), obs_out_data(), process_rinex_obs(), and filename_loop() so that the RINEX obs header lines TIME OF FIRST OBS and END OF HEADER are not written out until the first data epoch of output is ready and the session start time is automatically forced to be equal to that epoch; tested for all combinations of raw and RINEX input with time windowing, file splicing, and data decimation, plus options +v and +mds 2009 Nov 9: addition of all BINEX 0x00 editing options to usage() for +help option 2009 Nov 6: function to convert string to uppercase, uppercase() now used at the start of all *_rx_specifics() functions 2009 Nov 5: modification to binex_to_rinex_hdr() so that BINEX 0x00 antenna type (field ID 0x17) and radome type (field ID 0x20) — if both are present — are merged for the 20-character RINEX antenna type field in ANT # / TYPE modification to rinex_to_binex_hdr() to split a RINEX antenna type field in ANT # / TYPE into BINEX 0x00 antenna type (field ID 0x17) and, if the string is 20-characters in length, the radome type (field ID 0x20) 2009 Nov 4: addition of ProFlex 500 to list of receivers handled by Ashtech_rx_specifics() (same conditions as ProMark 500 for this function, as far as I know) gross mean SNR on S1, S2, and S5 (if present) added to +qc stats: new sn_sum() called in qc_satellite_obs_update() and results are output in qc_short_report() also showing the total number of measurements used; for qc full, only measurements above or equal to the cutoff mask are used; for qc lite, all measurements are used 2009 Nov 3: reading of version 2 or 3 B-file in decompose_Ashtech_dld_B23_record() now reports a warning if the SV total in an epoch exceeds the current maximum channel setting and suggests to the user to use option -max_rx_ch to override change to Ashtech_rx_specifics() to explicitly recast the receiver type name (regardless of source) to uppercase for IGS rx type consistency addition of ProMark 500 to list of receivers handled by Ashtech_rx_specifics() (because it outputs "Ashtech" formats like the B/E/S filesets) GNSS update for SBAS SV id handling in Ashtech_dld_3_constellation() (e.g.needed for ProMark 500 B-file) case addition to external_data_string() to ignore certain strings in Ashtech D-file decompose_Ashtech_SNV() modified to allow for restricted range of GLONASS slot numbers and allow for SBAS nav messages (for reading Ashtech E-file, R-file record 3, or U-file EREC record) updated extract_Trimble_ant_type() to id Trimble's GNSS chokering antenna, TRM59800.80, as antenna code 'GQ' 2009 Oct 27: input format switch in binex_observables_7f_00() expanded to allow Trimble .dat/.tgd as input for BINEX 0x7f-00 as format ID = 2 — as could any other native format where SNR is in dBHz additional logic in hdr_binex_out(), obs_binex_out(), nav_binex_out(), and anc_binex_out() for creating time-binned BINEX with -tbin so that BINEX output goes to files rather than stdout (note: nav_binex_out() still needs to be generalized to handle more than GPS nav messages) first cut at changes to tbin_file() to have it reopen previously created files for appending when outputting BINEX 2009 Oct 26: with -tbin option, modifications to tbin_file() so that creation of RINEX nav files (for NAVSTAR GPS, GLONASS, SBAS, and potentially Galileo) and population of the nav messages in them are not restricted to the nav messages occurring in strict "time of clock" order in the input, i.e. if the time of clock goes back to a nav file already opened and closed, the file is reopened in append mode and the nav message is written into that RINEX nav file rename of do_mask_decomp() function to list2mask(); removal of old unused code new SV_limit() to handle setting of all -n_<system> options 2009 Oct 23: correction to met_out_obs_types() to correctly construct the second and subsequent # / TYPES OF OBSERV lines in RINEX met header when there are more than 9 met observables, as per the RINEX 2.11 specification modification to met_out_data() to limit the number of met observables to 8 for the first RINEX met data line and to 10 on subsequent RINEX met data lines, as per the RINEX 2.11 specification modification to rinex_met_data() so that it will correctly read RINEX met files with 9 or more met observables per epoch, as per the RINEX 2.11 specification 2009 Oct 22: more checks for null file pointers added to nav_native_to_RINEX_out() so that -tbin command line constructs like teqc -tbin 1d xxx +nav -,+ input will work simplification of the master output switch in obs_filtering(), nav_filtering(), and met_filtering() switch added to fp_settings() (which currently is for BINEX output only) to set file pointer to NULL if -tbin is being used if/else if/else blocks for RINEX/BINEX/other file creation in tbin_file() changed to a switch construction new epoch_decrement() function — the opposite of epoch_increment() 2009 Oct 21: function name change: tbin_file() was previously new_tbin_file() in out_settings() there is now a conditional before setting any of the default RINEX outputs that time-binning (i.e. option -tbin) is not in use; e.g. this allows one to create time-binned GPS RINEX nav files or time-binned RINEX met files without time-binned RINEX obs files and without RINEX obs going to stdout 2009 Oct 20: change in Ashtech_rx_specifics() so that set_obs_obs_out() is only called if the input format is an Ashtech format (rather than the previous logic of "not RINEX") because Ashtech_rx_specifics() is called from BINEX() to set any necessary metadata fields if the input BINEX is from an Ashtech receiver change in main() so that format_settings() is called if the input format is also BINEX addition of BINEX format to first switch in format_settings() setting of APPLY_USE_L2C_L2 when C2 observable is detected in obs_obs_type() 2009 Oct 19: cleanup of test preprocessor logic fix in bug in binex_7f_05_signal_map(): due to non-closure of comment on case 13 for L2C(M), case 14 for L2C(L) would not have been detected 2009 Oct 16: continuation of yesterday's cleanup on file pointer logic minor cleanup in initialize() for Galileo nav message struct (essentially not used yet) minor addition to implied_window_limit(): setting of Galileo nav message struct session start and end if input is a Galileo RINEX nav file(s) (not yet used) 2009 Oct 15: cleanup on file pointer logic to remove cases of testing of pointer as zero or non-zero integer and replace with explicit testing of (FILE *)NULL 2009 Oct 14: changes to usage() to improve some of the option descriptions with +help 2009 Oct 13: mod to epoch_order() so that case 1 output (obs or met epochs out of order) is suppressed by -warn or +quiet 2009 Oct 12: added more verbose error messaging to binex_7f_03_phase() when there appears to be a phase delta overflow in BINEX 0x7f-03 2009 Oct 9: addition of a new option, sv_reset, currently on by default (i.e. +sv_reset), that controls whether the resetting of the current SV count to zero will occur — as when encountering any 8-bit checksum error when reading Topcon TPS/Javad JPS formats in next_Topcon_record(); use -sv_reset to suppress the reset removal of old null met file output FILE pointer tests at the beginning of decompose_NMEA_XDR(), decompose_Vaisala_0R0(), decompose_Vaisala_020c(), and decompose_NOAA_GSOS() — which appear to be no longer necessary and were preventing RINEX met file creation using the -tbin option when the met data is in various ASCII strings (SW) 2009 Oct 8: (at least temporarily) removing the resetting of the current SV count to zero when encountering any 8-bit checksum error when reading Topcon TPS/Javad JPS formats in next_Topcon_record() 2009 Oct 7: all failures to fopen() a specified filename for reading (i.e. 'r' mode), writing (i.e. 'w' or 'wt' mode), and appending (i.e. 'a' or 'at' mode) are now directed to fopen_failure() which reports the filename and mode; all cases immediately terminate teqc except for failures upon attempt to fopen for writing certain qc related files when doing a metadata search (e.g. +mds, +meta), filename_loop() now calls implied_window_limit() at the beginning of the loop to obtain the end time limit of the file if the input is RINEX and it calls format_initialization() at the end of the loop 2009 Oct 6: change to the case in window_OK() for supplied file lists so that if metadata is being requested (e.g. options +meta, +mds) then implied ending window limits will be based are the first file in the supplied filename list (rather than the last file in the list as is needed with options such as RINEX file merging, +qc, etc.) 2009 Oct 2: change to allow update of last handled met epoch for all cases at the end of met_native_to_RINEX_out(); this eliminates earlier met epochs from showing up in RINEX met output 2009 Oct 1: change to obs_out_receiver_id() so that the a RINEX comment is output with the receiver serial number if the receiver ID number is supplied (i.e. -O.rn is used) or a RINEX comment is output with the receiver ID number if not supplied (in which case the serial number automatically becomes the receiver ID number in the RINEX obs header as before) for reading external data ports in Topcon TPS/Javad JPS message [>>]: the allocation and memory coy of the NMEA data string in decompose_Topcon__g() into teq.tr.rx.Topcon.bf[] was reduced in size to eliminate the DOS end-of-line ASCII characters for reading draft proposal of BINEX 0x7f-05, change to binex_7f_05_obs() and binex_7f_05_signal_map() requiring explicit knowledge of the GLONASS slot # to FCN mapping; if the FCN is unknown, the GLONASS phase for that SV cannot be recovered suppression of output of unknown IGS designations for receiver and antenna/radome in IGS_receiver_designation() and IGS_antenna_designation() expanded to include +v (readability verification) and +mds (short metadata extraction) 2009 Sep 30: for reading Topcon TPS/Javad JPS format, a change to spew_Topcon_TPS_epoch() (resetting of the days static variable to zero when there is a current [RD] message) to deal with more irregular occurrences of [RD] messages in a sequence of data epochs the switch that handles resets at the end of the main file loop in filename_loop() was expanded to handle the +v option; the navigation ToW epochs are also now reset in this switch 2009 Sep 29: correction to logic in binex_7f_05_obs() for reading data from the draft proposal of BINEX 0x7f-05; tested successfully on sample data from a Trimble NetR8 and a Topcon receiver in obs_out_receiver_id(), suppression of rewriting of the receiver ID number with the receiver serial number if option -O.rn is used to set the receiver ID number 2009 Sep 28: updated IGS receiver/antenna designations up through 15 Sept 2009 entry 2009 Sep 11: all Notice and Error messages in rhead_all.c (e.g. rinex_version_type()) now have the offending filename included in the stderr output experimental code added to rinex_end_of_header() (now blocked by preprocessor logic) which gets things a bit closer to having metadata extraction work on a list of RINEX files (does not have the last epoch time for the files after the first file in the list) 2009 Sep 10: updated IGS receiver/antenna designations up through 9 Sept 2009 entry
2009 Sep 9: correction to extract_2cNb(): zeroing out unwanted bits > N
for reading of draft BINEX 0x7f-05 in binex_7f_05_obs() added missing extraction of CNo LSBs from 5-byte reference range and corrected reading of wrong bit for detection of the 3-byte receiver clock offset value 2009 Sep 1: August 3 plan for L2 from L2C or P2: slight mod to binex_7f_05_obs() to bring reading of Trimble's draft proposal of BINEX 0x7f-05 into alignment with bit 2 of the loss-of-lock flag on L2 2009 Aug 31: updated extract_Trimble_ant_type() to id Trimble's GNSS chokering antenna, TRM59800.00, as antenna code 'G9' modification to obs_epoch_check(): observation session interval is not computed unless the last epoch date is after the default of start of GPS time of 1 Jan 1980 (to fix new problem of the last epoch being set to 1 Jan 1980, but interval in RINEX header was based on that value and first valid epoch when time windowing — problem probably related to change made on 25 Apr 2009) correction to qc ASCII timeplot bin calculation in qc_bin(), for example, to not yield empty columns if qc-ing N epochs and using N-1 columns in the timeplot (SW) 2009 Aug 28: clarified +help to differentiate between the 'compact' or 'compact2' plot files (which are in ASCII) and the qc ASCII "timeplot" (the quick overview of SV data and various statistics as a function of time) which shows up at the start of the qc short or full report added in missing loss-of-lock (lli) detection to binex_7f_05_obs() new l_7f05() for dealing with +smtt option for BINEX 0x7f-05 in binex_7f_05_obs() — but code needs to be generalized for GLONASS phase modification if -smtt is used and millisecond receiver offset are occurring (and the same is true for the older l1_adj(), l2_adj(), l1_7f02(), l2_7f02(), l1_7f03(), and l2_7f03() functions long in use) — yet another good argument as to why using -smtt to create RINEX is a bad idea 2009 Aug 27: debugging of extract_2cNb() for N > 32 (more than 4 bytes); tested for N= 39, 40, 41 and tested on big- and little-endian processors some fine-tuning of binex_7f_05_obs(): GPS antispoofing flags, inclusion of the 2 LSBs of each SNR for signal-to-noise to 0.1 dBHz resolution, inclusion of the 0-9 SNR flag on phase value fields 2009 Aug 26: renamed set_obs_types() to be set_obs() (original name was redundant) in set_obs_obs_out() default RINEX obs observables are now not locked down if the input format is BINEX (by setting RINEX_TYPES_OF_OBS bit) which allows call to set_obs() in decompose_binex_7f() to take effect (coding note: BINEX format as input is the exception to the rule as other native formats have their default observables list set in format_settings()) first pass of reading any BINEX 0x7f records in decompose_binex_7f() now has default set of observables set by set_obs() according to use (or not) of options +C2 and/or +L5 new extract_2cNb() for reading a 2-52 bit two's complement integer new binex_7f_05_constellation(), binex_7f_05_obs(), and binex_7f_05_signal_map() for reading Trimble's draft BINEX 0x7f-05 record proposal for GNSS data 2009 Aug 25: binex_01_02_ephemeris() for reading Trimble's draft BINEX 0x01-02 record proposal for a GLONASS nav message 2009 Aug 21: August 3 plan for L2 from L2C or P2: new test data from Topcon and improved logic control by including new switching function Topcon_use() in decompose_Topcon_Pn(), decompose_Topcon_pn(), decompose_Topcon_nP(), decompose_Topcon_np(), decompose_Topcon_Dn(), decompose_Topcon_nd(), and decompose_Topcon_snr(); Topcon TPS/Javad JPS set up for both GPS and GLONASS 2009 Aug 20: August 3 plan for L2 from L2C or P2 now implemented for reading Topcon TPS/Javad JPS, but needs to be tested on a wide variety of message types; final code tested on all test samples of L2C data for BINEX 0x7f-03, Leica MDB record 0x77 (119), Topcon TPS with [3R], Trimble RT17 and RT27, and Septentrio SBF record 5944 2009 Aug 18: August 3 plan for L2 from L2C or P2 now fully implemented for reading Septentrio SBF records 4027 and 5944 with call to new SeptentrioBF_lli() from SeptentrioBF_4027_5944_obs() for handling bit 2 on the "loss-of-lock" flag 2009 Aug 17: for reading Ashtech B-file format, Ashtech_dld_3_constellation() was modified so that SV ids in the B-file of a receiver that is not capable of tracking GLONASS with an id value greater than 32 and converted to a GPS PRN value of id-32; this was found to fix data from an Z-Xtreme receiver reporting an id of "33" to be from GPS PRN#1 2009 Aug 6: August 3 plan for L2 from L2C or P2 implemented for reading BINEX 0x7f-03 in binex_7f_03_obs() 2009 Aug 5: cleanup: now unneeded variable in function call of extract_Trimble_antenna_height() was removed some minor rewording of some +help options expansion of reading Topcon TPS/Javad JPS [rM] for L5 in Topcon_TPS_rM_obs() August 3 plan for L2 from L2C or P2 implemented for reading Topcon TPS/Javad JPS [rM] in Topcon_TPS_rM_obs(), reading Trimble RT17 (either .dat record 17 or stream 0x57-0) in Trimble_17_57h_0_obs(), and reading Septentrio SBF records 4027 and 5944 in SeptentrioBF_signal_map() (though bit 2 on L2(L2C) using +C2 is set and should not be) modification in logic for detecting bad PRNs for GPS and SBAS SVs in reading Trimble RT17 records in Trimble_17_57h_0_constellation() 2009 Aug 4: August 3 plan for L2 from L2C or P2 implemented for reading Leica MDB 0x78 (120) in Leica_MDB_78_obs() and for reading Trimble RT27 (either .dat record 27 or stream 0x57-6) in Trimble_27_57h_6_signal_map() and removal of autosetting of +L2C_L2 in decompose_Trimble_27_57h_6() updated IGS receiver/antenna designations up through 29 Jul 2009 entry 2009 Aug 3: current plan for implementing L2 from L2C:
2009 July 29: for reading BINEX 0x00, added a test in decompose_binex_00() when encountering field ID = 0x0f for a 4-character ID that if the required length byte = 0x04 is missing, then it is inserted prior to calling extract_binex_00_field() to extract the 4-character ID ASCII string modification to binex_to_rinex_hdr() — for population of BINEX metadata struct to nearest equivalent in RINEX metadata struct — so that the station name, monument name, or reference point name if present are used to populate the RINEX marker name if the BINEX marker name is not present; likewise, the station number, monument number, or reference point number if present are used to populate the RINEX marker number if the BINEX marker number is not present 2009 July 27: slightly modified the rejection criterion for Trimble .dat record 12 in decompose_Trimble_12() modified extract_Trimble_antenna_height() (currently used for reading Trimble .dat record 16.3, 16.30, and 16.43) so that height codes of 'V', 'R', and '0' are used to extract the vertical antenna height, overriding any previous value unless the user is using -O.pe or -O.sl, and then if the code is '0' locking the antenna height at that value unless the antenna type is of an old Trimble antenna (with best effect to identify such) 2009 July 17: due to improvement changes started around 28 July 2008 to correctly capture the first epoch in the qc stats, the first epoch of the qc ASCII plots files has been the first epoch of data for a while now; this has been noted and the output value of START_TIME_MJD in all the plot files has been corrected with a change to open_qc_compact_plot_file() 2009 July 15: updated IGS receiver/antenna designations up through 13 Jul 2009 entry 2009 July 14: call to obs_allocate_summary('t') when using -O.sum option: after each set_obs_types() set of calls for GNSS observables in decompose_binex_7f() when reading BINEX as input and in binex_out_settings() when writing BINEX as output (not yet available with -O.sum ., but is planned for the future) modification of rinex_header_element_check() and defines RINEX_ALL_OBS_HEADER, RINEX_MUST_HAVE_OBS_HEADER, and RINEX_OBS_HEADER_DONE in flags.h so that the RINEX obs header line WAVELENGTH FACT L1/2 is optional as specified in RINEX 2.11 (a change from 2.10) 2009 July 7: process_input() modified so that use of -O.sum s automatically switches to -O.sum e (i.e. output is assumed to be RINEX and summary will be at the end of the obs file) if the input is stdin or a native format 2009 July 6: dump_binary_config() renamed dump_any_final_result() switch added to dump_any_final_result() to call obs_out_summary() when using -O.sum . with target file(s) input in a native format added call to obs_allocate_summary() for observable type array index at end of format_settings() when using -O.sum . with target file(s) input in a native format correction in obs_acquire_summary(): skip call to obs_summary() when there is no data for current observable and current SV 2009 July 2: re-arranging of various calls to obs_allocate_summary() and obs_summary(), plus introduction of new obs_acquire_summary(), so that any filtering is done before the observable counts are done; introduction of new -O.obs . which sends the observable summary to stdout or target file of +out fixed two places in qc_satellite_obs_update() that were missing a test for whether the +L5 option was set (without one of these, if doing qc with +plot on L5 data and -L5, then a segmentation fault would result) 2009 July 1: finished overhaul of the SV summary struct for RINEX obs when using options -O.sum s or -O.sum e, plus associated changes in initialize(), obs_allocate_summary(), obs_summary(), and obs_out_summary() (and possibly where these were called from if there was a function prototype change); the changes now correctly deal with multiple satellite constellations and when there is more than 9 observables updated IGS receiver/antenna designations up through 1 Jun 2009 entry 2009 June 29: skipping the SV sanity check in decompose_Ashtech_dld_B23_record() when reading Ashtech B-file (version 2 or 3): now finds repeated SVs in an epoch, but does not skip the epoch 2009 June 22: added the current filename to the terminate() calls in time.c 2009 June 19: at end of obs_out_start() a check was added to see if -O.e is being used and TIME OF LAST OBS not output yet in the RINEX obs header, and if both conditions are met then obs_out_end() is called 2009 June 15: some minor tweaking of the code that reads Trimble Standard Interface Protocol (TSIP) format, and adding an overload in rx_OK() so that -tr tsip_6f reads 0x6f data packets and ignores any 0x5a data packets 2009 June 9: removal of +CA_L1, -CA_L1, +L2C_L2, -L2C_L2 dependence in Trimble_27_57h_6_signal_map() so that translation of Trimble RT27 occurs like translation of Trimble RT17 and Trimble-produced BINEX; can easily go back to 20 May 2009 functionality by changing preprocessor definitions 2009 June 2: addition of counter in sampling_interval_increase() to report the possible number of missing epochs (assuming a correct and constant sampling interval is detected) reported with +meta output in dump_metadata(); may not yet work correctly on a RINEX obs file if the sampling interval is known (either in the header or using -O.int) 2009 May 29: repositioning of the call for initialization of the current obs epoch in qc_file_reset() to after start_orbit_paths() (see 27 May 2009) addition of file name for the two error conditions in epoch_clock_sanity() 2009 May 28: added a switch case in obs_out() to reset certain flags to allow completion of -O.sum s option for input of a normal RINEX obs file with no additional operations (splicing, time windowing, decimation, SV or channel filtering, …) (see 26 May 2009) addition of tests for receiver type starting with "JPS" or "JNS" (i.e. Javad receiver) in auto-setting of receiver millisecond adjustment off in decompose_binex_7f() when reading BINEX 0x7f-00, 0x7f-02, or 0x7f-03; these are additions to the original list of checking for receiver type starting with "TPS", "Topcon", or "TOPCON" (i.e. Topcon receivers); specific receiver types may be added in the future 2009 May 27: added an initialization of the current obs epoch in qc_file_reset() — which seems to be necessary now when qc-ing certain data files where qc_file_reset() is getting called by qc_satellite_obs_update() when new_position() returns NEW_POSITION (i.e. a new position compared to what the qc started off with) 2009 May 26: addition of call to initialize_epoch() for the last observation epoch (which here would be the last observation epoch of the input after the first reading of the input) in special_processing() for the case of RINEX observation summary requested at the start of the RINEX obs (-O.sum s) 2009 May 20: fix of Trimble_27_57h_6_signal_map() so the options -CA_L1, +CA_L1, -L2C_L2, and +L2C_L2 work correctly for Trimble RT27 (.dat record 27 and stream 0x57-6) for extracting the appropriate doppler and SNR (see 11 June 2007) 2009 May 19: differentiation between Topcon TPS and Javad JPS handling of SBAS in [rc] messages code in next_BINEX_record() for mismatching checksums/CRCs now parallels that in cks_mismatch() for other formats with checksums/CRCs (see 8 May 2009) 2009 May 18: a little preprocessor cleanup 2009 May 8: new cks_mismatch() to present a more unified message for checksum errors in various formats; now used for Ashtech R-file, U-file, and binary stream format; CMC binary; Leica MDB and LB2; Javad JPS; Motorola Oncore binary; NavCom binary; Rockwell Zodiac format; Septentrio SBF; Topcon TPS; Trimble binary stream format; u-blox binary format correction to Trimble_27_57h_6_signal_map() for detected L5 data in Trimble's record 27/0x57-6 data (change of "block type" index for L5) 2009 May 7: reading of Topcon TPS/Javad JPS [==] event message in decompose_Topcon__e() was overhauled and the handling of event messages for internal [==] messages and external [XA] and [XB] messages is now handled by a new Topcon_event() function 2009 May 6: yet more overhaul of open_qc_compact_plot_file() and qc_plot_compact_data() so that only the traditional "COMPACT" format occurs with pure GPS data and a newer "COMPACT2" format occurs with any other GNSS combination SV_id() modified so that it explicitly pads left with zero for an SV id number 1-9 added initialization of the new last and current plot list elements in qc_compact_file_allocation() new +plot2 option to force "COMPACT2" plot file format if GPS-only data (this kicks in by default if the data is GNSS) 2009 May 5: added initialization of current plot list in plot_compact_current_epoch() after setting last plot list added initialization of the new last and current plot list elements in qc_compact_file_allocation() with these changes, only the few calls to init_compact_plot() in qc_missing_epochs() are now needed (i.e. a lot of code chaff has been removed, and the qc plot files are far more consistent between various builds) overhaul of open_qc_compact_plot_file() for GNSS and to make it compatible with the new GNSS functionality in qc_plot_compact_data() 2009 May 4: changes to logic in same_compact_plot_list() for determining whether the full SV list should be printed in a given COMPACT plot file or whether to use -1 to mean "same as the last list" scheme added to qc_plot_compact_data() for dealing with the SV id numbers of Galileo and SBAS SVs 2009 May 3: initialization of specific COMPACT plot files (+qc with +plot) now done with call to new function init_compact_plot() in qc_start_obs_epoch() and qc_missing_epochs(); new function does not reinitialize the current "have" and "max" variables when called from qc_start_obs_epoch() initialization the current "have" and "max" variables for each COMPACT plot file now done in open_qc_compact_plot_file() when the file is started 2009 May 1: due to changes on 25 Apr, a call to obs_last_data() needed to be added to obs_processing() when using a metadata extraction option (+mds, +meta, …) prior to the return when in the metadata test block 2009 Apr 29: introduction of a new boolean, teq.tbin.rinex_in, and a new function, tbin_autoset_out(), which is called by tbin_from_rinex(), so that the options +obs, +nav, or +met do not have to be used with the -tbin option if the input target files are RINEX (but if the input is more than one file, the the input files still all have to be of the same type) reading of Topcon TPS/Javad JPS in next_Topcon_record() is now set to ignore [NO] and [NT] messages (for the time being) 2009 Apr 28: error corrected in decompose_Topcon_XAB() calling obs_epoch_with_gps_week() instead of event_epoch_with_gps_week() when there is a valid [RD] message new Topcon_TPS_UTC_epoch() for when TPS/JPS [RD] message is in a UTC time base requiring a leap second adjustment to get GPS time; used in spew_Topcon_TPS_epoch() for [~~] observation epoch times and in and decompose_Topcon_XAB() for [XA] [XB] event epoch times 2009 Apr 27: more testing of the changes made on 25 Apr 2009 and some overdue code cleanup in obs_data() identification of an unknown BINEX 0x00 field ID in decompose_binex_00() is now treated as a notice (suppressed with options -notice or +quiet) leap_seconds() was modified so that the test epoch could be in GPS time or in UTC 2009 Apr 25: name change of qc_constellation() to qc_epoch() (more descriptive of what its function is) and change of internal conditionals to where it is called in obs_filtering() change in where obs_last_epoch() is called for most data (now following obs_filtering()) so that the last epoch field is updated for all binary activities including qc of binary data 2009 Apr 24: move of p buffer creation for reading of Topcon TPS/Javad JPS [pc] [p1] [p2] [p3] [p5] messages from decompose_Topcon_pn() to first detection in Topcon_TPS_obs() for reading of Topcon TPS/Javad JPS, added detection of receiver reference timebase of [RD] message in decompose_Topcon_RD(), to be applied in converting epoch time of [~~] message in spew_Topcon_TPS_epoch() or event time in [XA] or [XB] messages in decompose_Topcon_XAB(); e.g. this converts GLONASS or UTC(SU) time of those messages to GPS time which is the standard in teqc input/output 2009 Apr 23: completion of code refactoring to read Topcon TPS/Javad JPS, for reading of the following data messages:
[rc] [r1] [r2] [r3] [r5] [1R] [2R] [3R] [5R] [1r] [2r] [3r] [5r] [CC] [C1] [C2] [C3] [C5] [cc] [c1] [c2] [c3] [c5] [PC] [P1] [P2] [P3] [P5] [pc] [p1] [p2] [p3] [p5] [CP] [1P] [2P] [3P] [5P] [cp] [1p] [2p] [3p] [5p] [DC] [D1] [D2] [D3] [D5] [1d] [2d] [3d] [5d] [EC] [E1] [E2] [E3] [E5] [CE] [1E] [2E] [3E] [5E] [FC] [F1] [F2] [F3] [F5] change to ASCII_0R0() for reading Vaisala 0R0 ASCII met strings, to detect the "invalid data" indicator and substitute a large negative value if this occurs (will show up as -9999.9 in RINEX met) 2009 Apr 22: mod to decompose_Topcon_MF() to allow reading of Topcon TPS/Javad JPS format version "01.00" and "01.01" mod to Topcon_SI_NN_validation(), Topcon_TPS_constellation(), Topcon_TPS_rM_constellation(), and Topcon_TPS_rM_obs() to recognize Galileo SV PRNs (definitely now needed for JPS [SI], hopefully not wrong for TPS [rM]) temporarily ignoring new JPS messages [EU], [NU], [WU], [EA], and [EN] 2009 Apr 21: fix of faulty formatting of error messages in decompose_Topcon_MF() (reading of Topcon TPS/Javad JPS) — never encountered before now because the format version has always been "01.00" until now 2009 Apr 15: better solution for GPS week rollover problem for Trimble record 27/0x57-6 data: decompose_Trimble_27_57h_6() back to original code, which calls obs_epoch_with_gps_week(), and then added cases for Trimble formats in switch of obs_epoch_with_gps_week() so that these formats are not routed to obs_epoch_no_gps_week(), i.e. if -week is not used, then we are trusting the GPS week value in epochs of record 27/0x57-6 data 2009 Apr 13: mod to decompose_Trimble_firmware() such that if the NP major number >= 10, then reported NP major number is modulo 10 and SP is set to zero (a guess based on actual case from a R7 GNSS) mod to decompose_Trimble_27_57h_6() to suppress using the GPS week in Trimble's record 27/0x57-6 on the first epoch after a GPS week rollover so that the auto-increment of the GPS week in obs_epoch_no_gps_week(), event_epoch_no_gps_week(), and met_epoch_no_gps_week() all continue to work correctly together (when the -week option is not being used) as with past record 17/0x57-0 data which had no GPS week per epoch 2009 Apr 3: multipath rms results from a qc are now all output through a new function, qc_mp_sigma(), which reports the rms as usual if if it non-zero or reports "n/a" if it is exactly zero, the latter being consistent with no multipath rms for that particular combination introduction of another counter during qc to keep track of SVs with no calculated orbits (currently all constellations except GPS), used in SV_discrepancies(), that more correctly shows the '+' indicator on the -dn and +dn lines when there is data from GPS plus other constellations (though the discrepancy counts and/or '+' are still only for GPS SVs for the time being) addition in qc_SVs_present() to list all GLONASS SVs that were encountered in the qc run without frequency channel numbers 2009 Apr 2: all references to GLONASS FDMA frequency channel number now use a "fcn" as a variable, struct, or part of a function name (to make it easier to find them in the code) old option -glonass_n — for inputting a filename that contain GLONASS SV slot to frequency channel numbers — is now -glonass_s2fcn cleaned up +help, and added more explicit information about options for SV filtering GLONASS_slot_vs_freq() renamed GLONASS_slot_2_fcn() and now takes a GLONASS slot # as an argument; a valid frequency channel number is now required for each requested slot # a new ASCII time plot indicator, 'N', introduced == unknown GLONASS frequency channel number for this slot # for GLONASS SVs, GLONASS_slot_2_fcn() is now called before doing any qc combination and if the current slot # has an unknown frequency number then this is reported and the new ASCII time plot indicator is set 2009 Mar 23: Leica_GLONASS_nav() changed to explicitly use the leap second offset in any stored GLONASS nav message; sample MDB data from a 1200GG Pro since the start of 2009 is showing that the first GLONASS nav message in a file is a pre-1 Jan 2009 message with a GPS - UTC offset of 14 seconds (rather than post-31 Dec 2008 value of 15 seconds) and the current offset of 15 seconds for messages after the first 2009 Mar 20: new qc counter in filter_SV_duplicates_in_obs() that counts the number of duplicated SVs in non-repeated epochs; shown in the qc output as 'Obs w/ SV duplication'; ideally this count should be zero 2009 Mar 18: NetRS_ize_firmware() modified so that if a NetRS receiver type is found, then a firmware version specified with -O.rv or extracted from a RINEX obs input header is passed through unaffected (though this should try to reformat the input, if possible, to the preferred "A.B-C" firmware format) slight correction to event_logger(): reset input string length — since the string length is now needed later — after eliminating non-ASCII and non-printable ASCII characters from the input string (see 14 Mar 2009) fix in qc_missing_epochs() to the conditions for qc lite code change (see 25 Feb 2009) for when one or more navigation messages for an SV are present in the input, but are eliminated for some reason (e.g. ToE - ToW is too large) and there is no observation data for the SV 2009 Mar 17: a couple of additional message length checks in next_Ashtech_R_record() for reading an Ashtech R-file to better deal with corrupted data or (the equivalent) two or more R-files cat-ed together when false positives (i.e. valid message id, apparent message body, and valid checksum) occur — since reading the 8170-byte header in a cat-ed file after last improved parsing change (14 Mar 2009) but this lead to occasional false positives on very short pseudo-records (mainly 6, 9, and 23) leading to false week jumps 2009 Mar 16: new option sv_dup (by default, set to be -sv_dup == remove SV duplicates before RINEX obs output), with accompanying function filter_SV_duplicates_in_obs() 2009 Mar 14: for parsing of a corrupted Ashtech R-file, next_Ashtech_R_record() was modified to apply a single byte advance when a problem is detected and reading from a file input (i.e. not stdin) event_logger() modified so that the function would work if passed a zero-length string 2009 Mar 12: a few small changes of where qc_indicator() is called and a small change to the qc_indicator() function itself for termination 2009 Mar 10: reading of an external ASCII string by decompose_ext_string() (currently only used for reading external ASCII strings from Trimble formats) was modified to look for a leading event time in seconds (in the GPS week) if (as usual) the supplied millisecond pointer is null (e.g. dat record 16.254) or (the new functionality) the supplied millisecond value is zero (stream record 0x57-3 from NetRS); reason for change: one case of NetRS firmware found where the event time is not logged in the 0x57-3 header as is had been in previous receivers, but the external event time is now showing up in ASCII prior to the event string (as in dat record 16.254); this change is needed in order to read met data logged by the NetRS in the Trimble stream format for qc full, the addition of "Possible windowed obs" above the horizon and elevation mask to supplement the information in the alternate SWN summary line when windowing 2009 Mar 9: implementation of an old qc full indicator in SV_discrepancies() that will show in the -dn and +dn lines as a '+' where there is additional data below the elevation mask from one or more SVs (assuming no SV data discrepancies) qc_final_obs_epoch() was modified to deal with the edge case where windowing is being used with qc, and the end of the window coincides with end of one or more missing epochs, but at least one valid epoch is after the window 2009 Mar 7: addition of new qc full counter in SV_discrepancies() that sums up the discrepancies for all epochs with any sort of data and shows this as "Missed observations" in the qc full report 2009 Mar 6: small fix to qc_missing_epochs() for the case where a position will be attempted but the requested missing epochs are at the beginning of a window with no data epochs yet, the "qc lite" block added 25 Feb 2009 needs to be skipped (since this is handled later in a "qc full" run) 2009 Mar 5: during a qc, repeated data epochs are now accounted for and counted with a new counter; this corrects the "Epochs w/ observations" value and the "hrs" value in the SUM line if there are any repeated epochs, and the count of repeated epochs is now reported in a new "Epochs repeated" value (which ideally should always be zero) 2009 Mar 4: correct (or at least much better) determination of the epoch of ephemeris in Trimble_28_55h_9_ephemeris() when reading Trimble dat record 28 or stream 0x55-9 for GLONASS nav message; values in translated RINEX GLONASS nav compared against the same messages collected locally by Trimble NetR8, Topcon Net-G3, and Ashtech GG24 and globally in the combined brdc GLONASS nav file from CDDIS modified next_Topcon_record() to ignore the new TPS/JPS [RN] message, i.e. can be ignored for RINEX for Trimble .dat/.tgd file, extract_Trimble_ant_type() was modified to recognize antenna "KG" as a Trimble GA510 antenna based on the entry in Trimble's antenna.ini file 2009 Mar 3: final memory deallocation in terminate() is now skipped for the Mac OSX gcc builds as well (see 2006 Apr 5 entry) because it is optional in any RINEX 2.xx nav file, the outputting of the LEAP SECONDS header line in nav_out_standard_header() — used when creating any nav file during a translation — is now eliminated 2009 Mar 2: for qc full, a counter to sum up all SVs with complete data but below the elevation mask was added to qc_satellite_obs_update() (initialized at the beginning of qc_constellation() for each observation epoch) to correct the discrepancy counts in SV_discrepancies() that show up in the -dn and +dn lines; the qc reports for all previous teqc versions where not adjusting the counts for SVs with complete data and also below the elevation mask in these two qc full lines 2009 Feb 26: small addition to qc_missing_epochs() to cover the case when the antenna position has been found but there is are no nav messages for a specific SV so that the presentation in the qc ASCII time plot is identical to the situation when there is no antenna position found (25 Feb 2009) new option, rx_ms_adjust, which, if on (e.g. +rx_ms_adjust, which is the default) proceeds with the millisecond adjustment of clock, phase, and/or pseudorange values depending on various manufacturers' formats to arrive at RINEX either with smooth time tags and jumpy phase/pseudoranges (+smtt, which is the current default) or with jumpy time tags and smooth phase/pseudoranges (-smtt); why needed: Topcon BINEX is already is in a form equivalent to +smtt, so no further millisecond adjustment is needed by teqc, so the state set by -rx_ms_adjust is needed, although this will automatically occur if the BINEX being read is determined to be from a Topcon receiver 2009 Feb 25: new logic in qc_missing_epochs() to emulate the qc ASCII time plot symbol for "SV above elev mask, but no data" for when the antenna position cannot be found (e.g. no navigation messages); corresponding new enum and symbol in qc.h 2009 Feb 17: default ToE lookback allowance in time from first observation epoch in nav_filtering() is changed from 1 hour (see 2008 July 24) to 2 hours by default, and is now changeable using a new -ToE_dt option 2009 Feb 12: went back to the original conditional logic in Leica_MDB_77_obs() (for reading Leica MDB record 119), but: changed initial values in Leica_MDB_77_signal_map(), SeptentrioBF_signal_map(), and Trimble_27_57h_6_signal_map(), and switched to using the same conditional logic in SeptentrioBF_4027_5944_obs() (for reading SBF 4027 and 5944 records) and in Trimble_27_57h_6_obs() (for reading Trimble's RT27 data structure) as in Leica_MDB_77_obs() 2009 Feb 11: small change to NetRS_ize_firmware() to deal with a floating point issue when the firmware designation is being reformatted for a Trimble NetRS fixed some conditional errors in Leica_MDB_77_obs() for reading Leica MDB record 119 (0x77) when compiled on (all or most) x86 platforms using Leica MDB 119 sets the equivalent of the +CA_L1 option unless the -CA_L1 option is set by the user; the wording in the +help option was updated to reflect this 2009 Feb 4: a little re-crafting of the code in read_Ashtech_E_file() for reading an Ashtech E-file 2009 Jan 30: the portion of decompose_Trimble_firmware() that tries to reformat the receiver firmware notation for a Trimble NetRS in the "A.B-C" format has been stripped out and put into a new function, NetRS_ize_firmware(), which is called before the firmware metadata dump in dump_metadata() when using +meta and before outputting the firmware to a RINEX obs header in obs_out_receiver_id() 2009 Jan 28: decompose_Trimble_firmware() modified so the "A.B-C" format for displaying Trimble firmware versions is only used if the receiver type has "NETRS" in its name 2009 Jan 26: for reading of Topcon TPS/Javad JPS, modified next_Topcon_record() to ignore messages [GT], [SG], [VG], and [PS] 2009 Jan 23: for reading of Topcon TPS/Javad JPS, modified Topcon_SI_NN_validation() so that a request for memory allocation is skipped if the total number of satellites (nSats) is zero so that teqc does not prematurely terminate 2009 Jan 20: new set_rinex_set_X() for setting a flag across all RINEX header structs consistent testing of whether the current leap second has been set by the user (using either -O.leap or -N.leap; see 2003 Mar 4) and, if not, setting with "found" value in a format and then calling set_rinex_set_X() with RINEX_LEAP_SECONDS leap_seconds() modified so that a user set value from either -O.leap or -N.leap takes priority over the built-in table (which gets out of date any time a new leap second is inserted into UTC without a table update) 2009 Jan 16: original documentation for Leica MDB record 119 had a error for the units of doppler (see 2008 Dec 31), but guess as to what the doppler unit really was was correct, so no change needed to Leica_MDB_77_obs(); reading of Leica MDB record 119 ready for beta testing an absolute value limit of 1e4 lightseconds is now imposed on any pseudorange using rng_s_adj(), and a value of zero is returned if so, to eliminate totally off-scale values (as recently seen in a few Topcon TPS [RC] messages) 2009 Jan 12: cleaned up some termination messages (elimination of double program name prints) updated IGS receiver/antenna designations up through 12 Jan 2009 entry 2009 Jan 8: moved extract_int(), extract_sub, and extract_real into general.c 2008 Dec 31: code added for reading Leica's new MDB record 119 for compact GNSS data — decompose_Leica_MDB_77(), Leica_MDB_77_constellation(), Leica_MDB_77_obs(), and Leica_MDB_77_signal_map() — and testing on one file from Leica; discrepancies with the extracted doppler values compared to the documentation updated decompose_Leica_MDB_68() (record 104) for new Leica receiver types and decompose_Leica_MDB_6c() (record 108) for new Leica antenna types 2008 Dec 10: updated IGS receiver/antenna designations up through 2 Dec 2008 entry implemented new +rx_state option which (like +qc, +verify, +mds and +meta) suppresses conversion of input to RINEX and outputs any detected receiver state parameters to stdout or redirected stdout if using +out; currently the only receiver state parameters are found in BINEX 0x7d-00 (see 8 Dec 2008) 2008 Dec 8: adding reading of BINEX 0x7d-00 — receiver internal state parameters — with decomposed_binex_7d() (at the moment output goes to stderr or error file) 2008 Nov 25: initialization error for the on variable in set_obs_obs_out() and set_met_obs_out() corrected (otherwise sometimes leads to faulty GNSS or met observable lists being made and associated memory overflow; probably broken Oct 23) 2008 Nov 24: +qc fix: moved the call for qc_final_obs_epoch() from the end of rinex_obs() to special_processing() because the former location causes the code to treat the end of one file to the end of the window (which might be in one of the later files and by default it would be the last epoch in the last file) as a gap prematurely calling qc_missing_epochs() and trying to populate the plot files with a large number of invalid empty epochs 2008 Nov 21: binary encoded Trimble firmware fields are now directed to a single function, decompose_Trimble_firmware(), which attempts to create a string consistent with the series 4000 receivers, the NetRS nomenclature, and NetR5 and later receiver nomenclature (note: this doesn't attempt to recast the firmware string found in the Trimble .mes file yet) 2008 Nov 20: tried to improve the description of no A/S (antispoofing) flags in the +sym option in symbol_codes() 2008 Nov 18: correction to qc_SVs_present() to include the SV offset parameter when listing the SVs without observations ("SVs w/o OBS") — without the offset parameter, the PRNs of SBAS SVs are off by 119 (rather than the intended 100 like in RINEX) in this listing 2008 Nov 17: included case for GPS L5 in SeptentrioBF_signal_map() (accidentally left out in 7 Aug 2008) mod to format_settings() so that use of +L5 option without -O.obs option during translation will automatically include RINEX L5, C5, and S5 in the observable list when translating Leica MDB, Septentrio Binary Format (SBF), TPS/JPS, or Trimble RT27 2008 Nov 14: reading of SBF 5949 for base station coordinates in decompose_SeptentrioBF_5949() if datum is WGS-84 or Galileo 2008 Nov 12: added a test in binary_OBS() to abort and return a non-zero result if the current observation epoch time is equal to the last observation epoch time; not sure if this should be the default (which would break the past behaviour to output epochs with duplicate times) or if this should be an option; added to test elimination of duplicate epochs in Trimble RT27 stream data 2008 Nov 7: verified that the current translation of Trimble's RT27 (.dat and stream formats) yields the same RINEX results (right or wrong) on Solaris Sparc and Solaris x86 2008 Nov 6: the dump of BINEX config options (e.g. +bcf, if reading BINEX) was changed in decompose_binex_00() so that the accumulated comment buffer is now deallocated upon detection of each BINEX 0x00 record if the input is stdin; this allows one to monitor a BINEX stream as stdin with +bcf without the comments accumulating in the output 2008 Nov 4: the original extract_sint6_2m16() and extract_uint6_2m16() (originally for certain TI-4100 and Rockwell Zodiac data fields) were generalized so that the increment scaling can be any 8-byte floating point number (rather than limited to the original 2^-16); the new functions are extract_sint6() and extract_uint6() updated IGS receiver/antenna designations up through 3 Nov 2008 entry completed first cut of reading Trimble RT27 stream records 0x55-9 and 0x57-6; testing is yielding suspicious results 2008 Oct 30: modified read_Trimble_mes_file() and read_Trimble_rec_file() to recognize Trimble .tgd (or .TGD) filename extensions so that a search for .mes or .rec files with the same filename prefix would be automatically performed 2008 Oct 29: leap_seconds() was updated to include the introduction of a positive leap second at the end of December 2008 2008 Oct 27: completed first cut of reading Trimble RT27 .dat record 27, plus .dat record 28 (GLONASS navigation message), and .dat record 29 (position info) 2008 Oct 23: Septentrio SBF records 5919 and 5949 quietly skipped improvements on how SBF 5936 (user comment) is handled in decompose_SeptentrioBF_5936(): new maximum length (120 instead of 480 characters), skip is zero length, replace non-printable characters with whitespace, only call obs_native_to_RINEX_out() if RINEX header has already been output removed the obfuscated second argument of set_obs_obs_out() and set_met_obs_out(); verified that the call to set_obs_obs_out() in Ashtech_rx_specifics() is required to avoid user confusion with regard to setting observable types for the different Ashtech receivers and/or formats (see also switch for set_obs_obs_out() in format_settings() which excludes Ashtech formats) 2008 Oct 22: restriction of the call to set_obs_obs_out() in Ashtech_rx_specifics() when the input format of the target file is not RINEX; this fixes the odd bug that occurs if the +C2, -P, and/or -L2 options are used when qc-ing RINEX with the # / TYPES OF OBSERV line preceding the REC # / TYPE / VERS line and the receiver type is identified as an Ashtech 2008 Oct 8: decompose_Leica_MDB_71() for reading of a Leica MDB point record (113 = 0x71) was modified so that: if the point content flag indicates that point data is available, but the status flag indicates a deleted point record or if the status flag indicates a valid point record but the point type flag indicates a temporary point record, then further reading of the point record is skipped; on several example files, this skips over point records which have bogus values for milliseconds of the week, which, when in previous versions of teqc (since at least 20 Apr 2007) was interpreted as valid when using the -week override, caused teqc to incorrectly increment the GPS week when a valid point record immediately followed an "invalid" point record ("invalid" meaning that it meets the above requirements for skipping) 2008 Oct 3: check of string overwrite capability added to the_details() (++details option), plus some other minor reworking of the function 2008 Oct 1: reading of u-blox UBX will now skip quietly over GPS almanac record ID 0x0230 setting of receiver limits of maximum number of SVs that can be tracked and maximum number of channels (which is possibly now obsolete) — if not set explicitly by a user option — are now centralized in a new function set_rx_max() updated IGS receiver/antenna designations up through 1 Oct 2008 entry 2008 Sept 30: build line and other final code tweaking for Vertex/ARM Gumstix build for testing 2008 Sept 29: set_types() was renamed to set_obs_types() 2008 Sept 25: minor correction to nav_out_data() so that all navigation message lines again have C-style 'e' replaced with Fortran-style 'D' for scientific notation in RINEX nav output (the minor error was probably introduced when putting in the output for the Galileo nav message on 8 Aug 2008 and the function was rewritten a bit to better optimize it) the algorithm for correct_GPS_nav_times() was changed again (see 23 Sept 2008): the RINEX requirement that the time of message transmission value in the GPS navigation message be possibly adjusted, i.e. adjust the transmission time of message by -604800 to refer to the reported week, if necessary requires an assumption about how far in the future a GPS navigation message might be sent compared to when it would apply; the previous algorithm (in effect since 9 Feb 1999) had assumed that the ToC and ToE had to be zero before an adjustment would be considered, which given a normal nav message refresh time of 2 hours meant that there was roughly only a 2-hour window of messages where this would be applied, limiting the advance transmission to be limited to only about 2 hours for a correct RINEX ToW value; the new algorithm expands this window to 2 days + 2 hours which should be flexible enough to capture and correct all the necessary ToW values 2008 Sept 23: changed warning of detection of old ConanBinary records 6, 8, or A to a "teqc can't do this" type of message; teqc is not designed to deal with these records for reading Trimble .dat format, if record 5.2 or 6 or 12 is encountered, a non-zero value for the number of channels is required before resetting the maximum allowable number of SVs that can be tracked (or, in the case of 5.2, a non-zero value for the number of channels - 1); modification to decompose_Trimble_5(), decompose_Trimble_6(), and decompose_Trimble_12() GPS nav ToW values for Leica formats are now estimated from various time tags modulo 30 seconds (time for rotation of all five 300-bit subframes) rather than modulo 6 seconds (time for one 300-bit subframe) the logic in correct_GPS_nav_times() was changed when the local ToW is greater than 302400 seconds (i.e. ½ week): to not increment the global ToC and global ToE when the local ToC and local ToE were zero, nor increment the GPS week when both were zero; this change was made because the original logic is definitely not correct for nav messages which are now occurring at the end of Saturday but apply for the first epoch on Sunday; the original logic has been in the code about since the beginning, so either this was a bug that has gone unnoticed by years, or this new "fix" will introduce new problems to the RINEX nav output 2008 Sept 19: relabeling of constants and functions from "RT17" to "BSTR" (== "big-endian stream"), which is for Trimble's streamed format (which they don't have a name for), to avoid latter confusion between RT17 and RT27 data payloads, which Trimble uses to describe the data layout for both their little-endian .dat format records and their big-endian stream format records (note: this seemed better than "BCPM" for "binary cyclic printout mode" which is how Trimble had referred to their big-endian stream format in earlier years) 2008 Sept 18: reasonably stable code for the outputting of the GPS CA navigation 50-bps 300-bit subframes, now directed to stdout or target of +out option, with reported GPS times based on ToW of subframe - 6 seconds; untested with messages near GPS week rollover; appears to be problems with reporting of messages in SBF 4017 2008 Sept 17: forgot to increase size of default_type[] arrray in set_met_obs_out() when increasing for the Vaisala WXT510 observables (see 18 July 2008) — now fixed (earlier code leads to crashes or incorrect header in RINEX MET if -M.obs is not being used, i.e. the code is using the default set of met observables) 2008 Sept 16: met_out_sensor_pos() and met_out_sensor_mod() were modified to include all new observables types in RINEX 2.11 for calling met_out_sensor_pos_xyzh() and met_out_sensor_mod_type() to populate the non-optional MET header fields SENSOR POS XYZ/H and SENSOR MOD/TYPE/ACC 2008 Sept 15: config_arg() was modified so that incomplete -O., +O., -N., +N., -M., +M., -B., and +B. options in a config file would get handled the same way as the same incomplete options on the command line correction of minor indexing typo in qc_long_report() when calling qc_end_sn() and +L5 option is not being used (new code ready for L5 was not calling qc_end_sn() for L2 resulting in a missing L2 SNR histogram by elevation bin with default -L5) 2008 Sept 12: get_next_rinex_line() was modified so that the buffer into which the RINEX line is being read is preset with nulls (to eliminate any characters from a previous line) 2008 Sept 11: get_next_rinex_line() was modified so that the +relax option also replaces any non-printable ASCII character with a space (0x20) obs_scan() — for parsing RINEX 1 and 2.xx data lines — was modified so that the +relax option replaces any loss-of-lock indicator in the line that is not a space or a value 0-7 with the value of 0 (added to be able to read quasi-RINEX from the old JPL translator srx that occasionally has a '*' in the loss-of-lock field) rinex_constellation() — for parsing RINEX 1 and 2.xx epoch/SV lines — was modified so that the +relax option attempts to read an incorrectly formatted SV list with more than 12 SVs, i.e. all the SVs are listed at the end of the epoch/SV line constellation_total() was modified for when reading RINEX and doing a qc and the number of listed SVs in the file is larger than expected 2008 Sept 10: a final few bugs ironed out for qc of L5 data with +L5 in reporting various stats in qc_long_report() 2008 Sept 9: added another option to dump the inverted bits of the GPS CA navigation 50-bps 300-bit subframes; both versions (raw as broadcast or inverted) include the 2 LSBs of the previous 30-bit word in the two MSBs of words 2-10 2008 Sept 8: added preliminary dump of raw GPS CA navigation 50-bps 300-bit subframes if reading Topcon [GD] message 2008 Sept 5: added dump of raw GPS CA navigation 50-bps 300-bit subframes if reading Trimble RT17 0x57-5 (as reported in 0x57-5, which are in a partially decoded state) with decompose_Trimble_m57h_5() 2008 Sept 4: the dump of BINEX config options (e.g. +bcf, if reading BINEX) was split off from dump_config() into a new dump_binex_config() which is also now called after reading each BINEX 0x00 record at the end of decompose_binex_00() if the input is stdin and if +bdf is being used — this allows one to monitor BINEX metadata in 0x00 in a stream input 2008 Sept 3: change to g_arg() when reading the -binex option to set the input format to FORMAT_IS_BINEX so that if BINEX is input as stdin then the later parsing understands the input to be BINEX format 2008 Sept 2: change to rinex_comment() to skip storing a RINEX obs comment if doing qc or a metadata extraction another addition to rinex_comment() to eliminate duplicate comment lines from post-header areas in a RINEX obs file input added missing conditionals for skipping new L5 plot files in qc_start_obs_epoch() 2008 Aug 22: more complete qc using L1 and L5 observables — though still plenty of tweaking needed in various summaries in the long report; tested on fake L5 data with real L1 data and on real GIOVE-B L1/L5 data; new +L5 option to turn on use and output of qc combinations involving L5 observables 2008 Aug 20: changed the condition in is_met_in_00_comment() for determining whether or not to override the extraction of a possible seconds-into-week value (sometimes used by Trimble firmware) from the external data string 2008 Aug 13: first preliminary qc using L1 and L5 observables 2008 Aug 11: some cleanup of details on reading for SBF 4002 message (Galileo ephemeris and clock); tested on simulated Galileo data supplied by Septentrio added reading of SBF 4030 (Galileo NeQuick ionosphere model parameters) and 4031 (Galileo system time - UTC model), though, as with 4002, final implementation will depend on a RINEX 2.xx definition initial start on adding qc of L5 observables for all constellations 2008 Aug 8: added reading for SBF 4002 message (Galileo ephemeris and clock) began adding code for GPS and SBAS L5, Galileo E5a (L5), Galileo E6 (L6), Galileo E5b (L7) and Galileo E5a+b (L8) began adding code modifications for handling Galileo navigation messages (even though there is no currently defined RINEX 2.xx for these) eliminated preprocessor blocks for WatCom compiler (it was a pain in the neck from the start anyway) 2008 Aug 7: some generalization for reading SBF 4027 (maintaining consistency with the older 5944) so that any signal can occur in the type-1 or type-2 sub-blocks; new SeptentrioBF_signal_map() were all of this is sorted out; tested on AsteRx2 SBF file with GPS + GLONASS + SBAS and another file with GPS + Galileo (GIOVE-B) + SBAS 2008 Aug 6: first teqc translation of Galileo (GIOVE-B) data into RINEX 2.11 from Septentrio Binary Format collected with an AsteRx2 receiver (tracking E5a and L1BC carriers) entry of a number of SBF record IDs into next_SeptentrioBF_record() — mostly for the raw navigation messages of GPS, GLONASS, SBAS, and Galileo — so that notice messages won't be reported when these records IDs are encountered changed condition under which alternate qc summary line SWN would be output: now, any windowing condition (start, delta, and/or end time specified) 2008 Aug 5: merging of compute_observation_and_slips() and compute_multipath_rms() into new compute_gross_stats() simplification of a several of the statistics counters, and removal of some unneeded ones 2008 Aug 4: two alternate sum line bugs fixed: (1) reporting the total hours data of collected data for both qc full and qc lite on the original SUM line, and (2) including the stats on the first epoch of a beginning or ending windowed period of time with no data 2008 Aug 1: the alternate qc summary line — proposed by users in Mar 2007 — is close to being 100% operational and kicks in automatically when (1) a time window is specified during the qc, (2) an antenna position is found successfully, and (3) there is an absence of epochs with data at the beginning and/or the end of the specified time window; the new alternate qc summary line is labeled "SWN" due to its dependence on windowing; this was accomplished by generalizing qc_missing_epochs() (originally intended just for data gaps with the start and end of the main data) and by adding some counters in the right places the only change needed for logical consistency on the original "SUM" line is the meaning of the "hrs" value: this now means the number of hours of actual data for all cases of qc full runs 2008 July 30: implemented standardized approach to computing the GLONASS navigation parameter tk (message frame time) for Ashtech, Septentrio, and Topcon/Javad formats for RINEX GLONASS navigation messages implemented standardized approach to compute the SBAS navigation parameter ToW (transmission time of message, for RINEX 2.11 in GPS seconds of the week); new adjust_SBAS_ToW_ToC() function 2008 July 29: first attempt to crack the alternate SUM line for qc full: if windowed, teqc would attempt to compute the number of missing observations (not quite successful yet …) updated IGS receiver/antenna designations up through 28 July 2008 entry 2008 July 28: experimental removal of resetting the last epoch to the current epoch in qc_first_obs_epoch() — doing the reset seems to be the cause of several cases of the first observation epoch not being included in the qc analysis (the question is: what does this removal break?) 2008 July 25: the timecode algorithm in qc_constellation() was split off to its own function, qc_timecode(), for reuse in qc_short_report() last two uses of rewind() were replaced with equivalent fseek(fp, OL, SEEK_SET) 2008 July 24: nav_filtering() was modified so that if a start time has not been specified (i.e. -st) then a navigation message is accepted if its time-of-clock (ToC) is within 1 hour earlier of the start of observation data (== default start time) once an initial observation epoch has been read 2008 July 23: reading of Septentrio Binary Format (SBF) was updated to include some of the new GNSS record blocks; the code was tested for GLONASS observation and navigation data extraction (might be some bugs with the GLONASS nav messages); still to be tested: Galileo observation data; still to be developed: extraction of Galileo navigation, ionosphere model, time model data 2008 July 22: AOA_snr() was modified so that the SNR of AOA TurboBinary or ConanBinary would output a minimum bounded by zero, thus eliminating the spurious "-3" values of very low SNR cleanup of old #define statements, including eliminating unnecessary #define OLD_ATAN2 and #define OLD_REALLOC, where the former now seems be be only necessary for Borland builds (i.e. atan2(0, 0) yields a NaN error) and the latter (realloc() of a null pointer yields an error) is not necessary for any current build; tests for the modern atan2() and realloc() functionality are now built into the_details() (++details option) special OS and compiler #define details should now be confined to only os.h changed order of include files in include.h: reading of os.h now precedes types.h for reading Septentrio Binary Format (SBF), the minimum allowed record ID (SBF "block number") was changed to be 4000 in next_SeptentrioBF_record() (to allow for new GNSS SBF record blocks) 2008 July 21: better fix to BINEX 0x7f-03 decoding function extract_xNb() which does not use the modulo operator for Window builds: in order to correctly output binary data (e.g. BINEX), a change to the fopen() call was made for setting +out if +binex or +native in g_arg() occur earlier in the command options 2008 July 19: fix to BINEX 0x7f-03 encoding function append_xNb for Mac OSX — again due to gcc on OSX not having wraparound on the C bit shift operators >> and <<; 2008 July 18: calls to new_tbin_file() put into hdr_binex_out(), nav_binex_out(), obs_binex_out(), and anc_binex_out() for creating time-binned BINEX with the new -tbin option set_met_obs_out() was modified so that the default set of RINEX met observables is now equivalent to using -M.obs pr+td+hr+ws+wd+ri+hi, i.e. the met observables of the Vaisala WXT510 met pack 2008 July 17: better fix to extract_xNb() than the one on 16 July 2008 — the same code can now be used everywhere; from a few tests, it looks like the encoding function append_xNb() is ok 2008 July 16: change to extract_xNb() for reading BINEX uNb quantities in 0x7f-03 records on OSX builds because the default gcc on Macs do not have wraparound on the C bit shift operators >> and << 2008 July 15: first cut at implementing the -tbin and -ast options for creating time-binned RINEX from various target file inputs 2008 July 10: to make it easier to find current code debugging and code under development a cleanup of long-standing #if 1 preprocessor blocks of code was done by either making them a regular part of the code or by replacing with #if PREFERRED where PREFERRED is defined as 1; current code debugging and code under development left as #if 1 2008 July 9: nav_data() and rinex_read_failure() were changed to distinguish the RINEX nav SV/ToC/SVclock data line from the rest of the navigation message if there is a read or format error with the +relax option, nav_data() now skips an incomplete or bogus RINEX nav SV/ToC/SVclock data line when it is at the end of the file 2008 July 7: help option (output by usage()) now displays options -ns (== set "next start" time) and -ne (== set "next end" time) which were put into the code 16 July 1999 but never officially included in the documentation GPS_week_decomp() modified to also accept '-' (dash) and '_' (underscore) as acceptable delimiter characters in a date string for defining a GPS week (e.g. -week option) in addition to the original '/' (slash) and ':' (colon) 2008 July 2: modification to rinex_read_failure() so that if in relaxed read mode using +relax (i.e. teqc is trying to get past certain illegally formatted parts of a RINEX file being read) and the RINEX terminates prematurely, then teqc will not terminate immediately but will finish to the best of its ability; the usual consequence now when using +relax is that if a prematurely terminated obs epoch or nav message is at the end of the RINEX file, this incomplete obs epoch or nav message will be not be processed (e.g. output, part of metadata, qc-ed, etc.) but the RINEX file prior to this will be and teqc will terminate normally correction of a typo in Topcon_GE_ephemeris() which was causing the antispoofing flag of an SV to be incorrectly determined (i.e. have been using the wrong uint1 variable since about May 2007) 2008 July 1: minor change in conditions at start of qc_nav_files() and in main() for calling it so that -nav can be used with an existing GLONASS RINEX nav file to create the slot number vs. frequency mapping for translating raw GLONASS observation data to RINEX obs file when or if needed (can be used if the raw data is missing GLONASS ephemerides or if some are missing prior to when they might be needed for conversion of GLONASS code range in time to a pseudorange in distance by dividing by the SV frequency new epoch_increment() function 2008 June 30: for reading of Leica LB2 message 0x0d and MDB record 120 with GLONASS, and Topcon TPS/Javad JPS messages [DC], [D1], and [D2] with GLONASS and "bug 8192", there is now a check to make sure that the specified GLONASS frequency is defined and non-zero (e.g. extracted from a navigation message) before converting the code range in time to a pseudorange in distance by dividing by the frequency for reading of Leica LB2 message 0xd1 (GLONASS almanac, ephemeris, or clock data) in decompose_Leica_LB2_d1() tests are now made using the "source" flag in the message to make sure that the data are valid 2008 June 26: save_filename() (see also 18 May 2007) is modified to also reserve '+' as a special filename placeholder (coming attractions … hopefully) 2008 June 25: a new option +force_dBHz forces an interpretation of snr flags in data formats to be interpreted as dBHz; normally this option does not need to be used, but might be useful if using a format that previously used proprietary non-dBHz snr values with older receivers but now has dBHz snr values with newer receivers (e.g. newer Ashtech and Trimble receivers are likely examples); use of this option should only effect the mapping comments in the RINEX obs header and the RINEX obs snr 0-9 flag values 2008 June 24: decompose_Leica_MDB_82(), currently for reading of Leica MDB record 130, was modified to work smoothly with Leica's upcoming GPS1200 6.0 firmware release, i.e. files collected at the same site with no longer show a new site occupation in the RINEX obs file at the file boundaries of the translated MDB files new options +rssc (== "report site survey changes") and -rssc (== "don't ...) were added, with +rssc being the default; if multiple Leica MBD files are translated to RINEX with -rssc, then the survey start/end flags in MDB record 130 are completely ignored (note: but there is no reason to use -rssc with data collected with Leica's upcoming GPS1200 6.0 firmware release; -rssc is mainly for use with data collected with pre-6.0 firmware) 2008 June 19: Leica_GLONASS_nav(), currently for reading of Leica LB2 0xd1 and Leica MDB record 141, was modified to 1) round the nav message time to the nearest 0.1 second for correct outputting in the RINEX format (even though GLONASS messages should always be on an integer second), 2) if rounding of the time message occurred, then a warning is printed with the Leica time of the message and the rounded time representation (unless -warn or +quiet is being used), and 3) the method of computing the minutes of the navigation message time was changed to be correct even with non-integer seconds 2008 June 5: rinex_out_event() was modified so that event info when using +events would be output in a sane manner to stdout (or file redirection using +out) when no RINEX output is being used, e.g. with +meta or +mds 2008 June 4: drastic code addition to adjust_week() to try to eliminate old ephemerides in the data file or data stream that occur after a current ephemeris but just before the actual data (e.g. these are now showing up in Trimble NetRS .dat files from at least firmware 1.1-3 and 1.2-00; the object of this change is to have the metadata options like +meta and +mds terminate with the correct GPS week value instead of the old ephemeris GPS week value bug fix for calling obs_out_epoch(): conditions on when to call this function in rinex_out_comment() where changed so that it's only called when there are no other header elements; this seems to eliminate the extra time stamp/"lines to follow" RINEX line that was occurring in certain situations bug fix in event_epoch_no_gps_week() so that the GPS week is only updated if an data observation has occurred; this prevents an accidental auto-increment of the GPS week from occurring when the GPS week is specified with the -week option and one or more events occur in the previous week but the first data observation occurs in the specified week 2008 May 28: for reading of Ashtech stream format, dectection of ACK messages was added to next_Ashtech_stream_record() and MBN_DBN_record_id() 2008 May 12: constellation_total() now takes into account a user override for the SV maximum set with -max_rx_SVs for the maximum SVs allowed in an epoch set the maximum number of SVs for an epoch for a Septentrio receiver to be 18 (up from the original value of 16) 2008 May 9: bug fix in obs_out_preheader() so that obs_out_epoch() is only called if there are post-header metadata lines and no pending RINEX comments; if there are pending comments, the buffer will be flushed later by flush_bs_buffer() 2008 Apr 18: bug fix in all_header_records() so that editing options (e.g. via command line options) can (yet again) be applied to missing non-optional RINEX header elements, and now +relax option is no longer needed in this situation 2008 Apr 16: updated IGS receiver/antenna designations up through 9 Apr 2008 entry 2008 Apr 2: updated IGS receiver/antenna designations up through 2 Apr 2008 entry 2008 Mar 19: added case in Ashtech_rx_specifics() for Ashtech DG14 and DG16 receivers plus some other cleanup and mods 2008 Mar 18: updated IGS receiver/antenna designations up through 18 Mar 2008 entry added more complete set of *_rx_specifics() functions, and these are now called from obs_receiver_id() when doing a qc of RINEX OBS to try to automatically set the maximum number of SVs expected to be tracked when this number is different from 12 2008 Mar 14: antenna position now also extracted from u-blox UBX message NAV-POSECEF (0x0101) with new decompose_ublox_UBX_nav_posecef()updated extract_Trimble_rx_type() to id the GNSS R7 GNSS receiver — but there are not yet official IGS receiver name which is different than the original non-GNSS R7 receiver 2008 Mar 4: updated IGS receiver/antenna designations up through 28 Feb 2008 entry 2008 Feb 26: compilation on all supported platforms for release of the 15 Feb 2008 version 2008 Feb 15: updated extract_Trimble_ant_type() to id the internal GNSS R8 (Model 2)/SPS880 antenna and extract_Trimble_rx_type() to id the GNSS R8 (model 2) receiver — but there are not yet official IGS names for antenna or receiver which is different than the original non-GNSS R8 receiver and antenna 2008 Jan 25: explicit file positions (for non-stdin input) are now given in next_Topcon_record() for reading of Topcon TPS/Javad JPS format when either a non-standard record is suspected of being detected, data corruption, or a possible mis-parsing of the file by teqc; additionally, only one warning of possible data corruption or mis-parsing is now output 2008 Jan 24: a change made on 31 Dec 2007 in Topcon_cks08() to clean up # defined(BC) was changed back to the original Borland code for all compilers 2008 Jan 23: corrected code in met_epoch_no_gps_week(): a comma instead of a semicolon at the end of a +notice print statement caused the GPS week auto-decrement when met data at the end of the GPS week was detected to only occur when notices were being output the value of the GLONASS frequency channel number in bad_GLONASS_freq_no() and compute_GLONASS_n_constants() had to be explicitly cast to a an "esint1" (== "signed char") before casting as an "sint4" or "sint2" in cases where the starting value is an "uint1" (== "unsigned char"); the absence of the first cast to an "esint1" was causing negative frequency channel numbers in Leica MDB and Topcon TPS/Javad JPS data to be skipped 2008 Jan 22: parser for Ashtech R-file in next_Ashtech_R_record() now set to rewind only one byte upon bad read of Ashtech R-file record 9 instead of two bytes (but why was it two bytes before?) 2007 Dec 31: Topcon TPS/Javad JPS L2C messages [P3], [3P], [D3], [F3], and [E3] now always processed after corresponding L2(P2) messages [P2], [2P], [D2], [F2], and [E2] for a given epoch another set of cleanup to eliminate special Borland preprocessor # defined(BC) blocks (see 26 Nov 2007 entry) 2007 Dec 28: reading of Topcon TPS/Javad JPS [>>] messages was extended to include a port e (if it occurs in the future; see 21 Dec 2007 entry) small addition to qc_position_out(): if the longitude is greater than 180 degrees, it will also be printed out as that value minus 360 degrees 2007 Dec 27: use of +L2C_L2 included for Topcon TPS/Javad JPS messages [P3], [3P], [D3], [F3], [E3] vs. [P2], [2P], [D2], [F2], [E2] (i.e. which L2 to use for phase, doppler, SNR), but this will only work if the TPS/JPS L2C messages occur after the corresponding normal L2 messages (e.g. [P2] followed later by [P3], and so on) for the same epoch 2007 Dec 21: reading of Topcon TPS/Javad JPS [>>] messages was generalized to accept and parse external strings from serial ports a-d, mostly in decompose_Topcon__g(), though the since now an array, the storage was combined the storage of the nav messages in Topcon_store_nav_message() and decompose_Topcon_RD() external_data_string() was modified to ignore strings with "YXXDR", i.e. NMEA strings from tilt sensors (since currently there is nowhere for teqc to further process these), though the full strings can still be recovered using the +event and/or +eds options (former embeds events in RINEX obs file, latter outputs to stderr or redirected stderr) a loop was added to the beginning of event_logger() to trim out any non-printable characters (allowing only 0x20 — 0x7e) from event or external strings unsetting of the observation line mask was found to be needed outside of the loop for printing the observables in obs_out_data() — in case one is using +diag -O.obs - (see 4 Dec 2007 entry) 2007 Dec 20: in Ashtech_BEN_block(), missing "else" after testing for valid L1 phase for the -C1 case was put in (otherwise, reading of C1 and D1 occurs 8 bytes further into the record than where the fields are really located) auto-setting of L1-only observables (L1 C1 D1 S1) for Ashtech AC12 receiver in Ashtech_rx_specifics() reading of new Topcon TPS/Javad JPS messages for GPS L2C is tested (see 5 Dec 2007 entry) 2007 Dec 19: detection for Ashtech stream record MCA added to MBN_DBN_record_id() (MCA detection might have been accidentally dropped with an earlier code rewrite) Ashtech AC12 receiver added to Ashtech_rx_specifics() and Ashtech_snr(); if the receiver is identified as an AC12, the SNR is now understood to be in dBHz 2007 Dec 10: typos for the IGS receiver entries for Leica GMX901 and GMX902 have been fixed 2007 Dec 5: initial boilerplate code in place for reading new Topcon TPS/Javad JPS messages [R3], [3R], [P3], [3P], [D3], [F3], and [E3] for L2C data; [3R] has been tested 2007 Dec 4: rework of the setting/unsetting of the observation line mask in out.c (numerous functions); the define and use of TERM_OUT was eliminated in the process for reading of RINEX header elements MARKER NAME, MARKER NUMBER, LEAP SECONDS, APPROX POSITION XYZ, ANTENNA: DELTA H/E/N, and INTERVAL a conditional constraint on when to use the command override was removed in the corresponding functions rinex_marker_name(), rinex_marker_number(), rinex_leap_seconds(), obs_approx_position(), obs_ant_height(), and obs_interval(); the remaining constraint was recoded as a switch consistent with other similar functions 2007 Nov 30: setting of the observation line mask in rinex_mid_header_start() so that the correct switch case is hit in flush_bs_buffer() using this new scheme (otherwise, the current epoch is output between the "4" and the number of following header lines) 2007 Nov 29: added a bunch of missing cases for recently added native formats to qc_file_list() (only used if trying to directly qc a native format) 2007 Nov 26: slight modifications of a few places in the code that were giving warnings of "Possibly incorrect assignment in function ..." from the Borland compiler (i.e. there were no code problems, but the Borland compiler is very picky) 2007 Nov 20: Borland compilation environment reestablished? (seems to be working ...) 2007 Nov 19: modified parser for Trimble RT17 format (next_Trimble_RT17_record()) to better account for incomplete page counts for 0x57 epochs 2007 Nov 14: modified parser for Trimble RT17 format (next_Trimble_RT17_record()) to account for 0x57 record pages that are not consecutive records; previous parser could result in a segmentation fault (on just about everything except Sparc executables) if there were sufficient non-0x57 records in between consecutive 0x57 record pages 2007 Nov 12: modified parser for Trimble RT17 format (next_Trimble_RT17_record()) to ignore (i.e. not report the presence of) records 0x07 and 0x40 2007 Nov 7: a missing break in the switch in rinex_hl() since 13 Aug 2007 (see 13 Aug 2007 entry) caused the site operator agency field to not be populated in the RINEX header line OBSERVER / AGENCY changed terminate() call in dump_format_code() to not report the exiting message 2007 Oct 22: call to update_bs_buffer() (see 18 June 2007) has to be qualified by whether the RINEX OBS header has been written out yet or not (e.g. see use in decompose_Trimble_16()); same for append_bs_buffer() (e.g. see use in rinex_out_pgm_agency_date() and related functions); same for rinex_out_comment(), plus addition of call to flush_bs_buffer() if the header has not been written out yet; extra conditional in flush_bs_buffer() so that post-header comments are only written when the header has been both started and ended 2007 Oct 18: for reading of RINEX OBS, rinex_constellation() was modified to better detect a misplaced clock offset field and report it if +relax is not in effect, or try to read it if +relax is in effect; similarly, illegal characters following the SV list after the epoch line (i.e. more than 12 SVs) are reported unless +relax is in effect for reading of RINEX OBS, obs_receiver_clock_offset() was slightly modified so that if the RCV CLOCK OFFS APPL line is encountered in the header and neither -rx_clk_off or +rx_clk_off has been explicitly used, then +rx_clk_off is implicitly set; this allows teqc to read in RINEX OBS and output it automatically preserving the receiver clock offset without the need to explicitly use +rx_clk_off 2007 Oct 17: for reading of Trimble .dat, decompose_Trimble_16() was slightly modified to append a description (antenna height, latitude, longitude, elevation) after the extracted strings in record 16, subrecords 3 and 29 — when encountered, these continue to show up in the RINEX OBS header as comments as they had before 2007 Oct 16: a little code defuzzing for a cleaner Borland compile 2007 Oct 15: yet another small floating point tweak to clock_jump_search() (the function from hell) 2007 Oct 12: small correction to obs_data() for cases of more than 12 SVs listed for the 5 Oct 2007 code change 2007 Oct 11: mod to Leica_GPS_ephemeris() to try to correct the GPS week for the ToW epoch; the idea is to prevent an old ephemeris from an earlier week from tripping up a +meta or +mds operation and causing an abort with an old week value in possible_wrong_GPS_week() called from GPS_NAV_times_make_sense() 2007 Oct 9: minor rewording of +C2/-C2 options for better clarification 2007 Oct 5: a long, involved modification so that using the +meta option on a RINEX OBS file missing the optional INTERVAL header line and no use of the -O.int option results in a scan of the time tags through the file to determine the minimum sample interval; a new function, need_rinex_interval(), was introduced for this purpose only (used in window_OK() for explicit end time windowing, and in implied_window_limit() for implicit end time windowing) to set a special flag which changes the procedure in rinex_end_of_header(), process_rinex_obs_end(), and obs_data() (more work may be required in the latter for various event flags); if used with any time windowing options, the end time may be effected in the +meta result 2007 Oct 4: updated IGS receiver/antenna designations up through 1 Oct 2007 entry 2007 Sept 18: correction to decompose_Topcon_RD() so that when using -week option on multi-week Topcon TPS/Javad JPS data the GPS week will be correctly incremented (previous code was correct only for when -week was not being used, or for data only in a single GPS week) improved +help for options +obs, +nav, and +met — esp. +nav which now explains that this is a list of RINEX nav filename(s) for the various systems ordered gps[,glonass[,sbas]] and that '-' (dash) or '_' (underscore) can be used to omit one or more names (see 2007 May 18) 2007 Sept 14: a change to met_out_data() prevents data for near duplicate met epochs from being output more than once (needed for some Suominet 4700 BINEX sites where the met data is duplicated in BINEX 0x00 comments and in 0x7e ancillary data records) 2007 Sept 2: small change to decompose_Topcon__g() to allow complete external data string detection with only one Topcon TPS/Javad JPS [>>] message (instead of the previous logic requiring two or more [>>] messages) 2007 Aug 31: new detection of NOAA GSOS met data strings in external_data_string() and parsing via new decompose_NOAA_GSOS() and NOAA_GSOS_met() case added to is_met_in_00_comment() to detect NOAA GSOS met string in BINEX 0x00 comment string; needs to be tested new +eds option to output all external data strings found to stderr (-eds by default, i.e. no external data strings are output to stderr) 2007 Aug 25: messages for RINEX OBS overflow elimination now consolidated in new obs_eliminated() 2007 Aug 24: epoch_order() generalized a bit and used in a few more places 2007 Aug 23: a switch in obs_out_epoch was added at the beginning such that if the mask indicates a prior completed epoch line (mask == 0xf), the mask is reset to 0 (needed for a few cases) new message function epoch_order() to collapse some code and output the filename having the epoch order problem 2007 Aug 22: nav_out_ion_alpha(), nav_out_ion_beta(), nav_out_delta_UTC(), nav_out_corr_to_system_time(), and nav_out_leap_seconds() were modified so that the optional RINEX NAV header lines ION ALPHA, ION BETA, DELTA-UTC: A0,A1,T,W, CORR TO SYSTEM TIME, and LEAP SECONDS would only be output once at most per header large ion and iod jump conditions in +qc mode are now printed out in exponential format by qc_short_report() and qc_long_report() GPS UTC model and ionospheric parameters now extracted u-blox UBX message AID-HUI (0x0b02) with new decompose_ublox_UBX_nav_GPS_health_UTC_ion(); UBX parser set to ignore UBX messages RXM-SFRB (0x0211) and RXM-SVSI (0x0220) for the time being 2007 Aug 21: fixed wrong index and misplaced parenthesis in arg_4d() — used for parsing of -N.a[lpha] and -N.b[eta] arguments with new clean_dD() function, made some improvements in reading in floating point values for various options, i.e. will now accept Fortran-style scientific notation (e.g. 8.3819D-09 or 8.3819d-09) as well as C-style scientific notation (e.g. 8.3819E-09 or 8.3819e-09) 2007 Aug 20: fix to change made to obs_session_start() (see 10 May 2007) — put in missing pair of parentheses; the bug allowed potentially wrong TIME OF FIRST OBS values in the RINEX obs header to override the actual first found epoch in a RINEX obs file when using +meta and +mds options 2007 Aug 15: mod to system_time() so that option +doy works with option +id to output the system date in year:day-of-year format 2007 Aug 13: all but one function in out.c now use the new rinex_hl() function and the generalized append_bs_buffer() function (see 28 June 2007); this leaves only one needed call for the old reset_bs_buffer() for the moment 2007 Aug 10: added new obs_out_epoch() through which to channel the output of all RINEX OBS epoch/sat or epoch/flag lines; this substantially cleaned up the logic in flush_bs_buffer() (see 28 June 2007) 2007 Aug 6: changed terminate() call in possible_wrong_GPS_week() so that the exiting message is not output if a GPS week discrepancy is found a flag conflict between setting the value for ion qc bins and value for the multipath rms window was resolved 2007 July 26: updated IGS receiver/antenna designations up through 16 July 2007 entry for Leica system 1200 MDB, the reading of records 104 (0x68) and 108 (0x6c) were updated to include the receiver and antenna types from version 2.13 (26 July 2007) of Leica's MDB control document 2007 July 24: also need call to clock_jump_search in obs_epoch_check() for data formats other than RINEX or ARGO if in -smtt (== not smooth time tag); see 2006 Nov 15 2007 July 23: a clarification in the +help of the CA_L1 option, because since 11 June 2007 the default for Topcon TPS, Javad JPS, and Septentrio Binary Format has been +CA_L1 (using L1(C/A) and associated SNR and doppler) — opposite to the default for other formats 2007 July 20: a little re-crafting of spew_NavCom_epoch() for parsing NavCom binary format observation epoch made up of 0xb0 and possibly 0x86 and/or 0xab to eliminate the possibility of overflow in the epoch buffer 2007 July 2: a bit of code improvement for reading CMC binary, now ignoring records 33 and 49, and decoding of record 20 in new decompose_CMC_Allstar_20() (user coordinates, for initial lon/lat/elevation) 2007 June 28: as part of a larger code overhaul for outputting RINEX, a call to flush_bs_buffer() was put in at the start of obs_out_data() — to output any accumulated post-header fields at the start of any data epoch — and at the start of dump_binary_config() — to output any post-header fields at the end of reading; the structure of append_bs_buffer() was generalized; a new function update_bs_buffer() was written to append certain post-header fields if there is a detected change; a new function rinex_hl() was written to handle building most header lines and all post-header lines 2007 June 22: more fiddling with is_met_in_00_comment() so that if the Trimble ASCII time tag is present and there appears to be a week rollover before the BINEX 0x00 comment gets written, then the week value is decremented to the previous week when the data probably was actually logged by the receiver update to met_sensor_mod() and met_sensor_pos() to include cases for WS (wind speed), WD (wind direction), RI (rain increment), and HI (hail indicator) for RINEX met 2.11 storage for "session" start and end epochs were added for all the different types of allowed RINEX files besides an observation file, with initialization in initialize(), population in implied_window_limit(), and use in dump_metadata() so that +mds will now give the correct "epoch" limits for a RINEX navigation file (GPS, GLONASS, and SBAS) or met file in addition to an observation file 2007 June 21: the RINEX version testing in rinex_version_type() was modified to be more rigorous and specific based on the RINEX file type modification to NMEA_XDR_met() to assume that the NMEA XDR string (if used, i.e. +xdr) from the WXT510 has a first 'V' designator corresponding to rain increment and a second 'V' designator corresponding to hail increment modifications to is_met_in_00_comment() to extract Trimble's leading seconds-into-week time stamp if present, and improved pointer to "$WIXDR," using strrstr(), and setting the met observables if "$WIXDR" to include rain and hail increment modification to event_logger() to directly pass the suspected GPS week value 2007 June 20: in binex.c, the ordering array obs_order_7e_00[] for BINEX record 0x7e was modified to include the new RINEX 2.11 observables, and related changes in binex_7e_00_met() (reading 0x7e) and binex_site_data_7e_00() (writing 0x7e) the logic for conversion of pressure in probable units of bars to millibars (see 2007 June 18) was changed from met_out_data() (which effects only RINEX output) to met_filtering() (which effects all output), and is now limited to non-RINEX input only and is only modified if the pressure value is both > 0 and < 2 extra if block added to is_met_in_00_comment() to deal with met strings from Vaisala WXT510 in BINEX 0x00 comments (tested with NetRS/WXT510 combination) 2007 June 19: have the template options -tbin and -ast in place — though not yet implemented (see http://ls.unavco.org/pipermail/teqc/2007/000549.html) for reading Leica MDB record 120 (0x78) in Leica_MDB_78_obs(), the reading of the phase observable is now only permitted when both bit24 and bit25 of the ChanStatus word are set, and likewise the reading of the code pseudorange observable is now only permitted when bit26 of the ChanStatus word is set new -xdr option ignores reading of NMEA XDR data strings, thus avoiding trying to interpret non-met XDR data strings as met XDR data strings; default is +xdr, i.e. to attempt to use NMEA XDR data strings for met data as was the case for earlier versions 2007 June 18: when encountering a BINEX 0x00 comment, either an initial one in binex_00_field_basis() or a later one in next_binex_00_field_basis(), a check for a possible met string is done by calling a new function is_met_in_00_comment(); initially is_met_in_00_comment() is just looking for a comment string that starts with "MET Data: " — this is what Trimble firmware (e.g. in 4700 and NetRS) inserts prior to an external string which it can't parse the old decompose_MET3_string() function has been renamed decompose_ext_string() because the string in question doesn't necessarily come from a MET3 met pack anymore and it's not necessarily even met data NMEA_XDR_met() was modified to have two new cases: "S,<value>,M,<unit>" and "A,<value>,D,<unit>" for extract wind speed and direction from the Vailala WXT510 NMEA string the parsing of NMEA comma-delimited quadtuples is now done with the function NMEA_quadtuple(); likewise the parsing of the Vaisala ASCII 0R0 strings is now done with the function ASCII_0R0() conversion of pressure in probable units of bars (i.e. value < 2) to millibars is now done in met_out_data() for each pressure value 2007 June 15: window_OK() was modified for the case where the input is not RINEX to set both the default window start and end date/times if the user is requesting either a metadata output (as the code has been) or a configuration output (the new addition) 2007 June 13: by Leica's recommendation, use of Leica's MMT corrections, even if present, will be skipped when reading MDB record 120; option +mmt has been removed (see 2006 Apr 27 entry) had to adjust the logic of +CA_L1 and +L2C_L2 in SeptentrioBF_5944_obs() (though for a different reason than for Leica MDB record 120); now correctly allows extraction of L2(L2C) with +L2C_L2 or L2(P2) with -L2C_L2 (latter being the current default); a qc on a short SBF file with L2C tracking on and tracking of G17 and G31 shows that the multipath rms is slightly lower using the L2(P2) phase 2007 June 12: added another case to initialize_epoch() for the end of time in the epoch struct (6075 Dec 31 23:59:59.999), and used this to clean up some end of window settings in window.c activated the options +win_mo and -win_mo (monument/marker name) and +win_mn and -win_mn (monument/marker number); the + options require a maximal string match and the - options require a minimal string match; as yet untested some more cleanup of dump_config() — adding missing options code of options +CA_L1 and +L2C_L2 deactivated in Leica_MDB_78_obs() for reading of Leica MDB record 120 (0x78), because it appears that (like Trimble .dat record 17 and RT17 0x57) that there is only one set of observables being stored for each carrier frequency 2007 June 11: finally officially added HELP_BINEX to enums.h and teqc.c, so that the long-hidden options of -binex and +binex show up with the +help option added new +L2C_L2 option — analogous to the current +CA_L1; this option captures the L2 phase, S2 snr, and D2 doppler values from the L2C code block instead of the P2 code block (the latter being the default); this has been implemented for Leica MDB record 120, SBF record 5944, and Topcon TPS/Javad JPS message [rM]; the option is so far not needed elsewhere, e.g. Trimble .dat record 17 and RT17 0x57 because these records only have one set of code pseudorange, phase, snr, and doppler per carrier frequency logic for option +CA_L1 was implemented for Leica MDB record 120, SBF record 5944, and Topcon TPS/Javad JPS message [rM] (accidentally left out in Leica MDB record 120 and TPS/JPS [rM] previously) all the "dump" functions were collapsed into new dump.c and dump.h (which cleans up args.c a bit); function binary_dump_config() was renamed dump_binary_config() some initial long-overdue cleanup of dump_config() (called when +config or ++config is used)) and associated mapping of various #define entries in flags.h and their use throughout the code; included adding missing entries 2007 June 8: in set_obs_obs_out(), format_settings(), and binex_out_settings() Doppler D1 and D2 have been removed as default output observables for all dual-frequency receivers; in set_obs_obs_out() and format_settings() the SNR S1 and S2 observables are now default output observables using the option +C2 now includes C2 as a default output observable for Trimble .dat and RT17, Septentrio SBF, Leica MDB, and Topcon TPS/Javad JPS formats in format_settings() 2007 June 7: some cleanup of option descriptions in usage() in array g_opt[], the receiver manufacturer names were shortened so that a maximum of only three letters in needed for the receiver part of any receiver/format specification; can be checked by executing `teqc +help | grep "input is from"` the reading of Septentrio Binary Format (SBF) was modified so that if a combination of measurement records (5889, 5890, 5944) exist for any one epoch and the -sbfobs option is not being used, then Septentrio's suggested hierarchy is used: 5944 over 5889 over 5890 explicit recasting of the sint1 (char) variables in SeptentrioBF_5944_obs() to esint1 (signed char) so that there would be clean compiling on systems where "char" is defined as "unsigned char" +cct option is set to be the default over -cct (see 2007 June 6) 2007 June 6: addition of two more sets of counting bins to the qc_sv_count_obs struct in qc.h, which are populated by the original code in code_data(), and the original bins populated by the total counts by new code in code_data() new option +cct added to output the "coarse code totals" in the qc long report statistics, as opposed to -cct which yields the original subtotals when no corresponding code pseudorange observable for that SV at the same epoch was available when reading Trimble RT17, the code changes from 2007 Jan 10 had the fseek() following a bad 0x57 page read one byte too large in next_Trimble_RT17_record(); it is now the correct value when reading Trimble RT17, added a switch case in next_Trimble_RT17_record() to ignore an apparently valid record 0x41 — no idea what the hell it is, but it's showing up in NetRS RT17 data all remaining exit() calls are now sent to terminate() except obviously the final one in terminate() itself 2007 June 5: mod to decompose_binex_00() so that the deallocation of BINEX 0x00 comments is not done if outputting a BINEX configuration file with +bcf (see note for 2006 Oct 31) 2007 June 4: mod to met_epoch() and possible_wrong_GPS_week() to add a condition to suppress printing of the possible wrong GPS week message when doing a qc and the input format is RINEX symbol_codes() (assessed with +sym) was slightly changed to show that the 'o' qc indicator in the ASCII time plot show epochs with C/A or P1 code pseudorange set_obs_obs_out() was slightly modified to directly set the variable default_types from the accumulated number of default observables, rather than a preset upper limit as it had been before; the logic of set_met_obs_out() was slightly modified so that it matched that of set_obs_obs_out() 2007 June 1: added an update to the receiver and format code so that teqc would recognize a file of Navman SiRF binary format (though no other reading or translation capabilities at this time) some tweaking of id() to correct a few missing or wrongly located calls to fp_adjust() 2007 May 31: added an update to the receiver and format code so that teqc would recognize a file of NovAtel binary format (though no other reading or translation capabilities at this time) the calls to terminate() were cleaned up a bit obs_epoch_with_gps_week(), met_epoch_with_gps_week(), and event_epoch_with_gps_week() were modified so that if the format is not in the list of formats that probably have GPS week information, then the corresponding call to obs_epoch_no_gps_week(), met_epoch_no_gps_week(), or event_epoch_no_gps_week(), respectively, is made the returns for suspected PBO NMEA tilt and pore pressure strings in external_data_string() were changed to TRUE (i.e. these are suspected to be something valid and known) so that the strings are not put into the RINEX obs file 2007 May 30: event detection of u-blox UBX messages TIM-TP (0x0d01), TIM-TM (0x0d02), and TIM-TM2 (0x0d02) added via new decompose_ublox_UBX_tim_tp(), decompose_ublox_UBX_tim_tm(), decompose_ublox_UBX_tim_tm2(), and UBX_event() — but completely untested due to lack of sample messages the code in initialize_basic() accessing the two standard C library functions getpwnam() and getpwuid() — used on UNIX builds to populate the RUN BY field in RINEX headers when the -[ONM].run_by option is not used — is now skipped with a preprocessor definition when compiling a statically-linked build on Linux, due to failures of statically-linked builds made on 2.4 Linux kernel distro but executed on a 2.6 Linux kernel distro when reaching these C functions preprocessor statements #ifdef X and #ifndef X were replaced with the more flexible #if defined(X) and #if !defined(X) constructs 2007 May 29: Ashtech R-file type 6 records and U-file DRC records are now handled by the new event_logger(), which first tries to extract data as a NMEA XDR string with data extraction into a RINEX met file, but if unsuccessful, the string is logged as an event in the RINEX observation file with the ASCII string all other cases of direct calls to external_data_string() for Ashtech, Topcon/Javad, and Trimble formats have been replaced with calls to event_logger() new decompose_Leica_LB2_05_06() to read Leica system 500 and 1200 LB2 record id 0x05 and 0x06 (external events 1 and 2) to read the event info and output to RINEX obs using rinex_out_event() 2007 May 25: added checksum verification to reading of Ashtech MACM records in next_Ashtech_stream_record() XDR_scan() and external_data_string() were made bool1 instead of void as a first step to use non-met NMEA strings as a trigger to record events in certain cases 2007 May 24: filled in the frame field for a number of file_position() calls for various formats — used during +diag slight mod to record_type2() used for certain formats with +diag such that the 2-byte word is only printed as characters if both bytes are printable ASCII 2007 May 23: first cut of decoding Septentrio Binary Format (SBF), though there are still some untested pieces of functionality; if data observables are only showing up in records of one type (5889, 5890, or 5944) then no special option is needed; if data observables are in records of two or more types then the option -sbfobs is used, e.g. -sbfobs 5944 restricts the code to only reading the 5944 records; in case the format auto-identify does not work on an SBF file, the option -septentrio sbf is the forced override 2007 May 22: for Topcon TPS/Javad JPS, added decompose_Topcon_GA() which updates the GPS PRN SV antispoofing array for the associated PRN if a [GA] message is encountered updates to the RINEX loss-of-lock flag in most places for the Topcon TPS/Javad JPS code and all cases for NavCom binary format was changed to use the new lli_mask() function the GPS antispoofing array for NavCom binary format was changed to follow the same method as used for reading Topcon TPS/Javad JPS and Septentrio Binary Format (SBF) 2007 May 21: do_mask_decomp() was modified to allow for using '-' in a range, e.g. -G2,30-32 to exclude GPS SV PRNs 2, 30, 31, and 32 2007 May 18: save_filename() was modified to allow for using '-' or '_' as a blank spaceholder to skip that particular filename, e.g. can be used with +nav to skip creation of NAVSTAR GPS navigation file and/or GLONASS navigation file and creating the SBAS navigation file with, say, +nav -,-,tmp.sbs out_settings() was modified to allow for a non-existent NAVSTAR GPS navigation filename (similar to the way the code already allowed for non-existent GLONASS or SBAS navigation filenames) some further defuzzing for Galileo (to make the code consistent wtih GPS, GLONASS, SBAS) added a switch to do_mask_decomp() to initially zero out the opt_X if a '+' flag is used; this allows the filtering options like, say, +G12,13,14 to work as expected modifications to SV_edit_comment() and ch_edit_comment() to reduce the number of RINEX header comments when there are a number of SV or channel edits 2007 May 14: for reading of Topcon TPS/Javad JPS, added code for including the RINEX NAV curve fit interval, data flag for L2 P-code, and code on L2 channel values to decoding of message [GE] in Topcon_GE_ephemeris() (which had accidentally been left out 4 years ago ...) 2007 May 10: change to obs_session_start() that disables setting the session start time until it falls within the default or specified time window, so that if time windowing during qc the "First epoch in window" is not reported as the first epoch outside of the window 2007 May 8: updated IGS receiver/antenna designations up through 7 May 2007 entry reading of Leica MDB event description record 16 (system 500) and record 116 (system 1200) generalized in decompose_Leica_MDB_10_74(); information in these records is output to stderr (or file redirection if +err is used) unless -notice is set reading of Leica MDB initialization record 12 (system 500) and record 112 (system 1200) generalized in decompose_Leica_MDB_0c_70(); information in these records is output to stderr (or file redirection if +err is used) unless -notice is set reading of Leica MDB not used/canceled point record 27 (system 500) and record 127 (system 1200) generalized in decompose_Leica_MDB_1b_7f(); information in these records is output to stderr (or file redirection if +err is used) unless -notice is set 2007 May 4: modification to rinex_comment() to skip adding comments if in verify (e.g. +v) mode; eliminates potential for a segmentation fault if reading a RINEX OBS file with +v with more than 999 comment lines in total 2007 May 3: event detection of Navcom message 0xb4 (event latch data) added via new decompose_NavCom_b4() 2007 Apr 20: Leica system 500 MDB record 17 and system 1200 MDB record 113 (event/point input) code in decompose_Leica_MDB_11() and decompose_Leica_MDB_71() was updated to read the event info and output to RINEX obs using rinex_out_event() optional event epoch code was removed from obs_out_preheader(), i.e. event translation output is now controlled entirely by rinex_out_event() option +event was added in order to initiate translation output of any event info to RINEX OBS (the default for the time being is equivalent to -event, which suppresses translation output of event info to RINEX OBS) 2007 Apr 19: obs_data() modified to allow normal (i.e. not using +relax) reading of RINEX OBS file with event flag 5 (external event) to occur out of time order with other event flags such as normal data epochs (event flags 0, 1, or 6), header line metadata (event flag 4), or occupation status (event flags 2 or 3) 2007 Apr 18: rinex_out_event() modified to handle (if needed) multiple RINEX comment lines per event (with a maximum of 999 due to RINEX limit), time windowing, and output of RINEX OBS header if an event epoch occurs before the first observation epoch 2007 Apr 16: event code for 13 April would not work correctly if more than one event occurred between successive epochs, so a new rinex_out_event() function was created; Topcon TPS/Javad JPS [XA] and [XB] events should also now be reported via updated decompose_Topcon_XAB(); functions event_epoch_with_gps_week(), event_epoch_no_gps_week(), and event_epoch() had receiver clock offset dependency removed 2007 Apr 15: modified teqc to fill out Form 1040 as a RINEX obs file (see entry for 1 Apr 2007) 2007 Apr 13: added an update to the receiver and format code so that teqc would recognize a file of Septentrio Binary Format (SBF) (though no other reading or translation capabilities at this time) an event epoch was added to the obs struct, which is set with an event time via a new event_epoch_with_gps_week(), event_epoch_no_gps_week(), and event_epoch() (analogous to the obs... equivalents), and is used to record the event epoch in obs_out_preheader() in place of the observation epoch if the event epoch is set; currently, an event time is set in decompose_Trimble_19() for Trimble .dat record 19, subrecords 0 (external event), 2 (manual event), and 4 (RT17 event) 2007 Apr 6: the big Ashtech L-XII/LM-XII overhaul: extraction of Ashtech firmware from B- or S-file now includes the "channel" version (and "options" is in the S-file) in addition to the original "navigation" version; Ashtech_rx_specifics() along with set_obs_obs_out() overhauled to deal with default observables based on L-XII/LM-XII firmware; calls to Ashtech_rx_specifics() now must be done in next_Ashtech_stream_record() for any Ashtech stream format based on record type 2007 Apr 2: renamed decompose_Ashtech_dld_B_header() to read_Ashtech_B_header() and changed it to return void rearranged calls to Ashtech_rx_specifics() so that these are in the optimal spots in Ashtech() for each format and a special location for U-files in next_Ashtech_U_record() 2007 Apr 1: see entry for 15 Apr 2007 2007 Mar 30: added reset of seconds of week to 0 if the stored value equals 604800, as well as increment of GPS week, unless -week is being used, in decompose_Ashtech_dld_B23_record() for reading of an Ashtech (version 3) B-file; this was tested on over a dozen B-files starting at 00:00:00 on a Sunday for 4 different firmware 2007 Mar 28: added entries for reading of Trimble .dat file for receiver 45 (NetR5) and antenna "GS" in extract_Trimble_rx_type() and extract_Trimble_ant_type() moved entry for Ashtech LM-XII receiver to non-GLONASS, dual-frequency category in Ashtech_rx_specifics(); added Ashtech 3DF-XXIV to L1-only category in Ashtech_rx_specifics() 2007 Mar 26: no_of_Topcon_channels is now no_of_quasiTopcon_channels, set arbitrarily at 12, and is used only for early receivers manufactured by Ashtech, AOA, or Trimble and licensed for sale by Topcon; no_of_Topcon_20_channels and no_of_Javad_20_channels (40 frequency band channels) is now set at 22 to account for 4 single-frequency SBAS SVs and 18 dual-frequency GPS/GLONASS SVs — a reasonable maximum — and allows for 20 dual-frequency SVs 2007 Mar 23: increased the maximum excepted number of SVs from a Topcon or Javad receiver from 12 to 18 (no_of_Topcon_channels) 2007 Mar 22: activated reading of L5 observables in Leica MDB 0x78 (record 120) in Leica_MDB_78_obs() — if/when L5 comes on-line a slight change of the location of default observables for Ashtech MACM records, now in decompose_Ashtech_MACM() 2007 Mar 21: a small repositioning of the last date_stamp() call in qc_landscape_out() and a new switch in qc_short_report() to report the date as year:day-of-year in the qc SUM line when the +doy option is used 2007 Mar 19: first cut of reading Ashtech MACM record with certain caveats, e.g. it is assumed that each record starts with the 4-byte sync word "MACM" and ends with a 1-byte checksum, and the checksum is not currently being checked 2007 Mar 16: modification to the NavCom Technologies Inc. binary format parser, so that SNR values from record 0x86 at 0.25 dBHz resolution will be given for L1 and L2 for an SV (assuming the record exists, etc.) instead of the 1 dBHz resolution SNR for L1 only from record 0xb0 2007 Mar 15: change to phs_ms_adj() to account for an early style of correction to phase values when millisecond jumps occur for old Ashtech firmware (anything starting with '1'-'9', except '1F50' — the only known exception so far); the flag is set in Ashtech_rx_specifics() if the firmware is known; this does not work for Ashtech R-files with the old firmware if the receiver clock offset is not available, e.g. record "tinyranger3" (record type 23), in which case a qc of the data will show clock slips 2007 Mar 12: slight change to main() so that it includes a call to dump_format_code() when the using +mdf and specifying the receiver/format removal of the obsolete option +mdfi 2007 Mar 9: (long overdue) old "Javad" naming scheming for C functions, defines, etc. were changed to the "Topcon" equivalent — just an internal bookkeeping change to the C code 2007 Mar 7: everything associated with the old -tr_s_jump option (as a attempt to correct highly corrupted Trimble RT17 collected for site lkwy by USGS VSAT in '96-'98) has been removed from the code 2007 Mar 6: updated IGS receiver/antenna designations up through 6 Mar 2007 entry 2007 Mar 5: the static buffer size for reading Leica binary formats was increased to 2400 bytes — to allow for 36 dual-frequency SVs being tracked with Doppler with the MMT info block in MDB record 120 (0x78) by 1200GG system receivers (assuming only two data blocks per SV); I really have no idea what the maximum should be for this ... the Leica k-to-n array is now dynamically allocated by the size set in format_settings(), currently set to allow for a maximum of 72 data blocks 2007 Mar 1: the static buffer size for reading Leica binary formats was increased to 1024 bytes to account for larger MDB record 120 (0x78) which are showing up now from 1200GG receivers output of RINEX MET also officially upgraded to 2.11, to allow for new observables from Vaisala WXT510 2007 Feb 27: mod to obs_start() and obs_time_system() to detect and write out "GAL" for the time system in the TIME OF FIRST OBS header line (addition needed for RINEX 2.11) first test compilations on Solaris x86_64 5.10, using both Sun compilers and gcc, for both 32- and 64-bit 2007 Feb 26: first version of teqc that attempts to ramp up to reading arbitrary RINEX OBS 2.11: NNSS Transit has been eliminated; Galileo has been added; observables L5, L6, L7, L8, C2, C5, C6, C7, C8, D5, D6, D7, D8, S5, S6, S7, S8 are allowed in an OBS file; option +C2 will temporarily change function in that it will include C2 in a default OBS observables list (without having to specify the entire new OBS list with -O.obs), but +C2 is not now needed to read a RINEX 2.11 OBS file containing C2 in the observables header list 2007 Feb 22: detection of Topcon TPS/Javad JPS [rE] message moved to the "do nothing" part of the main switch in next_Javad_record() 2007 Feb 8: reinstatement of met_out() and nav_out() calls with pointer to FILE_INFO due to generalized construct in all_header_records() and rinex_end_of_header() which require these prototypes in match that of obs_out() which still requires a pointer to FILE_INFO 2007 Feb 7: the pressure reading, "Pa", in Vaisala_0R0_met() for reading met strings from Vaisala's WXT510 is now checked to see if the numerical value in less than 2, and if so the value is assumed to be in bars and it is multiplied by 1000 to convert to millibars; otherwise millibars are assumed (millibars are required by RINEX) 2007 Feb 5: all calls to epoch_in_window() involving a met epoch or a navigation message with ToC or ToW were changed so that the file pointer was null, so that encountering a met epoch or nav ToC or nav ToW outside the specified time window (set with either -st or -e) will not rewind the file to the end of file cleanup of nav and met functions no longer needing a pointer to FILE_INFO 2007 Jan 31: updated IGS receiver/antenna designations up through 4 Jan 2007 entry 2007 Jan 26: added a new filter to nav_filtering(), i.e. nav_value_out_of_range(), which for the moment just tests to make sure that no value overflows the RINEX %19.12le (D19.12) formatting field 2007 Jan 25: a few code tweaks in qc_short_report() and qc_frequency_count() so that a qc of a 1-epoch or a 0-epoch case will not crash the timecode output 2007 Jan 22: another if clause added to the first pass case of obs_epoch_check() for decimation where the true time tag is off by ±1 millisecond from the nominal epoch (e.g. to catch the random clock errors that have been observed in Trimble data if, by chance, they occur in the first epoch) 2007 Jan 10: function next_Trimble_RT17_record() was modified for parsing of Trimble RT17 data, reducing some unnecessary backtracking in a file that sometimes resulted with severely corrupted data 2006 Dec 12: the help label for option +C2 was wrong in usage() and has been fixed 2006 Dec 5: introduced a define for pointer size in types.h, and this is used in extract_root() to eliminate a couple of warnings when compiling with 64-bit gcc on Solaris (this might be needed elsewhere, but this function was the only one giving a warning) 2006 Dec 4: the end of the push to eliminate the last remnants of explicitly named primitive variables in the code, e.g. now all primitives are abstracted through defines in types.h; this also addresses all cases of signed 1-byte char which need to signed; cases where "int" needs to be used was addressed for main(), tolower(), memset(), strchr(), and strrchr() 2006 Nov 29: extract_real8() had a couple of minor (but non-trivial) typos which caused 8-byte floats to be read incorrectly on the Arm processor 2006 Nov 27: a filter to skip ephemerides with a "time of clock" epoch earlier than a windowed start time when reading binary data was added to nav_filtering() — to prevent early calls to nav_native_to_RINEX_out() — which is analogous to what has been in nav_out() (reading of input RINEX NAV files) for years 2006 Nov 15: decimation of "-smtt"-produced RINEX with +smtt was not working since the code change on 22 Mar 2006, whereas reading of RINEX is not supposed to be effected at all by +smtt or -smtt; the fix was to remove the automatic return in clock_jump_search() when +smtt, but include a switch in obs_epoch_check() to only call clock_jump_search() when decimating if the input format is RINEX (or ARGO format, which might also be in "-smtt") 2006 Nov 8: external_data_string() had case of "|*9900SO-" added to ocver two new strings ("|*9900SO-XDR" and "|*9900SO-ZDR") showing up in NetRS PBO data from a tilt meter 2006 Nov 3: an artificial (and intentionally wrong) line number reset was put into implied_window_limit() so that if one is using a metadata extraction, e.g. +meta, on a RINEX file — which does not read the file line by line — and an error is encountered while reading the file backwards from the end, then the line number reported should now be -1 instead of an arbitrary integer 2006 Nov 1: external_data_string() had the case of "||*9900" (2006 Sept 29) modified to "|*9900XY" — which seems to be the pattern from NetRS PBO data from a tilt meter 2006 Oct 31: any existing BINEX 0x00 comments are deallocated before reading the next 0x00 record at the start of decompose_binex_00() a couple of modifications to binex_observables_7f_02() (writing of BINEX 0x7f-02) to more completely set loss-of-lock for L1 and L2 and antispoofing flag special reset of the receiver clock offset was added to binex_observables_7f_02() when reading BINEX 0x7f-02, e.g. output 0x7f-02 is equivalent to +smtt RINEX 2006 Oct 30: added a default BINEX subrecord to binex_out_records() to each record if using +binex and any output record is specified without a subrecord 2006 Oct 25: switched to +smtt ("smooth time tag", or RINEX time tag as GPS time) as default; now must use -smtt to obtain millisecond jumps during translation from certain raw formats 2006 Oct 16: most stderr reports of various non-normal parts of .dat records now require +warn to be set 2006 Sept 29: external_data_string() had a case added so that if other known cases were not found and an external data string (e.g. MET/tilt/...) was found with "|*9900" — seen in NetRS PBO data from a tilt meter — then the string is skipped and not reported 2006 Sep 25: implicit setting of current GPS week from Leica MDB record 130 upon survey start in decompose_Leica_MDB_82() 2006 Sep 22: notice messages from Leica MDB record 130 at start/end of a survey session with the current GPS time in decompose_Leica_MDB_82() minor change in extract_position() 2006 Sep 21: added some logic to detect new site occupations when reading Leica MDB record 130 from system 1200 receivers, which are being flagged with RINEX event flag 3; currently, no metadata about the new site follows event flag 3 during translation 2006 Sep 20: added some warning messages for Topcon TPS/Javad JPS [rM] if used with GLONASS or UTC time basis (i.e. messages are skipped) 2006 Sep 13: first cut of decoding Topcon TPS/Javad JPS [rM] and [rV] messages 2006 Sep 11: updated IGS receiver/antenna designations up through 8 Sep 2006 entry 2006 Aug 11: updated IGS receiver/antenna designations up through 27 July 2006 entry 2006 Aug 10: slight change in the parsing for the receiver serial number in decompose_Javad_PM() 2006 Aug 8: a new metadata field was added to store the receiver serial number if this is different from a more unique ID number for the receiver (e.g. modern Topcon and Javad receivers) the receiver serial number field is populated by the 2nd string in a TPS/JPS [PM] message if "rcv/sn" or "rcvsn" is detected in decompose_Javad_PM() if the receiver serial number field is populated, it is output with +meta on a new "receiver serial number:" line in dump_metadata() if the receiver serial number field is populated, is takes precedence for the "REC #" in a RINEX OBS header in obs_out_receiver_id() and the ID number is output as a header comment if the TPS/JPS [JP] message indicates a "GB1000" receiver, this field will be altered to "GB-1000" to be in accordance with the IGS suggested naming convention in decompose_Javad_JP() 2006 Aug 5: Trimble() and read_Trimble_mes_file() were modified to keep track of the Trimble .dat fileset index and only use the date information in the .mes for the first .dat (if the .mes exists) for setting the GPS week (otherwise, there is a potential week rollover problem — an extra week increment — when the actual data is read) 2006 Aug 4: added a +ver[sion] option, which calls a subset of the original +id (current executable, version, and build) using a subset of the original teqc_id_info() binary_OBS() and binary_MET() were modified to report as an error any first instance of OBS or MET epochs being out of order an additional constraint on calling sampling_interval_increase() was added: last epoch date must be after 1.0 Jan 1980 2006 Aug 2: with the growing use of teqc to look at L1-only data, two warning messages in qc_warnings() were changed to report that if there are no P-code pseudorange data, that the receiver may be either an L1-only or a P-codeless (squaring) receiver 2006 July 31: modification to decompose_Javad_RD() to set teq.tr.rx.Javad.current_RD to TRUE if any Topcon TPS/Javad JPS [RD] message later than 1 Jan 1988 is read, regardless of whether the user is forcing a week setting 2006 July 26: addition to id() to auto-identify Topcon TPS/Javad JPS file starting with [rE], [rM], or [rV] messages 2006 July 24: have Javad_cks16() working to verify the 2-byte checksum of Topcon TPS/Javad JPS messages [rE], [rM], and [rV] on big- and little-endian processors 2006 July 21: changed next_ublox_UBX_record() to report any message that would result in an overflow and continue; there may be very large UBX messages that are unknown to me 2006 July 20: an addition to spew_Javad_JPS_epoch(): any epoch is now skipped where the date of the [RD] message is 1 Jan 1988 or earlier; this seems to successfully eliminate problems introduced in reading Topcon TPS/Javad JPS when the receiver starts to log data after the NVRAM is cleared but before the firmware knows enough to determine the correct date and time the record buffer size for u-blox UBX format was increased from 316 to 512 bytes, and a test, warning, and program termination was added to next_ublox_UBX_record() if this limit is going to be exceeded while reading a UBX file 2006 July 19: an addition was made to the BINEX 0x00 struct to hold the initial 0x00 epoch time, in decompose_binex_00() the initial epoch time is saved, and it is now output as a configuration comment in dump_config() when the +bcf option is used 2006 July 7: fixed a long-existing bug in find_position() that only recently surfaced when using +qc +eepx or +qc +eepg on Borland Windows builds 2006 July 5: with the new parsing of Topcon TPS/Javad JPS format in next_Javad_record(), an explicit case to skip an [::] message (JAVAD__c, "Epoch Time") was added to avoid [::] being reported as an unknown or uncoded message 2006 June 29: further slight modification of next_Javad_record() to improve parsing of corrupted Topcon TPS/Javad JPS data; slight change in rx_ok() to help differentiate between reporting the format as Topcon TPS or Javad JPS 2006 June 28: addition to rinex_comment() to skip any RINEX OBS header comment with the string "other post-header comments skipped" — a comment probably only added by teqc — so that if time windowing a previously spliced RINEX OBS file using `teqc -phc` then comments of from the splice points prior to the desired epochs will not show up in the header; post-header comments are not affected various changes for the reading of Trimble .dat record 17 and RT17 57h to correctly detect SBAS tracking, which uses new good_SV_number() (essentially like the reverse of the original bad_SV_number() without the notice if a number out of range is found); tested on .dat files from a 5700 rx w/ WAAS PRN 122 (AOR-W) and a 5800 rx w/ WAAS PRN 135 some cleanup of reporting of miscellaneous strings in Trimble .dat records 8 and 16, e.g. no message printed if the string is empty 2006 June 27: first cut of adding Leica system 1200 LB2 with GLONASS enhancements; decoding of LB2 0xd1 (GLONASS almanac, ephemeris, or clock data) was added and when an ephemeris it is recast to make use of the decoding already developed for MDB 141; decoding of LB2 0x0d (measurement data) was modified to detect GLONASS SVs and correct for GLONASS frequencies 2006 June 23: slight recrafting of the detection and message reports in next_Javad_record() 2006 June 22: modification of next_Javad_record() to improve detection of a mis-parsing of the file by teqc, or reporting of a corrupted TPS/JPS data, or report of a valid TPS/JPS message not yet coded into teqc modifications to check_interval() to properly control when obs.basic.mod_dec->rx_clock_reset.original_interval gets set, mainly to avoid it getting reset to the original sample interval when decimating and using multiple files (i.e. it was getting reset to the decimated interval for the 2nd and later files, resulting in the 2nd and later files not being decimated); tested on 1 sec and 0.05 sec raw and RINEX files in decompose_Leica_MDB_68(), the receiver name for the Leica GRX1200 Classic was changed from GRX1200CLASSIC to GRX1200 to conform to the IGS designation when reading Leica MDB record 104 (0x68) buffer initialization added to unicode_to_ascii() (will improve getting correct ASCII strings from Unicode strings in Leica MDB records) 2006 June 21: updated extract_Trimble_ant_type() to id the internal R8/5800 antenna and updated the antenna designation to match the 6 June 2006 IGS antenna names 2006 June 20: updated IGS receiver/antenna designations up through 6 June 2006 entry modification to decompose_Ashtech_R_9() for acceptance of the SV tracking capability some minor additions to obs_interval() to deal with decimation case, but these alone have not solved the problem of decimating multiple input RINEX files to a single output RINEX file 2006 June 19: decompose_NavCom_ae() was modified to gracefully handle new receiver types that are not explicitly listed in the code; NavCom record 0xe1 will now be skipped; receiver types in 0xae were updated using the NavCom Technical Reference Manual Rev. G (May 2006) 2006 June 2: modified the parsing of Leica LB2 0x0c (system 500) and 0x0d (system 1200) measurement messages to conform to the new methodology used to parse Leica MDB record 120, which corrects a bug found recently in parsing 0x0d messages; preliminary testing is OK (the same method could be modified to parse the original Leica LB2 0x03 measurement message, but this has been left as a future exercise) 2006 May 25: added some "notice" messages to report two or three possible different Trimble receivers for dat record 5 with receiver id values of 2, 4, 6, and 11; receiver id value of 0 (4000S*) is so general, it's hopeless 2006 May 23: a large change in antenna position and a few fopen error messages are now only reported with warnings turned on (e.g. +warn) 2006 May 19: a couple of corrections in reading the Leica MDB record 141 and 142 for RINEX GLONASS nav file 2006 May 11: completed first round of debugging of the updated Leica MDB code for Leica's new system 1200 "GG" (GPS + GLONASS) receivers; the decoding of the MDB record 120 looks pretty good; there are a few issues to resolve with GPS and GLONASS navigation messages in RINEX, i.e. differences between Leica's Geo Office 4.0 produced RINEX and that teqc-produced RINEX 2006 Apr 27: updated Leica MDB code for new system 1200 release with new receivers and antennae designations in MDB records 104 and 108, GLONASS and multipath mitigation correction (MMT) in record 120, and GLONASS navigation message in record 141; all needs to be tested 2006 Apr 25: changed the timecode line of the qc short report to include a frequency count to indicate (for the time being) whether the data is dual-frequency or single-frequency; at the moment, any indication of dual-frequency data in the target file sets the indicator to dual-frequency; see new qc_frequency_count() 2006 Apr 17: changed the report of negative multipath sigma to be fabs(sigma) > 1e-11 (up from 1e-13) in mp_ma_sigma(); probably this report is no longer needed since all known cases over the years have been when the sigma really is zero due to numerous slips, but the computed sigma is negative due to accumulation of floating point noise added a print of the 4-char ID of the monument/marker, plus name and number if different, just before the receiver and antenna metadata in the qc short report in qc_short_report() 2006 Apr 13: made the reporting of uncoded identification of Leica system 1200 receivers and antennae consistent for the various MDB metadata records 2006 Apr 12: corrected reading of metadata in Leica MDB system 1200 0x68 (104), 0x6c (108), and 0x71 (113) to account for the 2-byte Unicode strings in these records; also added a quick unicode_to_ascii() string extractor added entries for auto-population of antenna type IGS strings LEIAX1201, LEIAX1201, and LEIATX1230 from antenna 1-byte type in Leica MDB system 1200 0x6c (108) record in decompose_Leica_MDB_6c() 2006 Apr 5: added read capability for Leica MDB system 1200 0x72 (114) for met data dealloc memory cleanup is now being skipped for all Windows and Linux builds in terminate() — Windows and gcc builds are just too much of a pain in the neck fixed a bracket typo in dump_config() which was leading to a segmentation fault when using +bcf and dumping out the xyz coordinates 2006 Mar 29: a sanity check for the size of the antenna (eccentricity) offsets was added, obs_out_ant_height_test(), to see if each value fits within the allowed RINEX format of %14.4lf and an error message is written if any offset does not, though the out-of-range value is still written to the RINEX header (— I suppose this type of test could be added for all the other numeric RINEX header fields, but it seems like an activity of vanishing returns) 2006 Mar 24: removal of some moving/static antenna status debugging lines from the Trimble .dat code 2006 Mar 23: the functions Javad_id() and ublox_id() were changed to both be twobyte_id() since the original functions were identical 2006 Mar 22: another attempt at more straightforward decimation for the user: the function clock_jump_search() now will immediately return (i.e. not look for possible millisecond clock resets in the time tag) if +smtt is set — which applies now for any input target file including +smtt; this has been tested on the standard decimation suite of RINEX files and all seems to be well; thus if the input data is known to be free of millisecond resets in the time tag, then the decimation should always work if using +smtt -O.dec #, though in many cases the +smtt may not be required; the original sampling interval does not need to be known and I think this change should allow the decimation to work with original sampling intervals down to 0.001 second (1000 Hz), which was also tested on a synthetic RINEX obs file 2006 Mar 17: minor debugging prints cleaned up first attempt are putting an hourly "time code" in the qc; mods in qc_constellation() and qc_short_report(); tested on one-day and two-day data 2006 Mar 16: changed back to CLK_BASE parameter equal to 1 second, as this is the only solution that works with current algorithm and all cases, though this does continue to require to use -O.int to specify the original sample interval when less than 1 second 2006 Mar 15: rolled back the decimation code in clock_jump_search() and in obs_epoch_check() to code on Dec 12 and with the CLK_BASE parameter back to 0.002 second; for a consistent decimation for all known cases, this seems to be the right strategy even though this requires using -O.int to specify the original sample interval when the first epoch time tag is "non-standard" when decimating; tested on 20- and 30-sec data with increasing and decreasing millisecond resets, 10 sec CMC data (slightly non-integer time tags), 1 sec Zodiac data (significantly non-integer time tags), 20-Hz and 50-Hz data — though all with INTERVAL in the header 2006 Mar 14: external_data_string() had a case added so that if other known cases were not found and an external data string (e.g. MET/tilt/...) was found with "|*0100" — seen in NetRS PBO data — then the string is skipped and not reported 2006 Mar 9: u-blox UBX translation was modified a bit so that the receiver clock offset could be approximated for output in RINEX if the NAV-CLOCK messages are present 2006 Mar 7: first cut on a u-blox UBX reader, currently decomposing the UBX messages RMX-RAW (0x02 0x10), RMX-EPH (0x02 0x31), NAV-POSLLH (0x01 0x02), and NAV-CLOCK (0x01 0x22) 2006 Mar 3: finished an addition to the Ashtech R-file suite that allows for a reasonable translation of record 9 (aka ZTINYTYPE), though the exact details of what's going on with receiver millisecond clock resets is somewhat problematic 2006 Jan 31: updated IGS receiver/antenna designations up through 20 January 2006 entry 2006 Jan 26: switched compiling of all Solaris Sparc builds from Solaris 5.8 to Solaris 5.9 2005 Dec 27: following the changes made on 28 Nov, now backtracking a bit to have the CLK_BASE be 0.02 second (50-Hz sampling rate) rather than 0.002 second (500-Hz sampling rate), because a CLK_BASE of 0.002 second doesn't do the decimation of time tags with millisecond resets correctly 2005 Dec 20: added identification of Trimble's R8 receiver in extract_Trimble_rx_type() 2005 Dec 19: minor re-tweaking around strrstr() to get things to compile with other systems added identification of Trimble's R7 receiver in extract_Trimble_rx_type(); added a placeholder of " " in extract_Trimble_ant_type(), though I'm not sure what antenna it refers to (new default for "unknown"?) 2005 Dec 16: some minor tweaking around strrstr() to get things to compile with cc on HPUX 11.00 2005 Dec 15: corrected the phase translation for BINEX 0x7f-02 to correctly account for millisecond clock resets (e.g. from Trimble 4700) in binex_7f_02_obs(); splitting of l1_jda() and l2_jda() into l1_7f02(), l1_7f03(), l2_7f02() and l2_7f03() the clk_base in qc_start_obs_epoch() really has to be 1 sec, so it now has its own definition in defines.h called QC_CLK_BASE a new option +qcq was added that is a shorthand for +qc -plot -report, thus doing a "quick" qc without plot files or a report file; note, for example, that +plot +qcq would do plots without a report file (since the +plot option is evaluated before +qcq in this example) and thus this would be exactly equivalent to +qc -report since doing plot files is done by default unless specified otherwise; likewise +report +qcq is exactly equivalent to +qc -plot 2005 Dec 14: for translation of BINEX 0x7f-03, modified binex_observables_7f_03() so that the stored receiver clock offset obs.receiver.offset is set to zero any time a receiver offset value is not present or is not valid added an output line for the file format in dump_metadata() when using +meta 2005 Dec 13: edited dump_metadata() and dump_metadata_rinex() to have new output for +meta option (to conform to new UNAVCO DMG Oracle schema) 2005 Dec 9: had to an a default initialization to the len parameter to zero in next_Javad_record() to avoid the possibility of accessing buf out of range when encountering an unknown Javad JPS/Topcon TPS record 2005 Dec 6: receiver.version was changed to receiver.firmware for internal purposes added receiver firmware to qc_short_report() output if non-null (see 27 Oct 2005) 2005 Dec 5: find_position() was modified so that if the current point position had poor convergence (position residual > 100 m), then the antenna position is reset to the last converging antenna point position 2005 Nov 28: the top of the qc default landscape mode was modified a bit to include the current teqc version and have the "SV" line include time tic marks check_interval(), clock_jump_search(), and qc_start_obs_epoch() are now using a clk_base value of 0.002 second (2 milliseconds) — rather than the original 1 second — which has been tested on data with normal millisecond clock resets, 50 Hz data (0.02 sec interval), and Rockwell Zodiac data (epochs significantly off from the integer second); this should greatly reduce the need to specify -O.int with the original sample interval unless the original sample rate is greater than 500 Hz, though e.g. -O.int was still needed for decimation of the Rockwell Zodiac test with epochs significantly off from the integer second 2005 Nov 23: decompose_Trimble_16() was tweaked a bit so that the ANT_H_DEBUG debug will not print beyond the 9th character (i.e. after the height code) 2005 Nov 21: possible_wrong_GPS_week() will now report the current allowed difference in time between a data epoch and a GPS ephemeris GPS week + ToW (note: currently this difference has been and still is set at ±12 hours) IGS_receiver_designation() and IGS_antenna_designation() were modified so that the receiver and antenna type names are only tested against those in the IGS listings if they are non-null 2005 Nov 15: tests were added in obs_epoch_check() to reduce the number of false reports of sampling interval increase or decrease when the user is examining either multiple RINEX files or spliced RINEX from a receiver that uses millisecond clock resets for coarse clock steering and the translation employed millisecond jumps in time tags and smooth phase and pseudorange (equivalent to a teqc -smtt translation); the current test requires that the new interval be more than 1% different from the current interval before either an increase or decrease is reported 2005 Nov 14: changes in multiple places for doing a qc on L2C data (note that option +C2 is still required); two new qc data indicators were added to the ASCII time plot: `e` indicates L1, L2, C/A, and L2C and `=` indicates L1, C/A, and L2C 2005 Nov 9: re-do of the code changes on Nov 7 for the XDR NMEA strings where the scan and possible NMEA string repair has now been collapsed into a new XDR_scan() which is called by decompose_Ashtech_R_6() and decompose_Ashtech_U_D(); XDR_scan() also tries truncated strings starting in "R," and "," in addition to "DR,"; external_data_string() was put back to the earlier code 2005 Nov 8: added logic in met_epoch() (similar to what had been in GPS_NAV_times_make_sense() and possible_wrong_GPS_week()) so that if a data read starts with the wrong assumed GPS week and this is detected during the reading of met data, then either this is reported to the user or if a metadata extraction is being done teqc will terminate with the "week: ####" message 2005 Nov 7: format.h, format.c, id(), file_id(), and process_input() were updated so that teqc would correctly identify a Hatanaka-compress "compact" RINEX file with +mdf or if a Hatanaka-compressed file were accidentally used an an input file to teqc; note that crx2rnx is still needed to convert Hatanaka-compressed RINEX into normal RINEX before teqc can read the data modified decompose_Ashtech_R_6(), decompose_Ashtech_U_D(), and external_data_string() to read slightly truncated XDR NMEA strings ("DR," as well as complete "XDR,") 2005 Nov 4: in obs_data() the satellite total is now set to be zero whenever a RINEX OBS epoch flag of 2, 3, 4, or 5 is encountered obs_system_check() is aborted if the satellite total is zero 2005 Nov 2: had to change the sscanf() call in decompose_AOA_CB_ephemeris() from a "%ld" to "%d" in order to read the ToW field of a ConanBinary EPH record on the Solaris 64-bit builds 2005 Nov 1: the recasting in de_pad_right() and de_fuzz() had to altered slightly to satisfy certain gcc compilers 2005 Oct 28: updated IGS receiver/antenna designations up through 5 October 2005 entry; removed all deprecated IGS name entries de_pad_right() was modified to remove ASCII characters 0x01 — 0x20 and 0x7f — 0xff at the end of the string (instead of just 0x0a, 0x0d, and 0x20) a new de_fuzz() was created to remove any ASCII characters 0x01 — 0x19 and 0x7f — 0xff anywhere in a string by left-shifting over the offending characters a call to de_fuzz() was added to the end of option_string() to eliminate ASCII characters like crtl-M (\r) at the end of a config string entry (_what_ crazy things will users try next!?) 2005 Oct 27: added metadata lines to qc_short_report() output which identify the receiver and antenna types, plus the (serial) numbers if they are present; these lines occur just before the "Time of start of window" 2005 Oct 26: compiled 64-bit version of teqc on Solaris 5.8 and tested it on various formats 2005 Oct 17: new -notice option to suppress most messages with "Notice" in them; note: some messages which before were suppressed with -warn now will also need -notice new +quiet option, which automatically sets -warn and -notice and suppresses the qc "qc full>>>>>> ..." or "qc lite>>>>>> ..." messages during a qc run 2005 Oct 3: qc_landscape_out() was modified right after the call to qc_window() to allow the qc output of input with no epochs to proceed (previously a problem on Windows) 2005 Oct 1: implied_window_limit() was modified to only deallocate the line needed for reading in RINEX before calling terminate() 2005 Sep 30: sampling_interval_increase() was modified to suppress the reporting of sampling interval change or gaps when -warn is used 2005 Sep 27: GPS_week_check() now has a possible error message of a questionable starting GPS week being suppressed if -warn is used 2005 Sep 26: leap_seconds() was updated to include the introduction of a positive leap second at the end of December 2005 2005 Sep 16: error fixed in Leica_LB2_0d_obs(): had not been skipping over the 4-byte Continuous Lock Time parameter in Leica System 1200 0x0d messages 2005 Sep 2: updated IGS receiver/antenna designations up through 29 June 2005 entry (which leads to the question of why the on-line version of the IGS table that I checked on 2 Aug was only up to 5 May and not the 29 June changes?; Angie?) 2005 Sep 1: initial version of a new requested qc feature: -slips <filename> saves a file with more details on certain slips, currently being the SV, elevation, azimuth, type of slip (ion, mp1, or mp2), and the epoch when the slip was detected 2005 Aug 31: a couple of modifications in find_config() for dealing with paths and drive changes (e.g. A:, B:, C:, ...) in DOS for the config file 2005 Aug 29: the lower ToE - ToW limit was decreased from -70 minutes to -130 minutes in GPS_NAV_times_make_sense() 2005 Aug 2: updated IGS receiver/antenna designations up through 5 May 2005 entry implemented new mapping for 0-9 RINEX flag for SNR: snr_rnx= min(max(int(snr_dBHz/6, 0, 9) when the SNR value is in dBHz 2005 July 29: test build on Linux x86_64 (dynamically-linked); no major problems seen 2005 July 27: new +C2 option must now be used to include RINEX version 2.11 C2 observable, and the default observable lists with and without C2 have been redefined in set_obs_obs_out() 2005 June 27: minor rewording of qc +reset and -reset options for +help in usage() (note: +reset is the default, and -reset was only intended for debugging but has remained for legacy issues) 2005 June 3: order for reading east (E) and north (N) antenna topocentric offset was reversed from the correct order in extract_binex_00_field() and binex_hdr_message_00_field() (only effected BINEX metadata representation) 2005 June 2: added help output for +r option (still only applies to BINEX) 2005 June 1: added BINEX capability for reading/writing 0x00 field ID 0x22 (geocode) 2005 May 17: a bit more compiler tweaking for K&R on HP-UX 10.20 +DAportable option for older processors (I think) a bit of code defuzzing for gcc compilation on HP-UX 10.20, mainly to bypass system definition of strrstr() 2005 May 16: code defuzzing for K&R compilation on HP-UX 10.20 2005 May 6: the previous implementation of reading DBEN records has been changed to more accurately reflect a general DBEN sequence of data records; PBN records are no longer required, and, in fact, if they are present they will be ignored; reading of "unpacked", doppler-less RCA, RP1, RP2, and RPC DBEN records was tested; reading of "unpacked", doppler-less RWL records should be detected but will also be ignored except for the time tag (since RINEX observables cannot be extracted); because there is no GPS week information in DBEN records, it is advised that the user log ephemeris records (SNV) so that the data can be easily translated at a later date with less of a change of a GPS week ambiguity in ancillary_filename_template() the use of mktemp() has been replaced with mkstemp except for Borland and Watcom builds 2005 May 4: in obs_epoch_with_gps_week() added case for Rockwell Zodiac (which had been accidentally omitted) 2005 Apr 29: binex_00() modified so that using -B.px or -B.pg will now accept an optional fourth argument — which must come first — which is the ellipsoid model name if one wants to specify an ellipsoid other than WGS-84; dump_config() was modified so that the optional ellipsoid model name is output when using +bcf a slight modification to IGS_log_coord() so that it will iterate slightly if the seconds were to round to "60.0000" 2005 Apr 28: B-files from an Ashtech LM-XII2 receiver with firmware 6F was found to have full L2-phase stored in it, even though this is a L2-squaring receiver; therefore in Ashtech_dld_block(), a special case was added to not divide the stored "L2" value by 2 when the firmware is identified as 6F 2005 Apr 15: added cases to skip reporting of NavCom binary messages 0xd3 and 0x5b 2005 Apr 13: minor code additions to clock_jump_search() so that clk_base is only calculated once 2005 Apr 12: in extract_modulo_decimation() an initialization of basic->mod_dec->rx_clock_reset.original_interval to zero was added in clock_jump_search(), there is now a test to make sure that clk_base is not less than 1 nanosecond 2005 Apr 11: new code for Leica system 1200 message 0x0d, but not tested yet due to lack of test data 2005 Apr 8: updated receiver listing in decompose_Leica_MDB_68() to reflect changes to GPS System 1200 Measurement DB, version 1.25 (4 Mar 2005) 2005 Apr 4: re-defined C2_CODE_ON in defines.h to be TRUE to allow L2C == RINEX C2 observable as per 2.11 draft; modified Trimble_17_m57h_obs() to extract L2C from Trimble .dat record 17 or RT17 0x57 and tested this using synthetic data from Trimble 2005 Mar 29: updated IGS receiver/antenna designations up through 16 Nov 2004 entry 2005 Mar 28: first cut of code for supporting Leica system 1200 MDB records, plus some minor code improvements for the original Leica system 400/500 MDB for record 20 (full observation data) 2005 Mar 25: change to epoch skipping condition in obs_epoch_check() to test decimation on Garmin 1-Hz data where the time tags are arbitrary (i.e. not integer seconds) and there is a 1.31e-5 drift (1.132 second per 24 hours); this change may or may not be kept 2005 Mar 8: Major Bug found! (due to code changes made on 21 Jan 2005): functions rinex_obs(), rinex_met(), process_rinex_obs(), process_rinex_met(), process_rinex_obs_end(), and process_rinex_met_end() were modified to include a pointer to the BSC_INFO struct for parallel construction to the equivalent rinex_nav*() functions for their being called in rinex_out() 2005 Mar 7: added cases for Javad JPS/Topcon TPS message ID [::] to play a role like message ID [||]; no other functionality at this time 2005 Mar 4: compiling with Solaris 5.8 cc showed a few warnings about "old style" function declarations (implied "int" for function type); these were corrected (all functions now have an explicit type) added a case to skip Javad JPS/Topcon TSP message [mr] (rotation matrix) in parser next_Javad_record() 2005 Mar 2: changed calculation of clk_base in clock_jump_search() to be based on the original sample interval rather than obs.session.interval so the decimation works for original sample intervals less than 0.5 second in extract_modulo_decimation() the base for when the multiplier is 1 (i.e. decimation supplied in seconds) is reset to the modulo_decimation factor (rather than 1) to allow for a decimation factor less than 1 second 2005 Feb 17: put a check in next_CMC_Allstar_record() so that if the data is corrupted, a buffer overflow when attempting to read is prevented defined "version" string for dummy GPS NAV file in ephemeris_file_extract() so that it would have a valid value in rinex_nav_GPS() during a qc with an input GPS NAV file ("qc full" run) 2005 Feb 10: fixed code in decompose_binex_7f() for reading 0x7f-03 when no receiver offset field is present; previous code had an undefined clock_offset variable which was incorrectly triggering the detection of a millisecond reset at the beginning of reading a sequence of 0x7f-03 records 2005 Feb 4: a new index was added to the QC_SV_PLOT_LIST struct to keep track of the maximum number of data bins for each plot file, and this is used in qc_compact_file_allocation() so that if the data bin is reallocated during the same epoch to a new maximum, the previously stored data is not zeroed (as had been happening with the first epoch of plot data when doing a "qc lite" run, i.e. no navigation messages) in open_qc_compact_plot_file(), the start time of the COMPACT plot files is now correctly being offset by one epoch because the 1st epoch of the COMPACT plot files corresponds to the 2nd epoch of the observation data (so that all COMPACT plot files, including iod which requires an epoch difference, are in sync with one another) a extra switch was added to flush_bs_buffer() to terminate RINEX OBS lines with event flags 2-5 that have a blank in the following field ("number of satellites") 2005 Feb 3: the Vaisala PTU200 met strings are now thought to be formatted as: "020cxxxx.x hPa xxx.x 'C xxx %RH ..." which required a trivial change in external_data_string() to identify the string added a new boolean in the FILE_INFO struct to identify an ASCII file that terminates lines with only 0x0d (carriage return) and logic in get_next_rinex_line() to chunk through a RINEX with such line endings 2005 Jan 28: more fun with Ashtech R-files!: for R-files from SCIGN, the receiver header string was found to contain a totally invalid value for the sampling interval — the string says 30 seconds but the data is obviously perfect 5-second sampling, so the part of Ashtech_R_receiver_header() which exacts the sampling interval from the string has been disabled 2005 Jan 27: changed the increment variable used to generate the bottom time-axis line in the ASCII time plot for +qc in qc_landscape_out() from a 1-byte unsigned integer to a 2-byte unsigned integer so that a plot width of 255 (i.e. -width 255) would not get into an infinite loop 2005 Jan 21: added additional logic in new rinex_out() to cover cases like format verification, metadata extraction, qc, BINEX output that were in out_settings() 2005 Jan 20: (OK, one more time:) RINEX() and out_settings() were modified again, postponing assignment of null *.basic*.out.fp in out_settings() to RINEX() when the input is identified as RINEX similar sequence of calls in RINEX() for the different types of RINEX files was split off into rinex_out() 2005 Jan 19: RINEX() and out_settings() were modified again: because default assignments of stdout to null *.basic*.out.fp were not getting made if the target files were RINEX NAV or MET files; not sure if this current change nullifies the fix made on 18 Nov 2004 2005 Jan 14: the parser in next_Javad_record() (for Javad JPS and Topcon TPS formats) was modified to skip over null bytes where otherwise the start of a message should be 2005 Jan 13: when needed, id() was using the entire user-supplied filename which may include a path prefix, but now it is stripping off any leading path +bcf with either -B.pg or -B.px entry now also outputs as a comment the lat/lon/h in IGS log format (see new IGS_log_coord() function) 2005 Jan 12: decompose_MET3_string() for reading MET3 strings from Trimble .dat or RT17 format modified to not require the presence of an "XDR," or "0R0" or "020c" string fragment (i.e. this function should not require modification as new MET string formats are discovered); identification of MET string fragments is now only in the revised (10 Jan 2005) external_data_string() 2005 Jan 10: all the NMEA MET and Vaisala WXT510 code has now been collapsed into a new yams.c and yams.h ("yet another met string") and upon detection of a possible met or external data record string the function external_data_string() should be called (which replaces start_NMEA_strtok()); Vaisala met strings of the form "020c 997.0 hPa 30.7 'C 58 %RH ..." from the PTU200 are also now parsed 2005 Jan 5: more fun with Trimble's NetRS!: the NetRS will create an entire data file with no SVs tracked ... had to add a special test in decompose_Trimble_17_m57h() to test for zero SVs in .dat record 17 before calling obs_epoch_no_gps_week() (I suppose all data record parser functions should be written this way, but until the NetRS it hasn't been a problem with any other receivers or formats) 2005 Jan 3: for Trimble .dat format, added reading for Vaisala's WXT510 weather transmitter in it's "0R0" format; this wasn't added to Ashtech or other receiver formats because it's not yet known how the 0R0 string will show up; this includes reading Sm = wind speed in m/s, Dm = wind direction in degrees CW from north, Rc = rain accumulation in tenths of mm since the last measurement reading, and Hc = hail accumulation in counts since the last measurement reading 2004 Dec 3: added a reset of teq.tr.offset to zero at the beginning of each binary file in process_input() — this seems to be needed to properly reset multiple file parsing for certain formats like Leica MDB 2004 Nov 23: some code defuzzing during test compiling on IBM AIX 4.3 and DEC Digital-UNIX 4.0; one mystery was the definition of IRRELEVANT_TRUTH from util_tools.h not being accepted in ephemeris_file_location() 2004 Nov 19: slight change in qc_file_list() to correctly identify stdin if was being used during +qc mode 2004 Nov 18: in RINEX(), tests were added to check the value of teq.standard_out before setting any null *.basic*.out.fp to out.fp (which is usually stdout, unless +out option has been used); this eliminates the problem when importing a RINEX NAV file with -nav during a qc run (+qc) on a file that is not RINEX and having any navigation messages in the data read and dumped as RINEX NAV to stdout 2004 Nov 17: added an explicit null string termination to each line of the qc ASCII plot (obs_table, clk_table, etc.) in qc_sv_line() and qc_landscape_out() (search on binary_image in code) 2004 Oct 28: added some code to dump_config() that will give the current time stamp (as a comment field) when generating a new BINEX configuration dump using +bcf 2004 Oct 27: added -warn suppression of final notice message of trying different GPS weeks in possible_wrong_GPS_week() 2004 Oct 25: added -warn suppression of notice message of conflicting GPS week message in adjust_week() start_NMEA_strtok() was modified to start XDR strings on the last occurrence of "XDR," in the string to eliminate partial XDR string dumps from MET packs; this required adding the non-ANSI function strrstr() 2004 Sep 29: first cut of including code for -smtt/+smtt option; reading of Trimble formats is fairly straightforward, but reading of Ashtech and Javad/Topcon formats will require more extensive testing 2004 Sep 27: first cut of complete reading and writing of proposed BINEX 0x7f-03, on both little- and big-endian processors, including both endian reversals (+r option), plus translation of 0x7f-03 to RINEX with and without "smooth time tag" (-smtt and +smtt) 2004 Sep 23: old unofficial option +GPS_t has been eliminated and will be replaced with the new official option +smtt == "use smooth time tag", i.e. during translation to RINEX, the usual Berne-style of translation with smooth phase and code measurements with millisecond jumps in the time tag is replaced with an equivalent (and equally valid) translation with millisecond jumps in phase and code measurements with smooth time tag 2004 Sep 22: added an ad hoc receiver "channel number" assignment during decoding of certain remaining formats (e.g. Trimble DAT, RT17, TSIP; Leica DS, MDB; RTIGS; Soc; Rockwell Zodiac) using the SV ordering as the channel number 2004 Sep 20: translation of all formats for the RINEX 0-9 SNR flags are now set using snr_map() which will use the old Bernese method bernese_snr_0to9_map() if the SNR is not in dBHz and a Bernese mapping array for the SNR is specified 2004 Sep 16: fixed bug in obs_types() that correctly does merging of two RINEX OBS or MET files with the same observables but in a different order by not accidentally clobbering the curr.type array if it is co-using the same memory as the in.type array and not updating the index array renamed the old unofficial option +RINEX_rx_clk_offset (to output the receiver clock offset in RINEX version 2.xx) to the new official +rx_clk_off[set] which will still apply for RINEX 2.xx and now certain BINEX records added teq.tr.rx_ms_jump, teq.tr.rx_L1_offset, and teq.tr.rx.L2_offset (for future code) 2004 Sep 15: fixed bug in the calling of obs_phase_overflow() and obs_other_overflow() in obs_binex_out() during conversion to BINEX; this bug was introduced on 16 Apr 2004 2004 Sep 14: added a obs_splice boolean flag to out.c to correctly insert the RINEX FILE SPLICE part of a comment with the -phc option only when RINEX files are being spliced 2004 Sep 2: rewording of some usage text in usage() (e.g. output from `teqc +help`) fix in g_arg() to correct the outputting of the RINEX OBS header comment for option +rds only (old code would output the comment for -rds as well) 2004 Sep 1: fixed RINEX OBS comments for translation of Leica LB2 and MDB formats to indicate correct mapping of SNR 0-9 flags on L1 and L2 (now calling dBHz_snr_comment()); the comments have been in error (reporting the older LB2 mapping) since 19 May 2003 2004 Aug 31: conversion of SNR from AOA receivers (all receivers, TurboBinary and ConanBinary formats) to dBHz using C/No dBHz = 10*log10(a*a/2) where a = volts/volt, introduction of AOA_snr() and AOA_rx_specifics(), modification of turbobinary_snr_0to9_map() and assignments for all RINEX S1 and S2, added test for teq.tr.dBHz_snr for AOA receivers in binary_OBS() to print appropriate RINEX header for dBHz; can switch back to SNR reporting in volts/volt by setting #define DBHZ_SNR 0 in aoa.c cases for Trimble 5800, R7, R8, and NetRS receivers were added to Trimble_rx_specifics() for reporting SNR in dBHz in native (.dat and RT17) formats renamed snr_comment() to dBHz_snr_comment() (to be a bit more clear) 2004 Aug 27: added an "else if" clause to flush_bs_buffer() for post-header line situation where all post-header lines are deemed unneeded and thus eliminated requiring a filler COMMENT line to be added (alternate solution would be allow an output value of 0 for the bs.hdr_fields_to_follow and no filler line, although it is not known how this would effect other RINEX readers for event flags 2-5, i.e. would they choke if the "lines to follow" value is zero?) 2004 Aug 16: added at call to correct_GPS_nav_times() in rinex_nav_GPS() so that reading of a RINEX NAV file will apply the same potential corrections to ToC, ToE, and/or ToW as during a translation; see 1999 Feb 9, except correct_nav_times() was renamed correct_GPS_nav_times() in the interim 2004 Aug 5: due to changes made on 6 Jan 2004, reading of Leica LB2 0x03 records during a GPS week transition causes the week to be incremented too many times when there is one or more LB2 0x85 record between the 0x03 record at the end of the week and the 0x03 record at the start of the next week (and same for Leica LB2 0x0c records if using the -week option to set the GPS week); the fix is to detect when any Leica LB2 records (0x03, 0x0c) has been read and set the new receiver specific flag teq.tr.rx.Leica.LB2_obs_read and then skip any setting of the GPS week during the decomposition of 0x85 if this flag has been set added a new option +skip_init_LB2_03 which can be used to skip the first Leica LB2 0x03 record (due to fact that we are finding some daily LB2 files with some weird or old 0x03 record at the very beginning of the files) 2004 July 29: updated IGS receiver/antenna designations up through 16 June 2004 entry 2004 July 27: added additional logic in Trimble_17_m57h_wf_and_obs(), Trimble_17_m57h_constellation(), and Trimble_17_m57h_obs() for decomposing Trimble DAT (record 17) and RT17 (record 57h) when there appear to be some initial valid PRN values in the epoch prior to invalid PRN values 2004 July 26: added cases for JPL Soc and IGS RTigs format conversion to BINEX 0x7f-00 and 0x7f-02 in binex_observables_7f_00() and binex_observables_7f_02() defined SNR storage for JPL Soc and IGS RTigs formats for BINEX 0x7f-00 in binex_observables_7f_00() and binex_7f_00_obs() added a missing break in the switch for P1 decomposition in binex_7f_02_obs(); without the break, a decomposition requesting P1 when C1 is present leads to an incorrect output of P1 and P2 (though if only requesting C1 and P2, then C1 and P2 would be correct; or if C1 is not present, then P1 and P2 would be correct) 2004 July 15: modified the +diag dump in next_Ashtech_U_record() to distinguish between the two records BR\00\09 and BR\00\07 added a case in check_geo() (cartesian to geographic conversion) to update the geographic coordinates when the geographic height is essentially -1 x semi-major axis of WGS-84 2004 June 23: modified the test for the additional code for ConanBinary in nav_processing() that was introduced on 2002 Dec 5 to also make sure that ConanBinary time (from any record) is non-zero and that the GPS week hasn't been set with the -week option 2004 June 10: next_Javad_record() was modified to clean out any partial epoch messages if message [||] is encountered without a leading [~~] message at the start of the current epoch (see case JAVAD__p) 2004 May 27: Leica_LB2_0c_obs() was modified to not allow user_clock_time - channel_time_base to be negative (mainly to fix bogus times and therefore observables on Sunday at 00:00:00) decompose_Leica_LB2_fa() was updated to include a few more known submessages; code fo submessages 0x02 and 0x07 still needs to be written to extract geodetic coordinates 2004 May 25: added an extra condition in the default case in new_position() so that a position calculation would not be attempted unless the workspace structure of the qc structure was non-null 2004 May 14: another modification to the parser in next_Ashtech_U_record(), to rewind 1, 2, or 3 bytes if reading a file and finding a record header mismatch with known records 2004 May 6: the initial part of the parser in next_Ashtech_U_record() for reading Ashtech U-files was enhanced to more definitely read and recognize the first four bytes of each U-file record with introducing a possible misread when unrecognized (e.g. new) U-file records are encountered (the new code is ugly and more difficult to add new records, but is fast and efficient and seems to be robust) case for Ashtech micro-Z and ZXtreme receivers were added in Ashtech_rx_specifics() and Ashtech_snr() were added 1) to deal reading a B-file converted from a U-file from one of these receivers and 2) to deal with -O.rt "ASHTECH Z-X" translation of a U-file or B-file (assuming the data is really from a ZXtreme) 2004 Apr 27: decompose_Trimble_30() has now added to read part of Trimble dat record 30.1 to extract the receiver serial number, which takes precedence over the receiver serial number in record 5.2; for option +meta the number shown will be from 30.1, in RINEX translation the number from 30.1 will only be in the OBS header if 30.1 occurs before the first data epoch that is to be output 2004 Apr 16: eliminate_oversize_phase() has now been replaced with obs_phase_overflow() and occurs only before outputting RINEX or BINEX and after reading RINEX with the +reformat option (i.e. this is no longer done after reading the phases for the Ashtech formats), to eliminate phase overflow as now being seen in data from the Trimble NetRS when clock steering is enabled; a similar function obs_other_overflow() checks for large sizes for other observables and occurs in the same places interestingly, the above does not remove NaN values 2004 Apr 12: updated IGS receiver and antenna designations through to 11 Feb 2004 2004 Apr 8: some changes in next_Ashtech_stream_record() so that $PASH records RCA and BPS could be identified reading of Trimble .dat file having record 16.27 with extract_Trimble_ant_type() updated to include antenna types G4 (IGS TRM29659.00) and DT (IGS AOAD/M_T), though G4 also implies some type of (unspecified) radome in use as well 2004 Apr 5: Javad() contained a bug which incorrectly reset the value of the 4- and 8-byte NaN values on little-endian processors after reading the first Javad JPS/Topcon TPS file, possibly resulting in "NaN" values in the RINEX OBS 2004 Apr 2: clarification in usage() of use of -NaN_obs option 2004 Mar 31: deprecated IGS antenna name assignment for Trimble .dat record 16.27 for some 2-char codes replaced with newer (preferred) IGS names 2004 Mar 29: minor code cleanup for cleaner compile with Borland 5.0 removal of receiver clock offset argument from met_epoch() and related calls (since this has been zero for a while) 2004 Mar 25: same minor code change as on Mar 24, except for BINEX, Leica, NavCom, Rockwell, RTIGS, and Soc formats 2004 Mar 24: decoding of Ashtech U-files with decompose_Ashtech_U_V7() and decompose_Ashtech_U_V9() was changed slightly to allow -week to override the GPS week value in records BR\00\07 and BR\00\09 which, by known example, can be wrong 2004 Mar 19: updated binary_OBS() for printing out standard snr_comment() for records that use snr_map(); now, teq.tr.dBHz_snr should be set to FALSE unless the format is known to use SNR in dBHz — in which case this should be set in process_input() just prior to calling the function that processes that specific format — or if the format is mixed (e.g. Ashtech, Trimble, Soc, BINEX), then there is code in the reading of that format for setting teq.tr.dBHz_snr based on the specific receiver, subrecord type, or some other criterion 2004 Mar 16: new obs_system_check() which attempts to get the RINEX OBS system code correct, assuming system has not been set by user with -O.s[ystem], for translation of formats into RINEX given any SV filtering and the SVs present in the first observation epoch that is output; this eliminates the need to try to set the RINEX_SYSTEM flag (often incorrectly) at the various decoding points for Ashtech, Javad, Topcon, and BINEX formats 2004 Mar 12: typo in javad.h defining the hex value of Javad JPS/Topcon TPS message [rc] corrected (was 0x7273 instead of 0x7263; the typo prevented [rc] messages from being correctly identified and then decoded) modification to obs_arg() so that -O.s[ystem] option accepts a lower-case argument, though if lower-case, the arg is converted to upper-case modification to ephemeris_file_location() (and minor change to its call in qc_nav_files()) so that SV filtering (e.g. -G[list]) filters the qc ephemeris list, so that one gets a reasonable qc while doing SV filtering (without this the SV observations were filtered out, giving rise to missing observables on those SVs) 2004 Mar 9: first cut of a NavCom Technologies Inc. format translation, reading message 0xb0 for RINEX OBS, and 0x81 for RINEX NAV, though setting the antispoofing status of the SVs in the OBS file requires encountering an almanac 0x44 for subframe 4 page 25 2004 Mar 8: obs_epoch() modified so that millisecond resets are only accumulated if the observation epoch is within the time window for reading of RINEX OBS and MET data and ARGO format, obs_data(), met_data(), and next_ARGO_epoch() were modified to better keep track of whether an epoch was in or out of the specified time window when decimating by controlling the arg to clock_jump_search() option n_geos is now n_SBAS, and all codes references to "GEOS" are now "SBAS" 2004 Mar 5: update of extract_Trimble_rx_type() and extract_Trimble_ant_type() using Trimble DAT file format document, 30 June 2003 (most recent version just sent in by Brian Frohring @ Trimble) including test in parsing of Trimble dat file for new records 25, 30, and 31 — though these are not yet decoded 2004 Mar 4: addition of a new option, +doy, which converts the date in metadata dumps and certain other reporting to year:day-of-year formatting instead of the usual year month day-of-month; related changes to date_stamp(), dump_metadata(), dump_metadata_date(), and dump_metadata_rinex() indexing error for antenna height for Trimble DAT record 16.43 in decompose_Trimble_16() added test for vertical only in extract_Trimble_antenna_height() 2004 Mar 3: should now be able to override the GPS week with -week on any input format except for RINEX 2004 Mar 2: any observation decoding function using lli_cleanup() now has lli_L1 and lli_L2 set to zero at the start of each call 2004 Feb 20: first cut of a JPL "Soc" format translation; remaining issues are whether to pursue a duplication of the "csp" smoothing of 30-sec phase and pseudorange, the derived loss-of-lock indicator, sorting of the receiver types for snr flags, and the discrepancy with soc2rnx on the broadcast message's "codes on L2 channel" value 2004 Feb 19: fixed limit in decompose_Ashtech_SNV() to sort between GPS and GLONASS SVs (original limit would have disallowed a GLONASS #1, and turned it into a GPS #33, which is wrong)) 2004 Feb 11: in Leica_MDB_13_obs(), which decodes Leica MDB message 19 (compacted data), the RINEX LLI flag was incorrectly using bit 8 (antispoofing flag) of the 2-byte Chanstat word to set the L2 wavelength factor; now it is using bit 7 as it should updated list of recognized Leica reciever and antenna types in decoding of MDB records 4, 8, and 11 based on Leica's "System 400 Measurement DB, Projekt GPS System 400", Version 4.00, 11 Feb 2004, in teqc functions decompose_Leica_MDB_04(), decompose_Leica_MDB_08(), and decompose_Leica_MDB_0b() 2004 Jan 13: as requested, a new -igs option was added to suppress RINEX or user-supplied receiver or antenna designation verification with the internal IGS designation list (default is +igs, which does the usual verification) during the qc report, if there are no millisecond resets detected, the line reporting the average time between resets is now not skipped, but instead reports "Avg time between resets : Inf minute(s)" 2004 Jan 8: updated the IGS receiver/antenna/dome designations through to 30 Nov 2003 2004 Jan 6: added a few missing cases in check_interval() (maybe everything besides the FORMAT_IS_RINEX case should just be the "default" case, instead of being explicit) the tail end of obs_epoch_no_gps_week() has been split off as obs_epoch(), with a small change in epoch_clock_to_date(), and is now also called in obs_epoch_with_gps_week() to detect and track millisecond resets in those formats that have GPS week info and also have millisecond receiver clock resets (Trimble 4700 BINEX, Topcon TPS/Javad JPS) functions met_epoch_no_gps_week() and met_epoch_with_gps_week(), with new met_epoch(), were re-written to parallel the above — except that a few format translations that had included the receiver clock offset with the met_epoch_no_gps_week() (Trimble DAT, Leica LB2 and MDB) now use a fixed value of zero for the offset like used in the other formats using met_epoch_no_gps_week(); thus accumulated millisecond resets of the receiver clock will now not creep into any MET time tag 2004 Jan 5: modified decompose_Leica_MDB_02() because the user-supplied comment strings can have newlines in them; now calls new comment_w_newline() 2003 Dec 31: C/A pseudorange values for Topcon TPS/Javad JPS are now stored in a temporary buffer and in Javad_JPS_obs() the [RC] and [rc] messages are now forced to be read first, so if using message combinations where, for example, the phase values rely on the C/A code values, then translating with, say, -O.obs l1+l2 (i.e. RINEX C1 is not requested), then RINEX L1 and L2 are correctly extracted added code in next_Trimble_RS_232_record() so that if not using stdin, the read of RT17 format is attempted byte by byte when there are read errors 2003 Dec 30: slight improvement in Topcon TPS/Javad JPS SNR decoding — snr_map() now called for L1 (or L2) when S1 (or S2) is not being requested; has now been collapsed into the single decompose_Javad_snr() 2003 Dec 23: more cleanup for using obs_epoch_with_gps_week() and obs_epoch_no_gps_week(), especially for the Topcon TPS and Javad JPS code there are now only 6 instances of setting SET_GPS_WEEK outside of args.c, and these are in rockwell.c (2), ti.c (3), and trimble.c (1) — which hopefully should not cause any GPS week problems with the new code — but these should eventually be eliminated as well 2003 Dec 22: obs_epoch_clock_adjustment() has been replaced with obs_epoch_no_gps_week(), which essentially does the same thing but it written in a way that should be easier to maintain a new complementary obs_epoch_with_gps_week() replaces a couple of function calls where the GPS week is part of the current epoch time stamp (format and/or record dependent) and the initial GPS week is not being overridden by the user with the -week option met_epoch_clock_adjustment() has been renamed met_epoch_no_gps_week() to keep the parallelism with the new obs_epoch_no_gps_week() a new complimentary met_epoch_with_gps_week() to handle the few cases where the week of the MET data is explicit (e.g. BINEX, Leica MDB record 0x0e) all native formats with explicit GSP week information for the observation epoch should now be able to be overridden with -week (except for ConanBinary and TurboBinary, though this could be easily added if the need ever arises) 2003 Dec 16: added additional variables in teq.tr struct for use in obs_epoch_clock_adjustment() and binary_OBS() to reset the millisecond offset back to its last valid value if an epoch occurs with the same or earlier time as the last valid epoch; this epoch problem occurs most often in Trimble formats and has lead to bogus epochs and bogus sample intervals (with +meta) Note: There could be some missing development notes from Oct 2003 - mid Dec 2003 due to the move of the UNAVCO Facility from UCAR to UNAVCO Inc. 2003 Aug 22: modification to out_settings() so that if not doing qc, metadata extraction, configuration extraction, or verification and setting a stdout file with +out but not +obs, +nav, or +met, then any single RINEX file pointer in use is set to be equal to what was specified with +out 2003 Aug 20: added a special preprocessor condition in collapsed_raw_ephemeris() for extracting the TGD value when compiling on AIX 2003 Aug 19: a couple of minor typos in usage() for the case HELP_DIAGNOSTICS were fixed 2003 Aug 8: went back to skipping over the bulk of the memory cleanup in terminate() for Microsoft and Linux builds 2003 Aug 6: changed qc output message "|qc - header|" in qc_position_out() to be "|qc - supplied|" if setting antenna position with -O.px or -O.pg 2003 July 21: returned to skipping memory cleanup in Windows builds in terminate() changed all instances of RINEX header flag checking with rinex.out_X to rinex.in_X in rinex_end_of_header() and all_header_records(), which probably goes back to code changes that were missed on 5 Mar 2002 2003 July 16: added code for TPS/JPS messages [CE], [1E], and [2E] (like original [EC], [E1], and [E2], but SNR stored in 1/4 dBHz units) added code to ignore TPS internal messages [dC], [d1], and [d2] 2003 June 30: all cases of allocate() for strings were switched to using the SD() macro where possible multiplied by sizeof(sint1) 2003 June 27: epoch_passed_continuity() modified extract_root() was modified to add an extra character to the space name allocation for qc plot filenames 2003 June 26: option +svo generalized to also order the SVs in the qc ASCII time plot collapsed the epoch test for gaps and slips to a new function epoch_passed_continuity() in ion_obs(), pl_obs(), and mp_obs() and modified the code of the 25th to (hopefully) cover all situations where SV tracking of the receiver resumes prior to the qc computed rise time of that SV 2003 June 25: added storage of the SV set times in the qc QC_SV struct, which are computed in qc_satellite_elevation_crossing(); the SV set time is potentially used in ion_obs(), pl_obs(), and mp_obs() (to test for SV ion, "pseudorange - phase", and multipath gaps and slips) instead of the SV rise time when the last set time is later than the last rise time, i.e. the receiver seems to be tracking the SV after the SV has set below the horizon but before it has risen again above the horizon; this can be turned off by setting the define USE_SET_TIME to 0 in qc_obs.c and recompiling added option -bins that can be used to set ion, multipath, and SNR bins in the qc (i.e. auto sets -ion_bins, -mp_bins, and -sn_bins all to the same value) 2003 June 11: added case for TPS internal use message [dC] to be skipped; added -warn condition for the stderr warning message that is printed when any new TPS/JPS message is found changed all messages for all new or unknown records types for all formats to operate (now -warn suppression, some had been +diag) and similar message structure 2003 June 7: added the date stamp of BINEX 0x00 with +bcf output as a config comment (i.e. line starts with "#") 2003 June 6: first cut of new +bcf option to output BINEX 0x00 metadata as -B.xxx ASCII fields, which are also readable as normal config file input using -config; automatically handles some conversion between RINEX and BINEX metadata with rinex_to_binex_hdr() and binex_to_rinex_hdr() updated IGS receiver, antenna, and radome designations to listing for 30 May 2003 2003 June 5: added switch cases in binex_observables_7f_00() to additionally allow translation of Ashtech R-file and U-file formats to BINEX 2003 June 4: corrected minor typo in g_arg() for rt_dynamic_obs case constellation_total() in decompose_Leica_LB2_0c() now uses Leica_LB2_0c_constellation() rather than Leica_LB2_03_constellation() constellation_total() in decompose_Leica_MDB_13() now uses Leica_MDB_13_constellation() rather than Leica_LB2_03_constellation() constellation_total() in decompose_Leica_MDB_14() now uses Leica_MDB_14_constellation() rather than Leica_LB2_03_constellation() 2003 May 29: according to personal communication from Ashtech (Art Sauer), the Z18, G12, and GG24 all output the SNR in dBHz by default and the Z18 can only output SNR in dBHz; appropriate changes to Ashtech_rx_specifics() and Ashtech_snr() were made to reflect this to get the correct RINEX SNR 0-9 flag message in the OBS header (assuming a default setting in the G12 or GG24), though this requires the code to recognize the receiver type as ASHTECH Z18, ASHTECH G-XII, or ASHTECH GG24. 2003 May 27: added satellite system switch is qc_satellite_nav_update(), which seems to be necessary to avoid calling GPS NAV tests in GPS_NAV_times_make_sense() when doing a qc on a binary format which includes non-GPS navigation messages (e.g. GLONASS) changed qc_auto_find_nav_files() to using allocate() and deallocate() for temporary namespace instead of using a pre-set buffer size of BUFSIZ bytes for consistency with GPS and GLONASS, changed all names with "Transit" to "TRANSIT" added cases for newer formats in qc_file_list() (for doing qc on non-RINEX input) 2003 May 23: minor text typo in nonmatching_GPS_IODC_IODE() fixed all fopen() calls for writing and appending now use "wt" and "at" for Windows builds (Borland and Watcom) slight modification of low dBHz mapping in snr_map(), plus corresponding RINEX OBS comment created in snr_comment() 2003 May 22: new Trimble_rx_specifics() which serves a similar role as Ashtech_rx_specifics(), i.e. identifying any receivers which now store SNR values as dBHz instead of the old Trimble AMU; test of receivers using dBHz has been removed from process_input() (2003 May 15) and now occurs in Ashtech() (calling Ashtech_rx_specifics()), Trimble() (calling Trimble_rx_specifics()), and BINEX() (calling Ashtech_rx_specifics() and Trimble_rx_specifics()) updated IGS receiver, antenna, and radome designations to listing for 19 May 2003 2003 May 20: Ashtech "ireg" SNR value is now converted to dBHz for Ashtech Z-12 data formats (using Ashtech's 16 Dec 1997 formulae) if the receiver type is recognized as ASHTECH Z-XII or ASHTECH Z-12; RINEX SNR 0-9 flag is mapped using new snr_map; old Ashtech_specifics() was changed to Ashtech_rx_specifics(), is now called after each possible finding of a receiver name in the Ashtech code, and called initially prior to processing any Ashtech format; part of the new role of Ashtech_rx_specifics() is to identify a Z-12 receiver for conversion of the ireg SNR to dBHz The only Ashtech code now not using a Ashtech_snr() call in snr_map() (aside from a U-file, which always has the SNR as dBHz) is the code for B-file versions 1 and 2 — but this B-file code is not complete anyway. 2003 May 19: major changes for obtaining the RINEX SNR 0-9 flag for all formats of pertinent receivers with SNR in dBHz: now use new snr_map() which uses a scaling introduced for Leica's L2R2 code in Jan 2002; this includes Ashtech micro-Z, Trimble receivers after series 4000 (e.g. 4400, 4600, 4700, 4800, 5700, 7400), Leica LB2 and MDB formats, Javad JPS and Topcon TPS formats, CMC Allstar binary, and TI-4100 formats 2003 May 15: changed binex_7f_00_snr_map() to call Ashtech_snr() for Ashtech id, and moved test for micro-Z receiver type to process_input() 2003 May 12: changed the enum for NON_STANDARD_RINEX_LINE_LENGTH to NON_STANDARD_RINEX_LINE_ENDING, changed its corresponding message in rinex_read_failure() added a case in rinex_read_warning() for the above enum, and added a test in get_next_rinex_line() if the end of file has been reached and if using +relax to report and fix this condition 2003 May 8: added a file pointer argument to scan_config_line() which now looks for a '#' character and interprets the rest of the line as a comment, but this only works in general if the config parameters are being read as a file, i.e. if the file is input as a command line string as `cat config` the first '#' character in such a file will interpreted as a filename 2003 May 6: file pointer argument of hdr_binex_out() call in window_OK() fixed 2003 Apr 29: Ashtech_U_snr() was generalized to be the new Ashtech_snr(), which handles both the original Ashtech ireg SNR values and the micro-Z ireg dBHz values, assuming that either the file format is a U-file (micro-Z only) or the receiver type is identified as ASHTECH UZ-12 or ASHTECH MICROZ; this new function now does all the RINEX SNR 0-9 flag mapping for Ashtech formats 2003 Apr 23: increased the default SV tracking maximum for Javad JPS/Topcon TPS receivers from 18 to 20 2003 Apr 21: new_fmod() did not work correctly if the y argument was less than 1; a new function, dec_fmod(), replaces it (since this is only used in sample decimation) and hopefully fixes the problem (tested OK on Solaris Sparc and Linux x86) 2003 Apr 16: Ashtech_MBEN_snr() should now only attempt to convert Ashtech MBEN SNR values to dBHz when the receiver is recognized as a Z-12 2003 Mar 31: fix of Ashtech_phase() to get the correct byte from MBEN record for converting to the RINEX SNR 0-9 flag (should be OK except can't check the L2-codeless block — missing documentation) 2003 Mar 24: fix of Topcon TPS/Javad JPS format reader to deal with "NaN" values for GLONASS slot numbers in [NN] message and constrain GPS PRN to be 1- 32 (i.e. disallow GPS PRN 33-37); also limited the number of channels in for reading this format to be max of 32 (see definition of typedef struct Javad_details) 2003 Mar 12: next_Ashtech_stream_record() was modified to not assume 2 spare bytes in MCA, MPC, etc. records prior to checksum (as incorrectly described in some Ashtech documentation) which allowed for correct extraction of P2 smoothing correction qc indicator change: 'a' indicates C/A and L1 with antispoofing on, 'c' indicates C/A and L1 with antispoofing off or not known, ',' indicates C/A only with antispoofing on, '.' indicates C/A only with antispoofing off or not known 2003 Mar 11: obs_interval() needed another little fix 2003 Mar 7: first working cut for Topcon TPS/Javad JPS format reader for both big- and little-endian processors (last major bug on this was the multi-byte integer "NaN" values in little-endian) 2003 Mar 4: the leap second offset (GPS to UTC) is now treated as a state variable like the current GPS week value; e.g. setting either O.leap or N.leap sets the other to the same value and during translation of a raw data format encountering the leap second offset sets this state variable unless otherwise overridden by the user using O.leap or N.leap 2003 Feb 6: obs_interval() was modified slightly to skip over a RINEX OBS header with a zero value in the INTERVAL field if it is being overwritten with -O.int rather than aborting. 2003 Jan 14: added two new data indicators for the qc for C/A pseudorange (RINEX C1) being the only observable for an SV in a epoch: 'a' indicates antispoofing on, 'c' indicates antispoofing off or not known 2003 Jan 13: changed the conditional test in nav_out_delta_UTC() for reversing UTC model parameters A0 and A1 to be if fabs(A0) < fabs(A1) and fabs(A1) >= 2^-30 or if 0 == fabs(A1) and fabs(A0) < 2^-30 (this will fail when valid A0 and A1 are A0 = 0 and A1 >= 2^-30, though this situation should be rare) 2002 Dec 16: for Ashtech U-file data mode 7: added check in decompose_Ashtech_U_V7() to skip record if spare bit is set (as suggested in documentation), and added check in Ashtech_U_V7_obs() to insert RINEX OBS comment stating smoothing condition of pseudoranges 2002 Dec 5: in nav_processing(), a special check for the GPS week was introduced for ConanBinary ephemeris records 2002 Dec 3: in NMEA_XDR_met(), a test was added prior to the normal strtok() for the sensor ID field to allow for a zero-character sensor ID field a bypass of obs_epoch_check() for the initial epoch of ConanBinary in binary_OBS() was introduced 2002 Nov 7: yet another code tweak in obs_epoch_check() for data decimation 2002 Nov 1: solution for first character of project field in YREC of Ashtech micro-Z U-file format (sometimes printable and sometimes not) 2002 Oct 31: new documentation from Ashtech for micro-Z U-file indicates that the operator field of the YREC now contains binary information; no clue on non-printable characters in project field of YREC 2002 Oct 24: Ashtech micro-Z U-file for "data mode 7" completed, though it does not account for occasional non-printing characters that are now showing up in the U-file YREC-record and then are put into the RINEX OBS or MET header; fixed a bug in the extraction of the operator information from the YREC record added decoding for Leica MDB record 11 (0x0b) 2002 Oct 23: first cut at including translation of Ashtech micro-Z U-file for "data mode 7" using modified record 'BR\00\07' (compressed version of 'BR\00\09'); some odd problems 2002 July 9: additional logic in obs_processing() to deal with the metadata extraction for ConanBinary (see 2002 Mar 18) 2002 June 14: change to the math logic added on 2002 Apr 15 (test whether predicted GPS time of CMC record 23 is within 1 msec of 604800 seconds) because original math wouldn't work correctly on Intel processors (go figure) 2002 May 13: in met_out_sensor_mod_type() and met_out_sensor_pos_xyzh() went back to old code of allowing multiple elements per header 2002 May 8: changes to decompose_Leica_LB2_85() for better extraction of the site ID string (apparently, this can be shorter than 8 characters) changed test in obs_out_start() to test obs.basic.rinex.opt_X for the RINEX_SESS_START condition (rather than set_X), which also required setting opt_X in obs_arg() for RINEX_SESS_START (see also 2001 Dec 10 entry) 2002 May 7: a bit more tweaking in obs_out_data() to deal with event flags 3 and 5 added case in obs_data() to allow cycle slip repair (event flag = 6) to have same epoch time as preceding epoch time (as in RINEX example file in Table A7: GPS Observation Data File) 2002 May 6: added kinematic boolean in obs_out_data() to (hopefully) correctly identify -O.mov 1 cases 2002 Apr 29: change in obs_out_data() to reject any RINEX OBS data observable which does not fit into the F14.3 ASCII format without overflow; a message to stderr is reported for any observable thus rejected addition to out_settings() to set the output file name to "stdout" for any output that is stdout change from passing a pointer to FILE to FILE_INFO in obs_out_data(), met_out_data(), nav_out_data(), obs_native_to_RINEX_out(), met_native_to_RINEX_out(), and nav_native_to_RINEX_out() so that the file name can be accessed if needed 2002 Apr 23: slight change to CMC_Allstar_23_obs() for extraction of cycle slip detected flag in record 23 for RINEX LLI flag (previous code could interpret a "not ready" status as a cycle slip detection) 2002 Apr 22: change in rinex_version_type() to not reset the satellite system flag when splicing or editing the satellite system flag with RINEX files 2002 Apr 16: cleanup of the CMC code to remove the failed attempts used to try to eliminate the n x 175-ns clock resets between epochs (this gets the code looking more or less like the original CMC code, without all the extraneous preprocessor logic) 2002 Apr 15: change to decompose_CMC_Allstar_23 so that if the predicted GPS time of record 23 is 604799.9995 seconds or higher, this is interpreted as the epoch for the start of the next GPS week 2002 Apr 3: first successful compile and run of the code on Mac OSX, compiling with
ti.o definition of _TI in section (__TEXT,__text) /usr/lib/libm.dylib(curses.o) unused definition of _TI /usr/bin/ld: warning unused multiple definitions of symbol _err "link editor" definition of _err in section (__DATA,__common) /usr/lib/libm.dylib(err.o) unused definition of _err The OSX build was then tested doing a translation of a Trimble DAT file to RINEX OBS amd NAV, and then a successful qc of the RINEX. 2002 Apr 2: added new function Ashtech_MBEN_snr() to test conversion of the ireg value in a Z-12 B-file to dBHz following the formulae in the Rex Dwyer 16 Dec 1997 Ashtech memo — for test purposes only! first test compile on Mac OSX, but /usr/bin/cc fatally errors out on every multi-dimensioned character array in the code 2002 Mar 20: change of which integer counter is used in probable_XDR_sample_interval() to determine probable XDR sample interval for Ashtech XDR records in reading stream data 2002 Mar 18: added additional logic in binary_OBS() to not skip reading the observables of decimated epochs in ConanBinary, with the epoch skipping check now occurring in obs_processing() for ConanBinary (simple changes now for any other format using incremental changes per epoch like ConanBinary) 2002 Mar 15: the function decompose_Leica_LB2_85() had an invalid resetting of the flag teq.tr.rx.Leica.ToW; even though the LB2 0x85 may have an invalid time-of-week, there may be a correct setting from an earlier 0x01, 0x02, 0x03, or 0x0c message; this has been broken since 7 June 2001 2002 Mar 14: possible incorrect pointer reference (compiler dependent) fixed in nav_out_ion_alpha() and nav_out_ion_beta() 2002 Mar 12: functions for MET extraction from Leica MDB record 14; hook functions for Leica MDB records 16 and 17 (no reading done) updated IGS receiver, antenna, and radome designations to listing for 5 Mar 2002 minor cleanup for Borland, HP-UX, and IRIX compilation 2002 Mar 11: final cleanup from March 5 (I hope) slight change for reading of Leica MDB record 8 antenna number in decompose_Leica_MDB_08(); and added reading of record 8 antenna type (name) in decompose_Leica_MDB_08() if sensor type is unknown/user defined (type = 0) 2002 Mar 8: collapsed main file loop in main() to new filename_loop() more code collapse with new special_processing() 2002 Mar 7: more cleanup from March 5 2002 Mar 6: slight changes to process_rinex_obs_end(), process_rinex_nav_end(), and process_rinex_met_end() to account for +v, +meta, and splicing operations major code scouring to get all the RINEX header reading functions working on the same logic 2002 Mar 5: collapsed the data tests at the end of process_rinex_obs(), process_rinex_nav(), and process_rinex_met() to three new functions: process_rinex_obs_end(), process_rinex_nav_end(), and process_rinex_met_end() (with some additional work, these could be collapsed down to one function, along with some code collapse with all_header_records() and rinex_v2_end_of_header()) delved into the long-dreaded unscrambling of the rinex.set_X and rinex.opt_X flags to replace with rinex.set_X, rinex.in_X, and rinex.out_X flags (this changes so much code that teqc may never work right again! ... well, ok, but it will take a while); still some residual rinex->opt_X logic in misc.c and teqc.c where opt_X has all flags unset back to 0 or one or more flags in it unset back to 0 2002 Mar 4: see 2001 Mar 14: also needed to change the call of obs_out() and met_out() to be:
2002 Mar 1: major change in the structure of internal RINEX comment containment (in struct basic_info), necessitating call changes in rinex_comment(), nuke_comment(), and rinex_out_comment() and all other code locations using RINEX comments explicit block added to rinex_comment() to disallow any additional comments to be added to RINEX GPS NAV, GLONASS NAV, GSSP NAV, or MET files after the END OF HEADER has been output (to totally eliminate the possibility of post-header comments during, say, splicing operations of these file types) modification of nav_ion_alpha(), nav_out_ion_alpha() nav_ion_beta(), nav_out_ion_beta() nav_delta_UTC() and nav_out_delta_UTC() to allow for multiple ION ALPHA, ION BETA, and/or DELTA-UTC: A0,A1,T,W in RINEX GPS NAV headers modification of nav_corr_to_system_time() and nav_out_corr_to_system_time() to allow for multiple CORR TO SYSTEM TIME in RINEX GLONASS and GSSP NAV headers modification of rinex_leap_seconds() and rinex_out_leap_seconds() to still allow for multiple LEAP SECONDS in RINEX OBS headers (for the extremely rare cases where this might be applicable), but disallow in all RINEX NAV files after the header 2002 Feb 28: introduction of a new qc option +eep ("every epoch point-position") which does a pseudorange point-position at every possible epoch (i.e. enough SVs being tracked, etc.), and produces a normal qc short report; the original related options +eepx and +eepg continue to spew the point position solution to stdout which replaces the qc short report output; recommendation is to use +eep when doing a qc of an mobile antenna, such as would be found on LEO (low-Earth orbiting) platforms added standard test in nav_processing() to eliminate duplicate navigation messages for RINEX NAV files, mainly to reduce duplicate messages during splicing operations added deallocation of any teq.tr.eph_list in terminate() (which has been overlooked until this point) 2002 Feb 27: fairly extensive changes in logic to control the outputting of header lines for ION ALPHA, ION BETA, DELTA-UTC: A0,A1,T,W, LEAP SECONDS, CORR TO SYSTEM TIME, MARKER NAME, MARKER NUMBER, SENSOR MOD/TYPE/ACC, and SENSOR POS XYZ/H in all RINEX files, especially to get correctly formatted output during splicing of RINEX 2002 Feb 26: addition in obs_epoch_check() to better determine the nominal sampling interval in the presence of an early 1 millisecond clock reset, for sampling intervals down to 5 milliseconds (200 Hz) added case for Trimble antenna "GZ" in extract_Trimble_ant_type() = "TRM41249.00" for Zephr Geodetic when decoding DAT files 2002 Feb 19: added test in obs_bs_flush() for non-zero header elements when outputting post-header comments (i.e. +phc) during splicing 2002 Feb 13: likely minor bug in the calculation of possible epoch during a qc in qc_short_report(), which would have caused the count to be one less than the real maximum for about 50% of the cases of non-steered receiver clocks (depending on receiver clock drift relative to real GPS time) fixed some minor formatting problems in the qc_out.c functions for negative horizon and/or mask angles 2002 Feb 11: all memory cleanup in terminate() is bypassed for Borland and WatCom builds; Linux x86 build continues to just bypass the qc memory cleanup change in rinex_comment() for the post-header comments (i.e. -phc) to skip comments only after there is both a RINEX header start and end 2002 Feb 8: changed the conditional test in nav_out_delta_UTC() for reversing UTC model parameters A0 and A1 to be if fabs(A0) < fabs(A1) and fabs(A1) >= 2^-30 or if 0 < fabs(A0) and fabs(A0) < 2^-30 (this will fail when valid A0 and A1 are A0 = 0 and A1 >= 2^-30, though this situation should be rare) completion of prototype code for reading Leica MDB record 22 (0x16), and testing on big- and little-endian processors added options +dump_ion and +dump_utc which send all changes in encountered instances of the ionosphere model or UTC model parameters, respectively, to stderr (or whatever +err might be reassigned to be) 2002 Feb 4: prototype code for reading Leica MDB records 20 (0x14) and 22 (0x16), though it is unclear from the documentation how to reconstruct the UTC model parameters A0 and A1 from record 22 2002 Feb 1: prototype code for reading Leica MDB records 13 (0x0d), 26 (0x1a), and 28 (0x1c) and hooks for records 20 (0x14) and 22 (0x16) 2002 Jan 31: changed format_settings() to include just phase and pseudorange (i.e. "l1+l2+ca+p1+p2") as default observables for R-file translation (like with the U-file translation) 2002 Jan 23: changed Leica_LB2_snr() to new RINEX SNR flag scheme submitted by Frank Pache (Leica-Geosystems), which affects the value used on LB2 and MBD translation; corresponding RINEX header comment in binary_OBS() changed 2002 Jan 16: testing of a bypass of free_qc() in the Borland build: Doug H. has a dataset that has a memory fault at the end of a qc run (on a Win2000 SP2) using the 15 Jan build, though the same dataset works OK on the UNAVCO development Win2000 SP2 machine. 2002 Jan 15: included a test for qc->plot in free_qc() prior to calling close_qc_plot() and free_qc_plot(), because DO_QC_PLOT_FILE is always automatically set when initialize_udv() is executed from initialize() bypass of free_qc() in the Linux builds (still some mystery here) With these changes, crash-free and correct qc runs occur on all the test cases supplied by Doug Hogarth (problems with previous Borland build) and Ole Hansen (problems with previous Linux x86 build). 2002 Jan 14: modification to nav_out_corr_to_system_time() to have it output the correction to system time in correct Fortran-ese D19.12 2002 Jan 11: added a test in GPS_SV_geocentric_position() to detect, report, and skip any GPS ephemeris with a semi-major axis <= 0 added a couple of missing deallocate() calls in free_qc() (i.e. ihp, qc->GLONASS), plus new free_qc_plot() and free_plot_file() 2002 Jan 10: returned to skipping the final memory deallocation in terminate() for Linux builds; this seems to eliminate the occasional memory fault caused by executing terminate() at the end of some qc runs 2002 Jan 9: changed the definition of round() to explicitly force each argument to be a 8-byte float (though these should have bee, implicitly or otherwise, treated as 8-byte floats by the old definition), in the hopes of totally eliminating a repeat of the dynamically-linked DEC build problem reported by JPL with the 2001Nov28 beta(2) release while at it, also changed definition of sign() to also explicitly force 8-byte floats 2002 Jan 4: added a test to check of valid L1 and L2 observables when doing the S1 and S2 qc stats in qc_satellite_obs_update() 2001 Dec 21: added teqc executable, version, and build output to the_details() function (which is accessed with the ++details option) 2001 Dec 14: added FILE_INFO * parameter to nav_processing() and any functions that call it split off reading of data in nav_data() as a case in nav_processing() changed return code in nav_filtering() when TRUE is returned by filter_system_in_nav() moved RINEX_OUT flag from teq.main to teq.edit; added test for RINEX_OUT in rinex_version_type(); added test for BINEX_OUT or NATIVE_OUT in out_settings() before forcing a RINEX_OUT condition 2001 Dec 12: minor error in obs_types() on 7 Dec in that it would try to read one too many lines if the number of observables was 9 split off last portion of nav_processing() to be new nav_filtering(), to parallel code for RINEX OBS and MET 2001 Dec 11: included new code for Leica_LB2_snr() (computes RINEX SNR 0-9 flag for LB2 0x03, 0x0b, 0x0c and MDB 0x13, 0x14) based on email from Frank Pache at Leica, but it's "if"ed out pending verification from Frank 2001 Dec 10: included test in rinex_leap_seconds() that if a change in LEAP SECONDS (e.g. RINEX OBS file splicing) is detected with -phc option set, then the user is informed that the second LEAP SECONDS value is deleted test in rinex_leap_seconds() to skip over this header field if it cannot be "fscan"ned and the RINEX file is OBS with just GPS (system == 'G') or is GPS NAV additional test in rinex_version_type() to allow splicing of RINEX OBS files with SV filtering (e.g. -R) and system editing (i.e. -O.system) of the resulting output (e.g. splicing mixed SV systems, editing out GLONASS, and setting new system type to 'G' = GPS) added test in obs_out_data() to see if the time of the first observation epoch matches that reported in TIME OF FIRST OBS in RINEX OBS file being output and inform user if there is not a match added test in obs_out_start() to force TIME OF FIRST OBS in RINEX OBS file being output to match starting epoch of window when time windowing is being used but -O.st is not modified decompose_Ashtech_U_Y() and decompose_Ashtech_U_VH() to extract the "NAV" portion of the firmware version (rather than the "BOOT" portion) of Ashtech U-file Y-records or VH-records 2001 Dec 7: modified obs_out_obs_types() and met_out_obs_types() to correctly output the # / TYPES OF OBSERV header lines in RINEX OBS and MET files if the number of observations > 9 collapsed reading of # / TYPES OF OBSERV header lines in obs_out_obs_types() and met_out_obs_types() to new obs_types() which now allows the number of observations in a RINEX OBS or MET file being read to be > 9 minor cleaning up of obs_type() function declaration in extract_types_list (to make consistent with that in obs_types()) 2001 Dec 6: logic for detecting change of RINEX OBS header leap seconds in rinex_leap_seconds() was fixed (encountered, e.g., if splicing two RINEX files of mixed constellations, e.g. GPS + GLONASS) added in-line header buffer in rinex_out_leap_seconds(), in case of the extremely rare occurrence of splicing two RINEX OBS files with differing leap seconds in the headers (splice just happens to span a leap second change) corrected loop indexing in obs_obs_types() and met_obs_types() to correctly detect a change in ordering of RINEX OBS or MET observables (mostly for splicing) added additional code in obs_obs_types() and met_obs_types() to correctly deal with a change in the number and/or type of RINEX OBS or MET observables when splicing 2001 Dec 5: removed some debugging comments to stderr that were in set_obs_obs_out() (which were put in around Nov 20) 2001 Dec 4: test function adjust_start_time() which tries to guess at the start time when doing decimation of native format data, included in binary_OBS() and binary_MET() prior to the any_initial_epoch() call which set the final windowing parameters, included in implied_window_limit() after extracting the start time of a RINEX OBS or MET file -> not needed if it is assumed that windowing operation takes place first, and then decimation phase calculations in Leica_LB2_0c_obs() now include the user clock time of week - channel time base value - offset from channel time base value correction described in the Leica LB2 ICD for decoding record 0x0c 2001 Dec 3: added default receiver types for output to RINEX in format_settings(), though these do not conform to the specific IGS designations (because the specific receiver type is still unknown) 2001 Nov 29: changed variable n_samples in spew_AOA_TB_LC() from a char to an unsigned char collapse of all static variable instances of meters_per_CA_chip, meters_per_P_chip, meters_per_L1_cycle, meters_per_L2_cycle, code_phase_to_meters, L1_to_L2 to global variables in aoa.c, ti.c, leica.c, cmc.c, and binex.c 2001 Nov 28: finished compiler warning cleaning for SGI IRIX build added A0 and A1 test and swap if abs(A0) < abs(A1) in nav_out_delta_UTC() which will not only fix the occasional A0/A1 switching in some Trimble firmware, but will also allow a corrected A0/A1 if using teqc as a RINEX-to-RINEX filter on a preexisting RINEX NAV file; a notice message is sent to stderr if a swap occurs 2001 Nov 27: started compiler warning cleaning for SGI IRIX build 2001 Nov 26: finalized Ashtech_U_snr() for assigning the RINEX 0-9 flag to the Ashtech U-file SNR dBHz values change to rinex_out_version_type() to output the latest RINEX version number (handled by teqc) for each RINEX file type in any RINEX-to-RINEX filtering (rather than version of original input file); does not effect original reported version with +meta or +v options fixed function return types for filter_monument_number() and filter_monument_name() 2001 Nov 21: due to other logic changes, implied_window_limit() required another logical condition to allow delta windowing (+dX or -dX) to work without additional windowing options on reading RINEX changed nulling of flags in process_input() to be clean_rinex_flags() instead, with eliminated the need to do the maximum test in constellation_array() put in place on 20 Nov, and (as a backup) put in a test for the satellite data array accessing in rinex_constellation_obs() before calling obs_scan() (though, if everything is OK, this shouldn't be needed) 2001 Nov 20: changed memory allocation in constellation_array() to use the maximum of the either the input or the output observation list (rather than the output list, though this is just a temporary fix until resolving the nulled flags problem introduced on 27 Aug 2001) fixed data type indicator in call to obs_scan() to use the input data type rather than (incorrectly) the output data type 2001 Nov 19: generalized call to binex_hdr_message_00_field() to be the inverse of extract_binex_00_field() corrected missing 2nd arg in using rin_out_standard_header() function pointer in rinex_v2_end_of_header() 2001 Nov 16: changed binex_hdr_message_00() to be more explicit about which of the remaining BINEX 0x00 fields were being skipped 2001 Nov 14: new fix to string_to_date() because the fix on 12 Nov caused a core dump if there wasn't a decimal point (jeez!) test to skip any Ashtech U-file V-record that has an "adjusted week number" of zero (the phase and pseudorange data don't look reasonable anyway) included checksum for Ashtech U-file V-record in next_Ashtech_U_record(); RINEX SNR 0-9 flag for V-record in Ashtech_U_V_obs() 2001 Nov 13: rollback of some debugging code for Ashtech U-file translation in next_Ashtech_U_record() 2001 Nov 12: assignment error in rinex_version_type() to basic->rinex.fhm_X used inclusive-or (|=) rather than direct assignment (=) which did not allow splicing situation to be detected in obs_out, nav_out, and met_out new switch logic fix to string_to_date() to allow for a windowing string to end in a decimal point test for positive RINEX OBS interval in obs_out_interval() test whether same RINEX OBS interval has been output already in obs_interval() change to comment for -phc option in obs_bs_flush(), and now uses the f2i() function 2001 Nov 2: added case for KZ in extract_Trimble_ant_type() to be "UNKNOWN EXTERNAL" 2001 Oct 16: switched order of reading UTC model parameters A0 and A1 for Trimble DAT record 15 in decompose_Trimble_15() 2001 Sep 13: added comment output in decompose_Trimble_19() for external, manual, and RS232 events if detected in Trimble DAT record 19 (event marker) 2001 Aug 28: first cut of translation for Ashtech U-file (still to go: record checksums, V-record SNRs, D-record) 2001 Aug 27: collapsed RINEX flag initialization into null_rinex_flags() and added a call to this function for all RINEX types in process_input() after any pre-run on a RINEX file (for decimation, windowing, etc.) 2001 Aug 22: reading of MDB records 2, 4, 8, 9, and 10 for RINEX metadata 2001 Aug 21: split of LB2 and MDB parsing logic, and establishment of autodetection of MDB file structure in id() 2001 July 31: minor error introduced on 12 June had basic->rinex.fhm_X being IOR-ed in rinex_version_type() before the pointer basic was assigned, which caused a memory fault on Linux systems when trying to read a RINEX file 2001 July 26: changed rinex_out_marker_name() so that the initial RINEX OBS (and MET) marker name lines use the string supplied by the option -win_mo so that -O.mo is not also needed to in order to get a correct header same type of change for rinex_out_marker_number(), to use string supplied by -win_mn so that -O.mn is not also needed to be used 2001 July 25: minor bug fixes for compiling with Borland and WatCom 2001 July 24: removed some of the repetitive testing for each epoch in obs_out() by introducing some static booleans added new "windowing" capability with options -win_mn and -win_mo[nument] (window on some monument number and/or monument name, respectively) both of which are followed by a character string; these only allow data for RINEX OBS when the supplied string exactly matches the initial characters of the current monument number (up to 20 characters) and/or monument name (up to 60 characters) 2001 July 9: reinstated code block on experimental Trimble DAT record 0 and 7 decode exclusion of BINEX input from GPS week check in GPS_NAV_times_make_sense() 2001 June 18: replaced header_description[] with new rinex_header_label[] which uses obs_index[], nav_index[], and met_index[], new RINEX flag values (see flags.h), and new f2i() function; this frees up 6 bit flags for moving to RINEX version 2.20 2001 June 15: the isNaN() function is reduced to just a 1-byte test, which will eliminate all IEEE 754-1985 +-NaN, +-Inf, the "indeterminate" value, and many extremely large normalized floats with the -NaN_obs option 2001 June 14: tested isNaN() with -NaN_obs option on TurboBinary file containing a NaN observable on Solaris Sparc, Solaris x86, and Linux x86; the file for EISL send by Dave Stowers (JPL) doesn't seem to contain an Inf observable, so this can't be tested yet 2001 June 13: introduced a replacement function isNaN() to use in place of the standard isnan(), which will determine if the 8-byte quantity is a IEEE 754-1985 +-NaN, +-Inf, or indeterminate value (i.e. not -0, +0, or positive/negative normalized or denormalized floating point number) 2001 June 12: cleaning up of some RINEX flags in flags.h and which bit flags they control 2001 June 8: added calls to binary_MET() in decompose_Trimble_9() and decompose_binex_7e() 2001 June 7: for Leica LB2 and MDB format translation, changed approximate ToW to exclude record 0x85 by setting the ToW to be -1, and an initial setting of the ToW to -1; a value other than -1 is needed before an ephemeris is output, usually requiring a data record: this should correct the problem where ephemeris records were being output immediately after a 0x85 record, resulting in a approximate ToW value that was too small (by several hours) for some RINEX navigation messages 2001 June 6: added a new default set_types() for the Trimble download case (DAT format) in format_settings() which does not have L2-Doppler (RINEX D2) since DAT record 17 does not have this observable major re-org of MET handling, to more closely parallel the procedures for OBS handling, with calls in RINEX met_data() and binary format routines to met_processing(), which then calls met_no_data() and met_filtering(), though some work still needs to be done to met_data() for windowing, decimation, etc. Part of this involved renaming some functions:
added a BINEX exclusion in met_out_sensor_mod() and met_out_sensor_pos() 2001 June 4: fixes to obs_obs_types() and met_obs_types() to allow the options -O.rename_obs and -M.rename_obs to work again (though these options are still dangerous and should not be used unless you know what you are doing) 2001 June 1: change in id() to better automatically distinguish ASCII format RINEX and ARGO files from binary format files minor fix in obs_arg() for O_def_wf to allow a setting of -O.def_wf 1 2 2001 May 30: for qc of "geostationary satellite payload" data, added a case in open_qc_compact_plot_file() added an initialization loop in qc_compact_file_allocation() for the plot file data and flags, to prevent spurious values in the plot files when the total number of SVs being observed increases 2001 May 29: for Ashtech B-file translation, eliminated all cases of supplying a fake L2-Doppler (RINEX D2) from L1-Doppler added new option, +rds, "reverse Doppler sign", which can be turned on to reverse the input Doppler sign upon output 2001 May 25: for CMC binary reading, in decompose_CMC_Allstar_23() eliminated the default setting of the sample interval to 1 second (needed when we were trying to use the clock drift, etc.), so now +meta will return the correct minimum sample interval if it is greater than 1 second updated IGS rx/ant/dome designations to 27 Apr 2001 table 2001 May 21: minor changes to fp_settings() to further sort out the output file pointers for BINEX, allowing the user to use +out, +obs, +nav, +met in any combination due to the WatCom compiler not recognizing cases on function names, had to change all the the *_mGFZi() names to *_mGFZ_i() (none of these are currently being used anyway) 2001 May 18: the algorithm for attempting to salvage corrupted Ashtech B-files was improved in next_Ashtech_dld_B23_record (which is still turned on with +Ashtech_B_file_adjust as before) modified the conditions for setting the output file pointers for BINEX in out_settings(), though the logic still might not be right for call cases 2001 May 17: the algorithm for determining outliers in the linear system for the point-position was found to be unstable on Linux x86, and changes were made in find_position() to reset the mean closer to zero. 2001 May 16: limits for the orbital path fit window, qc->ws->t[], were not initialized and this was causing problems on Linux x86, so these are now set initially to zero after memory allocation in initialize_qc_ws() 2001 May 15: first cut for decoding Leica LB2 0x0f (using Leica System 400 Measurement DB Projekt GPS System 400 Version 2.8 2 Feb 2001) — which is an ephemeris record essentially like 0x88 — though this record designation is in conflict with Leica LB2 ICD, Version 1.3, Rev D, 17 Aug 2000 where 0x0f is for RTCM messages 2001 May 14: updated Leica_LB2_03_constellation() and Leica_LB2_03_obs() to account for Doppler data (based on Leica LB2 ICD, Version 1.3, Rev D, 17 Aug 2000) change to Ashtech_BEN_block() to correctly extract the Doppler values by fixing the offset when pseudoranges are requested first cut code for decoding Leica LB2 0x13 record (uncertain about the wavelength factor bits, though) 2001 May 11: raised maximum allowable number of SVs from 12 to 24 for Leica LB2 0x03 record in decompose_Leica_LB2_03() correction of where to extract initial position block from Leica LB2 0x85 in decompose_Leica_LB2_85() (1-byte error in offset was probably introduced when switching over to the new extraction methods) 2001 May 10: some minor cleanup for Kernighan/Ritchie compiling on HU-UX splitting off of RINEX startup in process_input() to be in separate RINEX() (with the plan to make this someday analogous to the layout of ARGO() and associated functions) slight re-ordering of the memory deallocation in terminate(), which may have eliminated the crash/illegal instruction message that occurs sometimes on the Windows builds (e.g. Borland build with some qc runs); this also seems to eliminate the need to do the strange null character output to get the Linux build "unstuck" introduced on 31 Jan 2001 2001 May 9: changed Ashtech_lli_cleanup() to be lli_cleanup() (more of of a general utility) first complete cut of decoding of Leica LB2 0x0c observation record 2001 May 8: added pseudorange_offset to pseudorange observables in Ashtech_R_23_obs() for Ashtech R-file translation, though it is unclear whether this is ever needed (i.e. needed if the receiver does not have clock steering) changed system_time to recognize Windows 2000 OS case 2001 May 1: collapsed all turning on of any antispoofing bit-2 of the RINEX "LLI" flag on the non-phase (pseudoranges, doppler, SNR) observables in Ashtech_lli_cleanup 2001 Apr 24: cleanup of usage() 2001 Apr 10: change in main() to capture the return value of process_input() when using stdin, for the subsequent switch when doing qc mode 2001 Apr 5: fix in next_Ashtech_R_record() (reading Ashtech R-file) to do a test for record lengths for records 6 and 23 to prevent a memory overflow, and if file reading, a rewind of 1 byte if there is a bad record read (so the file pointer is only advanced by one byte from the failure attempt to the next attempt); included test for even length in Ashtech_cks16() prior to calling cks16_brief() 2001 Mar 16: change to initial parsing logic in next_Ashtech_stream_record() to allow for incomplete records prior to the first complete stream record (old logic read data in blocks of 7 bytes searching for something that matched "$.....," before starting) 2001 Mar 14: uncovered major bug lurking in all_header_records() (check for all non-optional header elements in various RINEX, and fill-in if possible from edit info): *rin_out was declared to be
rather than
with the call being
rather than
(Hard to guess how many weird problems this was occasionally causing, including a post-Oct 2000 segmentation fault in the situations where the target file is a RINEX NAV or MET file with an incomplete header, but is being correctly edited with header options — related to the logic changes made 11-16 Oct 2000 for adding optional header metadata to RINEX. This bug was introduced when the calls to obs_out, nav_out, and met_out where changed sometime in the past (10 Jan 2000?).) 2001 Feb 22: it appears that the slew correction for phase suggested by CMC in record 23 really screws up the RINEX L1 for high-precision processing, so we're back to the original non-slew and non-drift version of decompose_CMC_Allstar_23() 2001 Feb 15: added testing for Doppler data blocks in Leica_LB2_03_obs() (LB2 record ID 0x03) though this has not been tested and therefore it is not known whether the Doppler sign conforms to the RINEX specification 2001 Jan 31: by adding a print to stderr of a single null character just before exiting in terminate(), the mysterious "getting stuck" at the end of a qc mode of certain input files on Linux x86 seems to be eliminated; no idea if this will cure other mysterious reports of this happening 2001 Jan 16: slight logic change in new_position() to allow low numbers of SVs for the qc position code block 2001 Jan 5: correction for negative values in extract_sint3() (reading of 3-byte signed integers) 2001 Jan 3: for Rockwell Zodiac binary records, added header and data checksum verification to next_Rockwell_Zodiac_record() completed collapse of reading of all primitive data types in all binary formats with the extract_*() functions originally developed for BINEX, with the addition of extract_sint6_2m16() and extract_uint6_2m16() (eliminating the old i6() function) needed for TI-4100 and Rockwell Zodiac formats addition of +binex = option, which after reading any verified BINEX record outputs the record to out.fp without decomposing it (for cleaning dirty BINEX files) 2001 Jan 2: changed allocate() to accept additional boolean argument, which, if set to TRUE, the function would not terminate the program if unable to allocate memory and instead return FALSE changed next_BINEX_record() to skip any BINEX record if unable to allocate sufficient memory for the record (probably due to a corrupted file and thus a bogus record length value) 2000 Dec 18: trial implementation (modifications to little_endian(), extract_real8(), and append_real8()) to deal with processors like the Strong Arm added case for parsing Ashtech RS-232 stream $PASHR,ION record, though I don't have any documentation on the structure of this record 2000 Dec 13: minor fix to nav_out_data() to replace the C format exponential "e" with "D" in the GPS fit interval parameter when writing out RINEX NAV 2000 Dec 11: first modification to decomposition of CMC record 23 using the slew count (receiver must be operating in "time alignment mode"), though processing of the resultant RINEX needs to be tested in processing 2000 Dec 7: modification to Ashtech_R_receiver_header() (reading Ashtech R-file) to extract the session sampling interval 2000 Dec 4: modification to epoch_store() and obs_data() to read null epochs in a RINEX OBS file for event flags 2-5 (time tag is composed entirely of zero values, which is an invalid RINEX time tag) if +relax is used fixed bug in read_ubnxi() to correctly read 4-byte BINEX ubnxi value 2000 Dec 1: modification to binex_crc() to not terminate when a BINEX record length appearing to need the MD5 checksum (which is not yet coded) is encountered 2000 Nov 29: modification to obs_out_data() to reset any RINEX SNR flag greater than 9 to the maximum value of 9 (rather than exiting), and modification to turbobinary_snr_0to9_map() to limit the SNR flag to a maximum of 9 2000 Nov 20: modification made in clock_jump_search() to account for the cases where decimation when the original sample interval is less than 1 second and initially the mod(epoch, decimation interval) != 0 2000 Nov 16: a workaround was implemented in next_Ashtech_R_file() for dealing with some situations with mixed GPS (record 23) and MET (record 6) data in Ashtech R-files, where the MET "event time" has a value greater than 604800 seconds (= number of seconds in a week) generalization of decompose_Trimble_19() when reading Trimble DAT record 19, but events are still not logged anywhere (such as stderr, RINEX OBS file) 2000 Nov 15: completed initial reading capability for Ashtech DBEN RPC records with addition of decompose_Ashtech_DBN(), Ashtech_DBN_constellation(), and Ashtech_DBN_obs() and minor modifications elsewhere 2000 Nov 9: added decompose_Leica_LB2_10() for decoding of MET data in Leica LB2 record 0x10 (tilt data — if present — is not yet decoded, since there is no RINEX format for this) 2000 Nov 2: BINEX() and next_BINEX_record() have been generalized to dynamically allocate memory for each BINEX record (rather than relying on a pre-specified maximum); also, better re-try logic in the case of reading partial or corrupted BINEX records in files (still need a better mechanism for reading stdin) 2000 Nov 1: modification of all reconstructed L2 from BINEX 0x7f, so that the resulting float-point number is explicitly rounded to the nearest 0.0001 cycle value (and same for reconstructed L1 from BINEX 0x7f-01) 2000 Oct 31: final change of endian-ness and reversal flags, which does the final cleanup of the prototype code in the new Trimble_17_m57h_obs() final bit flag changes from Trimble in new Trimble_17_m57h_obs() to detect whether L2 code obtained under encryption (assumed to be equivalent to antispoofing being on) and to distinguish between L1 pseudorange being C/A-code or P-code; tested on old data from the following Trimble receivers and firmware:
Changed rbew option to be r, though +r will only effect the endianness of output BINEX at the current time (since this is the only binary format known which can be big- or little-endian). 2000 Oct 30: final testing of binex_observables_7f_02() (observables to BINEX 0x7f-02) to resolve main differences with running on a Sparc system vs. an x86 system (e.g Intel Pentium II): currently there is about a 0.5% chance of a ±1/10000 L1-cycle difference for the delta between L1 and L2 as computed using these two different processors; same logic applied to binex_observables_7f_00() for delta between L1 and L2 2000 Oct 26: modification of calls to binex_crc() to deal with user-requested endian reversal of BINEX output using +rbew; endian-ness symmetry nows seems to be complete 2000 Oct 25: modification of binex_f_stx() to deal with user-requested endian reversal of BINEX output using +rbew introduction of +GPS_t[ime] option, for outputting of receiver epochs and observables in GPS time, rather than receiver time; this is automatically set when using the +binex option, so that the resulting BINEX epochs and observables are in GPS time (which, for example, will make teqc-generated BINEX records 0x7f-02 consistent with what are generated by the Trimble 4700 SuomiNet firmware); Note: the case of RINEX to BINEX conversion, part of case 2 below, has not yet tackled the reverse conversion from receiver time to GPS time 2000 Oct 24: changed the BINEX record/subrecord reading/writing to deal with the following situations:
2000 Oct 19: obsoleting of the +reverse option, which hasn't been necessary for years (endian-ness of processor is determined automatically by teqc in little_endian(), and endian-ness of native formats is pre-defined in format_endianness()) 2000 Oct 18: first test of new Trimble_17_m57h_obs() for decoding Trimble DAT record 17 and RT17 record 57h using flag logic provided by Brian Frohring at Trimble on 28 Sept 2000; tested on files from 4700 and older data from ST, STD, SLD, SST, Geodesist-P receivers with firmware 3.12 through 4.81; only remaining issues seem to be
This function also makes use of the extract_*() functions developed for BINEX, which required a re-tooling of the design for endian-ness testing and status storing. modification to BINEX_00_field_basis() to skip any memory allocation for any field length of zero (which apparently the DEC Alpha OSF1 doesn't like), although this really shouldn't occur (but does with the current Trimble 4700 BINEX firmware) 2000 Oct 17: addition of new GLONASS_slot_vs_freq(), and related modifications to qc_satellite_obs_update(), to better inform user of missing GLONASS RINEX NAV file, or slot vs. frequency number file input with -glonass_n option, when trying to do a qc on GLONASS data (this function really needs to be generalized for GSSP data as well as GLONASS if GSSP becomes dual-frequency, and needs to be SV specific) obsoleting of the +dynamic option, which was only relevant for Trimble data files and could create RINEX files which were probably not compatible with most RINEX readers 2000 Oct 16: modification to Trimble_17_m57h_obs() to correctly extract P2 without requesting C1 and/or P1 when translating Trimble DAT (record 17) or RT17 (record 57h) allowing -N.a to work for GPS RINEX-to-RINEX NAV cases where there is no ION ALPHA record in the header with modifications to nav_ion_alpha() and nav_out_ion_alpha(), with trigger in rinex_out_pgm_agency_date() after the required PGM / RUN BY / DATE record is output allowing -N.b to work for GPS RINEX-to-RINEX NAV cases where there is no ION BETA record in the header with modifications to nav_ion_beta() and nav_out_ion_beta(), with trigger in rinex_out_pgm_agency_date() after the required PGM / RUN BY / DATE record is output allowing -N.UTC to work for GPS RINEX-to-RINEX NAV cases where there is no DELTA-UTC: A0,A1,T,W record in the header with modifications to nav_delta_UTC() and nav_out_delta_UTC(), with trigger in rinex_out_pgm_agency_date() after the required PGM / RUN BY / DATE record is output allowing -N.corr to work for GLONASS or GSSP RINEX-to-RINEX NAV cases where there is no CORR TO SYSTEM TIME record in the header with modifications to nav_corr_to_system_time() and nav_out_corr_to_system_time(), with trigger in rinex_out_pgm_agency_date() after the required PGM / RUN BY / DATE record is output 2000 Oct 13: allowing -O.int to work for RINEX-to-RINEX OBS cases where there is no INTERVAL record in the header with modifications to obs_interval() and obs_out_interval(), with trigger in obs_out_obs_types() after the required # / TYPES OF OBSERV record is output extensive re-design for allowing -O.leap to work for RINEX-to-RINEX OBS cases where there is no LEAP SECONDS record in the header with modifications to rinex_leap_seconds() and rinex_out_leap_seconds(), with trigger in obs_out_obs_types() after the required # / TYPES OF OBSERV record is output; same for for allowing -N.leap to work for RINEX-to-RINEX NAV cases where there is no LEAP SECONDS record in the header, with trigger in rinex_out_pgm_agency_date() after the required PGM / RUN BY / DATE record is output 2000 Oct 12: more work on rinex_marker_number(), so that only first occurrence of MARKER NUMBER in a RINEX file is changed if -O.mn or -M.mn is used, with modifications to rinex_out_marker_number(), with trigger in rinex_out_marker_name() after the required MARKER NAME record is output 2000 Oct 11: initial work for allowing -O.mn to work for RINEX-to-RINEX cases where there is no MARKER NUMBER record in the header (case(s) where MARKER NUMBER record(s) occurs after END OF HEADER needs clarification) renamed open_rinex_files() to rinex_out_settings() and added logic to set MARKER NAME in both RINEX OBS and MET files if only -O.mo or -M.mo is set (same for MARKER NUMBER in both RINEX OBS and MET files if only -O.mn or -M.mn is set), as specified by RINEX version 2 specification (see Table A5) 2000 Oct 10: check for case in decompose_AOA_TB_ff() for a data termination in TurboBinary of repeated 0xff bytes, plus appropriate modifications in next_AOA_TurboBinary_record() 2000 Oct 9: all allocation of met observables with new set_met_obs_values(), including case for default set-up from BINEX 0x7e 2000 Oct 5: clean-up of testing cases in BINEX code, for implementation of BINEX records: 2000 Oct 3: collapse of code calling extract_types_list() and a few other calls into new set_types() function, generalized binex_out_settings() (had been binex_setting()), and modified decompose_binex_7f() and decompose_binex_7e() to set default set of RINEX OBS and MET observables upon reading BINEX 0x7f and 0x7e records if not already set elsewhere (basically, the latter removes the need to use -O.obs and -M.obs to get a default set of RINEX observables out of BINEX) 2000 Oct 2: slight modification to g_arg() and file_id() to correctly deal with a partial BINEX record at the beginning of a BINEX file when using the -binex option (to specify BINEX formatted data to be read); also a modification to main() and file_id() to make the logic for ARGO format and the -argo option work the same way millisecond clock resets accounted for in BINEX 0x7f-02 to RINEX conversion 2000 Sept 29: implemented function GPS_curve_fit_interval() for remaining formats slight modification to Trimble_17_m57h_obs() to extract observables S1 and S2 from Trimble RT17 57h data stored in "Concise Format" 2000 Sept 28: added function GPS_curve_fit_interval() to obtain the GSP SV curve fit interval (in hours) parameter for RINEX NAV given the 1-bit fit interval flag from subframe 1, the IODC, and some knowledge of whether Block I or II; implemented for conversion of Trimble formats 2000 Sept 25: modified obs_epoch_check() (yet again) to eliminate the case when decimating observation epochs, where doing the in-line computation for whether to skip the current epoch results in numerical fuzz; now the fuzz would have to be larger than 0.5 ms in order for the algorithm to fail, and hopefully this doesn't effect any of the other decimation cases 2000 Sept 20: added reset of teq.tr.offset to zero in AOA() and reset of file header flag to false in next_AOA_TurboBinary_record() for each TurboBinary file read modification of collapsed_raw_ephemeris() to extract the 1-bit fit interval flag from subframe 2 word 10 of the GPS broadcast navigation message, but the conversion to hours for RINEX 2.10 NAV is uncertain 2000 Sept 19: modified get_next_Trimble_RS_232_record() (plus some minor tweaking of next_Trimble_RS_232_record()) to correctly deal with the -tr_s_jump option (only needed for VSAT data collected at Golden, CO by USGS) to fix the code that was added on 2000 June 28 2000 Sept 18: modified qc_short_report() to eliminate the epoch gaps in the calculation of the rate of receiver clock drift 2000 Sept 15: modified turbobinary_snr_0to9_map() to correctly map the TurboRogue volts signal per volts noise (SNR values) into the desired RINEX flag 0-9 range 2000 Aug 24: function round_metadata_date() created for adjusting the representation of dates with the metadata options +meta, +mds, etc. so that epochs like 2000 08 24 06:52:59.997988 will now be reported as
2000 08 24 06:53:00 with +mds (previously, the rounded was done automatically with C fprintf(), sometimes resulting in date stamps like 2000 08 24 06:52:60) 2000 Aug 23: bug introduced on 11 Aug caused +v option to continue to output RINEX, but this was fixed by adding VERIFY case in open_rinex_files() 2000 Aug 22: Opps! major buglets found in arg_5hi_1d() which would not allow or correctly enter any start date set by -O.st (not exactly sure when this was introduced) re-do of the logic for RINEX OBS header line TIME OF FIRST OBS, using the new set, opt, in, and out flags 2000 Aug 11: setting of RINEX_OUT flag at end of open_rinex_files() if any of the RINEX file pointers are not NULL (note: RINEX_OUT flag could probably be obsoleted now anyway, using the status of the individual RINEX file pointers instead) 2000 Aug 16: introduction of any_initial_epoch() function and calls in binary_OBS() and binary_MET() to collapse logic for establishing time windows 2000 Aug 15: slight reorg of cases in process_input() to correctly deal with qc mode of BINEX 2000 Aug 1: confirmation on CMC records 6 and 7, so these will no longer generate verbose messages to stderr, though no decoding of the data in 6 and 7 is attempted 2000 July 28: modification to decompose_TI_4100_GESAR_01() and GPS_week_decomp(), with additional introduction of usage_GPS_week(), to not abort if a faulty GPS week string is constructed from a corrupted file; modification to next_TI_4100_GESAR_record() for faulty or misidentified TI-4100 GESAR record = 1; changed firmware decomposition for GESAR record 1004 to divide 2-byte integer software version by 10 fix to extract_Trimble_rx_type() when receiver type = 1 (old code would cause a segmentation or memory fault) 2000 July 26: modification to decompose_NMEA_XDR() to deal more gracefully with improperly formated NMEA MET strings
2000 Jul 20 2000 July 20: modification to obs_arg(), nav_arg(), and met_arg() to gracefully terminate if certain options are accessed with less the required fixed number of additional valid arguments 2000 July 7: modification to decompose_Leica_LB2_88() and obs_epoch_clock_adjustment() to correct the GPS week for the Sunday problem files from a subsystem MC1400, version 6.11, nav_software 6.10, receiver firmware 4.42 (collected by Glen Mattioli) -> requires at least one valid navigation message to occur before the first data record 2000 July 5: corrected offset in decompose_Leica_LB2_85() to correctly extract antenna position in LB2 0x85 record 2000 June 28: implemented a new parsing function for the Trimble RS-232 stream format, and added record decomposition for record 15h fixed +mdjm for Ashtech RS-232 stream format (was missing the value for the last MET epoch) 2000 June 22: code fix to uint4_to_ubnxi(), to fix a bug for the code changes introduced on 2000 Apr 12; modified obs_out_standard_header() to find the correct number of leap seconds based on the first epoch when outputting a mixed constellation and there is no value set for the leap seconds 2000 June 20: added cases for identification of CMC message IDs 50, 114, 117, and 120, and allowed for variable length message ID "0" 2000 June 13: numerous modifications for reading of TurboBinary high-rate (up to 50 Hz) data (records 0x1a, 0xdb, 0xdc) to correct a number of problems 2000 June 12: modification to constellation_processing() to prevent the erroneous extra call to constellation_filtering() at the end of the function when reading 1-Hz LC TurboBinary 2000 May 31: removed calls to raw_iono_alpha() and raw_iono_beta() for formats using the raw 72-byte subframe 1-3 words 3-10 navigation message (TI-4100 GESAR record 9, ConanBinary EPH record, TurboBinary 0x65, and CMC Allstar message 22) since it appears that the 8 bytes designated for the ionospheric model parameters circa 1980 now are used for something else or contain junk 2000 May 16: included the case of Trimble antenna designation "E_" to map to "TRM33429.20+GP" in extract_Trimble_ant_type() for DAT record 16.27 (might be right, might be wrong) 2000 May 12: enhancement of +relax option for reading RINEX OBS and MET which allows epochs in the input to be nonsequential and only sequential epoch occur on output (modification to epoch_store(), obs_data(), and met_data()); the first encountered epoch upon input is the one that is used 2000 May 10: addition of option +mdjm which is like +mdj except that it also outputs the last MET epoch as well; and option -M.l, which can be used to set the last known MET epoch (both primarily for use with Jstream) 2000 May 8: modification of CMC translation with record 21 based on communication from Michel Gonthier at CMC, where the clock bias is adjusted by: bias(true) = bias(Message 21) - 0.82*2.9008...e-09 seconds/seconds (4.57/1575.42e6 = 2.9008...e-9), where the value of 0.82 was arrived at by trial and error to reduce the residual clock drift in the CA-L1 combination on a number of data files for different receivers/sites 2000 May 4: addition of the option -cmc_sin23 for skipping n initial record 23s from a CMC binary file (default = 0), to correct a problem of data collection apparently from the TDMACMC Jstream software which sometimes puts in an initial errant record 23 at the start of files; switched back to some original logic in Trimble_dat() which seems to correct a problem of incorrect record parsing when also decimating epoch (with -O.dec) 2000 Apr 12: modification to some of the BINEX functions to make them more compatible with the library put together by Doug Hunt (mainly a modification to append_uint3() and binex_append_mGFZI); also added a option to force a switch from native endianness to non-native endianness upon outputting BINEX (also analogous to the BINEX library) 2000 Mar 27: the option +lb2_fe was added for use with Leica LB2 format data, which forces teqc to encounter a 0xfe record (internal flash disk dump signature) before using any other records 2000 Mar 13: alpha-version of Ashtech R-file translation, for Ashtech Z-12 using data type 3, 6, and 23 ("TINYRANGER3") only (RINEX header metadata extraction not completed yet) 2000 Mar 9: tested big- and little-endian versions on Ashtech R-file, records 3 and 6, conversion to RINEX (identical conversion) 2000 Mar 8: conversion of Ashtech R-file record 3 to RINEX GPS NAV and record 6 with XDR MET info to RINEX MET; autodetection (I hope) of most types of Ashtech R-file (assuming the first bytes of the R-file have a receiver designation the same as listed in the latest IGS receiver/antenna table for RINEX names) 2000 Mar 7: removed RINEX version dependence when doing RINEX splicing (in rinex_version_type()) 2000 Mar 6: prototype parsing of Ashtech R-file format, with records 3, 6, and 23 prototype decomposition of Trimble stream with MET3 data (0x57, type 3), with addition of decompose_Trimble_m57h_3() and option -tr sm 2000 Mar 3: RINEX MET observables limited to -9999.9 to 99999.9, to force a fit into a %7.1lf format 2000 Feb 28: additional logic for translation of Ashtech download fileset where there is a E-file, but no S-file, for a possibly correct (or closer) value for starting GPS week, with the main modification being to decompose_Ashtech_dld_B_raw_nav() (still, there is no guarantee that the correct GPS week was selected, especially near week boundaries) 2000 Feb 25: test compilation of teqc code on HP-UX 10.20 and IBM AIX 4.1; some code clean-up for minor warnings reported by the Borland compiler; updated IGS receiver/antenna/dome designations to rcvr_ant.tab.text18 (27 Oct 1999); backup leap_second() function good through at least 31 Dec 2000, since there will be no UTC leap second applied at the end of June 2000. 2000 Feb 22: overhaul of file_id() and id() for slightly more robust identification of input files; overhaul of +v functionality so that the output corresponds with the user-specified of automatic format identification of the input format; added option +mdf for improved human readability of automatic format identification switched to official stamping of RINEX 2.10 2000 Feb 21: de-coupling of format types, primary RINEX version numbers (1 and 2) (now in struct file_info, defined as a char array), and stdout behaviour (now in stdout.h); replaced hard-wired values for most recent RINEX version numbers (for OBS, GPS NAV, GLONASS NAV, GSSP NAV, MET) with values in defines.h; first cut on all GPS health extractions for RINEX 2.10 compliance (except, perhaps, Leica dsNNNN.eph files and LB2 0x88 record) 2000 Feb 18: set up a DEC Alpha OSF1 static build, which was minimally tested on DEC Alpha Linux (translation tested on a Trimble dat file only) 2000 Feb 17: modification to the i6() function so that it correctly deals with signed (e.g. TI-4100) and unsigned (e.g. Rockwell Zodiac) 6-byte integers first cut of BINEX 0x7f-01 for compact LC only storage 2000 Feb 16: (almost) finished major rewrite and simplification of code for high-rate TurboBinary (records 0x1a, 0xdb, 0xdc, 0xde; which includes the "30-1" file format) so that filtering (SV, channel, NaN, etc.) and conversion to BINEX is applied if requested (still some final simplification needed for AOA_TB_HR_L1_obs()) when BINEX 0x7f-00 is requested as output (which is the also the default if the +binex - option is used), the default set of SV observables is now reset to the equivalent of -O.obs la+l1+l2+ca+p1+p2+s1+s2 using new binex_settings(); the default set of MET observables is already equivalent to -M.obs pr+td+hr, though this could also be modified in binex_settings() 2000 Feb 15: corrected bug in spew_any_TB_OBS() which eliminates the need to include the option +TB1s when extracting LC, or normalized L1/L2, from TurboBinary "30-1" format data with 0xde records 2000 Feb 8: first cut for inclusion of P(i)-L(i) observables in qc-mode (prototype for L1-only qc), which is off (-pl) by default for now, but is turned on with +pl option:
modified qc_satellite_obs_update() to ignore writing to multipath plot files if multipath calculation is suppressed (i.e. -mp) 2000 Feb 7: added switch_Rockwell_Zodiac() and switch_bytes() to order the 2-byte and 4-byte portions of the little-endian 6-byte integers in record 1102 for correct interpretation in i6() on little-endian processors corrected the comment in binary_OBS() describing the Rockwell Zodiac RINEX snr 0-9 flag mapping for the L1 observable first cut of BINEX record 0x7e-00 (ancillary site data), which, for example, can store the information in a RINEX MET file funneling of all GLONASS pseudorange values through new Ashtech_GLONASS_pseudorange_correction() to remove speed of light times leap second offset only if pseudorange exceeds 3e9 meters (when +leap is on) (since the Z-18 and perhaps other Ashtech firmware do not consistently apply the leap second offset to all GLONASS pseudoranges all the time) 2000 Feb 4: corrected byte-swap error in Rockwell Zodiac record 1102 (6-byte integers) for phase and pseudorange extraction on big-endian processors; added another case to reverse_bytes() for this (to differentiate between the original 6-byte integer in TI-4100 formats) 2000 Feb 3: finalized storage of S1 and S2 for TurboBinary and RINEX in BINEX 0x7f-00 2000 Feb 2: final testing and debugging of changes for "GEO" constellation SV data (except for qc code) using hand-edited modifications of GLONASS RINEX files; this constellation is referred to by the acronym GSSP (geostationary signal payload) within teqc; addition of -S and +S option, for filtering of specific GSSP ("GEO") SVs (though, currently, only GSSP SV numbers of "20"-"51" [the actual number - 100] are allowed in teqc, mainly due to the current filter setup which only allows a maximum of 32 SVs per constellation; RTCA code allowed from 120-138, though currently only using 120, 122, 131, and 134) modification of TurboBinary parsing to minimally reset the file pointer and skip records with corrupted time tags for all data records 2000 Jan 31: addition of read/write of RINEX OBS header line RCV CLOCK OFFS APPL for RINEX 2.10 (though teqc is currently set to terminate if using the qc mode +qc and reading a RINEX OBS file where the receiver clock offset has been applied to the observables, since the code to unscramble this situation has not been written for teqc so that the observables can be correctly qc-ed). 2000 Jan 27: completion of -NaN_obs option, to filter out any RINEX OBS observables which are "not a number" (NaN):
By default, outputting of NaN is still allowed, since they are rare and turning this filter on adds some additional CPU time. Modification to obs_out_data() made on Jan 19 was returned to the original code to allow outputting of "NaN" if present (i.e. if they occur and are not filtered out with -NaN_obs). 2000 Jan 19: modification to obs_out_data() to filter out any "not a number" (NaN) observation values using isnan() (which should at least work on Solaris, Linux, and DEC OSF1 version); addition of cc compiler flag -ieee on DEC OSF1 compilation to allow continued operation (i.e. not core dump) of the DEC-build executable when a NaN is encountered and involved in a floating point operation 2000 Jan 15: finished first pass modifications to allow reading/editing of RINEX with GEO (geostationary signal payload) data (but, as yet, this is untested) for compliance with RINEX 2.10 specifications 2000 Jan 12: modification to decompose_Ashtech_XDR() to force units in MET XDR string to be
for valid conversion (and if lower-case is possible, somebody better let me know!) new probable_XDR_sample_interval() to estimate the most likely sample interval for XDR data strings from the Ashtech stream data using the GPS/GLONASS epochs if -M.int is not used 2000 Jan 11: modifications to binex_7f_00_obs() and binex_observables_7f_00() to finish alpha-version of direct conversion of ConanBinary, TurboBinary, and RINEX OBS to BINEX 0x7f-00 (to within design constraints of the 0x7f-00 record) 2000 Jan 10: modifications to obs_out(), nav_out(), met_out(), constellation_processing(), binary_ephemeris(), and met_processing() to allow direct conversion of RINEX to BINEX modification to binex_out_records() to allow automatic default BINEX record-subrecord selection by specifying +binex - or +binex _ (rather than a complete BINEX record/sub-record list) 2000 Jan 7: alpha-cut for Ashtech stream with XDR records to RINEX MET translation added binary_MET() as an analogue to binary_OBS() (which had been named binary_GPS_only_OBS()) as the function to direct all MET epochs after each successful call of met_epoch_clock_adjustment(), and added this function to:
(this is now analogous to the obs_epoch_clock_adjustment() and binary_OBS() sequences), fixed met_epoch_check() (which is called by binary_MET()), and modified the code in met_data() which calls met_epoch_check() now -M.dec should work for decimation of RINEX MET or met data in native formats 2000 Jan 6: added binex_out_records to parse a list of comma (,) or other delimited BINEX records with the +binex option into the appropriate records and subrecords, with the record-subrecord delimiter fixed as a dash (-) in AOA_TB_LC_epoch, a scaled conversion of the LC value (in 1-sec TurboBinary 0xde records) is used to compute "L1" and/or "L2" phase values added BINEX_OUT route to met_processing() (analogous to that in constellation_processing), though NATIVE_OUT mode is currently not allowed (filtered out) new -M.int option to specify the MET sample rate for data where there is no time tag for the MET and other ancillary data (e.g. XDR strings in Ashtech stream data) 2000 Jan 5: alpha-cut for all translators for DEC Alpha-UNIX (OSF1) platform, with all variables and functions moved over to new prototyping alias except for those functions in prototypes.h; tested on some sample ConanBinary and TurboBinary files 2000 Jan 3: modification to rinex_version_type() to allow for the special case of splicing GPS-only RINEX OBS files which contain a blank for the satellite system in the initial RINEX VERSION / TYPE header record. Proceeded with the 64-bit upgrade (currently for DEC Alpha machines) with appropriate modifications to:
argo.h argo.c (for ARGO format) binary.h binary.c (low-level routines) binex.h binex.c (for BINEX) cmc.h cmc.c (CMC binary format) crc.h crc.c (BINEX CRC/checksum code) diag.h diag.c (diagnostic routines) format.h format.c (ASCII format names) general.h general.c (low-level routines) igs.h igs.c (IGS rx/ant/dome ASCII names) leica.h leica.c (for Leica formats) motorola.h motorola.c (for Motorola Oncore format) rockwell.h rockwell.c (for Rockwell Zodiac format) ti.h ti.c (for TI-4100 formats) trimble.h trimble.c (for Trimble formats) 1999 Dec 28: modification to qc_position_out() to supply the magnitude of the vector difference between the QC position and what would be the RINEX OBS header position for the antenna; changed internal storage of MET observables from float to double for BINEX (also gives cleaner read of NMEA MET strings) 1999 Dec 27: modification to usage() to direct messages to stdout (rather than stderr) if +help/-help option is used; first cut to allow reading of Ashtech D-file and associated writing of RINEX MET file 1999 Dec 16: modification to clock_jump_search() to correctly set the last millisecond jump when decimating and the millisecond offset increments change sign in the data, without needing to supply the original sampling interval with the -O.int option 1999 Oct 18: correction to decompose_Rockwell_Zodiac_1000() 1999 Oct 15: modification to dump_metadata() (stdout for +meta option) to also show antenna type and receiver type 1999 Oct 8: modification to decompose_AOA_TB_68() to nullify L2 and P2 data if S2 has a zero value (a firmware bug in the TurboRogue results in the L2 data space being filled with the L1 value and the P2 data space being filled with the P1 value when S2 == 0 in at least TurboBinary record 0x68) 1999 Oct 7: added option +gws to allow outputting of date as GPS week and seconds to all epoch_stamp() calls (which, e.g., will effect the representation of dates when using +diag and other stderr outputs) 1999 Sep 24: modification to extract_types_list() so that a zero item list will be accepted if also doing metadata extraction or requesting diagnostics (e.g. "-O.obs - +mds" or "-O.obs - +diag") 1999 Sep 17: modification to GPS_NAV_times_make_sense() to increment the ToW by increments of 10321920 minutes (1024 weeks) if the ToW lags the observation time by similar amounts (e.g. TurboRogue software 1998.12.27 results in the correct observation times, but the GPS week in the ephemeris record lags by 1024), and this corrects the output of the metadata output (e.g. +meta, +mds, +mdj) 1999 Sep 15: added +mdfi option for format metadata extraction for use with UNAVCO inject script 1999 Aug 31: added +mdj option for start time metadata extraction for use with Jstream 1999 Aug 27: modification to extract_Trimble_rx_type() and and extract_Trimble_ant_type() to null unknown receiver and antenna type strings 1999 Aug 24: modification to next_AOA_TurboBinary_record() and decompose_AOA_TB_39() to account for TurboBinary user data record 0x39 of length less than 216 bytes 1999 Aug 23: modification to obs_epoch_clock_adjustment() to ignore the transition in Leica DS data from an invalid receiver clock offset value of -1 second to the first valid value (which occasionally had been triggering the incorrect detection of a receiver millisecond clock reset for this format) changed +eep to +eepx, which continues to output the epoch-by-epoch location in Cartesian xyz, and added +eepg, which outputs the epoch-by-epoch location in ellipsoidal geographical coordinates (lat, lon, height) 1999 Aug 17: modification to AOA_CB_constellation() to disallow all GPS SV PRN # > 32 and correction of indexing of all teq.tr.rx.AOA.fmt.CB.old[] values to allow for GPS SV PRN 32 1999 Aug 10: latest round of modifications for the -tr_s_jump option (for LKWY data collected by VSAT via USGS at Golden only), tested on ~100 files 1999 Aug 5: fixed minor error when reading TurboBinary record 0x39: slant height is stored in the record as centimeters (instead of meters as originally assumed), so the corresponding comment in the RINEX OBS file will now be correct 1999 Aug 3: added +Ashtech_B_file_adjust option to attempt to correct the file placement in corrupted B-files, with this first trial implementation only being in next_Ashtech_dld_B23_record() (for versions 2 and 3 B-file only) and only adjusting for missing bytes at this time 1999 Aug 2: collapsed boolean flags in struct win_info and other time related flags into a new struct teqc_info FLAGS time entry; slight change to GPS_week_decomp() so that usage is only output for a bad date when using the -week option 1999 July 30: changed Ashtech_channels() to Ashtech_specifics() (since it has evolved into setting lots more that the correct number of channels for specific receivers) and added a test for LM-XII and L-XII receivers in it 1999 July 29: fixed some unsigned long/signed long problems in the Ashtech code introduced on 20 July which were screwing up Doppler and other values 1999 July 23: added new qc mode option +eep ("every epoch position") to output a time stamp to millisecond resolution plus the WGS84 xyz position to millimeter resolution every epoch 1999 July 22: collapsed some code into bad_SV_number() and added this to test PRN number of TurboBinary 0x68, 0x1a, 0xdb, 0xdc, and 0xde records 1999 July 21: testing Solaris 2.7 Ultra 2 as the primary Solaris Sparc development platform (from Solaris 2.3); corrected the corrected record reset problem for Trimble formats 1999 July 20: implemented types.h and began code changes on Ashtech code for testing on Solaris Sparc 2.3 build 1999 July 16: added experimental options -ns and -ne ("next start" and "next end") windowing options which work only out to the hours level, with new function window_next_epoch() 1999 July 15: have prototype BINEX 0x01-01 working for GLONASS navigation message; modified Ashtech_phase and eliminate_oversize_phase() calls to them to correctly resize both L1(CA) and L1(P1) for BINEX; replaced all calls to eliminate_oversize_L1() and eliminate_oversize_L2() with the more generic eliminate_oversize_phase; restructured extract_Trimble_rx_type() so that receiver specific flags get set when Trimble DAT records with the receiver type flag are present, even when the -O.rt option is used, and restructured extract_Trimble_ant_type() to follow the same style 1999 July 14: fixed the new_fmod() problem that was causing certain C library fmod() calls to fail when the second argument was equal to zero (this was causing the -O.dec decimation not to work as it should on some systems); modified binary_ephemeris() to correctly sort the RINEX NAV file pointers for GLONASS navigation messages (due to BINEX addition); modified Ashtech_channels() to automatically set the channel numbers and a few more items when using a B-file from an Ashtech GG24 1999 July 13: removed the abort from reading of CMC binary when the 60-sec time tag error problem occurs (still reports to stderr, though); added hidden option -tr_s_jump to allow correct translation of corrupted Trimble stream files from LKWY site; modified binary_GPS_ony_OBS() to correctly unmask the end time 1999 July 12: changed valid_Ashtech_pseudorange() to only examine bit 3 of the warning flag to screen each pseudorange, changed valid_Ashtech_phase() to output the phase value regardless of the bits in the warning flag 1999 July 9: added a new corrupt record test for TurboBinary record 0x68 in next_AOA_TurboBinary_record() to stop if the record starts with 68_XX_2e_20_20_20_20_20_20_20_20_20_20 byte sequence 1999 July 8: first initial cut for BINEX also: modified obs_data() to correctly set an implied value of zero (empty) following event flag value = 2, 3, 4, or 5 when a time tag is present, and also changed the "no value" key from 255 to 1000 since values of 0-999 are valid; modified rinex_out_comment() to fix the latest splicing problem; translation of L2-phase value corrected for TurboBinary 0xdc record; translation of L1- and L2-phase values corrected for ConanBinary "brief" records on DEC Alpha OSF1 (C long data type is an 8-byte integer, instead of the more usual 4-byte integer) 1999 June 16: added TBfe_ff option to recognize or ignore the header/trailer (0xff and 0xfe) records of TurboBinary, with the default being +TBfe_ff (i.e., recognize these records); this allows TurboBinary files to be concatenated together (e.g. UNIX cat), and teqc will ignore the original termination marker (0xfe) in the resultant file 1999 June 12: modified window_OK() to examine stdin only as a special case and correctly set any windowing parameters 1999 June 11: fixed next_AOA_ConanBinary_record() to reset the pointer to the data record when using stdin 1999 June 7: rebuilt the Ashtech_BEN_block() function (for Ashtech stream data code blocks) to make it more readable 1999 June 6: modified decompose_AOA_CB_header() to read as much of the receiver number/version line in a ConanBinary record 1 if the line is corrupted 1999 June 3: modified obs_out_obs_types() to output a zero if zero observables (weird case, I admit) 1999 May 26: changed TB68 option to be TBnr; changed default setting of TBLC, TB1s, and TBhr to be off, rather than on (i.e. teqc will now only examine the normal-rate 0x68 records by default) 1999 May 24: modified TB_record_duplication() to be TB_record_elimination() to correct the behaviour of the option -TB1s when reading TurboBinary files with records 0xde and 0x68, and it should also work with option -TBhr when records 0x1a, 0xdb, and/or 0xdc are present 1999 May 18: added test in GPS_week_check to print a possible error message to stderr if the GPS week being tested in less than the initially set GPS week value 1999 May 17: re-write of IGS receiver and antenna designation check to include antenna dome (radome) check in characters 17-20 of antenna type field; added ++igs option to output a list of all internally recognized strings for receivers, antennae, and domes; added option for "post-header comments", by default left on, and turned off with -phc option 1999 May 13: final official alpha cut of Leica DS format translator, incorporating details given by Erwin Rapatz at Leica for wavelength factors and receiver number extraction 1999 May 7: modified rinex_out_marker_number() to copy and 4-char ID code into the marker number field if empty and not set as empty; other monument.code enhancement, especially for RINEX MET; amended Trimble_dat() to recover from a corrupted dat file when there are multiple bogus records 0 or 7; changed all uses of epoch_clock_sanity() into a switch to discard corrupted epoch information 1999 May 6: alpha release on IBM AIX 4.1; modified decompose_Trimble_5() to convert 5.0 user-entered lat/lon as degrees, rather than semi-circles 1999 May 5: found and fixed memory overflow problem in rinex_out_comment() when buffering output for "number of RINEX records to follow" 1999 May 4: modified CMC code to not accumulate time offset due to clock drift (record 21) when using +native; modified rinex_version_type() to allow splicing of version 1 RINEX OBS files 1999 May 3: added +native option to output filtered native receiver format when inputting a native receiver format, and partially tested with decimation of CMC data 1999 Apr 30: fixed 2nd major overhaul of CMC translation for 21 and 23 record pairs, and split the old function binary_epoch_clock_adjustment() into: obs_epoch_clock_adjustment(), met_epoch_clock_adjustment(), epoch_clock_sanity(), and epoch_clock_to_date(). 1999 Apr 29: fixed at bug in GLONASS_time_to_epoch() which would give the wrong dates for GLONASS from 1984 to 1988. 1999 Apr 28: tackled (in a very unelegant way) the problem of more than 999 in-line comments being generated in a RINEX OBS file 1999 Apr 25: modification to obs_epoch_check() call in obs_data() to account for simultaneous decimation and time-windowing of input RINEX OBS 1999 Apr 24: modification to obs_epoch_check(), since the 1 msec test made on Apr 21 wasn't quite right; added test to implied_window_limit() to allow time window masks to be used for RINEX files 1999 Apr 23: modified nav_data() to allow teqc to continue to read a RINEX NAV file with a satellite number of 0, but that ephemeris is skipped 1999 Apr 21: modified backslash_string() to change any null string into a single whitespace string; modified implied_window_limit to allow outputting of configuration information; modified dump_comments() to output build comments only when using ++config; modified obs_epoch_check() to allow for decimation of time tags > 1 msec from an integer second, e.g. Rockwell Zodiac data; added option -tbX for transforming Benchmark Y-codeless TurboBinary:
1999 Apr 20: finished overhaul of CMC translation logic when dealing with records 21 and 23 pairs to account for "missing" records in various combinations; modified rinex_out_marker_name() to disallow overriding filling in the monument name with the 4-char ID when the -O.mo is used with a blank argument, i.e. -O.mn "" 1999 Apr 19: changed tolerance in obs_epoch_check() from 2e-5 seconds to 1e-3 seconds 1999 Apr 16: fixed de_pad_left() to handle all whitespace strings 1999 Apr 14: modified command_parse() to skip over multiple whitespace separators between config file options and their arguments 1999 Apr 8: possible fix to CMC time tag and pseudorange translation problem using record 23/21 pairs; still an ambiguity as to which sign the deltas on the time tags accumulate, which will have to be resolved by processing; also not known if the clock bias values in record 21 are an important contribution 1999 Apr 7: fixed Trimble_55h() and Trimble_57h() to eliminate buffer overflow reads with corrupted data 1999 Mar 2: eliminated the int casting in eliminate_oversize_L1() and eliminate_oversize_L2(), which was screwing up the resizing for oversize phase values in Ashtech translations, and in using the +reformat option 1999 Mar 1: changed threshold for GPS week decrement for MET data in binary_epoch_clock_adjustment() to be > 561600 seconds (week - 1/2 day) rather than 302400 seconds (1/2 week) 1999 Feb 24: have possible solution for the problem where MET data starts at the end of the GPS week and OBS data starts at the beginning of the next GPS week, modifications primarily in binary_epoch_clock_adjustment(); expanded stderr statement in possible_wrong_GPS_week() to include the two next most likely weeks to try (rather than one) 1999 Feb 19: added option +mds ("metadata short"), as a substitute for option +meta, which gives: the start and end times, file size in bytes, and filename on a single stdout line 1999 Feb 9: change in RINEX NAV translation: changed correct_nav_times() so that for cases where ToE = ToC = 0 and ToW > 302400 seconds (i.e. mid-week), then the GPS week is incremented by +1 and ToW is decremented by 604800 seconds. corrected rinex_version_type() to correctly ID GPS and GLONASS RINEX NAV files for splicing 1999 Feb 8: added option +Ashtech_qd, which ignores the values of bit_2 and bit_3 on the warning flag of Ashtech data (i.e. "include Ashtech questionable data") 1999 Feb 6: in obs_data(), removed the memcpy() of the last observation epoch into the current observation epoch for cases of non-"time tagged" event flags eliminated the possible infinite loop in scan_config_line() when strings had invalid meta-syntax by reporting the problem to stderr and terminating added bit_2 and bit_3 testing on warning flag of Ashtech MBN records to eliminate questionable data 1999 Feb 3: added switch in obs_binary_out() to account for switching between kinematic (RINEX event flag = 2) and static (RINEX event flag = 3) survey and correctly output any comments at the transitions; changed location of file_id() call to be after parsing the config file(s) 1999 Jan 29: used adjust_week() to modify the GPS week in the RINEX NAV field from the cases where it is = teqc best value GPS week (±1) modulo 1024; this is added mainly for the W1k (1024) rollover that will occur on 22.0 Aug 1999 1999 Jan 28: added adjust_week() to modify the UTC week in the RINEX NAV record DELTA-UTC: A0, A1, T, W from the cases where it is equal to the teqc best value GPS week (±1) modulo 256; this function was added before the record is output to RINEX, and before the configuration -N.leap is output 1999 Jan 21: format for 2-digit years in RINEX changed to zero-padded, so that years 2000-2009 will appear as "00"-"09" 1999 Jan 15: fixed -L2_2 option for reading RINEX OBS files, to set BIT-1, rather than BIT-2, of the LLI flag on the L2, P2, and D2 observables; likewise, fixed -L2_1 option for reading RINEX OBS files, to set BIT-1, rather than BIT-2, of the LLI flag on the L1, P1, and D1 observables 1999 Jan 8: changed forced rounding of seconds in RINEX OBS time tag to 0.1 microseconds (from 1 microsecond); changed most rounding by floor() to new round() macro; changed format of seconds in RINEX OBS TIME OF FIRST OBS and TIME OF LAST OBS fields to be %13.7lf (Fortran F13.7) to be consistent with the time tag in the epochs to avoid epoch labeling disasters/confusions with CMC 1999 Jan 6: streamlined the reporting of not using GLONASS ephemerides when doing qc of GLONASS data 1999 Jan 5: extended SV editing to RINEX NAV files, though comments in the RINEX NAV header have not been added 1999 Jan 4: found address bug in store_compact_plot_data() which was causing same_compact_plot_list() to malfunction, thereby sometimes scrambling the data in one or more plot files 1998 Dec 31: updated the receiver and antenna RINEX designation check to conform with the newest table (24 Dec 1998) for the IGS 1998 Dec 31: finished prototype Benchmark -> TurboRogue commensurate conversion, using -aoa bs option:
where Y1 and Y2 are the Y1- and Y2-codeless data blocks collected by the Benchmark (and erroneously labeled P1 and P2 in RINEX); only done correctly if data is is normal TurboBinary 0x68 records. 1998 Dec 30: preliminary options for excluding certain receiver channels, e.g. -ch2,4 to exclude channels 2 and 4; plus appropriate comments in RINEX OBS header, plus complementary config output; have retrofitted the different format readers to extract the receiver channel number for:
Formats examined that have no receiver channel numbers, or not easily determined:
Eliminated (once again!) the duplicate build line problem in RINEX headers. 1998 Dec 29: preliminary options for excluding certain SVs in RINEX OBS, e.g. -R to exclude all GLONASS SVs, -G10,24 to exclude GPS PRN 10 and PRN 24; plus appropriate comments in RINEX OBS header, plus working for qc mode, plus complementary config output 1998 Dec 28: Fixed rinex_constellation_slip_obs() to correctly skip multiple constellation lines in RINEX OBS when the number of SVs > 12 1998 Dec 22: Fixed rinex_out_comment() to eliminate minor memory leak and added elimination of any original comments fields when starting to read the next target RINEX file by adding nuke_comments(); completed +reformat option which allows reading misformatted RINEX OBS observables as %n.3lf%c%c (n not necessarily 14) and subtracted a fixed integer number of cycles from the L1 or L2 observable as necessary to make it fit in %14.3lf%c%c 1998 Dec 18: Fixed rinex_out_comment() to stop the dropping of COMMENT fields when time windowing and all other cases; eliminated teqc from stopping at the nth file during a multiple file splice when the n-1th file ends in header fields by resetting the expected header count to zero after reading each file. 1998 Dec 17: Using -st option overrides -O.st option and correctly stamps the TIME OF FIRST OBS RINEX OBS header field, involving routing all setting of the session start time through a new function obs_session_start(). 1998 Dec 15: Eliminated the windowing problem when using multiple target RINEX OBS files and a line " 0" would be generated for each file outside of the specified time window. 1998 Nov 18: allowed reading of RINEX OBS files with SV-specific wavelength factor records, but missing a default wavelength factor record, when using the -O.def_wf option to specify the default wavelength factors 1998 Nov 17: changed translation of SV health code for GPS RINEX NAV messages for all Ashtech formats and Trimble TSIP format (prior translations probably always reported a value of 0 = healthy regardless of the original broadcast SV health value) 1998 Nov 16: possible fix for the Ashtech Z-18 and GG24 phase overflow problem 1998 Nov 13: changed all ConanBinary warning messages to be suppressed with -warn option 1998 Nov 11: changed the two minor (and undocumented) items for GLONASS NAV files pointed out by Werner Gurtner 1998 Oct 27: prototype fix for the CMC L1 2**20 cycle rollover 1998 Oct 21: fixed Ashtech Z-18 and GG24 translations to correct L1 and L2 values for millisecond clock resets by including the +msec_phs_adj option; tested for: Z-18 B-files, Z-18 MPC records, GG24 MBN and MCA records. 1998 Sept 30: fixed temporary buffer size for Ashtech Z-18/GG24 datasets for tracking up to 24 satellites; fixed filtering out of "questionable" carrier phase and code phase values on Ashtech data (bit 3 or bit 4 of warning flag set); fixed auto-detect of GLONASS NAV files ending in ".glo" and ".GLO" to go with RINEX OBS files ending in ".obs" and ".OBS" in the qc mode 1998 Sept 28: finished first cut of GPS/GLONASS translators for Z-18 B/E/S download data and GG24 RS-232 stream data; first cut of mixed GPS/GLONASS qc mode 1998 Sept 24: modified Trimble RS-232 stream records reader to ignore 57h position records (rather than trying to interpret them as 57h observation records 1998 Sept 16: modified reading/writing of RINEX OBS to allow epochs with an event flag value of 0, 1, or 6 to have observations, epochs with an event flag value of 2, 3, 4, or 5 to have in-line header records; modified epoch interval detection to only determine observation interval based on epochs with an event flag of 0, 1, or 6 1998 Sept 15: finished code to deal with the new RINEX header fields: LEAP SECONDS in RINEX OBS, and SENSOR MOD/TYPE/ACC and SENSOR POS XYZ/H in RINEX MET 1998 Aug 27: tighted code on hidden trap door for rounding of second time tags when reading CMC binary and Leica LB2 data 1998 Aug 21: added limitation for sample interval extracted directly from ConanBinary to 300 seconds, as cases were found where this field was corrupted 1998 Aug 11: initial code cut for translating Ashtech XDR string format, both from Ashtech download D-file and from Trimble download record 16.254 (supplied via RS-232 from ParoScientific met package); modified the -O.dec option decimation code to allow time tag to be off by up to 5 microseconds 1998 Aug 3: initial code cut for Trimble TSIP translator, though still not ready for prime time due to lack of documentation on certain types of 0x6f and 0x8f packets 1998 July 31: fixed GPS week offset problem for Ashtech download translation when the S-file is a GPS week rollover from the starting time 1998 July 28: prototype translator for the Leica DS format, though there is still some uncertainty about the L1-code value ("C1" or "P1", depending on antispoofing status?) and detection of half-wavelength (squaring) tracking; fixed reading of Trimble DAT to not skip null-body records (records w/ 4-byte headers only) 1998 July 21: initial code cut for Ashtech download versions 1 and 2 translator, though there is a problem with the phase values 1998 July 17: fixed code to allow use of env variables $teqc_OPT and $teqc_CONFIG without specifying a config file on the command line 1998 July 15: check for match of existing IGS receiver or antenna RINEX designations (done only when using options -O.rt or -O.at for now) 1998 July 14: minor change for reporting status of Trimble DAT record 16 subrecords; expansion of Trimble DAT rx codes to RINEX rx designations. 1998 July 7: corrected all known bugs for windowing functionality of non-RINEX input, covering 19 general cases; teqc will abort out of 6 of these: -dX alone or any case with a -e mask (not fully qualified date-time) 1998 July 2: added calls to epoch_minutes() to initialize obs.session.start.minutes in obs.session.start after all instances of obs.session.start becoming populated with a date (thus fixing a variety of problems with the qc mode after the changes to the time-windowing scheme); added same calls to initialize obs.session.end.minutes in obs.session.end for symmetry, though not doing this was apparently not causing any problems 1998 July 1: fixed bug where ARGO translator would crash when not specifying an output RINEX NAV file 1998 June 29: (finally!) have ConanBinary and TurboBinary SNR values talking the same language, including the RINEX snr 0-9 mapping 1998 June 26: Changed ±ar_raw option to ±meta, though ±ar_raw will be enabled until the next release; tweaked the windowing code a bit. 1998 June 25: Changed -aoa bm option to -aoa tbY. 1998 June 23: Finished substantial re-write of the windowing functionality for non-RINEX input; added automatic comments for recording windowing in the RINEX OBS header 1998 June 22: Corrected code for Ashtech download from P-codeless receiver (e.g. LM-XII) where L2 is squared 1998 June 19: Modified code for Ashtech stream data reading/translation to handle data from receivers other than the Z-XII, e.g. G-XII, using MBN and PBN records; added options ±L2 for translation, with default of +L2 meaning that L2-carrier observables (i.e. L2, P2, D2, S2) could be present, and -L2 will ignore all L2-carrier observables 1998 June 15: Modified code for Ashtech download reading/translation to handle data from receivers other than the Z-XII, e.g. LM-XII; finished initial +diag cut for all binary formats 1998 June 12: added beta-version -aoa bm option to translate TurboBinary from the Benchmark ACT rx, using the C/A phase for L1 (instead of the P1 phase) since the cross-correlation bit (used to identify antispoofing status) is always off in record 0x68 from the Benchmark 1998 June 11: finished initial cut of Leica LB2 format reader and RINEX OBS and NAV translator; added +diag feature to ConanBinary and TurboBinary reader 1998 May 8: Modified TurboBinary parser to handle 56 and 58 byte 0x68 records, enabling D1 observable and pseudo D2 observable if present 1998 Apr 23: Forced times set with -O.st or -O.e to be displayed in RINEX OBS header in fields TIME OF FIRST OBS and TIME OF LAST OBS. 1998 Apr 22: using -O.dec with data where the original sampling interval is less than 1 sec should now work correctly, including decimation during qc mode, though this may require specifying the original sampling interval with -O.int if the original sampling interval is less than 1 second and not indicated by other means (e.g. the optional RINEX header field using INTERVAL). Changed RINEX version read/write to allow for new %9.2f (F9.2 in Fortran) standard, changed from original %6d (I6 in Fortran). Teqc will only produce RINEX version 2.00, however. Fixed output of config strings to include a metacharacter backslash in front of any original backslash or double-quote. 1998 Apr 14: any invalid RINEX time tag where seconds >= 60 or < 0 is now read correctly and the time tag is correctly adjusted, changing minutes, hours, days, etc. as needed 1998 Feb 26: improved corrupted epoch detection (& possible incorrect detection of end of GPS week) and implemented this for Trimble formats, though it can be readily expanded to include any other format 1998 Feb 11: added +diag option for diagnosis of binary streams; implemented for CMC Binary, Motorola Oncore, Trimble, and TI-4100 formats 1998 Jan 26: fixed bit error problem for RINEX NAV for big-endian version, effecting ConanBinary, TurboBinary, Canadian Marconi binary, and TI-4100 Record 9 translations; fixed ConanBinary translation for multiple filename inputs. 1998 Jan 21: added option -fwritable-strings to the gcc and g++ compiler flags, to allow correct processing of default RINEX OBS observable list for ConanBinary, Canadian Marconi binary, Rockwell Zodiac binary, and ARGO format. 1998 Jan 13: finished initial cut of ARGO format reader, for reading .dat and .orb files, and translating to RINEX V. 2; modification of ConanBinary record header reader to skip over xmodem fill pattern bytes (0x1a) 1998 Jan 12: eliminated infinite loop in translation of Ashtech B-file where 4-character site name changes several times 1998 Jan 7: modified Trimble Record 16 to dump all subrecord remarks, COGO codes and definitions to stderr 1997 Dec 29: allowed for splicing of RINEX NAV files, though these cannot contain in-line header info like RINEX OBS files, due to the limitations of the RINEX specification 1997 Dec 19: changed option reading for strings encapsulated with double quotes so that the double quotes can contain any characters, with double-quotes (") and backslash (\) preceded by a backslash to yield a double-quote or a backslash, respectively, in the RINEX COMMENT field. All whitespace is preserved if accessed as a configuration file; whitespace is replaced by a single space ( ) if input with a back single-quote (`) command substitution, as in
available on certain shells. 1997 Dec 17: modified option reading for strings encapsulated with double quotes so that the double quotes can contain only whitespace and still work with the configuration environment variable and configuration file(s) 1997 Dec 16: modified +ar_raw option to give correct RINEX version number when inputting RINEX version 1 1997 Nov 20: fixed file location for Ashtech E- and S-files when supplied B-file name has a path prefix (e.g. "data/BFOOB097.324"); fixed more GPS week problems involving composite Trimble DAT file (made from a sequence of smaller DAT files) when there is a GPS week boundary crossing 1997 Nov 17: improved GPS week increment code to eliminate most spurious increments due to corrupted records; improved detection and elimination of bad observables in Trimble observation records; amended 6 Nov change to allow for binary garbage in Trimble MES (or REC) or Ashtech S-files. 1997 Nov 10: found and fixed bugs for editing certain strings in RINEX-to-RINEX metadata editing, e.g. -O.mo (see teqc bugs) 1997 Nov 6: found and fixed CMC translator bug; allowed for binary garbage when reading the supposedly ASCII Trimble MES (or REC) or Ashtech S-files. 1997 Oct 24: added three fields for +ar_raw option when input is RINEX (for archival purposes) 1997 Oct 21: fixed filename matching code for Ashtech download E-file name (to eliminate name overwriting of B-file name) 1997 Oct 20: modified filename matching for Trimble download names to look for *.mNN or *.MNN where NN are the numbers 00 to 99 1997 Oct 16: fixed GPS SV PRN #32 bug in qc mode, and added check for PRNs out of index bounds in qc mode 1997 Oct 7: report decimation interval from -O.dec on qc report(s) 1997 Sept 29: minor alterations to remove superfluous warnings reported by Borland bcc32 compiler 1997 Sept 26: expanded +relax option to include null lines in near-RINEX in between epochs in OBS or MET, ephemerides in NAV, or at the end of input/files. 1997 Sept 24: multiple options now allowed on each line of configuration file or in configuration environment variable 1997 Sept 23: replaced volatile pointer assignment for options +obs, +nav, +met, +out, ++out, +err, and ++err with direct memory allocation and strcpy(). 1997 Sept 19: fixed -O.dec option for translation modes 1997 Sept 18: added duplicate ephemeris check for Ashtech RS-232 real-time stream translation; fixed IOD slip removal in COMPACT *.iod plot files in qc mode 1997 Sept 17: all declarations of variables within functions that are copied to with memcpy() were made static 1997 Sept 10: corrected RINEX S1 value for Ashtech download translator; added use of warning flags to screen questionable phase and pseudorange values for Ashtech download and real-time stream translators. 1997 Aug 19: corrected RINEX Doppler value scaling for Ashtech download translator 1997 Aug 14: fixed infinite loop problem for Ashtech download translator when 4-character station code changes within the B-file 1997 July 25: allow RINEX reader to allow header field identifiers w/ lower case ASCII; allow +ar_raw option with RINEX OBS input 1997 July 23: finished ConanBinary translator for ASCII records and binary records 2, 4, 6, G, and K; code in place for records 8, A, C, and E (but untested) 1997 July 16: added -O.dec option for OBS epoch decimation (similar options -N.dec and -M.dec in place for NAV and MET info, but not completed yet) 1997 July 15: (finally!) found and fixed the memory bug that was causing certain TurboBinary and TI-4100 files to crash 1997 July 14: corrected file splicing when using command line file names (i.e. +obs, +nav, +met options), instead of using shell redirection 1997 July 1: found temporary workaround for the "TurboBinary bug" for little-endian processors 1997 June 30: fixed epoch identification for time-sequential ConanBinary 1997 June 26: removed receiver clock offset value from any RINEX OBS output; changed qc indicator of SVs w/ P1 data when antispoofing is on (mainly for Ashtech and TurboBinary data) to "o", rather than "y", unless using +Y option (Y-code receiver); improved interval detection and reporting scheme, including qc SUM line for sampling interval < 1 second 1997 June 25: translator cut for Canadian Marconi Binary, for single-frequency Allstar OEM receiver board (records 22, 23, 63, and 126 only) 1997 June 19: RINEX version 1 reading capability, plus recasting Version 1 on input as Version 2 on output 1997 June 18: all big-endian formats working on little-endian processors except for TurboBinary 1997 June 13: translator cut for TI-4100 TI-ROM format (record ID 1 only) 1997 June 2: fixed spurious stdout bug (various RINEX OBS header records) when using multiple target files in qc mode; allow incomplete RINEX headers if info is supplied via editing options (e.g. -O.*); allow "relaxed" constraints on required RINEX header fields when doing qc mode, using new +relax option 1997 May 30: fixed various problems with the -st, -d, +d, and -e windowing options (using window masks, reading RINEX, etc.); skip OBS epochs w/ flag 6 (cycle slip repair) when doing qc mode; removed all possible zero-time length windows from IOD calculations (eliminating infinities) 1997 May 21: translator cut for Ashtech download (B-, E-, and S-files) 1997 May 12: correctly place encountered comments in RINEX from Trimble or AOA binaries; correct placement of RINEX kinematic flag from Trimble DAT record 16; code written for RINEX kinematic flag from Trimble DAT record 8, but not tested (no example file); teqc option -O.mov to force initial kinematic state in RINEX flags at start of RINEX OBS file 1997 May 9: translator cut for time-sequential ConanBinary 1997 May 1: translator cut for Rockwell Zodiac binary format (big-endian processors only) 1997 Apr 28: repaired error in ToW calculation for TI-4100 GESAR & BEPP/CORE data 1997 Apr 23: fixed bug to output requested additional RINEX COMMENTs when using RINEX target files with the +O.c, +N.c, and/or +M.c options 1997 Apr 21: workaround for obtaining correct system time from Windows 95 and DOS 1997 Apr 9: fixed bug to output correct session end for -e and -O.e configuration options when using ++config option and correct final date & time when using +ar_raw option with RINEX OBS target file(s) (e.g. teqc ++config OBS_file or teqc +ar_raw OBS_file); correctly extract lat lon ele from x y z w/ +ar_raw option 1997 Apr 8: added -O.pg option for entering approx antenna position as lat long elevation (degrees degrees meters); fixed +v option for multiple target files; re-fixed -O.obs and -M.obs options with RINEX target file(s); eliminated all multiple teqc build comments in RINEX output and/or config output; added extra characters for config output of -st and -e options (for human readability only — added extra characters are not required); changed default set of OBS observables for RINEX translation to be L1 L2 C1 P2 P1 D1 D2 (equivalent to -O.obs l1+l2+c1+p2+p1+d1+d2), to drop S1 and S2 by default and put P1 in the last spot on the first line for each SV to minimize overall RINEX OBS size when antispoofing in on 1997 Apr 7: place teqc build info in all RINEX created, whether by files or stdout; build for Solaris Intel 2.5 1997 Apr 4: slight rewrite of NAV ToW - obs time to better detect and report GPS week discrepancies 1997 Apr 3: temporarily disallow all attempts of translation/reading of TurboBinary or TI-4100 formats on Intel(-like) platforms 1997 Apr 2: additional work on +qc +ar_raw option; allowed for separators (:,;/\+-=_~# plus space, newline, carriage return, tab) in -st and -e options 1997 Apr 1: eliminated output of TIME OF LAST OBS OBS record for all cases to simplify and correct cut/splice operations; enabled stdin for DOS builds, tested prototype function with Borland bcc32; fixed -st option for input OBS and MET RINEX files; windowing on RINEX NAV files based on ToW (shut off for now) 1997 Mar 31: fixed dirty buffer problem in Ashtech RS-232 data translator (was not a problem in rt); fixed resetting of input file pointer for stdin to NULL; fixed identification of stdin via piping on Sun versions 1997 Mar 21: code clean up (unused variables); fix missing ToW time stamp in TI-4100 translation; GPS week on system time output line for +id option; if +ar_raw and +qc are set, only archive table goes to stdout (instead of both) 1997 Mar 20: build info in id option and RINEX header comment 1997 Mar 19: for archive metadata dump, replicate monument name from code if no name and code is present; added system time to id function; added functionality to deal with DOS EOF (CTRL Z) and other strange DOS endings for WatCom version (for true DOS port); first successful port to DOS 5.x & test on 386SX (no math coprocessor); included wildcard arguments for Borland build 1997 Mar 18: more explicit information on incorrectly entered observation codes (OBS & MET); GPS week suggestion on first ephemeris only; for archive metadata dump, replicate monument code from monument name if no code and name has length of 4 characters The main differences between this first release of teqc and the alpha-release rt are translator enhancements for reading/translating TurboBinary and TI-4100 GESAR and BEPP/CORE formats, though in this release of teqc these formats still are not readable with teqc on PCs.
The next main difference is in the
handling of wavelength factors in general and
a correction for the reading of Trimble binary formats related to wavelength
factors. Due to an ambiguity in the RINEX version 2 documentation, rt
was not handling the wavelength factors correctly, and this resulted
in files that Trimble's GPSurvey software would read and interpret most of
the L1 and L2 data as squared (half-wavelength) phase data when, in fact, this
was not the case. This ambiguity has been resolved to the satisfaction of
Berne (contact Werner Gurtner (GURTNER The next difference is in the removal of unneeded white space at the end of lines in RINEX OBS output. This should result in slightly smaller RINEX OBS files. Comments or questions about this page? Send e-mail to Lou Estey (lou Last modified Wednesday, 17-Mar-2010 14:58:58 UTC |
|
![]() |
Home | About Us | Contact Us | Support | Search | Facility | PBO | Education & Outreach Comments: webmaster |
|