Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2006.03.26;
Скачать: [xml.tar.bz2];

Вниз

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

 
_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 вся ветка

Форум: "WinAPI";
Текущий архив: 2006.03.26;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.52 MB
Время: 0.041 c
2-1141992438
it_work
2006-03-10 15:07
2006.03.26
Как эмитировать нажатия кнопок


5-1127898961
Иванов__
2005-09-28 13:16
2006.03.26
Нужен компонент HTML-редактор


2-1142269570
alone
2006-03-13 20:06
2006.03.26
Система


2-1141626781
K_Val
2006-03-06 09:33
2006.03.26
Программа без среды Delphi


2-1141644031
Farpik
2006-03-06 14:20
2006.03.26
Как отследить подключение к Интернету?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский