Stadi szoftver oldala
Click here for English version
Parallel Port Unit for Delphi
Az interneten rengeteg információ érhető el a párhuzamos port szoftveres kezeléséről, ám ezek szinte kivétel nélkül a hagyományos, port alapján történő címzést taglalják. Ezzel több gond is van: Windows NT-ben és utódaiban (2000, XP, Vista, Windows 7) a portokat nem érhetjük el közvetlenül, szükség van hozzá egy segédprogramra. Másrészt a mai alaplapokról már kezdik elhagyni a párhuzamos portot. Utóbbi esetben kézenfekvőnek látszik egy PCI vagy PCI Express foglalatba dugható párhuzamos port kártya használata, azonban ezek nem vezérelhetők a hagyományos módon, mivel más a felépítésük, emellett nem is a megszokott címekre reagálnak. A Windows ugyanakkor remekül elboldogul ezekkel a kártyákkal. Tehát lennie kell valami módnak arra, hogy egy (akár Delphi) fejlesztői környezetből is vezérelhessük e káryák portjait (is). A megoldás kézenfekvő: a Windows API-t kell használni. Sajnos azonban az interneten rendkívül kevés információt lehet találni erről. Az alábbiakban részletezett unit Andrey V. Lelikov OpenParPort projektjének delphis megfelelője.
A parport unit használata
Ez a unit lehetővé teszi a párhuzamos port használatát Delphiből, a Windows API használatával. Funkcióit az alábbi felületen keresztül érhetjük el:
type TParPortReg=(TPRData,TPRControl,TPRStatus);
A TParPortReg felsorolt típus segítségével egyszerűen hivatkozhatunk a párhuzamos port adat-, vezérlő- és állapotportjára.
function OpenParPort(PortNumber: Integer): THandle;
Az OpenParPort függvény megnyitja a PortNumber-ben megadott számú LPT portot. A port száma ugyanaz, mint amit a Windows Eszközkezelőjéből kiolvashatunk. A port handle-je a visszatérési érték.
procedure WriteParPort(Port: THandle; Reg: TParPortReg; Value: Byte);
A WriteParPort eljárás a Port-ban adott port Reg regiszterébe írja a Value értéket.
function ReadParPort(Port: THandle; Reg: TParPortReg): Byte;
A ReadParPort függvény a Port-ban adott port Reg regiszteréből kiolvasott értéket adja vissza.
procedure CloseParPort(Port: THandle);
A CloseParPort függvény lezárja a Port handle-t.
Hiányosságok
A WriteParPort csak a TPRData és TPRControl portokat tudja írni.
A ReadParPort csak a TPRStatus portot tudja olvasni.
Felhasználási feltételek
A parport unit ingyenes szoftver és a GNU LGPL 2.1 (vagy újabb) licenszfeltételei alapján használható, terjeszthető illetve módosítható. A licensz a Free Software Foundation honlapján olvasható.
Teszteredmények
A unit-ot Windows XP Professional x86 SP3 rendszeren teszteltem egy alaplapi LPT porttal és egy NM9835 chipes PCI kártyával. Kérem, hogy aki más bővítőkártyával és/vagy más operációs rendszerrel (különös tekintettel a Vistára, a Windows 7-re, valamint a 64-bites rendszerekre) próbálta a parport unit-ot, jelezze nekem a stadi kukac stadi pont hu e-mail címen.
Letöltés
parport.pas - a parport unit
Példák
A parport unit használatát bemutató demo konzolalkalmazást külön oldalon részletezem.
Ami ebben nincs benne, az a telepített és épp nem foglalt párhuzamos portok listázása. Erre használható az alábbi kódrészlet, amely a Form1 megjelenítésekor a ComboBox1-be tölti az elérhető portok listáját:
procedure TForm1.FormShow(Sender: TObject);
var
h: THandle;
i: Integer;
begin
ComboBox1.Items.Clear;
for i:=1 to 20 do
begin
h:=OpenParPort(i);
if h<>INVALID_HANDLE_VALUE then
begin
CloseParPort(h);
ComboBox1.Items.Add('LPT'+IntToStr(i));
end;
end;
if ComboBox1.Items.Count>0 then ComboBox1.ItemIndex:=0;
end;
Felhasznált anyagok
Ez a unit Andrey V. Lelikov OpenParPort projektje alapján készült.
Kapcsolat
Észrevételeket, javaslatokat, köszönőleveleket :) az alábbi címre lehet küldeni:
stadi kukac stadi pont hu