Форум: "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