IRDA (Работа с ИК портом на C++)

Модератор: Модераторы разделов

CapCom
Сообщения: 6
ОС: Slackware + Crunchbang

IRDA

Сообщение CapCom »

Доброе время суток.

В общем такая ситуация. Имеется софтина под Windows, работающая с ИК-портом, переписываю ее под Линукс. Все бы хорошо, но при приеме данных функцией recv помимо собственно данных принимается еще что-то наподобие заголовка (28 байт в начале, далее идут реально отправляемые данные). В Windows подобная проблема также наблюдалась, но решилась переключением в 9-wire режим (IrCOMM) следующим кодом:

Код: Выделить всё

    int x = 1;

    setsockopt(ss, SOL_IRLMP, IRLMP_9WIRE_MODE, (char *)&x, sizeof(x));


В Линуксе такое не срабатывает. Отсюда, собственно, вопрос: как принудительно установить 9-wire режим? Либо же есть другой способ избавиться от этого 28 байтового заголовка, ладно при приеме я могу его просто игнорировать, но при передаче данных он тоже требует что-то прописать в этот заголовок. В противном случае передача данных просто не идет.

PS Если кому интересно, первые 28 байт выглядят вот так:
0x1a, 0x10, 0x04, 0x00, 0x01, 0xc2, 0x00, 0x11,
0x01, 0x03, 0x12, 0x01, 0x00, 0x13, 0x02, 0x11,
0x13, 0x14, 0x02, 0x06, 0x05, 0x16, 0x01, 0x00,
0x20, 0x01, 0x03, 0x00
Спасибо сказали:
Galaxy Master
Сообщения: 142
ОС: Debian GNU/Linux

Re: IRDA

Сообщение Galaxy Master »

CapCom писал(а):
04.02.2009 08:10
...но при приеме данных функцией recv...



Как в системе выглядит этот ИК порт? Например у меня это /dev/ircomm0. Как на счет открыть его как обычный com-порт и далее read/write?

Под windows не раз писал приложения работающие с ИК-портом, но всегда общался с виртуальным ком-портом, который создается дровами в винде и не сталкивался ни с сокетами ни с какими-то заголовками.
Спасибо сказали:
CapCom
Сообщения: 6
ОС: Slackware + Crunchbang

Re: IRDA

Сообщение CapCom »

Я его не цепляю на /dev/ircommX

Я просто цепляю IRDA-стэк командой
irattach irda0 -s
и вперед работать.

Работа с ИК через сокеты - обычная вещь, которая стабильно работает в винде и, как я успел убедится изучая исходники никсовых программ, в линуксе.
Плюс к тому в винде для моего ИК-адаптера никакой виртуальный COM-порт не создается, а через сокеты всегда можно поработать если сам ИК-адаптер распознался.

В общем вопрос остается открытым.
Спасибо сказали: