Git Product home page Git Product logo

flyby's People

Contributors

bjorgan avatar bostrt avatar kvamtroe avatar nickoe avatar oyvkar avatar ryeng avatar thenorthcore avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

flyby's Issues

Use getopt to parse command line options

Replace the current command line option parsing with getopt and provide long names for options. A review of all command line options should be conducted as part of this work.

It should be possible to specify options both as command line options and config file options. Coordinate work on this with #1.

Remove imperial units in singletrack

No need to have both imperial and metric units. Could consider to have option to use either units.

Imperial units were already removed from multitrack earlier.

(Reported by VK5DG)

rotctld/rigctld feedback

Flyby displays some cues that rotctld is enabled and working, but doesn't display much about rigctld. This is also related to #16. Should give more feedback.

Use libpredict for orbit calculations

The orbit calculation algorithms have been moved into libpredict (https://github.com/la1k/libpredict). Flyby should use the library instead of its own algorithms.

Until libpredict adds support for a TLE database, predict should use its own. Even after libpredict adds support, it might be useful to have a separate flyby TLE file.

Transponder schedule

Transponder schedule was never implemented in Predict, and subsequently not in Flyby. The only indication that this was supposed to be implemented is that you always have to enter "No weekly schedule\nNo orbital schedule\n" in each transponder entry of the transponder database, and that these are read into "unsigned char dayofweek" and "int phase_start, int phase_end". The values are never used.

Some satellites have transponders that are turned on only at specific times or days. Does it make sense to try to implement this? Is it useful? How should it be displayed? How should it be used?

I've removed the physical variables for now in the branch dealing with issue #17 (though the fields are still required to be present in the files, at least for now). The complexity of the scheduling probably requires something more than the initial implementation indicated in Predict (more than just an unsigned char describing the day).

Hamlib communication

Should de-globalize the socket and VFO variables and rewrite the hamlib interface into structs and nicer functions.

More advanced filtering options in EditWhitelist()

Add more filtering options to satellites displayed in EditWhitelist().

  • Filename filtering (show satellites from 'weather.txt', ...)
  • Filter satellites with defined transponders
  • Filter on satellite number

Broken configuration

Configuration is broken. Config defaults are not copied to /etc/flyby, config defaults are subsequently not copied to ~/.flyby/, and flyby silently exits after prompting the user for QTH coordinates (and the paths also miss a '/', so that the paths are /etc/flybyflyby.tle instead of /etc/flyby/flyby.tle).

User receives no warning if those files are missing. Master branch also has some memory violations which makes flyby segfault if flyby proceeds without tle-database (fixed in libpredict-branch). Not sure if we should just fix install rules in CMakeLists.txt for the configuration files, or if we also should add warnings in flyby and/or let user proceed without .tle- or .db-file, or whether we should just fix this for the more proper configuration fix in issue #1.

MultiTrack() view as main menu

@ryeng suggested that the current main menu is exchanged by a main menu based on MultiTrack().

One solution is to apply the menu stuff in Select() to MainMenu(). The menu itself would then probably have to be something shown to the left of the satellite listing, not sure how dynamic the menu items can be, or whether we would be able to preserve the color coding.

Should it still sort the orbits based on their AOS/LOS times? Should the cursor follow the orbit as it is sorted, or should the cursor stay in one place? How should the various menu options be presented to the user? One solution is to clutter up the UI with keybinding hints, or we could display more options after the user has pressed 'enter' on one satellite.

UTC clock in multitrack view

UTC clock is present in singletrack, but not in multitrack view. Useful for time comparisons, as flyby uses UTC for all predicted times.

(Reported by VK5DG)

Segfault on start in whitelist_from_file()

(gdb) bt
#0  0x00007ffff6f008f4 in fclose@@GLIBC_2.2.5 () from /usr/lib/libc.so.6
#1  0x000000000040f938 in whitelist_from_file ()
#2  0x000000000040fa72 in whitelist_from_search_paths ()
#3  0x00000000004063fb in main ()
(gdb) 

Stesps to reproduce, build 4cae199, start flyby.

Remove size limit from TLE database

TLE database is currently limited to 250 satellites. Remove this limit. (And adjust transponder database size accordingly)

  • Make sure all writing to the TLE database goes through the API functions (it should, but might be some remnants left)
  • Make sure access to transponder database does not assume anything about a pre-defined size
  • Take in TLE database in the transponder database creation function and use corresponding number of entries
  • Resize dynamically in add-function
  • Ensure creation function is used for all instances of tle_db
  • Ensure destroy function is used for all instances of tle_db
  • Remove MAX_NUM_SATS variable

Rewrite transponder_db_from_file()

Legacy code from Predict. ~~~Uncovered weird errors in connection with #49, which probably have to do with very specific numbers of characters used in extracting lines. Symptoms are that some of the transponder entries are not properly read.~~~ Turns out the problem was elsewhere, but will still rewrite for clarity reasons since it was difficult to debug.

Settings variables -> struct

Settings variables are numerous (file paths, latitude/longitude convention, whether databases are loaded, ...) and all global. Making them local will clutter up the function arguments (see libpredict-branch). Collecting them in a struct should simplify matters.

Intuitive use of rigctld/rotctld

Currently have to specify e.g. --rotctld-host=[HOST] in order to enable connection to rotctld (and rigctld).

Additional possibilities (in addition to current CLI options):

  • Detect availability of rotctld/rigctld automatically (and add possibility for disabling entirely)
  • Add configuration files
  • In-program configuration

Do an assessment on whether any of the above makes this more inconvenient and cumbersome or not.

rigctld autodetection will be problematic, won't know what to choose for uplink and downlink, but might be good to rethink this a bit.

Update manpage

Update manpage in docs/man/.

  • Basic manpage covering all tools and command line options.
  • Remove incorrect information in the manpage
  • Consider whether the remaining information is useful or not, reduce to bare minimum
  • Convert blogpost about flyby on http://la1k.no to markdown, update any changes since it was written
  • (automate the screenshotting?)
  • Reorganize README, no need to mention paths for TLEs and transponder database before the easy way to obtain these files
  • Dependencies in README

More advanced transponder database fetching options

#49 will give a basic implementation of transponder database fetching, but will overwrite the user's existing database by writing directly to the assumed DB path. It should rather merge, compare entries, give option to force overwriting, ensure that everything is written to the directory as defined internally in flyby, give option for trying to write to system-wide directory, etc.

This can be done by implementing extra command line options similar to flyby's --update-tle-db, to be applied to a fetched database file saved to a temporary file.

Will probably be more complex, add additional transponder database CLI utility.

  • Switch from uplink etc arrays to transponder structs
  • Take transponder database file(s) as input, write to database structure
  • Merge with existing database, wait for user response if there is a difference for an entry
  • Print differences
  • Option for forcing (ignore differences)
  • Option for silent mode
  • Use in fetch_satnogs_db.py
  • Convert scripts to .in and include in cmake process, process executable name as cmake variable
  • Find better name for transponder utility

Segfault with empty transponder db

Steps to reproduce

  1. Start flyby
  2. Enter the transponder database view, hit the e key
  3. Hit the q key

Expected result

Return to the main menu

Actual result

Segfault

Tested against bb32ab9. I only set the ground station information and have not added any TLE or anything else, from a clean install.

Backtrace

#0 0x000000000040d5b9 in DisplayTransponderEntry ()
#1 0x000000000040dbb3 in EditTransponderDatabase ()
#2 0x000000000040e0ed in RunFlybyUI ()
#3 0x000000000040596a in main ()

Get transponder data from SatNOGS database

The DIY open ground station network SatNOGS has a database module that contains transponder-information that can be found here.

The transponder database is based on user-inputs and contains uplink and downlink information in a reasonable format. It also indicates if the satellite is alive or not.

The database has an API which can be found here.

Flyby should ship with a tool similar to update-tle that fetches data from db.satnogs.org to generate a transponder database.

Error in doppler shift

Actually not an error yet, but will be.

The doppler shift obtained from libpredict has wrong sign. Flyby switches the sign around, so that the frequency displayed and used in flyby still is correct, but once la1k/libpredict#64 is solved, this will be wrong. :-)

Update interval for rotctld

From flyby.c:5200:

5200                         /* Send data to rotctld, either when it changes, or at a given interval
5201        * (as specified by the user). TODO: Implement this, currently fixed at
5202        * once per second. */

Show max elevation angle in multitrack.

A common way to estimate the quality of a satellite pass is by the maximum elevation angle.
For a LEO satellite the path loss is the lowest when the satellite passes over zenith (90 deg), the distance between ground station and satellite typically varies between 2000 to 4000 km at 0 degree elevation and 300 to 600 km (orbit height) at 90 degree. At zenith it is also likely to be the least obstructed by vegetation and buildings.

Getting data from satellites is much easier with a "good pass", ie. high elevation angles (30-90 degrees), than with a "bad pass" (5-10 degrees).

For this reason the maximum elevation of a pass should be displayed in multitrack.

Remove server functionality

The predict network server functionality belongs in a separate predict daemon, not in the client application. This will also remove the pthread dependency.

Choosing satellites to work with

If we end up with a system-wide TLE database (issue #1), or add support for multiple TLE files, or even now when the single TLE file becomes large and cumbersome to edit, it might be nice to be able to mark in a checklist which TLEs we want to display in MultiView() and be able to track in SingleTrack() and Predict().

E.g.

[ ] AAUSAT
[X] NOAA-15
[ ] NOAA-17

, in a separate view. Will require a new config file, however. A blacklist over TLEs not to display, where the default option is to not have the file at all, and thus show all satellites.

Can be implemented in practice by having the full list of TLE-strings available within the program, and let the array over predict_orbit_t be restricted to TLEs not contained within the blacklist.

Search functionality might be nice. Might also be nice to have the option to sort the checklist into the files they come from and deselect entire TLE-files.

Internal search field consistency

Steps involved for using search field in multitrack view ('/') is different from steps involved for filtering in whitelisting (CAPITAL LETTERS). This could be confusing.

Edit transponder database

The transponder database file (flyby.db) is horrible to edit or add new entries to. An edit utility would be nice. It probably also has a lot of secret, undocumented features.

Rename/move files

flyby_-prefix on files are redundant. Can also move the .h- and .c-files to subdirectories in order to avoid cluttering up the root dir.

Automatic tests

Should add automatic tests, in order to avoid later idiot mistakes in the more fundamental parts of the program.

At the very least:

  • Check behavior of database functions/config functions when no database files/config files are defined
  • Test correct behavior for TLE database handling functions (merge, add, overwrite)
  • Test xdg basedir functions, against expected output (when defining XDG_DATA_HOME, when XDG_DATA_HOME is empty, ...)
  • Test hamlib interface? Can create a socket and check for expected commands.

Should also consider whether to test some of the underlying handling functions for the UI elements that operate on the internal data structures, check corner cases and expected outcomes: filtered menu (for whitelist editing), transponder editor, search functionality in multitrack...

Correctness of the numerical satellite tracking results are already handled in libpredict.

Secret features in single track mode (T)

We have some secret, undocumented features which would be nice to make more intuitive from the user interface by displaying hints.

List of implemented features (scrutinized from the code in SingleTrack()):

  • Key left/key right or +/- key switches the tracked satellite
  • Space switches between the transponders
  • Key down (or <)/key up (or >) shifts the uplink and downlink frequencies by 1 kHz steps between defined start and end frequencies
  • ,/. does the same as above, but in 100 Hz steps
  • d/D and u/U turns on/off downlink/uplink updates to rigctld (f turns on both)
  • F/f forces a read of the downlink and uplink frequencies from rigctl (overwrites corresponding variables)
  • f turns on downlink and uplink updates to rigctld
  • m/M turns on/off automatic frequency reading from rigctl. Frequencies are read from rigctld, inversely rectified against doppler shift and set to canonical downlink and uplink frequencies. Similar to F above, but does this continuously.
  • x reverses VFO of downlink/uplink
  • Q/q/ESC escapes single track mode

Other views are either intuitive or do not have secret keys.

Pass quality data in single track.

A common way to estimate the quality of a satellite pass is by the maximum elevation angle.
For a LEO satellite the path loss is the lowest when the satellite passes over zenith (90 deg), the distance between ground station and satellite typically varies between 2000 to 4000 km at 0 degree elevation and 300 to 600 km (orbit height) at 90 degree. At zenith it is also likely to be the least obstructed by vegetation and buildings.

It would be nice to see the maximum elevation and the angle and time at which it occurs in single track mode. It would also be nice to see when and at what angle AOS and LOS occur.

azel_info

Config file placement and config defaults

Flyby should search for config files (flyby.qth, flyby.tle and flyby.db) in a defined order and provide sensible defaults if no config file is found. Maybe following the XDG Base Directory Specification (http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html) is a good idea.

It should be possible for the system administrator to provide a default for users that don't have their own config files, e.g. in /etc/flyby.qth. System satellite TLE and frequency databases would also be easier to keep up-to-date than files spread out in users' home directories.

The current approach, copying files from a known location if no config files are found, is not a good solution for providing defaults. Flyby should be able to start without any config files or templates in known locations.

I guess flyby.qth is a config file, but are flyby.tle and flyby.db data files or config files according to the XDG?

Should the TLE list be the union of all TLE files in the search paths, or should flyby use the first file found? What about the frequency database? If a union of all files is used and there's a file in /etc/flyby/, the user can't remove orbit parameters/frequencies listed in that file by having a different database in $HOME/.flyby/. Maybe $XDG_CONFIG_DIRS is a good enough solution to that problem.

Should there be an /etc/flyby.tle.d/ directory with several files? That would make it easier to organize satellites into groups (e.g., amateur.tle, weather.tle, etc.), or to add satellites during a launch.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.