Thanks Giorgos!

I needed to know the function used to access the Serial ports under FreeBSD.

Your program compiles, but generates the following error msg when run:


test_prog: ioctl: Inappropriate ioctl for device

Thanks to the ioctl 'tip', I researched around, and found that the serial
port needed opening, so this is the finished code (just in case someone else
needs it):


    #include <sys/ioctl.h>
    #include <errno.h>
    #include <fcntl.h>
    #include <termios.h> /*Originally it was termio.h*/
    #include <stdio.h>
    #include <unistd.h>

    int
    main(void)
    {
            int bits;
            int last;
            int dcf_dev;

            if((dcf_dev = open("/dev/cuaa1", O_RDWR|O_NOCTTY)) < 0)
            {
                perror("open /dev/cuaa0");
                return (-1);
            }


            if (ioctl(dcf_dev, TIOCMGET, &bits) == -1)
                    err(1, "ioctl");
            last = bits & TIOCM_CTS;
            printf("CTS %s.\n", last ? "on" : "off");

            while (1) {
                    if (ioctl(dcf_dev, TIOCMGET, &bits) == -1)
                            err(1, "ioctl");
                    if ((last ^ (bits & TIOCM_CTS)) != 0) {
                            last = bits & TIOCM_CTS;
                            printf("CTS %s.\n", last ? "on" : "off");
                    }
                    usleep(100000);
            }

            return (0);
    }

Brilliant!!  :-)

Thanks for that!

Cheers,

Paul Hamilton

-----Original Message-----
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED]]On Behalf Of Giorgos
Keramidas
Sent: Wednesday, 15 January 2003 7:21 PM
To: Paul Hamilton
Cc: [EMAIL PROTECTED]
Subject: Re: How do I monitor the serial CTS line via C
programmatically?


On 2003-01-15 18:26, [EMAIL PROTECTED] (Paul Hamilton) wrote:
> I have been trying to monitor the serial CTS line.  I would like to
> log the fact that the CTS has changed state (active/non-active).
>
> I have been trying to adapt some Linux programs, but am having
> problems with adapting the POSIX TIOCMGET function.
>
> Is there a FreeBSD way?

You'd have to poll using ioctl(fd, TIOCMGET, &int) and detect CTS
changes by checking the TIOCM_CTS bit in the returned value.  The
following (untested) sample program should be easy to adapt to your
needs.  When TIOCM_CTS changes from on to off or vice versa, the
program should print the change.

    #include <sys/ioctl.h>

    #include <stdio.h>
    #include <unistd.h>

    int
    main(void)
    {
            int bits;
            int last;

            if (ioctl(0, TIOCMGET, &bits) == -1)
                    err(1, "ioctl");
            last = bits & TIOCM_CTS;
            printf("CTS %s.\n", last ? "on" : "off");

            while (1) {
                    if (ioctl(0, TIOCMGET, &bits) == -1)
                            err(1, "ioctl");
                    if ((last ^ (bits & TIOCM_CTS)) != 0) {
                            last = bits & TIOCM_CTS;
                            printf("CTS %s.\n", last ? "on" : "off");
                    }
                    usleep(100000);
            }

            return (0);
    }


To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-questions" in the body of the message




To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-questions" in the body of the message

Reply via email to