Portál AbcLinuxu, 4. května 2025 00:16
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.
Š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:
English summary: Spying on the PS/2 keyboard protocol using serial port.
Tiskni
Sdílej:
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 :).
while (1!=2)
-LOL :))
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.