Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.03.26;
Скачать: CL | DM;

Вниз

Приемник   Найти похожие ветки 

 
_duk   (2005-12-24 18:39) [0]

Существует инфрокрасный приемник (оговорка: работающий 100%), подключеннный ком-порту, а именно: 1, 5 и седьмая ноги. Данные читаются с 7 ноги. Вопрос вот в чем как словить сигнал который передает пульт (пульт - обычный, телевизионный). Как впринципе прочитать информацию с ноги я знаю, но почему-то всегда приходит разный результат.
Я циклически проверяю 7 контакт, заношу данные в массив (фиксированного размера), с него записываю в файл. Но содержимое файлов отличается.
WinLirc с этим всем работает нормально, пробовал разобраться в его исходниках но там как-то все разбросано и вообще трудночитабельно.
Если у кого-то есть идеи как словить сигнал или кто-то знает как это делается, очень прошу поделитесь!


 
_duk   (2005-12-24 20:25) [1]

Небольшое дополнение: подскажите как прочитать описанную информацию при помощи WinApi, так как я делал это при помощи Ассемблера.


 
Deka ©   (2005-12-26 11:19) [2]

Наверное все дело в синхронизации.


 
_duk   (2005-12-26 12:15) [3]

Тоесть


 
Reindeer Moss Eater ©   (2005-12-26 12:28) [4]

ИК приемники бывают разные.
Доступ к одним осуществляется как к коммуникационным портам.
CreateFile
ReadFile  и т.д.

К другим через специальное расширение WinSock API для IR


 
Deka ©   (2005-12-26 18:12) [5]

Насколько я знаю пульт передает код при помощи последовательного кода. Значит просто читать состояние седьмого пина недостаточно. Его состояние надо читать в нужное время. Это и есть синхронизация. Почитай про передачу для COM-порта и после того, как поймешь физику процесса сможешь справится со своей задачей. Насколько я помню RxD и TxD на 2-ой и третьей ножке. Скорее всего твой ИК использует какой-то вспомогательный сигнал COM-порта и поэтому тебе придется вручную оргиназовать протокол связи пульта. Есть документация на то, как пульт передает? Сколько юит в посылке? Какая скорость посылки? Есть ли стартовый бит? Стоповый? Какой промежуток между "байтами" и т.д.?


 
_duk   (2005-12-26 18:50) [6]

Упрощенный вариант информации с 7 ноги (на первой и пятой одно и тоже значение - какое-то число но оно ничего к делу не имеет):
Я сделал так чтоб данные записывались в файл по нажатию кнопки, тоесть в файле хранится только то, что посылает пульт.
8 128 ... 128 8 0...0 136 128.......

З. Ы. А можно ли с помощью ВинАПИ как-то читать какую либо ногу, так как с CreateFile ReadFile  тут не обойдешся, мне кажется.

То что хранится в настройках ВинЛирк:
# brand:             CT-9922
# model:            
# supported devices:
#

begin remote

 name  CT-9922
 bits           16
 flags SPACE_ENC
 eps            25
 aeps          100

 header       9037  4380
 one           648   466
 zero          648  1585
 ptrail        648
 repeat       9043  2143
 pre_data_bits   16
 pre_data       0xFD02
 gap          39626
 toggle_bit      0

     begin codes
         CALL                     0x0000000000009768
         MUTE                     0x000000000000F708
         POWER                    0x000000000000B748
         1                        0x0000000000007F80
         2                        0x000000000000BF40
         3                        0x0000000000003FC0
         4                        0x000000000000DF20
         5                        0x0000000000005FA0
         6                        0x0000000000009F60
         7                        0x0000000000001FE0
         8                        0x000000000000EF10
         9                        0x0000000000006F90
         DIGIT_SELECT             0x0000000000002FD0
         0                        0x000000000000FF00
         TV/VIDEO                 0x000000000000D728
         CH"+"                    0x00000000000027D8
         VOL"+"                   0x000000000000A758
         CH"-"                    0x00000000000007F8
         MENU"UP"                 0x0000000000006798
         VOL"-"                   0x0000000000008778
         MENU"-"                  0x0000000000008778
         MENU"+"                  0x000000000000A758
         MENU                     0x00000000000025DA
         MENU"DOWN"               0x00000000000047B8
         PICTURE                  0x000000000000E718
     end codes

