Microsoft MCE Keyboard Remote

As keyboards are such a pain to get replicate using a remote, they get their own forum. Hopefully having all the posts in one place will make it easier to find the solution.

Moderator: Moderators

vickyg2003
Site Admin
Posts: 7109
Joined: Sat Mar 20, 2004 12:19 pm
Location: Florida
Contact:

Post by vickyg2003 »

I have a working version of Rob's Keyboard protocol for the HCS08

I have not started working on the mouse version because I'm trying to get this thing to travel farther.

I have shortened the leadout time to 3000, and it runs smoother, but it will still travel, just so far and then quit. I have observed that the left down motion will travel much farther than the right up. Even though the arrow stops moving, the IR is continuing to fire.
Remember to provide feedback to let us know how the problem was solved and share your upgrades.

Tip: When creating an upgrade, always include ALL functions from the oem remote, even if you never plan on assigning them to a button. Complete function lists makes an upgrade more helpful to others.
vickyg2003
Site Admin
Posts: 7109
Joined: Sat Mar 20, 2004 12:19 pm
Location: Florida
Contact:

Post by vickyg2003 »

Rob i've been playing with the checksum on the mouse signals. The first thing I noticed was there was a correlation with the y sign 0x04 of the first 7 bytes of data. Your keyboard checksum works for that. The left and right mouse buttons have an impact on the third and 4th check bit. But i'm not getting anywhere with the other bits. All i have to show for my time is tired eyes. How did you ever do those keyboard checksums!!

I suspect that one of those bits is actually a bit that needs to be toggled toggled every second to keep the mouse moving. Right now the mouse will stop after 1 second even if the button is still pressed.
Remember to provide feedback to let us know how the problem was solved and share your upgrades.

Tip: When creating an upgrade, always include ALL functions from the oem remote, even if you never plan on assigning them to a button. Complete function lists makes an upgrade more helpful to others.
The Robman
Site Owner
Posts: 21941
Joined: Fri Aug 01, 2003 9:37 am
Location: Chicago, IL
Contact:

Post by The Robman »

Well, with the keyboard we had lots of learns, so I sorted them by OBC and looked for patterns. The tricky one was the one with the OBC+2 bit included. I could see that the patterns were four 1s in a row then 4 zeroes, but they were shifted down 2 rows from where the OBC did that, which was the clue.

What I really wish I could do was write a program that tries every possible combination of bits to find the answer.

If you can show me how my keyboard code works for the mouse, I can probably do the rest.
Rob
www.hifi-remote.com
Please don't PM me with remote questions, post them in the forums so all the experts can help!
The Robman
Site Owner
Posts: 21941
Joined: Fri Aug 01, 2003 9:37 am
Location: Chicago, IL
Contact:

Post by The Robman »

Ok, I've started trying to crack the checksum for the mice, and I've got it close but it's not there yet. Posting to see if anyone can take it to the finish line...

https://www.hifi-remote.com/forums/dload ... e_id=14692
Rob
www.hifi-remote.com
Please don't PM me with remote questions, post them in the forums so all the experts can help!
vickyg2003
Site Admin
Posts: 7109
Joined: Sat Mar 20, 2004 12:19 pm
Location: Florida
Contact:

Post by vickyg2003 »

I've got houseguests through Tuesday so i'm not able to devote much time to this right now. I see that the linux driver for the Mce mouse processing looks at 21 bits they call the scancode. I'm not sure which 21 bits that they take.
They get the xdata and ydata
U8 xdata s
u8 xdata = (scancode >> 7) & 0x7f;
u8 ydata = (scancode >> 14) & 0x7f;
int x, y;
/* mouse buttons */
bool right = scancode & 0x40;
bool left = scancode & 0x20;

Code: Select all

	
u8 xdata = (scancode >> 7) & 0x7f;
	u8 ydata = (scancode >> 14) & 0x7f;
	int x, y;
	/* mouse buttons */
	bool right = scancode & 0x40;
	bool left  = scancode & 0x20;

	if (xdata & 0x40)
		x = -((~xdata & 0x7f) + 1);
	else
		x = xdata;

	if (ydata & 0x40)
		y = -((~ydata & 0x7f) + 1);
	else
		y = ydata;
