doc-rst: linux_tv DocBook to reST migration (docs-next)
[deliverable/linux.git] / Documentation / linux_tv / media / v4l / keytable.c.rst
1 .. -*- coding: utf-8; mode: rst -*-
2
3 file: media/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@infradead.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 }
177
178
179
180
181 .. ------------------------------------------------------------------------------
182 .. This file was automatically converted from DocBook-XML with the dbxml
183 .. library (https://github.com/return42/sphkerneldoc). The origin XML comes
184 .. from the linux kernel, refer to:
185 ..
186 .. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
187 .. ------------------------------------------------------------------------------
This page took 0.069524 seconds and 5 git commands to generate.