end remote


 
GuAV ©   (2005-12-26 19:29) [7]


> А можно ли с помощью ВинАПИ как-то читать какую
> либо ногу, так как с CreateFile ReadFile  тут не
> обойдешся, мне кажется.

SetCommMask, WaitCommEvent, "седьмая нога" - EV_DSR

> То что хранится в настройках ВинЛирк:

Длительности импульсов и пауз в милисекундах, их ещё распарсить надо...

Если нужно как-нибудь реагировать на пульт, ИМХО лучше запускать винлирк и подключатся к нему через сокеты.


 
tesseract ©   (2005-12-26 20:46) [8]

Winlirc если неошибаюсь в исходных кодах распространяется. Там и можешь подсмотреть.


 
_duk   (2005-12-27 10:03) [9]

А хоть принцип как использовать SetCommMask, WaitCommEvent и небольшой примерчик как например прочитать 7 ногу.


 
Fay ©   (2005-12-27 10:15) [10]

2 _duk   (24.12.05 18:39)
> Существует инфрокрасный приемник
инфрОкрасный, думаю, пока не существует


 
tesseract ©   (2005-12-27 10:23) [11]

Порт открывается как ovelapped.
Данный код не тестировался на EV_DSR!!!

hCom:=CreateFile(fPortName,GENERIC_READ OR GENERIC_WRITE,0,NIL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL or FILE_FLAG_OVERLAPPED,0);
// Если неверен выходим
if (hCom=INVALID_HANDLE_VALUE)  then
 begin
  fLastError:=ErrPortError;
  exit;
end;
// Устанавливаем overlapped структуру чтения
FillChar(ReadOl,SizeOF(ReadOL),0);
ReadOl.hevent:=CreateEvent(nil,true,true,nil);
// Устанавливаем Overlapped для маски порта
if fUseMaskWait then
  begin
    FillChar(MaskOl,SizeOf(MaskOl),0);
    MaskOl.hevent:=CreateEvent(nil,false,false,nil);
    fMask:=EV_DSR and not EV_RING;
    SetCommMask(hCom,fMask);
  end;

Пример ожидания

WaitCommEvent(hCom,tMask,@MaskOL); //
fSignaled:= WaitForSingleObject(MaskOl.hEvent,WaitInt);
if fSignaled = WAIT_TIMEOUT then begin cancelIo(hcom); exit; end;
if (fSignaled = WAIT_OBJECT_0) then
// Далее далее


 
Deka ©   (2005-12-27 10:56) [12]

Приведенная информация уже что-то дает, но ее недостаточно. Вообще оно должно работать примерно так:
- у передачи должен быть начало и оно обычно обозначается чем-то (например появление единицы на ножке). Т.е. фронтом сигнала (перепад от лог.0 к лог.1). Может быть и наоборот.
- далее надо убедиться, что это не случайное срабатывание от помех и для этого служит какое-либо правило (например любая передача начинается с передачи $AA 2 раза).
- если приемник 2 раза принял $AA то считается что полученный сигнал не является помехой и следует далее ожидать поступление передаваемых данных. Иначе срабатывание было ложным - продолжаем ожидать стартовой посылки.
- заканчиваться передача может как просто так, так и посылкой признака конца передачи (например контрольной суммой переданных данных, либо просто, например, $55). Контрольная сумма (сам понимеешь) дает возможность проверить правильность передачи. Не думаю что для пультов это критично (целостность переданных данных), но чем черт не шутит.

Это и есть физика процесса, про которую я просил почитать. Конечно в общих чертах, но все работает примерно так. Теперь тебе надо просто найти скорость передачи (сколько бит в секунду передается), число бит в посылке, наличие стартовой и стоповой посылки и через какое время повторяются посылки. Классически посылки не могут повторятся быстрее интервала между битами. Истинное состояние бита считывается примерно в середине каждой битовой посылки, так как считается что все уровни установились.


 
Deka ©   (2005-12-27 11:05) [13]

