FP_COMM.CPP
//Serijska komunikacija sa fiskalnim uredjajima.
//AS Computer Software - A.Stefanovic 10.06.2005.
#include <windows.h>
#include "fp_comm.h"
HANDLE hPort;
//Definicija nasih funkcija
// funkcija za otvaranje serijskog port po nazivu kao COM1,COM2....
WINEXPORT HANDLE fp_ComOpen(char* pString)
{
hPort = CreateFile (pString, // Pokazivac na naziv porta
GENERIC_READ | GENERIC_WRITE,
// Pristup (read-write) mod
0, // Deljivost
NULL, // Pokazivac na atribut sigurnosti
OPEN_EXISTING,// Kako se port otvara
0, // Atributi porta
NULL); // Handle za port sa atributima koje bi
// kopirali
if (hPort==INVALID_HANDLE_VALUE)
{
return 0; //Nije OK. port nismo otvorili
}
else
{
fp_ComConf(CBR_19200,8,false,NOPARITY,ONESTOPBIT); //konfig.porta
fp_SetComTimeouts(60,100,1,60,100);
return hPort; //port otvoren, uzimamo handle za njega i pamtimo
}
}
//Da konfigurisemo port (najvaznija stvar)
WINEXPORT BOOL fp_ComConf(WORD BaudRate,BYTE ByteSize,
DWORD dwParity,
BYTE Parity,
BYTE StopBits)
{
DCB fp_dcb;
int m_bPortReady;
if((m_bPortReady = GetCommState(hPort, &fp_dcb))==0)
{
return FALSE;
}
fp_dcb.BaudRate = BaudRate;
fp_dcb.ByteSize = ByteSize;
fp_dcb.Parity = Parity ;
fp_dcb.StopBits = StopBits;
fp_dcb.fBinary = TRUE;
fp_dcb.fDsrSensitivity = FALSE;
fp_dcb.fParity = dwParity;
fp_dcb.fOutX = FALSE;
fp_dcb.fInX = FALSE;
fp_dcb.fNull = FALSE;
fp_dcb.fAbortOnError = TRUE;
fp_dcb.fOutxCtsFlow = FALSE;
fp_dcb.fOutxDsrFlow = FALSE;
fp_dcb.fDtrControl = DTR_CONTROL_DISABLE;
fp_dcb.fDsrSensitivity= FALSE;
fp_dcb.fRtsControl = RTS_CONTROL_DISABLE;
fp_dcb.fOutxCtsFlow = FALSE;
fp_dcb.fOutxCtsFlow = FALSE;
m_bPortReady = SetCommState(hPort, &fp_dcb);
if(m_bPortReady ==0)
{
return FALSE;
}
return TRUE;
}
WINEXPORT BOOL fp_SetComTimeouts(DWORD ReadIntervalTimeout,
DWORD ReadTotalTimeoutMultiplier,
DWORD ReadTotalTimeoutConstant,
DWORD WriteTotalTimeoutMultiplier,
DWORD WriteTotalTimeoutConstant)
{
int m_bPortReady;
COMMTIMEOUTS m_fp_comtimeouts;
if((m_bPortReady = GetCommTimeouts (hPort, &m_fp_comtimeouts))==0)
{
return FALSE;
}
m_fp_comtimeouts.ReadIntervalTimeout =ReadIntervalTimeout;
m_fp_comtimeouts.ReadTotalTimeoutConstant =ReadTotalTimeoutConstant;
m_fp_comtimeouts.ReadTotalTimeoutMultiplier =ReadTotalTimeoutMultiplier;
m_fp_comtimeouts.WriteTotalTimeoutConstant = WriteTotalTimeoutConstant;
m_fp_comtimeouts.WriteTotalTimeoutMultiplier =WriteTotalTimeoutMultiplier;
m_bPortReady = SetCommTimeouts (hPort, &m_fp_comtimeouts);
if(m_bPortReady ==0)
{
return FALSE;
}
return TRUE;
}
WINEXPORT BOOL fp_WriteByte(BYTE& by)
{
BYTE byResByte;
byResByte=by;
DWORD m_nBytesWritten=0;
if(WriteFile(hPort,&byResByte,1,&m_nBytesWritten,NULL)==0)
{
return FALSE;
}
else
{
return TRUE;
}
}
WINEXPORT BOOL fp_ReadByte(BYTE& by)
{
BYTE byResByte;
by=0;
DWORD dwBytesTxD=0;
if (ReadFile (hPort, &byResByte, 1, &dwBytesTxD, 0))
{
if (dwBytesTxD == 1)
{
by=byResByte;
return TRUE;
}
}
return FALSE;
}
WINEXPORT void fp_ClosePort(void)
{
CloseHandle (hPort);
return;
}
|