Народ не кто не программировал данный аппарат подключается к ПК через COM порт про подключении на девайсе горит красный индикатор потем экспирементов и мониторинга COM порта прешел к заключению что-бы перевести девайс в режим считавание необходимо через WriteFile писать в данный порт с задержкой 200 мс определенную последовательность байт т.е. char *inicilizaciy="\xF3\xFF\x01\x02\x03" и одновремменно её читать вроде все запустилоль электронную карту считываем получаем необходиммый нам данные с карточки в виде последовательности байт которые после преобразование получаем её серию и номер тут мы закричили ура получилось но не тут то было посли перезагрузке ПК данная программка перестала работать (вообше) т.е. не переходит в режим считывания. Что такое, начал разбиратся и оказалось чтобы данный начали писатся необходимо как то иницилизировать данное устройсто так вот с помощью сторонный программы (Advanced Serial Port Monitor) я попытался записать данный набор байт(char *inicilizaciy="\xF3\xFF\x01\x02\x03" ) в COM порт и о чудо заработала и моя програмулины вот теперь сижу и соображаю как так. А теперь вапрос мож кто уже работал с данным девайсом и подскажет что да как в документации не черта нету по интернету полазил тоже не фиге нет.
В смысле через CreateFile так делаю его все нормально без INVALID_HANDLE_VALUE через SetCommState и структур иницилизирую только вот прикол он скорость я указываю 9600 они её 2 раза иницилизирует сначало 9600 потом 1200 четность настроена только передача почемуто иницилизируется не 8 бит как указал а 7 ну кароче пошел каверятся я в этом что за фигня
Блин походу придется попытатся отреверсить их софтину как делает она. У нах при клике на кнопку считать создается отдельный поток и Семафор и ожидает принятия данных. А я для экспериментов кручусь в while(1) пока приняттые данный не изменять
алгоритм примерно такой должен быть(на паскале но думаю будет понятно) hPort := CreateFile(pchar('com'+inttostr(com)), GENERIC_READ + GENERIC_WRITE, // 0, nil, // OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); // GetCommState(hPort, DCB); //инициализация настроек порта DCB.BaudRate:=9600; DCB.ByteSize:=8; DCB.StopBits:=onestopbit; DCB.Parity:=NOPARITY; {DCB.XoffChar:=#19; //в принципе это остальные настройки DCB.XonChar:=#17; //порта но они не являются необходимыми DCB.DCBLength:=28; DCB.Flags:=1025; DCB.wReserved:=0; DCB.XonLim:=2048; DCB.XoffLim:=512; DCB.ErrorChar:='я'; DCB.EofChar:=; DCB.EvtChar:=#0; DCB.wReserved1:=0; } SetCommState(hPort, DCB); //установка таймаутов для приема-передачи сообщений GetCommTimeouts(hPort,timeouts); timeouts.ReadTotalTimeoutMultiplier:=500; timeouts.ReadTotalTimeoutConstant:=5000; SetCommTimeouts(hPort,timeouts); retry: //сброс находящихся в очередени на прием передачу сообщений PurgeComm(hPort,PURGE_TXCLEAR or PURGE_RXCLEAR);
Кароче по ходу что то хитрое таду засунули проверил свою софтину под баркод сканером все прекрасно работает что то намудрили они