<?php echo _title;?> www.prochazka.zde.cz
www.ccsinfo.com/CEH
Server si právě čtou 2 lidí, dnes je pátek, 29. Březen 2024   
Kategorie: Programy

Ovladač portu pod WinXP

Balík knihoven napsaných ve Visual Basicu 6 a Cecku pro komunikaci mezi Vaším programem a LPT portem pod WinNT systémy (Win2000 a WinXP).

Pokud se stane že program má problémy s přístupem na LPT port počítače, nebo neočekávané ukončil činnost, stáhnete si nejnovější verzi knihovna.dll a adresaportu.dll. z: www.prochazka.zde.cz
Po stáhnutí knihoven na počítač vyhledejte místo uložení programu a nakopírujte nejnovější verze. Není třeba restartovat počítač

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á.

UPDATE: Verze: 1.9.1202.2006 knihovna.dll ze dne 14.2.2006.
******************************************************************************************

  • Opraveno: kritická chyba ve funkci OpenPort.
    Pokud nebyla knihovna AdresaPortu.dll a Knihovna.dll ze stejného archívu, tak se po prvním zavolání funkce OpenPort vrátila chyba. Po opětovném volání už funkce uspěla a vrátila nesmyslnou hodnotu. Po opravě funkce OpenPort vrátí patřičnou chybu. Je potřeba ještě zavolat funkce Error. V tomto případě vrátí hodnotu 3. To znamená, že v předchozí činnosti se ve funkci OpenPort vyskytla chyba.
    Informace: Způsob tvorby čísla verze knihovny knihovna.dll, která bude použita od této chvíle: příklad: 1.9.1202.2006 : Verze knihovny je 1.9. která vždy roste o jednu desetinu. Číslo 1202 znamená 12. února. A poslední číslo už se dá lehce odhadnou znamená rok výroby, tedy 2006.

UPDATE: Verze: 5.3.531710 knihovna.dll ze dne 5.3.2005.
******************************************************************************************

  • Opraveno: kritická chyba v rutině Unlock_.
  • Opraveno: při pokusu zadat špatnou adresu pro čtení nebo zápisu se program zhroutil. Teďka je povolen interval Adresy od 0 do 65535.

UPDATE: Verze: 25.12.2041.4 knihovna.dll ze dne 25.12.2004.
******************************************************************************************

  • Přidána funkce:
    • GET_DMA_PORT
    • GET_IRQ_PORT
    • GET_TYPE_PORT

OPRAVY: Verze: 24.7.1855.4
******************************************************************************************

  • Opraveno: drobná chyba v rutině _Unlock.

UPDATE: Verze: 1.5.08.11
******************************************************************************************

  • Přidána funkce:
    • Error

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 verze 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áš program pracuje bezvadně. V případě výskytu problémů (nechtěny pád Vašeho programu, nechtěný pád systému, …) první spuštění programu 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: 5.3.531710

Současná verze AdresaPortu je: 1.2.0.1306

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č.
    • 4 -- Zadaná služba není nainstalovaná služba. Interní restart, této funkce.
      Když je návratová hodnota funkce UnLock_ nula tak je vše v pořádku, problém si knihovna.dll vyřešila sama. Ale pokud je návratová hodnota jedna, postupujte následovně: kontaktuje autora na www.prochazka.zde.cz, nebo restartujte PC, manuálně odstraňte službu giveio a znovu restartujte počítač. Následně můžete znovu, spustil program.
    • 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ění, program muže pokračovat dále ve své funkci, není třeba ho ukončovat.
    • 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ění, program muže pokračovat dále ve své funkci, není třeba ho ukončovat.
    • 1056 -- Instance této služby je již spuštěna. Nejedna se o chybu ale o upozornění, program muže pokračovat dále ve své funkci, není třeba ho ukončovat.
  • 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í Windows registry nebo špatná verze operačního systému.
    • 3 -- Je indikována chyba z předchozí činnosti funkce OpenPort. Po prvním použití této funkce při selhání vrátí důvod neúspěchu. Pokud se funkce znovu zavolá a prvotní důvod přetrvává, tak se vrátí hodnota 3. A tím důvodem je: Nesouhlasí GUID IID__Class1 a GUID CLSID_Class1konstanty v knihovnách knihovna.dll a AdresaPortu.
  • OpenPort
    • 0 -- Vše je OK.
    • 1 -- Viz CoInitialize v MSDN
    • 2 -- Viz API CoCreateInstance v MSDN
    • 3 -- Viz QueryInterface v MSDN : Nesouhlasí GUID IID__Class1 a GUID CLSID_Class1 konstanty.
    • 4 -- Je indikována chyba z předchozí činnosti funkce OpenPort. Po prvním použití této funkce při selhání vrátí důvod neúspěchu. Pokud se funkce znovu zavolá a prvotní důvod přetrvává, tak se vrátí hodnota 3. Tím důvodem je: Nesouhlasí GUID IID__Class1 a GUID CLSID_Class1 konstanty v knihovnách knihovna.dll a AdresaPortu.

