<?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=85485&amp;view=findpost&amp;p=631556</guid>
        <pubDate>Fri, 04 Mar 2005 07:38:44 +0000</pubDate>
        <title>Как отправить строку(АТ команду) в модем</title>
        <link>https://forum.sources.ru/index.php?showtopic=85485&amp;view=findpost&amp;p=631556</link>
        <description><![CDATA[Oleg2004: <strong class='tag-b'>kleva</strong><br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>есть некий дескриптор, по которому все именуется</div></div><br>
Тогда надо искать специальное API, где поддерживается этот &quot;неизвестный&quot; дескриптор.<br>
Например, WinInet API вводит дескриптор интернет-сессии HINTERNET, он же и предоставляет набор функций для работы с ним.]]></description>
        <author>Oleg2004</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=85485&amp;view=findpost&amp;p=631449</guid>
        <pubDate>Fri, 04 Mar 2005 06:31:38 +0000</pubDate>
        <title>Как отправить строку(АТ команду) в модем</title>
        <link>https://forum.sources.ru/index.php?showtopic=85485&amp;view=findpost&amp;p=631449</link>
        <description><![CDATA[kleva: <strong class='tag-b'>Oleg2004</strong>,<br>
Спасибо за статью, буду пробовать.<br>
Тем не менее вопрос остается в силе, ибо, дальше мне искать как послать строку по USB, FireWare, LPT etc? Я не думаю, что HyperTerminal поддерживает непосредственно все эти соединения. Мне кажется, что Muran в данном случае прав - есть некий дескриптор, по которому все именуется. Наверно проще получить дескриптор абстрактного модема, не привязываясь к способу его соединения (в данном случае я просто привел пример с irda. Хотя поскольку у меня именно такое соединение, то буду пробовать ваш способ).]]></description>
        <author>kleva</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=85485&amp;view=findpost&amp;p=631415</guid>
        <pubDate>Fri, 04 Mar 2005 05:57:48 +0000</pubDate>
        <title>Как отправить строку(АТ команду) в модем</title>
        <link>https://forum.sources.ru/index.php?showtopic=85485&amp;view=findpost&amp;p=631415</link>
        <description><![CDATA[Oleg2004: <strong class='tag-b'>kleva</strong><br>
Одной из проблем в программировании инфракрасных сокетов является невозможность применения стандартной схемы разрешения имен хостов на базе статических ресурсов локальной сети, каким является сервер DNS. В программах протокола IrDA стало невозможным применение таких функций, как gethostbyname() и обычных схем IP-адресации, что привело к возникновению <strong class='tag-b'>нового коммуникационного домена</strong> и соответствующей ему схемы адресациии - AF_IRDA.<br>
Определена новая структура адреса инфракрасного сокета:<br>
typedef struct _SOCKADDR_IRDA<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;u_short &nbsp; &nbsp; irdaAddressFamily;</div><div class="code_line">&nbsp;&nbsp; &nbsp;u_char &nbsp; &nbsp; &nbsp;irdaDeviceID[4];</div><div class="code_line">&nbsp;&nbsp; &nbsp;char &nbsp; &nbsp; &nbsp; &nbsp;irdaServiceName[25];</div><div class="code_line">} SOCKADDR_IRDA, *PSOCKADDR_IRDA, FAR *LPSOCKADDR_IRDA;</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
<br>
Поле irdaAddressFamily содержит константу AF_IRDA. Поле идентификатора инфракрасного устройства irdaDeviceID представляет собой четырехбайтовую строку, единственным образом идентифицирующую устройство, на котором будет исполняться сервис. Сервер IrSock игнорирует это поле, но оно важно для клиентского приложения, так как именно оно определяет устройство, с которым клиенту предстоит взаимодействовать. <strong class='tag-b'>Последнее поле, irdaServiceName[25] содержит название сервиса, который должен быть зарегистрирован в системе (сервер) с помощью bind(), или к которому идет запрос на соединение c помощью connect() (клиент)</strong>. Для Windows СE эту структуру в клиентском приложении обычно инициализируют примерно таким образом:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">SOCKADDR_IRDA Аddress = {AF_IRDA, 0, 0,0,0,&quot;Service_Name&quot;};</div></ol></div></div></div></div><br>
В IrDA-технологии существуют &quot;известные&quot; имена сервисов, к ним относятся OBEX (Object Exchange) для передачи файлов, <strong class='tag-b'>IrCOMM – протокол эмуляции последовательного порта</strong>, IrLAN -для эмуляции сетевого взаимодействия в среде Ethernet и т.д.<br>
Основные проблемы программирования IrDA связаны с нетрадиционной схемой адресации нужного устройства. Для этого применяются две методологии – основанная на Logical Service Access Point Selectors (LSAP-SEL) и IAS. Адреса вышеупомянутых логических каналов называются Logical Service Access Point Selectors и находятся в диапазоне 0х01 до 0х6F (1-111-Windows CE), в настольных Windows – до 127. Адрес 0х00 зарезервирован, на нем находится служба IAS (Information Access Services), с помощью которой логическим каналам присваивается имя в виде текстовой строки - можно считать IAS &quot;инфракрасным&quot; аналогом службы DNS.<br>
IrDA оснащается только потоковым протоколом, датаграммных протоколов для него не существует.<br>
Служба Information Access Service (IAS) поддерживает так называемые &quot;yellow pages - желтые страницы&quot;, которые представляют собой набор записей для логических каналов с их идентификаторами, именами и атрибутами. Например, ноутебук PC1 может послать IAS-запрос на десктоп PC2 с логическим именем сервиса Speakers и атрибутом LSAP-SEL и получить в ответ значение 0х03, означающее, что программа, обслуживающая звуковое воспроизведение, стартует, если данные будут посланы на логический канал 0х03. <br>
Программирование этих действий для клиентского приложения выполняется следующим образом. После создания IrDA-сокета:<br>
sd = socket (AF_IRDA, SOCK_STREAM, 0); <br>
клиент производит просмотр устройств в разрешенном диапазоне с помощью функции getsockopt(): <br>
int getsockopt(SOCKET sd, int level, int optname, const char FAR *optval, int optlen); <br>
с указанием уровня SOL_IRLMP, а параметр optname может быть одним из следующих: <br>
·	IRLMP_ENUMDEVICES – запрашивается перечисление удаленных IRDA-устройств;<br>
·	IRLMP_IAS_QUERY – опрос IAS-атрибутов;<br>
·	IRLMP_SEND_PDU_LEN - опрос максимального размера посылаемого пакета  для режима IrLPT. <br>
Использование параметра IRLMP_ENUMDEVICES приводит к заполнению структуры WINDOWS_DEVICELIST необходимой информацией о всех доступных устройствах: <br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">typedef struct _WINDOWS_DEVICELIST</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;ULONG &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; numDevice;</div><div class="code_line">&nbsp;&nbsp; &nbsp;WINDOWS_IRDA_DEVICE_INFO &nbsp; &nbsp;Device[1];</div><div class="code_line">} WINDOWS_DEVICELIST, *PWINDOWS_DEVICELIST, FAR *LPWINDOWS_DEVICELIST;</div></ol></div></div></div></div><br>
где структура IRDA_DEVICE_INFO имеет следующий вид: <br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">typedef struct _WINDOWS_IRDA_DEVICE_INFO</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;u_char &nbsp;irdaDeviceID[4];</div><div class="code_line">&nbsp;&nbsp; &nbsp;char &nbsp; &nbsp;irdaDeviceName[22];</div><div class="code_line">&nbsp;&nbsp; &nbsp;u_char &nbsp;irdaDeviceHints1; &nbsp; //Отсутствует в Windows CE</div><div class="code_line">&nbsp;&nbsp; &nbsp;u_char &nbsp;irdaDeviceHints2; &nbsp; //Отсутствует в Windows CE</div><div class="code_line">&nbsp;&nbsp; &nbsp;u_char &nbsp;irdaCharSet;</div><div class="code_line">} WINDOWS_IRDA_DEVICE_INFO, *PWINDOWS_IRDA_DEVICE_INFO, </div><div class="code_line">&nbsp;&nbsp;FAR *LPWINDOWS_IRDA_DEVICE_INFO;</div></ol></div></div></div></div><br>
Примечание:<br>
Для Windows СE обе эти структуры имеют несколько иной вид.<br>
Доступ к полям нужной структуры мы получаем через указатель *optval.<br>
Использование getsockopt() с параметром IRLMP_ENUMDEVICES для перечисления доступных устройств не является оптимальным для мобильных устройств, так как это приводит к значительному потреблению энергии аккумулятора при циклическом опросе, потому что для просмотра всех устройств функцию getsockopt() надо вызывать в цикле. Практичнее использовать вызов setsockopt(), который может перевести наше IR-устройство в специальный режим поиска, используя опцию IRLMP_DISCOVERY_MODE.<br>
Метод, изложенный выше, представляет собой попытку соединения с нужным сервисом на хосте-партнере – это похоже на посылку TCP-сегмента с флагом S. Второй способ – это выполнение запроса IAS для нужного сервиса с помощью опции IRLMP_IAS_QUERY – это аналог DNS-запроса. В последнем случае мы получим указатель на структуру IAS_QUERY для Windows CE и WINDOWS_IAS_QUERY – для Windows 98,Me,2000 и XP. <br>
Следующий фрагмент использует Winsock1.1 для Windows CE – для этой версии ОС действительна только спецификация WinSock 1.1. Для работы необходимо подключение заголовочного файла af_irda.h, который доступен по адресу http://www.cswl.com/whiteppr/white/arhead.html.<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">#include &#60;windows.h&#62;</div><div class="code_line">#include &#60;af_irda.h&#62;</div><div class="code_line">#include &#60;stdio.h&#62;</div><div class="code_line">#pragma comment ( lib, &quot;WS2_32.Lib&quot; )</div><div class="code_line">void main()</div><div class="code_line">{</div><div class="code_line">SOCKET sd;</div><div class="code_line">SOCKADDR_IRDA address = {AF_IRDA, 0, 0,0,0,&quot;MyServer&quot;};</div><div class="code_line">DEVICELIST devList;</div><div class="code_line">char helloClient[25];</div><div class="code_line">int mode = 1;</div><div class="code_line">sd = socket (AF_IRDA, SOCK_STREAM, 0);</div><div class="code_line">// Перевод сокета в режим поиска</div><div class="code_line">setsockopt (sd, SOL_IRLMP, IRLMP_DISCOVERY_MODE, (char *)&amp;devList,(int)&amp;mode);</div><div class="code_line">// Получаем сигнал от нового устройствa – функция блокирующая</div><div class="code_line">recv(sd, (char *)&amp;devList, sizeof(devList), 0);</div><div class="code_line">// Выключаем режим поиска</div><div class="code_line">mode = FALSE;</div><div class="code_line">setsockopt (sd, SOL_IRLMP, IRLMP_DISCOVERY_MODE, (char *) &amp;devList, (int)&amp;mode);</div><div class="code_line">// Выбираем первое устройство в списке</div><div class="code_line">for(int i=0;i&#60;=3;i++)address.irdaDeviceID[i] = (char)devList.Device[i].irdaDeviceID;</div><div class="code_line">// Соединение клиента с сервисом по имени MyServer на выбранном устройстве </div><div class="code_line">connect(sd, (struct sockaddr*)&amp;address, sizeof(SOCKADDR_IRDA));</div><div class="code_line">// Шлем сообщение</div><div class="code_line">send(sd, &quot;Hello Server!&quot;, strlen(&quot;Hello World!&quot;)+1, 0);</div><div class="code_line">// Ожидание и получение ответа.</div><div class="code_line">recv(sd, helloClient, sizeof(helloClient), 0);</div><div class="code_line">printf(&quot;%s\n&quot;, helloClient);</div><div class="code_line">closesocket(sd);</div><div class="code_line">}</div></ol></div></div></div></div><br>
Пример программирования клиентского приложения для Windows 2000 с использованием WinSock 2.0 можно найти по адресу http://www.alanjmcf.me.uk/comms/infrared/irdaWinsockCli.cpp.html.]]></description>
        <author>Oleg2004</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=85485&amp;view=findpost&amp;p=631229</guid>
        <pubDate>Thu, 03 Mar 2005 21:33:47 +0000</pubDate>
        <title>Как отправить строку(АТ команду) в модем</title>
        <link>https://forum.sources.ru/index.php?showtopic=85485&amp;view=findpost&amp;p=631229</link>
        <description><![CDATA[kleva: Да, примерно так все и происходит.<br>Только, например я беру мобильник с модемом, и подключаю его к компу чере IrDa, что мне укаывать вместо COM1?]]></description>
        <author>kleva</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=85485&amp;view=findpost&amp;p=631224</guid>
        <pubDate>Thu, 03 Mar 2005 21:27:30 +0000</pubDate>
        <title>Как отправить строку(АТ команду) в модем</title>
        <link>https://forum.sources.ru/index.php?showtopic=85485&amp;view=findpost&amp;p=631224</link>
        <description><![CDATA[Muran: а как ты открываешь порт?<br>
<br>
вообще задумка в системе была такая, что ты имеешь некий дескриптор, и по нему пишешь данные.. а что под ним - тебе пофиг..<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">HANDLE hModem;</div><div class="code_line">...</div><div class="code_line">например hModem = CreateFile( &quot;COM1&quot;... );</div><div class="code_line">..</div><div class="code_line">WriteFile( hModem, &quot;ATZ&quot;.. );</div></ol></div></div></div></div>]]></description>
        <author>Muran</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=85485&amp;view=findpost&amp;p=631220</guid>
        <pubDate>Thu, 03 Mar 2005 21:19:11 +0000</pubDate>
        <title>Как отправить строку(АТ команду) в модем</title>
        <link>https://forum.sources.ru/index.php?showtopic=85485&amp;view=findpost&amp;p=631220</link>
        <description><![CDATA[kleva: Я научился отправлять АТ команды на модем, если он подключен к СОМ порту. Но если модем подключен через USB, IrDa или еще как, то способ записи в СОМ порт не проходит...Как в этом случае передать АТ команду модему? И как посмотреть список установленных модемов? (Как это делается в HyperTerminal)]]></description>
        <author>kleva</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      </channel>
      </rss>
	