У меня Dell v131. На новых драйверах круто работает тачпад, но не работает его LED при отключении. Я написал программу, которая реагирует на Fn + F3 и отключает тачпад, но как работать с LED я без понятия. В Linux'e, вроде с ядра 3.4 (на последней убунте точно работает) можно сделать так:
echo 1 > /sys/class/leds/dell-laptop::touchpad/brightness
или
echo 0 > /sys/class/leds/dell-laptop::touchpad/brightness
Я нашел вроде файлы в ядре где это реализовано (drivers/platform/x86/dell-laptop.c).
Там есть код:
static void touchpad_led_on(void)
{
int command = 0x97;
char data = 1;
i8042_command(&data, command | 1 << 12);
}
Так же я нарыл еще и вот такое в других файлах:
int i8042_command(unsigned char *param, int command)
{
unsigned long flags;
int retval;
spin_lock_irqsave(&i8042_lock, flags);
retval = __i8042_command(param, command);
spin_unlock_irqrestore(&i8042_lock, flags);
return retval;
}
static int __i8042_command(unsigned char *param, int command)
{
int i, error;
if (i8042_noloop && command == I8042_CMD_AUX_LOOP)
return -1;
error = i8042_wait_write();
if (error)
return error;
dbg("%02x -> i8042 (command)\n", command & 0xff);
i8042_write_command(command & 0xff);
for (i = 0; i < ((command >> 12) & 0xf); i++) {
error = i8042_wait_write();
if (error)
return error;
dbg("%02x -> i8042 (parameter)\n", param[i]);
i8042_write_data(param[i]);
}
for (i = 0; i < ((command >> 8) & 0xf); i++) {
error = i8042_wait_read();
if (error) {
dbg(" -- i8042 (timeout)\n");
return error;
}
if (command == I8042_CMD_AUX_LOOP &&
!(i8042_read_status() & I8042_STR_AUXDATA)) {
dbg(" -- i8042 (auxerr)\n");
return -1;
}
param[i] = i8042_read_data();
dbg("%02x <- i8042 (return)\n", param[i]);
}
return 0;
}
Я хочу написать такое же под Windows 7. Но не очень понимаю что делать. Даже не знаю, куда копать, так как никогда драйверов не писал и так далее. Подскажите, пожалуйста, что-нибудь.