Funkce Cekat : Přesná čekací rutinka pro krátké časy. Co je ten 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ý čas pro čekání pomoci této funkce. Tuto funkci není dobré používat pro žádoucí zpoždění programu, pokud momentálně nepracujeme s paralelní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 zavolání a návrat z funkce Cekat. Tyto dvě hodnoty funkce není schopna zjistit. Je potřeba je vypočítat pomoci matematického vzorce, kde bude zohledněna rychlost procesoru. Pomocí předem zjištěného koeficientu je potřeba upravovat výsledek podle aktuální rychlosti procesoru. Koeficient je hodnota nebo počet instrukci které slouží pro zavolání funkce Cekat. Počet instrukcí se dá zjistit v assembleru, proto doporučuji si stanovit nějaký obecný koeficient. Ale zase výsledek bude přibližný, bude přesnější než když nebudete nic přičítat...

Funkce GET_DMA_PORT : Zjistí hodnotu DMA portu, na který jste se předtím dotazoval funkcí OpenPort. Není vyžadován žádní vstupní parametr. Pokud návratová hodnota je -1 tak funkce selhala nebo se jedná o port typu SPP nebo EPP pro které není k dispozici DMA.

Funkce GET_IRQ_PORT : Zjistí hodnotu IRQ portu, na který jste se předtím dotazoval funkcí OpenPort. Není vyžadován žádní vstupní parametr. Když funkce vrátí hodnotu -1, tak se nezdařila. Pro jakýkoliv typ portu je vždy k dispozici IRQ.

Funkce GET_TYPE_PORT : Zjistí typ portu. Pokud je návratová hodnota 2, jedna se o port SPP nebo EPP, když funkce vrátí hodnotu 4 potom je port typu ECP a jeho různé modifikace. Návratová hodnota -1 říká, že funkce selhala.

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. Toho lze využít při chybových hláškách, kde do titulku zadáte název aplikace nebo cokoliv co reprezentuje pravě vzniklý problém. Muže se také jednat o popis kde chyba vznikla, a podobně.

Funkce Dll_Register_Server : Zaregistruje ActiveX knihovnu do operačního systému. Parametr: Název registrované knihovny. Registrovaná knihovna musí bít ve stejném adresáři jako KNIHOVNA.DLL. Návratová hodnota: 0 znamená, že registrace proběhla OK. Hodnota -1, nepodařilo se zaregistrovat.

Funkce Dll_UnRegister_Server : Odhlásí ActiveX knihovnu z operačního systému. Parametr: Název registrované knihovny. Registrovaná knihovna musí bít ve stejném adresáři jako KNIHOVNA.DLL. Návratová hodnota: 0 znamená, že 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. Použit před jakoukoliv komunikací paralelním portem. Návratová hodnota je nula, když funkce uspěla. Pokud je návratová hodnota jedna restartujte PC, nebo manuálně odstraňte službu giveio a znovu restartujte počítač. Potom můžete spustit program využívající služeb knihovny knihovna.dll.

