NicoHood / IRLremote

Lightweight Infrared library for Arduino
http://www.nicohood.de
168 stars 37 forks source link

XMBC Logitech Harmony acting as MCE keyboard #4

Open tom4242 opened 9 years ago

tom4242 commented 9 years ago

Hi, i want to use your very nice hoodloader on UNO to act as a remote control for XMBC. I set up my Harmony to act as a MCE keyboard and used the PCINT sketch. But i do not receive good values. All i get - does not matter which key i pressed on the remote - is:

Protocol:6 Address:0 Command:0

Is this because the protocol is not supported by IRLRemote right now?

NicoHood commented 9 years ago

Can you please upload the raw example and press the same button several times? Press and release fast and also post some button holding output. I need to see what protocol the remote sends and how it behaves in general. It would be nice if you can describe the behavior.

For example NEC remotes sends a signal once and then sends a fixed "holding" signal. Other remotes repeat the code several times over and over.

Please post your code via pastebin.com or via a gist. I will try to implement it as soon as possible. Also try different buttons, but please mark that, so i can analyze it better. And make sure you point directly at the receiver to get the best signals.

Edit: Also try the normal interrupt sketch and check if this is working better for you. (the raw example relys on the normal interrupt anyways, so you have to change the pins for this debugging anyways).

tom4242 commented 9 years ago

Dear Nico,

the MCE keyboard is using to RC6 protocol. I found the documentation here: http://www.pcbheaven.com/userpages/The_Philips_RC6_Protocol/ http://www.sbprojects.com/knowledge/ir/rc6.php

I'm still trying to get into your sourcecode. But i is a little hard because if have not done decoding IR's before.

Here are some original codes:

static struct rc_map_table rc6_mce[] = { 19 20 { 0x800f0400, KEY_NUMERIC_0 }, 21 { 0x800f0401, KEY_NUMERIC_1 }, 22 { 0x800f0402, KEY_NUMERIC_2 }, 23 { 0x800f0403, KEY_NUMERIC_3 }, 24 { 0x800f0404, KEY_NUMERIC_4 }, 25 { 0x800f0405, KEY_NUMERIC_5 }, 26 { 0x800f0406, KEY_NUMERIC_6 }, 27 { 0x800f0407, KEY_NUMERIC_7 }, 28 { 0x800f0408, KEY_NUMERIC_8 }, 29 { 0x800f0409, KEY_NUMERIC_9 }, 30 31 { 0x800f040a, KEY_DELETE }, 32 { 0x800f040b, KEY_ENTER }, 33 { 0x800f040c, KEYSLEEP }, /* Formerly PC Power / 34 { 0x800f040d, KEYMEDIA }, / Windows MCE button _/ 35 { 0x800f040e, KEY_MUTE }, 36 { 0x800f040f, KEY_INFO }, 37 38 { 0x800f0410, KEY_VOLUMEUP }, 39 { 0x800f0411, KEY_VOLUMEDOWN }, 40 { 0x800f0412, KEY_CHANNELUP }, 41 { 0x800f0413, KEY_CHANNELDOWN }, 42 43 { 0x800f0414, KEY_FASTFORWARD }, 44 { 0x800f0415, KEY_REWIND }, 45 { 0x800f0416, KEY_PLAY }, 46 { 0x800f0417, KEY_RECORD }, 47 { 0x800f0418, KEY_PAUSE }, 48 { 0x800f0419, KEY_STOP }, 49 { 0x800f041a, KEY_NEXT }, 50 { 0x800f041b, KEY_PREVIOUS }, 51 { 0x800f041c, KEY_NUMERIC_POUND }, 52 { 0x800f041d, KEY_NUMERIC_STAR }, 53 54 { 0x800f041e, KEY_UP }, 55 { 0x800f041f, KEY_DOWN }, 56 { 0x800f0420, KEY_LEFT }, 57 { 0x800f0421, KEY_RIGHT }, 58 59 { 0x800f0422, KEY_OK }, 60 { 0x800f0423, KEY_EXIT }, 61 { 0x800f0424, KEY_DVD }, 62 { 0x800f0425, KEYTUNER }, / LiveTV _/ 63 { 0x800f0426, KEYEPG }, / Guide _/ 64 { 0x800f0427, KEYZOOM }, / Aspect _/ 65 66 { 0x800f0432, KEYMODE }, / Visualization _/ 67 { 0x800f0433, KEYPRESENTATION }, / Slide Show _/ 68 { 0x800f0434, KEY_EJECTCD }, 69 { 0x800f043a, KEY_BRIGHTNESSUP }, 70 71 { 0x800f0446, KEY_TV }, 72 { 0x800f0447, KEYAUDIO }, / My Music _/ 73 { 0x800f0448, KEYPVR }, / RecordedTV _/ 74 { 0x800f0449, KEY_CAMERA }, 75 { 0x800f044a, KEY_VIDEO }, 76 { 0x800f044c, KEY_LANGUAGE }, 77 { 0x800f044d, KEY_TITLE }, 78 { 0x800f044e, KEYPRINT }, / Print - HP OEM version of remote _/ 79 80 { 0x800f0450, KEY_RADIO }, 81 82 { 0x800f045a, KEYSUBTITLE }, / Caption/Teletext _/ 83 { 0x800f045b, KEY_RED }, 84 { 0x800f045c, KEY_GREEN }, 85 { 0x800f045d, KEY_YELLOW }, 86 { 0x800f045e, KEY_BLUE }, 87 88 { 0x800f0465, KEYPOWER2 }, / TV Power _/ 89 { 0x800f046e, KEY_PLAYPAUSE }, 90 { 0x800f046f, KEYPLAYER }, / Start media application (NEW) */ 91 92 { 0x800f0480, KEY_BRIGHTNESSDOWN }, 93 { 0x800f0481, KEY_PLAYPAUSE }, 94 };

