Structure _DCB;{;Определяет настройку управления для устройства последовательной связи.
DCBlength.l;Длина структуры в байтах. Вызывающий должен установить для этого члена значение sizeof(DCB)
BaudRate.l ;Скорость передачи данных бит/с ,с которой работает устройство связи. Этот элемент может быть фактическим значением скорости передачи данных или одним из следующих индексов.
fBinary.l; : 1;Если этот элемент имеет значение TRUE, двоичный режим включен. Windows не поддерживает передачи в недвоичном режиме, поэтому этот элемент должен иметь значение TRUE.
fParity.l; : 1;Если этот элемент имеет значение TRUE, выполняется проверка четности и сообщается об ошибках.
fOutxCtsFlow.l; : 1;Если этот элемент имеет значение TRUE, сигнал CTS (готовность к отправке) отслеживается для управления выходным потоком. Если этот элемент имеет значение TRUE и CTS отключен, вывод приостанавливается до тех пор, пока CTS не будет отправлен снова.
fOutxDsrFlow.l; : 1;Если этот элемент имеет значение TRUE, сигнал DSR (готовность к набору данных) отслеживается для управления выходным потоком. Если этот элемент имеет значение TRUE и DSR отключен, вывод приостанавливается до тех пор, пока DSR не будет отправлен снова.
fDtrControl.l ; : 2;Управление потоком DTR (готовность к терминалу данных). Этот элемент может быть одним из следующих значений.
fDsrSensitivity.l; : 1;Если этот элемент равен TRUE, драйвер связи чувствителен к состоянию сигнала DSR. Драйвер игнорирует любые полученные байты, если только входная линия модема DSR не имеет высокого уровня.
fTXContinueOnXoff.l; : 1;Если этот элемент имеет значение TRUE, передача продолжается после того, как входной буфер достиг предела XoffLim байтов от заполнения и драйвер передал символ XoffChar, чтобы прекратить прием байтов. Если этот элемент имеет значение FALSE, передача не продолжается до тех пор, пока входной буфер не станет пустым в пределах XonLim байтов и драйвер не передаст символ XonChar для возобновления приема.
fOutX.l; : 1;Указывает, используется ли во время передачи управление потоком XON/XOFF. Если этот элемент имеет значение TRUE, передача останавливается при получении символа XoffChar и начинается снова при получении символа XonChar.
fInX.l; : 1;Указывает, используется ли во время приема управление потоком XON/XOFF. Если этот элемент имеет значение TRUE, символ XoffChar отправляется, когда входной буфер находится в пределах байтов XoffLim от заполнения, а символ XonChar отправляется, когда входной буфер находится в пределах байтов XonLim от заполнения.
fErrorChar.l; : 1;Указывает, заменяются ли байты, полученные с ошибками четности, символом, указанным элементом ErrorChar. Если этот элемент имеет значение TRUE, а элемент fParity имеет значение TRUE, происходит замена.
fNull.l; : 1;Если этот элемент имеет значение TRUE, при получении нулевые байты отбрасываются.
fRtsControl.l; : 2;Управление потоком RTS (запрос на отправку). Этот элемент может быть одним из следующих значений.
fAbortOnError.l; : 1;Если этот элемент имеет значение TRUE, драйвер завершает все операции чтения и записи со статусом ошибки, если возникает ошибка. Драйвер не будет принимать никаких дальнейших коммуникационных операций, пока приложение не подтвердит ошибку, вызвав функцию ClearCommError.
fDummy2.l; : 17;не используй.
wReserved.w;Зарезервировано должен быть равен нулю.
XonLim.w;Минимальное количество используемых байтов, разрешенное во входном буфере, прежде чем активируется управление потоком, чтобы разрешить передачу отправителем. Это предполагает, что в элементах fInX, fRtsControl или fDtrControl указано управление входным потоком XON/XOFF, RTS или DTR.
XoffLim.w;Минимальное количество свободных байтов, разрешенных во входном буфере, прежде чем активируется управление потоком для запрета отправителя. Обратите внимание, что отправитель может передавать символы после активации сигнала управления потоком, поэтому это значение никогда не должно быть равно нулю. Это предполагает, что в элементах fInX, fRtsControl или fDtrControl указано управление входным потоком XON/XOFF, RTS или DTR. Максимально допустимое количество используемых байтов рассчитывается путем вычитания этого
ByteSize.d;Количество битов в переданных и полученных байтах
Parity.b ;Используемая схема паритета. Этот элемент может быть одним из следующих значений.
StopBits.b ;Количество стоповых битов, которые будут использоваться. Этот элемент может быть одним из следующих значений.
XonChar.c;Значение символа XON как для передачи, так и для приема.
XoffChar.c;Значение символа XOFF как для передачи, так и для приема.
ErrorChar.c;Значение символа, используемого для замены байтов, полученных с ошибкой четности.
EofChar.c;Значение символа, используемого для обозначения конца данных.
EvtChar.c;Значение символа, используемого для обозначения события.
wReserved1.w;
;Примечания
;Когда для настройки 8250 используется структура DCB, к значениям, указанным для элементов ByteSize и StopBits, применяются следующие ограничения:
;Количество битов данных должно быть от 5 до 8 бит.
;Использование 5 битов данных с 2 стоповыми битами является недопустимой комбинацией, равно как и 6, 7 или 8 битов данных с 1,5 стоповыми битами.
EndStructure;};
Structure _COMMCONFIG;{;Содержит информацию о состоянии конфигурации устройства связи.
dwSize.l;Размер структуры в байтах. Вызывающий должен установить для этого члена значение sizeof(COMMCONFIG)
wVersion.w;Номер версии структуры. Этот параметр может быть равен 1. Версия специфичной для провайдера структуры должна быть включена в элемент wcProviderData.
wReserved.w; не используй
dcb._DCB;Структура блока управления устройством (DCB) для последовательных устройств RS-232. Структура DCB присутствует всегда, независимо от подтипа драйвера порта, указанного в структуре COMMPROP устройства.
dwProviderSubType.l;Тип провайдера связи и, следовательно, формат данных, специфичных для провайдера. Список типов провайдеров связи см. в описании структуры COMMPROP.
dwProviderOffset.l;Смещение данных поставщика относительно начала структуры в байтах. Этот член равен нулю, если нет данных, специфичных для поставщика.
dwProviderSize.l;Размер данных поставщика в байтах.
wcProviderData.u[1];Необязательные данные для конкретного поставщика.
;Этот элемент может быть любого размера или может быть опущен. Поскольку в будущем структура COMMCONFIG может быть расширена, приложения должны использовать элемент dwProviderOffset для определения местоположения этого элемента.
;Примечания
;Если подтип поставщика — PST_RS232 или PST_PARALLELPORT, элемент wcProviderData опускается. Если подтип провайдера — PST_MODEM, элемент wcProviderData содержит структуру MODEMSETTINGS.
EndStructure;};
Procedure debug_ohibka()
Protected *Bufer
*Bufer=AllocateMemory(200)
FormatMessage_(#FORMAT_MESSAGE_FROM_SYSTEM,0, GetLastError_(), #LANG_NEUTRAL, *Bufer, 200,0)
MessageRequester("Событие",Str(GetLastError_())+" "+PeekS(*Bufer,-1,#PB_Unicode))
FreeMemory(*Bufer)
EndProcedure
Procedure.i CommConfigDialog(*lpszName,hWnd,*COMMCONFIG);Отображает диалоговое окно конфигурации драйвера
;lpszName,Имя устройства, для которого должно отображаться диалоговое окно. Например, от COM1 до COM9 — последовательные порты, а от LPT1 до LPT9 — параллельные порты.
;hWnd,Дескриптор окна, которому принадлежит диалоговое окно. Этот параметр может быть любым допустимым дескриптором окна или должен иметь значение NULL, если у диалогового окна не должно быть владельца.
;*COMMCONFIG,Указатель на структуру COMMCONFIG. Эта структура содержит исходные настройки диалогового окна до звонка и измененные значения после звонка.
;Примечания;Для функции CommConfigDialog требуется библиотека динамической компоновки (DLL), предоставляемая поставщиком коммуникационного оборудования.
If CommConfigDialog_(*lpszName,hWnd,*COMMCONFIG)<>0
ProcedureReturn 1
Else
debug_ohibka()
ProcedureReturn 0
EndIf
EndProcedure
Procedure.i GetDefaultCommConfig(*lpszName,*COMMCONFIG._COMMCONFIG,*lpdwSize);Извлекает конфигурацию по умолчанию для указанного устройства связи.(как в диспетчере)
;lpszName=Имя устройства. Например, от COM1 до COM9 — последовательные порты, а от LPT1 до LPT9 — параллельные порты
;*COMMCONFIG=Указатель на буфер, который получает структуру COMMCONFIG
;lpdwSize=Указатель на переменную, определяющую размер буфера, на который указывает *COMMCONFIG, в байтах. По возвращении переменная содержит количество скопированных байтов, если функция завершилась успешно, или количество байтов, необходимых, если буфер был слишком мал.
If GetDefaultCommConfig_(*lpszName,*COMMCONFIG._COMMCONFIG,*lpdwSize)<>0
ProcedureReturn 1
Else
ProcedureReturn 0
EndIf
EndProcedure
;====================================
Global *COMMCONFIG.COMMCONFIG
Debug SizeOf(*COMMCONFIG)
Global *bufer=AllocateMemory(150)
Global bufersize.i=150;_COMMCONFIG\dwSize
For i=0 To 255
s.s="COM"+Str(i)
If GetDefaultCommConfig(@s,*bufer,@bufersize)
*COMMCONFIG=*bufer
Debug bufersize
Debug s
Debug "версия "+Str(*COMMCONFIG\wVersion)
Debug "========протокол связи======="
Select *COMMCONFIG\dwProviderSubType
Case $00000021;ФАКС
Debug "ФАКС"
Case $00000101;LAT-протокол
Debug "LAT-протокол"
Case $00000006;Модемное устройство
Debug "Модемное устройство"
Case $00000100;Неизвестный сетевой мост
Debug "Неизвестный сетевой мост"
Case $00000002;Параллельный порт
Debug "Параллельный порт(Lpt)"
Case $00000001;Последовательный порт RS-232
Debug "Последовательный порт RS-232"
Case $00000003;Порт RS-422
Debug "Порт RS-422 "
Case $00000004;Порт RS-423
Debug "Порт RS-423"
Case $00000005;Порт RS-449
Debug "Порт RS-449"
Case $00000022;Сканер
Debug "Сканер"
Case $00000102;Протокол TCP/IP Telnet
Debug "Протокол TCP/IP Telnet"
Case $00000000;Неопределенные
Debug "Неопределенные"
Case $00000103;Стандарты Х.25
Debug "Стандарты Х.25"
Default:;Неустановленный
Debug "Неустановленный"
EndSelect
Debug "============"
Debug "dwProviderOffset "+Str(*COMMCONFIG\dwProviderOffset)
Debug "dwProviderSize "+Str(*COMMCONFIG\dwProviderSize)
Debug "wcProviderData "+Str(*COMMCONFIG\wcProviderData)
Debug "=====dcb====="
Debug "DCBlength "+Str(*COMMCONFIG\dcb\DCBlength)
Debug "BaudRate(Скорость обмена данными, бит/с) "+Str(*COMMCONFIG\dcb\BaudRate);;Скорость обмена данными, бит/с
Debug "======Битовое поле для настройки порта===="
Select *COMMCONFIG\dcb\fbits
Case 4880
Debug "Xon/Xoff"
Case 4112
Debug "Нет"
Case 8236
Debug "Аппаратное"
EndSelect
Debug "XonLim "+Str(*COMMCONFIG\dcb\XonLim)
Debug "XoffLim "+Str(*COMMCONFIG\dcb\XoffLim)
Debug "биты данных "+Str(*COMMCONFIG\dcb\ByteSize)
;
Debug "=============чётность============"
Select *COMMCONFIG\dcb\Parity;чётность
Case 0;Нет чётности(Нет паритета)
Debug "нет"
Case 1;НЕЧЕТНОСТЬ(Нечетный паритет)
Debug "нечет(нечётность)"
Case 2;РАВЕНСТВО Даже паритет.
Debug "чёт(равенство)"
Case 3;Отметить паритет
Debug "маркер(равенство)"
Case 4;ПРОСТРАНСТВО(Космический паритет)
Debug "пробел"
EndSelect
Debug "======================="
;
Debug "=========StopBits=========="
Select *COMMCONFIG\dcb\StopBits
Case 0;1
Debug "1"
Case 1;1.5
Debug "1.5"
Case 2;2
Debug "2"
EndSelect
Debug *COMMCONFIG\dcb\XonChar
Debug *COMMCONFIG\dcb\XoffChar
Debug *COMMCONFIG\dcb\ErrorChar
Debug *COMMCONFIG\dcb\EofChar
Debug *COMMCONFIG\dcb\EvtChar
EndIf
Next
FreeMemory(*bufer)
;===================================
Global _COMMCONFIG._COMMCONFIG
_COMMCONFIG\dwSize=SizeOf(_COMMCONFIG)
CommConfigDialog(@"COM2",0,_COMMCONFIG)