Что за функция i8042_command в Linux?

У меня 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. Но не очень понимаю что делать. Даже не знаю, куда копать, так как никогда драйверов не писал и так далее. Подскажите, пожалуйста, что-нибудь.
  • Вопрос задан
  • 3172 просмотра
Решения вопроса 1
@garisson
попробовать взять длл geekhideout.com/iodll.shtml

и написать программку для записи/чтения i/o портов ps/2
насколько я понимаю, раскладка по функциям примерно такая -

порт режим описание
0x60 Read/Write Data Port (i8042_write_data()/i8042_read_data())
0x64 Read Status Register
0x64 Write Command Register (i8042_write_command())

но даст ли система писать/читать порты из непривелегированного режима и не будет ли конфликта с драйвером клавиатуры/мыши - неизвестно

идея переписать драйвер целиком представляется мне труднореализуемой, в лучшем случае - можно дописать дополнительный драйвер ( msdn.microsoft.com/en-us/windows/hardware/hh852365.aspx - Windows Driver Kit - там есть и примеры) - вполне вероятно он будет даже работать
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы