Чтение данных из Сом-порта...
Необходимо считывать данные с магнитных карт. Ридер подключен к Сом-порту. А кот как с ним работать - никак не соображу. Кто-нибудь решал аналогичные задачи? Можете поделиться опытом?
Предположим,
HANDLE hCom=CreateFile("COM1",GENERIC_WRITE | GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,NULL);
if(hCom==INVALID_HANDLE_VALUE){//ошибка };
А теперь нужно считать данные. Вот тут то я и задумалась! =)
Честно перерыла кучу форумов, но ничего умного не нашла.
Суть проблемы вот в чем:
Необходимо считывать данные с магнитных карт. Ридер подключен к Сом-порту. А кот как с ним работать - никак не соображу. Кто-нибудь решал аналогичные задачи? Можете поделиться опытом?
Предположим,
HANDLE hCom=CreateFile("COM1",GENERIC_WRITE | GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,NULL);
if(hCom==INVALID_HANDLE_VALUE){//ошибка };
А теперь нужно считать данные. Вот тут то я и задумалась! =)
Честно перерыла кучу форумов, но ничего умного не нашла.
А дальше :
DCB dcb;
COMMTIMEOUTS to;
Необходимо заполнить структуру DCB, причем настройки источника и получателя должны быть идентичны.
GetCommState(hCom,&dcb); //Заполняет DCB параметрами по умолчанию
После заполнения (если вносим изменения):
SetCommState(hCom,&dcb); //Применяем параметры
...Заполняем COMMTIMEOUTS
SetCommTimeouts(hCom,&to);//Применяем параметры
Когда COM1 настроен, необходимо создать буфер, куда будут поступать данные и откуда будем их читать.
SetupComm(hCom, iIn, iOut);
Читаем-пишем в созданный буфер:
ReadFile();
WriteFile();
По окончании работы с COM
CloseHandle(hCom);
Суть проблемы вот в чем:
Необходимо считывать данные с магнитных карт. Ридер подключен к Сом-порту. А кот как с ним работать - никак не соображу. Кто-нибудь решал аналогичные задачи? Можете поделиться опытом?
Предположим,
HANDLE hCom=CreateFile("COM1",GENERIC_WRITE | GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,NULL);
if(hCom==INVALID_HANDLE_VALUE){//ошибка };
А теперь нужно считать данные. Вот тут то я и задумалась! =)
Честно перерыла кучу форумов, но ничего умного не нашла.
А дальше :
DCB dcb;
COMMTIMEOUTS to;
Необходимо заполнить структуру DCB, причем настройки источника и получателя должны быть идентичны.
GetCommState(hCom,&dcb); //Заполняет DCB параметрами по умолчанию
После заполнения (если вносим изменения):
SetCommState(hCom,&dcb); //Применяем параметры
...Заполняем COMMTIMEOUTS
SetCommTimeouts(hCom,&to);//Применяем параметры
Когда COM1 настроен, необходимо создать буфер, куда будут поступать данные и откуда будем их читать.
SetupComm(hCom, iIn, iOut);
Читаем-пишем в созданный буфер:
ReadFile();
WriteFile();
По окончании работы с COM
CloseHandle(hCom);
А дальше :
....
Читаем-пишем в созданный буфер:
;
WriteFile();
....
CloseHandle(hCom);
М...
А в какой момент ReadFile() вызывать?
М...
А в какой момент ReadFile() вызывать?
В любой. Данные, приходящие на COM-порт хранятся в буфере, который мы создали ранее. ReadFile() просто читает содержимое этого буфера на момент вызова функции, естественно указатель на буфер необходимо передавать в функцию:
BOOL ReadFile(
HANDLE hFile, //hCom
LPVOID lpBuffer, //&bufer
DWORD nNumberOfBytesToRead,
LPDWORD lpNumberOfBytesRead,
LPOVERLAPPED lpOverlapped
);
В любой. Данные, приходящие на COM-порт хранятся в буфере, который мы создали ранее. ReadFile() просто читает содержимое этого буфера на момент вызова функции, естественно указатель на буфер необходимо передавать в функцию:
);
Чего-то не очень получается... Сдается, пора мне в секретарши идти... =((
Чего-то не очень получается... Сдается, пора мне в секретарши идти... =((
Не, ну это в натуре уже безобразие!!! Каждый месяц одно и тоже, ощущение что поиск по форуму создан просто так, для вида.
Чего-то не очень получается... Сдается, пора мне в секретарши идти... =((
Примерно так это работает
Примерно так это работает
Спасибо тебе огромное!