Pomocí této knihovny můžete ve Visual
Basicu a Céčku pracovat s LPT porty pod systémy Win2000 a
WinXP. V Biosu nastavte LPT port na ECP + EPP. Další nastavení
jako DMA a adresa portu, muže bit libovolná.
OPRAVY: Verze:
24.7.1855.4 ******************************************************************************************
- Opraveno: drobná chyba v rutině _Unlock.
OPRAVY: Verze:
1.5.08.11 ******************************************************************************************
OPRAVY: Verze:
1.4.21.6 ******************************************************************************************
- Podstatně urychlené funkce:
- Zapis
- Zapis_Data
- Zapis_Status
- Zapis_Control
- Cteni
- Cteni_Data
- Cteni_Status
- Cteni_Control
- Funkce: OpenPort je také malinko urychlena. První volaní
trvá stejně jako u staré verzi. V Následujícím volání se
porovnávají vstupní parametry s předešlýma a pokud se
shodují vrátí se tentýž výsledek.
OPRAVY: Verze:
1.3.21.4 ******************************************************************************************
- Opraveno: drobná chyba v rutině Cekat.
OPRAVY: Verze:
1.2.12.4 ******************************************************************************************
- Opraveno: funkce UnLock_ a Lock_, Vaše programy mohou
využívat služeb knihovny KNIHOVNA.DLL a je jedno kolik
programu pracuje s LPT portem nebo odemčeným paměťovým
prostorem. Od této verzi je zajištěno že ovladač GIVEIO.SYS
je k dispozici po dobu práce všech programu, využívající
služby KNIHOVNA.DLL. Za předpokladu že Vás program pracuje
bezvadně (nechtěny pád Vašeho programu, nechtěný pád
systému, …). V takových případech první program využívající
služeb KNIHOVNA.DLL, konkrétně funkce UnLock_ , opraví
případné možné potíže.
- Přidána funkce Cekat. Která je postavena na API funkci:
QueryPerformanceCounter.
- Knihovna KNIHOVNA.DLL je kompilována s důrazem na
rychlost.
- Funkce Chyba je od této verze exportována.
OPRAVY: Verze:
1.1.60530.0 ******************************************************************************************
- Vylepšená registrace knihovny AdresaPortu.dll
- Opraveno: Nebylo možno používat KNIHOVNU.DLL pokud jiný
program používal ovladač Giveio.sys. Například : Motherboard
Monitor 5.
- Přidána funkce Dll_Register_Server
- Přidána funkce Dll_UnRegister_Server
Tento program, knihovna AdresaPortu.dll a
knihovna.dll můžete používat neomezeně pro NEKOMERČNÍ
účely!!!
POZOR: Důležitá poznámka: Všechny
tři soubory (Knihovna.dll, AdresaPortu.dll a Giveio.sys) MUSÍ
být ve stejném adresáři!!!
Ještě jedna poznámka: Ke knihovně
KNIHOVNA.DLL musíte použít pouze knihovnu AdresaPortu.dll tu,
která se nachází v tomto archívu. Jiná verze nebude
spolupracovat.
Současná verze KNIHOVNA.DLL je:
1.4.21.6
Současná verze AdresaPortu je:
1.2.0.1301
Popis jednotlivých funkcí knihovny KNIHOVNA.DLL:
Funkce Error: vrátí podrobnější
popis proč určitá funkce selhala :
- Dll_Register_Server a Dll_UnRegister_Server:
- 0 -- Vše je OK.
- 1 -- Viz MSDN API funkce LoadLibraryEx
- 2 -- Nejedná se o ActiveX knihovnu.
- 3 -- Selhala API funkce
GetProcAddress.
- UnLock_
- 0 -- Vše je OK.
- 1 -- Funkce vyžaduje administrátorská práva.
- 2 -- Nejde nainstalovat giveio.sys ovladač.
- 3 -- Nejde spustit giveio.sys ovladač.
- 101 -- Viz MSDN API funkce LoadLibraryEx
- 102 -- Soubor AdresaPortu.dll není ActiveX
knihovnou.
- 103 -- Selhala API funkce GetProcAddress.
- 183 - Nelze vytvořit soubor, který již existuje.
Nejedna se o chybu ale o upozorněni, program muže
pokračovat dále.
- 1072 - Zadané zařízení je určeno na odstranění. Zkuste
to znovu.
- 1073 - Zadaná služba již existuje. Nejedna se o chybu
ale o upozorněni, program muže pokračovat dále.
- 1056 -- Instance této služby je již spuštěna. Nejedna
se o chybu ale o upozorněni, program muže pokračovat
dále.
- Lock_
- 0 -- Vše je OK.
- 1 -- Nejde odstranit ActiveX knihovnu.
- 2 -- Funkce vyžaduje administrátorská práva.
- 3 -- Ovladač Giveio.sys byl zastaven.
- 4 -- Ovladač Giveio.sys byl
odstraněn.
- Zapis a Cteni
- 0 -- Vše je OK.
- 1 -- Zápis se neprovedl, nelze otevřít giveio.sys
ovladač. Selhala funkce
CreateFile.
- Zapis_Data, Zapis_Status, Zapis_Control, Ctení_Status,
Ctení_Control a Ctení_Control
- 0 -- Vše je OK.
- 1 -- Zápis se neprovedl, nelze otevřít giveio.sys
ovladač. Selhala funkce CreateFile.
- 2 -- Zápis se neprovedl, je spatná adresa,
pravděpodobně nekonzistentní win registry nebo špatná
verze win.
- OpenPort
- 0 -- Vše je OK.
- 1 -- Viz CoInitialize v MSDN
- 2 -- Viz API CoCreateInstance v MSDN
- 3 -- Viz QueryInterface v MSDN
Funkce Cekat : Přesná čekací
rutinka pro krátké časy! Co je to krátký čas? - Doba po kterou
procesor není vytížen na 100%. Například: 5000 ms je už velmi
dlouhá doba, 100 ms = 0.1 s, je asi maximální rozumná doba.
Tuto funkci není dobré používat pro žádoucí zpoždění programu,
pokud momentálně nepracujeme s paralérním portem.
Vstupní parametr : doba čekání v milisekundách. Návratová
hodnota : skutečná doba čekání v milisekundách. Pro přesné
zjištění, jak dlouho se čekalo je třeba připočíst čas který je
zapotřebí pro zavolaní a návrat z funkce Cekat!
Funkce Chyba : Vrátí název chyby
která je reprezentována číslem chyby API funkce
GetLastError(), v jazykové mutaci Windows (když máte MS
Windows v češtině, tak chyba je také v češtině). Nevrací
žádnou hodnotu. Vstupní parametr je pouze text, který bude
zobrazen v titulku chyby.
Funkce Dll_Register_Server :
Zaregistruje ActiveX knihovnu. Parametr: Název registrované
knihovny. Registrovaná knihovna musí bít ve stejném adresáři
jako KNIHOVNA.DLL. Návratová hodnota: 0 znamená registrace
proběhla OK. Hodnota -1, nepodařilo se zaregistrovat.
Funkce Dll_UnRegister_Server :
Odregistruje ActiveX knihovnu. Parametr: Název registrované
knihovny. Registrovaná knihovna musí bít ve stejném adresáři
jako KNIHOVNA.DLL. Návratová hodnota: 0 znamená registrace
proběhla OK. Hodnota -1, nepodařilo se zaregistrovat.
Funkce UnLock_ : Nainstaluje
knihovnu AdresaPortu.dll (jedna se o knihovnu napsanou ActiveX
technologii). Nainstaluje ovladač Giveio.sys a spustí ho.
Nutno použit před používání portu.
Funkce Lock_ : Odinstaluje ze
systému knihovnu AdresaPoru.dll. Zastaví ovladač Giveio.sys a
odstraní ho ze systému. A uklidí po sobe v registrech. Tuto
funkci proveďte, když už nebudete potřebovat pracovat s
porty.
Funkce Zapis : Zapíše byte
(hodnotu v rozmezí 0 až 255) na určenou adresu. Parametry:
Port -> Kam zapsat. Data -> Co zapsat. Vždy vrátí
hodnotu kam zapsal požadovanou hodnotu.
Funkce Cteni : Přečte hodnotu byte
z určené adresy. Parametr: Port -> Odkud číst. Vždy vrátí
hodnotu kterou přečetl z požadované adresy.
Funkce Zapis_Data : Zapíše byte na
Adresu+Base (adresu kterou dodá knihovna AdresaPortu.dll).
Base =0. Pokud požadovaný LPT port není otevřen(dotaz na LPT
port), funkce vrátí hodnotu -1. Jinak vrátí adresu na kterou
požadovanou hodnotu zapsala. Parametr: Data -> jakou
hodnotu zapsat.
Funkce Zapis_Status : Zapíše byte
na Adresu+Base (adresu kterou dodá knihovna AdresaPortu.dll).
Base =1. Pokud požadovaný LPT port není otevřen(dotaz na LPT
port), funkce vrátí hodnotu -1. Jinak vrátí adresu na kterou
požadovanou hodnotu zapsala. Parametr: Data -> jakou
hodnotu zapsat.
Funkce Zapis_Control : Zapíše byte
na Adresu+Base (adresu kterou dodá knihovna AdresaPortu.dll).
Base =2. Pokud požadovaný LPT port není otevřen(dotaz na LPT
port), funkce vrátí hodnotu -1. Jinak vrátí adresu na kterou
požadovanou hodnotu zapsala. Parametr: Data -> jakou
hodnotu zapsat.
Funkce Ctení_Data : Přečte hodnotu
byte z Adresy+Base (adresu kterou dodá knihovna
AdresaPortu.dll). Base=0. Pokud požadovaný LPT port není
otevřen(dotaz na LPT port), funkce vrátí hodnotu -1. Jinak
vrátí hodnotu kterou přečetla.
Funkce Ctení_Status : Přečte
hodnotu byte z Adresy+Base (adresu kterou dodá knihovna
AdresaPortu.dll). Base=1. Pokud požadovaný LPT port není
otevřen(dotaz na LPT port), funkce vrátí hodnotu -1. Jinak
vrátí hodnotu kterou přečetla.
Funkce Ctení_Control : Přečte
hodnotu byte z Adresy+Base (adresu kterou dodá knihovna
AdresaPortu.dll). Base=2. Pokud požadovaný LPT port není
otevřen(dotaz na LPT port), funkce vrátí hodnotu -1. Jinak
vrátí hodnotu kterou přečetla.
Funkce OpenPort : Otevře LPT port
(Dotaz na LPT port). Tato funkce se volá z knihovny
KNIHOVNA.DLL a ta pak volá knihovnu AdresaPortu.dll.
Vstupní parametry: |
Název Portu: |
Je to řetězec obsahující název portu. |
|
Rozsah: |
Uplatňuje se jen při hledání adresy LPT
portu. hodnota je 0 nebo 1. Nastavujte vždy hodnotu
0! |
|
Popis funkce knihovny AdresaPortu.dll:
Tuto knihovnu si volá knihovna
KNIHOVNA.DLL sama podle potřeby. V případe že chcete použít
její služby sami, nebo vás zajímá její funkce, čtete
dál. Tato knihovna má jen jednu funkci. Zjistí adresu LPT
či COM portu (pouze fyzické porty, ne virtuální). Knihovna
je napsaná ve VB6.
Vstupní parametry: |
Název Portu>: |
Je to řetězec obsahující název portu. Přípustné
názvy: |
LPT1, LPT2, LPT3 a LPT4 COM1, COM2, COM3 a
COM4 Názvy musí byt velkýma písmeny. |
|
Rozsah: |
Uplatňuje se jen při hledání adresy LPT
portu. hodnota je 0 nebo 1. Nastavujte vždy hodnotu
0! |
Funkce vrátí hodnotu požadovaného portu.
Nebo hodnotu -1 pokud port NENALEZEN!
Při dotazu na paralelní port (LPT1, LPT2,
LPT3 a LPT4) máte možnost pracovat z funkcemi:
Místo toho abyste používali např.:
Zapis($378,100) -> Zapíše na LPT port hodnotu 100. Pozn.
Hodnota $378 je základní adresa LPT portu, nastavena v
BOISu!!! Otevřete (dáte dotaz na LPT port), z návratové adresy
zjistíte jestli port existuje, pokud návratová hodnota není
-1, tak port existuje a můžete pracovat z funkcemi:
Např. Zapis_Data (100). Zapíše hodnotu do
registru Data LPT portu hodnotu 100. Pokud dáte dotaz na
Adresu COM1 portu (předtím jste se dotazoval na LPT1 port), i
nadále pracujete s portem LPT1. Pokud ale dáte dotaz na LPT2
tak už pracujete s portem LPT2! A to za předpokladu že vám
nevrátí hodnotu -1. Pokud se vrátí hodnota -1. Tak i nadále
pracujete s portem LPT1! Kouzlo je cele v tom že nepotřebujete
znát adresu požadovaného LPT, to si dokáže knihovny zjistit
samy. Pouze jednou si otevřete požadovaný paralérní port a
posíláte/čtete data z požadovaných registru portu.
Způsob deklarace knihovny KNIHOVNA.DLL ve Visual
Basic:
Private Declare Function
OpenPort Lib "knihovna.dll" (ByVal Port
As String, ByVal
Rozsah As Integer)
As Integer 'Otevre a dotaz na Port.
|
Private Declare Function
UnLock_ Lib "knihovna.dll" () As Integer 'Otevre *.sys ovladac. |
Private Declare Function
Lock_ Lib "knihovna.dll" () As Integer 'Zavre *.sys ovladac. |
Private Declare Function
Dll_Register_Server
Lib "knihovna.dll" (ByVal Reg
As String) As
Integer |
Private Declare Function
Dll_UnRegister_Server
Lib "knihovna.dll" (ByVal Reg
As String) As
Integer |
Private Declare Function
Zapis Lib "knihovna.dll" (ByVal Port
As Integer, ByVal
Data As Byte)
As Integer |
Private Declare Function
Zapis_Data Lib "knihovna.dll" (ByVal Data
As Byte) As
Integer |
Private Declare Function
Zapis_Status Lib "knihovna.dll" (ByVal Data
As Byte) As
Integer |
Private Declare Function
Zapis_Control Lib "knihovna.dll" (ByVal Data
As Byte) As
Integer |
Private Declare Function
Cteni Lib "knihovna.dll" (ByVal Port
As Integer) As
Integer |
Private Declare Function
Cteni_Data Lib "knihovna.dll" () As Integer |
Private Declare Function
Cteni_Status Lib "knihovna.dll" () As Integer |
Private Declare Function
Cteni_Control Lib "knihovna.dll" () As Integer |
Private Declare Function
Error Lib "knihovna.dll" () As Integer |
Private Declare Function
chyba Lib "knihovna.dll" (ByVal text
As String) As
Integer |
Private Declare Function
Cekat Lib "knihovna.dll" (ByVal delka
As Integer) As
Integer |
Způsob ovládání LPT portu ve Visual Basic s
formulářem:
Private Sub
Form_Load() |
Dim AdresaPortu As Integer |
Dim rnt As Integer |
|
Let Rozsah = 0 |
Let NazevPortu =
"LPT1" |
|
Let rnt = UnLock_() |
If (Error() = 0 Or 183 Or 1073 Or 1056) Then |
|
AdresaPortu = OpenPort(NazevPortu,
Rozsah) |
If (Error() =
0) Then |
|
... |
inicializece HW |
... |
|
Else: Rem Zpracovani chyby |
End If |
Else:
Rem Zpracovani chyby |
End If |
End
Sub |
Způsob deklarace knihovny KNIHOVNA.DLL ve Visual C:
//************************************************************ |
__declspec(dllimport) int
WINAPI
Dll_Register_Server(LPSTR Knihovna); |
__declspec(dllimport) int
WINAPI
Dll_UnRegister_Server(LPSTR Knihovna); |
__declspec(dllimport) int
WINAPI UnLock_(void); |
__declspec(dllimport) int
WINAPI Lock_(void); |
__declspec(dllimport) int
WINAPI OpenPort(LPSTR Port,
int Rozsah); |
__declspec(dllimport) int
WINAPI Zapis_Data(byte
hodnota); |
__declspec(dllimport) int
WINAPI Zapis_Control(byte
hodnota); |
__declspec(dllimport) int
WINAPI Zapis_Status(byte
hodnota); |
__declspec(dllimport) int
WINAPI Zapis(int AdresaPortu,
byte hodnota); |
__declspec(dllimport) int
WINAPI Cteni_Data(void); |
__declspec(dllimport) int
WINAPI
Cteni_Control(void); |
__declspec(dllimport) int
WINAPI
Cteni_Status(void); |
__declspec(dllimport) int
WINAPI Cteni(int
AdresaPortu); |
__declspec(dllimport) int
WINAPI Cekat(unsigned int
delka); |
__declspec(dllimport) int
WINAPI CekatEx(unsigned int
delka); |
__declspec(dllimport) int
WINAPI Error(void); |
__declspec(dllimport) void
WINAPI chyba(LPSTR
text); |
//************************************************************ |
Způsob deklarace knihovny KNIHOVNA.DLL ve Visual C++:
//************************************************************ |
extern
"C" |
{ |
__declspec(dllimport) int
WINAPI
Dll_Register_Server(LPSTR Knihovna); |
__declspec(dllimport) int
WINAPI
Dll_UnRegister_Server(LPSTR Knihovna); |
__declspec(dllimport) int
WINAPI UnLock_(void); |
__declspec(dllimport) int
WINAPI Lock_(void); |
__declspec(dllimport) int
WINAPI OpenPort(LPSTR Port,
int Rozsah); |
__declspec(dllimport) int
WINAPI Zapis_Data(byte
hodnota); |
__declspec(dllimport) int
WINAPI Zapis_Control(byte
hodnota); |
__declspec(dllimport) int
WINAPI Zapis_Status(byte
hodnota); |
__declspec(dllimport) int
WINAPI Zapis(int AdresaPortu,
byte hodnota); |
__declspec(dllimport) int
WINAPI Cteni_Data(void); |
__declspec(dllimport) int
WINAPI
Cteni_Control(void); |
__declspec(dllimport) int
WINAPI
Cteni_Status(void); |
__declspec(dllimport) int
WINAPI Cteni(int
AdresaPortu); |
__declspec(dllimport) int
WINAPI Cekat(unsigned int
delka); |
__declspec(dllimport) int
WINAPI CekatEx(unsigned int
delka); |
__declspec(dllimport) int
WINAPI Error(void); |
__declspec(dllimport) void
WINAPI chyba(LPSTR
text); |
} |
//************************************************************ |
Způsob ovládání LPT portu v céčku:
... |
UnLock_(); |
if(Error() == 0
&& 183 && 1073 && 1056){ |
AdresaPortu = OpenPort("LPT1",
0); |
if(Error() == 0){ |
... |
Zapis(AdresaPortu
+ 0,hodnota); //Data |
Zapis(AdresaPortu
+ 1,hodnota); //Status |
Zapis(AdresaPortu
+ 2,hodnota); //Control |
hodnota =
Cteni(AdresaPortu + 0); //Data |
hodnota =
Cteni(AdresaPortu + 1); //Status |
hodnota =
Cteni(AdresaPortu + 2); //Control |
... |
} |
} |
else{ |
... |
Zpracovaní chyby |
... |
} |
Lock_(); |
... |
Nebo, nejpohodlnější způsob práce s LPT porty.
int AdresaPortu =
0; |
byte LPT_Registr_Data; |
byte LPT_Registr_Control; |
byte LPT_Registr_Status; |
... |
UnLock_(); // |
if(Error() == 0
&& 183 && 1073 && 1056)){ |
AdresaPortu = OpenPort("LPT1",
0); |
if(Error() == 0){ |
... |
Zapis_Data(hodnota); |
Zapis_Control(hodnota); |
Zapis_Status(hodnota); |
LPT_Registr_Data
= Cteni_Data(); |
LPT_Registr_Control
= Cteni_Control(); |
LPT_Registr_Status
= Cteni_Status(); |
.. |
} |
} |
else{ |
... |
Zpracovaní chyby |
... |
} |
Lock_(); |
... |
Dále je třeba k projektu v C nebo C++
přilinkovat tento knihovna.lib
soubor.
Stáhnout OvladacPortu.zip
V konstrukci Lcd
ovladac201.zip ( Komplexní řešení připojení LCD zobrazovače s
radičem HD44780 k LPT portu ) můžete prostudovat způsob
použití knihovny: Knihovna.DLL.
Ujednání:
Tento
archív můžete neomezeně šířit pouze kompletní! Tento archív
se nesmí za úplatu kopírovat a šířit. Nesmí být
použit v KOMERČNÍCH projektech bez souhlasu autora. Pokud
používáte tyto knihovny ve svém programu, už nemusíte
přikládat kompletní archív ani dokumentaci. Postačí, ze
uvedete zdroj a odkaz na server www.prochazka.zde.cz těchto
knihoven v dokumentaci o vašem programu nebo aboutu (O
Aplikaci ...).
Dekuji že používáte tyto produkty.
Autor ovladaču Giveio.SYS je: Dale
Roberts, Direct I/O and Windows
NT ftp://ftp.mfi.com/pub/windev/1995/may95.zip. |