2009-05-05 24 views

答えて

1

This page Microsoft Developer Networkには、コンパイラの選択に基づいてターゲットとする環境を想定したWindowsのシリアルポートの操作方法が紹介されています。

0

MSDOSまたは非常に古いバージョンのWindows(およびTurbo Cに固有のもの)を使用している場合のみ、BIOS機能が利用できます。 Windowsの現代版では、シリアルI/Oを実行するためにOS APIを使用する必要があります。

+0

Windows XPでシリアルポートにアクセスするには、OS APIとは何ですか? – Shashikiran

+0

彼の答えでunwindが投稿したリンクを参照 –

2

CreateFileのように適切なcomデバイスを開く必要があります。あなたのニーズに適応してください。

// Handle of the communication connection 
void *comHandle; 

// Port parameters, set to your own needs 
unsigned portIndex; 
unsigned baudRate; 
unsigned dataBits; 
Parity parity; 
unsigned stopBits; 
bool  handShake; 
int  readIntervalTimeout; 
int  readTotalTimeoutMultiplier; 
int  readTotalTimeoutConstant; 
int  writeTotalTimeoutMultiplier; 
int  writeTotalTimeoutConstant; 
DCB dcb; 
COMMTIMEOUTS ct; 

// Create COM-device name string 
char comDevice[20]; 
sprintf(comDevice, "\\\\.\\COM%d", portIndex); 

// Open serial port 
_comHandle = CreateFile(comDevice, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); 
if (comHandle == INVALID_HANDLE_VALUE) 
{ 
    return false; 
} 


ct.ReadIntervalTimeout   = readIntervalTimeout;   
ct.ReadTotalTimeoutMultiplier = readTotalTimeoutMultiplier; 
ct.ReadTotalTimeoutConstant = readTotalTimeoutConstant; 
ct.WriteTotalTimeoutMultiplier = writeTotalTimeoutMultiplier; 
ct.WriteTotalTimeoutConstant = writeTotalTimeoutConstant; 

if (!GetCommState(_comHandle,&dcb)) 
{ 
    disconnect(); 
    return false; 
} 

dcb.BaudRate  = baudRate; 
dcb.ByteSize  = (BYTE)dataBits; 
dcb.Parity   = (parity == None) ? NOPARITY : ((parity == Even) ? EVENPARITY : ODDPARITY); 
dcb.StopBits  = (stopBits > 1) ? TWOSTOPBITS : ONESTOPBIT; 
dcb.fRtsControl  = handShake ? RTS_CONTROL_HANDSHAKE : RTS_CONTROL_ENABLE; 
dcb.fOutxCtsFlow = handShake; 
dcb.fOutxDsrFlow = handShake; 
dcb.fDtrControl  = handShake ? DTR_CONTROL_HANDSHAKE : DTR_CONTROL_ENABLE; 
dcb.fDsrSensitivity = handShake; 
dcb.fOutX   = FALSE; 
dcb.fInX   = FALSE; 
dcb.fErrorChar  = FALSE; 
dcb.fNull   = FALSE; 
dcb.fAbortOnError = TRUE; 

// Set port state 
if(!SetCommState(_omHandle, &dcb) || 
    !SetCommTimeouts(comHandle, &ct) || 
    !SetupComm(comHandle, 64, 64) || 
    !PurgeComm(comHandle, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR)) 
{ 
    disconnect(); 
    return false; 
} 

呼び出されるさまざまな機能の適切なMSDNエントリをお読みください。また、簡潔にするために、切断方法を省略しました。

2

これらは、serial communication with C++に関するコードプロジェクトの多くの記事です。これは返された最初のarticleです。基本的には、ファイルI/O操作でポートにアクセスします。これは少し複雑で、私はこのタスクのための適切なライブラリを見つけることをお勧めします。

関連する問題