kopia lustrzana https://github.com/Hamlib/Hamlib
219 wiersze
9.1 KiB
Plaintext
219 wiersze
9.1 KiB
Plaintext
The @dfn{Ham Radio Control Libraries}, @dfn{Hamlib} for short, is a
|
||
development effort to provide a consistent interface for programmers
|
||
wanting to incorporate radio control in their programs.
|
||
|
||
Hamlib is not a complete user application, rather, it is a software
|
||
layer intended to make controlling various radios and other shack
|
||
hardware much easier. Hamlib will allow authors of such software as
|
||
logging programs, digital communications programs, or those wanting to
|
||
develop the ultimate radio control software to concentrate on the user
|
||
interface and the basic function of the program rather than radio
|
||
control. Hamlib consists of several parts, the programming library,
|
||
utility programs, and library interfaces to other programming languages.
|
||
|
||
Most recent amateur radio transceivers allow external control of their
|
||
functions through a serial interface. Unfortunately, control commands
|
||
are not always consistent across a manufacturer's product line and each
|
||
manufacturer's product line differs greatly from its competitors.
|
||
|
||
Hamlib attempts to solve this problem by presenting a "virtual radio" to
|
||
the programmer by providing an interface to actions such as setting a
|
||
given VFO's frequency, setting the operating mode, querying the radio of
|
||
its current status and settings, and giving the application a list of a
|
||
given radio's capabilities. Unfortunately, what can be accomplished by
|
||
Hamlib is limited by the radios themselves and some offer very limited
|
||
capability.
|
||
|
||
Other devices, such as antenna rotors, can be placed into the Hamlib
|
||
control scheme. Other recent developments include network interface
|
||
servers and a USB interface capability. Language bindings are provided
|
||
for C, C++, Perl, Python, and TCL (more to come).
|
||
|
||
@menu
|
||
* Overview::
|
||
* The Hamlib project::
|
||
* Applications using Hamlib::
|
||
* Licensing implications::
|
||
* Radio cloning::
|
||
* Pronunciation::
|
||
@end menu
|
||
|
||
@node Overview
|
||
@section A view from the top of the tower
|
||
@cindex Overview
|
||
|
||
@cindex Front end library
|
||
@cindex Virtual radio
|
||
@cindex Virtual rotor
|
||
Hamlib is a @dfn{front end} library providing a @emph{C} language
|
||
Application Programming Interface @acronym{API} to programmers wishing
|
||
to integrate radio or rotor control in their applications. Hamlib
|
||
presents a @dfn{virtual radio} or @dfn{virtual rotor} that is a
|
||
consistent interface to an application despite wide differences in radio
|
||
and rotor interfaces and capabilities.
|
||
|
||
@cindex Back end library
|
||
The front end library uses a number of @dfn{back end} libraries to
|
||
translate from the front end to the various individual radio and
|
||
rotor models. A back end library handles conversion of the
|
||
front end variables to the format needed by the radio or rotor
|
||
device it controls. The back end libraries are generally grouped by
|
||
manufacturer and in some cases by a common control protocol.
|
||
|
||
@quotation
|
||
Since a picture is worth quite a few words, here is a visual representation
|
||
of Hamlib's design.
|
||
@ifhtml
|
||
@*@*
|
||
@end ifhtml
|
||
@float Figure, fig:img1
|
||
@image{Hamlib_design,,,Hamlib Design}
|
||
@caption{Hamlib design---@i{courtesy of Martin Ewing, AA6E}.}
|
||
@shortcaption{Hamlib design}
|
||
@end float
|
||
@*
|
||
@end quotation
|
||
|
||
@cindex Scripting languages
|
||
@cindex Languages, scripting
|
||
@cindex Interface, languages
|
||
Hamlib also provides an interface library for each of several common
|
||
@dfn{scripting} languages such as @url{http://www.perl.org, Perl, Perl},
|
||
@url{http://www.python.org, Python, Python}, and @url{http://www.tcl.tk,
|
||
TCL, TCL}. These language @dfn{bindings} are generated through the use
|
||
of @url{http://www.swig.org, SWIG, SWIG} a parser/generator for multiple
|
||
language interfaces to a C library. A native generated @emph{C++}
|
||
language interface is also provided.
|
||
|
||
@cindex Daemon, network
|
||
@cindex Network, daemon
|
||
Besides the C and supplemental APIs, Hamlib also provides a pair of
|
||
network daemons that provide a text command based API for controlling
|
||
an attached radio or rotor through a @emph{TCP/IP} network connection.
|
||
The daemons then handle the interface to the Hamlib C API.
|
||
|
||
More than one type of device, radio or rotor, may be controlled at a
|
||
time, however, there is generally a limit of one device per serial port
|
||
or other port.
|
||
|
||
@node The Hamlib project
|
||
@section Hamlib project information
|
||
@cindex Hamlib project
|
||
@cindex Project, Hamlib
|
||
|
||
The Hamlib Project was founded by Frank Singleton,VK3FCS/KM5WS in July
|
||
2000. Shortly after Stephane Fillod, F8CFE, joined Frank on the Hamlib
|
||
project and the API and implementation development led to a reasonable
|
||
level of maturity in a few years. A major milestone was reached when
|
||
Hamlib 1.2.0 was released in March 2004. The API and Application
|
||
Binary Interface (@acronym{ABI}) interfaces have remained stable since
|
||
that time up to the latest release of 1.2.15.3 in late 2012.
|
||
|
||
Development continues with a bump of the public version number to 3.0
|
||
(essentially simply dropping the ``1.'' of previous releases). While some
|
||
API tweaks are planned, ABI compatibility with the prior 1.2.@i{x}
|
||
releases remains a priority. Other goals include streamlining the
|
||
build system (done), improving the SWIG generated language bindings
|
||
(in progress), improving the overall documentation (this manual, in
|
||
progress), and other updates as warranted.
|
||
|
||
The Project is hosted by @url{https://sourceforge.net/,
|
||
SourceForge.net} at the @url{https://sourceforge.net/projects/hamlib/,
|
||
Hamlib project page} and the
|
||
@url{http://sourceforge.net/apps/mediawiki/hamlib/index.php, Hamlib
|
||
Wiki}.
|
||
|
||
Development discussion and most user support take place on the
|
||
@url{https://sourceforge.net/p/hamlib/mailman/, hamlib-developer mailing
|
||
list}. While there are
|
||
@url{https://sourceforge.net/p/hamlib/discussion/, SourceForge.net
|
||
discussion forums}, they are rarely used and not as closely read by the
|
||
developers as the mailing list.
|
||
|
||
For @dfn{source code management}, the project uses
|
||
@url{http://git-scm.com/, Git}, a fast, distributed content tracker.
|
||
Among its features is that every developer has the complete Hamlib
|
||
development history available locally. While a canonical Git
|
||
repository is hosted as SourceForge, its availability is not essential to
|
||
continued development, although development work flows would change
|
||
temporarily. For more information on using Git, @pxref{Working with
|
||
Git}.
|
||
|
||
@quotation Note
|
||
The SourceForge.net Web interface to the Hamlib Git repository is
|
||
currently broken (a ticket is pending) as of late February, 2013. A
|
||
mirror exists at @url{https://github.com/N0NB/hamlib, GitHub} which
|
||
supports browsing via the Web and other Git commands. Access of the
|
||
SF.net repository by other means (SSH or Git protocols) is unaffected
|
||
by this issue.
|
||
@end quotation
|
||
|
||
@node Applications using Hamlib
|
||
@section Applications using Hamlib
|
||
@cindex Hamlib applications
|
||
@cindex Applications, using Hamlib
|
||
|
||
A number of application developers have taken advantage of Hamlib's
|
||
capabilities to implement radio and/or rotor control. While not
|
||
exhaustive, a list is maintained at the Hamlib Wiki,
|
||
@url{https://sourceforge.net/apps/mediawiki/hamlib/,
|
||
Applications/Screenshots}. Developers are encouraged to request their
|
||
applications be added to the gallery by way of the hamlib-developer
|
||
mailing list.
|
||
|
||
@node Licensing implications
|
||
@section Using Hamlib with your program
|
||
@cindex Hamlib licensing
|
||
@cindex Licensing, Hamlib
|
||
|
||
As with other Free Software projects, Hamlib relies heavily on copyleft
|
||
licensing to encourage development contributions and provide an open
|
||
atmosphere for development. Hamlib's source code is released under two
|
||
licenses, the @acronym{LGPL} for the library portion, and the
|
||
@acronym{GPL} for the utility programs.
|
||
|
||
The LGPL allows the library to be used (linked) by programs regardless
|
||
of their individual license. However, any contributions to the library
|
||
source remain under copyleft which means that the library source code
|
||
may not be used in violation of the terms of the LGPL.
|
||
|
||
The utility program source files are released under the GPL. Any direct
|
||
use of these sources must be in a form that complies with the terms of
|
||
the GPL. Concepts learned by studying these sources for the purpose of
|
||
understanding the Hamlib API is not covered nor prohibited by the GPL,
|
||
however, directly copying GPL sources into any work that is incompatible
|
||
with the terms of the GPL is prohibited.
|
||
|
||
@xref{Copying and Redistribution}.
|
||
|
||
@node Radio cloning
|
||
@section Radios with a clone capability
|
||
@cindex Radio cloning
|
||
@cindex Cloning, radio
|
||
|
||
Hamlib's focus is on controlling rigs that employ a port and command
|
||
protocol for setting frequency, mode, VFO, PTT, etc. Most VHF/UHF
|
||
transceivers do not employ such control capability but do provide for
|
||
cloning the memory contents from radio to another of the same model. A
|
||
related project, @url{http://chirp.danplanet.com/, CHIRP}, aims to
|
||
support rigs with such a clone capability. Please contact the CHIRP
|
||
project for support of such rigs.
|
||
|
||
@node Pronunciation
|
||
@section Pronouncing Hamlib
|
||
@cindex Pronouncing Hamlib
|
||
@cindex Hamlib, pronouncing
|
||
|
||
English speakers seem to have two alternate pronunciations for our
|
||
project:
|
||
|
||
@itemize @bullet
|
||
@item Hamlib (Ham - lib, long "i", as in library.) IPA style: /'ham læb/
|
||
@item Hamlib (Ham - lib, short "i", as in liberty.) IPA style: /'ham lɪb/
|
||
@end itemize
|
||
|
||
Then again, we have people who say Linux "L-eye-nux" and those who say
|
||
"L-in-nux"...
|
||
|
||
If you're French, the above does not apply! :-)
|