Funkce Lock_ : Odinstaluje ze systému knihovnu AdresaPoru.dll. Zastaví ovladač Giveio.sys a odstraní ho ze systému, uklidí po sobě v registrech. Tuto funkci proveďte, když už nebudete potřebovat pracovat s paralelním portem.

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žadovaná data.

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 služby knihovny AdresaPortu.dll sami, nebo Vás zajímá její funkce, čtete dál.
Tato knihovna zjistí adresu LPT či COM portu (pouze fyzické porty, ne virtuální) a k tomu ještě přidá Typ Portu, DMA a IRQ.
Poslední tři funkce jsou k dispozici jak z knihovny AdresaPortu.dll tak i knihovna.dll. Takže je jedno, které funkce použijete. Ale volat API funkce z knihovna.dll je podstatně jednoduší než něco vydolovat a ActiveX (AdresaPortu.dll - 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í být 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:

  • Zapis_Data
  • Zapis_Status
  • Zapis_Control
  • Cteni_Data
  • Cteni_Status
  • Cteni_Control

Místo toho, abyste používali například: Zapis($378,100) : Zapíše na LPT port hodnotu 100. Poznámka: Hodnota $378 je základní adresa LPT portu, nastavena v BOISu. Otevřete, dáte dotaz na LPT port, komunikační port pomocí funkce OpenPort z knihovny KNIHOVNA.DLL. Z návratové adresy zjistíte, zda port existuje, pokud vrácená hodnota není -1, tak paralelní port je k dispozici a můžete pracovat s funkcemi:

  • Zapis_Data
  • Zapis_Status
  • Zapis_Control
  • Cteni_Data
  • Cteni_Status
  • Cteni_Control

Např. Zapis_Data (100). Zapíše hodnotu 100 do registru paralelního portu Data LPT. 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. To za předpokladu že funkce OpenPort nevrátí hodnotu -1. Pokud se vrátí hodnota -1, tak i nadále pracujete s portem LPT1. Celé kouzlo je že nepotřebujete znát adresu požadovaného LPT, to si dokáže knihovny zjistit samy. Pouze jednou si otevřete paralelní port a posíláte/čtete data z požadovaných registrů LPT.

Způsob deklarace knihovny KNIHOVNA.DLL ve Visual Basic:

vb.net code
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
Private Declare Function GET_DMA_PORT Lib "knihovna.dll" () As Integer
Private Declare Function GET_IRQ_PORT Lib "knihovna.dll" () As Integer
Private Declare Function GET_TYPE_PORT Lib "knihovna.dll" () As Integer

Způsob ovládání LPT portu ve Visual Basic s formulářem:

vb.net code
Private Sub Form_Load()
Dim AdresaPortu As Integer
Dim rnt As Integer
 
Let Rozsah = 0
Let NazevPortu = "LPT1"
 
Let rnt = UnLock_()
If (rnt = 0 Or rnt = 183 Or rnt = 1073 Or rnt = 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:

C++ code
//************************************************************
__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) int WINAPI GET_DMA_PORT(void);
__declspec(dllimport) int WINAPI GET_IRQ_PORT(void);
__declspec(dllimport) int WINAPI GET_TYPE_PORT(void);
__declspec(dllimport) void WINAPI chyba(LPSTR text);
//************************************************************

Způsob deklarace knihovny KNIHOVNA.DLL ve Visual C++:

C++ code
//************************************************************
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) int WINAPI GET_DMA_PORT(void);
__declspec(dllimport) int WINAPI GET_IRQ_PORT(void);
__declspec(dllimport) int WINAPI GET_TYPE_PORT(void);
__declspec(dllimport) void WINAPI chyba(LPSTR text);
}
//************************************************************

Způsob ovládání LPT portu v céčku:

C++ code
...
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.

C++ code
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 tato knihovna.lib soubor.

V archívu: AdresaPortu.zip je Knihovna AdresaPortu.dll s projektem napsaným ve Visual Basic 6 který ukazuje použiti této knihovny.

V archívu: OvladacPortu.zip je Knihovna.dll a AdresaPortu.dll s projektem napsaným ve Visual Basic 6 který ukazuje použiti těchto knihoven.

V době vzniku konstrukcí jsem paralelně pracoval i na AdresaPortu.dll a Knihovna.dll a tak můžete prostudovat jejích použití v různých konstrukcích na tomto webu. Verze knihoven AdresaPortu.dll a Knihovna.dll jsou takové, které jsem měl v té době k dispozici. Pouze na této stránce jsou zmiňované knihovny nejaktuálnější.

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, nebo Programátor pamětí EEPROM 93LC56, případně Monitorování paralelního portu pod systémy Win2000 a WinXP. a nebo jakýkoliv jiný program z tohoto webu.

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 ...).

Děkuji, ž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.

print Formát pro tisk

Komentáře rss

Přidat komentář >

, knihovna.dll odpovědět
avatar
Ďakujem za odpoveď, ale postupoval som podľa Vašej dokumentácie, t.j. použil som UnLock_ a
OpenPort. Všetky funkcie cez GetProcAddres prešli bez chyby. Možno je chyba v tom, že sa mi
nepodarilo prilinkovať knihovnu.lib, linker hlásil "Invalid OMF record". Skúsim použiť
wwio.dll.
icon odpověděl(a)
avatar
Dobry den,
pokud pouzivate Builder, tak Vam nepujde nikdy prilinkovat soubor *.lib, pac ten je generovan ve Visual Studiu. Ale pro konverzi formtu existuji na netu konvertoky lib souboru z VS na Builder.

