This can be found here: doc/user_manual.org
This is the attempt to make a console based logging application for Ham Radio contacts. It is meant to be simple and fast to use, but additional useful features may be added in the future. There are two parts:
- The Ham library, providing functions for creating and modifying contact lists.
- The hamlog user facing application.
The two parts are separate, and most of the actual functionality is kept in the library, so other applications using the library can easily be built without having to replicate the functionalities that have nothing to do with user interfaces.
This is not really mature, but it is being used by some on a daily basis.
Get GHC and Cabal using e.g. https://www.haskell.org/ghcup/. Run
cabal configure
cabal build
This should technically build on any system that supports all the needed libraries, which probably include macOS and Windows along with Linux. This has only been tried on Linux and macOS.
The HamLog monad is meant as an easy to use back end to manipulate log lists. A usage example would be:
runHamLog defaultConfig emptyLogState $ do
readLog
q <- newQsoNow
updateQso 0 $ q { _qsoFreqency = MHz 146.52,
_qsoNotes = "Nice contact!" }
writeLog
Note that some things in this library are subject to change still. See the source for details.
There is a CAT (computer aided transceiver) interface included. Currently, the Yaesu FT-891 and the Elecraft K3/KX2/KX3 are supported.
Basically, the steps you need to do to support a new radio are simple: See the module Ham.CAT.SerialCAT; you need to add a set of functions in a SerialCAT structure. Check out the ones in Ham.CAT.YaesuFT891 and Ham.CAT.ElecraftKX2 for examples. It is currently assumed that the radio is connected using a serial interface, e.g. via USB. Note this interface may change in the future. Steps for adding a radio:
- Add a SerialCAT interface and put it in a module in Ham.CAT, just like the existing radios.
- Add a constructor for the new radio in Ham.CAT.Radios.Radio.
- Add the SerialCAT interface to serialInterface in Ham.CAT.Radios.
Each of these steps is really not much to do, the most work is probably the first one.
The terminal UI supports reading the frequency and the current communications mode when creating a new contact. This functionality can be accessed in the `HamLog` monad also via the `cat` action.
- Note taken on [2020-09-05 Sat 13:22]
Works for hamlog.config. Need to add some error reporting if something fails. Need to add support for versioning the log file.
Update the UTC time with e.g. CTRL-T.
This would help to find duplicates. Until then, use everything, including date/time, to find actual duplicates, minus the one we are searching for.
- Note taken on [2020-09-06 Sun 23:06]
Mitigation implemented. Not very pretty, but at least it happens only once per session at maximum. - Note taken on [2020-09-06 Sun 14:06]
closeSerial blocks after writing / reading when the serial device exists but is not connected. There is no immediate way to get around that. Mitigation: add error reporting to CAT and after first failure, turn CAT off and let the user know.
Add error checks! This happens when the serial port is configured to the wrong file node.
- Note taken on [2018-07-28 Sat 23:06]
This is simply possible by keeping log files in separate directories, along with configurations.
It messes up the UI if there are many messages.
- Note taken on [2020-09-05 Sat 13:21]
Works so far SerialCAT implemented for FT891 and KX2/K3/KX3 - Note taken on [2020-08-15 Sat 23:01] Support for Yaesu FT891 works, everything compiled in so far.
Currently it’s compiled in.
Currently that is done in the Brick UI.
Remove leading and trailing whitespaces, possibly toUpper, etc.
Add instance for Contest typeclass.
- Note taken on [2020-07-07 Tue 00:21]
More or less done.
- Note taken on [2020-06-30 Tue 23:03]
Done.
- Note taken on [2020-06-30 Tue 23:00]
Sort of works.
- Note taken on [2018-07-28 Sat 23:05]
Default values have been added to the config structure. See QsoDefaults. FixedValue means the UI does not display the value, DefaultValue means the UI displays it but pre-populates with the given value in the config file. This way the application can be configured to work better in contests.