본문 바로가기
코스웨어/15년 스마트컨트롤러

20151209 임현수 업무일지 RFID 도스 시리얼

by 알 수 없는 사용자 2015. 12. 10.
728x90
반응형
■ RFID 


■ serial 출력 체크


■ 윈도우 시리얼 구현

VMware에서 구버전 리눅스의 알수없는 한계로 윈도우로 전환한다.

createfile() 함수 역시 하드웨어장치를 파일 취급한다는 것을 알 수 있따.
SetupComm() 2번째, 3번째인자 = 읽기버퍼 쓰기버퍼

■ dos.c

/* ㅃ-ㅃ-ㅃ- 소리남. */

#include <Windows.h>
#include <stdio.h>

int main()
{
    u_char caString[255] = { 0x0D, 0x00, 0x71, 0x00, 0x30
                , 0x00, 0x00, 0x00
                , 0x0A, 0x00, 0x00, 0x46, 0x41 };
    DWORD dwCnt;        //double world Written 쓰기후 실제 쓴 바이트 수 저장 공간

    DCB sPState;        //struct Port State 시리얼 포트 상태 저장.
    HANDLE hComm = CreateFile("COM4"
        , GENERIC_READ | GENERIC_WRITE
        , 0
        , NULL
        , OPEN_EXISTING
        , FILE_ATTRIBUTE_NORMAL
        , 0);

    if (INVALID_HANDLE_VALUE == hComm)
    {
        printf("포트 열수 없음\n");
        return 0;
    }
    if (0 == SetupComm(hComm, 4096, 4096))
    {
        printf("버퍼 설정 에러\n");
        CloseHandle(hComm);
        return 0;
    }

    if (0 == PurgeComm(hComm, PURGE_TXABORT | PURGE_TXCLEAR))
    {
        printf("버퍼 초기화 에러\n");
        CloseHandle(hComm);
        return 0;
    }
    sPState.DCBlength = sizeof(sPState);
    if (0 == GetCommState(hComm, &sPState)) //시리얼 포트 상태를 조사한다.
    {
        printf("시리얼 상태 읽기 에러\n");
        CloseHandle(hComm);
        return 0;
    }
    sPState.BaudRate = CBR_38400;
    sPState.ByteSize = 8;
    sPState.Parity = EVENPARITY;
    sPState.StopBits = ONESTOPBIT;

    if (0 == SetCommState(hComm, &sPState)) //시리얼 포트 상태를 조사한다.
    {
        printf("시리얼 상태 설정 에러\n");
        CloseHandle(hComm);
        return 0;
    }

    WriteFile(hComm, caString, caString[0], &dwCnt, 0);

    ReadFile(hComm, caString  , 1, &dwCnt, 0);
    ReadFile(hComm, caString+1, caString[0]-1 , &dwCnt, 0);

    CloseHandle(hComm);

    return 0;
}
unsigned short CRC16(void *vpData, unsigned int uiLen)
{
      unsigned int i;
    unsigned int j;
    unsigned char *DATA = vpData;
      unsigned short crc = CRC_PRESET;
      for (i = 0; i < uiLen; i++)
      {
            crc ^= DATA[i];
            for (j = 0; j < 8; j++)
            {
                  if (crc & 0x0001)
              {
                crc = (crc >> 1) ^ CRC_POLYNOM;
              }
              else
              {
                crc = (crc >> 1);
              }
            }
      }
      return crc;
}

■ 변화

u_char caString[255] = { 0x0D, 0x00, 0x71
                , 0x00, 0x3F        //OS
                , 0x00, 0x20         //OSF
                , 0x00, 0x0A        //OS_Time

                , 0x00, 0x00    };

배열값에 변화를 주면 소리나 LED깜빡임에 변화를 줄 수 있다.


728x90