~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/Documentation/userspace-api/media/rc/keytable.c.rst

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 .. SPDX-License-Identifier: GPL-2.0 OR GFDL-1.1-no-invariants-or-later
  2 
  3 file: uapi/v4l/keytable.c
  4 =========================
  5 
  6 .. code-block:: c
  7 
  8     /* keytable.c - This program allows checking/replacing keys at IR
  9 
 10        Copyright (C) 2006-2009 Mauro Carvalho Chehab <mchehab@kernel.org>
 11 
 12        This program is free software; you can redistribute it and/or modify
 13        it under the terms of the GNU General Public License as published by
 14        the Free Software Foundation, version 2 of the License.
 15 
 16        This program is distributed in the hope that it will be useful,
 17        but WITHOUT ANY WARRANTY; without even the implied warranty of
 18        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 19        GNU General Public License for more details.
 20      */
 21 
 22     #include <ctype.h>
 23     #include <errno.h>
 24     #include <fcntl.h>
 25     #include <stdio.h>
 26     #include <stdlib.h>
 27     #include <string.h>
 28     #include <linux/input.h>
 29     #include <sys/ioctl.h>
 30 
 31     #include "parse.h"
 32 
 33     void prtcode (int *codes)
 34     {
 35             struct parse_key *p;
 36 
 37             for (p=keynames;p->name!=NULL;p++) {
 38                     if (p->value == (unsigned)codes[1]) {
 39                             printf("scancode 0x%04x = %s (0x%02x)\\n", codes[0], p->name, codes[1]);
 40                             return;
 41                     }
 42             }
 43 
 44             if (isprint (codes[1]))
 45                     printf("scancode %d = '%c' (0x%02x)\\n", codes[0], codes[1], codes[1]);
 46             else
 47                     printf("scancode %d = 0x%02x\\n", codes[0], codes[1]);
 48     }
 49 
 50     int parse_code(char *string)
 51     {
 52             struct parse_key *p;
 53 
 54             for (p=keynames;p->name!=NULL;p++) {
 55                     if (!strcasecmp(p->name, string)) {
 56                             return p->value;
 57                     }
 58             }
 59             return -1;
 60     }
 61 
 62     int main (int argc, char *argv[])
 63     {
 64             int fd;
 65             unsigned int i, j;
 66             int codes[2];
 67 
 68             if (argc<2 || argc>4) {
 69                     printf ("usage: %s <device> to get table; or\\n"
 70                             "       %s <device> <scancode> <keycode>\\n"
 71                             "       %s <device> <keycode_file>n",*argv,*argv,*argv);
 72                     return -1;
 73             }
 74 
 75             if ((fd = open(argv[1], O_RDONLY)) < 0) {
 76                     perror("Couldn't open input device");
 77                     return(-1);
 78             }
 79 
 80             if (argc==4) {
 81                     int value;
 82 
 83                     value=parse_code(argv[3]);
 84 
 85                     if (value==-1) {
 86                             value = strtol(argv[3], NULL, 0);
 87                             if (errno)
 88                                     perror("value");
 89                     }
 90 
 91                     codes [0] = (unsigned) strtol(argv[2], NULL, 0);
 92                     codes [1] = (unsigned) value;
 93 
 94                     if(ioctl(fd, EVIOCSKEYCODE, codes))
 95                             perror ("EVIOCSKEYCODE");
 96 
 97                     if(ioctl(fd, EVIOCGKEYCODE, codes)==0)
 98                             prtcode(codes);
 99                     return 0;
100             }
101 
102             if (argc==3) {
103                     FILE *fin;
104                     int value;
105                     char *scancode, *keycode, s[2048];
106 
107                     fin=fopen(argv[2],"r");
108                     if (fin==NULL) {
109                             perror ("opening keycode file");
110                             return -1;
111                     }
112 
113                     /* Clears old table */
114                     for (j = 0; j < 256; j++) {
115                             for (i = 0; i < 256; i++) {
116                                     codes[0] = (j << 8) | i;
117                                     codes[1] = KEY_RESERVED;
118                                     ioctl(fd, EVIOCSKEYCODE, codes);
119                             }
120                     }
121 
122                     while (fgets(s,sizeof(s),fin)) {
123                             scancode=strtok(s,"\\n\\t =:");
124                             if (!scancode) {
125                                     perror ("parsing input file scancode");
126                                     return -1;
127                             }
128                             if (!strcasecmp(scancode, "scancode")) {
129                                     scancode = strtok(NULL,"\\n\\t =:");
130                                     if (!scancode) {
131                                             perror ("parsing input file scancode");
132                                             return -1;
133                                     }
134                             }
135 
136                             keycode=strtok(NULL,"\\n\\t =:(");
137                             if (!keycode) {
138                                     perror ("parsing input file keycode");
139                                     return -1;
140                             }
141 
142                             // printf ("parsing %s=%s:", scancode, keycode);
143                             value=parse_code(keycode);
144                             // printf ("\\tvalue=%d\\n",value);
145 
146                             if (value==-1) {
147                                     value = strtol(keycode, NULL, 0);
148                                     if (errno)
149                                             perror("value");
150                             }
151 
152                             codes [0] = (unsigned) strtol(scancode, NULL, 0);
153                             codes [1] = (unsigned) value;
154 
155                             // printf("\\t%04x=%04x\\n",codes[0], codes[1]);
156                             if(ioctl(fd, EVIOCSKEYCODE, codes)) {
157                                     fprintf(stderr, "Setting scancode 0x%04x with 0x%04x via ",codes[0], codes[1]);
158                                     perror ("EVIOCSKEYCODE");
159                             }
160 
161                             if(ioctl(fd, EVIOCGKEYCODE, codes)==0)
162                                     prtcode(codes);
163                     }
164                     return 0;
165             }
166 
167             /* Get scancode table */
168             for (j = 0; j < 256; j++) {
169                     for (i = 0; i < 256; i++) {
170                             codes[0] = (j << 8) | i;
171                             if (!ioctl(fd, EVIOCGKEYCODE, codes) && codes[1] != KEY_RESERVED)
172                                     prtcode(codes);
173                     }
174             }
175             return 0;
176     }

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php