Portál AbcLinuxu, 5. května 2025 09:19
Řešení dotazu:
cat
. Problém je v tom, že to, čo je k tomu portu pripojené, musí nejak dať najavo, že "teraz!". A podľa toho, čo som za poslednú minútu našiel na googli/wiki, tak sa to urobí tak, že to pripojené zariadenie musí zacvičiť s napätím na pine #1 (strobe). A možno to ešte treba potvrdiť nastavením stavu na pine #10 (acknowledge).
Pri opačnom smere stačilo urobiť cat - > /dev/lp0 a z tlačiarne už liezol papier Tipujem, že čítanie v princípe znamená otvoriť /dev/lp0 na čítanie a čítať.
Tipuješ špatně. Znamená to:
# nastavit v BIOSu port do "hloupého" režimu
# a pak
## napsat program přistupující na fyzické io adresy printerportu a správně obsluhující handshake převodníku a ten spouštět pod rootem,
## nebo napsat driver do kernelu který udělá /dev/něco co bude správně obsluhovat handshake převodníku a pak můžeš použít ten cat /dev/něco
Ale když ty programovat neumíš ....
#include <stdlib.h> #include <stdio.h> #include <sys/io.h> #define portC 0x37a int main() { if (ioperm(portC, 1, 1)) fprintf(stderr, "\e[31;43m Nemáš oprávnění \e[0m\n"), exit(1); outb(0, portC); int dataC = inb(portC); printf("%i\n", ((256*(dataC-192)))); return(dataC); }
#include <stdlib.h> #include <stdio.h> #include <sys/io.h> #define portD 0x37c #define portC 0x37a int main() { if (ioperm(portD, 1, 1)) fprintf(stderr, "\e[31;43m Nemáš oprávnění \e[0m\n"), exit(1); outb(0, portD); outb(0, portC); int dataD = inb(portD); int dataC = inb(portC); printf("%i\n", ((dataD+256*(dataC-192)))); return(dataC); return(dataD); }
return
y by neměly fungovat.
#include <stdlib.h> #include <stdio.h> #include <sys/io.h> #define portD 0x37c #define portC 0x37a int main() { if (ioperm(portC, 1, 1)) fprintf(stderr, "\e[31;43m Nemáš oprávnění \e[0m\n"), exit(1); if (ioperm(portD, 1, 1)) fprintf(stderr, "\e[31;43m Nemáš oprávnění \e[0m\n"), exit(1); outb(0, portD); outb(0, portC); int dataD = inb(portD); int dataC = inb(portC); printf("%i\n", (dataD+256*(dataC-192))); }
ppdev
(modprobe ppdev
), příklad kódu je tady (kapitola User-Mode Access):
https://www.htlinux.com/parallel_port_control_in_linux/
Na to pak stačí, abyste měl oprávnění k příslušnému souboru v /dev/
- u mě stačilo přidat si uživatele, pod kterým pracuju, do skupiny lp: gpasswd -a uzivatel lp
(Na hračky typu Arduino se vykašlete.)
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.