/// // Lady Heather's GPS Disciplined Oscillator Control Program // (now works with many different receiver types and even without a GPS // receiver. Also works with precision rubidium/cesium oscillators and // frequency / time interval counters). // // Copyright (C) 2008-2019 Mark S. Sims // // // Lady Heather is a monitoring and control program for GPS receivers, GPS // Disciplined Oscillators, precision oscillators (rubidium and cesiem), and // frequency / time interval counters. Heather is oriented more towards the // time keeping functionality of GPS and less towards positioning. It supports // numerous GPS (and Glonass, Beidou, Galileo, etc) devices including: // // GPS Receivers: // Ashtech Z12 receiver // Furuno GT-8031 (uses $PFEC commands) // Furuno GT-87xx (using eSIP commands) // GPSD interface (mainly a Linux/macOS/FreeBSD thing - GPSD provides // a shared read-only interface to numerous GPS devices. // Jupiter-T (aka Zodiac) // Motorola binary // NMEA // NVS BINR binary (115200:8:N:1) // Sirf binary // Trimble TSIP binary receivers // Trimble TAIP receivers // Trimble SV6/SV8/ACE-III // Trimble Accutime / Palisade receivers // Trimble RT17 format receivers (like the NetRS) // TymServe 2000 (not yet tested) // Ublox UBX binary // Venus/Navspark (115200:8:N:1) // // GPSDO's (GPS disciplined oscillators): // Brandywine GPS-4 receiver // DATUM STARLOC II GPSDO - inferior wannabe Thunderbolt // Jackson Labs LTE Lite // Lars simple GPSDO controller (used with any 1PPS output GPS receiver) // Lucent RFTG-m GPSDO // Lucent KS24361 REF0/Z3811A Z3812A // NEC GPSDO ... STAR-4 compatible at 115,200 baud // Oscilloquartz STAR-4 GPSDO (management interface) // Oscilloquartz OSA-453x GPSDO // SCPI - Nortel telecom GPSDOs like NTWB and NTPX in SCPI mode // SCPI (Z3801A/Z38015/Z3816/etc style) // SCPI (HP5xxxx style) // Spectrum TM4 (not fully tested) // Trimble TSIP binary GPSDOs (like the Thunderbolt and numerous // "telecom" GPSDOs. // TruePosition GPS // UCCM - small Trimble / Symmetricom / Samsung telecom GPSDOs // (57600 baud) // Zyfer Nanosync 380 (19200:8:N:1) // // Atomic frequency references: // HP 5071A cesium beam oscillator // Spectratime/Temex LPFRS rubidium // Spectratime/Temex RMO rubidium (same as LPFRS) // Spectratime SRO100/SRO70 rubidium // SRS PRS-10 rubidium oscillator // Symmetricom SA22 rubidium (60 Mhz and 58.9824 MHz ref freq) // Symmetricom X72 rubidium // Symmetricom X99 rubidium // // Clocks: // Acron Zeit WWVB receiver // Gravity/solid earth tide clock (uses system clock to display // solid earth tides and gravity offset, Requires manual entry // of latitude/longitude/altitude) // No receiver, uses system clock. // // Time and frequency counters: // Generic frequency/time interval counters // HP531xx counters // Lars simple GPSDO controller // PICPET simple timestamping interval counter chip // TAPR TICC time interval counter // // Misc: // Simple terminal emulator // RPN calculator // // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, // and/or sell copies of the Software, and to permit persons to whom the // Software is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included // in all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // DEALINGS IN THE SOFTWARE. // // // Original Win32 port by John Miles, KE5FX (john@miles.io) // Help with Mac OS X port by Jeff Dionne and Jay Grizzard // (note: OS/X version uses the XQuartz package for X11 display support) // FreeBSD support by Daniel Lawrence // // Temperature and oscillator control algorithms by Warren Sarkison // // Original adev code adapted from Tom Van Baak's adev1.c and adev3.c // Incremental adev code based upon John Miles' TI.CPP // // uGal gravity calculation code slightly adapted from Tom Van Baak's // tides.c which was derived from code by J.L. Ahern which was based upon // equations by P. Schureman // // Solid earth tide code translated from Fortran solid.f using the F2C // translator program. solid.f was written by Dennis Milbert and is based // upon the dehandtideinel/MJD code by V. Dehandt, S. Matherws, J. Gipson, // and C. Bruynix. // // Easter and moon illumination phase code from voidware.com // // moon_info() derived from code in John Walker's moontool.c // // Equation of time code adapted from code by Mike Chirico and NOAA // // Sun position code is Grena's Algorithm 5 // // Moon position from code by Paul Schlyter at // http://hotel04.ausys.se/pausch/comp/ppcomp.html // // Heliocentric Julian Date code adapted from code by Richard Ogley. // // Nutation and obliquity code derived from code by Jay Tanner and JPL // // Equinox/Solstice equations derived from Jan Meeus "Astronomical Algorithms" // via Simon Cassidy. // // Time of perihelion derived from table by Fred Espenak, www.Astropixels.com // // New moon table derived from table by Fred Espenak, www.Astropixels.com // // Moon image code derived from code by Mostafa Kaisoun. // // Nortel NTGS55A recever wakeup research by Sam Sergi // // Linux IPv6 support by Kasper Pedersen // // The LZW .GIF encoder used in this program was derived from code written by // Gershon Elber and Eric S. Raymond as part of the GifLib package. And by // Lachlan Patrick as part of the GraphApp cross-platform graphics library. // // Singing clock excerpted from Palistrina, Missa Assumpta by the Tallis // Scholars... you should buy some of their stuff... they are quite good. // // // // This file contains most of the operating system dependent routines, // initialization routines, serial port I/O, and the screen I/O and // plotting routines. // // // // // // // //-PROGRAM CONFIGURATION AND HELP INFORMATION // // Heather has two types of user commands. The first is the command line // options. You can get a list of command line options by starting Heather // with an invalid command line option such as "/?". This will bring up // a scroll box of commands on Windows and several pages of commands on // other operating systems. You can also enter "?" from the keyboard to // bring up the command line help information. // // Command line options can begin with either a '/' (Windows standard) // or a '-' (Linux / macOS standard). Either is acceptable no matter what // operating system you are using. Options must be separated by a space. // Note that file names may not contain spaces and quoted options are not // supported! // // Once Heather has started, you can enter command line options from the // keyboard using the "/" keyboard command. There are a few command line // options that cannot be changed from the keyboard once Heather has started. // // // // The second set of commands are the keyboard commands. You can get a list // of the primary keyboard commands and menus by pressing SPACE. Note that // not all receivers support all of the keyboard commands. Keyboard menu // commands are shown in this documentation in upper case characters, but // either upper case or lower case are acceptable. // // Pressing the first key of a command menu will show a sub-menu of commands // available under that menu. Pressing the second key of a menu command // will either execute the command or, more commonly, prompt for a value // to enter. The default value offered as the input is either the current // setting or a common value to use. You can press ENTER to accept the // offered value, ESC or ESC ESC to abort the command, enter a new value, // or edit the offered value. // // LEFT and RIGHT arrows move the cursor within the string. INSERT // toggles insert mode. HOME moves to the start of the string. END moves // to the end of the string. DEL deletes the character at the cursor. // DOWN arrow deletes to the end of the line. UP arrow deletes to the // start of the line. BACKSPACE deletes the character before the cursor. // PAGE_UP retreives the last command entered. This lets you repeat the // last entered command value or recover from a botched line edit. // // If a keyboard command suggests an input value and the first character // that you enter is a not an editing character, the offered value is // erased so that you don't have to backspace over it to enter a new value. // // // // Heather's configuration comes from three places: // // First is a hard coded configuration in the program. // Next is from the file "heather.cfg" // Finally is from the command line that starts the program. // // The location of "heather.cfg" depends upon the operating system and how // Heather was started (from a command line or from a desktop icon). You // can determine where to place the file by bringing up the command line // help information (described above) and scrolling down to the bottom of // the help information. There will be a line that says: // "Put heather.cfg file in directory ..." // The location of the file is also shown (in GREEN) when you press SPACE // to get the keyboard help menu. // // Note that if you rename the "heather" executable file, the .cfg and .cal // file names that Heather uses will also change to match the new executable // file name. // // Note that this directory is also the default directory that Heather uses // for all of its support files (sound files, log files, screen dumps, etc). // // If you launch Heather from a WINDOWS desktop icon, you can set the command // line options by right clicking on the icon and selecting PROPERTIES. // The TARGET field will show the command command line to use. // // Note that in this file a lot of command line options are described as // "toggle" options. Toggle options are like on/off switches. For instance: // /gw - will toggle the watch display between on and off and back on // each time it is seen. // // You can override this toggle action and explictly set the state. // For instance: // /gw0 - forces the watch display OFF // /gw1 - forces the watch display ON // // // // LADY HEATHER'S CONFIGURATION FILE "heather.cfg" : // // Place the command line options that you want to use in this file // with one command line option per line. Each option MUST start in column // one with a '/', '-', '@', or '$' otherwise the line will be treated as // a comment. // // Lines that begin with '/' or '-' set command line option values. // // Lines that begin with '$' send hex values to the receiver. // // Lines that begin with '@' send keyboard commands (all '@' lines are copied // to temporary keyboard script file "heathtmp.scr" which is then processed // once Heather has finished initializing the hardware, etc). See the // description of keyboard script files below. // // You can also read in a ".cfg" file from the keyboard "R" menu or from // the command line: // /r=file.cfg - reads a .cfg configuration file. These config files are // processed after the default "heather.cfg" file has been // processed. You should not include a "/r=file.cfg" // command in a .cfg file since reading config files do // not nest! // Note: earlier versions of Lady Heather used the /h command to read // .cfg files. The /h command now displays command line help. // // // At a minimum, most users will want to configure the com port, receiver // type, and time zone in their default configuration. // // If an error is detected in a command line option in the .cfg file, // processing of the file is stopped and the command line help screen is // shown. The offending option is listed at the end of the help info. // // // // KEYBOARD SCRIPT FILES: // // Lady Heather has the ability to read keyboard script files. These // file must have an extension of ".scr" Script files mimic typing // from the keyboard. Script file names must be less than 128 characters // long. // // Commands that would normally suggest an input do not // do it when read from a script file. They behave // like you first entered ESC to erase the suggestion. // // Commands that normally toggle a flag may be followed // by a "1" or "0" to set the flag value directly. e.g. // you can use GW0 in a script file to force the watch display // OFF. A few commands (like GS) do not toggle a specific value // and cannot be used this way. // // You can put more than one command on a line (separated // by spaces) until you do a command that expects a // parameter value or string. // // A '~' in a script file pauses reading from the script // and starts reading from the keyboard until a carriage // return is seen. This is useful for entering a parameter // value or string. e.g. GG~ will pause the script and // prompt for a graph title. // // Any text following a ';' or a '#' in a script file // is a comment and is ignored. // // Script files abort upon the first error detected or any // unrecognized command is seen. // // Script files can be nested up to 5 levels deep. // Scripts can be stopped by pressing any key. // // You can cause processing of a keyboard script file to wait for a // time interval or a specific time. See the section on ALARMS for // a description of how to do this. // // To run a script file use the "R" keyboard command or "/r" command // line option and specify a file name with an extension of ".scr" // // The function keys F1..F10 (F1..F9 on Windows) cause keyboard script // files "f1.scr" to "f10.scr" to be read. This allows F1..F10 to be // used as programmable function keys. // // Heather normally puts a short pause between each character read from // a script file. You can toggle "fast script" mode with the /nf command // line option. // // // // // //-CONFIGURING THE COM PORT: // // Lady Heather talks to the GPS device via a serial port (hardware or USB) // or an internet TCP/IP connection. You need to tell Heather which // communications device to use. For serial ports you use the "/#" command // line option (where # is the com port number to use): // /1 says to use COM1 // /2 says to use COM2, etc // /0 says to not use a communications link. This can be useful if you // are just reading a log file, etc and do not want to talk to a receiver. // // On Linux systems the # number you specify IS 1 MORE THAN THE SERIAL PORT // NUMBER: // /1 says to use /dev/ttyS0 on Linux // /1 says to use /dev/ttys0 on macOS // /1 says to use /dev/cuaU0 on FreeBSD // // /2 says to use /dev/ttyS1 on Linux // /2 says to use /dev/ttys1 on macOS // /2 says to use /dev/cuaU1 on FreeBSD // // /999 says to use /dev/heather // // Windows treats USB connected serial adapters as standard hardware serial // ports. Most Linux and macOS users will be using USB serial converters. // These operating systems treat the USB devices differently than hardware // serial ports. For these system you can use the "/#u" command line option. // // /1u says to use /dev/ttyUSB0 on Linux systems and // /1u says to use /dec/tty.usbserial on macOS. // /1u says to use /dev/cuaU0 on FreeBSD // // /2u says to use /dev/ttyUSB1 on Linux systems and // /2u says to use /dec/tty.usbserial1 on macOS. // /2u says to use /dev/cuaU1 on FreeBSD // // You can also follow the com port number with an "a" to use a /dev/ttyACM // device: // /1a says to use /dev/tty/ACM0 // /2a says to use /dev/tty/ACM1 ,etc. // // If your system does not use these standard device names, you can specify // the input device name to use with the "/id=" command line option: // /id=/dev/your_device_name // // Heather also supports using a TCP/IP connection to talk to your receiver. // /ip=addr:port // addr can be be either a numeric address like 192.168.10.20 or a web // address like ke5fx.dyndns.org // // If the :port number is not given Heather uses port 45000 // // Note that if the specified IP address is not valid or cannot be reached // Heather may appear to hang for quite a while until/if the connection // attempt times out. This is particularly true for numeric IP addresses. // // On Linux and macOS Heather supports IPv6 addresses. If the specified // IP address is a "bracketed" IP address [....] you can specify the port // number to use like [....]:45000 otherwise you can force an IPv6 // connection by using a ';' before the port number. // // // For hardware serial port and USB serial connections you can specify the // serial port baud rate and data format with the "/br=" command line option: // /br=9600:8:N:1 (9600 baud, 8 data bits, no parity, 1 stop bit) // /br=19200:7:E:1 (19200 baud, 7 data bits even parity, one stop bit) // /br=57600:8:O:2 (57600 baud, 8 data bits odd parity, two stop bits) // // Many receivers that connect via a native USB port (not a USB-serial // converter cable) use a "CDC" driver that effectively ignores the baud // rate, etc parameters. You can Heather's port config to anything and // they will still work. // // There is another parameter (:Px) that you can add to the /br parameters // to select which external device (see the following section on external // devices for more information) that you want to configure. // // If a baud rate parameter is not given in the "/br=" string, that // parameter is not changed. Previous versions of Heather set that // parameter to a default value. // // If a baud rate command is not given, Heather will use a default value // that is most commonly used for the receiver type it is using... which // may not be the same as what your receiver is configured for! // // Another way to specify the baud rate is to follow the serial port number // with an ',' and the baud rate info like: // /1,9600:8:N:1 // // // If com data is lost or the com port disappears Heather will attempt to // re-init the com port every "com_timeout" interval (5-25 seconds // depending upon the receiver type and the operation being done). // You can disable com port error recovery with the /ce command line option. // Heather can recover from things like yanked ethernet cables and USB // dongles and dropped WIFI connections. // // You can specify the com port data loss timeout (in milliseconds) with // the "/ct=#" or "/ct?=#" command line option. /ct sets the timeout for // all devices ports. /ct? sets the timeout for just port '?' where '?' // is the port identifier for the port. See the section below on the // external/extra ports for the supported port identifier characters. // // The timeout value must be at least 3000 msecs. The default com timeout // is 5 seconds. A few devices extend the com timeout values to 10 to 25 // seconds while doing commands that take a long time to do (like receiver // diagnostics and hard resets). If you don't use those commands, // the "/ct" commands allow you to set a shorter timeout. Shorter timeouts // make automatic recovery from dropped com links faster. // // Note that under Windows if you drag the window for more than the // com timeout period you will get a data loss error! // // Heather now has the "!x" keyboard command for setting the receiver // baud rate for devices that support raw satellite data. // IF YOU SET THE RECEIVER TO A NON-DEFAULT VALUE YOU WILL NEED TO SPECIFY // THE BAUD RATE ON THE COMMAND LINE (/br=...) WHENEVER YOU START HEATHER. // If the receiver type can be auto-detected and the baud rate is one of // the supported auto-detect rates (9600,19200,38400,57600,115200 baud), // tnen you might not need to specify the baud rate. // // You can also use the "brx=baud_rate" command line option to set the // receiver baud rate from the command line. The /brr command MUST come // after the /rx?? command line option that sets the receiver type (so that // Heather knows which command to send to the device). // // The !x and /brr commands currently only change the receiver baud rate. // They do NOT change the data_bits, stop_bits, or parity settings! // // // //-EXTERNAL / EXTRA DEVICE SUPPORT // // Besides the main "receiver" device, Heather has support for and hooks // for adding extra devices (such as counters, environmental sensors, and // echoing device data to other devices). These external device ports are // configured using the /e? command. // // /ed DAC/ADC port // /ee receiver data echo port // /ef temperature control device // /ei secondary interval/frequency counter // /ek NMEA echo port // /en environmental sensor port // /er the standard "receiver" device // /et moon / sun / sat position tracking info // /e0 .. /e9 - for user defineable devices // // The syntax for the /e? command is shown below using /ei as an example: // // /ei=device // // Where "device" can be a serial port descriptor like: // /ei=1 (com1) // /ei=1u (usb0) // /ei=3,9600:8:N:1 (com3 at 9600 baud, 8 bits, no parity, 1 stop bit) // // You can also configure the baud rate for the external devices by // using the ":P#" parameter on the /br= command like this example for // the NMEA echo (/ek) port: // /br=19200:8:N:1:PI // // Where "device" can be an IP address AND a non-optional port number. // Heather uses the presence of a ':' in the device parameter to recognize // that it is a IP address. The IP address must lead to a connection that // is lisenting for data, otherwise Heather can lock up waiting for the // connection or a timeout occurs. // /ei=123.135.146.157:45000 // /ei=example.com:45000 // // Where "device" is a Linux style device name: // /ei=/dev/ttyUSB0 // /ei=/dev/ttyUSB1,9600:8:N:1 // // The only external devices that Heather currently has full/tested support // are: // // /ee - receiver echo port. This port echoes the receiver data // stream to the port. The default data format of the echoed // data is whatever the main "receiver" device is configured for. // Any data sent to the echo port by the connected device is // currently ignored by Heather. // // /ef - temperature control device (fan) port. Heather defaults to // using the receiver data port modem control DTR/RTS lines // for its temperature control function. The /ef command lets // you specify a different port. This can be useful if the // main receiver port does not have modem control signals (like // some USB interfaced receivers). // // /ei - the secondary time/frequency counter port. If the main // "receiver" is a counter (/rxi or /rx1), the /ei command lets // you use a second counter for processing up to two more channels // of time/frequency data (or four channels with a TAPR TICC). // Note that Heather has no way of configuring the secondary // counter configuration operating mode. Also the user must // configure the main and secondary counters with the same // settings and operating mode. To configure the second TICC // start Heather with the second device's port specified as the // main input device, configure it, shut down Heather, then // restart Heather with the first TICC specified as the main // device and the second TICC as the extra device. // // If the main receiver device is a GPS receiver or GPSDO, the // data from the "secondary" /ei counter device is used to // calculate true adevs instead of the "bogo-adevs" that are // derived from the GPSDO self-reported loop control statistics. // When Heather is calculating "bogo-adevs" the adev type is // shown in lower case. Upper case is used for "TRUE" counter // derived adevs. // // See the description of the /im#, /if#, and /it# commands for // specifying what type of data the counter is sending, the // frequecy of the oscillator being tested, and forcing the // counter type. // // /ek - the NMEA echo port. This port echoes the current receiver // position, time, and satellite infomation in standard NMEA // format. This lets you send the receiver data to another // program that understands NMEA but does not understand the // data the the receiver is sending. // // /en - to read data from an external environmental monitor device // that provides temperatures (up to two), humidity, and air // pressure. Currently supported sensors are the USB sensors // from dogratian.com amd the LFS10x devices from // LookingForSolutions.com (like the LFS104BW). A future // Heather-specific/optimized sensor is planned. // // /er - the main receiver data port. This is the same as the port // set by the /1, /1u, /id, /ip etc commands. The /er command // just provides an alternate way of specifying the receiver // data connection. // // /et - outputs the selected sun / moon / sat position info // out the TRACK_PORT. Can also output the time in UTC. // This can be useful for implementing moon/sun/satellite trackers. // Once the TRACK_PORT is open and outputing data the SUN AZ: // SUN EL: / MOON AZ: / MOON EL: labels on the screen will be // shown in upper case if that info is selected for output. // // // Future device support: // // /ed - to provide control and monitoring of an external device that // has DACs and/or ADCs for monitoring and controlling analog // devices. // // // // //-USING A SIMULATION INPUT FILE: // // You can force Heather to get its input data from a file. These are // typically receiver data capture files captured by Heather using the WY // keyboard option. Simulation files do not work with most of the "polled" // receiver types such as SCPI that require two-way polling to get data // from the receiver. They mostly work with "UCCM" type receivers that // echo the commands sent to the receiver, but there will be a "time skip" // indication every second. // // To use a simulation input file, use the /rs command line option: // /rs=filename -or- // /rs=filename,seek_addr // // ",seek_addr" is optional and if specified seeks to that byte in the // simulation file before reading. This lets you skip over data you are // not interested in. // // You should also specify "/0" on the command line to disable the com // port, but this is not usually necessary. // // You can also read .raw simulation files with the keyboard "R" command. // This does not require the /0 command to disable the serial port. // // If the simulation file was read in via the /rs= command line option, // the WU keyboard command will pause reading the file. If the file was // read in via the "R" keyboard command, WU will close the simulation file // and resume normal processing of the receiver data stream. // // You can use the /sw= command line option to control how fast the // simulation file is processed. The value is the delay in milliseconds // to wait after each message is read. Using the /sw command can make // keyboard response rather sluggish. You can slightly speed up reading // of a simulation file by doing something that causes the plot area to // not be drawn like pressing the "G" key to bring up a keyboard menu. // As long as the menu is being shown, the simulation runs a little faster. // Also, if the mouse cursor is in the plot area of the screen reading the // simulation file can slow down quite a bit. // // // You can also simulate a time interval counter connected as an "extra" // input device using the /ri command. If you do this you MUST also // specify the time interval counter type using the /it? command. // /ri=filename -or- // /ri=filename,seek_addr // // // //-CONFIGURING THE RECEIVER TYPE: // // Heather supports numerous receiver types. If you do not specify a // receiver type Heather will attempt to automatically determine // the receiver type. // // Auto-detection requires the receiver to be actively sending data that // can be analyzed. Some receivers power up "mute" and do not automatically // send data. You must "wake up" these receivers first by specifying the // receiver type. Also some receivers ("polled receivers") only send data // in response to a query message. // // If the receiver can work in both a NMEA and a native // binary format, it probably powers up in NMEA. Use the // proper /rx# command shown below to put the receiver into native binary // mode. Binary mode offers the user full control of the receiver // and better monitoring options. The "!m" keyboard command can // switch most receivers back to NMEA mode. On some receivers // it swicthes the device to its alternate language. // // Some Motorola receivers power up in NMEA mode, sometimes at 4800 baud. // Receiver type auto-detect does not try 4800 baud. If you are using a // Motorola receiver and it does not auto-detect, try starting Heather with // the /br=4800 command line option. You can switch Motorola receivers // that are in NMEA mode to binary mode using the "!n" keyboard command. // // // You can force the receiver type with the "/rx" command line option. // /rx - auto-detect receiver type (default) // /rxa - Acron Zeit WWVB receiver (300:8:N:2) // /rxai - Trimble ACE-III (9600:8:O:1) // /rxag - Trimble Acutime GG (9600:8:O:1) // /rxat - Trimble Acutime Gold and earlier versions (9600:8:O:1) // /rxa3 - Trimble Acutime 360 (115200:8:O:1) // /rxb - Brandywine GPS-4 receiver - 4800:8:N:1 // /rxca - calculator only mode // /rxc - UCCM - Trimble / Symmetricom / Samsung GPSDOs - 57600:8:N:1 // (auto-detect sub-type) // /rxcp - UCCM-P - Trimble / Symmetricom GPSDOs - 57600:8:N:1 // /rxcs - UCCM LPK/L8 - Samsung GPSDOs - 57600:8:N:1 // /rxcu - UCCM - Trimble / Symmetricom GPSDOs - 57600:8:N:1 // /rxd - DATUM STARLOC II GPSDO - inferior wannabe Thunderbolt // /rxe - NEC GPSDO ... STAR-4 compatible at (115200:8:N:1) // /rxen - Environmental sensors // /rxes - Furuno eSIP receivers // /rxf - Lucent RFTG-m GPSDO // /rxfu - Furuno GT-8031 (using $PFEC commands) // /rxg - GPSD interface (not really a Windows thing - /ip=localhost:2947) // /rxh - HP 5071A cesium beam oscillator // /rxi - TAPR TICC time interval counter (115200:8:N:1) // /rxj - Jupiter-T (aka Zodiac) // /rxk - Lucent KS24361 REF0/Z3811A (19200:8:N:1) // /rxl - Jackson Labs LTE Lite (38400,8,N,1) // /rxlp - Temex/Specratime LPFRS or RMO rubidium (1200:8:N:1) // /rxm - Motorola binary // /rxn - NMEA // /rxo - TruePosition GPS // /rxp - Trimble TAIP receivers (4800:8:N:1) // /rxpa - Trimble Palisade (9600:8:O:1) // /rxpp - Tom Van Baak's PICPET timestamping counter chip // /rxpr - SRS PRS-10 rubidium oscillator // /rxr - Trimble Resolution T family with odd parity // /rxs - Sirf binary // /rxsa - Symmetricom SA22.c rubidium with 60 Mhz osc (forced model type) // /rxsb - Symmetricom SA22.c rubidium with 58982400.0 Hz osc (forced model type) // /rxsy - Symmetricom X72/X99/SA22 rubidium (60 Mhz osc) (auto detect model) // /rxss - Novatel SuperStar II (19200,8,N,1) - currently untested // /rxsr - Spectratime SRO100/SRO70 rubidium // /rxt - Trimble TSIP binary, // /rxtb - terminal emulator only (with buffered keyboard). // /rxte - terminal emulator only. // /rxtm - Spectrum TM4 GPSDO (setting features untested) // /rxts - TymServe 2000. // /rxu - Ublox UBX binary, // /rxut - Ublox UBX binary (with TP5 timing messages), // /rxv - Venus/Navspark mixed binary / NMEA (115200:8:N:1) // (auto-detects timing/RTK models) // /rxvb - Venus/Navspark RTK receiver in BASE mode (115200:8:N:1) // /rxvp - Motorol Oncore (VP) receiver // /rxvr - Venus/Navspark RTK receiver in ROVER mode (115200:8:N:1) // /rxvt - Venus/Navspark timing receivers (115200:8:N:1) // /rxx - No receiver, uses system clock. // /rxx7 - Symmetricom X72 rubidium (forced model type) // /rxx9 - Symmetricom X99 rubidium (forced model type) // /rxy - SCPI - Nortel telecom GPSDOs like NTWB and NTPX // /rxz - SCPI (Z3801A style. 19200:7:O:1) // /rx5 - SCPI (HP5xxxx style) // /rx0 - Gravity/solid earth tide clock (uses system clock to display // solid earth tides and gravity offset, requires manual entry // of latitude/longitude/altitude) // /rx1 - HP531xx (or other) counter (9600:8:N:1) // /rx12 - Ashtech Z12 L1/L2 GPS receiver // /rx17 - Trimble RT17 format GPS receivers (115200,8,N,1) // /rx3 - Zyfer Nanosync 380 (19200:8:N:1) // /rx35 - Symmetricom SA.35m rubidium(57600:8:N:2) - code not completed // /rx4 - Oscilloquartz STAR-4 GPSDO (9600:8:N:2) // /rx45 - Oscilloquartz OSA-453X GPSDO (9600:8:N:2) // /rx6 - Trimble SV6/SV8 (9600:8:O:1) (also ACE-III) // /rx8 - NVS BINR binary (115200:8:N:1) // // /rx says to auto-detect the receiver type. This tries // to find the receiver type at 9600:8:N:1, then // 115200:8:N:1, then 57600:8:N:1, then 19200:8:O:1, then 38400:8:N:1 // unless the user specified the com port parameters // (with the /br=... command) before the /rx option. Note that for Z3801A // receivers that use 19200:7:O:1, the auto-detect routine detects the // incorrect data size/parity combination and uses the proper settings). // // /rx (auto detect) is the default mode if no /rx? command // is given on the command line. // // Note that the auto-detect routine is a bit simplistic // and might occasionally mis-recognize the receiver type. // // // You can force or set the UTC leapsecond offset with the /rx? commands // like /rxx=18 (sets the leapsecond offset to 18 seconds). This is // useful for devices that do not report the leapsecond offset or report // an invalid value. // // // If you explicity specify the receiver type, Lady Heather // defaults to the baud rate indicated above (or 9600:8:N:1 if // not shown above). If your receiver is configured for // a different baud rate, specify the serial port settings // to use with the /br= command line option. // // // // Special notes for Trimble Resolution-T (and other) TSIP devices: // Resolution-T devices default to ODD parity. Heather can recognize the // TSIP data stream even if set for EVEN/NO parity, but the Res-T will not // recognize commands sent to the device. If you let Heather auto-detect // the receiver type and did not specify a baud rate then, after around // 30 seconds and the receiver ID message has not been seen (which the // receiver sends only if it accepts a query command) Heather will // automatically try different parity settings. This feature may not // always work and is a bit of a hack. Also, the screen and some receiver // options may not be properly configured for the new receiver type. The // screen can usually be configured properly by issuing a screen size // command from the $ keyboard menu) once Heather has properly detected // the receiver serial port settings and has determined the actual receiver // type. // // If you are using a Trimble Resolution-T type of receiver, you can // force the receiver model and/or ODD parity with the /rt command line // option. The /rt command line option should be used with the /rxt and // /rxr command line options or if the device is not properly auto-detected. // /rt - use ODD parity on the serial port and config for Res-T devices. // /rt=1 - Resolution-T // /rt=2 - Resolution-T SMT // /rt=3 - Resolution-T RES // /rt=4 - Resolution-T 360 // /rt=5 - Resolution-T ICM // // // // Special notes for Trimble RT17 format receivers (like the NetRS): // Receiver ports configured for RT17/Trimcom format outputs seem to only // stream data. I have been unable to send configuration, etc commands // to the receiver. Thus Heather is currently a monitoring only program // for these receivers. You cannot change the receiver configuration or // request information that the receiver does not automatically stream. // You must make all configuration changes via the NetRS built-in http // web server. // // Heather can auto-detect RT17 receivers as Zodiac receivers. It is // best to force the receiver type with the /rx17 command line option. // // It can take a few seconds to connect to the receiver over a TCP/IP // connection. You can configure the device's IP address by connecting // a serial port (115200,8,N,1) to the RS-232 connector on the front panel. // Use a terminal program (or Heather with the /rxtt /br=115200 command // line option) and power up the receiver. You should see lots of messages // fly by. Near the end of the boot sequence it will ask if you want to // change the IP address. Note that some of the serial ports on the rear // panel are straight-through connections and others are null-modem // connections. Some NetRS manuals are incorrect in specifying which are // which. It is suggested to use the front panel connector for boot-up // monitoring and use a rear panel connector to talk to Heather. // // It is suggested to update NetRS receiver firmware to the latest available // (ver 1.3-2) This firmware was a "security" upgrade and includes several // fixes to earlier versions. It will work on all receivers regardless of // their "warrenty" date. UNAVCO.COM has lots of info on using the NetRS // receiver. // // Suggested port message confiuration is RT17 data with: // 1 Hz epochs, position and measurement data // Concise format // Send RAW GPS data // Send Ephmeris data data (not used by Heather, may be useful to other // programs). // Send IODE and cycle slip counts. // Smooth code phase // Smooth carrier phase // // If you connect an external frequency reference to the NetRS, you must // enable it. Leaving it connected but not enabled can affect performance // or interfere with satellite tracking. // // Trimcomm messsage format configured ports do not send location data, // so use RT17 format. Trimcom data is only available over the TCP/IP // port (default 5018). // // Heather supports writing L1/L2 RINEX files from the RT17 data stream. // Note that the RT17 format does not output a GPS week number. Heather // creates a week number from the system clock. This is used in conjunction // with the GPS time-of-week value in the receiver raw data packet to // generate the time display and RINEX files timestamps. If the system clock // is inaccurate, the date will be wrong close to the GPS end-of-week. // This can cause glitches in the RINEX output... so don't collect RINEX // files that span the GPS week rollover period. For RINEX output don't // select L2C data. RINEX v2.xx does not know about L2C and Heather's // RINEX v3.xx support is currently incomplete (the observation list does // not output the correct v3.xx observation codes... you could manually // edit the file, though). // // // // The Acron Zeit WWVB receiver cannot be auto-detected. Always use // the /rxa command. Support for this receiver is a hack. Heather shows // it as tracking sat PRN 1. You should manually enter your lat/lon/altitude // (/po=lat,lon,alt command line option or the SL keyboard command or the // "heather.loc" file) and the utc offset (like /rxa=17 or /uo=17 command // line options). If you don't enter your position, sat PRN 1 is shown // at az=1, el=89. Technically the Acron Zeit speaks at 300:7:O:2, but it // also works with 300:8:N:2 if you strip off the received parity bit // (which Heather does). Also, it takes several seconds for Heather to // startup and shutdown with this device under Windows. // // // // Special note for Acutime 2000 and earlier receivers... also the Palsiade: // You MUST specify the /rxat (or /rxpa) and /rxag receiver type command // line option. If you auto-detect the device or specify an incorrect // TSIP receiver device, the Acutime can be put into a mdde where it // sends TSIP messages without proper end-of-message indicators. If this // happens, the screen data areas will go blank and you must power-cycle // the receiver to recover! Also, note that changing most of the settings // on these receivers cause them to do a restart and the seetings changes // do not show up for several seconds. // // // // Special note for the Ashtech Z12 receiver: If the Z12 is configured to // send the NMEA GPZDA time code message, the time code messages will // corrupt the raw satellite data observation message... so Heather uses the // system clock to display the time. This can make it appear that Heather // is actually receiving data from the Z12. To verify that Heather is // actually talking to the Z12, make sure that the receiver ID, firmware, // and option info is being displayed. If raw observation messages are // enabled you should also see satellite positions, signal strength, and // doppler data being displayed. // // The Z12 has no way to read back the satellite elevation mask filter. // If you are unsure of the current setting, set the filter (FE command). // // // // The Brandywine GPS-4 cannot be auto-detected. Also the baud rate // must be set to 4800:8:N:1 since the Brandywine receiver cannot accept // more than 1 char per millisecond. The Brandywine receiver will not // work with most serial cables. Pin 4 is a receiver reset signal and if // connected will prevent the receiver from working. Pins 6, 8, and 9 // also have non-standard uses. YOU SHOULD USE A CABLE WITH ONLY // PINS 2, 3, and 5 CONNECTED TO THE PC! The Brandywine receiver does // not work well with the audible "tick clock" mode. // // // // The Datum STARLOC II cannot be auto-detected. Firmware // bugs cause it to stop outputting time messages. Always // specify "/rxd" when running STARLOC II receivers. Also // note that the Datum STARLOC II has NUMEROUS firmware // bugs and generates lots of duplicate/missing time stamp errors // and does not output satellite azimuth/elevation values. The // firmware bugs cause many messages to be corrupted (the firmware does not // properly "escape" any 0x10 bytes in most of the output messages, etc), // thus any messages that contain a 0x10 byte are likely to be corruped! // There might be firmware out there that fixes these issues, but I have // not seen any. The STARLOC is the most miserabe excuse for a GPSDO that // i have ever seen... the firmware seems to have been written/tested by a // drunk chimanzee... I have fw App:1.10 16 Mar 2000, GPS:1.2 07 Jan 2000. // // // // Special note for Furuno (like GT-8031 and eSIP) receivers: Auto-detect // may detect these as NMEA receivers, particularly if Heather has not // previously enabled them. YOU SHOULD NOT RELY ON AUTO-DETECTING THESE // RECEIVERS! Also, these receivers may not output any data until // they begin tracking satellites and have an almanac. They may be // unusable/undetectable for a long time (an hour?) after power-up. // // The Furuno PFEC model and version info is only available from the // self-test results message. If the diagnostics have not been run they // will show up as "0". Running the diagnostics will affect the receiver // operation for a few seconds. The diagnostics are run whenever // Heather starts up, so for the first few seconds you may see // "No stats usable" and "Time invalid" messages. // // For ESIP receivers, the SU keyboard command can be used to set the // default UTC (leapsecond) offset to use when the receiver does not have // the current value from the satellies. This value is saved in EEPROM. // // Furuno ESIP receivers (like the GT87xx series) have some satellite // data messages (that send things like satellite doppler, pseudoranges, // and the raw navigation message that are only avialable if the baud rate // is 115200 baud or greater. // You can set the ESIP baud rate by using the "!u" keyboard command to // send the following string (in uppercase!): // PERDCFG,UART1,115200 // Note that the baud rate, cable delay, signal level mask, elevation // mask, etc settings are NOT stored in flash memory and will be lost // after a power cycle (unless a backup battery is in use). Also after // changing the baud rate, you will need to specify the baud rate from // the command line (because Heather assumes ESIP receivers run // at 38400 baud): // /rxes /br=115200 // // // // GPSD is a Linux/macOS/FreeBSD service that provides a standardized // interface to numerous models of GPS receivers. It is accessed // via TCP/IP address "localhost:2947" GPSD cannot be auto-detected. // Use "/rxg" to force GPSD mode. You can specify a particular // GPSD device to use with the /ig=gpsd_device_name command. // The /ig command will also do the /rxg command. // If your GPSD system is not on "localhost:2947", specify the TCP/IP // address with the /ip= option after the /rxg or /ig= option. // // // // The Jackson Labs LTE GPSDO device has a Venus timing receiver in it that // runs at 38400:8:N:1 and normally generates the standard Venus messages. // It also has a switch that enables a proprietary Jackson Labs STATUS // message. On earlier versions of the LTE firmware enabling the STATUS // messages disables all the Venus messages and you lose the ability to // show satellite info, automatically get the UTC. etc. Later versions // of the LTE firmware allow the STATUS message to be mixed in with the // regular Venus messages.leapseoncd offset, etc. In STATUS only mode // Heather gets the time from the receiver clock. Note that the LTE does // not let you control the Venus receiver and you cannot change any // settings or request data from the receiver. Because of this, Heather // cannot get the UTC leapsecond offset. // // // // Special note for Lucent KS24361 units: the Z3811A // (REF1) unit talk SCPI at /br=19200:8:N:1 and the // Z3812A (REF0) unit talks at /br=9600:8:N:1 over the // DIAGNOSTIC ports. // // // // Special note for Lucent RFTG-m units: the RFTG-m units output // control and staus messages in TSIP format and a time code in ASCII. // Heather attempts to disable the TSIP messages when it exits so that // the device can be auto-detected when Heather starts. If a program // (such as the Lucent RFTG control program) left the device outputting // TSIP, it will be mis-identified. If this happens, you should use // the /rxf command line option to force the receiver type to RFTG-m. // // You can use the !D and !R commands to force disable or re-enable a unit. // If you disable a unit, the other unit the other unit will be in // control. If both units are enabled, then the RFTG firmware decides // which unit is in control (usually the Rb unit). If both units are // disabled, well... not much happens. Heather will not see any data // on the serial port and after a few seconds will try to re-establish // communications... which won't suceed. Try !R to re-enable the unit. // Or you may have to power-cycle the device. // // Also, The RFTG units do not output satellite positions so the normal // signal level maps are not available. On the RFTG-XO unit Heather will // show the satellites being tracked and the signal levels, but the // satellite positions are fixed at AZ=(prn*10) and EL=20 degrees. // // If you enter "& ESC" the rather useless satellite info table will be // replaced by a much more intersting paramter info table. If you press // ESC or SPACE, the display will revert to the sat info table. Clicking // on the sat info table or issuing the ZD keyboard command will zoom the // screen to show the device paramter info screen. // // Also, you will need to run two instances of Heather to monitor both // sides (RB and XO) of the unit at the same time. // // // // Some Motorola receivers power up in NMEA mode, sometimes at 4800 baud. // Receiver type auto-detect does not try 4800 baud. If you are using a // Motorola receiver and it does not auto-detect, try starting Heather with // the /br=4800 command line option. You can switch Motorola receivers // that are in NMEA mode to binary mode using the "!n" keyboard command. // // // // Some NMEA receivers use 4800 baud baud. Receiver type auto-detect does // not try 4800 baud. If you are using a NMEA receiver and it does not // auto-detect, try starting Heather with the /br=4800 command line option. You can switch Motorola receivers // // // // The NV-08C receiver powers up "mute". It cannot be auto-detected until // it has been initialized (start Heather with the /rx8 command line // oprion). Also the auto-detect routine might possible identify // the NVS-08 as a Trimble TSIP receiver... their comminications protocols // are virtually identical. The NV-08C has two serial ports. One outputs // NMEA data, the other uses NVS BINR binary format. You should use the // binary format port. Some NVS receiver modules have a switch for seleting // the NMEA or BINR port. // // // // Special note for OSA-453x rubidium oscillators: these cannot be auto // detected. Also, some versions of the firmware time out after 175 msecs // between keystrokes... you can't manually send commands to the device // with a standard terminal program! The !t terminal emulator command // attempts to buffer all keystrokes and sends the buffer when CR is // pressed. The /rxtt terminal-only mode does not currently support this // feature... use /rxtb for a buffered terminal-only mode keyboard. // // Due to the slow baud rate and the length of the response to the "V" // version info command, the version info is only requested when Heather // starts up (otherwise you would see lots of time stamp errors). Speaking // of which, the 453x devices have some firmware issues... the message // that outputs position/time regularly gets corrupted. Heather can usually // patch things up. Also the 453x's also regularly stops responding to // queries, so you will probably see DATA LOSS RESETS. // // // // Note that many PRS-10's have the serial data and 1PPS input pins // configured to output analog data. To configure the pins for serial // data and 1PPS inputs you must change some resistors inside the unit // (Hey SRS! ever hear of jumpers and solder blobs for doing config // changes? Bsstards!) // You might want to disable the digital clock display... you will then // be able to see all the ADxx values on the main screen. // The ZD command will zoom the screen to show all values read from the // device. // // // // Special note for SRS PRS-10 rubidium oscillators: the PRS-10 cannot be // auto detected. It takes around 25 seconds to request and receive all // of the information it can provide. The plot queue is automatically // reset the first time all of the available infomation is received. This // is done because the plot queue will contain bogus zero values for any // data that had not yet been received. // // // // Special note for the Oscilloquartz Star-4: When the Star-4 is first // powered up, it does not send time/position info until it receives a // warm-restart command. This causes the receiver to go do a self-survey // and start sending time/position information. Heather detects that // the device has not been initialized by detecting the loss of time // messages for over 16 seconds. The first time you start Heather after // poweing up the Star-4, it can take around 20 seconds before normal // operation is established and the screen starts updating. // // // Special note for Samsung UCCM receivers like the -LPK and -L8: // These receiver will report "Power Bad" unless the input voltage is // within a rather narrow range around 5.5V. I power mine from a 6.0V // supply fed through a (5A) Schottky power diode. The device does seem // to work properly from 5V .. 6V even though it reports "Power Bad". // Some people have reported locking issues at 5.0V. // These devices will do a self survey every time they power up... this // takes around 40 minutes to complete. Settings such as cable delay // and antenna elevation mask are saved in EEPROM. // // // Special note for the Spectratime SRO100/SRO70 rubidium oscillators: // these cannot be auto detected. The plot queue is automatically reset // the first time all of the available information is received. This // is done because the plot queue will contain bogus zero values for any // data that had not yet been received. // You might want to disable the digital clock display... you will then // be able to see more of the SRO100 status values on the main screen. // The ZD command will zoom the screen to show all values read from the // device. // // // Special note for the Spectrum TM4. Support for this device has not been // fully tested... I don't have one. If you set the cable delay value // with the PC keyboard command it will set the MUX1 output for PPS output // (enabled or disabled). If you had the output configured for a frequency // or time code (P1 command) you will need to redo that setting. Also note // that the TM4 does not send satellite positions... the satellite position // and signal level maps are not available... boo! hiss! // // // // The TAPR TICC must have the latest firmware to work with Lady Heather... // the firmware shipped with the first batch of TICCs (and maybe the // second production run?) will not work. Auto-detecting the TAPR TICC // can be unreliable, particularly on non-Windows machines. Other counter // types (except the PICPET) cannot be auto-detected... you must use // the /rxi command line option. // // For TAPR TICC devices. Heather defaults to the "all adev" display // display for channel A data. The GP plot is the channel A time interval // deviation from 1 second (in nanosecods). GO is channel B. G7 is channel // C. G8 is channel D. The current TAPR TICC is a two channel device and // does not ouput chC and chD data but Heather allows two TICC devices to be // used. The first one is the main "receiver" device (the /rxi device) and // the second one is the "external" device (specified the the /ei= command // line option). In this mode the data from the secondary TICC chA and chB // are processed as chC and chD. // // Although the current TAPR TICC can output channel C timestamps when set // to "TIMELAB" mode, these are meaningless for Heather's ADEV analysis and // support is mainly for curiosity. // // // If the Trimble SV6/SV8/ACE-III is auto-detected, it will first be // recognized as a TSIP device but the parity will be wrong and it won't // accept commands. Also, the special commands the SV6 expects won't be // used. After 30 seconds or so, Heather will automatically try odd // parity (you should hear a beep) and the receiver should mostly work. // For the most reliable operation, use /rx6 or /rxai with these devices. // // // The Trimble SV6 and related devices do not output data until they // are tracking satellites. They must have an antenna connected and may // need to be powered up for 20+ minutes before they can be used. Also // they do not accept a lot of the standard TSIP receiver control commands // (even though they may be shown in the various keyboard menus). // // // Trimble TAIP receivers cannot be auto-detected if the baud rate is // the standard 4800 baud. TAIP receivers do not output satellite // positions or signal levels. The sats show up in the sat maps at // az=10*prn, el=30 degrees, sig level=40.0 // // // // Special note for Trimble Resolution-T devices: // These are commonly available configured for ODD parity. Heather attempts // to detect this when it thinks it sees a Resolution-T by issuing commands // and if it does not see expected responses, it toggles the parity mode and // tries again. This repeats every 30 seconds or so. // The "/rxr" command sets parity to ODD. // Also Resolution-T devices can have firmware that makes identifying the // exact model number impossible. If you have problems, you can force the // model type: // /rxr=1 - original Resolution-T // /rxr=2 - Resolution-T-SMT // /rxr=3 - Resolution-T-RES // /rxr=4 - Resolution-T-360 // /rxr=5 - ICM // // The Trimble Resolution-T TEP model is configured to speak Motorola binary // (rather poorly). The !M keyboard command will switch it to TSIP mode. // A hard reset (!H) will do a factory reset back to Motorola mode. // // // // Special note for Trimble telecom GPSDOs like the NTWB and NTPX: these // devices can speak either TSIP binary (/rxt) or SCPI (/rxy). TSIP // provies much more information and a much more robust interface. // Auto-detect will find these units as TSIP devices. // // // // The TruePosition GPSDO has factory and warm reset commands, but these // dont seem to restore things like cable delay and attenuator settings // to their default values. // // // // Special note for Ublox receivers: Later models of the Ublox receivers // use the CFG_TP5 message to config the PPS and TIMEPULSE outputs. Heather // can automatically detect the receivers and use the proper message. But // if you use the '@P...' command in a heather.cfg file to config the pulse // outputs on startup Heather will not yet know the exact receiver type. // You can use the /rxut command line option to force Heather to use the // CFG_TP5 commands. Also Ublox receivers can send mixed NMEA and binary // messages. This can confuse the auto-detect routine into reporting the // receiver as a NMEA receiver (particulalry if the receiver is configure // for multiple GNSS systems) . Use the /rxu command line option to force // Ublox mode and prevent this. // // // // Special note for Venus/Navspark RTK receivers. These receivers need to // be put into base or rover mode before they will send RTK/RAW data. A // RTK receiver that is in a RTK mode will show the device as "Venus-R" (the // Venus timing receivers show as "Venus-T"). Heather tries to enable // base mode when it initializes the receiver. If this does not work // (sometimes the receiver seems to ignore the command) you can try // the !k keyboard command which will re-send the base mode command. If // the receiver is in ROVER mode when Heather is started, it cannot be // auto-detected. If you are using a Venus RTK receiver it is best // to start Heather using one of the following commands. Heather will // force ROVER mode if you dont use one of these commands. // /rxvb - for BASE mode // /rxvr - for ROVER mode // // The !k command lets you enable binary RTCM output mode. If this is // selected then Heather will stop seeing valid messages, timeout, and // re-start the receiver. The re-start will disable RTCM output mode. // If you wish to keep RTCM output enabled you MUST exit the program before // the timeout (5 seconds). Whenever Heather starts up, RTCM output is // disabled. Heather cannot auto-detect a receiver that is in RTCM // output mode. // // // // // Special note for X72/SA22 rubidium oscillators: these cannot be // auto detected. The plot queue is automatically reset the // first time all of the available infomation is received. This // is done because the plot queue will contain bogus zero values for any // data that had not yet been received. // You might want to disable the digital clock display... you will then // be able to see more of the X72 status values on the main screen. // The ZD command will zoom the screen to show all values read from the // device. // // Most X72/SA22.c devices use a 60 MHz oscillator and generate a 10 MHz // output. Some telecom models (ussualy SA22.c devices... use a 58.982400 // oscillator and generate a 9.8304 MHz output. The /rxsb command line // option configures Heather for these units. If you happen to have a // X72 with these "telecom" frequencies try /rxsb /rxsy. Note the "i" // status command reports clock frequencies that have no relation to // reality! // // The X72/SA22 firmware does not have a way to read back a lot of the // current configuration settings. Heather implements a "software eeprom" // that stores the current settings in the file "tbeeprom.dat". If you // use more than one X72 and/or SA22 device you should start up Heather // with the "/wp=xxx" (write prefix) command line option that specifies // which software eeprom file to use with that device. For instance // "/wp=sym" will use the file "symeeprom.dat", /wp=xyz will use the file // "xyzeeprom.dat", etc. // // // // Special note for Zyfer Nanosync units: these power-up "mute" and do not // send any data until commanded. The unit cannot be auto-detected. You // must use the /rx3 command line option to use them. Once they have been // initialized with the /rx3 command they should be able to be auto-detected. // // // // If no recognizable device is auto-detected, // Heather assumes that no receiver is connected and // defaults to a time-only mode using the system clock. // This will also happen if you specify the wrong com device or // it is in use by another program. // // // /rxx system clock mode does not need a GPS receiver, it uses // the system clock to drive Lady Heather as a time display. // Use /rxx=17, etc to set the UTC/GPS leap second offset // (needed only for some of the astronomical time formats) // // // The /rx0 "gravity clock" that calculates solid earth tides and vertical // gravity offstes also uses the system clock to drive the program. To // use the gravity clock display, you must set your location using the // /po command line or SL keyboard commands. // // Also Heather likes to know your location so that the // sun and moon info and the astronomical time formats will work. // To set your lat/lon/alt use: // SL - from the keyboard // /po=lat,lon,alt - from the command line // // Heather can also get the default location from the file "heather.loc" // This file is read until a line is found that has a valid lat/lon/alt // position. The file should be saved in the heather installation // directory. It is normally only used if the input device does not report // a location (like for rubidium oscillators, etc). It is also used if you // use the string "loc" when Heather requests a lat/lon/alt setiing. // // The lat/lon values can either be decimal values or degrees/minutes/seconds // format like: 30d40m50.2s Negative values are west longitude, southern // latitude. // // The altitude value is normally in meters, but can be in feet if the value // is followed by an "f" or "'" like 500f or 500' // // In "/rxx" receiver-less mode most of the keyboard commands are // meaningless (mostly the the "T" and "G" menus have relevant options) // // // You can force the Heather display window title to an indication of the // receiver type with the /pt command line option. /pt=title_string will // set the title to whatever you want ('_' chars are replaced with blanks). // /pt with no title string uses the the receiver type as the title. // // // // //-CONFIGURING THE TIME ZONE: // // You should tell Heather what time zone you are in so that the // proper local time can be displayed. You can set the time zone // with the command line option: // "/tz=#sssss/ddddd" where # is the standard // time zone offset in hours from GMT and "sssss" is up to 5 // characters of standard time zone ID and "ddddd" // is the daylight savings time zone id. // // Fractional time zone offsets can be specified // like "/tz=9:30ACST". NOTE THAT WESTERN HEMISPHERE // TIME ZONES ARE NEGATIVE NUMBERS! (i.e. /tz=-6CDT/CST) // // The time zone ID strings can be up to 5 characters // long (default=LOCAL). If no "ddddd" daylight savings // time zone ID is given, the program does not do // any daylight savings time conversions. // // If a standard time zone in use, the time shows in // BLUE. If a daylight savings time is in use, it shows // in CYAN. If no local time zone is in use, it shows // in WHITE. // // The time zone string can also be specified in the standard // Linux time zone format like CST6CDT (note: western // hemisphere time zone offset values are POSITIVE values in // this format) // // Time zones can also be set from the keyboard with // the TZ command. // // // If the user does not specify a time zone on the command line or in the // "heather.cfg" file, Heather attempts to get the time zone from the "TZ=" // environment variable. Heather only checks the "TZ=" environment variable // when starting up. If you change it while Heather is running, the change // will not be seen. // // // Many of Lady Heather's time calculations depend upon having the correct // "UTC offset". This is a count of the number of leap seconds that that // have accumulated since the GPS system was first implemented. It is the // number of seconds of difference between GPS time and UTC time. // Lady Heather normally automatically gets this value from the GPS receiver. // It is part of the GPS almanac data which can take over 15 minutes to // arrive from the GPS satellites. Until the UTC offset is received, // Heather will display a "NO UTC OFFSET" warning. // // Some receiver data formats (like NMEA) do not provide the UTC offset // value. You can specify the value to use with the "/uo=" command line // option. You can also force the UTC offset value with the "/rx#=offset" // command line option that sets the receiver type. For instance with // a NMEA receiver use "/rxn=18" User specified UTC offset values are // shown in YELLOW. // // If no UTC offset value has been set, Heather attempts to guess an // approximate value. Guessed values will be shown in RED. // // Heather uses the availability of the UTC offset value from the GPS // receiver as an indicator that the date/time values reported are valid. // Until the UTC offset has been received, the date/time and other info // is assumed to be incorrect. When the UTC offset value has been received, // the plot data queue is flushed and normal operation is started. // // // There are several special time zone names. These special time zones // only affect the displayed time unless you specify OT from the keyboard. // Note that there can be multiple names for the same special time zone. // // GPS - GPS time // GPST - GPS time // UTC - UTC time // UT1 - UT1 time // UT - UT1 time // // LOR - Loran time (9 seconds ahead of GPS) // LORAN - Loran time (9 seconds ahead of GPS) // // SST/SDT - Solar time // SOL - Solar time // SOLAR - Solar time // // GMST - Greenwich Mean Sidereal Time // GAST - Greenwich Apparent Sidereal Time // LMST - Local Mean Sidereal Time // LAST - Local Apparent Sidereal Time // // TAI - TAI time (19 seconds ahead of UTC) // TT - Terrestrial time // TDT - same as Terrestrial time // TCG - Geocentric Terrestrial Time // TCB - Barycentric Coordinate Time // TDB - Barycentric Dynamical Time // BES - Besselian time // HJD - Heliocentric Julian Date // // MAR - Mars date and time (official) // MARS - Mars date and time (official) // MARSD - Mars date and time (official) // MSD - Mars date and time (official) // MTC - Mars date and time (official) // AMT - Mars date and time (official) // // VEN - Venus date and time (referenced to J1900 epoch, GPS time scale) // MER - Mercury date and time (referenced to J1900 epoch, GPS time scale) // PLU - Pluto date and time (referenced to J1900 epoch, GPS time scale) // // Note that when setting one of these astronomical time // scales you should still specify your local time zone // offset (e.g. /tz=-6LAST/LAST) so that the various // features (like the audible clocks and alarms) that work // with local time will know the correct local time. // You can use the (rather obscure) OT keyboard command // to cause Heather to use the displayed time for these // features. See the description of the audible clocks for more details. // // You can also start up in Solar Time mode with the "/bs" command line // option. // // // The astronomical time scales UT1/TT/TCG/TDB/TCB/MARS,etc // depend upon the current utc "delta-T" value. This // is normally derived +/- 0.5 seconds from the receiver // UTC time using the current leap second offset: // delta-T = UTC offset + 51.184 seconds. // // Delta-T actually changes constantly in an unpredictable manner // and if a more precise value is desired, you can specify it // with the "/uc=" command line option or TE keyboard command. // Heather can also read the delta-T value from the file // "deltat.dat". It tries to do this on startup and at // 00:00:16 UTC every day. // // If you follow the delta-T value in the TE keyboard command with an "*" // then the deltat.dat file will be updated with the new value. // // You can set up a operating system chron job or script to fetch // the current delta-T value from the net and write it to // the file "deltat.dat". On startup or at 00:00:16 UTC every day // Heather will try to read the current delta-T value from the file. // // The special time zone name "UT1" can only be set // using the "-6UT1/UT1" format... the Linux format cannot // be used (since the "1" int "UT1" looks like a time zone offset). // Use the equivalent time zone name "UT" instead. // // Also supported are various planetary times: Mars ("MAR", "MSD", etc) // Venus ("VEN"), Mercury ("MER"), and Pluto ("PLU"). Mars time is based // upon the NASA definition of Mars time. Mercury, Venus, and Pluto time // are based upon the number of revolutions of the planet around the sun // since 1 Jan 1900 (J1900). // // Sorry, no time for Uranus... or Jupiter or Saturn... // these are big blobs of smelly gasses with no // fixed rotation time. // // Besides specifying your time zone you should also specify your // Daylight Savings Time (aka Summer Time) calculation method. // The default daylight savings time switching dates are // the US standard. The "/b=" command line option lets you specify // your daylight savings time calculation. // // Use "/b=1" for USA, "/b=2" for UK/Europe, "/b=3" for // Australia or "/b=4" for New Zealand. "/b=0" turns off // daylight savings time conversions. If you have not specified a DST zone // and set the DST time zone name to "BST" then zone 2 is automatically // set (otheriwse zone 1 is set). // // If the rules change or you live in a backwater, you can // specify a custom daylight saving time rule: // /b=nth1,start_dow,start_month,nth2,end_dow,end_month,hour // // nth1 = start DST on nth occurance of the day-of-week // if nth1 > 0, count day-of-week from start of month // if nth1 < 0, count from end of month // // start_dow - start DST day-of-week (0=Sunday, 1=Monday, ... 6=Saturday) // // start_month - 1..12 = January .. December // // nth2 = end DST on nth occurance of the day-of-week // if nth2 > 0, count day-of-week from start of month // if nth2 < 0, count from end of month // // end_dow - end DST day-of-week (0=Sunday, 1=Monday, ... 6=Saturday) // // end_month - 1..12 = January..December // // hour - local time hour of switchover (default = 2) // // Example: /b=-1,0,9,2,3,4,6 says to start daylight // savings time on the last Sunday in September // and return to standard time on the second // Wednesday in April at 6:00 local time. // // // // //-CONFIGURING THE UTC OFFSET (LEAPSECOND COUNT): // // The difference between GPS and UTC time is known as the UTC offet. It // is the number of leapseconds that has accumulated since the GPS system // was started. Most GPS receivers get this from the satellites (after // the almanac and ephemeris data has been received). For devices that do // not send a UTC offset, you can set the value with the /uo= command // line option: // /uo=seconds // or you can set it with the /rx## receiver type command line option // like: // /rxt=18 // // Furuno ESIP receivers let you store a default UTC offset value in // EEPROM. This value is used until the receiver can provide the current // value. The SU keyboard command lets you set the default value. // // Until Heather has a UTC offset value, it is assumed that the time // is not valid. If no leapseoncd value is available, Heather estimates // a leapsecond value to use based upon the date. // // Heather shows UTC offset values obtained from the satellites in WHITE. // User specified UTC offsets are shown in YELLOW. Esitmated UTC offsets // are shown in RED. // // // // //-CONFIGURING THE VIDEO SCREEN SIZE: // // Lady Heather works best with a screen size of at least 1024x768 pixels. // This is the default screen mode. You can specify other fixed screen // sizes or a custom screen size with the "/v#" command line option or // via the '$' keyboard menu. The keyboard menu also allows you to tweak // the size of the text font (Tiny=8x8 Small=8x12 Medium=8x14 Large=8x16). // // Heather also now has support for an EXPERIMENTAL scaled vector font that // allows larger, more readable text on big screens. // // // WARNING: under Windows the F11 key is used to maximize the display // true full screen mode (no title bar or edge decoration). // This will ONLY work if your MONITOR size is supported by // old-style DirectDraw (i.e. 640x480, 800x600,1024x768,1280x1024). // // If your system does not support DirectDraw and/or your monitor // size is not supported, HEATHER WILL CRASH. If this happens, // Use CTRL-ALT_DEL to bring up the Windows Task Manager and // kill the heather.exe process. If your system does support it, // you can start Heather in true full-screen mode with the /fu // command line option. The MAXIMIZE button on the Windows title // bar is only enabled in "/fu" mode. // // Pressing F11 in maximized true full screen mode will restore // the screen size. // // // WARNING: The macOS version of Lady Heather using XQuartz for the display // manager does not let you restore the window size to its previous // size if you maximize the window size. You must manually resize // the window by dragging the lower right corner of the window. // // Linux can use the F11 key to toggle to/from full screen mode. Under // macOS, F11 will switch to full screen mode (but may not be able to // restore the previous screen size). // // Screen resolutions marked ** are designed for small-ish touchscreen LCD // panels. // // In Linux/macOS/FreeBSD specifying these screen resolutions automatically // enables true fullscreen mode. If your monitor screen size does // not match the selected resolution, the screen might go bonkers or // go to full screen mode for your monitor size. You can disable the // automatic setting of full screen mode for these video modes by // using "/fu /fu" commands before the /v? command. // // These modes also default to mapping all mouse buttons to the left button // (to get around potential bugs in the touchscreen driver). To disable this // use "/mb /mb" on the command line. // // /vt - Text only Video screen // /vu - Undersized (640x480) Video screen // /vp ** - Raspberry PI (800x480) touchscreen screen // /vs - Small (800x600) Video screen // /vn - Netbook (1000x540) Video screen // /vr ** - Reduced (1024x600) Video screen // /vm - Medium (1024x768) Video screen (default) // /vj ** - Large (1280x800) Video screen // /vk - Large (1280x960) Video screen // /vl - Large (1280x1024) Video screen // /vv - Very large (1440x900) Video screen // /vx - eXtra large (1680x1050) Video screen // /vh - Huge (1920x1080) Video screen // /vz - 2048x1536 Video screen // /vc=colsXrows - custom screen size (e.g. /vc=1200x800) // Heather supports screen widths up to 4096 pixels. // // /vd ** - experimental 480x320 ultra-small screen mode // (for things like Raspberry PI touchscreens). // This mode uses vector fonts and the srceen formatting // can be rather poor! // // Note that for several small Raspberry PI SPI interfaced // touchscreens the touchscreen driver does not work // well (or at all). It ignores touches!. You can // improve this by using the /mb command line option. // This maps the scroll wheel and RIGHT buttons to be // the same as the LEFT button. The touch response will // be rather slow... you have to hold the touch for 2-3 // seconds before it will be recognized. // // /ve ** - experimental 320x480 ultra-small screen mode // (for things like Raspberry PI touchscreens). // This mode uses vector fonts and the srceen formatting // can be rather poor! // // /vf - startup in (nearly) full screen window mode - this // should not be confused with true full screen mode. // /vq=scale - uses a scaled vector font. "scale" is the desired // scale factor (50 to 500 percent). This allows for // better readability on large screens. // Suggested values are 150 and 200 percent. // VECTOR FONTS ARE CURRENTLY EXPERIMENTAL AND MAY CAUSE // SOME SCREEN FORMATTING ISSUES! They also take // sligtly mode CPU power to draw. // // /vi - invert black and white on screen // // /vo - rotate image in screen window - can be useful with // small LCD displays, etc. Generally, you should // specify /vo before any /v? screen size command line // option. // // // The "$" keyboard menu also lets you change the screen resolution. The // command letters are the same as used with the "/v" commands. Note that // under Windows if you select a display size that is larger than your // screen, Heather will down-scale the screen by dropping pixels/lines... // which usually looks awful. // // Changing the screen size from the keyboard may cause Heather to // drop / add items from the display depending upon if it can find space // to show them. // // The /vu command (640x400 screen) will usually disable showing of DOP // (dilution of precision) values. Use the GX keybord command or the /gx // command line option to re-enable showing the DOP values. // // The "/vi" command line option and "$i" keyboard commands swap WHITE and // BLACK on the screen. It looks horrible, but can be useful for doing // screen dumps that will be printed on paper... you remember paper, // don't you? // // The "G~" keyboard command lets you configure the global screen color // palette. Heather uses a palette of 14 colors plus BLACK and WHITE. This // command lets you edit the RGB values for any of the 16 colors. The // GxC keyboard command lets you assign one of the 16 colors to plot "x". // // The color palette entry assigned to each of the the various plots can be // changed on a plot-by-plot basis. See the PLOTTING section for details... // // // // // //-CONFIGURING DATA CAPTURE SIZES: // // Lady Heather records several data values from the GPS receiver into // a circular buffer (called the "plot queue"). Once the plot queue // fills up, the oldest values are replaced with the newest values. // The default value for the plot queue size is 3 days of data (at one // second per point). // // You can change the plot queue size with the "/q=" command line option. // /q=100000 - 100,000 second queue size // /q=2000m - 2000 minute queue size // /q=300h - 300 hour queue size // /q=40d - 40 day queue size // /q=5w - 5 week queue size // // Each day of plot queue data (at one entry per second) uses around 15 // megabytes of memory. Heather's basic memory usage (on Windows) is around. // 10 megabytes. The plot queue and adev queues are the largest users of // of memory (in addition to the basic memory footprint). Heather's default // configuration of a 3 day plot queue and 43,200 ADEV queue entries uses // around 90 megabytes of memory. // // Normally the plot queue is updated once a second. You can change the // queue update interval with the "/i=" command line option. For queue // update intervals longer than 1 second, the GPS receiver data values are // averaged over the queue update interval and the averaged value is stored. // /i=60 - averages 60 GPS device readings and stores the result // in the plot queue. // // These values assume that your GPS receiver outputs data once per second. // If your GPS device outputs data faster than once per second (see the "!r" // keyboard command), then these values must be scaled. For instance, if // your receiver is sending 10 updates per second, "/q=100000" would hold // 10000 seconds of data and "/i=60" would update every six seconds. // // If you change the queue size from the keyboard (using the "/q" // keyboard command) the queue data will be erased. Changing the plot queue // update interval does not automatically erase the queue data, but the // plot time horizontal scale factor indication (like VIEW: 5 min/div) will // not be correct for data that was captured before the update interval was // changed. // // // You can clear the plot queue via the "C" keyboard menu. // // // You can disable updating of the plot queue with new data: // UU - from the keyboard toggles plot queue updating // /u - from the command line toggles plot queue updating // // Note that if a timestamping time interval counter is in use, the // ADEV queues will be reset because pausing the data stream disrupts the // timestamp sequence which will cause the ADEV values to be corrupted. // // // // // //-GPS WEEK ROLLOVER ISSUES // // The GPS system does not actually broadcast a date. It does broadcast // the number of weeks that have elapsed since the GPS system was first // activated. However this week counter is only 1024 weeks (around 19 years) // long. Once the week counter passes 1024 weeks, the date sent by the // GPS receiver will be wrong (like 20 years in the past wrong). // // Modern GPS receivers attempt to get around this limitation in various ways // which may delay when the rollover error occurs, but it will eventually // happen. If Lady Heather sees a date before 2018 from the receiver, it will // attempt to fix it by adding 1024 weeks to the GPS date/time until the date // appears to be reasonable. If Lady Heather has "fixed" the GPS date, the // letters "ro" appear after the date in the upper left corner of the screen // and the date will be shown in YELLOW. // // Note that if an automatic rollover correction is applied, the time will // jump. Data in the plot queue that was collected before the rollover // correction will have the uncorrected time stamps. This can cause the // the time interval data (shown as "" in the plot header to be // off from the true interval. It is recommended that if you are using a // receiver with known rollover issues to use the "/ro" command line option // to force the rollover correction befor data collection starts. // // Heather resets the plot queues if it detects a rollover fix within // 20 seconds of starting the program. // // // You can force a rollover compensation value with the "/ro=" command line // option. The rollover correction value can be either the number of 1024 // week cycles to add to the date, or the number of SECONDS to add to // the date. You can also specify an adjustment time in // weeks/days/hours/minutes/seconds by including w,d,h,m, and/or s values. // This feature was implemented for testing the calendar function, but // might have other uses. // // /ro=0 - disable automatic GPS date rollover correction // /ro - apply 1 1024 week rollover to the date // /ro=1* - apply 1 1024 week rollover to the date // /ro=2* - apply 2 1024 week rollovers to the date // /ro=12345 - add 12345 seconds to the date // /ro=-6w4d2h30m20s - subtract 6 weeks,4 days, 2 hours, 30 mintues, // 20 seconds from the date. // // Two other options are available for testing calendar/DST code. These // adjust the current rollover adjustment by the indicated value. These // should normally only be used from the keyboard. // /ro-30m20s - subtract 30 mintues, 20 seconds from the current // rollover value // /ro+20s - add 20 seconds to the current rollover value // // // // // //-CONFIGURING FILTERS: // // Many GPS receivers have options for filtering their position data in // various ways and optimizing them for the expected movement environment. // // These command line options allow configuration of the // various receiver filters from the command line. Note that not all // receivers support all of these filters. These filters are also // usually changeable from the "F" keyboard menu. // // /fa - toggle altitude filter // /fi - toggle ionospheric filter (Motorola) // /fk - toggle Kalman filter // /fp - toggle PV filter (position/velocity filter) // /fs - toggle static filter // /ft - toggle tropospheric filter (Motorola) // // For STAR-4 receivers the FT command controls fixing timestamp // errors. The STAR-4 occasionally skips a time stamp. Setting // this flag will attempt to compensate for the missing timestamp, // but this can cause the time to actuaaly be off by one second // until the receiver requests satellite info at time hh:mm:33 // // // /fd=# - display filter - the display filter averages # consecutive plot // queue values to produce a plot point. This display filter does // not change the values stored in the plot queue so can be // changed freely. // // When you are viewing a section of the plot queue that is // longer than the plot area in pixels, the extra plot values are // generated by skipping plot queue values. This can hide short // "glitches" in the data and things like the time skip, holdover, // and satellite changes. The display filter helps these missing // values become visible (particularly using the "FD -1" setting). // // If the display filter is turned on, the values shown // at the mouse cursor are the filtered values. // // Be careful when using large display filter values // with long view time displays. It can take a lot // of time to process the data on slower machines. // // If the filter count is a negative value a "per-pixel" filter // count is automatically determined based upon the plot view // interval and the plot display width. If the "per-pixel" filter // is selected the calculated filter count in shown in square // brackets like [30]. // A value of -1 averages (view_interval / PLOT_WIDTH) values // A value of -2 averages 2*(view_interval / PLOT_WIDTH) values // A value of -3 averages 3*(view_interval / PLOT_WIDTH) values // etc... // // The display filter averages the "n/2" data points each side // of the queue entry to create the displayed data point. If the // queue entry being averaged is less than "n/2" points from // the end of the captured data, the previous points in the // queue are averaged. If there are less than "n" data points in // the queue then all the data points available are averaged. // // The display filter can generate some discontinuities in the // plots at points within "n" points of the plot queue start // and end values. // // // There are also some filter settings only changeable via keyboard commands // in the "F" menu. If the receiver does not support one of these filters // it will not appear in the "F" menu. The "/f" filters listed above are // also accessible from the "F" keyboard menu. // // FC - coordinate filter // FE - satellite elevation mask angle - satellites below this angle // above the horizon will not be tracked // FF - foliage filter // FI - set ionosphere filter (Motorola receivers can do this) // FJ - jamming mode filter // FL - satellite signal level mask - satellites with signals below this // setting will not be used // FM - movement / marine filter // FT - set troposphere filter (Motorola receivers can do this) // (or filter timestamp errors for STAR-4 receivers). // FX - PDOP mask / switch setting (causes receiver to switch to 2D mode // if PDOP is less than the specified value). // // Many of the filter settings are shown in the system status column of // the screen display. You can disable showing the filters: // GY - toggle filter display on/off // /gy - toggle filter display from the command line // // // GX - toggle the DOP (dilution of precision) value display in the // receiver status information column. // /gx - toggle DOP display from the command line // // // The Thunderbolt GPSDO firmware smooths the output of the // temperature sensor with a filtering algorithm. This // filtering can mask and prolong the occasional single // point glitches that the temperature sensor produces. Lady // Heather's default action is to reverse the filtering // that the Thunderbolt firmware does. // Removal of the temperature sensor filter makes the sensor // glitches much more obvious in the temperature plots and // minimizes their effect in the active temperature // control mode. It also makes the temperature display // a little less smooth since you now see the raw sensor // readings that have around 0.01C increments (0.16C on receivers // that have the newer, but lower resolution, temperature sensors). // The "/tj" command line option toggles the temperature sensor // un-filtering mode and the smoothed temperature data is used. // // On Thunderbolts and other Trimble receivers you can save the filter // configuration into EEPROM using the "EE" keyboard command. // This will write the complete current receiver configuration into EEPROM. // // // // // //-LOG FILES // // Lady Heather can write log files of the receiver data and program status. // The log files can be written in real-time as the data comes in from // the receiver or from data saved in the plot queue. // // Log files are automatically closed and re-opened once per hour. This // provides some protection from data loss if your system crashes or loses // power. // // The contents of the log files depends upon the receiver type. // // Lady Heather supports several different log file formats. The file format // is determined by .EXTension of the log file name: // .log - a simple ASCII format log // .xml - a GPX 1.1 format file that supports extended / user defined // data types. // .gpx - a standard GPX 1.0 format file (a standardized XML file // oriented towards time and location data. // .kml - a Google KML format location file (only stores time and // lat/lon/alt) // .obs - RINEX format raw observation data (pseduorange, carrier phase, // doppler, signal level) output of receivers that can supply this // data. RINEX data can be post-proceesed to provide precise // locations. See the section below on RINEX files. // // Note that .gpx / .xml / .kml / .obsfiles are larger than the .log ASCII // files. The .xml (GPX 1.1) log format contains the most comprehensive // data including pretty much the complete receiver configuration. // // // To start logging data from the keyboard: // WLW or LW - write a new log file from real-time data // WLA or LA - append real-time data to a log file // WLS or LS - stop logging real-time data // WLH or LH - write a new log file from real-time data in formatted // HEX/ASCII packet format // // From the command line: // /w=file - set log file name to Write to // /wa=file - set log file name to Append to // // /wh - toggles writimg the log file as a formatted HEX/ASCII // packet log file instead of a data log. // // // You can also write RINEX files as a separate file. This allows you to // write a standard log file and a RINEX file at the same time: // MW - write a separate RINEX file (from the keyboard). // /mw=file - set RINEX file name to write to (from the command line) // // If you add an "*" to the end of the log file name, the log file write // buffer is flushed to disk on every write. If log flush mode is enabled // the "Log:" file name indicator is shown as "LOG:" If the log file is // already open then the /wq command line option will toggle log flush mode. // // // You can also write a file of tracked satellite time, PRN, azimuth, // elevation, and signal level data: // WLP or LP - write a sat .prn log file from real-time data. // // If you add an "*" to the end of the PRN file name, the prn log file write // buffer is flushed to disk on every write. If prn flush mode is enabled // the "Prn:" file name indicator is shown as "PRN:" // // // You can write a log file from data in the plot queue: // WA - writes ALL data in the plot queue to a log file // WP - writes the data from the area of the plot queue that is // being displayed on the screen. // // Note that the *tow* time-of-week field in logs generated from // queue data is not the official GPS time-of-week, but is just // a sequential number. // // If writing the plot window queue data to a log file // AND the plot queue is full and warping AND the queue // updates are not paused AND the plot window covers // all of the queue data, then there may be a glitch // at the beginning of the log output file. Several // seconds of the latest data can appear at the start // of the log data. // // You cannot write a RINEX file from plot queue data. // // // You can delete files: // WD - deletes a file // // // Normally Heather updates the log file every second (or every time a // new receiver data point come in). You can configure the log update // interval. // WLI or LI - set the log update interval -or- // /l[=seconds] - from the command line // // // Normally Heather does not write the satellite constellation data (sat // PRN, azimuth, elevation, signal level) to the log file. You can enable // logging of the satellite constellation data: // WLC or LC - toggle logging of satellite constellation data // /ld - from the command line // Note that the sun is logged as satellite PRN 1000 and // the moon as PRN 1001. (WAS 256 AND 257 IN PREVIOUS // RELEASES) // // // Normally Heather writes unfiltered data to log files. If the display // filter is enabled (FD keyboard command) you can toggle the writing of // filtered data to the log file: // WF - toggle writing of filtered data to the log file. // // // Normally Heather waits for any receiver id information before writing // data values to log files. You can configure heather to write log data // brfore the receiver id information has arrived. // This command can be useful if Heather thinks that a receiver should be // sending id information, but the receiver has non-standard firmware that // does not send id information. // /li - from the command line - toggles the "log id wait" flag. // // // Besides data logs, Heather also supports writing a debug log file: // WX - write debug log file -or- // /dl[=file] - from the command line (if a file name is not given // "debug.log" is used. // The content of the debug log is device dependent and subject to // change. // // // Heather also supports writing a receiver data capture file: // WY - write receiver data capture file from the keyboard // /dr[=file] - from the command line (if a file name is not given // "heather.raw" is used.) // // If you add a '*' to the end of the data capture file name, then the // data is flushed to disk every byte (default is to let the OS write the // data to disk whenever its internal buffer is full. Flushing to disk // every byte is OS resource intensive but helps make sure all data // has been written to disk if an unexpected program crash occurs. // In raw flush mode the "Cap:" log file name is shown as "CAP:". // // // // If a time interval counter is being used Heather also supports writing // a raw counter data capture file: // WT - write counter data log file from the keyboard // /dq[=file] - from the command line (if a file name is not given // "ticc.raw" is used.) // // // In ASCII format logs, the data separator can be changed from a TAB to // a comma with the command line option: // /ls - toggle log file value separator between TABs and COMMAs // /ls=c - set separator char to "c". // // // You can disable comments in log files from with the command line option: // /lc - toggle writing any comments to the log file // Note that disabling log comments means Heather cannot // calculate the date of a log entry or the log data interval // because these values are stored as special comments. // // ALSO: to read a log file that was written without comments, // the /lc command must be in effect, otherwise the file will not // be recognized as a log file because Heather uses the "#" comment // line on the first line of the file to help it recognize the // file is a potential log file. XML/GPX logs don't have this // limitation. // // // // You can disable logging of detected errors with: // /e - toggle logging of detected errors in the log file // // // Lady Heather can read in log files and show the data in the plot area. // Reading in a log file first pauses the plot queue updates from live // incoming data. The current plot queue data is cleared out unless // you preceed the file name with a '+' to append the log data to the // current data. You can then scroll around the the log file data // using the normal plot viewing commands. You can resume processing // of receiver data using the "U" keyboard command... you might want // to first clear the plot queue data ("C" keyboard menu). RINEX files // cannot be read in. // // R - read a file (with .log .xml .gpx file extension) // /r=file - from the command line // // Note that If you read in a log file, Heather should first // be configured ("/rx#" command line option) for the receiver // type that created the log file. // // Note that only one log file can be read using the "/r=" // command line option. You cannot use multiple /r= options // to read and append multiple log files. // // // // Log files can be automatically written on a scheduled basis. See the // section on SCHEDULED EVENTS for details. // // // // //-RINEX files // // Some receivers can supply "raw" data observations from the GPS satellites // (not to be confused with Heather's "raw receiver data capture files" which // record all data sent from the receiver to a file). // Raw observation data includes pseudoranges, carrier phase data, doppler, // and signal levels. Heather can write this data to a RINEX format // observation file. RINEX is an insustry standard file format used to // transfer raw data observations to post-processing services to get a // precise location. // // Currently supported receivers that can supply "raw" observations include: // Ashtech Z12 (L1 and L2 observations) // Furuno ESIP receivers (if baud rate is >= 115200 baud). // Motorola Oncore VPZ receiver (with raw measurement data firmware) // NVS-08 receiver // Ublox timing receivers // Most Trimble TSIP receivers and GPSDOs (SV6 does not work). // Trimble RT17 format receivers like the NetRS // Venus/Navspark RTK capable receivers // // The ESIP and TSIP receivers output only pseudorange, doppler, and // signal level observations. // // The Trimble telecom GPSDOs (NTBW,NTPX,NTGS,etc) can produce rather // noisy results and may not yield a usable solution. This may be // related to their tendency to cause data jumps when satellites enter // and leave the tracked constellation. Increasing the satellite // elevation and/or signal level filters may help... but settings that // are too high can cause less than 4 satellites to be tracked... which // is a bad thing... (Update: recent changes to Heather has greatly // improved the resuluts with these receivers). // // The Trimble receivers can take around 30 seconds before all satellite // ephemeris data has been collected and is available for generating // RINEX files. The original Resolution-T takes around 90 seconds to // gather all the ephemeris data. Also this reveiver requires thet the // RINEX data rate be set to 3 seconds. Note that since CSRS-PPP updated // their processing system, performance with Trimble receivers was // greatly reduced!!! Typically over 50% of observations are rejected. // // The Ashtech Z12 receiver gets its time display from the system clock. // It also uses the system clock for determining the GPS week number // rollover correction value. If the system clock is not accurate you // should avoid collecting data that includes the GPS week number change // (00:00 GPS time on Sunday). This can cause a glitch in the calculated // observation timestamps and most RINEX processing services will reject // the file. // // You can verify that the receiver can generate a RINEX file by clicking // on the satellite information table. If you see a PSEUDORANGE or // CARRIER column, you shouild be able to generate a RINEX file. // // Before a RINEX file will be written, the receiver must have a valid time // and UTC offset value. // // A lot of receivers seem to have a problem with their raw data observations // around the time of the GPS week rollover (00:00 UTC on Sunday). It is // best to not collect data that spans this time. // // For best results the receiver should be in position hold mode with a // self-surveyed or reasonably accurate position, but this is just a // suggestion. // // Note that there can be a LOT of raw data. You will probably need to // configure the receiver to a high baud rate to prevent over-running the // receiver transmit buffer. Heather now has the "!x" and MX keyboard // commands for setting the receiver baud rate for devices that support raw // data. IF YOU SET THE RECEIVER TO A NON-DEFAULT VALUE YOU WILL NEED TO // SPECIFY THE BAUD RATE ON THE COMMAND LINE (/br=...) WHENEVER YOU START // HEATHER. If the receiver type can be auto-detected and the baud rate is // one of the supported auto-detect rates (9600,19200,38400,57600,115200 // baud) then you may not need to force the baud rate setting. // // You can write the RINEX file using log file commands and specify an // file name extension of .obs or you can write the RINEX file as a separate // file (this allows you to write a normal log file and a RINEX file at // the same time. See the section above on the commands used to enable // RINEX format files. Update: Writing RINEX files as a log file is now // deprecated and should not be used. // // The receiver should be configured for a navigation message output rate // of one Hz (!r command). Heather does have some code for working // with receivers that are outputing position data at faster rates... but // it is a bit wonky and may not work properly in all cases. Also many // receivers seem to mess up / skip raw data messages at faster nav rates. // // // Heather has several commands for configuring RINEX files. You should NOT // use any of these commands while a RINEX file is being written. // // /rr=secs - sets the receiver raw data mesage output rate (in seconds). // RINEX files can be very large. The /rr command lets you // specify the raw data observation rate. Faster rates can // produce more accurate results, but generally rates of // 10-30 seconds are about as good as faster rates. Heather // does not currentlt support fractional second raw message // rates or rates faster than 1Hz. // MR - from the keyboard // // For the Ublox M8N receiver, a negative value for raw rate // enables the undocumented TRK_MEAS and TRK_SRFBX messages. // These messages are only available for M8N receivers with // early versions of the firmware. Heather does not parse // them, but the messages will be written to the reciver "raw" // data capture file (WY command) if it is enabled. RTKLIB // can be used to process the capture file into a RINEX file // (don't confuse receiver raw data capture files with RINEX // obervattion "raw" measurements / RINEX files). // // The original Trimble Resolution-T receiver has firmware // issues that cause it to only be able to output RINEX data // every 3 seconds. Normally Heather does not enable the // raw data for this receiver, but if you set the raw rate // to 3 seconds, it will do it... but the clock will only tick // every 3 seconds. Setting the rate < 3 seconds disables // raw data. Setting values over 3 seconds will use 3 seconds. // // For all all the Trimble receivers you should click on the // satellite information table and verify that the receiver // is showing PSEDORANGE data for all tracked satelliites // before starting to write a RINEX file. This usually // takes around 30 seconds or less. // // Some receivers only output observations at 1 Hz. For // thse receivers, when you set the raw rate to other than // 1 Hz, Heather drops unwanted observations by calculating // (GPS time-of-week mod raw_message rate). You must specify // a raw message rate that divides evenly into 604800. // // // /mw=name - from the command line (this is not recommended because // not all satellite information may be available before // the file starts writing) // MW - from the keyboard - opens/closes the RINEX file to write. // // // MX - from the keyboard - sets the receiver baud rate. // See the warning above about the implications of setting // the receiver baud rate to its non-default value. // // MI - set bad observation data fixup mode (default is enabled). // If enabled, Heather attempts to fix potential errors in // the RINEX data. Values that are "stuck" and not changing // are blanked. Duplicate observation time stamps are deleted, // missing observations are replaced with null records, etc. // // // /at=antenna - sets the antenna type to include in the RINEX file. // Many survey grade antennas have precisely measured // characteristics (like their phase center) and if these // are known they can be used to improve the post-processing // results. Most post-processing services have a library // of these antenna types which can be selected using an // antenna type code. The /at or MA commands lets you specify // the antenna type code. Or, you can manually edit the // RINEX file to include the proper antenna type code. // Any '_' in the antenna name are replaced with a ' '. If // the offical antenna name has an '_' in it, you will need // to manually edit the RINEX file antenna number/type record // in the file header. // MA - from the keyboard (the MA command does not have any // limittations on '_' or ' ' in the antenna name). // // // /ah=antenna_height - Lets you specify the height of the antenna above // the ground. If you don't specify an antenna height, the // post processing services will calculate the location of // the antenna (which is what you probably want if you // are configuring a timing receiver). If you specify the // antenna height then the services will return the location // of the point on the ground directly below the antenna. // Besides the antenna height displacement you can also set // the east-west and north-south displacements: // /ah=height,ew,ns - sets the antenna height and east-west and // north/south displacements (in meters). // MH - from the keyboard // // // // The following antenna and marker commands provide descriptive information // to be included in the RINEX file. This information is optional and does // not alter the the location results. // // /an=number - sets the antenna number to include in the RINEX file. // The number can be alphanumeric. // MU - from the keyboard // // // // /ak=marker - sets the marker name // MK - from the keyboard // If a marker name is not given, Heather creates one from // the receiver type (and a string of characters that // represent the satellite systems that are being used (if // available and the receiver supports multiple GNSS systems). // // /av=marker - sets the marker number // MV - from the keyboard // // // // // /rm=raw_meaurements - Heather defaults to including all available // raw measurements in the RINEX file. The /rm command // lets you control which measurements that you want to // include in the RINEX file (and also the order they are // written in. The /rm command is used for RINEX v2.11 files. // RINEX v3.xx has separate observaion lists for each satellite // system and uses different (3 character) measurement type // codes. // // Supported v2.11 measurments are: // C1 - C/A code pseudorange // L1 - L1 pseudorange // L2 - L2 pseudorange // L5 - L5 pseudorange (GPS/GLONASS/GALILEO) // L6 - L6 pseudorange (Galileo) // L7 - L7 pseudorange (Galileo) // L8 - L8 pseudorange (Galileo) // // P1 - L1 carrier phase // P2 - L2 carrier phase // P5 - L5 carrier phase (GPS/GLONASS/GALILEO) // P6 - L6 carrier phase (Galileo) // P7 - L7 carrier phase (Galileo) // P8 - L8 carrier phase (Galileo) // // D1 - L1 doppler // D2 - L2 doppler // D5 - L5 doppler (GPS/GLONASS/GALILEO) // D6 - L6 doppler (Galileo) // D7 - L7 doppler (Galileo) // D8 - L8 doppler (Galileo) // // S1 - L1 signal level // S2 - L2 signal level // S5 - L5 signal level (GPS/GLONASS/GALILEO) // S6 - L6 signal level (Galileo) // S7 - L7 signal level (Galileo) // S8 - L8 signal level (Galileo) // Note: Heather curently does not support any receivers // with L5/L6/L7/L8 signals. // // /rm - limits measurements to the L1 data // /rm=list - 'list' is a comma separated list of the measurement // types to include like: // /rm=C1,D1 - put only C1 and D1 data in the RINEX file // MM - from the keyboard // // For RINEX v3.xx the various GNSS satellite systems have separate // independent observation lists. You can set the observation types to // be used for each system: // /rmb=list - BEIDOU // MB - from the keyboard // /rmg=list - GPS // MG from the keyboard // /rmn=list - GLONASS // MN from the keyboard // /rml=list - GALILEO // ML - from the keyboard // /rms=list - SBAS // MS from the keyboard // // Heather normally writes a RINEX v2.11 format file. There is also // support (currently incomplete) for writing v3.xx files. You can select // the RINEX format with the /rf command line option. Note that none of // the standard online post-processing services seems to accept RINEX v3.xx // files. // /rf - toggle between v2.12 and v3.03 // /rf=version - set specific version type. // MF - set RINEX version from the keyboard // // Heather includes raw measurement data from all the satellites that it // sees. If the receiver supports multiple satellite systems (GPS/SBAS/ // GLONASS/GALILEO) and you want to exclude a particular satellite system's // data from the RINEX file use the SG keyboard command to disable tracking // that system. // // Another way to get RINEX files from Lady Heather is to write a raw // receiver data capture file (WX command) and use a program like RTKLIB // or TEQC to process the raw receiver data capture file into a RINEX file. // // Once you have a RINEX file you will need to process it to get precise // position data. The easiest way to do this is to submit it to an // online processing service. There are several free services available // but most only accept data from dual frequency (L1/L2) receivers. You // should probaly .ZIP the file before submitting it since they can be // very large. AUSPOS does not accept .ZIPed files. // // The CSRS-PPP service from NRCAN (Natural Resouces Canada) can handle // L1 only data. Also, they probably have the best output reports. They // are the currently recommended processing service and the only one // that currently handles L1 only data. Their results are available // 2-3 hours after the last record in the file was writen. If the file // contains GLONASS data it can take a bit longer for them to get the // GLONASS orbits. If you submit a file before the GLONASS orbits are // available, they will process the GPS data and send a report. Later // they will send another report with the GPS and GLONASS data. NOTE: // for L1 only receivers, CSRS-PPP currently seems to only process the // pseudorange data!!! Carrier phase and dopper measurements are // ignored!!! CSRS-PPP's current (upgraded?) processing system does // NOT work well with Trimble receivers... typically over 50% of the // observations are rejected! // // AUSPOS in Australia seems to report the smallest error ellipse sizes, // but the actual positions seem to differ from the results of other // processing services (perhaps due to the long base-lines to the referecnce // stations that they use). Note that you have to wait 24 hours after the // RINEX file was written before submitting the file. AUSPOS does not // seem to like .ZIPed files. They do support FTP uploads. // // OPUS in the United States seems to be VERY finicky about the input files. // They seem to reject a lot of files that CSRS-PPP and AUSPOS have no // problem with. Note that if you use a Z12 receiver, OPUS does not work // with the Z12's default 20 second raw data rate. You will need to use // the /rr= or MR command to set the raw data message interval to something // it can use. OPUS does not work with L1 only data. Although OPUS says // they can process files up to 48 hours long, but those 48 hours can only // span two calendar days. So, if you start a 48 hour run in the middle of // the day, OPUS will not process the data... bastards! // // Also note that all the post processing services have VERY poor error // reporting if something goes wrong. The typical error message is along // the lines of "Error in file" with very little hint as to what or where // the error is. // // The post-processing services use precise satellite orbit measurements, // etc to massage the receiver RINEX data to get precise locations. There // are three main types of orbit data that they use: // Ultra-rapid - based upon current and predicted measurements of the // satellite orbits. The ultra-rapid results are the // least accurate, but still are pretty good. Typical // results may be a few centimeters worse than the // more precise orbits. // Rapid - The rapid orbits are based upon data from worldwide // monitoring stations. They are available around 24 // hours after the RINEX file was written. // Precise - the precise orbits are available 1-2 weeks after the // RINEX file was written. They give the most accurate // results (but usually not significantly better than // the rapid orbits). // // Note that some receivers (like the Furuno ESIP receivers) report/want // altitude as "Orthometric" height / height above geoid. Most receivers // use GPS (geoid) altitude If you are using the post-processing results // to set your receiver's position hold location, make sure that you use // the correct altitude value (WGS84 geoid or Orthometric). // Also, different receivers may use different geoid models than the // post-processing service to get ortometric altitudes. This can lead to // reduced accuracy. Consult your receiver manual to find out if it uses // GPS or othometric altitude... hopeully they bother to tell you which one // they use... but don't count on it! At my location the GPS and // orthometric altitudes differ by around 25 meters so using the correct // altiude that the receiver expects is important. // // // // //-TIME DISPLAYS // // Lady Heather has three main time displays: // 1) The date/time block in the upper left hand corner of the screen // 2) A digital clock display // 3) An analog watch display. // // // The date/time block is always shown. It contains the time / time zone, // the date, the GPS week number, the GPS time-of-week, and the "UTC offset" // leap second count. It also indicates whether the GPS receiver is running // in GPS time mode or UTC time mode and the validity of the receiver time. // // If the receiver does not report the GPS week or time-of-week then // Heather will derive these values from the time and both the WEEK: and // TOW: values will be shown in YELLOW (instead of WHITE). // // If a GPS week rollover condition has been detected and is being // compensated for, the date is shown in YELLOW and is followed by " ro". // // The time in the time block is normally shown if BLUE if daylight savings // time is not being applied, CYAN if daylight savings time is in effect, // // The time can be shown in a few different formats: // /tp - shows time as fraction of a day // /tq - shows time as total seconds of the day // // // // The digital clock display is located between the satellite information // data and the plot area, It is normally CYAN in color. If the GPS // receiver reports invalid time, it shows in RED. If no UTC leapsecond // offset is available, it shows in YELLOW. // // GZ - from the keyboard toggles the digital clock on/off // /gz - from the command line // // Clicking on the digital clock display (or just under the satellite // information display) will zoom the digital clock display to full screen. // Cicking again will restore the screen to its previous state. // Note that short clicks might be ignored... particularly on devices like // UCCM receivers that only output time updates every two seconds. It can // help to hold down the mouse button until the screen changes. // // // You can control the format of the digital clock: // TM - toggles between a seconds resolution clock or a millisecond clock // /tsz - from the command line // // TW - toggles between a 24 hour clock and a 12 hour AM/PM clock // /ti - from the command line // // TJ - toggles between a Julian date.time clock and a normal clock // /tsj - from the command line // // TQ - toggles between a Modified Julian date.time and normal clock // /tsk - from the command line // // TN - normal 24 hours seconds clock // /tsn - from the command line // // /tsu - display time in Unix epoch seconds. // This time is adjusted for the currently set local time zone. // For actual Unix time, set the time zone offset to 0. // // /tsg - display time in GPS epoch seconds. // This time is adjusted for the currently set local time zone. // For actual GPS time, set the time zone offset to 0. // // TI - time interval (stopwatch) // /tsw - from the command line // // This toggles the digital clock display between the last selected // clock format and the number of seconds between the current time // and the time the last clock format command was issued (or the // time Heather was started up if no clock format command was // ever set). So, to reset and stop the "stopwatch", issue a time // format command (such as TN). Then you can issue the TI command // to restart the stopwatch. // // // // The watch display is located either in the upper right hand corner of // the screen or to the right of the plot area. The watch outline is // normally shown in BLUE or CYAN. It is drawn in RED if the GPS reports // that the time is not valid, and in YELLOW if no UTC leapsecond offset // is available. // // GW - from the keyboard toggles the watch on/off // /gw - from the command line // // Clicking on the watch display on the screen will zoom it to full // screen. Clicking again will restore the screen to its previous state. // Note that short clicks might be ignored... particularly on devices like // UCCM receivers that only output time updates every two seconds. It can // help to hold down the mouse button until the screen changes. // // // You can label the watch face with a "brand name". On small screens there // might not be room to show the brand name: // /tb - toggles labeling of the watch face // /tb=name - sets a brand name on the watch face. Any "_" in the brand // name is converted into a space. The brand name can be two // lines long. Separate the lines with a "/". A two line // watch name does not show the date in the clock face. // /tb= - sets the watch "brand name" to the day of the week. // This is the default setting. // // // You can specify the watch face style with the /wf= command line option // /wf=0 - normal Roman numeral clock // /wf=1 - decimal hours clock // /wf=2 - "*" hour markers // /wf=3 - 24-hour Roman numeral clock // /wf=4 - 24-hour decimal hours clock // /wf=5 - 24-hours "*" hour markers // // /wt - straight shaped hour/minute hands // /wt=0 - straight shaped hour/minute hands // /wt=1 - filled trapazoidal shaped hour/minute hands (default) // /wt=2 - hollow trapazoidal shaped hour/minute hands // // // // The watch display includes a representation of the moon at its current // location in the sky and with its current phase. The moon is shown in // YELLOW if it is visible and GREY if it is below the horizon. The sun // is shown as a filled in yellow circle with "rays" if it above the horizon // and as an empty yellow circle with rays if it below the horizon. // The watch display also flags when the moon is new, quarter, or full. // Also "blue" and "black" moons are shown. // // You can disable the sun/moon images in the satellite map and watch // displays using the command line options: // /kj - toggle sun/moon drawing // /kj=0 - disable sun/moon drawing // /kj=1 - disable sun drawing // /kj=2 - disable moon drawing // /kj=3 - disable sun and moon drawing // // // Note that the watch display is not updated while a keyboard command // menu is being displayed and the "GB" option is in effect that allows // maps and/or the watch to be displayed in the plot area. // // // The ZC keyboard command will zoom the clock display to full screen. // // The ZW keyboard command will zoom the watch display to full screen. // Clicking the mouse will toggle between the zoomed watch and digital // clock displays. // Clicking in the upper left hand corner of the screen will restore // the screen to normal mode. // Note that short clicks might be ignored... particularly on devices // like UCCM receivers that only output time updates every two seconds. // It can help to hold down the mouse button until the screen changes. // // The ZB keyboard command will zoom the watch and satellite map displays // to full screen overlayed on each other. // Clicking the mouse will switch to the ZV display where you can then // click again to select another display to zoom to full screen. // Clicking in the upper left hand corner of the screen will restore // the screen to normal mode. // Note that short clicks might be ignored... particularly on devices // like UCCM receivers that only output time updates every two seconds. // It can help to hold down the mouse button until the screen changes. // // // Note that the watch or clock do not have to be enabled on the main // screen for the zoomed displays to work. Pressing any key (except '\') // will restore the main display screen if it has been zoomed. '\' will // dump a .GIF image of the zoomed screen to the file "xxxx.gif" where xxxx // is the receiver type (if you press SPACE to bring up the keyboard help // screen, the file name used will show up by the '\' entry). // // You can also force a screen dump by left-clicking on the screen where // the "Receiver data" info is near the upper left hand corner of the // screen. This is handy if you are using a touch-screen. // // // The "/ta" toggle command line option shows dates in the European // the European dd.mm.yyyy format instead of the normal 12 Oct 2016 // format. // // The "/tl" toggle command line option shows dates in the ISO // yyyy.mm.dd format instead of the normal 12 Oct 2016 // format. // // // // // //--PENDING LEAPSECOND DISPLAY // // Many GPS devices report when a leapsecond adjustment has been announced. // Heather shows this in the receiver status column. Leapsecond // announcements are generally made 6 months in advance. // // If the receiver supports leapsecond announcements but no leapsecond // is pending it shows "No leap pend" in GREEN. If a leapsecond // adjustment has been announced it shows "Leap pending" in YELLOW. // // Many receivers send enough enough information to determine the date of // the leapsecond event. If this information is available the leapsecond // status shows a countdown clock like "Leap 45 days". If the receiver // does not report the exact date of the leapsecond, Heather assumes it // will be on the last day of June or December and indicates this guess // by "Leap 45 days?". // // As the time of the leapsecond nears, the countdown clock starts showing // hours, then minutes, then seconds until the leapsecond. When showing // hours, any fractional hour count is rounded up, so the countdown // clock will show 2 hours then 59 minutes. // // Some receivers (like the Z3801A and Z3812A have firmware bugs that // expect a leapsecond announcement no more than 3 months in advance. // These receivers will display an invalid leapsecond date while the // pending leapsecond is more than three months in the future and may // take several days to figure out the proper leapsecond date once the // erroneous date has passed. // // // // // // //--DATE AND CALENDAR DISPLAYS // // Lady Heather can display the date in various calendar formats. The // calendar type is selected by a command line option: // /d - default Gregorian calendar // /da - Afghan calendar // /db - Mayan Haab calendar // /dc - Chinese calendar // /dd - Druid calendar // /dh - Hebrew calendar // /di - Islamic calendar // /dj - Julian date // /dk - Kurdish calendar // /dm - Modified Julian Date (MJD) // /di - Indian civil calendar // /dp - Persian calendar // /ds - ISO date (yyyy-day_of_year) // /dt - Tzolkin calendar // /dv - Bolivian calendar // /dw - ISO week format (yyyyWww-dow) // /dx - Xiuhpohualli (Aztec Haab) calendar // /dy - Mayan calendar // /dz - Aztec Tonalpohualli calendar // /dyyyymmdd - force date to year yyyy, month mm, day dd for testing // (use a leading zero for months/days less than 10) // // For several of the calendars you can specify an epoch correction factor // for the date calculations. The correction factor is the number of days // (+ or -) to add to the default date calculation. This is to compensate // for various interpretations of when the calendar should begin. // // /db=days - AZTEC_HAAB // /dc=days - CHINESE // /dd=days - DRUID // /dt=days - TZOLKIN // /dv=days - Bolivian // /dx=days - Xiuhpohualli // /dy=days - MAYAN // /dz=days - AZTEC Tonalpohualli // // // Heather has a "greetings" calendar function. This displays a message // at the bottom of the plot area whenever a special event or day occurs. // The greetings calendar is read from the file "heather.cal". If no // calendar file is seen, Heather uses an default internal calendar file. // // In addition to displaying a greeting, you can specify a time to sound // the alarm on the day of a greeting. // // // You can disable the greeting calendar with: // /gn - toggles the greetings calendar from the command line // // // The calendar file should be placed in the same directory as the // "heather.cfg" file. The proper directory is shown when you do a // "HEATHER /?" command line or enter ? from the keyboard. // // When a calendar file date is matched to the current date, the message is // displayed at the bottom of the plot window until erased (G G command) // or the start of the next day. Up to 5 calendar match entries can be // shown for one day. // // Fields on each line in "heather.cal" are: // nth - event happens on the n'th occurance of DAY in the month // (negative values are from the end of the month) // (positive values are from the start of the month) // (zero means the event occurs on a fixed day number) // Values >= 100 are codes for holidays that must be specially // calculated. // // day - The DAY of the month if nth is 0 // The DAY of the week if n'th is not zero // (0=Sunday, 1=Monday, ... 6=Saturday) // // month - (1=January ... 12=December 0=ignore this entry) // // If DAY < 0 then MONTH is the day-of week code. // This allows for doing days like Friday the 13th (0, -13, 5) // // // text - The text to display when the event occurs. If the text begins // with "@hh:mm:ss" this will set the alarm to sound at the // specified time on the day of the alarm. For example a calendar // file enrty of: // 0 1 1 @00:00:00 Happy New Year // will sound the alarm at midnight on New Year's Day. // // Note that if an alarm is alreay set, the calendar alarm will // not override it. // // Comment lines can start with # * / or ; in column 1 // // // // // //-AUDIBLE CLOCKS, ALARMS, and SCHEDULED EVENTS // // Lady Heather has several audible clock modes that signal the time via // the computer's sound system. // // The singing clock: // The singing clock signals the time by playing .WAV files at fixed // intervals throughout the hour. It is activated via: // TH #S - from the keyboard // /th=#s - from the command line // // The number (#) is the number of times per hour to play the files. // For instance /th=4s says to play a sound file 4 times per hour (every // 15 minutes). The files to play should be placed in the default // heather directory are named: // "heather_songxx.wav" where xx indicates the minutes. // // if # is 0 or not given, the singing clock is disabled. // // If the singing clock is activated a double musical note symbol is // shown near the upper left hand corner of the screen. // // At 1 second past midnight on New Years, the file "heather_new_year.wav" // will be played (if it exists in the current installation directory). // // // Westminster Chime (Big Ben) mode: // TH 4W - from the keyboard // //th=4w - from the command line // // This mode is very similar to the singing clock, except on the hour // the file played is "heather_hourxx.wav" NOTE THAT THE LADY HEATHER // DISTRIBUTION DOES NOT INCLUDE THE NEEDED .wav files. To implement a // proper Big Ben clock, you would need twelve .wav hour files: // (heather_hour00.wav through heather_hour11.wav) with the full // Westminster chime sequence and gongs for each hour. You would also // need heather_song15.wav, heather_song30.wav, and heather_song45.wav // files with the appropriate Westminster chime sequences. // // // The cuckoo chime clock: // The cuckoo chime clock signals the time by playing .WAV files at the // hours and at intervals throughout the hour. It is activated via: // TH #H - from the keyboard // /th=#h - from the command line // // The "heather_chime.wav" file is played x times on the hour (where x is // the current hour). In addition the file is played once (#-1) times // during hour. For instance /th=4h says to play the file x times at the // hour and 3 more times times during the hour (every 15 minutes). The // file "heather_chime.wav" should be less than once second long. // // If # is 0 or not given, the chime clock is disabled. // // If the cuckoo chime clock is activated a single musical note symbol is // shown near the upper left hand corner of the screen. // // // The ships bell clock: // The ships bell clock signals the time in ships bells format. Ships bells // sound on the hour and half hour. Ships bells mode is activated by: // TH 1B - from the keyboard enables ships bell mode // /th=1b - from the command line enables ships bell mode // The bell sound is from the file "heather_bell.wav" This file should be // less than two seconds long. // // if 0B is used instead of 1B, the ships bell clock is disabled. // // If the ships bell clock is activated a '#' symbol is shown near // the upper left hand corner of the screen. // // // The tick clock: // Entering "1T" for the clock type enables the ticking clock. // This mode sounds a tick on the second. // // Entering "2T" for the clock type enables the minute clock. // This mode sounds a beep on the minute. // // Entering "3T" for the clock type enables the minute beep / ticking // second clock. This mode sounds a beep on the minute and a tick // sound on the second. // // Normally the tick clock sounds when the receiver time message comes // in. By adding a "F" to the command, the "fine tick clock" will be // enabled. This mode attempts to align the ticks to real time by // adjusting the ticks for the /tsx (or TO) message delay offset. // Note that the fine tick clock may not work well with some "polled" // receivers... the Brandywine GPSDO is particularly bad in tick clock // mode ... // // If the file "heather_minute.wav" exists in the heather installation // directory exists, this file is played on the minute instead of the // beep sound. // // If the file "heather_second.wav" exists in the heather installation // directory exists, this file is played on the second instead of the // heather_click.wav sound file. If neither file exists then a BEEP // is used. // // Entering "0T" for the singing clock type disables the tick/beep clock. // // // // Note that the Windows versions of Heather plays sound files via the // PlaySound() system call, the Linux versions use system() to spawn a // /bin/sh command to the "aplay" program, and macOS spawns a /bin/sh // command to the "afplay" program. If your system does not support these // sound file player programs, modify the function "play_tune()" // in file heather.cpp // // // EGG TIMER ALARMS // // Heather supports two types of alarms: // An "egg timer" mode where a countdown timer is started and when it // reaches 0, the file "heather_alarm.wav" is played. The alarm sound is // usually played continuously (and the screen flashes) until a key // is pressed which cancels the alarm. You can set the timer to only // play the sound file once by following the time interval with the // letter "o". You can set the timer to automatically repeat by following // the time interval with the letter "r" // // // To start the timer from the keyboard: // TA 5S - sound the alarm continuously after 5 seconds // TA 10M - sound the alarm continuously after 10 minutes // TA 3H - sound the alarm continuously after 3 hours // TA 2D - sound the alarm continuously after 2 days // TA 10MO - sound the alarm once after 10 minutes // TA 20MR - sound the alarm continously every 20 minutes // TA 30MOR - sound the alarm once every 30 minutes // // You also set the timer from the command line with the "/na=" command // line option: // /na=5s - (see the keyboard commands listed above for the various // timer modes) // // If a countdown timer is enabled and the watch display is enabled, a // YELLOW tick mark is shown at the edge of the watch face. // // // // ALARM CLOCK MODE: // Heather has an alarm clock mode where you specify a time (and optional // date) for the alarm to sound. The commands are the same as for the egg // timer, but you specify a specific time (and optional date) for the // alarm instead of an interval. Alarm clocks are always a repeating // alarm and must be manually canceled unless a date has been specifed. // If a date has been specified the alarm setting is cleared once the // alarm has sounded and the user stops the alarm (by pressing a key). // // TA 14:15:16 - sound the alarm continuously every day at 14:15:16 // TA 14:15:16o - sound the alarm once every day at 14:15:16 // TA 8:0:12 2016/12/25 - sound the alarm at 8:00:12 on 25 December 2016 // TA 8:0:12 12/25/2016 - sound the alarm at 8:00:12 on 25 December 2016 // // If you set an alarm time that is before the current time, the alarm // sounds on the next day. // // You also set the alarm from the command line with the "/na=" command // line option: // /na=14:15:16 // /na=14:15:16,2016/12/15 (note non-space char between time and date // /na=14:15:16o2016/12/15 is needed on command line alarms) // // Dates can be of the form yyyy/mm/dd, dd/mm/yy, or dd/mm/yyyyy. // If only a date is given, the time is assumed to be 00:00:00 on that date. // // If an alarm clock is enabled and the watch display is shown, a // RED tick mark is shown at the edge of the watch face. // // Note that if you have one of the astronomical time zones set (such // as GMST) alarms are normally based upon your LOCAL time zone time and // NOT the displayed astronomical time. You can force the alarms to be // triggered based upon the displayed astronomical time with the "OT" // keyboard command. This is the reason you should include your time zone // hour offset when using an astronomical time scale. e.g. /tz=GMST6GMST // // // Following the setting string with an "A" enables "modem alarms". This // uses the modem control signals DTR and RTS to signal when an alarm // is sounding. The modem control signals default to DTR=+12V RTS=-12V. // When the alarm is sounding DTR will be -12V and RTS will be +12V. // (OK, the actual voltage is dependent upon your serial port driver). // For instance: // T4SA // will use the modem control signals to inform an external device that // an alarm or egg time has triggered. // YOU SHOULD NOT USE MODEM ALARMS WITH an ACRON ZEIT receiver or if // active temperature control is in use... these use the modem control // signals for other stuff. // // // // SCHEDULED KEYBOARD SCRIPT RUN: // Heather has a mode where the keyboard script file "timer.scr" can be // automatically run after a specified time interval or at a specified // time and/or date. You specify a time (and optional date) for the // timer script to be run. The keyboard script commands are very // similar to the egg timer and and alarm clock commands. // // TP 14:15:16 - run the script every day at 14:15:16 // TP 8:0:12 2016/12/25 - run the script at 8:00:12 on 25 December 2016 // TP 8:00:12 12/25/2016 - run the script 8:00:12 on 25 December 2016 // TP 1h - run the script in one hour. // TP 100mr - run the script every 100 minutes. // // You also set script time from the command line with the "/np=" command // line option: // /np=14:15:16 // /np=14:15:16,2016/12/15 (note non-space char between time and date // /np=14:15:16o2016/12/15 is needed on command line alarms) // // Dates can be of the form yyyy/mm/dd, dd/mm/yy, or dd/mm/yyyyy. // If only a date is given, the time is assumed to be 00:00:00 on that date. // // Note that if you are typing on the keyboard while the timer script // is being run, the script will be interrupted. // // // // // KEYBOARD SCRIPT FILE ALARM WAITS // If, in a keyboard or timer script file, you follow an egg timer or alarm // clock time with the letter "W", the processing of the script file will // be paused until the alarm triggers. The command that sets the alarm // time MUST be the last command on the line AND the next line in the // script file MUST be a blank line or comment! // // // // SCHEDULED EXTERNAL PROGRAM EXECUTION: // Heather has a mode where an external program can be automatically // run after a specified time interval or at a specified time or date. // You specify a time (and optional date) for the program to be run. // The scheduled program execution commands are similar to the // egg timer and and alarm clock commands. // // TC 14:15:16 - run the program every day at 14:15:16 // TC 8:0:12 2016/12/25 - run the program at 8:00:12 on 25 December 2016 // TC 8:00:12 12/25/2016 - run the program 8:00:12 on 25 December 2016 // TC 1h - run the program in one hour. // TC 100mr - run the program every 100 minutes. // // You also set the program execution time from the command line with // the "/nc=" command // line option: // /nc=14:15:16 // /nc=14:15:16,2016/12/15 (note non-space char between time and date // /nc=14:15:16o2016/12/15 is needed on command line alarms) // // Dates can be of the form yyyy/mm/dd, dd/mm/yy, or dd/mm/yyyyy. // If only a date is given, the time is assumed to be 00:00:00 on that date. // // The name of the program to run is fetched from the "HEATHER_EXEC" // environment variable. If HEATHER_EXEC has not been defined, the // program "heather_exec" is run. // // The /ne command line option disables the file editing and execution // commands. Once /ne is used, it cannot be re-enabled. This command is // a security measure to block possible malicious exploitation of these // features. On Linux/macOS "/ne /ne" also disables playing of sound files // vis system() calls to APLAY. // // // // AUTOMATIC PROGRAM EXIT // // You can configure Heather to automatically quit at a given time or after // a given time interval. This works just like the egg timer mode or alarm // clock mode. The commands to do this are: // TX - from the keyboard - see TA command for details // /nx - from the command line - see /na command for details // // // // AUTOMATIC LOG FILE DUMPS // // You can configure Heather to automatically write the plot queue data // to a log file at a given time or after given time interval. This works // just like the egg timer mode or alarm clock mode. The commands to do // this are: // TL - from the keyboard - see TA command for details // /nl - from the command line - see /na command for details // // The format for the scheduled log dump files defaults to ASCII (or XML // for the HP-5071A). You can change this with command line options: // /fg - toggle .GPX format for scheduled log file dumps // /fx - toggle .XML format for scheduled log file dumps // // If the command setting contains the 'o' character // the file "tblog.log" is re-written each time a dump // occurs. Without the 'o' character, the file // "tbyyyy-mm-dd-#.log" is written (where #) is an incrementing // sequence number. See the /fg and /fx commands for using .gpx and .xml // log formats. // // Example: to write the log dump to the file "tblog.log" every 30 minutes // use the command line option "/nl=30mor" or "TL 30mor" from the keyboard. // (the 30m says do it every 30 minutes, the "o" says to do it to // one file, the "r" says to do it on a repeating basis). // // You can change the "tb" prefix using in automatic log dump file names // with the /wp=prefix command line option. // // // // AUTOMATIC SCREEN IMAGE FILE DUMPS // // You can configure Heather to automatically write a screen dump image // to a .GIF file at a given time or after given time interval. This works // just like the egg timer mode or alarm clock mode. The commands to do // this are: // TD - from the keyboard - see TA command for details // /nd - from the command line - see /na command for details // // If the command setting contains the 'o' character // the file "tbdump.gif" is re-written each time a dump // occurs. Without the 'o' character, the file // "tbyyyy-mm-dd-#.gif" is written (where #) is an incrementing // sequence number. // // Example: to write the screen image to the // file "tbdump.gif" every 30 minutes use the command // line option "/nd=30mor" or "TD 30mor" from the keyboard. // (the 30m says do it every 30 minutes, the "o" says to do it to // one file, the "r" says to do it on a repeating basis). // // You can change the "tb" prefix using in automatic screen dump file // names with the /wp=prefix command line option. // // Screen dump mode is indicated on the screen by a '!' // or !! next to the time mode indicator on the first // line of the screen. // // // If a leap-second is observed (seconds value = 60, duplicated xx:00:00 // time stamp, or duplicated xx:59:59 time stamp) then Heather automatically // does a screen dump to the file "leap_sec.gif" On some receivers // this might capture the previous second (xx:xx:59)... such is // life. When a leap-second screen dump is done, the leap second value // in the status column shows "Leap: captured" in YELLOW. You can clear // this indication with the GR keyboard command. // // // Note that when a screen or log dump happens, Heather first creates the // the file "tblock", next the image/log file is written, and then the // "tblock" file is deleted. This can be used by external scripts to // minimize (but not totally eliminate) the chances of an external // script/program accessing the dump file while it is being written. // // // // // //-SETTING THE SYSTEM TIME FROM GPS // // By far the best way to keep your system time accurate is to use an // Internet time protocol like NTP. This can keep the system clock highly // accurate and monotonic (i.e. it does not jump back and forth, it smoothly // increments at a rate to keep the system time accurate. // // However, if you do not have an internet connection available, Heather can // set the system time from data available from the GPS receiver. Heather // can set the system clock on demand, every minute, every hour, every day, // or whenever the system clock diverges from the GPS time by more than "x" // milliseconds. // // TS - from the keyboard - set the system clock once to the current // receiver time. // /tso - from the command line - set the system clock once when Heather // starts up and has valid time from the GPS receiver. // /tsm - from the command line - set the system clock once a minute // (the time is set at hh:mm:06 local time) // /tsh - from the command line - set the system clock once an hour // (the time is set at xx:00:06 local time) // /tsd - from the command line - set the system clock once a day // (the time is set at 04:05:06 local time) // /tsa - from the command line - set the system clock anytime the system // clock differs from the GPS time by over 40 milliseconds (Windows) // or 10 milliseconds (Linux, macOS) // /tsa=msecs - from the command line - set the system clock anytime the // system clock differs from the GPS time by over "msecs" // milliseconds // // Most operating systems require programs that manipulate the system clock // to have administrator / root permissions. You can check if Heather can // can set the system clock by issuing a "TS" command from the keyboard. // Within a few seconds you should hear a BEEP if the time set command was // accepted. // // Heather sets the system clock by "jamming" the time into the system. It // makes no attempt to keep the clock monotonically increasing. This can // be a bad thing for some systems, but, well, beggars can't be choosers. // // // GPS receivers typically send out a message once per second that contains // the time. Heather uses when the last character of this message arrives // to set the system clock. One problem is that different receivers send the // the time message at different offsets from the true time. Also variations // in the computer, operating system, receiver configuration, serial port, // etc used can affect when the message actually arrives. // // You can set the message offset time (in milliseconds) with the command // line option: // /tsx=milliseconds or the TO keyboard command // // Milliseconds can be positive (message arrives AFTER the true time value // encoded in the receiver time message) or negative (message arrives BEFORE // the true time) Most receivers have a 1PPS (pulse per second) output // signal that indicates true time. Heather does NOT use the 1PPS signal. // // If you do not set a message offset value, Heather uses a default value // for a typical model of that receiver. For maximum accuracy you // you should set the message timing offset adjustment factor for your // particular system and receiver configuration. Heather can help determine // the message offset adjustment to use. // // For this to work, your system time must be set accurately. If you are // using a network time protocol like NTP, you should be good to go. // Otherwise let Heather set the system time with a "TS" command from the // keyboard. // // Then issue the "TK" keyboard command. This starts measuring the // difference between the system clock and the receiver timing message times. // It builds a histogram table and also calculates an average value of the // message offset time. For the histogram to work, the system and GPS time // need to be within two seconds of each other. // // When measuring the message timing the timing jitter is plotted in the G0 // plot and the message offset time is shown in the G9 plot. Also ADEV // (Allan variance) tables are shown for the message offset time and jitter. // The G0 and G9 plots do not show up as options in the "G" keyboard menu, // but are available... // // Let the system run for a minute or so. Then issue the "TK" command // again. This should print a message at the bottom of the plot area like: // // # msg offset time: /tsx=246.00 msec max hits:10 points:34 avg:254.35 sdev:10.16 // // There are two values of interest in this message: // /tsx=246.00 and avg:254.35 // // These values should be close to each other. The "/tsx" value is the // most common value in the histogram and the "avg:" value is the average // value seen. Some receivers do not send the timing message in a consistent // manner. If the "/tsx" value and the "avg:" value are not close or the // "SDEV:" (standard deviation) value is large then using the receiver for // setting the time may not give optimum performance. The "TK" measurement // mode also writes a ".jit" file with the histogram values and measurement // results. // // With some receivers, Lady Heather's periodic polling // of the receiver for status info, etc can put spikes in // the timing measurements. If this is a problem use the // "/ix" command line option to disable the sending of commands // to the receiver. The spikes should not affect the // message offset time measurements but can affect the // message jitter standard deviation measurements. Issue // the "/ix" command again to re-enable status polling. // // // Tell Heather what your system message offset is with the command line // option: // /tsx=msecs - msecs is the value shown the the measurement results // described above. Or use TO from the keyboard. // // Note that the "TK" timing measurement mode flogs the system CPU rather // hard. You can see CPU usage stats approaching 100% in this mode. This // can produce heating that can affect the system clock rate after a while. // Ideally you should do the timing measurement test when the system has // been running normally (for you) for a while to let it settle down at your // typical operating temperature. The difference is probably not much, but // in the world of precision timing, every little bit helps. // // // // // //-SETTING THE GPS RECEIVER POSITION and DOING ANTENNA LOCATION SURVEYS // // First a word about ALL the various values that Lady Heather reports... // The various values shown by Lady Heather are reported to a decimal // point precision represented by the data fields that the receiver // messages contain. Just because your receiver says the altitude is // 123.4567890 meters does NOT mean the altitude is actually ACCURATE to // that many decimal places... Heather just shows what the receiver is // sending out... garbage in, garbage out. // // // Lady Heather shows the latitude/longitude/altitude position that the // receiver is currently reporting. It can show the position in various // formats. From the keyboard: // // GLD - decimal format // GLS - degrees/minutes/seconds format // GLR - decimal radians // GLG - decimal grads (400 grads in a circle) // GLI - decimal mils (6400 mils in a circle) // GLE - ECEF (Earth Centered Earth Fixed) coordinates // GLH - Maidenhead grid square (ham radio) // GLU - UTM (Universal Transverse Mercator) // GLN - NATO MGRS (Military Grid Reference System) // // GLT - toggle display of solid earth tide displacements and vertical // gravity offset (in uGals) instead of the normal lat/lon/alt // coordinates. In GLT mode the lat/lon scattergram (GI keyboard // command shows the latitude/longitude earth tide displacement // in mm. // // GLF - show altitude in feet // GLM - show altitude in meters // GLL - show altitude in linguini (7.1429 standard linguini per meter) // // GLP - private location - latitude and longitude are not displayed. // (so you can publish screen shots without revealing the location // of your evil mad scientist volcano lair to the world) // // GLA - toggles autoscaling of the lat/lon/alt scattergram scale factor // to match the span of the lat/lon data values seen. When // autoscaling is enabled the "m/div" or "ft/div" value in the // scattergram header is shown in UPPERCASE. Autoscaling the // scattergram can be useful if you are using the receiver in a // moving environment. // // If you are in scattergram auto-scale mode and move the mouse // pointer into the scattergram area, the lat/lon location of the // mouse pointer will be shown below the scattergram. // // WARNING: LLA autoscaling is currently experimental can can be // a bit flakey. Before enabling autoscale mode make sure all // the lat/lon data in the plot queue is valid (i.e. no bogus or // 0.0,0.0 lat/lon values due to receiver startup). It's best // to clear the plot queue after the receiver starts producing // valid lat/lon values and before enabling autoscale mode. // // /gld, etc - set the location format from the command line. The // command line option to use is the same as the keyboard // commands listed above with a leading "/" or "-". // // /t" - toggle between degrees.minutes.seconds / decimal location format // (this is a legacy command for compatibility with earlier // version of Lady Heather). // // // Heather also records the lat / lon / alt data in the plot queue and // can display the location data in the plot area or as an X-Y "scattergram" // of distance from a reference point. // // G1 - from the keyboard - toggle the latitude plot on and off // G2 - from the keyboard - toggle the longitude plot on and off // G3 - from the keyboard - toggle the altitude plot on and off // GV - from the keyboard - toggle the lat/lon/alt (G1 / G2 /G3) plots // on and off // // For the Zyfer Nanosync receiver the G1/G2/G3 plots show some // undocumented information. These are HETE/HEFE/HEST. These are thought // to be holdover estimated time error, holdover estimated frequency // error, and holdover estimated 24 hour error... but who knows // // The G1/G2/G3 plots are also used to display other values for the // HP-5071A and TAPR TICC devices since these devices don't have // lat/lon/alt related values. // // // THE LOCATION FIX SCATTERGRAM // // Heather can plot a "scattergram" of the location fix data relative to // a fixed reference point. The reference point is the location that // was active when the scattergram was activated. The scattergram is // automatically enabled if a position survey is started. Every hour the // color of the dots in the scattergram changes (14 colors are used). // // You can change the scattergram reference point with the SR keyboard // command. The SR command defaults to using the current lat/lon/alt. // If the lla scattergram reference has been manually set the lat/lon/alt // labels are shown in all upper case. They are normally in upper and // lower case. Toggling the scattergram off and on cancels the user // set reference position. // // If you use the letter 'A' for a location value then the current // average of the lat/lon/alt value will be used. The average is // calculated from the data displayed in the plot area. To use the // average of all data in the plot queue, first use the VA command to // display all plot data and "FD -1" to do a per-pixel average. // // If you use '*' as a location value then the current value of the // lat/lon/alt value will be used. // // If you specify a sign of '++' or '--' before a lat/lon/alt // value the current location of that value will be moved by that // number of meters (or feet if in /t' mode). // // The scattergram grid defaults to a resolution 3 meters or 10 feet // per division (with +/- 5 divisions from the center reference point. // You can change the scattergram grid scale factor with a command // line option: // /tm=meters_per_division // /t'=feet_per_division // /tlg=linguini_per_division // // You can also set the scattergram to auto-scale: // GLA - toggles autoscaling of the lat/lon/alt scattergram scale factor // to match the span of the lat/lon data values seen. When // autoscaling is enabled the "m/div" or "ft/div" value in the // scattergram header is shown in UPPERCASE. Autoscaling of the // scattergram can be useful if you are using the receiver in a // moving environment. // /gla - does GLA from the command line // // GI - toggle the lat/lon "scattergram" on and off from the keyboard. // /gi - toggle the lat/lon "scattergram" on and off from the command // line. // ZL - zoom the scattergram to full screen // SR - change the scattergram reference position // // In earth tide display mode (GLT keyboard command) the lat/lon // scattergram shows the latitude/longitude earth tide displacement // in mm. The scale is fixed at 12.5 mm per division. This display // is not available with the HP5071 cesium beam oscillator. // // Clicking the left mouse button on the lat/lon/alt information display // of the scattergram will zoom the lat/lon scattergram to full screen. // Clicking again will restore the normal screen display, // Note that short clicks might be ignored... particularly on devices // like UCCM receivers that only output time updates every two seconds. // It can help to hold down the mouse button until the screen changes. // // // // ANTENNA LOCATION SURVEYS // // Most GPS timing receivers and disciplined oscillators require a fixed // location for the antenna and its position must be known to very high // accuracy for optimum operations. These devices can usually operate // in a "position hold" mode or a "3D fix / navigation" mode. Position // hold mode is also called "overdetermined clock" mode. // // The accurate fixed location can be input manually by the user or the // receiver can automatically determine it by doing a "self-survey" where // it collects data for a period of time and averages/filters the readings // to come up with an accurate location. Most receiver self-surveys last // for at least 20 minutes and may take hours. Some devices let you // specify the time interval to survey for. // // Lady Heather can also do a precision median survey to determine the // location. This collects data for several hours (48 hours is the default) // and statisically processed the data using medians and averages over // several time intervals to come up with a precise location that is usually // better than the standard receiver position survey. The GPS satellite // orbits repeat on a roughly 12 hour basis (with 6 hours of visibility // for each orbit). A 48 hour survey allows for 4 repeats of the complete // satellite constellation and allows the precision survey to mitigate // a lot of signal problems such as multi-path distortion. If you cannot // wait for 48 hours, 24 hours works well, and 12 hours is OK. // // If a precision survey is done, Heather logs the readings and results in // a ".lla" file. Precision surveys can be done on receivers that do not // support a "position hold" mode. After the survey completes you can // check the ".lla" file for the results. The calculated position will be // shown at the end of the file. Previous versions of Heather always // wrote the file "lla.lla". Heather now uses ????.lla where ???? is // based upon the receiver type. To avoid lla log file name conflicts // you should not run more than one precision survey at a time if the // receiver types are the same. // // Trimble Thunderbolt receivers do not have a command for entering the // position using double precision numbers. Heather tries to write the // calculated precision location or the manually set location to the // device by doing single point self-surveys until one is within a foot // of the desired location. This process takes an indeterminate amount // of time! // // Interrupting a standard survey or precise position survey save // will save the current location using the lower precision // TSIP command. So will exiting the program while a survey is // in progress. // // Some GPSDO devices (mainly telecom surplus devices) do not have a // "navigation" mode that lets them output 3D fixes. You cannot do a // precision survey on these devices. // // // To enter a location manually and set position hold mode: // SL - from the keyboard. The latitude and longitude can be in // decimal or degrees/minutes/seconds format like 30d40m50.60s // Wherever Heather expects a lat/lon/alt string you can specify // a value of "loc" and the location will be read from the file // "heather.loc" (if it exists). // // The SL command can also be used with devices that do not output // lat/lon/alt info. Entering a location for these devices allows the // astronomical / sun / moon features of Heather to work. // // // The command that Trimble receivers use to set a position only uses // single precision floating point numbers. These are not accurate enough // to resolve lat/lon to meter level precision. The ST command can be // used to save a more accurate position by doing multiple single point // self surveys until one happens to land within 1 meter of the desired // location. This process can take an indeterminate amount of time // (incuding forever!). Note that the ST command does not appear in // the "S" keyboard menu. To figure out which method of saving a position // on a Trimble receiver works best for your situation try: // 1) set the precise location with the SL command // 2) calculate the distance between the saved location and the entered // location with the SD commad (SD precice_lat precise_lon 0.0) // 3) write down the calculated distance // 4) do a precice location save of the precice location: // ST precise_lat precise_lon precise_alt // 5) wait for the precice location save to end // 6) calculate the distance between the new saved location and the // entered location with the SD command: // SD precice_lat precise_lon 0.0 // 7) if the new reported distance is greater than the old distance // from step 3, do step 1. // // Heather can also get the location automatically from the file // "heather.loc" in the Heather installation directory. This file is // only read if the main input device does not report a location (i.e. // is not a GPS based device) or if you specify a value of "loc" when // Heather requests a lat/lon/alt location value. // // // If you use the letter 'A' for a location value then the current // average of the lat/lon/alt value will be used. The average is // calculated from the data displayed in the plot area. To use the // average of all data in the plot queue, first use the VA command to // display all plot data and "FD -1" to do a per-pixel average. // // If you use '*' as a location value then the current // value of the lat/lon/alt value will be used. // // If you specify a sign of '++' or '--' before a lat/lon/alt // value the current location of that value will be moved by // that number of meters (or feet if in /t' mode). Note that moving // the lat/lon scattergram reference point is not available if // scattergram auto-scaling is enabled (GLA command). // // // To start a native receiver self survey: // SS - from the keyboard. It will request a value for the length // of the survey. Depending upon the receiver type the length // will be in samples, seconds, minutes, or hours. A few // receivers can only perform a fixed length survey. If a survey // is in progress, issuing SS again tries to stop the survey. // /ss[=length] - from the command line. If a length is not specified // the survey length is device dependent (maybe 20 minutes or 1-3 // hours). If a survey is in progress and Heather is started with // /ss=0, Heather attempts to stop the survey. // // To start a precision survey: // /sp[=hours] - from the command line - do a precision survey, // SP - from the keyboard. It will request the length of the survey // in hours (up to 96 hours long)... the longer the better. If a // survey is in progress, issuing SP again will stop the survey. // // // // To force position hold mode: // SH - from the keyboard - Some receivers remember their set position // hold locations and use that when position hold mode is // selected Other receivers will use the current position as // the hold position. // // To force 3D navigation mode mode: // SN - from the keyboard // // Trimble Thunderbolt and related devices support several other positioning // modes. See the device manual for more information (0xBB packet). // // S0 - automatic 2D/3D navigation mode selection // S1 - single satellite mode // S2 - 2D mode (S2 actually sets receiver mode 3) // S3 - 3D mode (S3 actually sets receiver mode 4) // S4 - undocumented (3D?) mode (S4 actually sets receiver mode 2) // S5 - DGPS reference mode (disables timing functionality) // S6 - 2D clock hold mode // S7 - overdetermined clock mode (same as SH) // // // // PROPOGATION TIME ESTIMATES (also distance to remote location) // // Heather can calculate a (crude) estimate of the signal delay // (propagation) time between your location and a distant transmitter // using the SD command. // // SD lat lon ionosphere // SD lat lon // SD id ionosphere // SD id // SD km ionosphere // SD km // // lat and lon are the transmitter location, ionosphere is the // height of the ionosphere in km. If ionosphere is not given, // it is estimated based upon your hemisphere and the time of year. // Negative lat values are in the southern hemisphere, negative lon // values are the western hemisphere. // // Or you can specify a distance in km by following the first number // with the letter 'k'. // SD 123k 100 (123 km to station, 100 km ionosphere height) // SD 300000k (300,000 km to station , calculated ionosphere height) // // You can also use the SD command to calculate the lat/lon great circle // distance to a location (ignoring the altiude difference). Normally // distance is shown in km/miles. If the distance is less than 1 km, it // will be shown in meters/feet. This can be useful if you want to // calculate the distance between the GPS receiver reading (like the // position hold location) to a post-processed precise location. To use // the SD command to calculate a great circle distance difference, specify // an ionosphere height of 0.0 meters. Note that there can be a 1mm // residual offset in the calculated distance. // // // Instead of specifying the transmitter lat and lon, Heather has a list // of known station ID's you can use: // ANTHORN // BBC (Droitwich) // BPM // CHU // DCF // EBC // HBG // HLA // JJY // KYUSHU // LOL // MIKES // MSF // PPE // RBU // RTZ // RUGBY // RWM // TDF // WWV // WWVB // WWVH // YVTO // // To clear the propagation time results from the screen use the GR command. // // // // // INCLUDING and EXCLUDING SATELLITES // // Several receivers let the user exclude certain satellites from being // tracked, force or restore the inclusion of satellites, or operating // the receiver in a single satellite mode. // // SO - from the keyboard controls single satellite mode. Trimble // receivers can be configured to track a specific satellite or // automatically select the highest elevation satellite. For // other receivers Heather offers to track the highest satellite // or the user can select a particular satellite... eventually // that satellite will fall below the horizon and the receiver // won't be tracking anything... Non-timing receivers are not able // to work in a single-satellite mode. // // SX - from the keyboard controls excluding/including of satellites. // (currently only one satellite may be excluded) // // // // CONFIGURING THE SATELLITE CONSTELLATION TYPES TO USE // // Many modern GPS receiver are actually GNSS receivers... they can work // with more than one satellite system: GPS/GLONASS/BEIDOU/GALILEO/SBAS/ // QZSS/IMES, etc. Heather lets you control which satellite systems to // track. Note that most GNSS receivers have limits on which systems can // be enabled at the same time. Consult your receiver manual for // information on what it can do. // // // SG - from the keyboard controls the GNSS satellite system // congiguration. You will be prompted to input a string of // characters that indicate which systems to use. The currently // enabled systems will be offered as the default entry. // // The letters that are used to select a particular satellite // system were changed in v6.04 to match the international // standard ones used in RINEX files. // // // // // //-THE SATELLITE INFORMATION DISPLAYS // // Heather has three main satellite information displays: // 1) The satellite information table // 2) The satellite position map // 3) The satellite signal maps // // The satellite information table lists the currently visible and tracked // tracked satellites and various information about them: // Satellite PRN and GNSS id char (that identifies the sat and GNSS system) // Satellite azimuth angle // Satellite elevation angle // Satellite signal level // // GNSS system id chars (next to the PRN columns) are: // G - GPS (USA) // S - SBAS (USA) // R - GLONASS (Russia) // E - Galileo (Europe) // C - BEIDOU (China) // J - QZSS (Japan) // I - IRNSS (India) // M - IMES (IMES is not a RINEX supported system) // // Depending upon the receiver type, the information table can also show // extra things like: doppler shift, tracking state, carrier phase, code // phase, clock bias, URA (range accuracy). // // A normal GPS receiver may be able to track around 14 satellites at once. // More modern receivers that can also track GLONASS, GALILEO, BEIDOU, SBAS // and other satellites might be tracking over 32 satellites at once. // Normally Heather expects to show up to around 14 satellites, and // displaying 32 satellites at once can cause problems fitting all that data // on the screen. You can control the size and format of the satellite // information table display: // // SI - from the keyboard // /si=# - from the command line. // // Clicking the left mouse button on the satellite information display // will zoom the sat info information table to full screen. // Clicking again will restore the normal screen display, // Note that short clicks might be ignored... particularly on devices // like UCCM receivers that only output time updates every two seconds. // It can help to hold down the mouse button until the screen changes. // // // If you don't use the SI commands to specify the maximum number of // satellites to show information for, Heather will show up to 14 satellites. // The satellite information display size automatically adjusts as more // satellites are seen. If you set a value, Heather forces the display size // to that value. // // If you input a number without a +/- sign, Heather displays all the // information it has for up to the specified number of satellites. Note // that the +/- sign can be used either before or after the number. // // If you input a negative number, Heather shows the short form of the // info for up to that number of satellites. The short form display frees // up enough space to the right of the satellite info display to show // the sun / moon information display. If the receiver type in use does // not report any extended information, the sun/moon info display is // automatically enabled. // // The sun / moon info is shown in yellow if there is a possible eclipse // condition (currently only works for solar eclipses). // // If you input a number with a "+" sign, Heather shows the short form // information in two columns (but does this not leave room for the // sun/moon information). This helps with displaying information for // receivers that can track multiple satellite systems. // // If you follow the number with a "t", only satellites that are being // actively TRACKED are shown in the satellite information table and // satellite map display. The GCT keyboard command also lets you toggle // the display of un-tracked satellites. // // // The more rows of satellite information being displayed, the less space // there is for the plot area. Combine lots of rows of satellite info // with the digital clock display on a small screen and you can wind up with // an unusable plot display or unreadable keyboard menus. Turning off the // digital clock display (GZ) can help with the screen formatting. // // If more satellites are visible that you have allocated space for, the // info for the excess satellites is not shown and a message is shown // saying to click on the satellite information table. If you click on the // satellite table the screen is zoomed to show all satellite information. // // Satellites that are being actively tracked are shown in GREEN // Satellites that are visible, but not being tracked are YELLOW // Excluded/disabled/blocked satellites are shown in BLUE // Unhealthy satellites are shown in RED (if the receiver reports satellite // health) // // // Heather graphs the number of actively tracked satellites in the plot // window and can flag whenever the sats being used for calculating // fixes changes: // // GCG - Enables the tracked satellite count plot menu (same as G$) // The sat count plot does not scale or auto-center. The satellite // count plot is always at the bottom of the plot area. // The satellite count plot is shown in CYAN at the bottom of // the plot window. Each minor division equals one satellite. // For screen resolutions less than 800x600, each minor division // represents two satellites. // // GCC - toggles the display of changes in the actively USED // satellite constellation. When the list of satellites being // actively tracked and USED FOR FIXES changes a small tick // mark is shown shown at the bottom of the plot area. The // actively used satellites are the ones shown in GREEN in // the satellite list. See the section on the FD (filter display) // command for information about how setting the plot view // interval to show more than one reading per pixel can mask // seeing all the satellite changes. // // // You can sort the satellite information table using the following // keyboard commands. You can sort in descending order by including // "-" character. Ascending sort is the default for most plots. // If you sort by one of the values, the header of that column is shown // in GREEN. If you don't specify a sort, the table is sorted by PRN // number in ascending order. Note that if a value is 0, this usually // means that the value is unavailable or invalid. These values always // appear at the end of the satellite list. If you attempt to sort on // a value that the receiver does not output, the list winds up being // sorted by PRN. // // GCA - sort by azimuth // GCB - sort by clock bias // GCD - sort by doppler // GCE - sort by elevation // GCP - sort by PRN (default) // GCR - sort by pseudorange // GCS - sort by signal level // GCW - sort by carrier/code phase // // GCT - toggle display of non-tracked satellites // // // The SQ keyboard command allows plotting the az/el/signal level of a // specified satellite, the sun, or the moon. SQ mode is not available // if an environmental sensor is being used... it uses the same plot queue // entries. This also means that the earth tide plots are not available // in SQ mode. The SQ command also resets all the data queues whenever it // is executed. The GK keyboard command is used to access the sat prn // plots. For the sun and moon, the signal level is repoted as -40 or 40 // depending upon if it as below or above the horizon. The satellite that // is being plotted is identified by an '*' next to its PRN value in the // satellite information table. // // // The SB command causes a particular satellite in the satellite map to // blink once a second. // SB # - user specified PRN # // SB H - current highest satellite // SB P - the plot satellite specified by the SQ command // // // Besides the satellite information table, Heather has two other satellite // information displays... the satellite map and the signal level map: // // // THE SATELLITE POSITION MAP: // // The satellite map shows a map of the currently visible / tracked // satellites. It is enabled by: // GM - from the keyboard // /gm - from the command line // ZM - zoom the satellite map to full-screen // ZB - zoom the satellite map and watch to full-screen // // Clicking on the map or watch displays on the screen will zoom it to full // screen. Clicking again will restore the screen to its previous state. // Note that short clicks might be ignored... particularly on devices // like UCCM receivers that only output time updates every two seconds. // It can help to hold down the mouse button until the screen changes. // // The satellite map shows the satellites as circles on an azimuth/elevation // grid. The size of the circles depends upon the current signal level. // Satellites that are currently being tracked are shown as filled in // colored circles. Satellites that are visible are shown as hollow circles. // // The /so=# command line option lets you change the shape of the satellites // in the map: // /so=0 - round sats // /so=1 - square sats // /so=2 - round sats with "bat-wings" // /so=3 - rectangular sats with "bat-wings" // /so=4 - rectangular sats with "linear wings" // /so=5 - rectangular sats with "linear wings" // // If you hold the mouse cursor over a satellite circle on a map display // that satellites' PRN, azimuth, elevation, and signal level will be // shown below the map... if there is enough room on the screen for it (i.e. // the map has the "Satellite positions" label below it). // // The position history of each satellite is shown as a "trail" behind the // satellite. The trail has small time marker circles drawn on it. Solid // circles indicate hours and hollow circles indicate half hours. The trail // shows the last 6 hours of the satellite position. The drawing of satellite // position trails can be toggled with: // /st - from the command line - toggle display of satellite trails // /sd - from the command line - toggle display of time markers on the // satellite trails // // // The satellite position map includes a representation of the sun at its // current location in the sky. The sun is shown in solid YELLOW if it is // visible and as a hollow YELLOW circle if it is below the horizon. The sun // symbol is shown surrounded by sun rays in order to distinguish it from // satellites. The moon is also drawn showing its current phase. It is // shown in YELLOW if above the horizon and GREY if below the horizon. // // // // If both the satellite position map and the watch display are enabled they // will overlay each other on the screen if there are not two places // available to draw them (the GB and /gb commands allow one of the displays // to be drawn to the right of the plot area). // // The GB command is labeled "Both map and adev tables" in the keyboard menu // but is more properly "allow map displays in the plot area." // // // // Note that on SCPI, UCCM, STAR, and ACRON receivers the message that sends // the satellite position and signal data takes a long time for the receiver // to send. Heather only requests it once per minute at hh:mm:33. These // satellite information messages block the sending of time code messages // and causes time code skip errors... Heather automatically ignores any // time code errors caused by these messages. Heather has some code to // "fake" the missing time messages on most receivers. // // // Note that the RFTG-m XO unit does not report satellite positions. Heather // will fake the satellite positions at AZ=(prn*10) and EL=20 degrees. This // hack lets you see what sats are being tracked and their signal levels, // but not their true positions... such is life. // // // // THE SIGNAL LEVEL MAPS: // // The signal level maps show a map of the satellite signal levels as a // function of satellite azimuth/elevation. The values used are the AVERAGE // value of the signal level of all satellites seen a given position in // the sky. The signal level map can be shown in several different formats. // // signal level map - shows a color coded display of the average signal // level seen across the sky. Data is interpolated // to fill in spaces between observed positions. // // data - this is similar to the signal level map, but the map // is not interpolated between missing points. // // azimuth - shows a map of the relative signal level seen at // each azimuth angle. // // elevation weighted - shows a map of the relative signal level seen at // each azimuth angle weighted by 1.0/elevation. // Weighting the signal levels by the inverse of the // satellite elevation compensates for the normal // behavior of satellite signals being better at // higher angles and better shows the effects of // antenna obstructions. // // elevation - shows a map of the relative signal level seen at // each elevation angle. Note that a YELLOW tick mark // appears at the edge of this map. This is the // elevation angle where satellite signal levels begin // to rapidly drop off. A BLUE tick mark indicates the // satellite elevation mask setting. // // From the keyboard: // GQ - toggle signal level map on and off // SAS - toggle signal level map on and off // SAW - toggle signal level elevation weighted data map on and off // SAE - toggle signal vs elevation map on and off // SAA - toggle signal level vs azimuth map on and off // SAD - toggle signal level data map on and off // // From the command line // /gq - toggle signal level map on and off // /gqs - toggle signal level map on and off // /gqq - toggle signal level map on and off // /gqw - toggle signal elevation weighted level map on and off // /gqa - toggle signal level vs azimuth map on and off // /gqe - toggle signal vs elevation map on and off // /gqd - toggle signal level data map on and off // // SAA - displays relative signal level seen at each // azimuth angle // SAW - displays relative signal level seen at each // azimuth angle, with the signal strength // weighted inversely with elevation angle. This // highlights low elevation antenna blockages and // low orbit angles that have no satellites. // SAE - displays relative signal level seen at each // elevation angle // SAS - displays color coded map of the absolute signal // level seen at each azimuth/elevation point. // SAD - shows satellite signal level data points // (much like the GM satellite position map) // SAC - clears the old signal level data and starts // collecting new data. You can also do this with // the CM keyboard command // // // You can zoom the various satellite maps to full screen from the "Z" // keyboard menu. Any keypress (except '\') will exit the zoom screen mode. // A '\' will dump the screen image to a .gif file. // // You can also force a screen dump by left-clicking on the screen where // the "Receiver data" info is near the upper left hand corner of the // screen. This is handy if you are using a touch-screen. // // Note that it can take several hours for the map to fill in. The more // satellites that your receiver can track, the faster the map fills in. // // Note that the satellite position and signal level maps are affected // by the settings of the elevation mask and signal level mask filters. // If you want a complete view of your antenna system performance then // first set those filters to their lowest settings. // // The signal level maps show the current setting of the satellite elevation // mask filter with a dotted circle at the elevation mask angle. You can // disable the display of the elevation mask angle circle: // GJ - from the keyboard // /gj - from the command line // // // You can reset the satellite map and signal data with the keyboard command: // CM - clear out the satellite map data // // You can write the current signal level information to a ".sig" file. // The signal level file contains some comments and a list of az/el/snr // values. // WZ - writes the signal level data to a file. // // You can read a ".sig" file from the "R" keyboard command. Note that // reading a ".sig" file pauses updating the plot queue with new values. // You can resume plot queue updates with the "U" keyboard command. // // // // //-ZOOMED SCREEN DISPLAYS: // // ZA - zoom the elevation weighted Azimuth map to full screen // // ZB - zoom Both the watch and satellite map displays to full screen // overlayed on each other. // // ZC - zoom the Clock display to full screen. // // ZD - zoom the signal level Data map to full screen. // If one of the signal quality maps is shown you can click the // mouse to show all the signal quality maps (ZU command) // // For the HP-5071A, LPFRS, RMO, Lucent RFTG-m, SRO100, PRS-10, and // X72 devices, ZD zooms the screen to a full device Data display. // // ZE - zoom the signal level vs Elevation map to full screen // // ZH - brings up a receiver data monitor screen. Received message data // is formatted into hex+ASCII lines. Binary data packets are // labeled with their name (where possible). // // ZI - zoom the satellite Information displays to full screen // // ZL - zoom the position fix scattergram to full screen // // ZM - zoom the satellite Map to full-screen // // ZN - zoom the screen do a Null (blank) display // // ZO - brings up a data mOnitor screen. Received message data bytes // are shown in GREEN and sent data is shown in YELLOW. // // ZP - zoom the Plot window to full screen // // ZQ - zoom the screen to a calendar display. The calendar shows a few // previous month(s) and the next "x" months. The current month is // shown in GREEN. Months before the requested staring data are // shown in GREY, and later months are shown in WHITE. "x" is // determined by what will fit on the srceen. // // Clicking on the lower left corner of the calendar screen or // pressing the '-' key moves the calendar back a month. // Pressing the '<' key moves the calendar back a year. // // Clicking on the lower right corner of the calendar screen or // pressing the '+' key moves the calendar forward a month. // Pressing the '>' key moves the calendar forward a year. // // You can preceed the +,-,<,> commands with a number from 0..10000. // (note that there will not be any indication of you typing the // adjustment number). The adjustment number gets cleared when // you execute the adjustment. // // The current day will blink every second. // Days of daylight savings time switchover are shown in BLUE. // Days that have full/blue moons are shown in YELLOW. // Days that have new/black moons are shown in BROWN. // The moon phase dates are calculated with a resolution // of 1-2 hours. If the new/full moon appears around // midnight local time, the date shown in the calendar may be off // by a day. The moon phase calendar information may not be // accurate outside of the years 2000..2100 // Days that have an entry in the greetings calendar are shown // in CYAN. // // The TB keyboard command lets you show a calendar for a specifed // year (and optional starting month). // // ZR - zoom the Relative signal level map to full screen // // ZS - zoom the Signal quality map to full screen // // ZU - zoom all signal level maps to full screen // // ZV - zoom the watch, sat map, signals full screen // If the ZU or ZV screen is showing you can click the mouse // on one of the displayed items to zoom it to full screen. // // ZW - zoom the Watch display to full screen. // // ZX - zoom the watch, satellite, and signal quality maps to full screen // overlayed on each other // // ZY - zoom the satellite map and signal quality map to full screen // overlayed on each other // // ZZ - rerurn the screen to the normal un-Zoomed state // // ZT - sets a keyboard inactivity Timeout (in minutes). After the // specified time has passed without any keyboard activity, the // screen switches to the specified zoomed screen display. This // will not happen if the screen is aready showing a zoomed screen // or a keyboard menu is being shown. The default timeout display // is the digital clock. // // // // //-SUN and MOON INFORMATION DISPLAY // // Besides displaying information about the GPS satellites, Lady Heather // calculates the position of and other relevant information about the sun // and moon: // // Sun azimuth and elevation in the sky // Moon azimuth and elevation and phase (illumination percentage) // Sun rise/transit/set times // Moon rise/transit/set times // Current solar equation of time. // Current moon "age" from the start of the lunar month (new moon). // // The sun/moon information table is shown to the right of the satellite // information table. Enabling the sun/moon information automatically // selects the short form of the satellite information display. // // The sun rise and set times are based upon the sun's position above the // horizon. There are several definitions of sun rise/set: // Physical - when the top edge of the sun crosses the horizon // Official - when the sun crosses 0.833 degrees below the horizon // (this angle is for atmospheric refraction effects) // Civil - when the sun crosses 6 degrees below the horizon // Nautical - when the sun crosses 12 degrees below the horizon // Astronomical - when the sun crosses 18 degrees below the horizon // Islamic - when the sun crosses 18 degrees below the horizon at sunrise // or 17 degrees below the horizon at sunset // User defined - you can specify any angle above (positive) or // below (negative) the horizon. // // Sun/moon times are shown as local time zone times for the current date. // // // To display the sun (or moon) rise/set times use: // TR - from the keyboard // // TR P - display "Physical" sunrise/sunset times // TR O - display "Official" sunrise/sunset times // TR C - display "Civil" sunrise/sunset times // TR N - display "Nautical" sunrise/sunset times // TR A - display "Astronomical" sunrise/sunset times // TR I - display "Islamic" sunrise/sunset times // TR # - (where # is the user defined solar horizon angle[s] // negative values are for angles below the horizon, positive // values are for angles above the horizon) // You can specify independent solar rise/set horizons like: // TR -18,-17 // // TR M - display moon rise/transit/set times instead of the sun times. // // /sr=# - from the command line where # is the sunrise type selection // character shown above. For example // /sr=c says to show civil sunrise/sunset times. // // Heather can also play sound files at rise/set or transit (solar noon): // Include an "*" after the command: // TR O* // /sr=o* // /sr=o - disables sunrise/transit/set sound // // Heather plays the file "heather_sunrise.wav" at sunrise/sunset. // Heather plays the file "heather_noon.wav" at solar noon or moon transit. // // If the sun/moon files are enabled a double musical note appears next to // the rise/noon times. Otherwise, the horizon type letter is used. The // horizon type always appears next to the set time. // // The standard rise/set sound is a rooster crowing and the noon sound is // a church bell. // // If moon rise/set times are selected (TRM) the sound files are played at // moon rise/transit/set and not sun rise/noon/set. They are the same files // used for sun times... there are not any separate moon files. // // // Normally Heather assumes that the GPS receiver is at a fixed position // and the sun/moon rise/set times are only recalculated when Heather // starts up or once per hour at xx:00:26 local time. If you are // working with a moving receiver you can cause Heather to continuously // recalculate the times: // Include an "!" after the command. // TR C! // /sr=c! // // You can use both "*" and "!" on the same command. // // // // // //-THE PLOT WINDOW // // The receiver data gathered by Heather and stored in the plot queue // is shown in the plot window at the bottom of the screen. The data // that is stored and shown is dependent upon the receiver type. // // The plot area is divided into a header area at the top and a plot // grid below it. The header shows the various plot scale factors and // reference (center line) values along with a statistical value for each // plot. // // Clicking on the plot header area will zoom the plot display to full // screen Cicking on the zoomed plot header area will restore the screen // to its previous state. // Note that short clicks might be ignored... particularly on devices // like UCCM receivers that only output time updates every two seconds. // It can help to hold down the mouse button until the screen changes. // // // Moving the mouse cursor into the plot area will show the values of // the data points at the cursor and the time that the value was acquired. // Also the time interval from the first point shown in the plot area // to the mouse cursor is shown. // // If a plot has not been enabled, its header entry will not be shown. // // You can disable all plots with the G- keyboard command. Disabling all // plots with G- makes it easier to enable just the plots that you want // to see. // // You can enable all plots that have varying data within the plot view // window with with the G+ keyboard command. Emabling all plots can // produce a very crowded and confusing display. // // You can put a title string at the bottom of the plot window with the // keyboard command: // GG - label the plot window with a title. // Titles are also saved to/loaded from log file comments. // // If a plot title contains an '&&' then the '&&' is replaced // with the current oscillator disciplining parameters. // // If a plot title contains an '&t' then the '&t' is replaced // with the current time // // If a plot title contains an '&d' then the '&d' is replaced // with the current date // // If a plot title begins with "&1", "&2", "&3", "&4", "&5", "&6" or &7 // then the following text will be used as extra title lines positioned // above the main title. Note that the GR screen redraw command will // erase the extra titles. // // If a plot title begins with "&b" then the following text will be // placed in the program window title bar. // // You can also set the program title bar with the /pt=string // command line option. If you want to include any spaces in the // program title bar, replace them with the '_' character. If the title // bar string is empty, Heather uses the receiver type as the title. // // // Heather also uses the plot title feature for displaying things like // calendar events, errors, and certain status information. Setting a user // defined title usually inhibits these automatic titles. // // Heather usually only updates the parts of the screen that have changed. // You can force Heather to fully redraw the screen from the keyboard: // GR - redraw the screen // Doing a GR will erase any "extra" title lines. // // // You can zoom the plot window display to full screen: // ZP - zoom the plot window to full screen // Clicking the mouse/touchscreen in the upper right corner of // the zoomed plot takes the display out of "plot review" mode // just like you pressed the DEL key (but without exiting zoomed // plot mode) // Clicking on the text above the title bar with also zoom the plot // area to full screen. // // // Data plots can be individually configured for either fixed scale factors // or can be automatically scaled. Most plots default to be automatically // scaled and centered to fit the plot window. // // If a plot has a fixed scale factor, the plot is labeled like: // DAC=(25 uV/div) // // An automatically scaled plot is labeled like: // DAC~(25 uV/div) // Also, if auto-scaling is enabled, moving the mouse pointer into the // // // // The "reference" value for a plot is the value at the horizontal center // line of the plot area (indicated by small '<' and '>' marks at the left // and right edges of the plot area. // // Plots can be individually configured for either fixed reference // values or can have a "floating" reference value where the plot is // automatically centered in the plot area. // // If a plot has a fixed reference value, the plot is labeled like: // ref=<100 uV) // // A plot with a floating (auto centered) reference value is labeled like: // ref~<100 uV> // // // // The plot grid is divided into horizonal and vertical major divisions // which are further divided into minor divisions. Time is represented by // the horizontal axis and data values by the vertical axis. // // // // The "V" (view) keyboard command controls the view window into the plot // data queue. This sets how much data is shown in the plots. The // view value can be either in minutes per (major) division or the time // interval to be shown. Note that the specified view interval is // automatically tweaked/rounded to fit a multiple of the plot grid size. // // If the selected plot view interval is larger than one plot queue sample // per pixel, the plot queue data is down-scaled by dropping values. // Note that if down-scaling is in use the display of time skip markers, etc // may not be accurate / complete. Markers or other events that do not // happen on a displayed sample may not always be shown because all // non-displayed samples are skipped over while processing the plot queue // data for display. Setting the display filter to a negative value like // FD -1 // or to positive values greater than (VIEW_TIME/PLOT_WIDTH) will average // together all polot queue entries covered by the each displayed pixel // and avoid dropping any missing events. // // // VA - shows all data currently in the plot queue. The plot horizontal // scale factor (time per division) is adjusted to fit the data // onto the screen. The data is down-scaled by dropping values. // // VT - auto scale the time axis as data comes in. The plot view // interval is automatically adjusted as data come in. Once the // plot window fills, it is scrolled left a few major divisions // and a new scale factor is calculated. // // You can force startup in VT mode with the /va command line // option. Doing this has a side effect of not being able // to automatically cancel "View Auto" mode whenever the data // queues are cleared or reconfigured. This might cause some // problems. You can cancel this side effect by doing a VA or V0 // keyboard command. // // V# - set the plot time to # minutes per horizonal major division // // V#S - set the plot horizontal scale factor so that # seconds of // data are shown // // V#M - set the plot horizontal scale factor so that # minutes of // data are shown // // V#H - set the plot horizontal scale factor so that # hours of // data are shown // // V#D - set the plot horizontal scale factor so that # days of // data are shown // // V#W - set the plot horizontal scale factor so that # weeks of // data are shown // // X - set the plot scale factor to 1 hour per division // // Y - set the plot scale factor so around 24 hours of data are shown // If the plot area is being shared with a map display (GB command) // this "day" plot view time may be reduced to less than 24 hours. // // // You can also set the plot view time with the /y command line option: // /y=3 - set view to 3 minutes per division // /y=3h - set view to 3 hours (can also use #S, #M, #D, #W as // described above for seconds, minutes, days, and weeks) // /y - set the view interval to 24 hour mode // // // Normally the plots show the last data acquired and scroll to the left // as new data comes in. You can "review" older data using keyboard commands // to change the starting point in the plot. When you are in plot review // mode the plot header shows: // "Review (DEL to stop):" or "All (DEL to stop):" // and scrolling of the plot data caused by new incoming data is inhibited. // // // HOME - move to the start (oldest) of the plot queue data // END - move to the end (newest) of the plot queue data // LEFT - move the plot forward one horizontal division // RIGHT - move the plot back one horizontal division // PG UP - move the plot forward one screen // PG DN - move the plot back one screen // UP - move the plot forward one hour // DN - move the plot back one hour // > - move the plot forward one day // < - move the plot back one day // ] - move the plot forward one pixel (*) // [ - move the plot back one pixel (*) // DEL - exit plot review mode and return to normal scrolling // // (*) If the last keyboard command was an ADEV related command: // ] - scrolls the ADEV plots and tables forward one bin // [ - scrolls the ADEV plots and tables backward one bin // > - scrolls the ADEV plots and tables forward one bin // < - scrolls the ADEV plots and tables backward one bin // HOME - move to the start of the adev data // END - move to the end of the adev data // LEFT - move 5 bins forward // RIGHT - move 5 bins back // UP - move 10 bins forward // RIGHT - move 10bins back // PG UP - move one page forward // PG DN - move one page back // // You can force ADEV review mode with A ESC. In ADEV review mode the // ADEV type in the ADEV tables is followed by a up/down arrow character // // You can force PLOT review mode with G ESC. In PLOT review mode the // ADEV type in the ADEV tables is followed by a ':' character. // // // // If you are in VIEW ALL mode and click the LEFT mouse button at a point in // the plot, the plot will be centered at that point and the view interval // will be set to 1 minute per division. The clicked point will be marked // with a "v" at the top of the plot area and a '^' at the bottom. You can // return to the marked point by pressing '0' or '@'. // // When in "auto" or "all" mode, clicking on the plot to zoom in to a point // on the plot will cancel that mode and set normal PLOT REVIEW mode. // // If you (QUICKLY) right click on the graph it will mark the point // and center the display on it (without zooming). You // can return to the mark with the '@' or '0' keyboard command. // // You can hold the RIGHT mouse button to scroll around in the plot. Move // the mouse cursor to the horizontal center of the plot and HOLD the right // button down. Moving the mouse cursor to the left or right of the plot // center scrolls the plot in that direction. The further you move the // mouse from the center of the plot, the faster the plot will scroll. // // // You can disable the mouse: // /km - toggle the mouse functionality // // // You can disable the keyboard from the command line. The only ways to // exit Heather when the keyboard is disabled is to click the CLOSE button // on the operating system title bar (or using the "kill process" command // of your operating system) or you can use the "ESC y" command. The // "ESC !" keyboard command will re-enable the keyboard. If you press any // key while the keyboard is disable a beep will sound. // /kq - toggle the keyboard enable (earlier version of Heather used // /kk for this, but that conflicted with the temperature control // PID commands) // // // // PLOT MARKERS // // If you see something interesting a a plot, you can set a marker at that // point. Move the mouse cursor to that point and press "=". A numeric // marker (from 1 to 9) will show at the top of the plot area. // // To center the plot on a marker, press that number on the keyboard. // Pressing '0' or '@' centers the plot on the last place you // left-clicked in the plot area. // // If you have just gone to a marker, pressing '+' will center the plot // where where the cursor was previously located. // // To delete a marker, select that marker from the keyboard and press '-' // The GU keyboard command will clear all plot markers. // // Note that the "+" and "-" keyboard commands have a different meaning // if you have not just selected a marker... they move the last selected // plot up or down and lock the plot scale factors and reference line // value (see the description below). // // Plot markers are also saved in and reloaded from log files. // // // TIME SEQUENCE and HOLDOVER ERRORS // // Heather expects to see a time message from the GPS device every // second. The time code in the message should always increment // by one second. If an error is detected in the time code sequence // (like skipped or duplicated time codes) these are flagged by a // RED tick mark at the top of the plot and the line that shows the // time is drawn in RED (instead of CYAN). If you place the mouse cursor // in the plot area and press '%' the plot will jump to the next time // sequence error. // GE - toggles display and finding of time skip markers // /ge - toggles display and finding of time skip markers // // If a GPSDO enters a holdover state that is indicated by a solid RED // line at the top of the plot area. The '%' key will also move the plot // display to the next holdover event. // GH - toggles display and finding holdover events // /gh - toggles display and finding holdover events // // // CONTROLLING THE DISPLAYED PLOTS // // The "G" keyboard menu controls the plots that are displayed and their // configuration. // // These are the standard plot assignments. Some devices may use the // various plots for other purposes. The G keyboard menu will show what // info is assigned to the various plots for that device. // // GP - usually a "PPS" (Pulse Per Second) output related value // (TAPR TICC chA Time Interval Error) // GO - usually an oscillator frequency output related value // (TAPR TICC chB Time Interval Error) // GO - usually an EFC DAC or PPS sawtooth correction related value // GT - usually a temperature related value // GD - GPSDO EFC DAC value or GPS receiver sawtooth value // (TAPR TICC debug mode chA FUDGE value). Depending upon the // receiver type the DAC value is either a voltage or a // percentage from (-100% to +100% of full scale with 0% being // the center of the control range). The RFTG DAC range is // 0% .. 100% // // G1 - receiver latitude // (TAPR TICC/counter channel A phase value) // G2 - receiver longitude // (TAPR TICC/counter channel B phase value) // G3 - receiver altitude // (TAPR TICC/counter channel C phase value) // G4 - receiver speed or TFOM (time figure of merit) // (TAPR TICC/counter channel C phase value) // G5 - receiver course or FFOM (frequency figure of merit) // (TAPR TICC debug mode chA TIME2 value) // // Note: the G4 (speed) and G5 (course) selections don't appear // in the "G" keyboard menu, but do work for receivers that // output heading and speed info. // // G6 - average DOP (dilution of precision) value // (TAPR TICC debug mode chB TIME2 value) // G7 - the TAPR TICC channel C Time Interval Error data // G8 - the TAPR TICC channel D Time Interval Error data // // G9 - message timing offset // G0 - message timing jitter // // GA - ADEV plots (see the section of ADEVs) // // G$ - tracked satellite count // // // The GKx commands control plotting of four different plots. Which data // that is being plottted depends upon the device type and which options // have been selected: // // If an external enviromental sensor is active the tide plots and sat // az/el/signal level plots are not available. // These commands control the environmental sensor plots: // GKA - toggles display of all the environmenal sensor plots // GKH - controls humidity sensor plot // GKP - controls air pressure sensor plot // GKT - controls first temperatue sensor plot // GKU - controls second temperatue sensor plot // // If plotting a satellite az/el/signal level is enabled (SQ command): // GKA - toggles display of all sat PRN related plots: // GKZ - controls azimuth plot // GKE - controls elevation plot // GKS - controls signal level plot // GKG - controls the carrier phase / pseudorange / gravity plot // Carrier phase is plotted if available, else the pseudorange // is plotted. If neither carrier phase or pseudorange is // available the plot defaults to the gravity offset plot. // // Otherwise: // GKA - toggles display of all the solid earth tide and gravity plots // (except for HP5071 cesium beam oscillator devices which uses // the eath tide plot queue data entries for other things) // GKX - controls longitude earth tide plot // GKY - controls latitude earth tide plot // GKZ - controls altitude earth tide plot // GKG - controls vertical gravity offset plot // // // Selecting one of the plots listed above brings up a sub-menu of options // for controlling that plot. The descriptions listed below use the "GP" // plot, but can be used with any of the plots. Replace the lower-case "p" // shown below with the letter or number of the plot you want to manipulate. // // Gp - toggles the plot display ON or OFF // Gpp - toggles the plot display ON or OFF // /gP - from the command line - toggles plot "P" ON or OFF // // If the previous key was not a plot marker command (where // a following + or - key will undo a marker) you can // use the '+' or '-' keys to move the last selected // graph up or down 0.1 divisions. That graph's scale // factor and center reference values will be "fixed". // // + move the last selected plot up 0.1 major divisions // - move the last selected plot down 0.1 major divisions // // // GpI - toggles inversion of the plots' display. // Inverting a plot can make it easier to compare how one // parameter (like temperature) affects another one (like // DAC voltage) // /mi - invert PPS and TEMPerature plots // // // Gp/ - select plot statistic selection menu. Heather can calculate // various statistics of the plot data shown in the plot window: // Gp/A - average value // Gp/R - RMS value // Gp/S - standard deviation // Gp/V - variation // Gp/N - minimum value // Gp/X - maximum value // Gp/P - span - difference between maximum and minimum values // Gp - turns off the plots' statistic display // Gp/? - toggles showing all 7 statistics for a selected plot. // The values are shown as "debug" info in the plot area. // // G/p - you can set the statistic to show for ALL enabled plots // with this command // // GpA - toggles auto-scaling mode for ALL plots // /ma - from the command line // // GpC - select the color to display the plot in // // GpD - show the derivative of the plot data. When a plot is in // derivative mode, the ':' after the plot statistics type // is changed to an '*'. Showing the derivative of a plot can // be useful for finding glitches and spikes in the data. // // GpL - toggles a linear regression trend line for the plot. The // trend line is drawn and its equation (as a function of time) // and extrapolated 24 hour change is shown as the plot title. // If the selected plot has the "derivative (*)" or "frequency // (#)" modifier set, the trend line cannot be plotted. The // trend line equation of the un-modfied plot data is shown, // though. // // The trend line equation title also shows the extrapolated // trend value over (drift) 24-bours (default). The OX obscure // keyboard option command allows you to change the extrapolation // period: // OX0 - 24 hours // OX1 - 1 hour // OX2 - 1 minute // OX3 - 1 second // // Gp= - removes drift from a plot by subtracting the linear regression // trend line slope from the plot. To cancel trend removal, // enter a value of 0. In trend removal mode the ':' after // the plot statistics value is replaced by an '='. // // GpS - set the plot scale factor in units per division -or- // enable auto scaling of the plot. // /mP - from command line doubles plot P scale factor // /mP=val - sets plot P scale factor from the command line (0 = auto) // /m - doubles all plot scale factors from the command line // /m=val - multiplies all plot scale factors by "val" // // GpX - toggles auto-scale mode for the selected plot // // GpZ - set the plot zero reference value (the value at the horizontal // center line of the plot) to a fixed value -or= enable auto // centering of the plot. // /zp - toggles plot P auto-centering from the command line // /zp=val - sets plot P zero reference line value the command line // (0 = auto center). "p" can be any plot selection // character. // // GpF - calculate an FFT (Fast Fourier Transform) of the selected // plots' data. // // The data to be analyzed starts at the beginning of // the plot window and end when the max fft size points // or the end of the plot data are reached. The // data is sampled from the plot data at the viewing // interval (seconds/pixel). // // The calculated FFT bins are shown as seconds with the // lowest frequencies to the left and highest to the right. // Moving the mouse cursor within the plot area shows the // various FFT bin values. // // The max FFT size is set by the /qf[=#] command line option. // (1024 points... if not given then /qf is 4096 points, // otherwise it is whatever is set (must be a power of 2). If // the number of data points in the plot queue to less than // the FFT size, the FFT size is reduced accordingly. // // Note that a FFT requires the input data to be bandwidth // limited to below the sample frequency or else you will. // get spurious values due to aliasing. Set the display // display filter count to at least the value shown as // the "view interval" in minutes/division. // // The FFT plot option defaults to doing a single // FFT of the selected plots' data when the FFT command was // given. The O L keyboard command can be used // to enable a "live" FFT that gets recalculated // every time a new point is added to the plot. // // The O D keyboard option toggles the FFT display value // format between raw values (default) and dB's. // // Whenever an FFT is calculated, the first point of the plot // queue data analyzed by the FFT is marked with MARKER 1 and // the last point is marked with MARKER 2. // // // GpH - calculates a histogram of the currently displayed plot // queue data. The histogram and FFT options share the // the plot same display code and cannot be used at the same // time. // // // GF - toggle the FFT or histogram plot display on and off. // If the debug log file is open then whenever a FFT or // histogram plot is toggled on the current histogram or // FFT data is written to the debug file. // // Note: Histograms and the FFT use a lot of the same code. You // cannot enable both a FFT and histogram at the same time. // You can only show histograms or FFTs for one plot at a // time. You turn off a histogram with the GF command (the // G menu always shows F)FT for the GF command, even though it // can turn off the histogram plot. // // // Gp~ - applies a deglitch filter to the selected plot. The filter // prompts for a "sigma" value and replaces any point in the // plot that is more than "sigma" standard deviations away from // the average plot value with the previous point. To remove // glitches from all plots, use the CG command. // // Gp# - for time interval counters, shows the selected plot's TIE // (time interval error) value as frequency. This also works // for the PRS-10 FC (frequency control) plot to show the value // in Hz instead of PPT (parts per trillion). // // GCG - controls the tracked satellite count plot. // The satellite count plot is shown in CYAN at the bottom of // the plot window (each minor division equals one satellite) // /g$ - from the command line // // // You can apply an averaging filter to the displayed plots (see the // description on the /fd command in the FILTERS section for more details. // FD - set the display filter count. // // // Normally Heather displays the OSC related parameter values in ppb // (parts-per-billion) or ppt (parts-per-trillion) which can cause // Europeans to wander off in a daze of confusion and angst. // You can display the OSC related value with an exponent using: // /tx - toggle OSC value displays with eXponent // // // // PATCHING GLITCHES IN THE PLOT DATA // // Occasionally you may have a data glitch in the acquired plot // data. Heather allows you to patch a glitched data value. // // Carefully position the mouse cursor on the leading edge of the // offending point and press '~' This will replace the point's data // with the previous data point. Ideally you should have the display // filter (FD command) turned off and the view interval (V command) set // to one point per pixel (V 0) when patching data glitches. // // If the mouse cursor is not in the plot area and over a data point // you will hear a warning BEEP. // // Each time you press '~' the glitch edit point (but not the mouse // cursor) is incremented to the next point. You can press '~' multiple // times to remove a wider data glitch as long as the mouse does not // move (by even a single pixel). Whenever the mouse moves, the glitch // edit point changes to the new mouse position. // // You may want to then use the CR command to recalculate xDEV // and MTIE values. // // After patching up a plot glitch you can use the CR command to // recalculate xDEV and MTIE data. // // // Heather can also automatically remove all glitches from a plot with // the Gp~ command (where 'p' is the plot to deglitch). // Gp~ - applies a deglitch filter to the selected plot. The filter // prompts for a "sigma" value and replaces any point in the // plot that is more than sigma standard deviations away from // the average with the previous point. // // The CG command will remove glitches from all plots. // // The Gp~ and CG deglitch commands work on the data interval in the // plot queue that is currently being displayed. To deglitch all the // data in the plot queue, use the VA command first to display all // the plot queue data. The way these commands work is ineffective // when removing a glitch at the first point in the viewed plot area. // // One way to remove glitches at the start of the plot area is to use // the CT command: // // The CT command will trim (delete) all plot queue entries before // the first entry shown in the plot area or after the last one. // // This can be a useful alternative to using the CP or CC commands // that clear all data from the plot queue if you want to remove // garbage data from the plot queue that can occur when the program // first starts capturing data from the receiver. You may need to // follow the CT command with the CR command to recalulate ADEVs // from the remaining data in the plot queue. // // To delete data at the start of the plot queue first position the // plot view so the first entry you want to keep is at the left edge // of the plot window. Then enter CTS and all previous entries will // be deleted. // // To delete data at the end of the plot queue first position the // plot view so the last desired entry is at the right edge of the // plot window and enter CTE and all the following entries will be // deleted. // // To delete data that is not shown in the plot window, adjust the plot // view to show all the data you want to keep. Then enter CTSE and all // data not shown in the plot window will be deleted. // // After entering a "CT" command, the plot view will be set to "view all" // just like you entered "VA". // // There is no way to un-do a glitch removal or plot queue trim. // // // // // TEMPERATURE DISPLAYS // // Lady Heather can display the temperature readings in several // different temperature scales (I bet you didn't know there are // so many!) by using one of the following command line options: // // /tc - show Celcius temperatures (default) // /td - show DeLisle temperatures // /te - show Reaumur temperatures // /tf - show Fahrenheit temperatures // /tk - show Kelvin temperatures // /tn - show Newton temperatures // /to - show Romer temperatures // /tph - show Paris Hilton temperatures - at 20C Paris is // assumed to be nominally clothed (yeah, right). Every // 10C above that she sheds a layer of clothing. Below // that she adds one. Degrees H indicates how hot Paris // Hilton actually is (or thinks she is). // /tr - show Rankine temperatures // /ty=# - show temperatures to # decimal places // // // // // //-WRITING SCREEN DUMPS // // Heather can write .GIF or .BMP image files of either the entire screen // or just the plot area. Dumps can be either as the screen appears or // in "reverse video" where BLACK and WHITE are swapped. Reverse video // dumps are useful for printing. // // WS - write screen to image file // WR - write reverse video screen to image file // // WG - write plot (graph) area of the screen to image file // WI - write reverse video plot (graph) area of the screen to image file // // You get a beep at the start and end of the dump. // // // The '\' keyboard command can be used to do a quick full screen .GIF dump // with a single keystroke. It does not bring up a menu that prompts for a // file name. This can be useful because redrawing of the plot area after // entering the file name from the normal screen dump menu can cause // problems with some parts of the screen not being updated before the // screen dump happens. The "quick" screen dump is done to file // "xxxxx.gif" // where "xxxxx" is dependent upon the receiver type. // // You can also force a screen dump by left-clicking on the screen where // the "Receiver data" info is near the upper left hand corner of the // screen. This is handy if you are using a touch-screen. // // // If you start to select a reverse video screen dump (even if you do not // complete it by using the ESC key) the reverse video attribute will // will be used for any following '\' initiated screen dumps. The same // applies to normal polarity screen dumps. // // If the mouse cursor is in the plot area when a screen dump is done, an // "X" will be drawn in the plot area of the dump. // // // // // //-GPSDO and HOLDOVER CONFIGURATION // // GPS Disciplined Oscillators (GPSDOs) use the GPS satellite signals to // steer a precision oscillator to a precise frequency (usually 10.0 MHz) // over long periods of time. This "discipling" process corrects for normal // oscillator frequency drift, aging, and temperature effects. // // The steering of the oscillator frequency is usually done by a phase // locked loop (PLL) circuit in the GPSDO that compares the current frequency // to the GPS timing signals. A GPSDO controls the oscillator frequency by // using a digital to analog converter (DAC) to drive the oscillator's // electronic frequency control (EFC) signal. // // If a GPSDO loses lock on the GPS satellites it can enter a HOLDOVER mode // where it attempts to guess the compensation that it needs to apply to the // oscillator in order to keep it on frequency. Many GPSDOs can be // forced into HOLDOVER mode manually by the user for testing, etc. // // Heather has some keyboard commands for controlling holdover mode and // oscillator disciplining: // // HE - enable manual holdover (for the PRS-10 this enables 1PPS input // discipling mode - the same as the DE command) // HX - exit manual holdover (for the PRS-10 this disables the 1PPS // input discipling mode - the same as the DD command) // HH - toggle holdover mode (discipling on the PRS-10) on/off // // // Besides HOLDOVER mode, some GPSDOs and the PRS-10 rubidium oscillator // let the user manually control the oscillator EFC signal or turn ON/OFF // oscillator discipling. // // DD - completely disable oscillator disciplining // DE - re-enable oscillator disciplining // DS - set the oscillator EFC DAC to a given value. // // // The plot area normally shows when the device is in holdover by a RED // line at the top of the plot. You can turn this off with: // GH - from the keyboard toggles the holdover plot display // /gh - command line option toggles display of holdover events // in the plot area. // // // Heather shows the amount of time of the current or last holdover event. // The value is shown in GREEN if the holdover event ended before Heather // was started. It is shown in YELLOW if a holdover event occured after // Heather was started. It is shown in RED if holdover mode is currently // active. // // // // GPSDO DISCUPLINING CONFIGURATION PARAMETERS: // // Some GPSDOs let the user configure various parameters of the oscillator // disciplining PLL system. // // GPSDO control parameters are accessible from the "&" keyboard menu. // Not all GPSDOs support all of these settings. // // The "&" keyboard command brings up the oscillator parameter // and satellite max signal level display screens. // To return to normal display mode you can press SPACE // or ESC or "&" again. // // The "&" display screen shows the current GPSDO parameters and also // a table of the maximum signal level seen from each satellite. // // &d - sets the PLL damping factor // &t - sets the PLL time constant // &g - sets the PLL gain (i.e. Hz change per volt of EFC) // &p - sets the pullin range (for UCCM devices) // // &i - sets the DAC initial voltage // &n - sets the DAC minimum voltage // &x - sets the DAC maximum voltage // // &h - sets the DAC allowable range high value // &l - sets the DAC allowable range low value // // &f - sets the max frequency offset threshold // &j - sets the jam sync threshold // // &a - autotune oscillator parameters // // // Some GPSDOs (like the Nortel/Trimble NTBW and NTPx devices) let the user // control the GPSDO settings, but do not save them in EEPROM. You can // cause Heather to configure the GPSDO at startup with these command // line options: // // /ud=val - set oscillator disciplining damping value // /ut=val - set oscillator disciplining time constant value // /ug=val - set oscillator disciplining gain value // /up=val - set pull-in range value (for UCCM devices) // /ui=val - set oscillator disciplining initial dac value // /un=val - set oscillator disciplining minimum dac value // /ux=val - set oscillator disciplining maximum dac value // /uh=val - sets the DAC allowable range high value // /ul=val - sets the DAC allowable range low value // // The &L (/ul) and &H (/uh) commands use an undocumented TSIP command // for reading and setting the what appears to be the allowable EFC DAC. // range. You can alter the low and high values with the UNDOCUMENTED // &L and &H keyboard commands. These values might just be for reporting // the allowable DAC range to the software or they might do something // else! Also, /ul and /uh on the command line may not always work... // it seems to work from the keyboard, though. // // CAVEAT EMPTOR IF YOU USE/CHANGE THEM! // // // When you write a log file an OSC_GAIN comment is written to the log // file. This allows the computation of osc drift and tempco from logged // data acquired on a unit that does not have the same osc gain (or that // is not connected to a tbolt). If the osc gain has been loaded from a // log file, it is shown in YELLOW. // // // // OSCILLATOR DRIFT RATE and TEMPERATURE COEFFICIENT VALUES // // For Trimble GPSDO devices, the '&' screen display shows an oscillator // drift rate and temperature coefficient value. These are calculated // from the data points shown in the plot window. // // For the best results, select a plot display interval // that covers a fairly long time interval with well // behaved DAC and/or TEMP values. // // You should be able to get a decent value for the drift rate // with 24 hours of data. The oscillator drift rate value makes the most // sense if the temperature is stable so that temperature effects on the // oscillator frequency are minimized. // // The oscillator temperature coefficient value makes the most sense if // the temperature is allowed to change in a linear ramp. This is // easy to achieve with Heather's active temperature control mechanism. // // // // AUTOMATICALLY SETTING GPSDO OSCILLATOR PARAMETERS: // // Heather can automatically configure Thunderbolt style GPSDO parameters // to values better suited for precision time and frequency applications // that their default "telecom" values. // // The "&a" keyboard command sequence starts the "auto-tune" process. // // Before running auto-tune on the Thunderbolt you should: // 1) Wait for the unit to stabilize with (relatively) // steady DAC, OSC, PPS, and temperaure values. Overnight is good. // // 2) Set your antenna elevation mask angle (F E keyboard command) // to 0 and signal level mask (F L keyboard command) to 1. This allows // collection of signal level data across the full sky. // // 3) Clear your signal level history (C M keyboard command) // // 4) Let Heather run for at least 6-12 hours to build // up a new satellite signal level map. // // 5) Issue the "&a" auto-tune command and wait for it to // complete // // Heather will spend a couple of minutes tickling // your oscillator and determine good values for the // osc gain and initial dac voltage. The time constant // will be set to 500 seconds, and the damping to 1.0 // Also the AMU (signal level) mask will be set to 1.0 // and the satellite elevation mask to midway between the horizon // and where your average signal level begins to fall off. // // The values will be written to the configuration EEPROM. // You can then manually change any of the parameters // that may not suit your needs. // // Note that non-Thunderbolt GPSDOs (such as the NTBW and NTPx telecom // devices) do not all support saving disciplining parameters to EEPROM // and some do not allow users to change the disciplining parameters. // You can use "/d" command line options for setting the PLL parameters // from the command line. // // If you run the auto-tune command on non-Thunderbolt GPSDO devices then // only the satellite elevation mask (and perhaps the signal level mask) // values will be set. // // You can erase the auto-tune results message in the plot title using // the "GG" keyboard command. // // // // For the Symmetricom rubidium oscillators (X72, X99, SA22) the &a // command calculates and sets the DDS tuning word that sets the // oscillator output frequency (DDS). Before issuing the "&a" command you // should have a stable 1PPS signal connected to the PPS input and wait // for the device to stabilize (recommend at least 24 hours of power on). // // The &a command will prompt for the number of seconds of data to analyze // to determine the device drift rate... the longer the better. The // minimum time is 600, the default is 1800 seconds. Several hours is // better. First the DDS word is set to 0 and the TIC offset register // is set to zero out the current 1PPS offset. Next data is collected // for the specified number of seconds. Finally, the data is analyzed // by calculating a linear regression trend line and the DDS tuning word // is set and the TIC offset value is re-zeroed. // // After the auto-tune interval has been reached, Heather will set the // DDS tuning word to the calculated value. On some firmware versions // the EE keyboard command can write the tuning word (and maybe the other // device configuration values) to EEPROM. The calculated tuning // value will be shown in the plot title line. You can record that value // and use the PZ keyboard command to restore the DDS word if you lose // power. Note that the X72 / SA22 has no way to read back most of the // current settings (more ass spanking justified). // // Heather implements a "software eeprom" that records all setting // changes in a file (default tbeeprom.dat). This file is used // to restore all the last known settings every time Heather is started. // If you have more than one Symmetricom rubidium oscillator, the "/wp=" // command can be used to change the "tb" prefix string used for the // EEPROM file. For example /wp=sa22 will use the file "sa22eeprom.dat". // The /wp command also changes the prefix used for automatic log and // screen dumps. When you first setup a X72/SA22 you should set all // the device parameters to what you want (even if they appear to // already be set correctly. This will insure that Heather knows the // correct device configuration. // // // // ACTIVE GPSDO TEMPERATURE CONTROL // // GPS Disciplined Oscillators are very precise devices and their // precise oscillators and circuity can be sensitive to temperature, // other environmental conditions (air pressure, humidity, etc), and // power. You can maximize a GPSDOs performance by minimizing changes // in these values. // // Heather has the ability to actively control the environmental // temperature of GPSDO devices that regularly (like every second) report // their temperature to a high level of resolution (like less than 0.1C). // The Trimble Thunderbolt series of devices is particularly good at this. // Early models have a temperature sensor with a resolution of around // 0.01C and later models used an inferior version of the sensor with // around 0.1C resolution. // // Heather uses a PID control algorithm driven by the GPSDO temperature // sensor readings to PWM (pulse width modulate) a temperature control // device (such as a fan or a peltier device). // // You specify the desired control temperature in degrees C. A value // of 0 says to turn off temperature control. // TT - from the keyboard // /tt=degrees - from the command line // // When temperature control is activated an DOWN_ARROW, EQUAL_SIGN, or // UP_ARROW is shown next to the temperature reading at the top of the // screen. They mean that the temperature control PID is calling for // cooling, holding temperature, or heating. // // // Normally Heather uses the receiver port RTS and DTR serial port modem // control lines to control the fan or peltier (there is some legacy // code in there that could be activated to work with a parallel port). // // Heather also supports using a dedicated serial port to control the // "fan". This can be enabled with the /ef= command line option. The // "fan" port manipulates the modem control signals just like when using // the receiver port. It also sends ASCII commands (default 115200,8,N,1) // out the "fan" port. Using a dedicated "fan" port can be useful if the // receiver port does not support modem control signals (like some USB // devices or an Ethernet connection). // $INIT - initialsize the temperature control device // $STOP - disable the device // $HOLD - hold the current state // $CTRL msecs - values to PWM the device with. // Positive values indicate heating, negative indicate cooling // The value is in millisecods (can be interpreted as percent*10) // // RTS is the temperature controller enable (+12=off, -12=on) // DTR is the heat (-12V) / cool (+12V) line. // (note that some serial ports may have different voltage ranges like // +/- 6V) // // The DTR line is updated once a second with a pulse whose width is // proportional to how hard to drive the fan/peltier. Use the line to // control a transistor or solid state relay. The RTS line can be // used to enable the temperature control device. RTS and DTR will be // set to +12V when Heather exits. // // Simple implementation: // Isolate the Thunderbolt in a box (I use a corrugated cardboard box), // set the control temperature below the typical unit operating temp // but above normal room temp. When Heather signals COOL turn // send power to a fan to move room air into the box. You want the // fan to move enough air to cool the unit, but not so // much air that the temperature drops by more than 0.01C // per second. The indicator of too much airflow is a // temperature curve that spikes down around 0.1C several // times per minute. Too little airflow shows up as a // curve that oscillates around 0.25C about set point over // a couple of minutes. Good airflow should show a // temperature curve stable to with 0.01C with a period of // between 1 and 3 minutes. Generally you do not want // the fan to blow directly on the unit (mine is surrounded // by foam). You want to gently move air through the // box. It can help to include a large thermal mass in // the box (I use a 2kg scale weight, other people use water). // // Placing the GPSDO power supply in the same controlled environment // as the GPSDO can improve system performance. BE AWARE OF WHAT // MIGHT HAPPEN IF A POWER SUPPLY OR CONTROL SYSTEM FAULT CAUSES // OVERHEATING OR A FIRE! // // One thing to try is to disable the fan and closely monitor the // temperature see how warm the device becomes in the event of a fan // failure. Try and use an enclosure that keeps the maximum device // temperature to safe levels. An enclosure with too much insulation // is not a good thing here... // // // TUNING THE TEMPERATURE CONTROL PID // // The temperature control PID is adjusted via the "K" keyboard menu or // "/k" command line options. The "K" keyboard menu works a bit // differently than the other keyboard menus! It does not bring up any // sub-menus. It brings up an edit line where you enter a command letter // optionally followed by command values. Commands that expect a value // (or values) are shown with an "=" sign here. You do not type the "=" // sign, just the letter and the value(s) separated by a space or comma. // // From the command line you DO enter the "=" to set a value. For instance // you would set the PID parameters with: // K 1.5 45 2 100 from the keyboard "K" menu or // /kk=1.5,25,2,100 from the command line // // // A= Autotune temperature PID // A 0 - abort autotune // A 1 - full autotune with all settling delays // A 2 - don't wait for temp to get near the control setpoint // A 3 - don't wait for PID to stabilize // // P= PID Proportional (gain) term // I= PID Integral control term // D= OID Derivative control term // F= PID Filter time constant // K= P D F I (sets all foure major PID "K" terms) // // W config PID with canned slow time constant PID values (default) // X config PID with canned fast time constant PID values // Y config PID with canned very fast time constant PID values // N config PID with canned medium time constant PID values // // G= Scale factor (loop gain correction) // H show PID debug info // L= Load disturbance test value // O= filter Offset term // R= Reset integrator value // S= Scale factor (loop\ gain correction) // (use /kg= from command line for this since /ks controls sounds!) // T= Test PWM output (cool_msecs, heat_msecs) // Z reset and restart temperature PID control loop // 9= set auto-tune step size // 0 test with crude temperature values // // // // // EXPERIMENTAL OSCILLATOR CONTROL PID // // The Thunderbolt GPSDO is a very versatile device that offers the // user great flexibility and control. You can manually control the // oscillator EFC DAC and measure the oscillator frequency and PPS error. // This provides the ability to implement a user-defined GPSDO control // loop. Lady Heather has an implementation of such a control PID. It // is activated from the "B" keyboard command or /x command line options. // // The experimental oscillator control PID commands work like the // temperature control PID commands described above. // // K .1 0 100 100 from the keyboard "B" menu or // /xk=.1,0,100,100 from the command line // // P= Proportional gain (P) // I= Intergral time constant (I) // D= Derivative time constant (D) // F= Filter time constant (F) // K= P D F I (sets all four PID "B" terms (P D F I)) // // N use pre-configured PID #1 values // W use pre-configured PID #2 values // X use pre-configured PID #3 values // Y use pre-configured PID #4 values // // H show PID debug info // L= Load disturbance test value // O= Filter offset // Q= Post-filter depth // R= Reset integrator // S= Scale factor (loop gain compensation) // Z Reset and restart oscillator control PID // 0 Disable oscillator control PID // 1 Enable oscillator control PID // // // // // //-GPSDO / TIMING RECEIVER PPS and FREQUENCY OUTPUT CONTROL // // GPS timing receivers and disciplined oscillators usually have one // or more timing output signals. Almost all have a 1 pulse-per-second // (PPS) output signal. On many devices this can be programmed for // other frequencies. Other devices also have other auxiliary output // signals that can be controlled. // // The "P" keyboard menu provides commands for controlling these output // signals. The paramters that can be set via the "P" menu depend upon // the device type. // // // // ANTENNA CABLE DELAY // // To precisely align the PPS output to GPS or UTC time, the receiver // needs to know the delay of the GPS signal through the antenna cable // (plus the delay through the PPS output cable). The cable delay // adjustment can also be used to shift the PPS output relative to // GPS/UTC time for other reasons. // // Note that some devices (like the Trimble Thunderbolt and the // OSCILLOQUARTZ STAR) use a NEGATIVE number for compensating for cable // delay compensation, other devices use a positive number. Consult // the device manual for details (but good look finding them!) // // PC - sets the cable delay // /c=75 - sets the cable delay (in nanoseconds) from the command // line // /c=50f - sets the cable delay to 50 feet of 0.66 velocity factor // coaxial cable // /c=70m - sets the cable delay in 70 meters of 0.66 velocity // factor coaxial cable // /c=50m,.8v - sets the cable delay to 50 meters of 0.80 velocity // factorcoaxial cable // // The "PC" keyboard command lets you specify the cable delay in // nanoseconds or in cable length / velocity factor: // PC 100 - 100 nanoseconds // PC 50f - 50 feet of 0.66 velocity factor coax // PC 75m .77v - 75 meters of 0.77 velocity factor coax // // For the SRO100/SRO70 PC sets the clock in the device to the displayed // system date/time. Heather does not currently use the date/time info // that can be read from the SRO100/SRO70. // // // // PPS SIGNAL CONTROL and OUTPUT FREQUENCY CONTROL // // Note that some devices (mostly counters and atomic frequency // references) have different meanings for some of these commands. // Check the "P menu on those devices! // // You can turn the PPS signal ON, OFF, or toggle its state: // PD - disable the PPS signal // PE - enable the PPS signal // PS - toggle the PPS signal ON or OFF // /pd - disable PPS output signal from the command line // /pe - enable PPS output signal from the command line // /p - toggle PPS output signal from the command line // // For TAPR TICC devices PE sets the input EDGE select values. // // For the PRS-10 PS sets the magnetic switching mode. // // For the PRS-10 PD sets the 1PPS output offset delay (used to // align the 1PPS output to match another device) // // For the SRO100 PD sets the PPS delay. // For the SRO100 PS sets the sync mode. // For the SRO100 PW sets the PPS pulse width. // For the SRO100 PK sets the PPS tracking mode. // // For the SRO100 PC sets the clock in the device to the displayed // system date/time. // // For the SRO100 PG sets the "gofast" mode countdown timer. // Gofast mode was implemented in device firmware > 1.96. // // // You can control the PPS signal polarity on some receivers: // PR - select rising edge PPS signal // PF - select falling edge PPS signal // PP - toggle PPS polarity // /- - select rising edge PPS signal from the command line // /+ - select falling edge PPS signal from the command line // // For Furuno eSIP devices the PF command is only available in GCLK // mode. It is not avaliable in LEGACY clock mode. You can control // the clock mode: // PG - sets GCLK mode (this has noiser PPS output statistics) // PL - sets LEGACY clock mode // // For TAPR TICC devices PF sets the channel "FUDGE" factor // delay compensation values. // // For PRS-10 devices PF enables discipling to a 1PPS input with // input filtering enabled and PU selects unfiltered 1PPS input. // PH configures the 1PPS output to be a static "locked" signal // where a high level means locked. PL selects a low level // "locked" indication. // // For PRS-10 devices PA sets the PRS-10 frequency offset using the SF // command. Note that the SF setting is temporary and is reset // between device power cycles and resets. Also, it is not used if // the PRS-10 1PPS input is used to discupline the oscillator. // // For PRS-10 devices PY sets the PRS-10 frequency synthesizer control // words that allow larger and permanent changes in the output // frequency. There are around 100 valid combinations of synthesizer // settings... see the PRS-10 manual. // // For the SRO100 PR sets the raw phase adjust. // For the SRO100 PF sets the frequency adjustment (FC) value. // For the SRO100 PH sets the phase comparator offset. // For the SRO100 PP does nothing. // // // The Trimble receivers let you set the oscillator signal polarity // reference to the PPS signal: // PO - toggle the oscillator signal polarity from the keyboard // /^f - sync OSC signal falling edge to time // /^r - sync OSC signal rising edge to time // /^ - toggle OSC signal edge // // // Some other devices let you adjust the PPS timing offset in relation // to UTC/GPS time (much like the antenna cable delay parameter). For // these devices the PO command is used to set the PPS offset. // PO - set the PPS pulse timing offset in relation to UTC/GPS time // (the times are in nanoseconds and can usually be positive or // negative) // // For the PRS-10 PO sets the magnetic offset value (used to // tweak the output frequency by small amounts) // // For the PRS-10 PT sets the time tag offset offset value // (used to adjust the time tag by up to +/- 32767 ns) // // For the X72 PO tells Heather what the master oscillator // frequency is (usually 60 MHz) // // // Some devices let you configure the PPS output between a 1 PPS mode // and a PP2S mode (telecom standard pulse per 2 seconds): // P1 - select 1 PPS mode // P2 - select PP2S mode // // On the Oscilloquartz Star-4 GPSDO: // P1 - enable TOD (time of day) output // P2 - disable TOD output // // // Some devices let you reference the PPS pulse to either UTC time or // GPS time (and usually this also changes the time reported by the // receiver to GPS or UTC time). // TG - configure the receiver for GPS time // /tg - configure the receiver for GPS time from the command line // // TU - configure the receiver for UTC time // /tu - configure the receiver for UTC time from the command line // // TN - configure the receiver for UTC time with PPS synced to // UTC(SU) (ESIP receivers only) // // // // Some devices have one or more pulse/frequency output signals that let // you set the pulse rate/frequency and/or pulse duty cycle or width: // PA - configure pulse output A // PB - configure pulse output B // // You enter the pulse frequency in Hz and optionally a pulse // width or duty cycle (duty cycle values are between 0 and 0.99999, // pulse width values are a width in microseconds >= 1.0). If a pulse // width/duty cycle is not given, the default is 50% duty cycle. // Note that most devices have limits of the output frequency and // width/duty cycle that is available, and may be different for each // output... consult your device manual. // // For the SRO100 PA sets the PPS tracking alarm window. // // // For the Symmetricom X72 and SA22 rubidium oscillators you can set // the ACMOS output frequency: // PN - set the ACMOS output frequency or divider ratio. // If you follow the input number with an 'H' the frequency // will be set to the closest possible value in Hz (accuracy // is limited by the interger divider ratio) // // // // TRAIM CONTROL // // Many GPS timing receivers support a feature called TRAIM - Time // Receiver Autonomous Integrity Monitoring. TRAIM mode monitors the // timings from the various satellites and, ifinconsistencies are // detected, can drop suspect satellites from the timing solution, set // alarm conditions, etc. Consult your device manual. // // PT - configure device TRAIM mode / threshold. // For TAPR TICC devices this sets the "FIXED TIME2" values. // For the SRO100 PT sets the PPS tracking window half-width. // // // // // //-NON-VOLATILE CONFIGURATION EEPROM/FLASH/SRAM memory // // Some receivers support saving all or parts of the receiver configuration // into some form of nonvolatile memory (like EEPROM). Configuration // saves are currently supported on Trimble, Ublox, and Venus/Navspark devices. // Also the HP-5071A cesium beam oscillator. The Symmetricom X72 and SA22 // rubidium oscillators also support EEPROM, but what gets saved is not // documented and may vary depending upon the firmware version. The // TruePosition GPSDO has an undocumented "$UPDATE FLASH" command the EE // sends. // // Whenever EEPROM is written Heather sounds a BEEP. // If you hear lots of unexpected beeps, something cold be // wrong and you may be wearing out the EEPROM. Note that SCPI // type devices also sound a BEEP when a receiver message response does // not seem to match what was expected (loss of message sync). // // Jupiter receivers automatically write things like almanac data to EEPROM // and will periodically produce EEPROM write BEEPs. After a power-on there // will be quite a few during the first hour or so. // // /kc - toggles disabling of writing configuration data into EEPROM // /kc1 - disable writing into EEPROM // /kc0 - enable writing into EEPROM // // // EE - from the keyboard, writes the complete current receiver // configuration to EEPROM/BBRAM/FLASH. // // For Venus receivers this command toggles the enable of // writing configuration changes to flash memory. If writing // to flash is enabled, the receiver status column will // show "FLASH: WRT" instead of "FLASH: OK". Once "write flash" // mode is enabled any new configuration changes are saved to // flash. Previous changes are not written to flash. Writing // to flashdefaults to OFF for Venus receivers amd changes // are only saved to battery backed RAM (if available). // // For the PRS-10 rubidium oscillator this command will prompt // you to select the parameter that should be saved. The // default prompt is for the last paramter that you changed. // Entering "ALL" will save the current values of all the // save-able paramters. // // Changing any of the PPS/OSC/Cable delay parameters // from the keyboard stores the values in EEPROM unless EEPROM // writes have been disabled. Changing them from the command // line does not cause an EEPROM write. // // // // // //-ADEV (and MTIE) CALCULATIONS and DISPLAYS // // Lady Heather can calculate and display various ADEV (Allan Variance/ // Deviation) values from the receiver readings. ADEVs are a way of // characterizing how stable a signal is over various time intervals. // Heather supports simultaneous ADEV, MDEV, HDEV, and TDEV calculation. // // If the main "receiver" type is a time interval counter (like the TAPR // TICC) Heather can also calculate and display MTIE (Maximum Time // Interval Error). In this section, MTIE can be considered to be just // another xDEV type, but xDEVs and MTIE cannot be shown on the screen // at the same time. // // The AI command enables the MTIE display. Heather uses Bregni's algorithm // to calculate MTIE. Bregni's algorithm is very fast but limits the // intervals to powers of 2. The maximum time interval used is the largest // power of 2 <= the adev queue size value. MTIE CALCULATION STOPS // WHENEVER THE MAXIMUM TIME INTERVAL IS REACHED. The CI command will // clear the MTIE data and start over. // // // -------------------------- WARNING -------------------------- // // Unless you are using a time interval counter (like the TAPR TICC) // the ADEV values are based upon the PPS and OSCillator // error values reported by the unit. These values (aka bogo-adevs) are // not derived from measurements made against an independent reference // (other than the GPS signal) and may not agree with ADEVs calculated // by measurements against an external reference signal (true adevs). // // Bogo-adevs tend to diverge more from true adevs at shorter taus (say // less than 30 seconds) and somewhat less at longer taus. Values at // the middle of the tau range can be quite close to true adevs. // // ADEVs calculated when the oscillator is undisciplined are more // meaningful than when the oscillator is being disciplined. For proper // true ADEV values, you should use a proper external Time Interval Counter. // // Not all devices report values that are even suitable for ADEV // calculations... Mostly the Trimble GPSDO devices are usable. // // If the ADEV values were calculated from receiver data, the ADEV // type in the table headers is shown in lower case. ADEVs derived from // time interval counters are shown in upper case. // // If the ADEVQ: queue size message on the screen is shown in GREY, that // means that the receiver potentially has data that ADEVs can be calulated // on, but that data is not time-related and that ADEV calculations are // blocked. You can un-block them by explcitly setting the adev queue // size with the /a= command line option. // // --------------------------------------------------------------- // // // SELECTING THE ADEV/MTIE TYPE TO DISPLAY // // Heather maintains a separate circular data buffer of the values that // it uses to calculates ADEVs from. The queue contains a PPS related // value and an OSCillator related value. The size of the ADEV queue // determines the maximum "tau" time interval that the ADEVs can show. // The default is 33,000 points which is suitable for values of TAU out // to around 10,000 seconds. // // You can set the size of the ADEV (and MTIE) queue from the command line: // /a=size - sets the number of points to save in the ADEV queue. // A size of 0 will disable ADEV calculations. Every 10000 // ADEV queue entries uses around 1.0 megabytes of memory. // If MTIE data is being used (with a time interval counter) // this increases to around 7.5 megabytes. // // Normally Heather shows the xDEV queue size on the screen in WHITE. If // the device does not support xDEVs and the xDEV queue memory has not // been allocated it will be shown in GREY. // // // Normally Heather collects a new ADEV entry every second. You can adjust // the ADEV interval with: // /j=secs - sets all ADEV queue sample intervals // /ja=secs - sets chA (PPS) ADEV queue sample interval // /jb=secs - sets chB (OSC) ADEV queue sample interval // /jc=secs - sets chc ADEV queue sample interval // /jd=secs - sets chd ADEV queue sample interval // /jo=secs - sets chB (OSC) ADEV queue sample interval // /jp=secs - sets chA (PPS) ADEV queue sample interval // // // You can clear the ADEV queue from the keyboard: // CA - clear the ADEV and MTIE queues // CB - clear the ADEV and plot queue // CI - clear the MTIE data queue // // You can clear the ADEV or MTIE queue and reload it from the porttion // of the plot queue currently being shown on the screen: // CR - reload the ADEV queue from the plot queue data being shown. // When using the TAPR TICC (or other) time interval counter this // command also reloads the MTIE data from the plot queue TIE points // displayed. Note that the CR command can produce errors if the device // is actively sending data to Heather. // // The CR command lets you examine the ADEVs and MTIE data of a selected // portion of the captured data. Set the plot view interval to the length // of the data segement you want to analyze (V command). Use the plot // scrolling commands to move the first point of the data to be analyzed // to the left edge of the plot area then issue the CR command. Note that // unless plot updates are disabled (U command) new incomming data will be // added to the ADEV and MTIE data queues. // // // // Heather can also read ADEV information from files using the "R" // keyboard command. ADEV files must have an extension of .ADV // These files can have three independent values per line. The first value // if the "PPS/chA" value, the second one is the "OSC/chB" value, the third // value is the TAPR TICC channel C value (and is mostly useless) These // values don't have to be actual PPS and OSC values, but that is how // Heather refers to them in the menus. // // The .ADV files can also can contain: // # text comments // #title: title text (note that the ': ' is required) // #period seconds_between_readings (default=1) // #scale pps_scale_factor osc_scale_factor // // The first line of an ADV file must be a '#' line. // // The scale factor value multiplied by the data values should yield // nanoseconds. // // Note that the #period command erases any data values that appeared // before it in the file. // // Reading an ADEV file pauses the processing of data from the receiver. // THe "U" keyboard command can resume receiver updates. // // // Heather can also read a time interval error (TIE) value file for // calculating MTIE. TIE files must have an extension of .TIE // A TIE file consists of lines of up to 4 channels of TIE // data (chA chB chC and chD) per line. Comment lines start with a '#'. // // // // ADEV INFORMATION DISPLAY // // Heather displays ADEV info in two ways. First is a table of ADEV values. // Second is as graphs in the plot area. If a time interval counter (like // the TAPR TICC) Heather can also display MTIE values. (MTIE is Maximum // Time Interval Error, a common measurement used in the telecom industry). // // GA - from the keyboard toggles the ADEV plots on and off // /ga - from the command line // // If the ADEV plot is enabled, then the division markers in the plot area // that represent decades are highlighted in CYAN. Each highlighted // vertical division represents a power of 10. Each minor division marker // is a linear division of that decade. The decade value of the top line of // the plot area is determined from the largest ADEV value seen in any // of the ADEV tables. All ADEV types are scaled the same. When ADEV plots // are being displayed the TAU values are labeled at the top of the plot // and the decade values are labeled at the right side. // // Each highlighted horizontal division represents TAU with divisions of // powers of 10 seconds (TAU 1,10,100,1000,10000,,..) The horizontal major // divisions between the highlighted ones are a 1:2:5 division of // that time decade (like 1,2,5,10,20,50,100...). // // Heather's ADEV plots differ from conventional ADEV plots. Conventional // ADEV plots are drawn with a log-log scale. Heather's plots use a linear // scale (this is necessary because Heather's data plots share the same plot // grid). The vertical scale is logarithmic by decade, but linear within // the decade. // // For screen resolutions 800x600 and below, the ADEV plot decades // are scaled to single VERT_MAJOR divisions (not to every two major // divisions) // // // The ADEV table is always shown on the screen if there is space for it // (in the upper right corner of the screen). The "GB" keyboard command // allows for one of the satellite maps or the watch display to be shown // in the plot area. // // If more than one of the map displays and/or watch display is enabled // they take precedence over the ADEV table display. // // Clicking on the adev table display will switch the screen to the // "all adevs" mode. The screen will be configured to display all four // adev types of the adev table that you clicked on. // Cicking again will restore the screen to its previous state. // Note that short clicks might be ignored... particularly on devices // like UCCM receivers that only output time updates every two seconds. // It can help to hold down the mouse button until the screen changes. // // // If the adev tables have more adev bins calculated than will fit on // the screen, you can scroll through them. See the PLOT WINDOW section // above for information on scrolling through the ADEV tables. // // // Heather always calculates all four ADEV types for both the PPS and OSC // values (and the TAPR TICC in TIMELAB mode, the channel C data). // The "A" keyboard menu is used to configure the ADEV information to // display: // AA - Show ADEVs for the OSC and PPS values // AH - Show HDEVs for the OSC and PPS values // AI - Show MTIEs for the TICC chA and chB values (the MTIE display is // only available if using a frequency/time interval counter) // AM - Show MDEVs for the OSC and PPS values // AT - Show TDEVs for the OSC and PPS values // AP - Show all ADEV types for the PPS / channel A value // AO - Show all ADEV types for the OSC / channel B value // AC - Show all ADEV types for the TAPR TICC channel C value // AD - Show all ADEV types for the TAPR TICC channel D value // // You can also select the ADEV type(S) from the command line: // /oa - Show ADEVs for the OSC and PPS values // /oh - Show HDEVs for the OSC and PPS values // /oi - Show MTIEs for the TICC chA and chB values // /om - Show MDEVs for the OSC and PPS values // /ot - Show TDEVs for the OSC and PPS values // /oo - Show all ADEV types for the OSC value // /op - Show all ADEV types for the PPS value // /oc - Show all ADEV types for the TAPR TICC channel C data (currently useless) // /od - Show all ADEV types for the TAPR TICC channel D data (currently useless) // // The "all adev" commands (AP / AO / AC / AD) let you // control what info to plot. All four ADEV plots // only, all four ADEV types and the graphs (can be a // bit confusing since the same colors are used for // two different things), or the two regular (PPS/OSC or CHA/CHB) // ADEV plots and graphs: // AOA - show all four OSC ADEVs tables and all ADEV plots // APA - show all four PPS ADEVs tables and all ADEV plots // ACA - show all four channel C ADEVs tables and all ADEV plots // ADA - show all four channel D ADEVs tables and all ADEV plots // // AOG - show all four OSC ADEVs tables and all plots // APG - show all four PPS ADEVs tables and all plots // ACG - show all four channel C ADEVs tables and all plots // ADG - show all four channel D ADEVs tables and all plots // // AOR - show all four OSC ADEVs tables and regular ADEV plots // APR - show all four PPS ADEVs tables and regular ADEV plots // ACR - show all four channel C ADEVs tables and regular ADEV plots // ADR - show all four channel D ADEVs tables and regular ADEV plots // // // Sometimes the scaling of one (usually TDEV) or more of the xDEV/MTIE // plots will interfere with the display of the plots of the other // types. You can selectively turn off (or on) the plots of one // or more of the data types with the AX keyboard command or the /ax // command line option: // AXA - toggle display of ADEV plots // AXH - toggle display of HDEV plots // AXM - toggle display of MDEV plots // AXT - toggle display of TDEV plots // AXP - toggle display of PPS/chA xDEV/MTIE plots // AXO - toggle display of OSC/chB xDEV/MTIE plots // AXC - toggle display of chC xDEV/MTIE plots // AXD - toggle display of chD xDEV/MTIE plots // // /axa - toggle display of ADEV plots // /axh - toggle display of HDEV plots // /axm - toggle display of MDEV plots // /axt - toggle display of TDEV plots // /axp - toggle display of PPS/chA xDEV/MTIE plots // /axo - toggle display of OSC/chB xDEV/MTIE plots // /axc - toggle display of chC xDEV/MTIE plots // /axd - toggle display of chD xDEV/MTIE plots // /ax - enable display of plots all xDEV/MTIE types // // // Heather defaults to scaling the ADEV bins into a 1-2-5 sequence. // The AS keyboard command or /as= command line option let you modify // the bin scaling sequence. // /as=0 all adevs (next tau = tau + 1) // /as=1 one bin per decade // /as=2 one bin per octave // /as=3 3dB per decade (displayed tau is rounded to an integer) // /as=4 1-2-4 decades // /as=5 1-2-5 decades // /as=8 1-2-4-8 decades // /as=10 10 bins per decade // /as=29 29 (linearly spaced) per decade // /as=99 logarithmic linearly spaced bins // // Heather is limited to calculating a maximum of 100 bins. The number // of ADEV bins that can be plotted or shown on the screen is limited // by the amount of screen space available. The full adev info is // written to the log file whenever it is closed or Heather exits. // You can scroll through the adev tables and plots as mentioned above. // // Note that changing the bin scaling sequence causes Heather to // recalculate the adevs from the adev queue data. If the adev queue // had overflowed the new adev calculations and numbers will not use // data that had been accumulated before the queue had overflowed. // // Recalulating the adev values (either due to manually changing the // bin scaling sequence or automatically due to an adev queue overflow) // can take a long time on slower machines. For instance recalculating // all 4 adev types on 36,000 adev queue entries on a Raspberry PI3 // can take around 25 seconds). When recalculating the adevs, the // keyboard will not respond. // // // The AE keyboard command or /ae= command line option toggles the // display of ADEV error bars in the plots. Error bars that are shown // with arrow points on the ends indicate an adev bin with not enough // data to produce a meaningful error estimate. Error bars smaller than // one minor plot division are not shown. // // // // //-USING HEATHER WITH FREQUENCY AND TIME INTERVAL COUNTERS // // Heather can be used with frequency and time interval counters in two // different ways: // // 1) As the primary "receiver" device // 2) As an auxiliary (extra) input device. When used as an auxiliary // device the counter readings are used to calculate true ADEV values // (instead of the "bogo-adevs" calculated from the receiver // self-reported disciplining loop parameters). // // To use a counter as the primary "receiver" device use: // /rxi - input device is a counter // /rx1 - input device is an HP-531xx counter. // /rxi will usually work with the HP counters, but /rx1 can be // used to force the issue. // // Heather does a pretty good job for determining the counter type from // the data that it see, but you can also use the following commands to // force the counter type when /rx1 or /rxi has been specified: // /itc - force generic counter mode // /ith - force HP counter mode // /itl - force Lars GPSDO controller counter mode // /itp - force PICPET counter mode // /itt - force TAPR TICC counter mode // // To use a counter as an auxiliary input device, see the section on // the /ei command command. // // If the primary input device is a counter, the /ei command allows you // to connect a second counter to add more channels of data (two TAPR // TICCs allows four channels of data to be analyzed). // // // When using Heather with a counter as the primary input device, Heather // enters ADEV mode and displays ADEV/HDEV/MDEV/TDEV and/or MTIE of the // input signals. It has most of the functionality of the popular // TIMELAB progam, but none of the cool slickness... but it does run under // Linux, macOS, and FreeBSD. See the section of ADEVs for info on // configuring and controlling the ADEV displays. TAPR TICC data is best // displayed on screens with a width of 1280 pixels. // // // For generic counters, Heather does not send commands to the counter or // change the counter configuration. With the TAPR TICC there are several // commands that can configure the device. Consult the TAPR TICC manual for // more info on these settings. // PM - set the data type mode // PE - set the input signal edge to use // PE - set the channel "fudge" factor settings // PT - set the channel "TIME2" factor settings // PS - set the channel "time dilation" settings // PS - set the device sync mode // PC - set the device calibration period // PR - set the device ref clock // PK - set the device coarse clock // &a - auto-tune TIME2 and fudge factor values // // The user must configure the main and secondary counters with the same // settings and operating mode. To configure the second TICC // start Heather with the second device's port specified as the // main input device, configure it, shut down Heather, then // restart Heather with the first TICC specified as the main // device and the second TICC as the extra device. // // // // Heather needs to know what kind of data the counter is providing. // All counter channels must be using the same data type. // /imi - time interval data // /imf - frequency data // /imp - period data // /imt - timestamp data // /imd - TAPR TICC debug data // /iml - TAPR TICC Timelab data // // PM from the keyboard also sets the counter data type. // // Note that the TAPR TICC supplies data type information, but these // commands let you override the TICC info, but this will probably cause // errors. // // // Heather converts and proceees all counter readings into time intervals. // The data is displayed as Time Interval Errors (TIE data). TIE is the // difference from the reading to the nominal frequency of the oscillator // being analyzed. // // You should configure frequency counters with a 1 second gate time. // For the TAPR TICC, etc use a divider to drive the counter with a // 1 PPS input signal. // // // Heather needs to know the nominal frequency of the data source being // analyzed. The nominal frequency of all channels defaults to 10 MHz. // Setting the nominal frequency also sets the phase unwrap interval used // when processing frequency data. // You can specify the nominal frequency of any channel like: // /if=5E6 - set all channels to a 5 MHz nominal frequency // /ifa=15E6 - set channel A to 15 MHz nominal frequency // /ifb=10E6 - set channel B to 10 MHz nominal frequency // /ifc=1E6 - set channel C to 1 MHz nominal frequency // /ifd=10000000 - set channel D to 10 MHz nominal frequency // /ifo=15E6 - set channel A to 15 MHz nominal frequency // /ifp=10E6 - set channel B to 10 MHz nominal frequency // // PN from the keyboard also sets channel nominal frequencies. // The PN command is not available when using Symmetricom Rb // oscillators. // // // Heather can also display the TIE data as frequency error data: // GP# - Display channel A data as frequency errors // GO# - Display channel B data as frequency errors // G7# - Display channel C data as frequency errors // G8# - Display channel D data as frequency errors // // // Heather can also display phase data of the input signals: // G1 - Display channel A phase data // G2 - Display channel B phase data // G3 - Display channel C phase data // G4 - Display channel D phase data // GV - Display phase data for all channels // // Instead of raw phase data, Heather can display phase data residuals of // the input signals. Phase resiuals are the least squares inear trend line // of the phase data subtracted from the phase data. // G1= - Display channel A phase residuals // G2= - Display channel B phase residuals // G3= - Display channel C phase residuals // G4= - Display channel D phase residuals // // // When operating on frequency data, Heather needs to "unwrap" phase data. // To do this, it needs to know what phase wrap interval to use. Heather // normally bases this upon the nominal frequency setting using the formula: // (1.0 / nominal_frequency)... the actual value used to unwrap phase data is // half that value. You can override this setting using: // /pwa=seconds - for channel A data // /pwb=seconds - for channel B data // /pwc=seconds - for channel C data // /pwd=seconds - for channel D data // /pwp=seconds - for channel A data // /pwp=seconds - for channel B data // /pw=seconds - for all channels // PW - from the keyboard. You can specify up to 4 phase // wrap intervals for CHA, CHB, CHC, and CHD separated // by spaces. The PW command is not available when using // SRO100 rubidium oscillators or STAR4 GPSDOs. // // Values of 0 seconds says to disable phase un-wrapping. // Negative values say to use the nominal frequency to set the phase // wrap interval. // // // Timestamping mode counters have a limited range that the timestamps // cover. After this amount of time, the timetamps "wrap". Heather // normally reduces all timestamps modulo 100 seconds. This value is // good for most applications. You can force the timestamp wrap interval // to any value. All channels use the same timestamp wrap setting: // /twi=seconds // PI - from the keyboard // // The PICPET timestamp counter chip has a rather coarse resolution (100 ns // with a 10 MHz clock). This can produce rather noisy plots. Try setting // a long-ish display filter with the FD keyboard command... like FD 60) // // The Lars GPSDO is a simple GPSDO controller that can work with any // GPS device that outputs a 1PPS signal. It disciplines an external // 10 MHz oscillator. You can use the Lars GPSDO either as a TIC (in // period mode) as the main input device or you can use it as an "extra" // input device. In "extra" mode you use the GPS receiver as the main input // device and the Lars GPSDO data as the "extra" input device. The Lars // GPSDO reports the PPS error deviation from 1Hz (i.e. time interval // error), the GPSDO DAC setiing, and the GPSDO temperature. If the // receiver does not report one of these values, the Lars GPSDO data is // shown. If the GPS receiver sends one of those values, the GPS receiver // data is shown. The Lars DAC setting is labeled "DACL", the Lars // temperature value is labeled "TEMPL", and the PPS value is labeled "PPSL". // Note that the xDEVs from the Lars GPSDO are calculated from the GPSDO // control loop values and are not referenced to an external reference. // They are what Heather refers to as "bogo adevs". // // // // //-MISCELLANEOUS RECEIVER CONTROL COMMANDS // // // RESTARTING and RESETTING the RECEIVER // // !W - warm start the receiver // !C - cold start the receiver // !H - hard reset the receiver to factory defaults // // Note that on many receivers doing warm/cold/factory resets may // take a long time and Heather may take a long time to // re-establish communications or Heather may not be able to // re-establish communications, or may change the receiver language // type. You may need to exit and restart Heather. // // // // SERIAL PORT CONTROL // !S - re-initializes the serial port connection and receiver data // parser // // !Z - reset the receiver message data parser // // !P - set operating system serial port parameters (like the /br // command line option) Note this changes the operating system // serial port configuration and NOT the receiver serial port // parameters. // // In order to guard against accidentally "bricking" a receiver // by setting a hard-to-recover-from configuration, Heather // does not ever change the receiver serial port configuration. // (someday this command might be able to configure the receiver // serial port parameters) // // !B - send a 300-500 msec BREAK to the serial port // // // // EDITING FILES // N - pressing N on the keyboard brings up WORDPAD (NANO on // Linux and macOS_ to edit/view a file. The default file // is heather.cfg // // // SENDING COMMANDS to RECEIVER // !U - sends a command string to the receiver. This is mainly for // NMEA, SCPI, and other receivers that accept ASCII commands. // For NMEA receivers you do not need to include the leading '$' // character. Also the NMEA checksum will be automatically // added if it is not included (no '*' in the command). // // On the Lucent RFTG-m GPSDO this command disables the unit and // causes the other unit to assume control. Use !R to re-enable // the unit. // // // RUNNING RECEIVER DIAGNOSTICS // !D - command the receiver to run its internal self-tests. Note that // on many devices this takes a long time and/or resets the receiver // and Heather may take a long time (or forever) to re-establish // communications. // // // SWITCHING RECEIVER MESSAGE FORMATS // !M - If a receiver can speak NMEA, but is currently running in its // native binary mode, this will switch the receiver back to NMEA. // On receivers that are speaking Motorola binary data, this command // usually switches the receiver from Motorola mode to some other // (device dependent) language. // // // CHANGING THE RECEIVER NAVIGATION / MESSAGE OUTPUT RATE // /nr=Hz - from the command line // !R=Hz - many modern receivers can output data at greater than 1 Hz. // This command lets you change the "navigation rate" of the // receiver. // // Note that most timing receivers cannot provide an accurate // 1 PPS signal unless they are running at 1 Hz navigation rate. // // High navigation rates produce a lot of data and serial port // traffic. If the receiver serial port is set to a low speed, // they usually drop messages to lower the data rate. Some // receivers just go bonkers. This condition usually shows up // as lots of time-skip indications in the plot area and/or // jittery watch or digital clock displays. // // Sometimes a high navigation rate produces enough serial port // traffic that Heather never sees an idle time in the data // stream where it can process keyboard commands. The keyboard // will stop responding. You can recover from this by killing // the program and restarting it with the /nr=1 command line // option to lower the navigation rate back to 1 Hz. // // Also with high navigation rates and plot auto-show mode (the // VT keyboard command) you might not be able to exit the // program from the keyboard (particularly with a lot of data // in the plot queue). You can exit the program by clicking on // the exit button in the title bar or turning off VT mode (try // V0) before exiting. // // // // TERMINAL EMULATOR // // Heather has a built in terminal emulator program that is handy // for monitoring data from the receiver and sending ASCII commands to it. // Receiver data is shown in GREEN and user keystrokes are shown in // YELLOW. // // !T - enter terminal emulator from the keyboard // /bt - start Heather in terminal emulator mode from the command line // // If you use /rxx (no receiver type, use system clock) along with /bt // Heather will work as a simple terminal emulator. The program will // exit when you press the END key. // // You can also use the /rxte (or /rxtt) command line option to operate // heather as a terminal emulator program. You can set the port // configuration with /rxte=... where ... is the device desciptor // string as documented for the external device commands ("/ei" command). // // Normally the terminal emulator sends keystrokes immediately when a // key is pressed. Use /rxtb for a stand-alone terminal emulator with // a buffered keyboard that only sends keystrokes when CR is pressed. // This is needed for the OSA-453x devices with firmware that times // out after 175 msecs betweem keystrokes (who was the bastard that // thought that was a good idea?) // // The terminal emulator mode has several keyboard commands for // controlling it: // // END - exit terminal emulator // HOME - erase the screen // UP - re-sends the last keyboard line to the receiver // F1 - toggle keystroke echo mode // F2 - toggle writing receiver data to a receiver data capture // capture file. Heather uses the "raw data capture log" // file name. If the data capture file is open, it is closed. // If it not open, it is opened in "append, binary" mode. // F3 - toggle HEX binary data display mode. In HEX mode // bytes that could be part of a start/end-of-message // sequence are shown in YELLOW // F4 - toggle writing to the screen // F5 - CR-LF mode - adds a CR after any LF or add an LF after // any CR (this option does not show up the terminal emulator // help info header!) // F8 - send a BREAK // // // The !O keyboard command brings up a serial port data monitor screen. // This shows all data sent to or from a given serial port. Pressing any // key will exit the monitor mode. // // The ZO command also brings up a data monitor screen for the main // input device. Received message data bytes are shown in GREEN and // sent messagee bytes are shown in YELLOW. // // // // RPN CALCULATOR // // Heather has a built-in RPN calculator mode. RPN calculators are // based upon a postfix stack based architecture as popularized by // the Hewlett Packard scientific calculators. Heather's calculator // defaults to a six level stack. The first entry on the stack is // usually called "X" and the next entry is "Y". Heather also implements // 100 memory registers (0 .. 99). // // Calculator mode is entered with the "`" (backwards quote) key. // Multiple values and operations can be entered on a line. // To exit calculator mode enter a blank line or ESC when the calculator // prompt is being shown or enter a '`' (backward quote) or ESC when the // calculator prompt is not being shown. // // The calculator is also available in a full screen zoomed mode via // the Z` keyboard command. // // Heather can also be run in "calculator only" mode by starting it // with the /rxca command line option. The only way to exit // "calculator only" mode is with the EXIT calculator command or by // clicking on the exit icon in the program title bar. // // The current stack values are shown in the plot area. The "X" value // is at the bottom of the list). After exiting calculator mode // the GR keyboard command (redraw screen) will erase the stack // display from the plot area. // // Operations marked with an '*' work with angles. The input and output // values will be in either degrees or radians (depending upon the // current RAD or DEG setting). // // Numbers can be in entered in either fixed point (3.1459) or exponent // (12.34e-5) format. Hexadecimal integers can be entered like 0xABCD. // Binary integers can be entered like 0b1101. Octal integers can be // entered like 0o123. Note that binary/octal/hex numbers cannot be // signed. Use the CHS command to make them negative. // // As an example a calculator command line: // 45 sin 2 * sqr // Will results in a X value of 2.0000: calculates sin(45), multiples // the value (0.707...) by 2, then squares the result. // // // Basic math operations: // + - add X and Y // - - subtract X from Y // * - multiply X and Y // / - divide Y by X // inv - 1.0 / X // mod - fmod(Y,X) // max - maximum value of X and Y // min - minimum value of X and Y // chs - change sign of X // abs - absolute value of X // int - integer part of X // frac - fractional part of X // nop - no operation // // ctof - centigrade to farenheit // ftoc - farenheit to centegrade // ftom - feet to meters // mtof - meters to feet // rn - resistor noise in nV/sqrt(Hz) (input Y=degrees C X=ohms) // // Logical operations (on 64 bit integers, but note that the numbers // are processed via double precision values so only the lower 54 bits // may be valid due to the double precision exponent bits). // ~ - complment X // & - AND X and Y // | - OR X and Y // ^ - XOR X and Y // >># - shift X right #places (1 place if # not given) // <<# - shift X left #places (1 place if # not given) // // Trig functions: // deg - treat/display values as degrees // rad - treat/display values as radians // rtod - radians to degrees (X * 180.0 / PI) // dtor - degrees to degrees (X * PI / 180.0) // sin * sine(x) // cos * cosine(x) // tan * tangent(x) // asin * arcsine(x) // acos * arccosine(x) // atan * arctangent(x) // atan2 * atan2(Y,X) // rtop * rectangular to polar (theta->Y, r->X) // ptor * polar to rectangular (Y input is theta, X is R) // dms * break up angle in X to degrees minutes seconds // dec * convert degrees minutes seconds (Z Y X) to decimal // dist - linear distance between two points (X Y and Z R) // diag - diagonal distance - sqrt(X*X + Y*Y); // gcd * great circle distance and azimuth between two locations // (X=LON1 Y=LAT1 [destination]) (Z=LON2 R=LAT2 [source]) // bearing * azimuth between two locations (X=LON1 Y=LAT1 [destination]) // (Z=LON2 R=LAT2 [source]) // // Powers and logarithms: // sqrt - square root X // sqr - X*X // ln - ln(X) // log - log base 10 (X) // exp - e^X // powe - e^X // pow10 - 10.0^X // pow - Y^X // ** - Y^X // // Time and date maniipulation: // date - put display date (yyyy mm dd onto stack Z Y X) // time - put display time (hh mm ss onto stack Z Y X) // greg - convert X (JD value) to gregorian onto the stack) // local - local time as a Julian date // utc - UTC time as a Julian date // gps - GPS time as a Julian date // mjd - UTC time as a Modified Julian Date // gtime - time since GPS epoch (in days) // utime - time since Unix epoch (in days) // tzjd - time zone offset as a Julian time (fraction of a day) // tz - time zone offset in hours // leap - current leapsecond count (UTC offset) // week - gps week // tow - gps time of week // epoch - gps epoch as a julian date // secs - convert hours minutes seconds (Z Y X) to seconds // dow - convert hours min secs (Z Y X) to day of week (0..6) // ti - stopwatch timer value (TI keyboard command value) // // rise - sun/moon rise time as a Julian date (local time) // noon - sun/moon noon/moon transit as a Julian date (local time) // set - sun/moon set time as a Julian date (local time) // The rise/noon/set times will be for either the sun // or moon... depending upon how the main screen is // configured (with the TR M keyboard command). // // Display formatting: # is the number of decimal point digits. If # // is not given, use the current setting. Note that there is no space // before the #. // fix# - fixed point notation (unless value is too large) // sci# - scientific notation (mantissa and exponent) // exp# - engineering notation (exponents are a multiple of 3) // hex# - ASCII hex format (integer only!) // oct# - ASCII octal format (integer only!) // bin# - ASCII octal format (integer only!) // comma# - toggle formatting the integer part with "comma" every 4 // digits. # is the option "comma" character. If # is // a '.' then also replace the decimal point with // a ',' (european style mumbers) // zoom - switch to zoomed calculator screen mode // // Stack manipulation: // ex - exchange X and Y value // ent - push X onto stack // enter - push X onto stack // clx - clear X value // clear - clear stack and memory registers // cls - clear stack // clm - clear memory registers // // roll - rotate the stack down 1 position // roll# - rotate the stack down # positions // down - rotate the stack down 1 position (same as roll command) // down# - rotate the stack down # positions (same as roll command) // up - rotate the stack up 1 position // up# - rotate the stack up # positions // drop# - remove # entries from the stack // stack# - push stack entry# onto the stack // swap# - swap X with stack entry# // // Memory operations: # is the register to use (0..99). If # is not // given, register 0 is used. // rcl# - push reg # onto the stack // rcl+# - add reg # to X // rcl-# - subtract reg # from X // rcl*# - multiple X by reg # // rcl/# - divide X by reg # // rcl@# - push reg[reg[#]] onto the stack (indirect recall) // // sto# - store X in reg # // sto+# - add X to reg # // sto-# - subtract X from reg # // sto*# - multiply reg # by X // sto/# - divide reg # by X // sto@# - store X in reg[reg[#]] (indirect store) // // Constants and values: These commands push the indicated value onto // the stack. // last - the previous X value // lastx - the previous X value // pi - 3.14159... // \ - 3.14159... // e - 2.81828... // c - speed of light in meters per second // h - Plank's constant (6.62607015E-34) // k - Boltzmann's constant (1.380649E-23) // t0 - Absolute zero (-273.15) // spd - seconds per day (24*24*60) // spw - seconds per week (24*24*60*7) // // lat * current latitude // lon * current longitude // alt * current altitude // lla * current lat, lon, alt // // dac - current DAC/Sawtooth setting // temp - current temperature setting // pps - current PPS plot value // osc - current OSC plot value // // cable - current cable delay value in ns // elmask * current elevation mask filter setting // amu - current signal level filter setting // // dop - average DOP value // pdop - current PDOP // hdop - HDOP // vdop - HDOP // gdop - GDOP // tdop - TDOP // edop - EDOP // xdop - XDOP // ydop - YDOP // tfom - time figure of merit // ffom - frequency figure of merit // // tc - GPSDO time constant // damp - GPSDO damping factor // gain - GPSDO oscillator gain in Hz/Volt // initv - GPSDO initial voltage // // // For these values, # indicates the desired satellite. Note that there // is no space before the #. If # is not given then the highest elevation // satellite is used. #=1000 is the SUN, #1001 is the MOON // az# * azimuth of satellite PRN # // el# * elevation of satellite PRN # // sig# - signal level of satellite PRN # // doppler# - doppler of satellite PRN # // range# - pseudorange of satellite PRN # // phase# - code or carrier phase of satellite PRN # // prn# - place all sat measurements on the stack // // // Conditionals operations: If the comparison is true the next operation on // the line is processed and the second operation is ignored. If the // comparison is false the next operation is ignored and the second // operation is processed. This is similar to the "compare ? true : false" // operation in the C language. // x=y // x<>y // xy // x>=y // x<=y // // x=# - (# is a numeric constant, 0 if not given) // x<># // x<# // x># // x>=# // x<=# // // dsz - decrement x and skip next instruntion if 0 // isz - increment x and skip next instruntion if 0 // // nop - no operation // break - skip the rest of the line // again - loop back to the start of the line // // User defined operations: // You can create user defined opeations using the DEFINE command: // define name op1 op2 ... opn // // Once a command is DEFINEd you can invoke it by name just like any // built in command. DEFINE names must start with a letter. You // can DEFINE up to 100 new commands. // // You can re-DEFINE built-in operations that start with a letter (but // this is not generally a good idea). // // You can also edit user defined operations: // edit name // or you can simply re-DEFINE an existing DEFINE. If you don't specify // any string after the define name, the DEFINE is deleted. // // User defined operations can use other user defined operations. The // maximum execution nesting level is 10. // // You can save all your DEFINEd operations with the "savedefs" command. // The file extension should be .rpn if you want to re-load it using // the "R" keyboard command. Or the calculator "run" command can also // be used ("run" accepts any file name extension). // savedefs filename.rpn // // You can save all DEFINEs and the current memory and stack using // the "saveall filename" command. // // At startup, Heather can read calculator commands from the file // "heather.rpn" The entries in the file should start in column 1. // The file can contain any calculator commands, but is mainly // intended to load user DEFINEd calculator commands. // // You can read in calculator RPN files using the "R" keyboard // command (file extension must be .rpn) or with the calculator // "run" command. Lines that begin with a blank or tab are // ignored. This feature lets you use the .RPN files to implement // more complex functions than will fit on a single line. // // The "again" operation should only be used after a conditional // comparison that you KNOW can be reached. Otherwise the calculator // will loop forever! You can break out of a "hung" AGAIN loop by // pressing any key. // // // // EXECUTING AN EXTERNAL PROGRAM // !E - This command prompts for a command line for the operating // system to execute. It spwans a shell to run the specified // program, For this command to work under Linux/macOS/FreeBSD // the "xterm" program must be installed (it is part of most // Linux distros, but it is not part of the standard Raspberry Pi // distro, but can be installed). // // // // //-ON SCREEN KEYBOARD and TOUCH SCREEN SUPPORT // // Heather now supports an on-screen "touch screen" keyboard. It is // accessed by touching or clicking the mouse in the upper left-hand corner // of the screen. The touch screen must emulate a mouse for it to work. // Enabling of the on-screen keyboard may be toggled with the /kv // command line option. // // The on-screen keyboard has a "CAP" key... this actually does a // shift-lock function, not a caps-lock function. The key label changes // lower case to upper case when caps-lock is on. // // The on-screen keyboard also has a "MOU" key. When on (key is labeled // in upper case) then whenever the mouse is in the plot area the left // mouse button is treated as being the right mouse button. This // allows the plot scrolling function to be used with a touch screen. // // If the file "heather_click.wav" exists in the heather installation // directory, it is played whenever an on-screen keyboard key is pressed // or the screen is clicked to zoom an item to full screen. // // Note that for several small Raspberry PI SPI interfaced // touchscreens the touchscreen driver does not work // well (or at all). It ignores touches!. You can // improve this by using the /mb command line option. // This maps the SCROLL WHEEL and RIGHT buttons to be // the same as the LEFT button. The touch response will // be rather slow... you have to hold the touch for 2-3 // seconds before it will be recognized... sucks, but // such is life... // // // // SCREEN CLICK HOTSPOTS // // In addition to the standard mouse clicks in the plot area actions, // clicking the mouse (or pressing a touch screen) can cause various other // actions. These special "hot spots" are: // // Upper left 100x100 pixels on the main screen (the time/date information) // brings up the touchscreen keyboard if it has been enabled (/kv command) // // Upper left 100x100 pixels on a "zoomed" screen - exits the zooomed screen // // The "receiver data" area at the top of the screen next to the time/date // info block - does an immediate screen image capture just like you pressed // the "\" key. This also works on zoomed screen displays, even though // the "receiver data" is not being shown. // // The LAT/LON/ALT table on the main screen - zooms the lat/lon/alt // scattergram to full screen. // // The satellite info table - zooms the screen to the full satellite info // table, satellite position map, and satellite signal level map. If the // satellite info table is not on the screen, clicking to the left of the // first digit of the digital clock will also do this. // // The area under the satellite info table - zooms the digital clock to // full screen. // // The digital clock - zooms the screen to the digital clock display. // // The analog watch or satellite maps - zooms the clicked item to full // screen. // // The plot area header text - zooms the plot to full screen. If the plot // is zoomed to full screen, clicking on the upper right 100x100 pixel of // the screen will simulate pressing the "DEL" key to get out of // "plot review" mode. // // If the keyboard "Z" command has been used to enable a zoomed screen // display, clicking on various items in the zoomed display will zoom that // item to full screen. Clicking on items on a zoomed display that was // created by clicking on a main screen item will NOT zoom that item... it // will return to the main display screen. // // // // //-MISCELLANEOUS COMMANDS // // There are several commands that don't fall under any of the previous // sections. // // // Heather uses a color palette of 16 colors: 0..15 With 0=black and // 15=bright white. You can modify entries in the color palette map: // /cm=color,r,g,b where color is the color number (0..15) to // change and r,g, and b are the RED GREEN and // BLUE values (0..255). // // // // // Whenever Heather is idle and not doing something or receiving data // from the GPS receiver, it does a short Sleep() that returns control // to the operating system and greatly reduces the CPU usage. You can // specify how long to Sleep() for in milliseconds: // /tw[=#] - Sleep() for # milliseconds when idle (default=10) // // // // You can control the audio functions of Lady Heather: // /kb - toggle Beeps from the command line // /ks - toggle playing Sound files from the command line // /rb - toggle showing (in the plot title) reason code for beeps // // GS - toggle all sounds from the keyboard. If beeps OR sound // files are enabled, they will both be disabled. If beeps // AND sound files were disabled, they will both be enabled // and a BEEP will be sounded as confirmation. // // // Normally you exit Heather from the keyboard by pressing "ESC y". You // can allow ESC ESC to exit the program with: // /ke - toggle quick exit with ESC key // // // You can put Heather into a "read-only" mode that blocks sending commands // to the receiver over the serial port. This mode can interfere with // functions or displays that require commands to be sent to the receiver: // /ir - toggle read-only mode for receiver commands // // // This is similar to the "/ir" command, except it blocks sending ALL data // out the serial port: // /is - toggle read-only mode for serial port // // // Normally Heather periodically polls the receiver for various pieces of // data, status, or configuration information. Usually a new piece of // information is polled for every second. It can take around 30 seconds // for Heather to acquire everything from the receiver. You can block // Heather from polling the receiver for data. This is mainly useful when // using the "TK" command to analyze receiver message timing. // /ix - toggle no-polling mode for receiver data // // // Heather can output some debug information (mainly on Linux and macOS). // This debug information is independent of the debug log file and most // goes to stdout. This command line option sets the level of debug // information that is shown. // /de[=#] - set debug information level // // // // The "R" keyboard command can read some other type of files. Many of these // file formats are also readable from the command line using the "/r=" // command line option. // // You can read lat/lon/alt logs. These files // must have an extension of ".LLA" Data lines require: // time-of-week flag lat lon alt // flag=0 means good reading, otherwise skip it // This format can be generated by TBOLTMON log command. // Other .LLA file commands supported are: // # text comments // #title: Title text (note that the ': ' is required) // #lla: ref_lat ref_lon ref_alt (your assumed exact location) // The first line of an LLA file must be a '#' line. // // You can play/test sound files. These files must have an file name // extension of ".WAV" // // You can read greetings calendar files. These files must have an file // name extension of ".CAL" // // Can also read ".TIM" files from John Miles' TI.EXE // program. The .TIM file CAP/TIM/IMO, PER, and SCA commands are // used. // // If you attempt to read a file that does not have a filename .EXTension // or end in a '.', Heather tries to read a .ADV, .CAL, .CFG, .GPX, // .KML, .LLA, .RAW, .SCR, .SIG, .TIM, .TIE, .WAV, and .XML files // in that order. // // // The "N" keyboard command brings up a text editor The default editor // used is NOTEPAD in Windows, NANO on Linux and macOS, and EE on FreeBSD. // You can specify an editor to use by setting the "HEATHER_EDITOR" or // "EDITOR" environment variables. You can view/edit any file... the // default is "heather.cfg" To use this command on Linux/macOS/FreeBSD // the "xterm" program must be installed (it is not part of the standard // Raspberry Pi distro, but can be installed). // // The /ne command line option disables the file editing and execution // commands. Once /ne is used, it cannot be re-enabled. This command is // a security measure to block possible malicious exploitation of these // features. On Linux/macOS "/ne /ne" also disables playing of sound files // vis system() calls to APLAY. // // // // A few legacy command line options... nothing to see here, move // along... // // /lo - enable reading of old format LUXOR log files // /lh - don't write timestamp headers in the log file when the file // is periodically synced to the disk. // // In WINDOWS, both the TCP/IP link and help dialog features use // a windows message timer to keep the program running // if the command line help dialog box is active or the screen is // being dragged, etc. At one time, this timer had the potential to // cause very intermittent, random "unhandled exception" // aborts, but this seems to have been fixed. You can still disable the // timer feature with the: // /kt - toggle Windows dialog/message timer // // // The "/bs" command line option will adjust the displayed time by the // solar Equation of Time. The only indication that solar time is in use // is on the analog watch display. The watch name/day of week will // be "Solar". Using solar time is now best done with the "TZ" and "/tz" // time zone commands. // // // /nt - attempt to wake up Nortel "telecom" GPSDOs (this is now // done automatically) // // // // You can change the input device on the fly // from the keyboard with the /# or /ip keyboard command // just like from the command line. // Changing the input device from the keyboard resets // the satellite tracking and signal level maps. // You can also use these commands to re-establish communications // to a dropped connection or device. If you had // previously set an IP connection address/port, you // don't have to type the "=addr:portnum" after the /ip // // You can also use the "/rx" commands from the keyboard to change // the input device type. Note that Heather attempts to configure itself // for the new input device, but sometimes not all the settings and data // will be updated for the new device. Changing the device on the fly // may not always work properly. // // // // Added '$' and '=' command line/.CFG file options for // building lists of hex bytes to send to the receiver // The '=' list is sent when the program starts. The '$' // list is sent when a primary timing message is received // (i.e. once each second). For example with a TSIP receiver: // $10,3a,00,10,03 would request doppler/code phase // data every second. // $10,3C,00,10,03 would request satellite status // and position data every second. // Note that the '$' and '=' command line options should // not be preceeded by a '/' or '-'. // // // // // Revision History (from version 5.0): // // 6.14 - Modified "n" keyboard command to allow editing of arbitrary files. // Under Windows it spawns the "notepad" editor. // Under Linux and macOS it spawns the "nano" editor. // You can also specify an editor to use with the "EDITOR" or // "HEATHER_EDITOR" environment variables. // // Added PAGE_UP editing character to retreive the last line entered // so you can recover from a botched edit or easily repeat the last // command value. // // Changed default plot statistic to show to SPAN (was RMS). SPAN // is the difference between the maximum and minimum values shown // in the plot area. Be aware that not all plotted values may // be available immediately after Heather has started collecting // data. Those values will be assumed to be 0 and this can affect // the SPAN value. It can help to clear the plot queue (CC or CP // keyboard command once Heather has valid data from all the // plotted variables. // // If the user specifies the Trimble TSIP receiver type with the // /rx? command line option the base file name for output files was // changed from "tbolt" to "starloc","acutime", "sv6", or "res_t". // If the receiver type was autodetected (or is a Thunderbolt) // the base file name is "tbolt". // // If the user specifies the Lucent SCPI receiver type with the /rxf // command line option the base file name for output files was // changed from "scpi" to "lucent". If the receiver type was // autodetected the base file name is "scpi". // // If the user specifies the Nortel SCPI receiver type with the /rxy // command line option the base file name for output files was // changed from "scpi" to "nortel". If the receiver type was // autodetected the base file name is "scpi". // // Fixed "n" keyboard command to not break other two letter keyboard // commands that end in "n". // // Added the Gp/? command to show a snapshot of all 7 plot // statistics for plot "p". // // Fixed an issue where some SCPI receivers were not displaying // latitudes in the southern hemisphere properly. // // Modified code to allocat ADEV or MTIE data queues only if // these features are being used. // // Modified /gb command to toggle shared_plot... previous versions // always enabled shared_plot. Also if /gb is issued from the // keyboard the screen is re initialized in order for the new // setting to take effect. // // Modified satellite info table to allow sat PRN numbers up to 999. // This is because some receivers don't use the industry standard // PRN numbers for Galileo and Beidou, etc GNSS satellite systems. // THIS MODIFICATION CHANGES THE SUN and MOON PRN NUMBERS USED IN // LOG FILES FROM 256/257 to 1000/1001! // // Added support for the Motorola @@Bg and @@Eg raw observation // data messages (used for the VPZ carrier phase capable Oncore // receivers. // // Fixed issues with early model Motorola receivers displaying the // signal level. These Motorola receivers report the signal level // as a value between 0 and 255. Heather likes signal levels in // the 0 .. 50ish range, so the sat and signal level maps were not // properly displayed. Heather now convets the sig level using // 20*log10(sig)... the resulting value agrees quite well with // what later model Mototola receivers report in dBc. This formula // is also now used with SCPI receivers that report "SS" signal // levels in the 0..255 range (like the Z3801A). // // Fixed some potential issues with displaying the command line // help info on Linux/macOS/FreeBSD machines. Allowed mouse/ // touchscreen click to skip to the next page of help info. // // Allowed screen heights/widths down to 320 pixels. Sizes less than // 640x400 require use of scaled vector fonts (/vq or $Q commands). // // Added the EXPERIMENTAL /vq and $Q commands to draw characters // using a scaled vector font instead of the normal dot matrix font. // The font size can be scaled from 50 to 500 percent. Scaled // vector fonts can help the readability of text on large screens // or to increase the plot area size on small screens. // // Added EXPERIMENTAL /vd and $D commands to use a 480x320 screen // size (this use 75% scaled vector fonts). Expect some srceen // formatting issues and you may need to change some display item // selections (watch, clock, shared mode, etc) particularly if you // change the screen res from the keyboard. // // Added EXPERIMENTAL /ve and $E commands to use a 320x480 screen // size (this use 60% scaled vector fonts). Expect some srceen // formatting issues and you may need to change some display item // selections (watch, clock, shared mode, etc) particularly if you // change the screen res from the keyboard. // // Added EPERIMENTAL /vo and $O commands for rotating the image // in the screen window. This can be useful when used with something // like using a 480x320 LCD as a 320x480 vertical format display. // // Added the /pt= command line option to set the program title // bar text. You can also set the title bar text from the keyboard // with the GG command. Use &b as the first two characters of // the title. If the title bar string is empty, Heather uses the // receiver type as the title. // // Added "!e" keyboard command to execute an external program. // You enter the command line to start the program and it will run // in another window. // // If an invalid two character keyboard command is entered you // get a beep and the srceen flashes an error message. // // Reworked processing of simulation input files. You no longer // need a receiver to be connected to process a simulation file. // // Added /sw= command line option to control pacing of message // processing when reading a simulation file. The value specifies // how long to delay in milliseconds after each message is read. // // Fixed a spacing issue in the "/rx" command line help dialog. // // Added the ability to sound the alarm at a specifed time on // the day that a calendar file greeting is triggered. // // Allowed up to 5 greetings to match and be displayed on any // day. // // Fixed HP5xxxx/Z3816/Z3817 receiver (/rx5) initialization control // message that turns off receiver full duplex mode. Heather now // turns off full-duplex mode for all SCPI receivers. // // Added support for a touch screen keyboard. Clicking on the // UPPER LFFT corner of the screen brings up a touch screen keyboard. // The keyboard is automatically hidden whenever a keyboard command // is completed or one of the blank "keys" is clicked. The "/kv" // command line option toggles enabling of the touch screen feature. // // Added support for the numeric keypad on Linux/macOS/FreeBSD. // // Added support for "heather_click.wav" sound file that plays // whenever a touch screen key or item is touched. It is also // played every second in "tick clock" audible clock mode. // // Added TH #T keyboard command and /th=#t command line options for // enabling the audible "tick clock" that ticks each second and // beeps each minute. The sounds can be changed by supplying // the files "heather_second.wav" and "heather_minute.wav" // // Added the /tl command line option for showing dates in the ISO // yyyy.mm.dd format // // Fixed an issue on X11 systems where the mouse was responding // to clicks on a window sitting on top of the Heather window. // // Fixed an issue on Windows systems to force the screen width // to even values when setting a custom screen size. WIN_VFX // barfs if screen width is an odd number. // // Improved screen formatting for NO_RCVR mode on small screens // and screens with large width:height ratios. // // Modified screen formatting for custom screen sizes so no wasted // blank space appears below the plot area. // // Added -vp and $P commands for enabling a 800x480 screen display // (like the official Raspberry PI touchscreen display) // For X11 based systems "-vp" also enables full screen mode. // // Added /vp and $P (800x480 - Raspberry PI) screen size command (*) // Added /vr and $R (1024x600) - Reduced screen size command (*) // Added /vj and $J (1280x800) screen resolution. (*) // Added /vk and $K (1280x960) screen resolution. // The screen types marked (*) can open in full screen mode on // Linux type systems... they are standard touchscreen sizes for // devices like the Raspberry PI. // // Added full screen display mode for (X11 Linux / macOS displays) // using the -fu command line option. This must be used in // combination with an explicit screen size command that EXACTLY // matches the monitor size... e.g. "/vc=800x480 /fu" or // "/vm /fu". If the specified screen size does not match the // monitor size, all sorts of not-good things can happen. XQuartz // for macOS has problems with full screen mode. // // // Improved SCPI receiver recovery from commands that reset // the receiver. It no longer does an auto_detect() which messed // up Lucent devices because of their different com port parity // than the Z3801A. Also resets the SCPI command queue. // // Improved the auto-detect of SCPI receivers. Lucent KS devices // are now auto-detected. The auto-detect routine now uses // 19200:8:O:1 and if the device appears to be a SCPI device with // ODD parity, the setting is automatcially changed to 19200:7:O:1. // Also improved the overall reliabilty of the auto-detect routine. // // Added support for the F1..F9 function keys to read keyboard // script files "f1.scr" to "f9.scr". This allows F1..F9 // (also F10 on X11 systems) to be used as programmable function // keys. // // Clicking on the UPPER RIGHT corner of the zoomed plot display // exits plot review mode without exiting zoomed plot mode. // // Tweaked some screen size display arrangement thresholds to allow // better displays on X11 systems where a few pixels are lost to // the window borders. // // Added code so X11 systems to keep the screen updating while // scrolling the plot using the righthand mouse button. // Modified the signal level maps to use "fresher" data. Previous // versions kept averages of every reading seen at a given az/el // position since the program started. Now the averages are reset // to their current value once a day. This makes it easier to // spot changes in the antenna system performance... they won't be // masked by potentailly weeks of old data. // // Modifed clicking on an adev table to show all four adev values // for the selected adev table type. Previous versions only // supported clicking on the upper adev table and the adev tables // for the value selected by the "AO" or "AP" keyboard command was // used. // // Added support for touch screen control of plot markers and // skipping to the next error event. Heather remembers the last // column that the mouse cursor was in the plot area at. This is // shown by a small GREEN dot at the top of the plot area. If the // mouse cursor is outside of the plot area (like in the touch // screen keyboard) the plot marker control keyboard commands // (0..9, @, =, +, -) use this position. // // Heather now remembers the last plot scrolling/positioning keyboard // command ([, ], {, }, <. >, +, -) This command can be replayed // by clicking/touching in the "Receiver data" area near the top left // corner of the screen. This is useful on touch screens so you // can scroll or move the plots without having to bring up the // touch keyboard for each desired movement. For instance, you want // to fine tune the plot position a few pixels to the left. Press // the '[' key. This moves the plot one pixel to the left. Now // click in the "Receiver data" area. Each click show shift the // plot left another pixel // // Added support for FreeBSD (note: FreeBSD has no standard // sound system so sound effects are not available (unless you can // implment the "aplay" program and modify the play_tune() function). // // Modified automatic leap second screen capture to work with // devices that report the leap second as a duplicated xx:59:59 or // xx:00:00. Also the status column now shows that the leap second // screen was captured. Fixed screen capture for receivers that // have a negative value for the /tsx receiver message time offset // (like SCPI receivers). // // Modifed the "/br=" command line option to allow "," separators. // Also, if a field is not given, that value is not changed. Previous // versions set the missing value to a default value. // // Reworked the com port data loss timeout code to only use extended // timeout intervals while processing commands (like diagnostics and // device resets) that take a long time. // // Added /ct= command line option to allow setting all the com port // data loss timeouts (in msecs >= 3000). Normally Heather uses a // 5000 msec com timeout. // // Added /ct?= command line option to allow setting a specfic port // data loss timeout (in msecs >= 3000). Normally Heather uses a // 5000 msec com timeout. Replace the '?' character with the port // identifier character. // // Added /ce command line option to toggle com port data / port // loss recovery. If com data is lost or the com port disappears // Heather will attempt to re-init the com port every "com_timeout" // interval. This new feature defaults to ON. // // Modified scheduled events (screen dump, log dump, alarm, exit) // to not require an exact time match to trigger. They now trigger // on the next time message at or after the specified time. This // allows them to work if the receiver has a time skip at the // specified time. // // Added TQ and /tsk commands for showing the digital clock in // Modified Julian date.time format. // // Added TI and /tsw commands for showing the elapsed time interval // (stopwatch time) on the digital clock. // // Added /tph command line option for showing temperature as // degrees Paris Hilton. // // Added the SR keyboard command for changing the lat/lon/alt // scattergram reference point. // // Modified the plot display filter commands so that a negative // value selects a "per-pixel" filter count based upon the plot // view interval and plot width. Negative values for the filter // count no longer invert the temperature plot like previous // versions did. // // Added the /va command line option to start up in "VT" View-Auto // scale plot view mode. // // Modifed the display filter code to average the points each side // of the queue entry. Previous versions averaged the points // after the queue entry. The new method keeps the "phase" of the // averaged display point aligned with the unaveraged queue data. // // Added the ability to display the derivative of a plot's data. // For instance GPD will change the PPS plot to the derivative of // the plot. In derivative mode, the ':' after the plot statistic // label in the plot header is replaced by an '*'. // // Added support for allowing multiple serial and TCP/IP ports to // be open at the same time. This allows for future support of // things like external time interval counters and other devices // and echoing receiver data to an external device. // // Added receiver data "echo" ports. These ports echo the data from // the receiver to an external device. The /ee[=device] command // echos the receiver data in its' native format. The /ek]=device] // command echos the receiver data in NMEA format. // // Added support for environmental temperature/humidity/pressure // sensors (/en command). Currently only the dogtatian.com // and lookingforsolutions.com USB sensorr are supported. // // Added /et command to send the moon, sun, and sat position(s) out a // port. This data can be used to implement an antenna / solar // tracker. // // Added support for using a dedicated serial port for the // temperature control device. The /ef= command enables the // external temperature control port. // // Modifed the way that "missing" odd numbered seconds are simulated // on receivers that only send time every other second. The // simulated seconds are now generated "on-time". Before, they were // generated immediately after the even numbered seconds time // message. This also works for simulating missing seconds that // occur while polled receivers (like SCPI and Star-4 devices) are // processing long commands like the SYST:STAT command. // // Added support for ancient Trimble SV6/SV8 receivers (/rx6 command // line option) // // Added support for ancient Trimble ACE-III receivers (/rxai // command line option... these are currently treated as a SV6/SV8) // // Added support for ancient Trimble Palisade receivers (/rxpr // command line option) - not yet fully tested // // Added support for Trimble Acutime (/rxag, /rxan, and /rxat // command line options) - not yet fully tested. /rxan is ACUTIME 360, // multi-gnss systems. /rxag is Acutime GG, /rxat is for older // models like the Acutime Gold and Acutime 1000/2000. // // Added support for ancient Trimble TAIP receivers (/rxp command // line option) // // Added support for Datum TymServe 2000 receivers (/rxts command // line option) // // Added support for the Lars simple GPSDO controller time interval // data. The Lars device can either be used as the main input device // (as a time interval counter device) or as an "extra" time interval // counter device. // // Added support for ancient Lucent RFTG-m GPSDOs (/rxf command // line option) // // Added support for Novatel SuperStar II (/rxss command // line option) - currently untested // // Added support for the SRS PRS-10 rubidium oscillator (/rxpr // command line option) // // Added support for the Spectratime SRO100 rubidium oscillator // (/rxsr command line option) // // Added support for Spectrum TM4 GPSDOs (/rxtm command line // option) - Note I don't have one to test the command that set // options and values! // // Added support for the Symmetricom rubidium oscillators. These // cannot be auto-detected, but Heather does try to determine the // model from the devide responses. Use /rxsy for auto detect model, // /rxx7 to force X72, /rxx9 to force X99, /rxsa to force SA22). // /rxsb allows use with telecom versions that have a 58.9824 master // oscillator instead of the normal 60 MHz ones. // // Added support for the Temex/Spectratime LPFRS and RMO rubidium // oscillators (/rxlp command line option) // // Added support for TruePosition GPSDOs (/rxo command line // option) // // Added support for Venus/Navspark RTK receivers. // Added !k keyboard command for setting Venus RTK base/rover mode // and RTCM output. // // Added support for Zyfer Nanosync 380m GPSDOs (/rx3 command // line option) // // Added support for the TAPR TICC (and some other) time interval // counters for dong ADEV analysis. The /rxi command line option // specifies time interval analyzer mode. Also /rx1 can be used // for other generic counters if /rxi does not properly identify // the attached device. Note that /rx1 defaults to 9600 baud // and /rxi defaults to 115,200 baud. // // Added support for Tom Van Baak's PICPET simple timestamping // time interval counter chips for dong ADEV analysis. The /rxpp // command line option specifies time interval analyzer mode. // The PICPET sends data at 19200,8,N,1 unless driven by a // non-10MHz clock. Heather works with 2.5, 5, 10, and 20 MHz clocks // or 15 MHz on Windows systems (because most Linux systems don't // support the resulting 28800 baud serial data). With a 10 MHz // clock the PICPET resolution is 100 nsec. This can produce // rather noisy plots. It is best to set a long-ish display filter // time (FD command - try FD 60). // // Added support for a terminal emulator only mode (/rxte or /rxtt) // command line option). This works like the /bt command line option // but when you exit terminal emulator mode, Heather exits. Also // you can specify the device / parameters like /rxte=... where // "..." is the device settings info as documented for external // device command line options (like /ei). // // Added /np and TP commands for running a keyboard script at // a specified time or interval. // // Added /nc and TC commands for running an external program // at a specified time or interval. The program to run is // deterined by the "HEATHER_EXEC" environment variable. If it has // not been set, then the default program "heather_exec" is run. // // Added /ne command line option to disable the file editing and // execution commands. // // Added /bm and !o commands for enabling a port data monitoring // screen. Data from the port is shown in GREEN. Data sent to the // port is shown in YELLOW. The monitor screen can be in either // hex or ascii. You can specify the port to monitor. // To exit port monitoring mode press any key. // // Added ZO command to monitor receiver port traffic and show it as // a zoomed screen display. // // Added ZH command to monitor receiver port traffic and show it as // a formatted hex/ascii zoomed screen display. // // Modified ZN command to display a blank screen. On previous versions // ZN would cancel the current zoomed screen display. This is now // done with the ZZ command. // // Added ZT command to set a keyboard inactivity timeout (in // minutes). After the specified time has passed without any // keyboard activity, the screen switches to the specified zoomed // screen display. // // Added ZQ command for zoomed full screen calendar display. (ZQ // used to be the same as ZS zoomed signal display). // // Added TB keyboard command to show calendar for a specifed year. // // Added /zs? to start up with zoomed display '?' // // Modifed !t and /bt commands to allow connecting the termnial // emulator to any port. // // Modified NMEA handler to prioritize the message used to generate // the time code and update the screen: GxZDA, GxRMC, GxGGA, GxGNS // The GGA and GNS messages do not have a date in them. If the date // has not been seen in a NMEA message, the system clock date is // used. Once a higher priority message has been seen, the lower // priority ones are not used for time keeping. // // If adev values are being plotted, the plot area is labeled with // the taus at the top of the plots and the decades at the right // side of the plots. The adev labels are show in GREEN. Turning // off the adev plots removes the adev labels. // // Modifed default ADEV queue size to 43200 points (12 hours). It // was 36000 points. // // Added /ja (or /jp), /jb (or /jo), /jc, and /jd command line // options for individually setting the ADEV queue period. // /j sets all queue periods to the same value. // // // Added /im? command for forcing the time interval counter data // type to ? (default for /im is Timestamp mode). If the mode is // not forced for non TAPR TICC counters, the mode is set to // 'I' (time interval). Other counter modes include: // F - frequency // I - interval // P - period // T - timestamp // D - debug (TAPR TICC) // L - Timelab (TAPR TICC) // // // For TAPR TICC devices the "P" menu is used to configure the // device. Any changes to the device configuration take around // 5 seconds to process and will reset the plot and adev queues. // Selecting the "P" menu will also change the display mode to // show the current device configuration. While the device // configuration is being shown any keypress will restore the // screen to normal operation. // // For TAPR TICC devices the PC command sets the device calibration // periods value. // // For TAPR TICC devices the PD command sets the "Time Dilation" // values. // // For TAPR TICC devices the PK command sets the device coarse // clock interbal (in microseconds). // // For TAPR TICC devices the PM command sets the device operting // mode. // // For TAPR TICC devices the PE command sets the input edge // polarity for the channels. // // For TAPR TICC devices the PF command sest the channel delay // "FUDGE" values. // // For TAPR TICC devices the PR command sets the device reference // clock frequency (in MHz). // // For TAPR TICC devices the PS command sets the sync mode // value. WRANING: don't enable slave mode unless a slave device // is connected. To recover from a missing slave device, start // Heather with terminal emulator mode enabled (/bt) and used the // TICC menu to set the sync mode to master. // // For TAPR TICC devices the PO command sets the device timeout // value. // // For TAPR TICC devices the PT command sets the "FIXED TIME2" // values // // For TAPR TICC devices the &a command starts an "autotune" // proceedure that sets the FUDGE and TIME2 parameters. For // autotune to work you must have a 1PPS signal connected to the // TICC inputs via cables with matched lengths (use a "T" adaper // with matched cable between the "T" outputs and the TICC inputs). // You specify the number of seconds to analyze. It must be // greater than 30 seconds, but values over 1800 seconds are // recommened. // // For TAPR TICC devices, selecting the '&' keyboard menu will // show the TICC parameters... type "& ESC". This will show // the paramter settings and stop showing the ADEV tables. Press // any key to resume the normal display. On wide screen monitors // (at least 1280 pixels wide) the TICC config info is part of the // normal display. // // // Added /twi= command line option for setting the time interval // (in seconds) that timestamps wrap at. The default setting is to // reduce all timestamp values modulo 100.0 seconds. // // Added PW keyboard and /pw# command line options for setting the // time interval counter phase wrap time (default = 100.0E-9 for a // 10.0 MHz oscillator) // // // For Symmetricom X72 compatible devices the &a command calculates // the DDS tuning value that will set the 10 MHz output to the // correct frequency. // // Added a software disciplining algorithm for the X72 and SA22 // rubidium oscillators that do not have firmware that supports // discipling with a 1PPS input. // // // Added support for displaying MTIE (Maximum Time Interval Error) // of TICC / interval counter data. The AI command enables the // MTIE display. The maximum time interval used is the largest // power of 2 <= the adev queue size value. MTIE calculation // stops whenever the maximum time interval is reached. The CI // command will clear the MTIE data and start over. // // The WM command writes the current MTIE data to a file. The MTIE // results are also written when a log file is closed. // // // Added /dq=filename command line option and WT keyboard commands // for writing TICC data to a file when both a receiver and and // a TICC are in use at the same time. Receiver data goes to the // /dr (or WY) receiver data capture file and TICC data goes to the // /dq (or WT) TICC data capture file. // // Added /as= command line option for setting the ADEV bin spacing. // also AS keyboard command, Heather is limited to 100 adev bins. // /as=0 all tau (not practical) // /as=1 one bin per decade // /as=2 one bin per octave // /as=3 3dB per decade // /as=4 1-2-4 decade // /as=5 1-2-5 decade // /as=10 10 per decade // /as=29 29 (linearly spaced) per decade // /as=99 log spaced // // Added /ae command line option and AE keyboard option for toggling // the display of ADEV error bars in the plots. // // Added the '~' keyboard option to patch a point in the plot queue // that has a data glitch. Position the mouse cursor on the // offending point and press '~'. This will replace the point's // data with the previous data point. You may want to then use // CR command to recalulate xDEV and MTIE values from the patched // queue data. // // Added the Gp~ command to automatically remove all glitches from // a selected plot (where p is the plot to de-glitch). // // Added calculation of solid earth tide displacements (in mm) and // the net vertical gravity change (in uGals) due to the effects of // the sun and moon. The GLT keyboard command toggles the display // on and off. The values are also shown in the ZI zoom screen // display. The GKx keyboard command controls the earth tide // displacement and grvity offset plots. If an external // environmental sensor is used the GKx commands control the // sensor plots. If a satellite is selected for plotting the GKx // commands control the sat az/el/signal level plots. // // Added the /rx0 "gravity clock" operating mode. This uses the // system clock as the time source. It is optimized for showing // solid earth tide displacements and vertical gravity offsets. // To use this mode you must specify your location (via SL from // the keyboard or the /po command line option or the "heather.loc" // file). // // The color palette used for the lat/lon scattergram now repeats // every 12 hours (was 14 hours). Colors 0, 1, and 2 are not used. // Using a 12 hour cycle is more appropriate since since it meshes // better with 24 hour days. Also colors 1 and 2 are rather dim and // hard to see against a black background. // // Added /cm=color,r,g,b command line option to change color map // table entries. // // Added GpH command (where "p" is the plot selection character) // to calculate a histogram of the selected plot's value. The // histogram is calculated over the values being displayed in the // plot window. The histogram and FFT functions share much of the // same code and cannot be used at the same time. The GF (FFT) // keyboard command is also used to disable a histogram plot. // // Added /tsu command line fpr displaying the digital clock time // as Unix seconds. The time is for the currently set local time // zone. For actual Unix time, set the time zone offset to 0. // // Added /tsg command line fpr displaying the digital clock time // as GPS seconds. The time is for the currently set local time // zone. For actual GPS time, set the time zone offset to 0. // // Modified the automatic week number rollover correction code // to flush the plot queues if the rollover is detected within // 20 seconds of starting the program. This is so the bogus time // codes do not pollute the plot cursor time calculations. The // 20 second threshold allows receivers that just had a rollover // occur to be analyzed... rollovers within the first 20 seconds // are assumed to be from a receiver that has had long standing // rollover issues. // // Modified sun/moon position code to show the positions in YELLOW // if they are aligned well enough (0.75 degrees) to be an eclipse. // (currently only solar eclipses are detected). // Also modified sun/moon position history trail to show when the // sun/moon was below the horizon in GREY. // // Fixed issue with end of daylight savings time possibly triggering // one hour early. // // Added /dw date format command for showing dates in ISO week // format (yyyyWww-d) // // Added SD command to calculate appoximate radio signal delay // between the GPS receiver and a remote station. You enter the // station lat and lon and the ionosphere height (approx 250 km // in the winter and 350 km in the summer). The SD command can also // be used to calculate the great circle distance and bearing // between the current receiver lat/lon and a user specified // location. // // Fixed issues parsing the RFTG-m status bytes. Three of the // status bytes were not being converted from hex and the first // status byte value was being interpreted for those status // bytes... D'oh! // // Added support for a "Big Ben" mode Westminster chime clock. // You will need to supply your own .WAV files for the hour // sequences and the quarters. // // Added SU keyboard command to set the default UTC (leapsecond) // offset value that the receiver will use until it has the // current value from the satellites. This setting will be saved // in flash memory. This command is not supported for most receivers. // // Modifed displays that show the sun with rays so that rays that // fall outside of the clipping area for the display are not // shown. This minimizes trash left of the screen when the sun // moves away from the horizon. // // Fixed zoomed displays that show satellite PRNs to not show PRNs // that are no longer active. The previous version did not always // erase the old PRNs. // // Modified satellite / sun / moon position history trail code to // use floating point az/el values (old version used integers). If // the device reports satellite position as floating point numbers // the satellite trails will be a lot smoother. // // Fixed an issue where the sun/moon trails on Raspberry Pi's // were corrupted when the sun/moon was below the horizon (this // issues seems to be due to a Ras Pi compiler bug). // // Fixed an issue where if the log file name was given on the // command line (/wl=) before the receiver type (/rx) was specifed // the default file name for the receiver type overrode the user // specified log name. // // Changed the way the automatic GPS date rollover correction works. // Before, once a rollover condition was detected (GPS repoted a // year <2016) the rollover correction was calculated and used from // then on. The rollover code now does not "latch onto" a single // rollover correction value and will update the rollover correction // continuously. This change helps if Heather is started before // the GPS receiver has finished initializing and is sending invalid // dates. Once it starts sending valid dates, the old (bogus) // rollover correction is canceled. Also, Heather no longer waits // for the receiver to have a UTC leapsecond offset and it reports // a valid time for rollover compensation to be enabled. // // Fixed the -1a, etc command line options that select Linux ACM/CDC // devices to use /dev/ttyACM0 (was using /dev/ACM0 which is not // available on a lot of distros) // // Fixed configuring the GNSS system on Trimble multi-gnss devices. // Before it was not altering the GNSS system. // // Changed Trimble ACE-III receiver type selector to /rxai. Before // it was /rx3. /rx3 now selects the Acutime 360 devices. // // Modifed XML/GPX log files to set lat to 90.0 and lon to 90.0 // if the location mode is set to "private" (GLP keyboard command) // // When log files are closed all the statistics of the currently // displayed plot window's plot queue data are now written to the // log file as comments. // // Added support for getting the lat/lon/alt from the file // "heather.loc" if the receiver type does not have a GPS that // reports the device location. The heather.loc file location can // also be used if you enter a value of "loc" when Heather requests // a lat/lon/alt location. // // Changed NMEA echo port command to /ek (was /en) and environmental // sensor (thermometer) port command to /en (was /et)... sorry for // any inconvienience. // // Added display of tracked sat count number at the plot cursor // to the plot header (if it will fit on the screen) // // If the mouse is placed over a satellite circle in a map display // the sat az/el/signal level will be shown below the map display // (but only if there is enough space on the screen to do it) // // Added /so command line option to set the outline shape to draw // the sats in on the satellite maps. // // Addded ability to simulate input from an "extra" interval counter // device using the /ri=filename command. // // The /h command line option now shows the command line help. // Earlier versions of Heather used /h=file to read in a .cfg // config file. You now must use the /r=file.cfg command line // option to read config files. // // Modified the order of the lines in the plot header info area. // All plot values are now on contiguos lines. Note that if a // FFT or histogram plot is enabled and the mouse cursor is over // FFT or histogram data, and a plot review mode is active, it is // posible that the top line of the histogram/FFT info can oveflow // into the plot review line. // // Modifed the code that shows the plot data at the mouse cursor // to show the time in RED if it is at a time stamp sequence error. // The mouse cursor data is normally show in CYAN. // // Modified Ublox code to automatically send RAW data messages every // second or at the requested raw data rate (previously these were // only requested by the message polling loop). // // Fixed an issue where a precision survey would be aborted if the // receiver had a com message timeout during the survey. // // // Changed the satellite information table display routines. // If more satellies are visible than can fit on the screen, a // message is shown. // // The satellite PRN is followed by a character that indicates // which GNSS system the satellite belongs to. They follow the // RINEX standard for designating satellite systems. // // Changed the GCT command to control display of only tracked sats. // Earlier version of Heather used GCT as an alias of the SI // satellite info table format command. // // Added ability to sort the table on carrier phase, pseudorange, // clock bias, and state. Invalid or missing values are always // sorted to the bottom of the table. // // Made the satellite count plot a standard plot with plot // statisics, etc available. You can control it with the G$ or // GCG keyboard commands. The sat count plot does not scale or // center. It is always at the bottom of the plot area. // // Changed the auto-detect data collection timeout code to work // better with X11 systems. It now completes the data collection // after the intended 3 seconds. It was taking much longer due to // continuous screen updates. // // Modified time zone / daylight savings time code to automatically // set the DST zone to 2 (Uk/Europe) if the time zone name for // daylight savings time is set to "BST" and the DST zone has not // been specified by the user with the /b= command line option. // // // // Added support for writing RINEX format log files if the receiver // supports raw satellite observation data output (doppler, carrier // phase, pseudorange). To write a RINEX file, specify a log file // name with the ".obs" extension. RINEX files can be submitted to // GPS data processing services to get much more precise location // information. Currently the best processing service seems to // be CSRS-PPP (in Canada). They can handle single frequency // receiver data files (but they only seem to use the pseudorange // measurements). // // Added /rr command line option for controlling output rate of // raw data messages. Defaults to 1 second, but raw data can cause // a lot of traffic from the receiver. Raw data messages are // are mainly used by post-processing programs for calculating // very precise position and time solutions. // // Added /rm command line option for setting the raw measurment // types to include in RINEX files. // // Added /at command line option for setting the antenna type // // Added /an command line option for setting the antenna number // // Added /ah command line option for setting the antenna height // (and optionally e/w and n/s displacements) to include in RINEX // files. // // Added /ak command line option for setting the marker name // string to include in RINEX files. // // Added /av command line option for setting the marker number // string to include in RINEX files. // // Modified default plots for the TruePosition receivers to show // the EFC DAC value (GD) and hide the undocumented EVAL value (G8). // Also changed the scale factor for the DAC plot to be in uV/div. // // Added the GLA command to autoscale the LLA scattergram scale // factor. This can be useful if you are using the receiver in // a moving environment. // // Added the SQ command to enable plotting of a single satellite's // or sun or moon azimuth, elevation, and signal level. If SQ mode // is enabled, the earth tide plots are not available. The GK // command is used to enable/disable plots. This SQ mode is not // available when an envronmental sensor is being used. // // Added the LP/WLP command to enable writing a satellite PRN info // log file of the tracked satellites time/prn/azimuth/elevation // info (the time is in JD UTC format). // // Fixed LLA scattergram rendering code to invert north/south and // east/west directions. // // Modified the code that guesses the UTC offset (leapsecond count) // for receivers that don't support leapsecond output to assume the // next leapsecond (#19) will be on 1 JUL 2019. // // If the receiver does not send gps week or time-of-week data // then these values are calculated from the time. If this is done // the WEEK: and TOW: values will be shown in YELLOW. // // Changed UCCM GPSDO message parser to (hopefully) work with the // Ublox LEA-6T / Samsung oscillator versions of the GPSDO. // // Fixed (hopefully) the CT plot queue trim commands. CTE and CTS // were not always working properly. // // Reworked the code that shows the alarms and receiver state column // to maximize the amount of information that can fit on the screen. // // Modifed the satellite PRN maximum signal level table (shown when // the '&' menu is active) to show all sats. Previously only PRNs // 1..32 were shown. If no sats in a row have signal levels // detected then that row is not shown. // // Modified the format of the "#SIG" satellite constellation lines // in ASCII log files to include: PRN, AZ, EL, SIG, DOPPLER, // CODE or CARRIER PHASE, PSEUDORANGE, CLOCK BIAS. I'm sorry if // this change breaks any of your current log readers... .XML log // files are much better about indicating what the various data // values are (but, alas, are larger and harder to read). // // Modified the default title bar string to include the executable // file name along with the receiver type. // // Added a RPN calculator mode: "`" (backwards quote) keyboard // keyboard command. Also Z` will bring up the calculator in a // zoomed full screen mode. The /rxca command line option selects // a "calculator only" mode. // // Added support for New Years song that plays at 00:00:01 on // 1 Jan. // // Added ability to show altitude in standard linguini (7.1429 lg // per meter) with /tlg command line option or GLL keyboard command, // // Added /wt[=#] command line option to select the type of hands // to draw the analog watch with. Default hand shape is now // filled trapazoidal hands. // // // Other (mostly rather obscure) keyboard selctable options: // Those marked with "---" are either no longer implemented or have proper // keyboard or command line options to do what they did. Their function // is very likely to be changed in later versions. // // OA - toggle AMU vs dBc signal level displays. // OB # - set ADEV bins per decade // OC - toggle continuous plot scrolling mode. In non-scrolling mode // the plot queue arrows are shown in CYAN instead of WHITE) // The (dafault) continuous scroll mode scrolls the plot left one // pixel as each new point comes in. In non-scrolling mode, the // plot scrolls left two major divisions whenever it reaches the // right edge. Also the ADEV tables are only updated every 10 // seconds. Non-scrolling mode was intended for use on very // slow systems. // OD - toggle FFT plot display in dB or raw values // OE - toggle Thunderbolt-E display mode // OF - toggle periodic refresh of adev calculations // OG - set solid earth tide options: bit 0x01 set = use original solid.f // sun/moon position bit 0x02 set = calculate mean tides by restoring // permament earth tide deformations. // OH - toggle erasing of Lat/Lon/Alt survery plot every hour //--- OI # - set signal level display type // OJ # - toggle logging of serial port data stream // OK - toggle logging of TSIP message faults as time skips // OL - toggle live FFT / Histogram mode // OM # - set plot magnification factor // ON - toggle real-time update of trend line plot title // OP - toggle plot scaling mode to peak value seen // OQ - toggle plot queue sampling fast / slow mode //--- OR - reset ADEV bins and recalculate ADEVs // OS # - toggle temperature spike filter mode // OT - toggle alarm/dump/exit time triggers to be based upon local time // (default) or displayed time which can be in one of the // astronomical time scales. Previous versions used OT to toggle // 12/24 hour clock mode which is now available from the T menu. //--- OU # - set daylight savings time area number (0 .. 5) // OV # - toggle ADEV base value mode //--- OW # - select analog watch face type (0 .. 5) // OX # - set trend line rate display time scale (0=units per day, 1=per hour, 2=per minute, 3=per second) //--- OY # - set tempurature-dac plot (G3 plot) scale factor // OZ # - toggle plot cursor time reference between start of capture // and start displayed data [hms] You can also force the time // to be in seconds by setting the OZ value to 2 for or // to 3 for [seconds] // // // // // This program requires the following operating system dependent routines: // // init_hardware() - put screen in a high res graphics mode or open a // graphics window and open the com port (9600,8,N,1) // // dot(x,y, color) - draw a colored dot // // get_pixel(x,y) - read a pixel from the screen // // kill_screen() - close graphics screen or window // // sendout() - send byte 'c' to the serial port // // SERIAL_DATA_AVAILABLE() - a routine or macro that returns true if // there is serial port data available // // get_serial_char() - get a character from the serial port. You should check // SERIAL_DATA_AVAILABLE() befor calling this. // // kill_com() - close down serial port // // SetDtrLine(state) - used for PWM fan control for temerature control PID // SetRtsLine(state) - used for PWM fan control for temerature control PID // SetBreak(state) - used to wake up Nortel GPSDO's by sending a BREAK condition // // KBHIT() - a routine or macro that returns true if a keyboard key has // been pressed // // GETCH() - a routine or macro that returns the keyboard character // // refresh_page() - copy any virtual screen buffer to the screen // or flip pages if doing screen buffering. Can be // a null routine if writing directly to the screen. // // BEEP() - sound a beep if beep_on is set // // // set_cpu_clock() - has OS dependent code for setting the system time // // GetMsecs() - returns a double precision count of milliseconds. Can // be since program started, os boot, or any base time // reference (used to do pwm control of the heat/cool cycle // if doing precise temp control and checking for loss of // serial port communications. Also sets wall_time variable // to system clock time with high resolution. // // GetNsecs() - return high resolution timer count in nanoseconds. // // Also the get_mouse_info() routine will need to be updated to handle // the system mouse. You need to get the current mouse coordinates into // variables mouse_x and mouse_y and the button state into this_button. // // play_tune() - play a sound file asynchronously (non-blocking) // // Also, you can improve performance with operating system dependent // line and circle drawing and area erasing functions. // // To see where you might need to add support for a new operating system // search the code for the strings: // WINDOWS (Windows related stuff) // __linux__ (Linux related stuff) // __MACH__ (macOS OS/X related stuff) // __FreeBSD__ (FreeBSD related stuff) // WIN_VFX (Windows video/keyboard/mouse stuff) // USE_X11 (X11 video/keyboard/mouse stuff for Linux and OS/X) // // If adding a new receiver type search for NEW_RCVR. This flags routine // that will almost certainly need to be updated for the new receiver type. // (there are also lots of other places that will probably need updating) // // // Note: stupid DOS linker does not allow initialized variables to be declared // in more than one file (even if defined as externs). Therefore any // variables that are used in more than one file are initialized // to non-zero values in the routine set_defaults(); // //