{ Ввод/вывод в порты через ДРАЙВЕР для Windows NT/2000 } {--------------------------------------------------------------------------- The control units for mass-spectrometer MI1201-AGM (c) Copyright Aleksandrov O.E., 1999 Molecular Physics department, USTU, Ekaterinsburg, K-2, 620002, RUSSIA phone 75-47-15 E-mail: aleks@dpt.ustu.ru Модуль управления масс-спектрометром МИ1201-АГМ (c) Собственность Александрова О.Е., 1999 620002, Екатеринбург, К-2, УГТУ, Кафедра молекулярной физики тел. 75-47-15 E-mail: aleks@dpt.ustu.ru ----------------------------------------------------------------------------} { эквиваленты инструкций IN AL,DX, OUT DX,AL и более сложных конструкций для использования в операционных системах Windows NT (через драйвер устройства, см. cDeviceName) } unit DriverPortsIO; interface USES Windows, MI1201ioctl; const cOldDeviceName='\\.\PortIODev';{ действующее, но неудачное имя для драйвера } cMi1201AGM='\\.\MI1201_Dev'; { новое имя для драйвера } cDeviceName=cMi1201AGM; type tDynamicArrayOfULong=array of dword; ptDynamicArrayOfULong=^tDynamicArrayOfULong; function LastError:longint; register; procedure OutByte(b:Byte; Port:word); register; function InByte(Port:word):byte; register; function IsWindowsNT:boolean; //--------------------- 2003 г ------------------------------ // Дополнительные функции драйвера //-------------------------------- function GetDriverVersion:ULONG; function GetDriverCapabilities:ULONG; function AbortDriverOperation(State:boolean):boolean; function GetAbortDriverState:boolean; { Многофункциональный ввод/вывод. Принимает буфер команд CommandData, выполняет команды и возвращает TRUE - успешное выполнение и ResultData заполняется результатами выполнения FALSE - неверный формат или размер буфера команд CommandData и ResultData не изменяется. Проверить буфер команд можно вызовом CheckMultifunctionIO.} function MultifunctionIO(const CommandData; CommandDataSize:word; var ResultData; ResultDataSize:word):boolean; register; { Проверка буфера команд CommandData для многофункционального ввода/вывода MultifunctionIO, проверяет команды и возвращает TRUE - успешное выполнение, то ResultData.ErrorCode=mferrOK, ResultData.OutputDataSize=необходимый размер буфера возврата для MultifunctionIO; FALSE - неверный формат или размер буфера команд CommandData, то ResultData.ErrorCode=код ошибки, ResultData.RecordNumber=номер записи в буфере команд где обнаружена ошибка} function CheckMultifunctionIO( const CommandData; CommandDataSize:word; var ResultData:tGENPORT_MULTIFUNCTION_IO_OPERATION_CHECK_OUTPUT_BUFFER ):boolean; const cDefaultWaitControlFlags=[wcfUserRequest, wcfUserMode, wcfAllowZeroResolution]; //Примечание: при TimeStep_ms=0 OutByteAndWait добавляет флаг wcfWaitOnDISPATCH_Level cDefaultWriteAndWaitControlFlags=[wcfUserRequest, wcfUserMode, wcfAllowZeroResolution]; { ЛЕНИВО ожидает