[ myrmidon @ 16.12.2004. 21:30 ] @
Imam problem prilikom citanja podataka na paralelnom portu u EPP modu. U BIOS-u sam podesio epp mod ali nikako ne mogu procitati nista na D0-D7.

Da li treba nesto u XP-u ili Linux-u jos dodatno podesiti (kako)?

Saljem deo jednostavnog koda(linux) koji ispisuje nesto na Data port zatim pokusava da cita sa porta, ali bezuspesno. POMOC!

#include <stdio.h>
#include <unistd.h>
#include <sys/io.h>

#define BASEPORT 0x378 /*lpt0*/

int main()
{


/* otvaranje porta */
if (ioperm(BASEPORT,3,1))
{
perror("ioperm");
exit(1);
}





outb(32,BASEPORT);

printf(" Written 32 ....\n");
usleep(50000);

printf(" Read : %d\n",inb(BASEPORT+4));

/*Zatvaranje porta*/
if (ioperm(BASEPORT,3,0))
{
perror("ioperm");
exit(1);
}


exit(0);

}
[ Dejan Lozanovic @ 17.12.2004. 08:36 ] @
Predpostavljam da ovaj kod pokusavas da pokrenes kao root, jer kao obican korisnik neces moci da pozivas ioperm.

Drugo sto ne koristis /dev/lp0 i ako ti trebaju neka dodatna podesavanja koristis ioctl

Trece ako bash moras da koristis ioperm, potrudi se onda u kernelu da ti parport ikompajliran kao modul, i potrudi se da ne bude ucitan, tj da skine lock sa porta kojem zelis da pristupas.

[ myrmidon @ 17.12.2004. 14:20 ] @
uopste nemam problema sa ioperm-om ili sa outp funkcijama.

Sve to skljaka kako treba.

Problem je u citanju podataka sa data portova (baseport+4).

Hvala na odgovoru ali bilo bi dobro da kazes neke konkretne korake za nesto sta preporucujes.

[ Dejan Lozanovic @ 17.12.2004. 20:29 ] @
Pa konkretan odgovor ti nazalost ne mogu dati jer nikada nisam radio sa paralelnim portom. Ali moj je savet da se ne spustas na nivo ioperm i da koristis inb i outb. vec koristi ioctl sistemski poziv da konfigurises paralelni port, a svo citanje i pisanje da radis preko fajla /dev/lp0 (tacnije da budem jos precizniji preko major 6 minor 0) za lpt 1:

spisak svih ioctlova ces videti sa man 2 ioctl_list, a header fajl je /usr/include/linux/lp.h
[ Odin D. @ 19.12.2004. 00:05 ] @
#include <unistd.h>
#include <sys/io.h>

Nisam bas siguran u ovo sto cu napisati, a ni u te biblioteke koje koristis, jer nisam sa njima radio, ali kad sam ja nekad davno hteo da pristupim portovima, a radio u Windowsu XP, saznao sam da on iz bezbedonosnih razloga ne dozvoljava pristup portovima kao sto je to bio slucaj kod raniji verzija Windowsa, vec to mora da ide preko drajvera ili tako nesto. U tu svrhu sam sa interneta skinuo neke dll biblioteke (cini mi se nesto kao ioport32.dll ili nesto slicno tome), ali to mi nije proradilo.
Znaci, ili nadji neki vec gotov drajver za tu svrhu, ili moras sam da ga napises.
Ima i jedna knjiga (hardversko elektronicarskog tipa) koja se zove PC INTERFEJSI, a koju je napisao Vojo Milovanovic (bilo je nedavno da se kupi u Radio Klubu, Timocka 18, www.radioklub.co.yu), u kojoj je opisano kako se prave interfejsi za paralelni, serijski, usb, game port itd. Uz nju dolazi i neki CD na kom su potrebne biblioteke za pristup tim portovima, navodno radi na svim verzijama Windowsa, ukljucujuci i XP (u knjizi se radi na C-u, Visual Basic-u, Turbo Pascal-u, QBasicu i Delphi-u)
[ Burgos @ 06.04.2005. 14:25 ] @
Izvinite sto vadim temu, ali mozda nekom zatreba:

Greska je u tome sto ti nije otvoren port za citanje (nisi ga otvorio sa ioperm())

Definicija:

Code:
ioperm(from, num, turn_on)


Gde je

from Pocetna adresa porta
num Broj portova koji da se otvore (otvorice se svi portovi u opsegu from + num)
turn_on 1 za otvoriti, 0 za zatvoriti

Ti sa inb(BASEPORT+4) pokusavas da otvoris port 0x37C (0x378 + 0x4), a ti si sa

ioperm(BASEPORT, 3, 1) otvorio portove samo od 0x378 do 0x37A

znaci moras pozvati ioperm(BASEPORT, 5 , 1) da ne bi dobijao gresku

"Segmentation Fault" koja oznacava da nisi otvorio port kome zelis da pristupis.