And i'm not sure if this is something the driver is sending to programs or if it has something to do with the mouse receiving. Like i said i can't reas C.

Code: Select all


	/* Mouse bits */
	set_bit(EV_REL, idev->evbit);
	set_bit(REL_X, idev->relbit);
	set_bit(REL_Y, idev->relbit);
	set_bit(BTN_LEFT, idev->keybit);
	set_bit(BTN_RIGHT, idev->keybit);
Remember to provide feedback to let us know how the problem was solved and share your upgrades.

Tip: When creating an upgrade, always include ALL functions from the oem remote, even if you never plan on assigning them to a button. Complete function lists makes an upgrade more helpful to others.
Barf
Expert
Posts: 1522
Joined: Fri Oct 24, 2008 1:54 pm
Location: Munich, Germany
Contact:

Post by Barf »

I looked at the Linux code. Disappointingly, it neither generates nor checks any checksum -- just (by encoding) assumes that the user has already supplied it correctly in the "scandata" (payload data), and ignores it while receiving (at least I think so).

The first code segments lets x be formed from bit 6-13, interpreted as the 7-bit 2 complement. Analogously, y is formed from bits 14-20. left and right are bit 5 and 6 respectively.

Vicky's second except binds the driver into the system as an input device, so that the system will interpret relevant IR signals as input elements like KEY_*.
vickyg2003
Site Admin
Posts: 7109
Joined: Sat Mar 20, 2004 12:19 pm
Location: Florida
Contact:

Post by vickyg2003 »

Thanks for looking at the code Barf, I've been googling this up and down and can't find much one way or another. I supose this isn't in a class method, but rather in the CircClass.sys driver......


Rob, I've found a little time to work on this and have the second column worked out. I also expanded the first column to be similar to the keyboard set.

Column 1 checksum
=IF($F104="","",MOD(MID($G104,1,1)+MID($G104,2,1)+MID($G104,3,1)+MID($G104,4,1)+MID($G104,5,1),2))

Column 2 checksum

=MOD(MID($F104,1,1)+MID($G104,5,1)+MID($G104,6,1)+MID($G104,7,1)+MID($G104,8,1)+MID($H104,1,1) +MID($H104,2,1)+MID($H104,3,1)+MID($H104,4,1),2)

Column 3 checksum
=MOD(MID($G104,6,1)+MID($G104,7,1)+MID($G104,8,1)+MID($H104,1,1)+MID($H104,2,1)+MID($H104,3,1) +MID($H104,5,1)+MID($H104,6,1)+MID($H104,7,1),2)

Checksum Column 4
=MOD(MID($G104,6,1)+MID($G104,7,1)+MID($H104,5,1)+MID($H104,6,1)+MID($H104,8,1),2)
Remember to provide feedback to let us know how the problem was solved and share your upgrades.

Tip: When creating an upgrade, always include ALL functions from the oem remote, even if you never plan on assigning them to a button. Complete function lists makes an upgrade more helpful to others.
Barf
Expert
Posts: 1522
Joined: Fri Oct 24, 2008 1:54 pm
Location: Munich, Germany
Contact:

Post by Barf »

Ignoring the checksums for the moment, I wrote two IRP protocols from the information above:

Code: Select all

MCIR-2-kbd:
{300,msb}<-1,1|1,-1>(9,32:8,C:5,0:8,F:8,M:4,WinKey:1,Alt:1,Shift:1,Ctrl:1,-74m)*
[C:0..31,F:0..255,M:0..16,WinKey:0..1,Alt:0..1,Shift:0..1,Ctrl:0..1]

MCR-2-mouse:
{300,msb}<-1,1|1,-1>(9,8:8,C:5,y:7,x:7,R:1,L:1,F:5,-10.7m)*
[C:0..31,L:0..1,R:0..1,x:0..127,y:0..127,F:0..31]
These have been incorporated in the latest snapshot of IrpTransmogrifier. So, it can now be used to decode these signals. This can be called from the command line. Alternatively, the following bat file decodes the files of Vicky's zip bundle, published a few weeks ago:

