obsługa portów RC232 i LPT

0

Wie ktoś jak obsługuje się porty RC232 i LPT pod Borland C++?
Chce ich użyć do sterowania urządzeniami zewnętrznymi.

0

#include <windows.h>
#include <libcom.h>

HANDLE __com1_handle = NULL;
HANDLE __com2_handle = NULL;

int comOpen(int com_num,int baud,int parity,int data_bits,int stop_bits)
{
DCB dcb;

if((com_num != COM1) &&
(com_num != COM2) &&
(baud != COM_BAUD110) &&
(baud != COM_BAUD300) &&
(baud != COM_BAUD600) &&
(baud != COM_BAUD1200) &&
(baud != COM_BAUD2400) &&
(baud != COM_BAUD4800) &&
(baud != COM_BAUD9600) &&
(parity != COM_PARITY_NONE) &&
(parity != COM_PARITY_EVEN) &&
(parity != COM_PARITY_ODD) &&
(data_bits != COM_DATA_BITS7) &&
(data_bits != COM_DATA_BITS8) &&
(stop_bits != COM_STOP_BITS1) &&
(stop_bits != COM_STOP_BITS2))
return 0;

memset(&dcb,0,sizeof(dcb));
dcb.DCBlength = sizeof(dcb);

switch(baud)
{
case COM_BAUD110: dcb.BaudRate = CBR_110; break;
case COM_BAUD300: dcb.BaudRate = CBR_300; break;
case COM_BAUD600: dcb.BaudRate = CBR_600; break;
case COM_BAUD1200: dcb.BaudRate = CBR_1200; break;
case COM_BAUD2400: dcb.BaudRate = CBR_2400; break;
case COM_BAUD4800: dcb.BaudRate = CBR_4800; break;
case COM_BAUD9600: dcb.BaudRate = CBR_9600; break;
}

switch(parity)
{
case COM_PARITY_NONE:
dcb.fParity = FALSE;
dcb.Parity = NOPARITY;
break;

case COM_PARITY_EVEN:
  dcb.fParity = TRUE;
  dcb.Parity = EVENPARITY;
  break;
  
case COM_PARITY_ODD:
  dcb.fParity = TRUE;
  dcb.Parity = ODDPARITY;
  break;

}

switch(stop_bits)
{
case COM_STOP_BITS1: dcb.StopBits = ONESTOPBIT; break;
case COM_STOP_BITS2: dcb.StopBits = TWOSTOPBITS; break;
}

switch(data_bits)
{
case COM_DATA_BITS7: dcb.ByteSize = 7; break;
case COM_DATA_BITS8: dcb.ByteSize = 8; break;
}

//dcb.fDtrControl = DTR_CONTROL_ENABLE;
//dcb.fRtsControl = RTS_CONTROL_ENABLE;

switch(com_num)
{
case COM1:
__com1_handle = CreateFile("COM1",GENERIC_WRITE | GENERIC_READ,0,NULL,OPEN_EXISTING,0,NULL);
SetCommState(__com1_handle,&dcb);
break;

case COM2:
  __com2_handle = CreateFile("COM2",GENERIC_WRITE | GENERIC_READ,0,NULL,OPEN_EXISTING,0,NULL);
  SetCommState(__com2_handle,&dcb);
  break;

}

return com_num;
}

int comClose(int com_num)
{
switch(com_num)
{
case COM1: CloseHandle(__com1_handle); break;
case COM2: CloseHandle(__com2_handle); break;
default: return 0;
}

return com_num;
}

int comSend(int com_num,void *data,unsigned long int len)
{
DWORD i = 0;

switch(com_num)
{
case COM1:
WriteFile(__com1_handle,(LPVOID)data,(DWORD)len,&i,NULL);
break;

case COM2:
  WriteFile(__com2_handle,(LPVOID)data,(DWORD)len,&i,NULL);
  break;
  
default: return 0;  

}

return com_num;
}

int comRecv(int com_num,void *data,unsigned long int len)
{
DWORD i = 0;

switch(com_num)
{
case COM1:
ReadFile(__com1_handle,(LPVOID)data,(DWORD)len,&i,NULL);
break;

case COM2:
  ReadFile(__com2_handle,(LPVOID)data,(DWORD)len,&i,NULL);
  break;
  
default: return 0;  

}

return com_num;
}

To jest wyciag kodu z mojej biblioteki, moge ci dac cala, co do LPT to looknij w msdn jak sie tam pliki nazywaly ale zasada powinna byc podobna, ew. mozesz uzyc windowsowych implementacji outportb i inportb

1 użytkowników online, w tym zalogowanych: 0, gości: 1