Netko je ovdje negdje nedavno bio postavio pitanje kako ostvariti komunikaciju s modemom direktno iz C-a, i ja lijepo maloprije bio natipkao odgovor offline i sad vise ne mogu naci tu originalnu poruku (zasto li sam uvjeren da je u medjuvremenu nestala?:) ), pa odgovor (da ipak ne propadne) stavljam u zaseban topic.
---
Iz samog ANSI C-a nikako nije moguce uspjeti ostvariti komunikaciju s modemom jer naprosto ne postoje funkcije za port I/O u standardnoj biblioteci.
Ono cemu je u prvom koraku moguce pribjeci jest upotreba funkcija iz <conio.h> koje iako nisu standardizirane, dolaze s gotovo svakim C compilerom.
(Napomena: U <conio.h> se inace nalaze funkcije za console i port I/O, od kojih su neke mozda nekima i poznate - npr. getch(), getche(), kbhit() i sl.)
U svakom slucaju, funkcije koje su potrebne su inp() i outp() za citanje jednog bytea sa, odnosno pisanja jednog bytea na zadani port.
Modem je uredjaj koji je spojen (bilo fizicki bilo virtualno) na serijski port (to su oni portovi koji nose oznaku COM), a cije adrese su obicno poput 02E8, 02F8, 03E8, 03F8,... (naravno ne postoji nikakva garancija da su navedene adrese ovakve i na drugim racunalima).
I uglavnom to je sve sto je potrebno sto se tice C-a.
Naravno, da bi se uopce moglo smisleno upravljati s modemom potrebno je prvo dobro prouciti set AT komandi (koje bi se onda slale na modem byte po byte pomocu outp() funkcije), no, to je nesto sto onda vise nema veze s C-om.
Inace, serijska komunikacija ostvarena pomocu inp() i outp() funkcija je vrlo vrlo rudimentarna. Ne postoji gotovo nikakva mogucnost kontrole transporta podataka i kontrole greske. Opcenito, gledano s malo apstraktnijeg aspekta, ulaz i izlaz na komunikacijskom portu moze biti ostvaren kao asinkroni (overlapped) i sinkroni (nonoverlapped). Za rad s modemom vise bi nas veselio asinkroni mod (kod kojeg funkcije rade u blocking nacinu rada - i/o operacija mora zavrsiti prije nego sto se vrati kontrola pozivatelju funkcije). U svakom slucaju, koji god od ova dva nacina rada da se odabere, trebat ce esencijalno pribjeci koristenju API funkcija iz operacijskog sustava, a to je onda nadasve platform dependent stvar i tu vise nema nikakvog pravila kako se dane funkcije zovu i koja je sintaksa njihove upotrebe, pa je o tome nemoguce opcenito pisati.
Netko je ovdje negdje nedavno bio postavio pitanje kako ostvariti komunikaciju s modemom direktno iz C-a, i ja lijepo maloprije bio natipkao odgovor offline i sad vise ne mogu naci tu originalnu poruku (zasto li sam uvjeren da je u medjuvremenu nestala? ), pa odgovor (da ipak ne propadne) stavljam u zaseban topic.
---
Iz samog ANSI C-a nikako nije moguce uspjeti ostvariti komunikaciju s modemom jer naprosto ne postoje funkcije za port I/O u standardnoj biblioteci.
Ono cemu je u prvom koraku moguce pribjeci jest upotreba funkcija iz <conio.h> koje iako nisu standardizirane, dolaze s gotovo svakim C compilerom.
(Napomena: U <conio.h> se inace nalaze funkcije za console i port I/O, od kojih su neke mozda nekima i poznate - npr. getch(), getche(), kbhit() i sl.)
U svakom slucaju, funkcije koje su potrebne su inp() i outp() za citanje jednog bytea sa, odnosno pisanja jednog bytea na zadani port.
Modem je uredjaj koji je spojen (bilo fizicki bilo virtualno) na serijski port (to su oni portovi koji nose oznaku COM), a cije adrese su obicno poput 02E8, 02F8, 03E8, 03F8,... (naravno ne postoji nikakva garancija da su navedene adrese ovakve i na drugim racunalima).
I uglavnom to je sve sto je potrebno sto se tice C-a.
Naravno, da bi se uopce moglo smisleno upravljati s modemom potrebno je prvo dobro prouciti set AT komandi (koje bi se onda slale na modem byte po byte pomocu outp() funkcije), no, to je nesto sto onda vise nema veze s C-om.
Inace, serijska komunikacija ostvarena pomocu inp() i outp() funkcija je vrlo vrlo rudimentarna. Ne postoji gotovo nikakva mogucnost kontrole transporta podataka i kontrole greske. Opcenito, gledano s malo apstraktnijeg aspekta, ulaz i izlaz na komunikacijskom portu moze biti ostvaren kao asinkroni (overlapped) i sinkroni (nonoverlapped). Za rad s modemom vise bi nas veselio asinkroni mod (kod kojeg funkcije rade u blocking nacinu rada - i/o operacija mora zavrsiti prije nego sto se vrati kontrola pozivatelju funkcije). U svakom slucaju, koji god od ova dva nacina rada da se odabere, trebat ce esencijalno pribjeci koristenju API funkcija iz operacijskog sustava, a to je onda nadasve platform dependent stvar i tu vise nema nikakvog pravila kako se dane funkcije zovu i koja je sintaksa njihove upotrebe, pa je o tome nemoguce opcenito pisati.
|