<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=12856&amp;view=findpost&amp;p=3192128</guid>
        <pubDate>Wed, 22 Aug 2012 06:54:35 +0000</pubDate>
        <title>Serial Port</title>
        <link>https://forum.sources.ru/index.php?showtopic=12856&amp;view=findpost&amp;p=3192128</link>
        <description><![CDATA[Booze: Спасибо за ответ&#33; Всего 9 лет прошло ;)<br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>Сообщения были разделены в тему &quot;<a class='tag-url' href='http://forum.sources.ru/index.php?showtopic=409486' target='_blank'>Флуд</a>&quot;</span></span><br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>Сообщения были разделены в тему &quot;<a class='tag-url' href='https://forum.sources.ru/index.php?showtopic=419605' target='_blank'>Флуд</a>&quot;</span></span>]]></description>
        <author>Booze</author>
        <category>PalmOS</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=12856&amp;view=findpost&amp;p=3178315</guid>
        <pubDate>Thu, 26 Jul 2012 09:45:27 +0000</pubDate>
        <title>Serial Port</title>
        <link>https://forum.sources.ru/index.php?showtopic=12856&amp;view=findpost&amp;p=3178315</link>
        <description><![CDATA[sanwork: Под Win-дой 9-й бит передаётся и принимается легко &#33;<br>Сперва при открытии порта в его структуре DCB надо поставить флаг fParity:<br><br>GetCommState(HCOM, &amp;dcb);<br>...<br>...<br>dcb.fParity = 1;<br>...<br>...<br>SetCommState(HCOM, &amp;dcb);<br><br>И дальше уже оперировать только параметром  Parity  из той же структуры DCB.<br>Переключать флаг можно на ходу в любом месте и мгновенно, без всяких задержек &#33;<br>Делается это тремя строчками:<br><br>Чтобы задать единичное состояние 9-го бита<br>...<br>GetCommState(HCOM, &amp;dcb);<br>dcb.Parity = MARKPARITY;<br>SetCommState(HCOM, &amp;dcb);<br>...<br><br>Чтобы задать нулевое состояние 9-го бита<br>...<br>GetCommState(HCOM, &amp;dcb);<br>dcb.Parity = SPACEPARITY;<br>SetCommState(HCOM, &amp;dcb);<br>...<br><br>после чего байты будут передаваться с единичным ( MARK ) или с нулевым ( SPACE )  9-м битом не-зависимо от содержимого самого байта &#33;<br>Чтобы прочитать 9-й бит при приёме надо проверить состояние порта на момент приёма:<br><br>...<br>COMSTAT ComStat;<br>unsigned long  ComErr;<br>...<br>ClearCommError(HCOM, &amp;ComErr, &amp;ComStat);<br>// кстати,  cbComStat.cbInQue  даёт число принятых байт в буфере приёмника, и их можно сразу прочитать.<br><br>// проверяем состояние 9-го бита<br>if (ComErr &amp; CE_RXPARITY)  ... ;<br>...<br><br>Если состояние бита совпадает с текущей настройкой порта то проверка даст 0, если не совпадает - то 1<br><br>Тут надо четко понимать что параметр  dcb.Parity  задаёт текущий режим всего порта как при передаче так и приёме.<br>То есть, если мы поставили  MARKPARITY  то байт(ы) будут передаваться с 9-м битом установленным в 1,  <br>и если теперь принятые байты также имеют установленный  MARK , то проверка  (ComErr &amp; CE_RXPARITY)  даст 0 (false).<br><br>Если теперь в порту установить режим  SPACEPARITY , байты будут передаваться с нулевым 9-м битом,<br>и если принятые байты также имеют нулевой 9-й бит, то при проверке  (ComErr &amp; CE_RXPARITY)  тоже будет получен 0 (false).<br><br>А вот когда установки режима отличаются на передаче и на приёме то  (ComErr &amp; CE_RXPARITY)  будет давать 1 (true)<br>Это может быть в разных случаях. Например, передатчик и приёмник находятся в разных устройствах (контроллер и компьютер), контроллер настроен на передачу 9-го бита, а комп ожидает  SPACEPARITY , и при контроле бита получится 1.<br>Может и на одном и том же компе - при передаче был режим  MARKPARITY,  потом быстро сменили на  SPACEPARITY, и приём пойдет уже в режиме SPACE.<br><br>Вобщем-то в основном и всё, довольно четко, ясно, и никаких гаданий над четностью устраивать не надо.<br>Ещё раз повторюсь - главное не забыть какой в данный момент установлен режим - MARKPARITY  или  SPACEPARITY  чтобы правильно передать и особенно принять байт(ы) &#33;]]></description>
        <author>sanwork</author>
        <category>PalmOS</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=12856&amp;view=findpost&amp;p=112150</guid>
        <pubDate>Sun, 09 Feb 2003 01:18:34 +0000</pubDate>
        <title>Serial Port</title>
        <link>https://forum.sources.ru/index.php?showtopic=12856&amp;view=findpost&amp;p=112150</link>
        <description><![CDATA[dW: Народ, может кто-нть чего-нть подскажет?<br><br>Суть проблемы такова:<br>Есть несколько девайсов, объединенных в сеть RS485. Необходимо прочитать с них некоторую информацию при помощи палма. Чтение данных осуществляется следующим образом:<br><br>- формат посылки: старт-бит, 9*бит данных, стоп-бит;<br>* те, кто знаком с микроконтролерами 89с51 и т.п., наверное помнят, что девятый бит используется для определения адреса микроконтроллера в сети<br><br>- непосредственно чтение данных:<br><br>а) послать несколько байт (адрес устройства, контрольная сумма и т.д.) при установленном 9-м бите (В9=1);<br><br>б) если пришел определенный ответ от соответствующего девайса, то передать ему команду (опять же несколько байт, но уже при В9=0);<br><br>в) если необходимо еще что-то прочитать, то повторить шаги а и б.<br><br>На РС с этим никаких проблем - 9-й бит эмулируется при помощи бита паритета (parity=mark или space (1/0)), ошибки паритета при приеме игнорируются, в общем все хорошо и просто до безобразия :D<br><br>На палме же есть такие заморочки:<br><br>а) parity=mark или space отсутствует напрочь, т.е. другого способа, кроме как самому считать паритет и в зависимости от этого устанавливать настройки порта (слишком медленно все это, девайс соответственно таймаут отрабатывает и ничегошеньки е присылает в ответ :( ) я не нашел &nbsp;:(<br>б) &nbsp;не видно никакой возможности задавить возникающие при приеме ошибки паритета, т.е. если я вызываю что-нть вроде SerReceiveCheck или SerReceive то ничего кроме Line Error в ответ не получаю :( Вроде как это можно решить, написав Serial Driver ???, но в PalmOS SDK и Companion к нему информации крайне мало.<br><br>Соответственно, вопрос: 1) может быть, кто-нибудь занимался подобным извратом и может что-нть подсказать и 2) если у кого-нибудь есть ссылки по этой тематике (особенно Serial Drivers), киньте плз ....<br><br>Best Regards, dW<br><br><br>]]></description>
        <author>dW</author>
        <category>PalmOS</category>
      </item>
	
      </channel>
      </rss>
	