- 리더기에서 UID를 읽어서 수신된 UID에 해당하는 사진을 윈도우에 출력한다
- 리더기 요청 신호는 버튼이나 타이머를 활용하여 보낸다
- 구조체를 만들어 UIC의 정보를 저장하여 해당 리더기가 들어오면 정보가 출력되게 한다
- 구조체에 이름, UID, 사진같은 정보를 저장
- 카드를 갖다대면 문이 열리는 도어락 시스템을 만들 수도 있다
- 카드 메모리의 데이터 읽고 쓰기
#include <windows.h>
#include <stdio.h>
#define CRC_POLYNOM 0x8408
#define CRC_PRESET 0xFFFF
void ControlRFID(HANDLE hComm, u_char * caComm);
void WriteRFID(HANDLE hComm, u_char * caWrite, unsigned int uiData);
unsigned int ReadRFID(HANDLE hComm, u_char * caRead);
unsigned short CRC16(void * vpData, unsigned int uiLen);
int main(void)
{
u_char caLed[100] = {0x0D, 0, 0x71, 0x00, 0x0F, 0x00, 0, 0, 0x0A, 0, 0};
u_char caGetInfo[100] = {0x07, 0, 0xB0, 0x01, 0x00, 0x00, 0, 0, 0x0A, 0, 0};
u_char caRead[100] = {0x09, 0, 0xB0, 0x23, 0x00, 0x03, 1, };
u_char caWrite[100] = {0x0E, 0, 0xB0, 0x24, 0x00, 0x03, 1, 4, 0xFF, 0xEE, 0xDD, 0xCC};
int iCnt;
unsigned int uiData;
DWORD dwCnt;
DCB sPState;
u_char ucTmp;
// 1. 시리얼 포트 열기
HANDLE hComm = CreateFile("COM2" // 포트 이름
, GENERIC_READ|GENERIC_WRITE // RW가능
, 0
, NULL
, OPEN_EXISTING
, FILE_ATTRIBUTE_NORMAL
, 0);
if(INVALID_HANDLE_VALUE == hComm)
{
printf("포트 열 수 없음\n");
return 0;
}
// 2. Read버퍼와 write 버퍼 길이 설정
if( 0 == SetupComm(hComm, 4096, 4096))
{
printf("버퍼 설정 에러\n");
CloseHandle(hComm);
return 0;
}
// 3. 버퍼 초기화
if(0 == PurgeComm(hComm, PURGE_TXABORT|PURGE_TXCLEAR))
{
printf("버퍼 초기화 에러\n");
CloseHandle(hComm);
return 0;
}
sPState.DCBlength = sizeof(sPState);
// 4. 현재 시리얼 세팅을 읽어온다
if( 0 == GetCommState(hComm, &sPState))
{
printf("시리얼 상태 읽기 에러\n");
CloseHandle(hComm);
return 0;
}
// 5. 시리얼 설정
sPState.BaudRate = CBR_38400;
sPState.ByteSize = 8;
sPState.Parity = EVENPARITY;
sPState.StopBits = ONESTOPBIT;
// 6. 시리얼 세팅 적용
if(0 == SetCommState(hComm, &sPState))
{
printf("시리얼 상태 설정 에러\n");
CloseHandle(hComm);
return 0;
}
ReadRFID(hComm, caRead);
putchar('\n');
printf("Input Number(hexa): ");
scanf("%X", &uiData);
putchar('\n');
//ControlRFID(hComm, caLed);
WriteRFID(hComm, caWrite, uiData);
ReadRFID(hComm, caRead);
CloseHandle(hComm);
return 0;
}
void ControlRFID(HANDLE hComm, u_char * caComm)
{
DWORD dwCnt;
unsigned char caRecv[100];
int iCnt;
// 7. CRC값 대입
*((unsigned short *)(caComm + caComm[0] -2)) = CRC16(caComm, caComm[0]-2);
// 8. 시리얼 통신
WriteFile(hComm, caComm, caComm[0], &dwCnt, 0);
ReadFile(hComm, caRecv, 1, &dwCnt, 0);
ReadFile(hComm, caRecv+1, caRecv[0]-1, &dwCnt, 0);
printf("return: ");
for(iCnt = 0; iCnt<caRecv[0]; iCnt++)
{
printf("%02X ", caRecv[iCnt]);
}
putchar('\n');
}
void WriteRFID(HANDLE hComm, u_char * caWrite, unsigned int uiData)
{
DWORD dwCnt;
unsigned char caRecv[100];
int iCnt;
*((unsigned int *)(caWrite+8)) = uiData;
// 7. CRC값 대입
*((unsigned short *)(caWrite + caWrite[0] -2)) = CRC16(caWrite, caWrite[0]-2);
// 8. 시리얼 통신
WriteFile(hComm, caWrite, caWrite[0], &dwCnt, 0);
ReadFile(hComm, caRecv, 1, &dwCnt, 0);
ReadFile(hComm, caRecv+1, caRecv[0]-1, &dwCnt, 0);
printf("Write [%08X] -> return: ", uiData);
for(iCnt = 0; iCnt<caRecv[0]; iCnt++)
{
printf("%02X ", caRecv[iCnt]);
}
putchar('\n');
}
unsigned int ReadRFID(HANDLE hComm, u_char * caRead)
{
DWORD dwCnt;
unsigned char caRecv[100];
int iCnt;
// 7. CRC값 대입
*((unsigned short *)(caRead + caRead[0] -2)) = CRC16(caRead, caRead[0]-2);
// 8. 시리얼 통신
WriteFile(hComm, caRead, caRead[0], &dwCnt, 0);
ReadFile(hComm, caRecv, 1, &dwCnt, 0);
ReadFile(hComm, caRecv+1, caRecv[0]-1, &dwCnt, 0);
printf("Read [%08X] -> return: ", *((unsigned int *)(caRecv + 7)));
for(iCnt = 0; iCnt<caRecv[0]; iCnt++)
{
printf("%02X ", caRecv[iCnt]);
}
putchar('\n');
return *((unsigned int *)(caRecv + 7));
}
unsigned short CRC16(void * vpData, unsigned int uiLen)
{
int i, j;
unsigned short crc = CRC_PRESET;
unsigned char * DATA = vpData;
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;
}
- 리더기에 입력된 카드에 따라 윈도우에 비트맵 이미지 출력
'코스웨어 > 15년 스마트컨트롤러' 카테고리의 다른 글
20151211_박서연_일일업무보고서_RFID(4) (4) | 2015.12.14 |
---|---|
20151211 임현수 업무일지 RFID 업그레이드 (2) | 2015.12.14 |
2015.12.11_RFID #4_이량경 (2) | 2015.12.14 |
20151211_[안향진]_RFID_4 (3) | 2015.12.14 |
20151211-김재홍-Serial_5일차-RFID_win32 (2) | 2015.12.11 |
20151211_[김태현]_RFID_3 (3) | 2015.12.11 |
2015.12.10_시리얼 포로토콜#3_이량경 (2) | 2015.12.11 |
20151210 임현수 업무일지 RFID 도스 시리얼 실습 (2) | 2015.12.11 |