Code: Select all

@echo off
REM Adjust the path name to irptransmogrifier in the line below

set DECODE=call "E:\irptransmogrifier\irptransmogrifier" --absolute 150 decode --repeat --namedinput

%DECODE% "1tozero.ict"
%DECODE% "A to Z .ict"
%DECODE% "Alt_CTRL.ict"
%DECODE% "C_Lessthan.ict"
%DECODE% "F1toF7.ict"
%DECODE% "MouseCommands.ict"
%DECODE% "Percentage_Plus.ict"
%DECODE% "f8-f12.ict"

pause

The following output is then produced:

Code: Select all

one   	MCIR-2-kbd: {Shift=0,C=2,WinKey=0,F=30,Alt=0,Ctrl=0,M=0}
two   	MCIR-2-kbd: {Shift=0,C=15,WinKey=0,F=31,Alt=0,Ctrl=0,M=0}
three 	MCIR-2-kbd: {Shift=0,C=19,WinKey=0,F=32,Alt=0,Ctrl=0,M=0}
four  	MCIR-2-kbd: {Shift=0,C=30,WinKey=0,F=33,Alt=0,Ctrl=0,M=0}
five  	MCIR-2-kbd: {Shift=0,C=29,WinKey=0,F=34,Alt=0,Ctrl=0,M=0}
six   	MCIR-2-kbd: {Shift=0,C=16,WinKey=0,F=35,Alt=0,Ctrl=0,M=0}
seven 	MCIR-2-kbd: {Shift=0,C=28,WinKey=0,F=36,Alt=0,Ctrl=0,M=0}
eight 	MCIR-2-kbd: {Shift=0,C=17,WinKey=0,F=37,Alt=0,Ctrl=0,M=0}
nine  	MCIR-2-kbd: {Shift=0,C=18,WinKey=0,F=38,Alt=0,Ctrl=0,M=0}
zero  	MCIR-2-kbd: {Shift=0,C=31,WinKey=0,F=39,Alt=0,Ctrl=0,M=0}
A Down  
A up    	MCIR-2-kbd: {Shift=0,C=0,WinKey=0,F=0,Alt=0,Ctrl=0,M=0}
B Down  	MCIR-2-kbd: {Shift=0,C=2,WinKey=0,F=5,Alt=0,Ctrl=0,M=0}
B Up    	MCIR-2-kbd: {Shift=0,C=0,WinKey=0,F=0,Alt=0,Ctrl=0,M=0}
C Down  
C Up    	MCIR-2-kbd: {Shift=0,C=0,WinKey=0,F=0,Alt=0,Ctrl=0,M=0}
D Down  	MCIR-2-kbd: {Shift=0,C=12,WinKey=0,F=7,Alt=0,Ctrl=0,M=0}
D Up    	MCIR-2-kbd: {Shift=0,C=0,WinKey=0,F=0,Alt=0,Ctrl=0,M=0}
E down  	MCIR-2-kbd: {Shift=0,C=17,WinKey=0,F=8,Alt=0,Ctrl=0,M=0}
E Up    	MCIR-2-kbd: {Shift=0,C=0,WinKey=0,F=0,Alt=0,Ctrl=0,M=0}
F down  	MCIR-2-kbd: {Shift=0,C=28,WinKey=0,F=9,Alt=0,Ctrl=0,M=0}
F Up    	MCIR-2-kbd: {Shift=0,C=0,WinKey=0,F=0,Alt=0,Ctrl=0,M=0}
G Down  	MCIR-2-kbd: {Shift=0,C=31,WinKey=0,F=10,Alt=0,Ctrl=0,M=0}
G up    	MCIR-2-kbd: {Shift=0,C=0,WinKey=0,F=0,Alt=0,Ctrl=0,M=0}
H Down  	MCIR-2-kbd: {Shift=0,C=18,WinKey=0,F=11,Alt=0,Ctrl=0,M=0}
H Up    	MCIR-2-kbd: {Shift=0,C=0,WinKey=0,F=0,Alt=0,Ctrl=0,M=0}
K Down  	MCIR-2-kbd: {Shift=0,C=30,WinKey=0,F=12,Alt=0,Ctrl=0,M=0}
K up    	MCIR-2-kbd: {Shift=0,C=0,WinKey=0,F=0,Alt=0,Ctrl=0,M=0}
L Down  	MCIR-2-kbd: {Shift=0,C=29,WinKey=0,F=15,Alt=0,Ctrl=0,M=0}
L Up    	MCIR-2-kbd: {Shift=0,C=0,WinKey=0,F=0,Alt=0,Ctrl=0,M=0}
M Down  	MCIR-2-kbd: {Shift=0,C=18,WinKey=0,F=16,Alt=0,Ctrl=0,M=0}
M up    	MCIR-2-kbd: {Shift=0,C=0,WinKey=0,F=0,Alt=0,Ctrl=0,M=0}
N Down  	MCIR-2-kbd: {Shift=0,C=31,WinKey=0,F=17,Alt=0,Ctrl=0,M=0}
N Up    	MCIR-2-kbd: {Shift=0,C=0,WinKey=0,F=0,Alt=0,Ctrl=0,M=0}
O down  	MCIR-2-kbd: {Shift=0,C=28,WinKey=0,F=18,Alt=0,Ctrl=0,M=0}
O up    	MCIR-2-kbd: {Shift=0,C=0,WinKey=0,F=0,Alt=0,Ctrl=0,M=0}
P Down  	MCIR-2-kbd: {Shift=0,C=17,WinKey=0,F=19,Alt=0,Ctrl=0,M=0}
P up    	MCIR-2-kbd: {Shift=0,C=0,WinKey=0,F=0,Alt=0,Ctrl=0,M=0}
Q Down  	MCIR-2-kbd: {Shift=0,C=29,WinKey=0,F=20,Alt=0,Ctrl=0,M=0}
Q up    	MCIR-2-kbd: {Shift=0,C=0,WinKey=0,F=0,Alt=0,Ctrl=0,M=0}
R down  	MCIR-2-kbd: {Shift=0,C=16,WinKey=0,F=21,Alt=0,Ctrl=0,M=0}
R up    	MCIR-2-kbd: {Shift=0,C=0,WinKey=0,F=0,Alt=0,Ctrl=0,M=0}
S Down  	MCIR-2-kbd: {Shift=0,C=19,WinKey=0,F=22,Alt=0,Ctrl=0,M=0}
S up    	MCIR-2-kbd: {Shift=0,C=0,WinKey=0,F=0,Alt=0,Ctrl=0,M=0}
T Down  	MCIR-2-kbd: {Shift=0,C=30,WinKey=0,F=23,Alt=0,Ctrl=0,M=0}
T up    	MCIR-2-kbd: {Shift=0,C=0,WinKey=0,F=0,Alt=0,Ctrl=0,M=0}
U Down  	MCIR-2-kbd: {Shift=0,C=3,WinKey=0,F=24,Alt=0,Ctrl=0,M=0}
U up    	MCIR-2-kbd: {Shift=0,C=0,WinKey=0,F=0,Alt=0,Ctrl=0,M=0}
V Down  	MCIR-2-kbd: {Shift=0,C=14,WinKey=0,F=25,Alt=0,Ctrl=0,M=0}
V Up    	MCIR-2-kbd: {Shift=0,C=0,WinKey=0,F=0,Alt=0,Ctrl=0,M=0}
W Down  	MCIR-2-kbd: {Shift=0,C=14,WinKey=0,F=25,Alt=0,Ctrl=0,M=0}
W Up    	MCIR-2-kbd: {Shift=0,C=0,WinKey=0,F=0,Alt=0,Ctrl=0,M=0}
X Down  	MCIR-2-kbd: {Shift=0,C=13,WinKey=0,F=26,Alt=0,Ctrl=0,M=0}
X Up    	MCIR-2-kbd: {Shift=0,C=0,WinKey=0,F=0,Alt=0,Ctrl=0,M=0}
Y Down  	MCIR-2-kbd: {Shift=0,C=0,WinKey=0,F=27,Alt=0,Ctrl=0,M=0}
Y Up    	MCIR-2-kbd: {Shift=0,C=0,WinKey=0,F=0,Alt=0,Ctrl=0,M=0}
Z Down  	MCIR-2-kbd: {Shift=0,C=12,WinKey=0,F=28,Alt=0,Ctrl=0,M=0}
Zup     	MCIR-2-kbd: {Shift=0,C=0,WinKey=0,F=0,Alt=0,Ctrl=0,M=0}
Z down2 	MCIR-2-kbd: {Shift=0,C=1,WinKey=0,F=29,Alt=0,Ctrl=0,M=0}
Z up    	MCIR-2-kbd: {Shift=0,C=0,WinKey=0,F=0,Alt=0,Ctrl=0,M=0}
F8 Down    	MCIR-2-kbd: {Shift=0,C=25,WinKey=0,F=65,Alt=0,Ctrl=0,M=0}
f9 Down    	MCIR-2-kbd: {Shift=0,C=26,WinKey=0,F=66,Alt=0,Ctrl=0,M=0}
f10 down   	MCIR-2-kbd: {Shift=0,C=23,WinKey=0,F=67,Alt=0,Ctrl=0,M=0}
f11 Down   	MCIR-2-kbd: {Shift=0,C=27,WinKey=0,F=68,Alt=0,Ctrl=0,M=0}
f12 Down   	MCIR-2-kbd: {Shift=0,C=22,WinKey=0,F=69,Alt=0,Ctrl=0,M=0}
Alt        	MCIR-2-kbd: {Shift=0,C=6,WinKey=0,F=0,Alt=1,Ctrl=0,M=0}
Ampersand  	MCIR-2-kbd: {Shift=1,C=25,WinKey=0,F=36,Alt=0,Ctrl=0,M=0}
AT         	MCIR-2-kbd: {Shift=1,C=10,WinKey=0,F=31,Alt=0,Ctrl=0,M=0}
Backquote  	MCIR-2-kbd: {Shift=0,C=3,WinKey=0,F=53,Alt=0,Ctrl=0,M=0}
Backslash  	MCIR-2-kbd: {Shift=0,C=12,WinKey=0,F=49,Alt=0,Ctrl=0,M=0}
Back Space 	MCIR-2-kbd: {Shift=0,C=12,WinKey=0,F=42,Alt=0,Ctrl=0,M=0}
CapsLock   	MCIR-2-kbd: {Shift=0,C=29,WinKey=0,F=57,Alt=0,Ctrl=0,M=0}
Caret      	MCIR-2-kbd: {Shift=1,C=21,WinKey=0,F=35,Alt=0,Ctrl=0,M=0}
Colon      	MCIR-2-kbd: {Shift=0,C=8,WinKey=0,F=51,Alt=0,Ctrl=0,M=2}
Colon 2    	MCIR-2-kbd: {Shift=0,C=8,WinKey=0,F=51,Alt=0,Ctrl=0,M=2}
Comma      	MCIR-2-kbd: {Shift=0,C=10,WinKey=0,F=54,Alt=0,Ctrl=0,M=2}
CTRl       	MCIR-2-kbd: {Shift=0,C=3,WinKey=0,F=0,Alt=0,Ctrl=1,M=0}
CTRL2      	MCIR-2-kbd: {Shift=0,C=3,WinKey=0,F=0,Alt=0,Ctrl=1,M=0}
Delete         	MCIR-2-kbd: {Shift=0,C=10,WinKey=0,F=76,Alt=0,Ctrl=0,M=0}
DollarSign     	MCIR-2-kbd: {Shift=1,C=27,WinKey=0,F=33,Alt=0,Ctrl=0,M=0}
DoubleQuote    	MCIR-2-kbd: {Shift=0,C=4,WinKey=0,F=52,Alt=0,Ctrl=0,M=2}
End            	MCIR-2-kbd: {Shift=0,C=7,WinKey=0,F=77,Alt=0,Ctrl=0,M=0}
Enter          	MCIR-2-kbd: {Shift=0,C=2,WinKey=0,F=40,Alt=0,Ctrl=0,M=0}
Esc            	MCIR-2-kbd: {Shift=0,C=15,WinKey=0,F=41,Alt=0,Ctrl=0,M=0}
Forwared Slash 	MCIR-2-kbd: {Shift=0,C=16,WinKey=0,F=56,Alt=0,Ctrl=0,M=0}
GreaterThan    	MCIR-2-kbd: {Shift=1,C=8,WinKey=0,F=55,Alt=0,Ctrl=0,M=0}
Home           	MCIR-2-kbd: {Shift=0,C=11,WinKey=0,F=74,Alt=0,Ctrl=0,M=0}
Insert         	MCIR-2-kbd: {Shift=0,C=8,WinKey=0,F=73,Alt=0,Ctrl=0,M=0}
LeftBrace      	MCIR-2-kbd: {Shift=0,C=4,WinKey=0,F=47,Alt=0,Ctrl=0,M=2}
Left Bracket   	MCIR-2-kbd: {Shift=0,C=1,WinKey=0,F=48,Alt=0,Ctrl=0,M=0}
LeftBracket 2  	MCIR-2-kbd: {Shift=0,C=1,WinKey=0,F=48,Alt=0,Ctrl=0,M=0}
Left Click     	MCIR-2-mouse: {x=0,y=0,R=0,C=3,L=1,F=28}
LeftClick2     	MCIR-2-kbd: {Shift=1,C=23,WinKey=0,F=38,Alt=0,Ctrl=0,M=0}
LessThan       	MCIR-2-kbd: {Shift=1,C=5,WinKey=0,F=54,Alt=0,Ctrl=0,M=0}
F1 Down 	MCIR-2-kbd: {Shift=0,C=30,WinKey=0,F=58,Alt=0,Ctrl=0,M=0}
F2 Down 	MCIR-2-kbd: {Shift=0,C=19,WinKey=0,F=59,Alt=0,Ctrl=0,M=0}
F3 Down 	MCIR-2-kbd: {Shift=0,C=31,WinKey=0,F=60,Alt=0,Ctrl=0,M=0}
F4 down 	MCIR-2-kbd: {Shift=0,C=18,WinKey=0,F=61,Alt=0,Ctrl=0,M=0}
f5 down 	MCIR-2-kbd: {Shift=0,C=17,WinKey=0,F=62,Alt=0,Ctrl=0,M=0}
f6 Down 	MCIR-2-kbd: {Shift=0,C=28,WinKey=0,F=63,Alt=0,Ctrl=0,M=0}
f7 Down 	MCIR-2-kbd: {Shift=0,C=20,WinKey=0,F=64,Alt=0,Ctrl=0,M=0}
Mouse Down   
Mouse Up     	MCIR-2-mouse: {x=0,y=122,R=0,C=15,L=0,F=16}
Mouse Left   	MCIR-2-mouse: {x=123,y=0,R=0,C=1,L=0,F=30}
Mouse L Down 	MCIR-2-mouse: {x=120,y=7,R=0,C=16,L=0,F=15}
Mouse L Up   	MCIR-2-mouse: {x=122,y=122,R=0,C=8,L=0,F=23}
Mouse R Down 	MCIR-2-mouse: {x=5,y=5,R=0,C=16,L=0,F=15}
Mouse R Up   	MCIR-2-mouse: {x=5,y=123,R=0,C=14,L=0,F=17}
Mouse Right  	MCIR-2-mouse: {x=5,y=0,R=0,C=15,L=0,F=16}
Perscentage   	MCIR-2-kbd: {Shift=1,C=24,WinKey=0,F=34,Alt=0,Ctrl=0,M=0}
QuestionMark  	MCIR-2-kbd: {Shift=0,C=26,WinKey=0,F=56,Alt=0,Ctrl=0,M=2}
Right Brace   	MCIR-2-kbd: {Shift=0,C=11,WinKey=0,F=48,Alt=0,Ctrl=0,M=2}
Right Bracket 	MCIR-2-kbd: {Shift=0,C=14,WinKey=0,F=47,Alt=0,Ctrl=0,M=0}
RightClick    	MCIR-2-mouse: {x=0,y=0,R=1,C=5,L=0,F=26}
RightClick2   	MCIR-2-kbd: {Shift=1,C=26,WinKey=0,F=39,Alt=0,Ctrl=0,M=0}
SemiColon     	MCIR-2-kbd: {Shift=1,C=5,WinKey=0,F=0,Alt=0,Ctrl=0,M=0}
Shift         	MCIR-2-kbd: {Shift=0,C=14,WinKey=0,F=52,Alt=0,Ctrl=0,M=0}
SingleQuote   	MCIR-2-kbd: {Shift=0,C=14,WinKey=0,F=52,Alt=0,Ctrl=0,M=0}
Space         	MCIR-2-kbd: {Shift=0,C=13,WinKey=0,F=44,Alt=0,Ctrl=0,M=0}
Start         	MCIR-2-kbd: {Shift=0,C=7,WinKey=1,F=0,Alt=0,Ctrl=0,M=0}
Tab           	MCIR-2-kbd: {Shift=0,C=1,WinKey=0,F=43,Alt=0,Ctrl=0,M=0}
Tilde         	MCIR-2-kbd: {Shift=1,C=6,WinKey=0,F=53,Alt=0,Ctrl=0,M=0}
UnderScore    	MCIR-2-kbd: {Shift=1,C=5,WinKey=0,F=45,Alt=0,Ctrl=0,M=0}
Vertical bar  	MCIR-2-kbd: {Shift=0,C=6,WinKey=0,F=49,Alt=0,Ctrl=0,M=2}
Period        	MCIR-2-kbd: {Shift=0,C=13,WinKey=0,F=55,Alt=0,Ctrl=0,M=0}
Add Dash      	MCIR-2-kbd: {Shift=0,C=0,WinKey=0,F=45,Alt=0,Ctrl=0,M=0}
Hash          	MCIR-2-kbd: {Shift=1,C=22,WinKey=0,F=32,Alt=0,Ctrl=0,M=0}
Star          	MCIR-2-kbd: {Shift=1,C=20,WinKey=0,F=37,Alt=0,Ctrl=0,M=0}
Plus          	MCIR-2-kbd: {Shift=1,C=6,WinKey=0,F=46,Alt=0,Ctrl=0,M=0}
F8 Down  	MCIR-2-kbd: {Shift=0,C=25,WinKey=0,F=65,Alt=0,Ctrl=0,M=0}
f9 Down  	MCIR-2-kbd: {Shift=0,C=26,WinKey=0,F=66,Alt=0,Ctrl=0,M=0}
f10 down 	MCIR-2-kbd: {Shift=0,C=23,WinKey=0,F=67,Alt=0,Ctrl=0,M=0}
f11 Down 	MCIR-2-kbd: {Shift=0,C=27,WinKey=0,F=68,Alt=0,Ctrl=0,M=0}
f12 Down 	MCIR-2-kbd: {Shift=0,C=22,WinKey=0,F=69,Alt=0,Ctrl=0,M=0}
The Robman
Site Owner
Posts: 21941
Joined: Fri Aug 01, 2003 9:37 am
Location: Chicago, IL
Contact:

