Home

AS Computer Software
Izvorni kod za FP_COM.DLL

Ovo ste možda do sada kupovali. Sve što treba da bi napisali serijsku komunikaciju sa fiskalnim uredjajima bilo da je to LINK program ili pak cela
aplikacija. Konfigurisanje je onako kako to fiskalni uredjaji traže, a možete ovo promeniti i za ostale potrebe, samo proverite parametre i sve je OK.
Kontrolu grešaka odradite SAMI,nije teška.
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;
}

Mali poklon za Vas.
Za nazive i opise parametara funckija pogledajte dobro fp_comm.h datoteku.
 
FP_COMM.H

#include <windows.h>#define WINEXPORT extern "C" __declspec (dllexport)

WINEXPORT BOOL fp_WriteByte(BYTE& by);
WINEXPORT BOOL fp_ReadByte(BYTE& by);
WINEXPORT void fp_ClosePort(void);
WINEXPORT HANDLE fp_ComOpen(char* pString);
WINEXPORT BOOL fp_ComConf(WORD BaudRate,BYTE ByteSize,
DWORD dwParity,
BYTE Parity,
BYTE StopBits);
WINEXPORT BOOL fp_SetComTimeouts(DWORD ReadIntervalTimeout,
DWORD ReadTotalTimeoutMultiplier,
DWORD ReadTotalTimeoutConstant,
DWORD WriteTotalTimeoutMultiplier,
DWORD WriteTotalTimeoutConstant);