[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
RE: [linrad] Frequency control
Hi, Leif!
I have a question about this:
> It would be trivial to replace this routine by something else
> that could use any hardware port that one can get permission
> to write to under Linux. If you know Linux well enough to use
> the drive routines for serial or parallel ports you can make
> a far more clever solution than the onew I have put into Linrad now.
I wrote a short routine to write to the serial port and put it in
hwaredriver.c
Will it get executed repeatedly at some interval?
Should I put my open and close statements for the port in hwaredriver.c
as I did, or elsewhere?
How can I get the Hertz and decimal fractions of a Hertz value that
Linrad displays as the received frequency so that I can send it (with
appropriate prefix in MHZ and tenths of MHz) to the transceiver?
What keeps the frequency from jumping around when I am transmitting and
Linrad sees the transmitter frequency if I have AFC on? There must be
be a way to lock the frequency in place. I guess what I really want is
just the frequency I clicked on in the high resolution window; I don't
want to play tag with the other station. How to I grab that number for
my routine?
My routine is very simple ( and doesn't work, although it compiles
without errors):
/*added to your included*?
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <termios.h>
/* text below put at the end of the other statements in hwaredriver */
int
open_port(void)
{
int fd;
struct termios options;
int n;
fd=open("/dev/ttyS1",O_RDWR | O_NOCTTY | O_NDELAY);
if (fd == -1)
{
perror("open_port: Unable to open /dev/ttyS1 - ");
}
else
fcntl(fd,F_SETFL,0);
/* set up port parameters */
tcgetattr(fd,&options);
cfsetispeed(&options,B4800);
cfsetospeed(&options,B4800);
options.c_cflag |= (CLOCAL | CREAD);
/* No parity */
options.c_cflag &= ~PARENB;
options.c_cflag &= ~CSTOPB;
options.c_cflag &= ~CSIZE;
options.c_cflag |= CS8;
tcsetattr(fd, TCSANOW,&options);
n=write(fd,"SW01;\r",5);
if (n<0)
fputs ("write() of 4 bytes failed!\n", stderr);
close(fd);
return(fd);
}
/* that?s it. It should write "SW01;" to my Elecraft K2 and make the
band change, but it doesn't. So I am wondering if the routine gets run
where I have it ;)
Thanks in advance, Leif, and
73,
Roger Rehr
W3SZ FN20ah
2 Merrymount Road
Reading, PA 19609-1718
http://www.qsl.net/w3sz
LINRADDARNIL