Post by The Robman »

vickyg2003 wrote:Column 2 checksum

=MOD(MID($F104,1,1)+MID($G104,5,1)+MID($G104,6,1)+MID($G104,7,1)+MID($G104,8,1)+MID($H104,1,1) +MID($H104,2,1)+MID($H104,3,1)+MID($H104,4,1),2)
You can't include a bit from the checksum in the checksum calculation. If you remove that bit and the next bit, it's still correct:

=MOD(MID($G104,6,1)+MID($G104,7,1)+MID($G104,8,1)+MID($H104,1,1)+MID($H104,2,1)+MID($H104,3,1)+MID($H104,4,1),2)
Last edited by The Robman on Wed Feb 19, 2020 3:40 pm, edited 1 time in total.
Rob
www.hifi-remote.com
Please don't PM me with remote questions, post them in the forums so all the experts can help!
vickyg2003
Site Admin
Posts: 7109
Joined: Sat Mar 20, 2004 12:19 pm
Location: Florida
Contact:

Post by vickyg2003 »

Okay, so far so good.

I did a couple of tests with the final bit. I was hoping that was going to be some sort of toggle that didn't matter. So I flipped it just to see if it would still recognize. It didn't.

I also flipped the left and right mouse button, while moving up. Both required the final bit to be flipped in order to be recognized.

