Работа с COM и LPT в Win32. - [11]
>ct.WriteTotalTimeoutMultiplier = ct.WriteTotalTimeoutConstant = 0;
>port = CreateFile("COM2", GENERIC_READ|GENERIC_WRITE, 0 ,NULL, OPEN_EXISTING, 0, NULL);
>SetCommState(port, dcb);
>SetCommTimeouts(port, &ct);
>PurgeComm(port, PURGE_TXCLEAR|PURGE_RXCLEAR);
>SetupComm(port, 256, 256);
>. . .
>buf_in = (char*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, strlen(buf_out)+1);
>WriteFile(port, buf_out, strlen(buf_out), &bc, NULL);
>ReadFile(port, buf_in, strlen(buf_out), &bc, NULL);
>HeapFree(GetProcessHeap(), 0, buf_in);
>CloseHandle(port);
>. . .
Если на COM2 установить перемычку между сигналами TxD и RxD, то переменная buf_in, после выполнения ReadFile, будет содержать ту же информацию, что и buf_out. Других пояснений пример не требует, все уже было подробно рассмотрено раньше.
Иногда требуется срочно передать символ, имеющий определенное специальное значение, а в очереди передатчика уже есть данные, которые нельзя терять. В этом случае можно воспользоваться функцией:
>BOOL TransmitCommChar(HANDLE hFile, char cChar);
Данная функция передает один (и только один) внеочередной байт в линию, не смотря на наличие данных в очереди передатчика, и перед этими данными. Однако управление потоком действует. Функцию можно вызвать только синхронно. Более того, если байт экстренных данных, от предыдущего вызова этой функции, еще не передан в линию (например из-за функций управления потоком), то попытка экстренной передачи еще одного байта завершится ошибкой. Если Вы используете программное управление потоком, то символы приостановки и возобновления передачи (обычно CTRL-S и CTRL-Q), лучше всего передавать именно этой функцией.
Последовательный канал передачи данных можно перевести в специальное состояние, называемое разрывом связи. При этом передача данных прекращается, а выходная линия переводится в состояние "0". Приемник, обнаружив, что за время необходимое для передачи стартового бита, битов данных, бита четности и стоповых битов, приемная линия ни разу не перешла в состояние "1", так же фиксирует у себя состояние разрыва.
>BOOL SetCommBreak(HANDLE hFile);
>BOOL ClearCommBreak(HANDLE hFile);
Следует заметить, что состояние разрыва линии устанавливается аппаратно. Поэтому нет другого способа возобновить прерваную, с помощью SetCommBreak, передачу данных, кроме вызова ClearCommBreak.
Более тонкое управление потоком данным позволяет осуществить функция:
>BOOL EscapeCommFunction(HANDLE hFile, DWORD dwFunc);
Выполняемое действие определяется вторым параметром, который может принимать одно из следующих значений:
CLRDTR | Сбрасывает сигнал DTR |
CLRRTS | Сбрасывает сигнал RTS |
SETDTR | Устанавливет сигнал DTR |
SETRTS | Устанавливает сигнал RTS |
SETXOFF | Симулирует прием символа XOFF |
SETXON | Симулирует прием символа XON |
SETBREAK | Переводит выходную линию передатчика в состояние разрыва. SetCommBreak является упрощенной формой данного вызова. |
CLRBREAK | Снимает состояние разрыва для выходной линии передатчика. ClearCommBreak является упрощенной формой данного вызова. |
Приостановить прием/передачу данных может и возникновение любой ошибки при установленом в TRUE поле fAbortOnError в структуре DCB использованой для настройки режимов работы коммуникационного порта. В этом случае, для восстановления нормальной работы порта, следует использовать функцию:
>BOOL ClearCommError(HANDLE hFile, LPDWORD lpErrors, LPCOMSTAT lpStat);
Эта функция не только сбрасывает признак ошибки для соответсвующего порта, но и возвращает более подробную информацию об ошибке. Кроме того, возможно получение информации о текущем состоянии порта. Вот что означают параметры:
hFile
Описатель открытого файла коммуникационного порта.
lpErrors
Адрес переменной, в которую заносится информация об ошибке. В этой переменной могут быть установлены один или несколько из следующих бит:
CE_BREAK | Обнаружено состояние разрыва связи |
CE_DNS Только для Windows95. | Параллельное устройство не выбрано. |
CE_FRAME | Ошибка обрамления. |
CE_IOE | Ошибка ввода-вывода при работе с портом |
CE_MODE | Запрошеный режим не поддерживается, или неверный описатель hFile. Если данный бит установлен, то значение остальных бит не имеет значение |
CE_OOP | Только для Windows95. Для параллельного порта установлен сигнал "нет бумаги". |
CE_OVERRUN | Ошибка перебега (переполнение аппаратного буфера), следующий символ потерян |
CE_PTO | Только для Windows95. Тайм-аут на параллельном порту |
CE_RXOVER | Переполнение приемного буфера или принят символ после символа конца файла (EOF) |
CE_RXPARITY | Ошибка четности |
CE_TXFULL | Переполнение буфера передачи |
lpStat
Адрес структуры COMMSTAT. Должен быть указан, или адрес выделенного блока памяти, или NULL, если не требуется получать информацию о состоянии.
Если с информацией об ошибке все ясно, то со структурой COMMSTAT мы еще не встречались. Вот она:
>typedef struct _COMSTAT
> DWORD fCtsHold:1;
> DWORD fDsrHold:1;
> DWORD fRlsdHold:1;
> DWORD fXoffHold:1;
> DWORD fXoffSent:1;
> DWORD fEof:1;
> DWORD fTxim:1;
> DWORD fReserved:25;
> DWORD cbInQue;
> DWORD cbOutQue;
>} COMSTAT, *LPCOMSTAT;
Поля структуры имеют следующее значение:
fCtsHold
Передача приостановлена из-за сброса сигнала CSR.
fDsrHold
Передача приостановлена из-за сброса сигнала DSR.
Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.
Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.