📄 aktivnilptport.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 + -