diff options
Diffstat (limited to 'debian/patches/03_budget_ci_loadkeys.dpatch')
-rw-r--r-- | debian/patches/03_budget_ci_loadkeys.dpatch | 385 |
1 files changed, 385 insertions, 0 deletions
diff --git a/debian/patches/03_budget_ci_loadkeys.dpatch b/debian/patches/03_budget_ci_loadkeys.dpatch new file mode 100644 index 0000000..722eb56 --- /dev/null +++ b/debian/patches/03_budget_ci_loadkeys.dpatch @@ -0,0 +1,385 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## 03_budget_ci_loadkeys.dpatch by Thomas Schmidt <thomas.schmidt@in.stud.tu-ilmenau.de> +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: adds the utility budget_ci_loadkeys + +@DPATCH@ +diff -urNad linuxtv-dvb-apps/util/av7110_loadkeys/av7110_loadkeys.c /tmp/dpep.HGK2iu/linuxtv-dvb-apps/util/av7110_loadkeys/av7110_loadkeys.c +--- linuxtv-dvb-apps/util/av7110_loadkeys/av7110_loadkeys.c 2004-05-14 12:32:12.000000000 +0200 ++++ /tmp/dpep.HGK2iu/linuxtv-dvb-apps/util/av7110_loadkeys/av7110_loadkeys.c 2004-10-16 09:59:28.000000000 +0200 +@@ -1,5 +1,6 @@ + #include <asm/types.h> + #include <stdlib.h> ++#include <stdio.h> + #include <unistd.h> + #include <sys/mman.h> + #include <sys/types.h> +@@ -99,12 +100,20 @@ + + + ++#ifdef HW_MSP430 ++const char usage [] = "\n\tusage: budget_ci_loadkeys keymap_filename.rc5\n\n"; ++#else + const char usage [] = "\n\tusage: av7110_loadkeys [-i|--invert] [-a|--address <num>] keymap_filename.(rc5|rcmm)\n\n"; +- ++#endif + + struct ir_setup { ++#ifdef HW_MSP430 ++#define KEYTAB_SIZE 64 ++#else ++#define KEYTAB_SIZE 256 + __u32 ir_config; +- __u16 keytab [256]; ++#endif ++ __u16 keytab [KEYTAB_SIZE]; + } __attribute__ ((packed)); + + +@@ -116,7 +125,10 @@ + char *buf, *pos, *fname = NULL; + + for (i=1; i<argc; i++) { ++#ifndef HW_MSP430 ++ /* AV7110 only; not MSP430 */ + if (!strcmp("-i", argv[i]) || !strcmp("--invert", argv[i])) ++ + setup.ir_config |= 0x8000; + else if (!strcmp("-a", argv[i]) || !strcmp("--address", argv[i])) { + if (++i < argc) { +@@ -124,6 +136,7 @@ + setup.ir_config |= 0x4000; + } + } else ++#endif + fname = argv[i]; + } + +@@ -132,6 +145,14 @@ + exit (-1); + } + ++#ifdef HW_MSP430 ++ if (strncmp(".rc5", fname + strlen(fname) - 4, 4) != 0) { ++ const char msg [] = "\nERROR: " ++ "input filename must have suffix .rc5\n"; ++ write (0, msg, strlen(msg)); ++ exit (-1); ++ } ++#else + if (strncmp(".rcmm", fname + strlen(fname) - 5, 5) == 0) + setup.ir_config |= 0x0001; + else if (strncmp(".rc5", fname + strlen(fname) - 4, 4) != 0) { +@@ -140,6 +161,7 @@ + write (0, msg, strlen(msg)); + exit (-1); + } ++#endif + + if ((fd = open (fname, O_RDONLY)) < 0) + print_error ("open", fname); +@@ -161,9 +183,11 @@ + key = strtol (pos, &pos, 0); + keycode = parse_keyname (pos, &pos, buf + len - pos); + +- if (key < 0 || key > 0xff) { +- const char msg [] = +- "\nERROR: key must be in range 0 ... 0xff!\n\n"; ++ if (key < 0 || key >= KEYTAB_SIZE) { ++ char *msg; ++ asprintf (&msg, ++ "\nERROR: key must be in range 0 ... 0x%02x!\n\n", ++ KEYTAB_SIZE); + + write (0, msg, strlen(msg)); + exit (-1); +@@ -178,7 +202,7 @@ + munmap (buf, len); + close (fd); + +- write (1, &setup, 4 + 256 * sizeof(__u16)); ++ write (1, &setup, sizeof (setup)); + + return 0; + } +diff -urNad linuxtv-dvb-apps/util/av7110_loadkeys/av7110_loadkeys.c.orig /tmp/dpep.HGK2iu/linuxtv-dvb-apps/util/av7110_loadkeys/av7110_loadkeys.c.orig +--- linuxtv-dvb-apps/util/av7110_loadkeys/av7110_loadkeys.c.orig 1970-01-01 01:00:00.000000000 +0100 ++++ /tmp/dpep.HGK2iu/linuxtv-dvb-apps/util/av7110_loadkeys/av7110_loadkeys.c.orig 2004-05-14 12:32:12.000000000 +0200 +@@ -0,0 +1,186 @@ ++#include <asm/types.h> ++#include <stdlib.h> ++#include <unistd.h> ++#include <sys/mman.h> ++#include <sys/types.h> ++#include <sys/stat.h> ++#include <fcntl.h> ++#include <ctype.h> ++#include <string.h> ++ ++#include "input_keynames.h" ++ ++ ++static ++void print_error (const char *action, const char *file) ++__attribute__ ((noreturn)); ++ ++ ++static ++void print_error (const char *action, const char *file) ++{ ++ static const char msg [] = "\nERROR: could not "; ++ ++ write (0, msg, strlen(msg)); ++ write (0, action, strlen(action)); ++ write (0, " '", 2); ++ write (0, file, strlen(file)); ++ write (0, "'\n\n", 3); ++ exit (-1); ++} ++ ++ ++static ++int parse_keyname (char *pos, char **nend, int limit) ++{ ++ int cmp, index; ++ int l = 1; ++ int r = sizeof (key_name) / sizeof (key_name[0]); ++ ++ if (limit < 5) ++ return -1; ++ ++ while ((*pos == ' ' || *pos == '\t') && limit > 0) { ++ (*nend)++; ++ pos++; ++ limit--; ++ } ++ ++ if (pos [0] != 'K' || pos[1] != 'E' || pos[2] != 'Y' || pos[3] != '_') ++ return -2; ++ ++ (*nend) += 4; ++ pos += 4; ++ limit -= 4; ++ ++ while (r >= l) { ++ int len0, len1 = 0; ++ ++ index = (l + r) / 2; ++ ++ len0 = strlen(key_name[index-1].name); ++ ++ while (len1 < limit && isgraph(pos[len1])) ++ len1++; ++ ++ cmp = strncmp (key_name[index-1].name, pos, ++ strlen(key_name[index-1].name)); ++ ++ if (len0 < len1 && cmp == 0) ++ cmp = -1; ++ ++ if (cmp == 0) { ++ *nend = pos + strlen (key_name[index-1].name); ++ ++ if (**nend != '\n' && ++ **nend != '\t' && ++ **nend != ' ' && ++ *nend != pos) ++ return -3; ++ ++ return key_name[index-1].key; ++ } ++ ++ if (cmp < 0) ++ l = index + 1; ++ else ++ r = index - 1; ++ ++ if (r < l) { ++ static const char msg [] = "\nunknown key '"; ++ write (0, msg, strlen(msg)); ++ write (0, pos-4, len1 + 4); ++ write (0, "'\n", 2); ++ } ++ }; ++ ++ return -4; ++} ++ ++ ++ ++const char usage [] = "\n\tusage: av7110_loadkeys [-i|--invert] [-a|--address <num>] keymap_filename.(rc5|rcmm)\n\n"; ++ ++ ++struct ir_setup { ++ __u32 ir_config; ++ __u16 keytab [256]; ++} __attribute__ ((packed)); ++ ++ ++int main (int argc, char **argv) ++{ ++ static struct ir_setup setup; ++ int i, fd; ++ size_t len; ++ char *buf, *pos, *fname = NULL; ++ ++ for (i=1; i<argc; i++) { ++ if (!strcmp("-i", argv[i]) || !strcmp("--invert", argv[i])) ++ setup.ir_config |= 0x8000; ++ else if (!strcmp("-a", argv[i]) || !strcmp("--address", argv[i])) { ++ if (++i < argc) { ++ setup.ir_config |= (atoi(argv[i]) & 0xff) << 16; ++ setup.ir_config |= 0x4000; ++ } ++ } else ++ fname = argv[i]; ++ } ++ ++ if (!fname) { ++ write (0, usage, strlen(usage)); ++ exit (-1); ++ } ++ ++ if (strncmp(".rcmm", fname + strlen(fname) - 5, 5) == 0) ++ setup.ir_config |= 0x0001; ++ else if (strncmp(".rc5", fname + strlen(fname) - 4, 4) != 0) { ++ const char msg [] = "\nERROR: " ++ "input filename must have suffix .rc5 or .rcmm\n"; ++ write (0, msg, strlen(msg)); ++ exit (-1); ++ } ++ ++ if ((fd = open (fname, O_RDONLY)) < 0) ++ print_error ("open", fname); ++ ++ len = lseek (fd, 0, SEEK_END); ++ ++ if (!(pos = buf = mmap (NULL, len, PROT_READ, MAP_PRIVATE, fd, 0))) ++ print_error ("mmap", fname); ++ ++ while (pos < buf + len) { ++ int key, keycode; ++ ++ while (!isxdigit(*pos) && pos < buf + len) ++ pos++; ++ ++ if (pos == buf + len) ++ break; ++ ++ key = strtol (pos, &pos, 0); ++ keycode = parse_keyname (pos, &pos, buf + len - pos); ++ ++ if (key < 0 || key > 0xff) { ++ const char msg [] = ++ "\nERROR: key must be in range 0 ... 0xff!\n\n"; ++ ++ write (0, msg, strlen(msg)); ++ exit (-1); ++ } ++ ++ if (keycode < 0) ++ print_error ("parse", fname); ++ ++ setup.keytab[key] = keycode; ++ } ++ ++ munmap (buf, len); ++ close (fd); ++ ++ write (1, &setup, 4 + 256 * sizeof(__u16)); ++ ++ return 0; ++} ++ ++ +diff -urNad linuxtv-dvb-apps/util/av7110_loadkeys/Makefile /tmp/dpep.HGK2iu/linuxtv-dvb-apps/util/av7110_loadkeys/Makefile +--- linuxtv-dvb-apps/util/av7110_loadkeys/Makefile 2004-05-14 12:32:12.000000000 +0200 ++++ /tmp/dpep.HGK2iu/linuxtv-dvb-apps/util/av7110_loadkeys/Makefile 2004-10-16 09:59:27.000000000 +0200 +@@ -1,14 +1,23 @@ + CC = gcc +-CFLAGS = -g -Wall -O2 ++CFLAGS = -g -Wall -O2 -D_GNU_SOURCE + +-all: av7110_loadkeys evtest ++all: av7110_loadkeys budget_ci_loadkeys evtest + + av7110_loadkeys: av7110_loadkeys.o + ++budget_ci_loadkeys: budget_ci_loadkeys.o ++ + evtest: evtest.o + ++av7110_loadkeys.o: CFLAGS += -UHW_MSP430 + av7110_loadkeys.o: av7110_loadkeys.c input_keynames.h + ++budget_ci_loadkeys.c: av7110_loadkeys.c ++ ln av7110_loadkeys.c budget_ci_loadkeys.c ++ ++budget_ci_loadkeys.o: CFLAGS += -DHW_MSP430 ++budget_ci_loadkeys.o: budget_ci_loadkeys.c input_keynames.h ++ + evtest.o: evtest.c input_keynames.h + + +@@ -44,5 +53,6 @@ + + + clean: +- $(RM) core* *.o input_keynames.h av7110_loadkeys evtest ++ $(RM) core* *.o input_keynames.h av7110_loadkeys budget_ci_loadkeys \ ++ budget_ci_loadkeys.c evtest + +diff -urNad linuxtv-dvb-apps/util/av7110_loadkeys/Makefile.orig /tmp/dpep.HGK2iu/linuxtv-dvb-apps/util/av7110_loadkeys/Makefile.orig +--- linuxtv-dvb-apps/util/av7110_loadkeys/Makefile.orig 1970-01-01 01:00:00.000000000 +0100 ++++ /tmp/dpep.HGK2iu/linuxtv-dvb-apps/util/av7110_loadkeys/Makefile.orig 2004-05-14 12:32:12.000000000 +0200 +@@ -0,0 +1,48 @@ ++CC = gcc ++CFLAGS = -g -Wall -O2 ++ ++all: av7110_loadkeys evtest ++ ++av7110_loadkeys: av7110_loadkeys.o ++ ++evtest: evtest.o ++ ++av7110_loadkeys.o: av7110_loadkeys.c input_keynames.h ++ ++evtest.o: evtest.c input_keynames.h ++ ++ ++input_keynames.h: /usr/include/linux/input.h input_fake.h ++ @echo 'generate $@...' ++ @echo '#ifndef __INPUT_KEYNAMES_H__' > $@ ++ @echo '#define __INPUT_KEYNAMES_H__' >> $@ ++ @echo '' >> $@ ++ @echo '#include <linux/input.h>' >> $@ ++ @echo '' >> $@ ++ @echo '#if !defined(KEY_OK)' >> $@ ++ @echo '#include "input_fake.h"' >> $@ ++ @echo '#endif' >> $@ ++ @echo '' >> $@ ++ @echo '' >> $@ ++ @echo 'struct input_key_name {' >> $@ ++ @echo ' const char *name;' >> $@ ++ @echo ' int key;' >> $@ ++ @echo '};' >> $@ ++ @echo '' >> $@ ++ @echo '' >> $@ ++ @echo 'static struct input_key_name key_name [] = {' >> $@ ++ @for x in `cat /usr/include/linux/input.h input_fake.h | \ ++ grep KEY_ | grep "#define" | grep -v KEY_MAX | \ ++ cut -f 1 | cut -f 2 -d ' ' | sort | uniq` ; do \ ++ echo " { \"`echo $$x | cut -b 5-`\", $$x }," >> $@ \ ++ ; \ ++ done ++ @echo '};' >> $@ ++ @echo '' >> $@ ++ @echo '#endif /* __INPUT_KEYNAMES_H */' >> $@ ++ @echo '' >> $@ ++ ++ ++clean: ++ $(RM) core* *.o input_keynames.h av7110_loadkeys evtest ++ |