lkml.org 
[lkml]   [2008]   [Feb]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Date
    Subject[PATCH] PPS: example program to enable PPS support on serial ports.
    Signed-off-by: Rodolfo Giometti <giometti@linux.it>
    ---
    Documentation/pps/Makefile | 2 +-
    Documentation/pps/ppsctl.c | 62 ++++++++++++++++++++++++++++++++++++++++++++
    2 files changed, 63 insertions(+), 1 deletions(-)
    create mode 100644 Documentation/pps/ppsctl.c

    diff --git a/Documentation/pps/Makefile b/Documentation/pps/Makefile
    index af4f9b4..8ef4f47 100644
    --- a/Documentation/pps/Makefile
    +++ b/Documentation/pps/Makefile
    @@ -1,4 +1,4 @@
    -TARGETS = ppstest
    +TARGETS = ppstest ppsctl

    CFLAGS += -Wall -O2 -D_GNU_SOURCE
    CFLAGS += -I .
    diff --git a/Documentation/pps/ppsctl.c b/Documentation/pps/ppsctl.c
    new file mode 100644
    index 0000000..83fd08a
    --- /dev/null
    +++ b/Documentation/pps/ppsctl.c
    @@ -0,0 +1,62 @@
    +#include <stdio.h>
    +#include <unistd.h>
    +#include <stdlib.h>
    +#include <errno.h>
    +#include <sys/ioctl.h>
    +#include <sys/types.h>
    +#include <sys/stat.h>
    +#include <fcntl.h>
    +#include <string.h>
    +#include <linux/serial.h>
    +
    +void usage(char *name)
    +{
    + fprintf(stderr, "usage: %s <ttyS> [enable|disable]\n", name);
    +
    + exit(EXIT_FAILURE);
    +}
    +
    +int main(int argc, char *argv[])
    +{
    + int fd;
    + int ret;
    + struct serial_struct ss;
    +
    + if (argc < 2)
    + usage(argv[0]);
    +
    + fd = open(argv[1], O_RDWR);
    + if (fd < 0) {
    + perror("open");
    + exit(EXIT_FAILURE);
    + }
    +
    + ret = ioctl(fd, TIOCGSERIAL, &ss);
    + if (ret < 0) {
    + perror("ioctl(TIOCGSERIAL)");
    + exit(EXIT_FAILURE);
    + }
    +
    + if (argc < 3) { /* just read PPS status */
    + printf("PPS is %sabled\n",
    + ss.flags & ASYNC_HARDPPS_CD ? "en" : "dis");
    + exit(EXIT_SUCCESS);
    + }
    +
    + if (argv[2][0] == 'e' || argv[2][0] == '1')
    + ss.flags |= ASYNC_HARDPPS_CD;
    + else if (argv[2][0] == 'd' || argv[2][0] == '0')
    + ss.flags &= ~ASYNC_HARDPPS_CD;
    + else {
    + fprintf(stderr, "invalid state argument \"%s\"\n", argv[2]);
    + exit(EXIT_FAILURE);
    + }
    +
    + ret = ioctl(fd, TIOCSSERIAL, &ss);
    + if (ret < 0) {
    + perror("ioctl(TIOCSSERIAL)");
    + exit(EXIT_FAILURE);
    + }
    +
    + return 0;
    +}
    --
    1.5.2.5


    \
     
     \ /
      Last update: 2008-02-19 00:29    [W:0.025 / U:1.572 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site