Вот еще...
http://www.xakep.ru/post/13964/default.asp


 
_duk   (2005-12-29 15:59) [14]

а может у кого-то есть список финкций по этому делу и пояснение к ним (на русском)???


 
tesseract ©   (2005-12-30 13:49) [15]


> - далее надо убедиться, что это не случайное срабатывание
> от помех и для этого служит какое-либо правило (например
> любая передача начинается с передачи $AA 2 раза)


Там НЕТ передачи данных. Там идёт пульсация RTS. И по ней определяется что передаётся. Типа азбуки морзе.
Посмотреть в действии можно включив на видео-камере режим ночной съёмки и направить пульт в объектив.
EV_RTS даст тебе информацию о том что RTS снялось/поднялось.


> Это и есть физика процесса, про которую я просил почитать.
>  Конечно в общих чертах, но все работает примерно так. Теперь
> тебе надо просто найти скорость передачи (сколько бит в
> секунду передается), число бит в посылке, наличие стартовой
> и стоповой посылки и через какое время повторяются посылки.
>  Классически посылки не могут повторятся быстрее интервала
> между битами


Не передаёт передатчик ДУ битами, он длительностью импульса передаёт. Он не IR-порт который удлиннитель COM.


> а может у кого-то есть список финкций по этому делу и пояснение
> к ним (на русском)???


А чем тебе мой не нравится? После WaitCommEvent запоминай значения длины между сменой сигнала.


 
Rouse_ ©   (2005-12-30 14:03) [16]

Эээ, если интересует работа с iRDA через сокет, могу найти исходники, что-то у меня тут валялось рабочее :)


 
_duk   (2006-01-02 14:26) [17]

To tesseract: Хотелось бы иметь полностью все функции и их описания в этой области.

To Rouse_: найдите.


 
tesseract ©   (2006-01-02 20:21) [18]

MSDN - другого нет


 
Deka ©   (2006-01-03 14:31) [19]

To [15] tesseract ©: Вся что я написал - это для примера и физика процесса тоже не точная. А в длительности импулься и закодированы биты. Простая последовательная передача. Все равно придется весь этот "огород", хоть с длительностью хоть с битами вручную разбирать.


 
Deka ©   (2006-01-03 14:39) [20]

В пультая вроде как наиболее распространен RC-5 алгоритм передачи. Причем у разных фирм вполне могут буть разные алгоритмы передачи. Поиски спецификации на RC-5 никчему не привели. Наверное плохо искал.


 
tesseract ©   (2006-01-03 14:54) [21]


>  Причем у разных фирм вполне могут буть разные алгоритмы
> передачи.


Они и есть разные. WinLirc как работает - направляешь пульт на приёмник и обычаешь кнопкам.

С AVRFreaks.com была ссылка на подобный прибор на Atmega8. Была выложена прошивка на usb девайс + драйвер.


 
wal ©   (2006-01-10 09:20) [22]


> Поиски спецификации на RC-5 никчему не привели.
Тоже не так давно был озадачен таким поиском. Но мир не без добрых людей.
http://www.xs4all.nl/~sbp/knowledge/ir/rc5.htm
Спасибо MBo

С уважением.


 
Deka ©   (2006-01-10 10:06) [23]

Вот это описание! Вот спасибо!!! Теперь наверное у _duk  все получится.


 
Rouse_ ©   (2006-01-10 10:27) [24]

http://blog.opennetcf.org/pfoot/CategoryView.aspx?category=Desktop%20Code



Страницы: 1 вся ветка

Текущий архив: 2006.03.26;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.044 c
15-1141577737
Vendict
2006-03-05 19:55
2006.03.26
Linux + GPRS


8-1129663830
Tasha
2005-10-18 23:30
2006.03.26
Преобразование изображения


15-1141711021
КаПиБаРа
2006-03-07 08:57
2006.03.26
Тут вроде администрация сайта конкурс проводила...


2-1141670649
KILROY
2006-03-06 21:44
2006.03.26
ADOTable...


3-1138960955
Nailspb
2006-02-03 13:02
2006.03.26
Глюки