Пример #1
0
static int dump_table(int fd) {
	char version[256], name[256];
	int scancode, r = -1;

	if (evdev_driver_version(fd, version, sizeof(version)) < 0)
		goto fail;

	if (evdev_device_name(fd, name, sizeof(name)) < 0)
		goto fail;

	printf("### evdev %s, driver '%s'\n", version, name);

	r = 0;
	for (scancode = 0; scancode < MAX_SCANCODES; scancode++) {
		int keycode;

		if ((keycode = evdev_get_keycode(fd, scancode, 1)) < 0) {
			if (keycode == -2)
				continue;
			r = -1;
			break;
		}

		if (keycode < KEY_MAX && key_names[keycode])
			printf("0x%03x %s\n", scancode, format_keyname(key_names[keycode]));
		else
			printf("0x%03x 0x%03x\n", scancode, keycode);
	}
fail:
	return r;
}
Пример #2
0
static int merge_table(int fd, FILE *f) {
        int r = 0;
        int line = 0;

        while (!feof(f)) {
                char s[256], *p;
                unsigned scancode;
                int new_keycode, old_keycode;

                if (!fgets(s, sizeof(s), f))
                        break;

                line++;
                p = s+strspn(s, "\t ");
                if (*p == '#' || *p == '\n')
                        continue;

                if (sscanf(p, "%i %i", &scancode, &new_keycode) != 2) {
                        char t[105] = "KEY_UNKNOWN";
                        const struct key *k;

                        if (sscanf(p, "%i %100s", &scancode, t+4) != 2) {
                                fprintf(stderr, "WARNING: Parse failure at line %i, ignoring.\n", line);
                                r = -1;
                                continue;
                        }

                        if (!(k = lookup_key(t, strlen(t)))) {
                                fprintf(stderr, "WARNING: Unknown key '%s' at line %i, ignoring.\n", t, line);
                                r = -1;
                                continue;
                        }

                        new_keycode = k->id;
                }


                if ((old_keycode = evdev_get_keycode(fd, scancode, 0)) < 0) {
                        r = -1;
                        continue;
                }

                if (evdev_set_keycode(fd, scancode, new_keycode) < 0) {
                        r = -1;
                        continue;
                }

                if (new_keycode != old_keycode)
                        fprintf(stderr, "Remapped scancode 0x%02x to 0x%02x (prior: 0x%02x)\n",
                                scancode, new_keycode, old_keycode);
        }

        fclose(f);
        return r;
}