Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
AMPCTLD(1)		       Hamlib Utilities			    AMPCTLD(1)

NAME
       ampctld - TCP amplifier control daemon

SYNOPSIS
       ampctld [-hlLuV]	[-m id]	[-r device] [-s	baud] [-T IPADDR] [-t number]
	       [-C parm=val] [-v[-Z]]

DESCRIPTION
       The  ampctld program is an amplifier control daemon that	handles	client
       requests	via TCP	sockets.  This allows multiple user programs to	 share
       one  amplifier  (this needs more	development).  Multiple	amplifiers can
       be controlled on	 different  TCP	 ports	by  use	 of  multiple  ampctld
       processes.   Note  that	multiple processes/ports are also necessary if
       some clients use	extended responses  and/or  vfo	 mode.	 So  up	 to  4
       processes/ports	may  be	 needed	 for  each combination of extended re-
       sponse/vfo mode.	 The syntax of the commands are	the same as ampctl(1).
       It is hoped that	ampctld	will be	especially useful for  client  authors
       using languages such as Perl, Python, PHP, and others.

       ampctld	communicates  to a client through a TCP	socket using text com-
       mands shared with ampctl.  The protocol is simple, commands are sent to
       ampctld on one line and ampctld responds	to get commands	with  the  re-
       quested	values,	 one per line, when successful,	otherwise, it responds
       with one	line "RPRT x", where `x' is a negative number  indicating  the
       error  code.   Commands that do not return values respond with the line
       "RPRT x", where `x' is `0' when successful,  otherwise  is  a  regative
       number  indicating the error code.  Each	line is	terminated with	a new-
       line `\n' character.  This protocol is primarily	for use	by the NET am-
       pctl (amplifier model 2)	backend.

       A separate Extended Response Protocol extends  the  above  behavior  by
       echoing the received command string as a	header,	any returned values as
       a  key:	value  pair,  and  the	"RPRT x" string	as the end of response
       marker which includes the Hamlib	success	or  failure  value.   See  the
       PROTOCOL	section	for details.  Consider using this protocol for clients
       that will interact with ampctld directly	through	a TCP socket.

       Keep  in	mind that Hamlib is BETA level software.  While	a lot of back-
       end libraries lack complete amplifier support, the basic	functions  are
       usually well supported.

       Please  report bugs and provide feedback	at the e-mail address given in
       the BUGS	section	below.	Patches	and code enhancements sent to the same
       address are welcome.

OPTIONS
       This program follows the	usual GNU command line syntax.	Short  options
       that take an argument may have the value	follow immediately or be sepa-
       rated  by a space.  Long	options	starting with two dashes (`-') require
       an `=' between the option and any argument.

       Here is a summary of the	supported options:

       -m, --model=id
	      Select amplifier model number.

	      See model	list (use "ampctl -l").

	      Note: ampctl (or third party software using the C	API) will  use
	      amplifier	model 2	for NET	ampctl (communicating with ampctld).

       -r, --amp-file=device
	      Use  device as the file name of the port connected to the	ampli-
	      fier.

	      Often a serial port, but could be	a USB to serial	adapter.  Typ-
	      ically /dev/ttyS0,  /dev/ttyS1,  /dev/ttyUSB0,  etc.  on	Linux,
	      COM1,  COM2,  etc.  on MS	Windows.  The BSD flavors and Mac OS/X
	      have their own designations.  See	your system's documentation.

       -s, --serial-speed=baud
	      Set serial speed to baud rate.

	      Uses maximum serial speed	from  amplifier	 backend  capabilities
	      (set by -m above)	as the default.

       -t, --port=number
	      Use number as the	TCP listening port.

	      The default is 4531.

	      Note:  As	 rigctld's  default port is 4532 and rotctld's default
	      port is 4533, it is recommended to use DESCENDING	 odd  numbered
	      ports  for  multiple  ampctld  instances,	e.g. 4529, 4527, 4525,
	      etc.

       -T, --listen-addr=IPADDR
	      Use IPADDR as the	listening IP address.

	      The default is ANY.

       -L, --show-conf
	      List all config parameters for the  amplifier  defined  with  -m
	      above.

       -C, --set-conf=parm=val[,parm=val]
	      Set amplifier configuration parameter(s),	e.g.  stop_bits=2.

	      Use  the	-L option above	for a list of configuration parameters
	      for a given model	number.

       -u, --dump-caps
	      Dump capabilities	for the	amplifier defined with	-m  above  and
	      exit.

       -l, --list
	      List all amplifier model numbers defined in Hamlib and exit.

	      The list is sorted by model number.

	      Note:  In	 Linux	the  list  can	be  scrolled back using	Shift-
	      PageUp/Shift-PageDown, or	using the scrollbars of	a virtual ter-
	      minal in X or the	cmd window in  Windows.	  The  output  can  be
	      piped to more(1) or less(1), e.g.	"ampctl	-l | more".

       -v, --verbose
	      Set verbose mode,	cumulative (see	DIAGNOSTICS below).

       -Z, --debug-time-stamps
	      Enable time stamps for the debug messages.

	      Use  only	 in  combination with the -v option as it generates no
	      output on	its own.

       -h, --help
	      Show a summary of	these options and exit.

       -V, --version
	      Show version of ampctl and exit.

       Note: Some options may not be implemented by a given backend  and  will
       return  an error.  This is most likely to occur with the	--set-conf and
       --show-conf options.

       Please note that	the backend for	the amplifier to be controlled,	or the
       amplifier itself	may not	support	some commands.	In that	case, the  op-
       eration will fail with a	Hamlib error code.

COMMANDS
       Commands	can be sent over the TCP socket	either as a single char, or as
       a  long command name plus the value(s) space separated on one `\n' ter-
       minated line. See PROTOCOL.

       Since most of the Hamlib	operations have	a set and a get	method,	an up-
       per case	letter will be used for	set methods whereas the	 corresponding
       lower  case letter refers to the	get method.  Each operation also has a
       long name; prepend a backslash, `\', to send a long command name.

       Example (Perl): "print $socket "\\dump_caps\n";"	to see what the	ampli-
       fier's backend can do (Note: In Perl and	many  other  languages	a  `\'
       will  need  to  be escaped with a preceding `\' so that even though two
       backslash characters appear in the code,	only one will be passed	to am-
       pctld.  This is a possible bug, beware!).

       Note: The backend for the amplifier to be controlled, or	the  amplifier
       itself  may not support some commands. In that case, the	operation will
       fail with a Hamlib error	message.

       Here is a summary of the	supported commands (In the case	 of  set  com-
       mands  the quoted italicized string is replaced by the value in the de-
       scription.  In the case of get commands the quoted italicized string is
       the key name of the value returned.):

       F, set_freq 'Frequency'
	      Set 'Frequency', in Hz.

	      Frequency	may be a floating point	or integer value.

       f, get_freq
	      Get 'Frequency', in Hz.

	      Returns an integer value.

       l, get_level 'Level'
	      Get 'Level Value'.

	      Returns Level Value as a float or	integer	for  the  Level	 token
	      given.

	      Note:  Passing  a	`?' (query) as the first argument instead of a
	      Level token will return a	 space	separated  list	 of  amplifier
	      backend  supported  get level tokens.  Use this to determine the
	      supported	levels of a given amplifier backend.

       dump_state
	      Return certain state information about the amplifier backend.

       1, dump_caps
	      Not a real amplifier remote command, it just dumps capabilities,
	      i.e. what	the backend knows about	this model, and	 what  it  can
	      do.

	      TODO:  Ensure  this  is in a consistent format so	it can be read
	      into a hash, dictionary, etc.  Bug reports requested.

	      Note: This command will produce many lines of output so be  very
	      careful  if  using  a  fixed length array!  For example, running
	      this command against the Dummy backend results in	 a  number  of
	      lines of text output.

       _, get_info
	      Return information from the amplifier backend.

       R, reset	'Reset'
	      Perform amplifier	'Reset'.

	      Reset is an integer value: `0' = None, `1' = Memory reset, `2' =
	      Fault reset, `3' = Amplifier reset.

       set_powerstat 'Power Status'
	      Set 'Power Status'.

	      Power  Status  is	an integer value: `0' =	Power Off, `1' = Power
	      On, `2' =	Power Standby (enter standby),	`4'  =	Power  Operate
	      (leave standby).

       get_powerstat
	      Get 'Power Status' as in set_powerstat above.