Again the mouse only moved so far and then it stopped, pressing the key again, caused different unexpected actions. If you highlight an icon the next drag moved and dropped the icon, if text was highlighted it didn't do anything Since you couldn't get more than a 1 second drag, this isn't very useful....

We really need some more data to figure out how to keep this thing rolling.....
Remember to provide feedback to let us know how the problem was solved and share your upgrades.

Tip: When creating an upgrade, always include ALL functions from the oem remote, even if you never plan on assigning them to a button. Complete function lists makes an upgrade more helpful to others.
The Robman
Site Owner
Posts: 21941
Joined: Fri Aug 01, 2003 9:37 am
Location: Chicago, IL
Contact:

Post by The Robman »

Is there such a thing as an original MCE remote? I think that's what we really need to (a) ensure that the mouse buttons work properly on it and (b) to capture them to see exactly what they send, especially when held down and when repeatedly pressed.
Rob
www.hifi-remote.com
Please don't PM me with remote questions, post them in the forums so all the experts can help!
vickyg2003
Site Admin
Posts: 7109
Joined: Sat Mar 20, 2004 12:19 pm
Location: Florida
Contact:

Post by vickyg2003 »

I "think" this might be an original MCE remote
infrared media center keyboard

That was the cheapest one I could find.

I don't think pressing the the right button 17 times to get from one side of the screen to the other is a showstopper, but it certainly isn't ideal. I have tried flipping the last bit in the checksum and I've tried flipping all the checksum bits looking for some sort of toggle. I don't see anything else that would be an obvious way to keep the ball rolling.

