⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 aktivnilptport.h

📁 pc paralel port programming
💻 H
字号:
// AktivniLPTPort.h: interface for the CAktivniLPTPort class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_AKTIVNILPTPORT_H__6CAB7DD3_CAD5_4B9F_89FC_D96022477B08__INCLUDED_)
#define AFX_AKTIVNILPTPORT_H__6CAB7DD3_CAD5_4B9F_89FC_D96022477B08__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "KontrolaLPTRegistara.h"
#include <string>
class CLPTPort;
class CWin32LPT;

class CAktivniLPTPort : public CKontrolaLPTRegistara
{
public:
	CAktivniLPTPort(bool koristiOS = true);
	virtual ~CAktivniLPTPort();

    // Postavlja dati port za aktivni; vraca false ako ne uspe.
    bool Otvori(std::string nazivPorta);

    // Zatvara trenutno aktivni port; vraca false u slucaju greske.
    bool Zatvori(void);

    // Vraca true ako je port otvoren
    bool Otvoren(void);

    // Vraca naziv porta
    std::string Naziv(void);

    // Definise da li treba otvaranje porta preko funkcija operativnog sistema(OS)
    void KoristiOSopen(bool aktivan);
    bool KoristiOSopen(void);

    // Funkcije koje mogu da se podese da komande za manipulaciju bitovima
    // rade direktno sa pinovima.
    bool RadSaPinovima(void);
    void RadSaPinovima(bool radSaPinovima);

    //////////////////////////////////////////////////////////////////////
    // Funkcije koje implementiraju 'interfejs' CKontrolaLPTRegistara
    // NAPOMENA: funkcije interfejsa samo prosledjuju poziv odgovarajucim
    //           funkcijama klase 'CLPTPort' koja takodje implementira 
    //           ovaj interfejs.
    //////////////////////////////////////////////////////////////////////

    //////////////////////////////////////////////////////////////////////
    // Funkcije za manipulaciju pojedinim bitovima.
    //////////////////////////////////////////////////////////////////////

    // Bitovi koji se ne pominju u bit masci ostaju NEIZMENJENI (ako je to izvodljivo).
    // Funkcije vracaju vrednost 0.
    // (trebalo je da vracaju vrednost svih bitova ali zbog performansi je to izbaceno).
    int Postavi(int bitMaska, LPT::ECiljKomande bitPin = LPT::DEFAULT);
    int Obori(int bitMaska, LPT::ECiljKomande bitPin = LPT::DEFAULT);

    // Citanje vrednosti bitova
    int Procitaj(int bitMaska, LPT::ECiljKomande bitPin = LPT::DEFAULT);

    // Vraca true ako je dati bit setovan.
    // Uzima u obzir samo prvi bit definisan maskom.
    bool Postavljen(int bitMaska, LPT::ECiljKomande bitPin = LPT::DEFAULT);

    //////////////////////////////////////////////////////////////////////
    // Funkcije za manipulaciju registrima.
    //////////////////////////////////////////////////////////////////////

    // Setuju se SVI BITOVI datog registra na vrednost definisanu parametrom 'val'.
    int PostaviSadrzaj(const std::string& reg, int val, LPT::ECiljKomande bitPin = LPT::DEFAULT);

    // Citanje vrednosti registra
    int ProcitajSadrzaj(const std::string& reg, LPT::ECiljKomande bitPin = LPT::DEFAULT);

    // Dozvole pristupa registrima:
    //  - citanje dozvola
    bool MoguceCitanje(const std::string& reg);
    bool MogucUpis(const std::string& reg);
    //  - setovanje dozvola
    void MoguceCitanje(const std::string& reg, bool omoguci);
    void MogucUpis(const std::string& reg, bool omoguci);

private:
    //////////////////////////////////////////////////////////////////////
    // Pomocne funkcije 
    //////////////////////////////////////////////////////////////////////

    CLPTPort* DajPortPtr(void);

    // Sledeci 'typedef' definisu pokazivace na funkcije clanice klase CLPTPort:
    //  - funkcija koja uzima jedan argument tipa 'int' i vraca vrednost tipa 'int'
    typedef int (CLPTPort::*t_BitFunkcijaPtr)(int, LPT::ECiljKomande);
    //  - funkcija koja uzima jedan argument tipa 'const string&' i vraca vrednost tipa 'bool'
    typedef bool (CLPTPort::*t_GetRegDozvolaFunPtr)(const std::string&);
    //  - funkcija koja uzima dva argumenta : tipa 'cnost string&' i tipa 'bool' i ne vraca nista
    typedef void (CLPTPort::*t_SetRegDozvolaFunPtr)(const std::string&, bool);

    //////////////////////////////////////////////////////////////////////
    // Funkcije za prosledjivanje poziva odgovarajucim funkcijama klase CLPTPort
    //////////////////////////////////////////////////////////////////////

    int PozoviBitFunkciju(t_BitFunkcijaPtr pBitFunkcija, int bitMaska, LPT::ECiljKomande bitPin);
    bool PozoviGetRegDozvola(t_GetRegDozvolaFunPtr pFun, const std::string& reg);
    void PozoviSetRegDozvola(t_SetRegDozvolaFunPtr pFun, const std::string& reg, bool omoguci);

    // Funkcija proverava da li dati naziv moze da bude naziv porta.
    // Ako ne moze, vraca naziv koji preporucuje umesto datog naziva.
    std::string ProveriNazivPorta(const std::string& nazivPorta);

    // Funkcije za manipulisanje portom na nivou operativnog sistema
    bool OtvoriPortOS(const std::string& nazivPorta);
    bool ObrisiPortOS(void);

    // Funkcija odredjuje cilj komanda za rad sa registrima (bitovi ili pinovi)
    LPT::ECiljKomande ProveriCiljKomande(LPT::ECiljKomande bitPin);

private:
    // Naziv aktivnog porta.
    // Ako nijedan port trenutno nije aktivan ima vrednost 'NEDEFINISAN'.
    std::string port_m;
    static const std::string NEDEFINISAN;
    CLPTPort* portPtr_m; // za 'kesiranje' pokazivaca na port
                         // (da ne bih stalno propitivao spisak portova)

    // Pokazivac na objekat za baratanje portom preko WIN32 API-ja
    CWin32LPT* pOSport_m;
    bool koristiOSopen_m; // definise da li treba da se koristi funkcije operativnog sistema
                          // za otvaranje i zatvaranje porta

    // Definise da li se radi sa pinovima ili bitovima
    LPT::ECiljKomande ciljBitKomande_m;
};

#endif // !defined(AFX_AKTIVNILPTPORT_H__6CAB7DD3_CAD5_4B9F_89FC_D96022477B08__INCLUDED_)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -