Archive
Archive for the ‘ham radio’ Category
Key ham radio transceiver from command line
October 3, 2009
2 comments
Related to the hamfax project, i have been asked how to key a ham radio transmitter that is connected to the serial port. So far this is fairly untested, i only put together what i think would solve the problem. Please use this as input for your own solutions if it helps you. If something is wrong, i would appreciate corrections.
Basically, this is just a simple program to make use of the circuit at http://www.baycom.org/~tom/pcf/ptt_circ/ptt.html#serial
C program serial_rts_set.c
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <unistd.h>
#include <termios.h>
/*
Usage: serial_rts_set device_file sleep/seconds
e.g. serial_rts_set /dev/ttyS0 10000
*/
int main(int argc, char** argv)
{
char* devfile;
int fd;
int rc;
int status;
unsigned int seconds;
if(argc<3) {
puts("Not enough arguments.\n\n"
"Usage: serial_rts_set devicefile timeout\n"
"devicefile Device file for serial port, e.g. /dev/ttyS0\n"
"timeout Timeout in seconds\n");
exit(1);
}
devfile = argv[1];
seconds = 0;
sscanf(argv[2], "%d", &seconds);
fd = open(devfile, O_RDWR);
if(fd == -1) {
perror("Could not open device file: ");
exit(1);
}
rc = ioctl(fd, TIOCMGET,&status);
if(rc == -1) {
perror("Error during TIOCMGET: ");
exit(1);
}
/* Set the RTS bit to raise the RTS line */
status|=TIOCM_RTS;
/* The reverse operation would be status&=~TIOCM_RTS; */
rc = ioctl(fd, TIOCMSET, &status);
if(rc == -1) {
perror("Error during TIOCMSET: ");
exit(1);
}
sleep(seconds);
}
Compile and use it with:
gcc -o serial_rts_set serial_rts_set.c
Test with
./serial_rts_set /dev/ttyS0 5
to set the RTS line for 5 seconds.
Running from a shell script
#!/bin/sh
# Start the RTS set program in the background and remember
# its process id (PID) for stopping it later. $! is the PID of the
# most recently executed background command.
#
# The time passed to sleep_rts_set has to be longer than the time
# that is actually used for keying the transmitter.
serial_rts_set /dev/ttyS0 20 &
RTS_PID=$!
# Do whatever is necessary while the transmitter is keyed
sleep 10
# Stop the transmit by stopping the RTS set program
kill $RTS_PID
References and more information
- Serial Programming Guide for POSIX Operating Systems
- Serial Programming HOWTO
- For more info see the termios manpage.
- For more sophisticated remote control of transceivers see the hamlib project.
Categories: ham radio, Linux
ham radio, Linux, serial port
