미친해커

[C] Serial Monitor Step 7 - 데이터 전송, 수신 함수 만들기 본문

C/Serial Monitor

[C] Serial Monitor Step 7 - 데이터 전송, 수신 함수 만들기

미친해커 2021. 12. 31. 17:09
반응형

저번 포스팅에서 Baud Rate를 설정하는 함수를 작성해보았다. 그 외에도 많은 설정 값들이 존재하지만 설정하지 않고 기본 값들을 사용해도 큰 문제가 없기 때문에 다른 설정 값들은 맨 마지막에 다시한번 다루려고 한다. 우선 데이터를 전송 및 수신 하는 함수를 만들어보자. 사용되는 Windows API는 다음과 같다.

 

WriteFile function (fileapi.h) - Win32 apps

Writes data to the specified file or input/output (I/O) device.

docs.microsoft.com

 

ReadFile function (fileapi.h) - Win32 apps

Reads data from the specified file or input/output (I/O) device. Reads occur at the position specified by the file pointer if supported by the device.

docs.microsoft.com

이번 함수는 크게 다를 것이 없기 때문에 한번에 올리도록 하겠다.

DWORD SerialWrite(HANDLE hComm, LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite)
{
    DWORD NumberOfBytesWritten;

    if (WriteFile(hComm, lpBuffer, nNumberOfBytesToWrite, &NumberOfBytesWritten, NULL) == FALSE)
    {
        return 0;
    }
    
    return NumberOfBytesWritten;
}

DWORD SerialRead(HANDLE hComm, LPVOID lpBuffer, DWORD nNumberOfBytesToRead)
{
    DWORD NumberOfBytesRead;

    if (ReadFile(hComm, lpBuffer, nNumberOfBytesToRead, &NumberOfBytesRead, NULL) == FALSE)
    {
        return 0;
    }

    return NumberOfBytesRead;
}

함수명을 짓는데 정말 매우 많은 고민을 했다... SendData나 RecvData로 하고 싶었지만 그럼 다른 라이브러리나 함수와 겹칠 것같아 며칠 고민하다 결정했다. 이렇게 WrtieFile과 ReadFile 함수를 사용한 시리얼 포트로의 데이터 전송 및 수신 함수를 만들어 보았다. 여기서 모르는 사람들을 위해 한가지 설명을 하자면 nNumberOfBytes.. 은 실제로 쓰고 읽을 데이터의 바이트 수를 말하며 NumberOFBytes... 지역변수는 실제로 쓰여지고 읽어들인 바이트의 수를 반환 받는 변수이다. 즉 이 함수들의 반환 값은 실제로 쓰고 읽은 바이트 수인 것이다.

반응형
Comments