http://www.olexa.com.ua/gps/garmin_interface/Здесь требуется сделать небольшое отступление. Прибор поддерживает несколько физических протоколов. Каждый из них требует своих настроек COM-порта. Поскольку на фирменный протокол нашлось наибольшее количество документов, я начал исследовать его. Для дальнейших экспериментов с аппаратом в его настройках необходимо установить в Навигаторе протокол garmin в меню настроек протокола.
Как инициализировать Порт
Windows использует для записи и чтения из порта созданный для этого файл. Рассмотрим инициализацию порта подробнее.
function AsyncInit(port: PChar): PChar; var fSuccess : bool; // результат инициализации порта m : string; // временная текстовая переменнаяbegin hCom: =Createfile(port, GENERIC_READ+GENERIC_WRITE, 0, nil, OPEN_EXISTING, 0, 0); { hCom – дескриптор созданного файла. Он описываетя в другом модуле как переменная типа дескриптор в секции Public. Этот дескриптор будет использоваться в других процедурах и функциях для установки параметров порта, чтения, записи и закрытия порта. Прочитать про функцию CreateFile (если интересно) можно в хелпе MS SDK. Изложено подробно, но бестолково. Для начала достаточно знать, что это работает...} if (hCom = INVALID_HANDLE_VALUE) then begin m:='Порт открыт неуспешно'; end; {Теперь проверим, окрылся ли порт. Если hCom отрицательный, то ясно, что-то не так. Скорее всего, нужно задать другой порт. Вопрос, кстати сказать, довольно сложный. Все зависит от установленного оборудования (модемы и пр.). Теперь сохраним первоначальные установки порта.Это нужно для того, чтобы перед закрытием программы восстановить эти установки. Конечно, закрывать программу первое время придется при помощи трех клавиш, так что до восстановления дело дойдет не скоро.} fSuccess := GetCommState(hCom, dcb_); BaudRate := dcb_.BaudRate; ByteSize := dcb_.ByteSize; Parity := dcb_.Parity; StopBits := dcb_.StopBits; if not(fSuccess) then begin m:='Порт открыт неуспешно'; end; AsyncInit:=PChar(m); end;
Если порт открыт успешно, то теперь надо установить его параметры. Кстати, теперь станет ясно, что такое dcb_. Это, как становится ясно после прочтения SDK – хелпа, такая структура, в которой содержатся все установки для устройства коммуникации, последовательного порта в частности. Из всего многообразия нам нужны только четыре параметра – скорость, размер, четность и количество стоповых битов. Перемененную dcb_ , которая имеет тип DCB, опишем как глобальную переменную где угодно, лишь бы она сохранялась на время всего выполнения программы. Да, забыл сказать, я все операции с инициализацией и установками порта сделал функциями, результатом которых является текстовая информация, чтобы сразу можно было вставлять в Messagebox и видеть результаты выполнения.