6월3일 API(테스트겸 비트맵뷰어) RFID(CRC코드)

2010. 6. 3. 12:432010년/6월


RFID
#include <windows.h>
#include <stdio.h>

unsigned short MecCRC(void *arg)
{
  unsigned short i;
  unsigned short j;
  unsigned short cnt;
  unsigned short crc=0xFFFF;

  unsigned char *buf = arg;

  cnt = (*buf) - 2;
  for(i=0 ; i < cnt ; ++i)
  {
    crc^= *(buf + i);
    for(j=0 ; j < 8 ; ++j){
      if(0 != (crc&0x0001))
      {
        crc=(crc>>1)^0x8408;
      }
      else
      {
        crc=(crc>>1);
      }
    }
  }
  return crc;
}

int main()
{
  // RFID 리더기 시리얼 셋팅:1초간 LED 깜빡임, 소리 내기
  u_char  caString[] = {  
        0X0D, 0X000X710X000X37
        0X000X000X000X280X00,
        0X000XDD, 0X30
        };
  unsigned short ret = MecCRC(caString);
  DWORD  dwWritten;    // 쓰기 후 실제 쓴 바이트 수 저장 공간
  DCB    SerialState;  // 시리얼 상태 저장
  HANDLE  hComm = CreateFile("COM1",GENERIC_READ | GENERIC_WRITE,0,NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,0);
  
  printf("0x%02X%02X\n", ((unsigned char *)&ret)[0], ((unsigned char *)&ret)[1]);
  printf("0x%02X%02X\n", caString[11], caString[12]);
  if (INVALID_HANDLE_VALUE == hComm)
  {
    printf("포트 열 수 없음\n");
    return 0;
  }

  if(0 == SetupComm(hComm, 40963096))
  {
    printf("버퍼 설정 에러\n");
    CloseHandle(hComm);
    return 0;
  }

  if(0 == PurgeComm(hComm, PURGE_TXABORT | PURGE_TXCLEAR))
  {
    printf("버퍼 초기화 에러\n");
    CloseHandle(hComm);
    return 0;
  }

  SerialState.DCBlength = sizeof(SerialState);

  if(0 == GetCommState(hComm, &SerialState))
  {
    printf("시리얼 상태 읽기 에러\n");
    CloseHandle(hComm);
    return 0;
  }

  SerialState.BaudRate  = CBR_38400;  // 속도
  SerialState.ByteSize  = 8;      // 바이트 크기
  SerialState.Parity    = EVENPARITY;  // 패리티
  SerialState.StopBits  = ONESTOPBIT;  // 스톱 비트

  if (0 == SetCommState(hComm, &SerialState))
  {
    printf("시리얼 상태 설정 에러\n");
    CloseHandle(hComm);
    return 0;
  }

  if (0 == WriteFile(hComm, caString, sizeof(caString), &dwWritten, 0))
  {
    printf("쓰기 에러\n");
  }
  
  else
  {
    printf("쓰기 성공\n");
  }

  dwWritten =6;

  ReadFile(hComm, caString, dwWritten, &dwWritten, 0);
  
  printf("%02x %02x %02x %02x %02x\n", caString[0], caString[1], caString[2], caString[3], caString[4]);
  
  CloseHandle(hComm);

  return 0;
}