Гудвинволшебник (10.03.2011 17:40, просмотров: 177) ответил oleg110592 на 2 Гудвин а можно простой пример, если можно на Pelles C работы с USB host(или ткните где рыть носом). Стандартный пример с кнопочкой - проверил работает. Хочу FT232RL подключить, это возможно?
Скачать с FTDI драйвер, установить. (естественно, usb должен быть включен в режим хоста) В системе появится COM порт. Через него и работать стандартно, как с файлом (заменить в тексте непонятное "RFID" на "COM" :) :
#define SizeBuf 128
#define PATTERN 'A'
#define GAP 0x10
extern HWND sav_handle;
HANDLE hComRFID;
BOOL Stp;
int GetRFIDData(CHAR *buf)
{
DWORD dw;
if(hComRFID!=INVALID_HANDLE_VALUE)
{
ReadFile(hComRFID,buf,SizeBuf,&dw,NULL);
}
return dw;
}
int ParseRFID(void)
{
CHAR Data[SizeBuf];
CHAR *S;
S=Data;
unsigned int i=0;
int nb=0;
while(!Stp)
{
ZeroMemory(Data,SizeBuf);
nb=GetRFIDData(Data);
for (i=0;i<nb;i++) // èäåì ïî ñòðîêå
{
if (S[i]==PATTERN)
{
SendMessage(sav_handle, WM_USER, 0, 0);
Sleep(1000);
PurgeComm(hComRFID, PURGE_RXCLEAR);
break;
};
}
}
return 0;
}
HANDLE OpenRFID(void)
{
WCHAR CP[10];
DCB dcb;
COMMTIMEOUTS CommTimeOuts;
swprintf(CP,L"COM3:");
HANDLE hPort = CreateFile( CP,
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
0,//FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,
NULL);
if(!GetCommState(hPort,&dcb))
{
CloseHandle(hPort);
return 0;
}
dcb.DCBlength=sizeof(dcb);
dcb.BaudRate=9600;
SetCommState(hPort,&dcb);
CommTimeOuts.ReadIntervalTimeout= 10;
CommTimeOuts.ReadTotalTimeoutMultiplier = 1;
// çíà÷åíèé ýòèõ òàéì – àóòîâ âïîëíå õâàòàåò äëÿ óâåðåííîãî ïðèåìà
// äàæå íà ñêîðîñòè 110 áîä
CommTimeOuts.ReadTotalTimeoutConstant = 50;
// èñïîëüçóåòñÿ â äàííîì ñëó÷àå êàê âðåìÿ îæèäàíèÿ ïîñûëêè
CommTimeOuts.WriteTotalTimeoutMultiplier = 0;
CommTimeOuts.WriteTotalTimeoutConstant = 0;
SetCommTimeouts(hPort, &CommTimeOuts);
PurgeComm(hPort, PURGE_RXCLEAR);
return hPort;
}
int InitRFID(void)
{
hComRFID = OpenRFID(); //открываем порт
Stp = 0;
DWORD dwThreadId;
CreateThread(NULL,1024,(LPTHREAD_START_ROUTINE)ParseRFID,NULL,0,&dwThreadId);
return hComCOM!=INVALID_HANDLE_VALUE;
}
int CloseRFID(void)
{
Stp = 1;
if(hComRFID!=INVALID_HANDLE_VALUE)
CloseHandle(hComRFID);
return 0;
}