~ubuntu-branches/ubuntu/saucy/joystick/saucy-proposed

« back to all changes in this revision

Viewing changes to utils/inputattach.c

  • Committer: Package Import Robot
  • Author(s): Stephen Kitt
  • Date: 2013-05-06 23:03:26 UTC
  • mfrom: (3.1.12 sid)
  • Revision ID: package-import@ubuntu.com-20130506230326-po18icz4mtaa25k1
Tags: 1:1.4.6-1
* New upstream release:
  - Disable CRTSCTS on ELO touchscreens. Closes: #699030. Thanks Thierry
    Bultel!
  - Handle long device names correctly. Closes: #706744. Thanks Ralf
    Jung!
* Drop hardening.patch, merged upstream.
* Standards-Version 3.9.4, no change required.
* Switch to my Debian address.

Show diffs side-by-side

added added

removed removed

Lines of Context:
89
89
        unsigned char d;
90
90
 
91
91
        for (i = 0; c[i]; i++) {
92
 
                write(fd, c + i, 1);
 
92
                if (write(fd, c + i, 1) != 1)
 
93
                        return -1;
93
94
                if (readchar(fd, &d, 1000))
94
95
                        return -1;
95
96
                if (c[i] != d)
100
101
 
101
102
static int magellan_init(int fd, unsigned long *id, unsigned long *extra)
102
103
{
103
 
        write(fd, "m3\rpBB\rz\r", 9);
 
104
        if (write(fd, "m3\rpBB\rz\r", 9) != 9)
 
105
                return -1;
104
106
        return 0;
105
107
}
106
108
 
150
152
        int i;
151
153
 
152
154
        for (i = 0; c[i]; i++)
153
 
                write(fd, c + i, 1);
154
 
        write(fd, "\r", 1);
 
155
                if (write(fd, c + i, 1) != 1)
 
156
                        return -1;
 
157
        if (write(fd, "\r", 1) != 1)
 
158
                return -1;
155
159
 
156
160
        i = spaceball_waitcmd(fd, toupper(c[0]), d);
157
161
 
532
536
                
533
537
}
534
538
 
 
539
#define EP_PROMPT_MODE  "B"     /* Prompt mode */
 
540
#define EP_ABSOLUTE     "F"     /* Absolute Mode */
 
541
#define EP_UPPER_ORIGIN "b"     /* Origin upper left */
 
542
#define EP_STREAM_MODE  "@"     /* Stream mode */
 
543
 
 
544
static int easypen_init(int fd, unsigned long *id, unsigned long *extra)
 
545
{
 
546
        char buf[256];
 
547
 
 
548
        /* reset */
 
549
        write(fd, 0, 1);
 
550
        usleep(400000);
 
551
 
 
552
        /* set prompt mode */
 
553
        if (write(fd, EP_PROMPT_MODE, 1) == -1)
 
554
                return -1;
 
555
 
 
556
        /* clear buffer */
 
557
        while (read(fd, buf, sizeof(buf)) == sizeof(buf));
 
558
 
 
559
        /* set options */
 
560
        if (write(fd, EP_ABSOLUTE EP_STREAM_MODE EP_UPPER_ORIGIN, 3) == -1)
 
561
                return -1;
 
562
 
 
563
        return 0;
 
564
}
 
565
 
535
566
static int dump_init(int fd, unsigned long *id, unsigned long *extra)
536
567
{
537
568
        unsigned char c, o = 0;
636
667
        B2400, CS8,
637
668
        SERIO_TWIDJOY,          0x00,   0x00,   0,      twiddler_init },
638
669
{ "--elotouch",         "-elo",         "ELO touchscreen, 10-byte mode",
639
 
        B9600, CS8 | CRTSCTS,
 
670
        B9600, CS8,
640
671
        SERIO_ELO,              0x00,   0x00,   0,      NULL },
641
672
{ "--elo4002",          "-elo6b",       "ELO touchscreen, 6-byte mode",
642
673
        B9600, CS8 | CRTSCTS,
650
681
{ "--mtouch",           "-mtouch",      "MicroTouch (3M) touchscreen",
651
682
        B9600, CS8 | CRTSCTS,
652
683
        SERIO_MICROTOUCH,       0x00,   0x00,   0,      NULL },
 
684
#ifdef SERIO_TSC40
653
685
{ "--tsc",              "-tsc",         "TSC-10/25/40 serial touchscreen",
654
686
        B9600, CS8,
655
687
        SERIO_TSC40,            0x00,   0x00,   0,      tsc40_init },
 
688
#endif
656
689
{ "--touchit213",       "-t213",        "Sahara Touch-iT213 Tablet PC",
657
690
        B9600, CS8,
658
691
        SERIO_TOUCHIT213,       0x00,   0x00,   0,      t213_init },
683
716
{ "--zhen-hua",         "-zhen",        "Zhen Hua 5-byte protocol",
684
717
        B19200, CS8,
685
718
        SERIO_ZHENHUA,          0x00,   0x00,   0,      zhenhua_init },
 
719
{ "--easypen",          "-ep",          "Genius EasyPen 3x4 tablet",
 
720
        B9600, CS8|CREAD|CLOCAL|HUPCL|PARENB|PARODD,
 
721
        SERIO_EASYPEN,          0x00,   0x00,   0,      easypen_init },
686
722
#ifdef SERIO_TAOSEVM
687
723
{ "--taos-evm",         "-taos",        "TAOS evaluation module",
688
724
        B1200, CS8,
732
768
        int baud = -1;
733
769
        int ignore_init_res = 0;
734
770
        int no_init = 0;
735
 
        int one_read = 0;
736
771
 
737
772
        for (i = 1; i < argc; i++) {
738
773
                if (!strcasecmp(argv[i], "--help")) {
848
883
                retval = EXIT_FAILURE;
849
884
        }
850
885
 
 
886
        errno = 0;
851
887
        do {
852
888
                i = read(fd, NULL, 0);
853
 
                if (i == -1) {
854
 
                        if (RETRY_ERROR(errno))
855
 
                                continue;
856
 
                } else {
857
 
                        one_read = 1;
858
 
                }
859
 
        } while (!i);
 
889
        } while (RETRY_ERROR(errno));
860
890
 
861
891
        ldisc = 0;
862
 
        if (one_read) {
 
892
        if (errno == 0) {
863
893
                // If we've never managed to read, avoid resetting the line
864
894
                // discipline - another inputattach is probably running
865
895
                ioctl(fd, TIOCSETD, &ldisc);