Home
Knihovnicka
Konstrukce
Programovani
Jak na to
Stahnout
Odkazy
Kontakty

Poslat EMAIL

Jak si vede Tento

server?   

Stránky si prohlížíte pouze Vy.

© 2000 - 2004
HaCeSOFT

Ovladač portu     

   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
******************************************************************************************

  • 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 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:

  • Zapis_Data
  • Zapis_Status
  • Zapis_Control

  • Cteni_Data
  • Cteni_Status
  • Cteni_Control

   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:

  • Zapis_Data
  • Zapis_Status
  • Zapis_Control

  • Cteni_Data
  • Cteni_Status
  • Cteni_Control

   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.