kbd_mode: show "off" mode too
function old new delta kbd_mode_main 156 166 +10 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
		| @@ -24,7 +24,7 @@ | |||||||
| //usage:#define kbd_mode_full_usage "\n\n" | //usage:#define kbd_mode_full_usage "\n\n" | ||||||
| //usage:       "Report or set the keyboard mode\n" | //usage:       "Report or set the keyboard mode\n" | ||||||
| //usage:     "\n	-a	Default (ASCII)" | //usage:     "\n	-a	Default (ASCII)" | ||||||
| //usage:     "\n	-k	Medium-raw (keyboard)" | //usage:     "\n	-k	Medium-raw (keycode)" | ||||||
| //usage:     "\n	-s	Raw (scancode)" | //usage:     "\n	-s	Raw (scancode)" | ||||||
| //usage:     "\n	-u	Unicode (utf-8)" | //usage:     "\n	-u	Unicode (utf-8)" | ||||||
| //usage:     "\n	-C TTY	Affect TTY instead of /dev/tty" | //usage:     "\n	-C TTY	Affect TTY instead of /dev/tty" | ||||||
| @@ -43,6 +43,10 @@ int kbd_mode_main(int argc UNUSED_PARAM, char **argv) | |||||||
| 	}; | 	}; | ||||||
| 	int fd; | 	int fd; | ||||||
| 	unsigned opt; | 	unsigned opt; | ||||||
|  | //TODO? kbd-2.0.3 without -C tries in sequence: | ||||||
|  | //fd#0, /dev/tty, /dev/tty0. | ||||||
|  | //Also, it checks KDGKBTYPE before doing KDGKBMODE | ||||||
|  | //maybe we can use get_console_fd_or_die()? | ||||||
| 	const char *tty_name = CURRENT_TTY; | 	const char *tty_name = CURRENT_TTY; | ||||||
|  |  | ||||||
| 	opt = getopt32(argv, "sakuC:", &tty_name); | 	opt = getopt32(argv, "sakuC:", &tty_name); | ||||||
| @@ -62,9 +66,19 @@ int kbd_mode_main(int argc UNUSED_PARAM, char **argv) | |||||||
| 			mode = "mediumraw (keycode)"; | 			mode = "mediumraw (keycode)"; | ||||||
| 		else if (m == K_UNICODE) | 		else if (m == K_UNICODE) | ||||||
| 			mode = "Unicode (UTF-8)"; | 			mode = "Unicode (UTF-8)"; | ||||||
|  | 		else if (m == 4 /*K_OFF*/) /* kbd-2.0.3 does not show this mode, says "unknown" */ | ||||||
|  | 			mode = "off"; | ||||||
| 		printf("The keyboard is in %s mode\n", mode); | 		printf("The keyboard is in %s mode\n", mode); | ||||||
| 	} else { | 	} else { | ||||||
| 		/* here we depend on specific bits assigned to options (*) */ | 		/* here we depend on specific bits assigned to options (*) | ||||||
|  | 		 * KDSKBMODE constants have these values: | ||||||
|  | 		 * #define K_RAW           0x00 | ||||||
|  | 		 * #define K_XLATE         0x01 | ||||||
|  | 		 * #define K_MEDIUMRAW     0x02 | ||||||
|  | 		 * #define K_UNICODE       0x03 | ||||||
|  | 		 * #define K_OFF           0x04 | ||||||
|  | 		 * (looks like "-ak" together would cause the same effect as -u) | ||||||
|  | 		 */ | ||||||
| 		opt = opt & UNICODE ? 3 : opt >> 1; | 		opt = opt & UNICODE ? 3 : opt >> 1; | ||||||
| 		/* double cast prevents warnings about widening conversion */ | 		/* double cast prevents warnings about widening conversion */ | ||||||
| 		xioctl(fd, KDSKBMODE, (void*)(ptrdiff_t)opt); | 		xioctl(fd, KDSKBMODE, (void*)(ptrdiff_t)opt); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user