Portál AbcLinuxu, 4. května 2025 00:16

Debugování komunikace s klávesnicí

26.11.2005 21:50 | Přečteno: 1460× | Linux | poslední úprava: 26.11.2005 22:48

Momentálně si hraju s vylepšováním svojí klávesnice, akorát mi to moc nejde. Už jsem strávil tejdny různým zkoušením (no, nemám na hraní celý dny, proto tolik), až jsem uznal, že je nutný vědět, co se mezi klávesnicí a PC vlastně děje, protože podle teorie to prostě nefungovalo.

Takže jsem vyštrachal obvod MAX232, 5 kondenzátorů a napojil klávesnici na sériový port.

schema
fotka

Šmírovací program jsem obšlehl od sitha. V C totiž vůbec neumím a připadá mi jako totálně nepohodlný a nepřehledný jazyk, takže - vím, že je to napsaný prasácky, ale je to jednoúčelová věc a stačí mi:

#include <stdio.h>
#include <fcntl.h>
#include <termios.h>
#include <sys/ioctl.h>
#include <time.h>

#define SERIAK "/dev/ttyS0"

int openserial ();
void closeserial ();
float mereni ();

int fd;

int
openserial ()			//otevrit seriak
{
	if ((fd = open (SERIAK, O_RDWR)) == -1)
	{
		return 0;
	}
	return 1;
}

void
closeserial ()			//zavrit seriak
{
	close (fd);
}

float
mereni ()			//hlavni fce, mereni napeti
{
	int status, hodnota1 = 2, hodnota2 = 3;

	while (1!=2)
	{
	ioctl (fd, TIOCMGET, &status);
	hodnota1 = (status & TIOCM_CTS)/TIOCM_CTS; //clock
	hodnota2 = (status & TIOCM_RI)/TIOCM_RI; //data
	printf ("%i,", hodnota1);
	printf ("%i\n", hodnota2);
	}
//	return (hodnota1);
}

int
main ()
{
	if (!openserial ())
	{
		printf ("Nelze inicializovat port \"s\".", SERIAK);
		return 0;
	}
	mereni();
	closeserial ();
	return 0;
}

Prostě to vypisuje dvě hodnoty oddělený čárkou, první je stav CLOCK a druhý je stav DATA. Protože PS/2 jede jen na 9600 baudů, stíhá se to krásně:

...
1,0
1,0
1,0
0,0
0,0
0,0
0,0
0,0
0,0
0,0
0,0
0,0
0,0
0,0
0,1
0,1
0,1
...
Update:

A když se to nacpe do OpenOffice, tak se to dá krásně zvizualizovat:

graf

English summary: Spying on the PS/2 keyboard protocol using serial port.

       

Hodnocení: 100 %

        špatnédobré        

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (2) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

Pavel Stárek avatar 26.11.2005 23:07 Pavel Stárek | skóre: 44 | blog: Tady bloguju já :-) | Kolín
Rozbalit Rozbalit vše Re: Debugování komunikace s klávesnicí
Odpovědět | Sbalit | Link | Blokovat | Admin
Nooo, to je sice pěkné, ale tak nějak jsem nepochopil, jak chceš z těch grafíků z OO luštit, co tedy vlastně z té klávesnice leze ? Nu třeba máš naštudovaný protokol klávesnice na úrovni log. 0 a 1 :-)
Kdo chce, hledá způsob; kdo nechce, hledá důvod.
hajma avatar 27.11.2005 00:37 hajma | skóre: 27 | blog: hajma | Říčany
Rozbalit Rozbalit vše Re: Debugování komunikace s klávesnicí
mám :-)
21 promarněných znaků
13.3.2006 23:40 David Sedláček | skóre: 20 | Žďár nad Sázavou
Rozbalit Rozbalit vše Re: Debugování komunikace s klávesnicí
Odpovědět | Sbalit | Link | Blokovat | Admin
Ahoj.

Ten muj puvodni program bych opravdu napsal uplne jinak - mas right, prasecina. Ovsem v podstate je v poradku - je to komunikace na nejnizsi urovni a proto se zdaj (a jsou) napr. ty bitove operace docela hardcore :).

Kazdopadne velmi zaujimave takhle napojit klavesku :).

13.3.2006 23:43 David Sedláček | skóre: 20 | Žďár nad Sázavou
Rozbalit Rozbalit vše Re: Debugování komunikace s klávesnicí
Zapomel jsem dodat:

while (1!=2)

-LOL :))

20.3.2006 20:06 Bronek
Rozbalit Rozbalit vše Re: Debugování komunikace s klávesnicí
Odpovědět | Sbalit | Link | Blokovat | Admin
Taky skousim udelat jakysi emulator klavesnice s procesorem PIC16F84 a pro odladeni pouzivam podobnou metodu :) Teda nevim ,jestli se to metodou da vubec nazvat. Pro zachytavani ale nepouzivam seriovy ale paralelni port. Protoze vsechna komunikaca Klavesnice<>PC prebiha pres TTL +5V. Takze jsem usteril ten MAX a kopec kondiku.

Komunikaci mam zachycenou ale emulace jaksi nefunguje.

Skusim jeste trosku posprtat.
hajma avatar 28.3.2006 15:25 hajma | skóre: 27 | blog: hajma | Říčany
Rozbalit Rozbalit vše Re: Debugování komunikace s klávesnicí
no, já jsem někde čet, že paralel se snadno spálí, takže radši přes ten sériovej. Už jsem to párkrát zkratoval ...
21 promarněných znaků

Založit nové vláknoNahoru

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.