I will send you some logged entries from Arduino (Ken Shirriff library) from my remote if you need this.

tom4242 commented 9 years ago

Key "1": Unknown encoding: E861F6E9 (32 bits) Raw (70): -15826 2850 -250 350 -250 650 -550 350 -250 350 -250 350 -250 350 -300 350 -250 350 -250 350 -250 650 -550 350 -300 350 -250 350 -250 350 -250 350 -250 350 -300 300 -300 350 -250 350 -250 350 -250 350 -250 600 -300 400 -250 350 -250 350 -500 400 -250 350 -250 350 -250 350 -250 400 -250 350 -250 350 -250 350 -250 350 19250059 Key "2": Unknown encoding: 19250059 (32 bits) Raw (70): -26236 2850 -250 300 -250 700 -500 400 -250 350 -250 350 -250 350 -250 350 -250 700 -250 350 -250 350 -250 350 -500 400 -250 350 -250 350 -250 400 -250 350 -250 350 -250 350 -250 350 -250 350 -250 350 -250 650 -300 350 -250 350 -250 350 -250 350 -550 350 -300 350 -250 350 -250 350 -250 350 -250 350 -300 350 -250 350 7D32E723 Key "3": Unknown encoding: 7D32E723 (32 bits) Raw (68): 28590 2850 -250 300 -250 650 -550 400 -250 350 -250 350 -250 350 -250 650 -550 400 -250 650 -250 350 -500 400 -250 400 -250 350 -250 350 -250 350 -250 350 -250 350 -250 350 -250 350 -250 650 -550 400 -250 350 -250 350 -250 350 -250 350 -250 350 -300 300 -300 350 -250 350 -250 350 -250 350 -250 350 -300 300

These are the values it get from Shirriff. Even his library could not decode this completely. The above values are only hash values. I unfortunately do not have the possibilety to send you the real raw values :-(

But "Channel UP" is working; maybe a Logitech Problem, maybe because of the responces time (2700<->2850). But i still need the rc6 implementation ;-)

Decoded RC6: 800F0412 (36 bits) Raw (66): 28094 2700 -850 500 -350 500 -400 500 -800 500 -800 1400 -800 500 -350 550 -350 500 -400 500 -350 500 -350 550 -400 500 -350 500 -350 550 -350 550 -350 950 -350 500 -350 500 -400 500 -800 550 -350 550 -350 500 -350 500 -350 950 -850 500 -350 550 -350 550 -350 500 -350 950 -850 500 -350 950 -800 550

tom4242 commented 9 years ago

definition for IRLremote.h should look like this: //RC6 //IRP notation: {36k,444,msb}<-1,1|1,-1>(6,-2,1:1,0:3,<-2,2|2,-2>(T:1),D:8,F:8,^107m)+

define RC6_HZ 36000

define RC6_PULSE 444UL

define RC6_MARK_LEAD RC6_PULSE_6

define RC6_SPACE_LEAD RC6_PULSE_2

define RC6_MARK_TRAILER RC6_PULSE_2

define RC6_SPACE_TRAILER RC6_PULSE_2

define RC6_MARK_ONE RC6_PULSE_1

define RC6_SPACE_ONE RC6_PULSE_1

define RC6_MARK_ZERO RC6_PULSE_1

define RC6_SPACE_ZERO RC6_PULSE_1

define RC5_SIGNALFREE RC6_PULSE_6

define RC6_ADDRESS_LENGTH 8

define RC6_COMMAND_LENGTH 8

define RC6_BLOCKS 2

define RC6_LENGTH (6 + 2) + 2 + 3_2 + 4 + (RC6_BLOCKS_8_2) + 6 //(LS) + SB + 3 * MB + TR + (DATA) + SIGNALFREE

NicoHood commented 9 years ago

So this is a working solution or from what you guessed? Thx for that much information, i will look through it soon.

NicoHood commented 9 years ago

You might try the hash "protocol" in the dev2 branch now. I have no remote to test RC6 yet.