What really boggles my mind is that I can't find tech specs on this out on the web.
Remember to provide feedback to let us know how the problem was solved and share your upgrades.

Tip: When creating an upgrade, always include ALL functions from the oem remote, even if you never plan on assigning them to a button. Complete function lists makes an upgrade more helpful to others.
The Robman
Site Owner
Posts: 21941
Joined: Fri Aug 01, 2003 9:37 am
Location: Chicago, IL
Contact:

Post by The Robman »

If there was a toggle bit in there, it would probably be one of the data bits and would cause the 2 checksums to change also.

I have incorporated your updated checksum code into my spreadsheet and have the last column almost right, it's correct for every button except one.
Rob
www.hifi-remote.com
Please don't PM me with remote questions, post them in the forums so all the experts can help!
The Robman
Site Owner
Posts: 21941
Joined: Fri Aug 01, 2003 9:37 am
Location: Chicago, IL
Contact:

Post by The Robman »

I just wrote a program to crack the checksum, in old fashioned mainframe COBOL no less, and have updated the spreadsheet.

I am now using the same formula for all buttons, main keyboard and mouse.

https://www.hifi-remote.com/forums/dload ... e_id=14692
Rob
www.hifi-remote.com
Please don't PM me with remote questions, post them in the forums so all the experts can help!
vickyg2003
Site Admin
Posts: 7109
Joined: Sat Mar 20, 2004 12:19 pm
Location: Florida
Contact:

Post by vickyg2003 »

I'm interested in the logic (plain english) as to what you did in your program to crack this. I don't expect to ever be able to do this on my own. I never would have thought to reuse bits....

Anyway I tried these values for UP with the calculated checksum
1111000 0000000 00
1111010 0000000 00
1111011 0000000 00
1111001 0000000 00

They have been arranged in order of how far they will travel in that 1 second interval


If this were you, what would you do next?
Last edited by vickyg2003 on Wed Sep 27, 2017 8:30 am, edited 1 time in total.
Remember to provide feedback to let us know how the problem was solved and share your upgrades.

Tip: When creating an upgrade, always include ALL functions from the oem remote, even if you never plan on assigning them to a button. Complete function lists makes an upgrade more helpful to others.
Post Reply