Linux - статьи


Управление индикаторами на клавиатуре


При определенных условиях у вас может возникнуть желание дать вашему модулю более простой и более прямолинейный способ взаимодействия с внешним миром. Изменение состояния светодиодных индикаторов клавиатуры может быть одним из вариантов привлечения внимания пользователя или отображения некоторого состояния. Светодиодные индикаторы присутствуют на любой клавиатуре, они всегда находятся в поле зрения, они не нуждаются в установке, и их "подмаргивание" достаточно ненавязчиво, по сравнению с выводом на tty или в файл.

Следующий исходный код иллюстрирует модуль ядра, который после загрузки начинает мигать индикаторами клавиатуры.

Пример 9-2. kbleds.c

/* * kbleds.c - Мигание индикаторами на клавиатуре. */

#include <linux/module.h> #include <linux/config.h> #include <linux/init.h> #include <linux/tty.h> /* определение fg_console, MAX_NR_CONSOLES */ #include <linux/kd.h> /* определение KDSETLED */ #include <linux/console_struct.h> /* определение vc_cons */

MODULE_DESCRIPTION("Пример module illustrating the use of Keyboard LEDs."); MODULE_AUTHOR("Daniele Paolo Scarpazza"); MODULE_LICENSE("GPL");

struct timer_list my_timer; struct tty_driver *my_driver; char kbledstatus = 0;

#define BLINK_DELAY HZ/5 #define ALL_LEDS_ON 0x07 #define RESTORE_LEDS 0xFF

/* * Функция my_timer_func мигает индикаторами * на клавиатуре периодически вызывая * ioctl() драйвера клавиатуры с командой KDSETLED. * Дополнительную информацию, * по командам ioctl виртуального терминала, вы найдете в: * /usr/src/linux/drivers/char/vt_ioctl.c, function vt_ioctl(). * * Дополнительный аргумент команды KDSETLED -- значение 7 * (перевод в режим LED_SHOW_IOCTL -- управление * индикаторами через ioctl), значение 0xFF -- * (любое значение, большее 7, перевод в режим * LED_SHOW_FLAGS -- * отображение фактического состояния клавиатуры). * Дополнительная информация: * /usr/src/linux/drivers/char/keyboard.c, * function setledstate(). * */




Начало  Назад  Вперед