S Pozdravem
Pavel Prochazka.zde.cz
, Knihovna.dll odpovědět
avatar
V Builderi mi nefunguje ovládanie LPT, aj keď mám v adresári knihovnu.dll,AdresuPortu.dll a
GIVEIO.SYS. Používam LoadLibrary a GetProcAddress. Ak v tom istom programe nahradím
"knihovnu.dll" textom "inpout32.dll" a mená funkcií "Nacti" a "Zapis" textami "Inp32"
a "Out32" program funguje spoľahlivo, ale len v prostredí Builderu. Priamo pod OS WinXP
je nespoľahlivý. Práve preto chcem použiť Vašu knihovnu.dll aby mi do portu nič
neliezlo.
icon odpověděl(a)
avatar
Dobry den,
pokud mate projekt napsany pro jinou knihovnu umoznujici pristup na LPT port, tak se bohuzel nemuzete divit ze kdyz zmenite nazev importovane knihovny a zmenite nazvy volanych funkci tak ze vam moje knihovna nefunguje. Pokud jste cetl dokumentaco ke knihovne knihovna.dll tak je zde popsana jak se ma pouzivat. Takze nejprve MUSITE pouzit funkci UNLOCK, po ni otevrit port funkci OpenPort a teprve funkce Zapis a Cteni neco zacne delat. Priste radim nejprve ctete a pak se ptejne. Navic knihovna knihovna.dll uz neni dale vyvijena. jeji podpora je ukoncena. Doporucuji prejit na knihovni wwio.dll coz je nova verze knihovny pro praci s LPT porty. Navic je ji mozno pouzit jak ve WinXP tak i ve WinVista. Novou verzi najdete taktez na mem webu:
[:b] http://prochazka.profitux.cz/knihovna-pro-pristup-na-lpt-porty-pod-winxp-a-winvista.a53.html[:/b]
Je tam uveden kompletni kod ve Visual Basicu NET. Tak i testovaci projekt v Cecku samozrejme pro Visual Studio NET.

S pozdravem
Pavel Prochazka.zde.cz
, stahování odpovědět
avatar
Taky mi nejde stahovat knihovna.Napíše mi to hlášku že na udané adrese nebylo nic nalezeno.Zkoušel jsem to několikrát.Potřebuji monitorovat LPT vstup pro další zpracování,ale mám problém - monitorování běží v cyklu a navazující program mi to asi blokuje.Neporadíte jak na to?Zkouším to ve VB6 a nejsem zrovna odborník na programování.Chtěl jsem vyzkoušet Váš kód jestli by nešel použít po úpravě.
icon odpověděl(a)
avatar
dobry den,
analizoval jsem problem a v soucasne dome pracuji na oprave, ktera bude nejaky cas trvat.
Prosim ozvete se me na email a obratem poslu pozadovany soubory...

, stahování odpovědět
avatar
Nevím čím autor těchto stránek testuje stahování, ale z těhle stránek nejde stáhnout vůbec nic. Nefunguje Explorer, Mozilla ani Opera. A nejsem jediný, kdo s tím má problémy. A chodit k nějakému jinému PC nebo potažmo k někomu jinému zkusit si odtud něco stáhnout, mi připadne trochu víc než divné.
icon odpověděl(a)
avatar
Dobry den, priste prosim o konkretnejsi popich udajne chyby. Nepise Vam nahodou prohlizec toto:
[:b] Internet Explorer cannot display the webpage[:/b] pokud ano, dejte tlacitko zpet z zkuste to znovu. Tento web ma free hosting a ten neni 100% spolehlivy. Kdyz si prohlizim statistiky stazeni souboru (ty si muzete take prohlizet, ale je vyzadovana registrace) tak zistite ze si nekdo z tohoto webu stahoval soubory. Takze stahovani funguje. Testovano na IE7, IE8, MAXTHON a OPERA. Samozrejme se vsema poslednima zaplatama.
, KNIHOVNA dll odpovědět
avatar
NEBEZI STAHOVANIE
icon odpověděl(a)
avatar
Zdravim,
ten sami pripad, sprave jsem proveril stahnuti souboru: knihovna.lib, AdresaPortu.zip a OvladacPortu.zip, Vse funguje jak má. Mozna v tu chvili mel serwer nejakou slabou chvilku. A nebo to skuste stahnout z jineho pocitace s jinou konfiguraci SW!

Všechny informace jsou zahrnuty pod GPL licenci, pokud není explicitně uveden jiný typ licence.
Používání těchto stránek ke komerčním účelům lze jen se souhlasem autora.
Všechna práva vyhrazena (c) 1997 - 2024 hacesoft.
Jste návštevník číslo: 370168
Celkem zobrazeno stránek: 12276416
Přihlásit do administrace