PROTOCOL
       There are two protocols in use by ampctld, the Default Protocol and the
       Extended	Response Protocol.

       The  Default  Protocol  is intended primarily for the communication be-
       tween Hamlib library functions and ampctld ("NET	ampctl", available us-
       ing amplifier model `2').

       The Extended Response Protocol is intended to be	used with  scripts  or
       other programs interacting directly with	ampctld	as consistent feedback
       is provided.

   Default Protocol
       The  Default Protocol is	intentionally simple.  Commands	are entered on
       a single	line with any needed values.  In  practice,  reliable  results
       are  obtained by	terminating each command string	with a newline charac-
       ter, `\n'.

       Example set frequency and mode commands (Perl code (typed text shown in
       bold)):

	   print $socket "F 14250000\n";
	   print $socket "\\set_powerstat 1\n";	# escape leading '\'

       A one line response will	be sent	as a reply to set commands, "RPRT x\n"
       where x is the Hamlib error code	with `0'  indicating  success  of  the
       command.

       Responses  from ampctld get commands are	text values and	match the same
       tokens used in the set commands.	Each value  is	returned  on  its  own
       line.  On error the string "RPRT	x\n" is	returned where x is the	Hamlib
       error code.

       Example get frequency (Perl code):

	   print $socket "f\n";
	   "14250000\n"

       Most  get  functions return one to three	values.	A notable exception is
       the dump_caps command which returns many	lines of key:value pairs.

       This protocol is	primarily used by the "NET ampctl"  (ampctl  model  2)
       backend which allows applications already written for Hamlib's C	API to
       take  advantage	of  ampctld  without the need of rewriting application
       code.  An application's user can	select amplifier  model	 2  ("NET  am-
       pctl")  and  then set amp_pathname to "localhost:4531" or other network
       host:port (set by the -T/-t options, respectively, above).

   Extended Response Protocol
       The Extended Response protocol adds several rules to  the  strings  re-
       turned by ampctld and adds a rule for the command syntax.

       1. The command received by ampctld is echoed with its long command name
       followed	 by  the value(s) (if any) received from the client terminated
       by the specified	response separator as the  first  record  of  the  re-
       sponse.

       2.  The	last  record of	each block is the string "RPRT x\n" where x is
       the numeric return value	of the Hamlib backend function that was	called
       by the command.

       3. Any records consisting of data  values  returned  by	the  amplifier
       backend	are prepended by a string immediately followed by a colon then
       a space and then	the value terminated by	the response  separator.  e.g.
       "Frequency: 14250000\n" when the	command	was prepended by `+'.

       4. All commands received	will be	acknowledged by	ampctld
	with  records  from  rules  1 and 2.  Records from rule	3 are only re-
       turned when data	values must be returned	to the client.

       4. All commands received	will be	acknowledged by	ampctld	 with  records
       from  rules  1  and 2.  Records from rule 3 are only returned when data
       values must be returned to the client.

       An example response to a	set_frequency  command	sent  from  the	 shell
       prompt (note the	prepended `+'):

	   $ echo "+F 14250000"	| nc -w	1 localhost 4531
	   set_freq: 14250000
	   RPRT	0

       In this case the	long command name and values are returned on the first
       line  and  the second line contains the end of block marker and the nu-
       meric amplifier backend return value indicating success.

       An example response to a	get_freq query:

	   $ echo "+\get_freq" | nc -w 1 localhost 4531
	   get_freq:
	   Frequency(Hz): 14250000
	   RPRT	0

	      Note: The	`\' is still required for the long command  name  even
	      with the ERP character.

       In this case, as	no value is passed to ampctld, the first line consists
       only  of	 the long command name.	 The final line	shows that the command
       was processed successfully by the amplifier backend.

       Invoking	the Extended Response Protocol requires	prepending  a  command
       with a punctuation character.  As shown in the examples above, prepend-
       ing a `+' character to the command results in the responses being sepa-
       rated  by  a newline character (`\n').  Any other punctuation character
       recognized by the C ispunct() function except `\',  `?',	 or  `_'  will
       cause  that  character  to become the response separator	and the	entire
       response	will be	on one line.

       Separator character summary:

       `+'    Each record of the response is appended with a newline (`\n').

       `;', `|', or, `,'
	      Each record of the response is appended by the  given  character
	      resulting	in entire response on one line.

	      These  are  common record	separators for text representations of
	      spreadsheet data,	etc.

       `?'    Reserved for help	in ampctl.

       `_'    Reserved for get_info short command

       `#'    Reserved for comments when reading a command file	script.

	      Note: Other punctuation characters have not been tested!	Use at
	      your own risk.

       For example, invoking a get_freq	query with a leading `;' returns:

	   get_freq:;Frequency(Hz): 14250000;RPRT 0

       Or, using the pipe character `|'	returns:

	   get_freq:|Frequency(Hz): 14250000|RPRT 0

       And a set_freq command prepended	with a `|' returns:

	   set_freq: 14250000|RPRT 0

       Such a format will allow	reading	a response as a	single event  using  a
       preferred  response  separator.	 Other punctuation characters have not
       been tested!

DIAGNOSTICS
       The -v, --verbose option	allows different levels	of diagnostics	to  be
       output  to  stderr  and correspond to -v	for BUG, -vv for ERR, -vvv for
       WARN, -vvvv for VERBOSE,	or -vvvvv for TRACE.

       A given verbose level is	useful for providing needed debugging informa-
       tion to the email address below.	 For example, TRACE output  shows  all
       of  the	values	sent  to and received from the amplifier which is very
       useful for amplifier backend library development	and may	 be  requested
       by the developers.

EXAMPLES
       Start  ampctld  for  an Elecraft	KPA-1500 using a USB-to-serial adapter
       and backgrounding:

	   $ ampctld -m	201 -r /dev/ttyUSB1 &

       Start ampctld for an Elecraft KPA-1500 using COM2 on MS Windows:

	   $ ampctld -m	201 -r COM2

       Connect to the already running ampctld and set the frequency to	14.266
       MHz  with  a  1 second read timeout using the default protocol from the
       shell prompt:

	   $ echo "\set_freq 14266000" | nc -w 1 localhost 4531

       Connect to a running ampctld with ampctl	on the local host:

	   $ ampctl -m2

SECURITY
       No authentication whatsoever; DO	NOT leave this TCP port	open  wide  to
       the  Internet.	Please	ask if stronger	security is needed or consider
       using a Secure Shell (ssh(1)) tunnel.

       As ampctld does not need	any greater permissions	than ampctl, it	is ad-
       visable to not start ampctld as "root" or another system	 user  account
       in order	to limit any vulnerability.

BUGS
       The daemon is not detaching and backgrounding itself.

       No  method  to  exit  the daemon	so the kill(1) command must be used to
       terminate it.

       Multiple	clients	using the daemon may experience	 contention  with  the
       connected amplifier.

       Report bugs to:

	      Hamlib Developer mailing list
	      <hamlib-developer@lists.sourceforge.net>

COPYING
       This  file  is part of Hamlib, a	project	to develop a library that sim-
       plifies radio, rotator, and amplifier control functions for  developers
       of  software  primarily	of interest to radio amateurs and those	inter-
       ested in	radio communications.

       Copyright (C) 2000-2010 Stephane	Fillod
       Copyright (C) 2000-2018 the Hamlib Group	(various contributors)
       Copyright (C) 2011-2020 Nate Bargmann

       This is free software; see the file  COPYING  for  copying  conditions.
       There  is  NO  warranty;	 not even for MERCHANTABILITY or FITNESS FOR A
       PARTICULAR PURPOSE.

SEE ALSO
       kill(1),	ampctl(1), ssh(1), hamlib(7)

COLOPHON
       Links to	the Hamlib Wiki, Git repository, release archives,  and	 daily
       snapshot	archives are available via hamlib.org <http://www.hamlib.org>.

Hamlib				  2020-09-09			    AMPCTLD(1)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=ampctld&sektion=1&manpath=FreeBSD+Ports+14.3.quarterly>

home | help