📄 lptregistar.h
字号:
// LPTRegistar.h: interface for the CLPTRegistar class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_LPTREGISTAR_H__3B6B9539_FF2C_46C2_AD52_C6B9BC183376__INCLUDED_)
#define AFX_LPTREGISTAR_H__3B6B9539_FF2C_46C2_AD52_C6B9BC183376__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "LPTDefRegistar.h"
//#include "SpisakBitova.h"
#include "SpisakBitovaFast.h"
#include <string>
class CLPTRegistar
{
public:
CLPTRegistar(int adresaPorta);
virtual ~CLPTRegistar();
public:
// Funkcija vraca tekucu vrednost registra
short DajSadrzaj(void);
// Funkcija vraca stanje pinova koje odgovara tekucem sadrzaju registra
short DajStanjePinova(void);
// Funkcija cita registar LPT porta i vraca :
// - sadrzaj registra, ako je posmatrajPinove=false ili
// - stanje pinova, ako je posmatrajPinove=true
short Procitaj(bool posmatrajPinove = true);
// Funkcija salje datu vrednost na LPT port.
// Ako je posmatrajPinove=false, postavlja sadrzaj registra na datu vrednost.
// Ako je posmatrajPinove=true, postavlja pinove na datu vrednost.
void Posalji(short sadrzaj, bool posmatrajPinove);
//////////////////////////////////////////////////////////////////////
// Funkcije koje zavise od konkretnog registra
// (treba da se definisu u izvedenim klasama)
//////////////////////////////////////////////////////////////////////
// Funkcija vraca naziv registra
// NAPOMENA: nazivi treba da budu jedinstveni (koristim ih kao ID-ove)
virtual std::string Naziv(void) = 0;
// Funkcija vraca ofset registra u odnosu na baznu adresu porta
virtual short Offset(void) = 0;
// Funkcija vraca true ako maska sadrzi bar jedan bit registra
bool AdresiranMaskom(int bitMaska);
// Postavlja bitove sadrzaja u pozicije definisane maskom za dati registar
// Ako je posmatrajPinove=true, za svaki bit koji ima inverznu logiku,
// vraca komplementarnu vrednost.
int RasporediBitoveSadrzajaUMasku(bool posmatrajPinove);
// Vraca true ako je dati bit sadrzaja setovan
// Ako je posmatrajPinove=true i ako bit ima inverznu logiku,
// vraca komplementarnu vrednost.
// Ako je posmatrajPinove=false vraca bit bez komplementiranja.
bool Postavljen(int bitMaska, bool posmatrajPinove);
// Funkcije za setovanje pojedinih bitova registra (ako je upis u registar moguc).
// Bitovi koji se ne pominju u bit masci ostaju NEIZMENJENI.
// Ako je proveriInvert=true, bitove koji se odnose na 'invertovane pinove'
// postavlja na 0, a ne na 1.
void Postavi(int bitMaska, bool posmatrajPinove);
// Ako je proveriInvert=true, bitove koji se odnose na 'invertovane pinove'
// postavlja na 1, a ne na 0.
void Obori(int bitMaska, bool posmatrajPinove);
// Get
bool MoguceCitanje(void);
bool MogucUpis(void);
// Set
void MoguceCitanje(bool omoguci);
void MogucUpis(bool omoguci);
protected:
// Funkcija koju treba pozvati u konstruktoru izvedenih klasa
virtual void Inicijalizuj(bool moguceCitanje, bool mogucUpis);
// Funkcija koja definise spisak bitova za konkretni registar
virtual void FormirajSpisakBitova(void) = 0;
// Funkcija vraca masku koja ima jedinice na pozicijama koje odgovaraju
// bitovima koji pripadaju registru i nule na ostalim pozicijama
virtual int FormirajMaskuZaRegistar(void);
inline int BrojBitovaMaske(void);
inline int BrojBitovaSadrzaja(void);
// Funkcija vraca redni broj bita sadrzaja koji odgovara datom bitu maske.
// Redni brojevi idu od 0(za bit najmanje tezine sadrzaja).
virtual int PozicijaBitaUSadrzaju(int bitMaska);
// Funkcija vraca true ako je pin koji odgovara bitu invertovan
virtual bool PinInvertovan(int bitMaska);
// Funkcija izdvaja samo jedan bit u datoj masci ('prvi').
// Ako nijedan bit nije setovan, vraca 0.
virtual int PrviBitMaske(int bitMaska);
protected:
// definicije bitova registra
// CSpisakBitova spisakBitova;
CSpisakBitovaFast spisakBitova;
private:
//////////////////////////////////////////////////////////////////////
// Pomocne funkcije
//////////////////////////////////////////////////////////////////////
// Set
void PostaviSadrzaj(short noviSadrzaj);
// Funkcija izdvaja bit na datoj poziciji iz sadrzaja i
// pomera ga na poziciju najmanje tezine.
int IzdvojiBitIPomeriNaLSB(unsigned int pozicija, int sadrzaj);
// Funkcija vraca poziciju jedinice sa datim indeksom u datoj masci
// (indeksi pocinju od 0, a bit najmanje tezine u masci ima poziciju 0).
// Na primer, u masci 00001100, jedinica sa indeksom 0 je na poziciji 2,
// jedinica sa indeksom 1 je na poziciji 3,...
// (gleda se sdesna ulevo tj. od bita najmanje tezine).
// Ako ne nadje, vraca -1.
int DajPozicijuJedinice(unsigned int indeks, int maska);
// Funkcija postavlja na 1 ili na 0 vrednost bitova definisanih datom maskom
// (ako je snimanje u registar dozvoljeno).
// Parametar definise da li se bitovi postavljaju na 1 ili na 0.
void NasetujIzabraneBitove(int bitMaska, bool postaviNaJedinicu, bool posmatrajPinove);
// Funkcija komplementira bit najmanje tezine
inline void NegirajLSB(int& vrednost);
private:
int adresa_m; // adresa registra
short sadrzaj_m; // poslednja vrednost procitana sa registra ili upisana u registar
bool moguceCitanje_m; // da li citanje registra ima smisla
bool mogucUpis_m; // da li upis u registar ima smisla
};
#endif // !defined(AFX_LPTREGISTAR_H__3B6B9539_FF2C_46C2_AD52_C6B9BC183376__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -