Microsoft MCE Remote - Vista and newer

Questions and comments specific to a particular plugin should go here.
Crowley
Posts: 27
Joined: Sat Dec 21, 2019 6:05 am

Re: Microsoft MCE Remote - Vista and newer

Post by Crowley » Fri May 29, 2020 7:48 am

Thanks for the update!

blaher
Experienced User
Posts: 494
Joined: Thu Nov 17, 2011 1:27 am

Re: Microsoft MCE Remote - Vista and newer

Post by blaher » Sat May 30, 2020 6:18 am

Looking forward to testing it too.

User avatar
kgschlosser
Site Admin
Posts: 5495
Joined: Fri Jun 05, 2015 5:43 am
Location: Rocky Mountains, Colorado USA

Re: Microsoft MCE Remote - Vista and newer

Post by kgschlosser » Sun May 31, 2020 3:59 pm

ok so this is what I have importing properly. I still have to run test codes through the encoder and decoder for each protocol and see if any errors or non matching codes arise. To do that is going to take me a while because I have to generate a code for each of the protocols and also set the device, sub device, function, toggle, e, g, m, n, x parameters for each protocol to test to see if the decode is working properly.

There is a thing called IRP (IR Protocol) notation which is a kind of code that can be used in order to have a more automated approach to adding protocols. the notation is not a standard so it has modifications to it and it is not very well documented. I wrote a parser for this notation. It is a 1/2 way kind of a thing that is able to handle most protocols but not all. It is far easier to code the more complex ones by hand instead of having to write the parser to handle those more complex codes. There are not that many of the complex buggers to even bother with making the parser capable of handling them. I didn't bother with writing an encoded that uses IRP I hand wrote them. quite a few of the protocols are really close with only minor variations between them. so it was a bunch of copy and paste and small changes.



It's a fairly decent sized list of protocols. I will be adding in air conditioner support in the future. The air conditioners are extremely complex and extremely long codes.
With the air conditioners I will write the code so that it is able to store current state. so the states can be queried. It will also handle 2 way IR so a user will be able to react to the AC sending data out.. an example would be the temperature.
  1. Aiwa
  2. Akai
  3. Archer
  4. Barco
  5. Bose
  6. Bryston
  7. Denon
  8. DenonK
  9. Elan
  10. Emerson
  11. F32
  12. Fujitsu
  13. Fujitsu56
  14. GI4DTV
  15. GIRG
  16. JVC
  17. JVC48
  18. JVC56
  19. Kaseikyo
  20. Kaseikyo56
  21. Konka
  22. Logitech
  23. Matsui
  24. MCE
  25. Metz19
  26. Mitsubishi
  27. MitsubishiK
  28. Motorola
  29. NEC
  30. NEC2_48
  31. NECx
  32. NRC17
  33. Panasonic
  34. Panasonic2
  35. PanasonicOld
  36. PID0003
  37. PID0004
  38. Pioneer
  39. Proton
  40. Proton40
  41. RC5
  42. RC6
  43. RC6_6_20
  44. RCA
  45. RCMM
  46. RECS80
  47. Samsung20
  48. Samsung36
  49. ScAtl6
  50. Sharp
  51. SharpDVD
  52. SIM2
  53. Somfy
  54. Sony12
  55. Sony15
  56. Sony20
  57. Sony8
  58. StreamZap
  59. StreamZap57
  60. Sunfire
  61. TeacK
  62. Thompson
  63. Thompson7
  64. Universal
  65. Velleman
  66. Viewstar
here is a pretty decent sized list of ir protocols and IRP notations I wouldn't mind having all of these added plus more.
  1. 48-NEC: IRP = {38.4k,564}<1,-1|1,-3>(16,-8,D:8,S:8,F:8,~F:8,E:8,~E:8,1,^108m)
  2. 48-NEC1: IRP = {38.4k,564}<1,-1|1,-3>(16,-8,D:8,S:8,F:8,~F:8,E:8,~E:8,1,^108m,(16,-4,1,^108m)*)
  3. 48-NEC2: IRP = {38.4k,564}<1,-1|1,-3>(16,-8,D:8,S:8,F:8,~F:8,E:8,~E:8,1,^108m)*
  4. AdNotam: IRP = {35.7k,895,msb}<1,-1|-1,1>(1,-2,1,D:6,F:6,^114m)*
  5. Aiwa: IRP = {38.123k,550}<1,-1|1,-3>(16,-8,D:8,S:5,~D:8,~S:5,F:8,~F:8,1,-42,(16,-8,1,-165)*)
  6. Aiwa2: IRP = {38k,550}<1,-1|1,-3>(16,-8,D:8,S:5,~D:8,~S:5,F:8,~F:8,1,-42)*
  7. Akai: IRP = {38k,289}<1,-2.6|1,-6.3>(D:3,F:7,1,^25.3m)*
  8. Akord: IRP = {37.0k,477,msb}<1,-1|1,-2>(18,-8,D:8,S:8,F:8,~F:8,1,-40m,(18,-5,1,-78m)*)
  9. Amino: IRP = {37.3k,268,msb}<-1,1|1,-1>(T=1,(7,-6,3,D:4,1:1,T:1,1:2,0:8,F:8,15:4,C:4,-79m,T=0)+){C=(D:4+4*T+9+F:4+F:4:4+15)&15}
  10. Amino-56: IRP = {56.0k,268,msb}<-1,1|1,-1>(T=1,(7,-6,3,D:4,1:1,T:1,1:2,0:8,F:8,15:4,C:4,-79m,T=0)+){C=(D:4+4*T+9+F:4+F:4:4+15)&15}
  11. Anthem: IRP = {38.0k,605}<1,-1|1,-3>((8000u,-4000u,D:8,S:8,F:8,C:8,1,-25m)2,8000u,-4000u,D:8,S:8,F:8,C:8,1,-100)*{C=~(D+S+F+255):8}
  12. Anthem_relaxed: IRP = {38.0k,605}<1,-1|1,-3>(8000u,-4000u,D:8,S:8,F:8,C:8,1,-25m)*{C=~(D+S+F+255):8}
  13. Apple: IRP = {38.4k,564}<1,-1|1,-3>(16,-8,D:8,S:8,C:1,F:7,PairID:8,1,^108m,(16,-4,1,^108m)*){C=1-(#F+#PairID)%2,S=135}
  14. Archer: IRP = {0k,12}<1,-3.3m|1,-4.7m>(F:5,1,-9.7m)*
  15. arctech: IRP = {0k,388}<1,-3|3,-1>(<0:2|2:2>((D-1):4,(S-1):4),40:7,F:1,0:1,-10.2m)*
  16. arctech-38: IRP = {38k,388}<1,-3|3,-1>(<0:2|2:2>((D-1):4,(S-1):4),40:7,F:1,0:1,-10.2m)*
  17. Audiovox: IRP = {40k,500}<1,-1|1,-3>(16,-8,D:8,1,-8,F:8,1,-40)*
  18. B&O: IRP = {455k,3125,msb}<200u,-zeroGap,zeroGap=2,oneGap=3|200u,-oneGap,zeroGap=1,oneGap=2>(200u,-1,200u,-1,200u,-5,D:9,F:8,200u,-4,200u,-100m){zeroGap=1,oneGap=3}
  19. B&O repeat: IRP = {455k,3125,msb}<200u,-zeroGap,zeroGap=2,oneGap=3|200u,-oneGap,zeroGap=1,oneGap=2>(200u,-1,200u,-1,200u,-5,D:9,F:8,200u,-4){zeroGap=1,oneGap=3}
  20. Barco: IRP = {0k,10}<1,-5|1,-15>(1,-25,D:5,F:6,1,-25,1,-120m)*
  21. Blaupunkt: IRP = {30.3k,512}<-1,1|1,-1>(1,-5,1023:10,-44,(1,-5,1:1,F:6,D:3,-236)+,1,-5,1023:10,-44)
  22. Blaupunkt_relaxed: IRP = {30.3k,512}<-1,1|1,-1>(1,-5,1023:10,-44,(1,-5,1:1,F:6,D:3,-236)*,1,-5,1023:10,-44)
  23. Bose: IRP = {38.0k,500,msb}<1,-1|1,-3>(2,-3,F:8,~F:8,1,-50m)*
  24. Bryston: IRP = {38.0k,315}<1,-6|6,-1>(D:10,F:8,-18m)*
  25. CanalSat: IRP = {55.5k,250,msb}<-1,1|1,-1>(T=0,(1,-1,D:7,S:6,T:1,0:1,F:7,-89m,T=1)+)
  26. CanalSatLD: IRP = {56k,320,msb}<-1,1|1,-1>(T=0,(1,-1,D:7,S:6,T:1,0:1,F:6,~F:1,-85m,T=1)+)
  27. Canon: IRP = {33k,1}<16p,-240p|16p,-175p>(F:1)2
  28. Denon: IRP = {38k,264}<1,-3|1,-7>(D:5,F:8,0:2,1,-165,D:5,~F:8,3:2,1,-165)*
  29. Denon-K: IRP = {37k,432}<1,-1|1,-3>(8,-4,84:8,50:8,0:4,D:4,S:4,F:12,((D*16)^S^(F*16)^(F:8:4)):8,1,-173)*
  30. Denon{1}: IRP = {38k,264}<1,-3|1,-7>(D:5,F:8,0:2,1,-165)*
  31. Denon{2}: IRP = {38k,264}<1,-3|1,-7>(D:5,~F:8,3:2,1,-165)*
  32. Dgtec: IRP = {38k,560}<1,-1|1,-3>(16,-8,D:8,F:8,~F:8,1,^108m,(16,-4,1,^108m)*)
  33. Digivision: IRP = {38.0k,182}<3,-3|3,-6>(20,-10,D:8,Dev2:8,Dev3:8,20,-10,F:8,~F:8,3,^108m,(20,-20,3,^108m)*)
  34. DirecTV_3FG: IRP = {38k,600,msb}<1,-1|1,-2|2,-1|2,-2>(10,-2,(D:4,F:8,C:4,1,-30m,5,-2)*){C=7*(F:2:6)+5*(F:2:4)+3*(F:2:2)+(F:2)}
  35. DirecTV_P0: IRP = {40k,600,msb}<1,-1|1,-2|2,-1|2,-2>([10][5],-2,D:4,F:8,C:4,1,-15){C=7*(F:2:6)+5*(F:2:4)+3*(F:2:2)+(F:2)}
  36. DirecTV_P1: IRP = {40k,600,msb}<1,-1|1,-2|2,-1|2,-2>([10][5],-2,D:4,F:8,C:4,1,-50){C=7*(F:2:6)+5*(F:2:4)+3*(F:2:2)+(F:2)}
  37. DirecTV_P2: IRP = {38k,600,msb}<1,-1|1,-2|2,-1|2,-2>([10][5],-2,D:4,F:8,C:4,1,-15){C=7*(F:2:6)+5*(F:2:4)+3*(F:2:2)+(F:2)}
  38. DirecTV_P3: IRP = {38k,600,msb}<1,-1|1,-2|2,-1|2,-2>([10][5],-2,D:4,F:8,C:4,1,-50){C=7*(F:2:6)+5*(F:2:4)+3*(F:2:2)+(F:2)}
  39. DirecTV_P4: IRP = {57k,600,msb}<1,-1|1,-2|2,-1|2,-2>([10][5],-2,D:4,F:8,C:4,1,-15){C=7*(F:2:6)+5*(F:2:4)+3*(F:2:2)+(F:2)}
  40. DirecTV_P5: IRP = {57k,600,msb}<1,-1|1,-2|2,-1|2,-2>([10][5],-2,D:4,F:8,C:4,1,-50){C=7*(F:2:6)+5*(F:2:4)+3*(F:2:2)+(F:2)}
  41. Dish_Network: IRP = {57.6k,406}<1,-7|1,-4>(1,-15,(F:-6,S:5,D:5,1,-15)+)
  42. Dishplayer: IRP = {38.4k,535,msb}<1,-5|1,-3>(1,-11,(F:6,S:5,D:2,1,-11)+)
  43. Dyson: IRP = {780,38k}<1,-1|1,-2>(3,-1,D:7,F:6,T:-2,1,-100m,3,-1,D:7,F:6,T:-2,1,-60m,(3,-1,1:1,1,-60m)*)
  44. Dyson2: IRP = {780,38k}<1,-1|1,-2>(3,-1,D:7,F:6,T:-2,1,-400m,3,-1,D:7,F:6,T:-2,1,-60m,(3,-1,1:1,1,-60m)*)
  45. Dyson_relaxed: IRP = {780,38k}<1,-1|1,-2>(3,-1,D:7,F:6,T:-2,1,-100m)*
  46. Elan: IRP = {0k,398,msb}<1,-1|1,-2>(3,-2,D:8,~D:8,2,-2,F:8,~F:8,1,^50m)*
  47. Elunevision: IRP = {0k,358,msb}<1,-3|3,-1>(10,-3,D:24,F:8,-7)*{D=0xf48080}
  48. Emerson: IRP = {36.7k,872}<1,-1|1,-3>(4,-4,D:6,F:6,~D:6,~F:6,1,-39)*
  49. entone: IRP = {36k,444,msb}<-1,1|1,-1>(6,-2,1:1,M:3,<-2,2|2,-2>(T:1),0xE60396FFFFF:44,F:8,0:4,-131.0m)*{M=6,T=0}
  50. Epson: IRP = {38.4k,577}<2,-1|1,-2|1,-1|2,-2>((4,-1,D:8,T1:2,OBC:6,T2:2,S:8,1,-75m)*,(4,-1,D:8,~F1:2,OBC:6,~F2:2,S:8,1,-250m))
  51. F12: IRP = {37.9k,422}<1,-3|3,-1>((D:3,S:1,F:8,-80)2)*
  52. F12-0: IRP = {37.9k,422}<1,-3|3,-1>(D:3,H:1,F:8,-34,D:3,H:1,F:8){H=0}
  53. F12-1: IRP = {37.9k,422}<1,-3|3,-1>(D:3,H:1,F:8,-34,D:3,H:1,F:8,-88,D:3,H:1,F:8,-34,D:3,H:1,F:8)*{H=1}
  54. F12_relaxed: IRP = {37.9k,422}<1,-3|3,-1>(D:3,S:1,F:8,-80)*
  55. F32: IRP = {37.9k,422,msb}<1,-3|3,-1>(D:8,S:8,F:8,E:8,-100m)*
  56. Fujitsu: IRP = {37k,432}<1,-1|1,-3>(8,-4,20:8,99:8,0:4,E:4,D:8,S:8,F:8,1,-110)*
  57. Fujitsu-128: IRP = {38.4k,413}<1,-1|1,-3>(8,-4,A0:8,A1:8,A2:8,A3:8,A4:8,A5:8,A6:8,A7:8,A8:8,A9:8,A10:8,A11:8,A12:8,A13:8,A14:8,A15:8,1,-104.3m)*
  58. Fujitsu-56: IRP = {37k,432}<1,-1|1,-3>(8,-4,20:8,99:8,0:4,E:4,D:8,S:8,X:8,F:8,1,-110)*
  59. Fujitsu_Aircon: IRP = {38.4k,413}<1,-1|1,-3>(8,-4,A0:8,A1:8,A2:8,A3:8,A4:8,A5:8,A6:8,A7:8,wOn:4,A:4,B:4,C:4,D:4,E:4,tOff:11,fOff:1,tOn:11,fOn:1,A14:8,A15:8,1,-104.3m)*{A0=20,A1=99,A2=0,A3=16,A4=16,A5=254,A6=9,A7=48,A14=32,A15=256-(16*A+wOn+(16*C+B)+(16*E+D)+tOff:8+(tOff:3:8+fOff*8+16*tOn:4)+(tOn:7:4+128*fOn)+80)%256}
  60. Fujitsu_Aircon_old: IRP = Fujitsu-128{A0=20,A1=99,A2=0,A3=16,A4=16,A5=254,A6=9,A7=48,A8=16*A+wOn,A9=16*C+B,A10=16*E:4+D:4,A11=tOff:8,A12=tOff:3:8+fOff*8+16*tOn:4,A13=tOn:7:8+128*fOn,A14=32,A15=256-(A8+A9+A10+A11+A12+A13+80)%256}
  61. G.I.4DTV: IRP = {37.3k,992}<1,-1|1,-3>(5,-2,F:6,D:2,C0:1,C1:1,C2:1,C3:1,1,-60)*{C0=D:1:2+#(F&25)+#(D&1),C1=D:1:2+#(F&43)+#(D&3),C2=D:1:2+#(F&22)+#(D&3),C3=D:1:2+#(F&44)+#(D&2)}
  62. G.I.4DTV_relaxed: IRP = {37.3k,992}<1,-1|1,-3>(5,-2,F:6,D:2,C:4,1,-60)*
  63. G.I.Cable: IRP = {38.7k,490}<1,-4.5|1,-9>(18,-9,F:8,D:4,C:4,1,-84,(18,-4.5,1,-178)*){C=-(D+F:4+F:4:4)}
  64. GI RG: IRP = {37.3k,1000,msb}<1,-1|1,-3>(5,-3,F:6,S:2,D:8,1,-60)*
  65. Grundig16: IRP = {35.7k,578,msb}<-4,2|-3,1,-1,1|-2,1,-2,1|-1,1,-3,1>(806u,-2960u,1346u,T:1,F:8,D:7,-100)*
  66. Grundig16-30: IRP = {30.3k,578,msb}<-4,2|-3,1,-1,1|-2,1,-2,1|-1,1,-3,1>(806u,-2960u,1346u,T:1,F:8,D:7,-100)*
  67. GuangZhou: IRP = {38.0k,182}<3,-3|3,-6>(20,-10,T:2,D:6,F:8,S:8,20,-10,~T:2,D:6,~F:8,3,^108m,(20,-20,3,^108m)*){T=3}
  68. GwtS: IRP = {38.005k,417,lsb}<1|-1>(0:1,D:8,1:2,F:8,1:2,CRC:8,1:1)
  69. GXB: IRP = {38.3k,520,msb}<1,-3|3,-1>(1,-1,D:4,F:8,P:1,1,^100m)*{P=1-#F%2}
  70. Humax 4Phase: IRP = {56k,105,msb}<-2,2|-3,1|1,-3|2,-2>(T=0,(2,-2,D:6,S:6,T:2,F:7,~F:1,^95m,T=1)+)
  71. InterVideo RC-201: IRP = {38k,300}<1,-1|1,-3>(10,-5,0:1,F:6,768:10,1,-10m)*
  72. IODATAn: IRP = {38k,550}<1,-1|1,-3>(16,-8,x:7,D:7,S:7,y:7,F:8,C:4,1,^108m)*{n=F:4^F:4:4^C:4}
  73. Jerrold: IRP = {0k,44}<1,-7.5m|1,-11.5m>(F:5,1,-23.5m)*
  74. JVC: IRP = {37.9k,527,33%}<1,-1|1,-3>(16,-8,D:8,F:8,1,^59.08m,(D:8,F:8,1,^46.42m)*)
  75. JVC-48: IRP = {37k,432}<1,-1|1,-3>(8,-4,3:8,1:8,D:8,S:8,F:8,(D^S^F):8,1,-173)*
  76. JVC-56: IRP = {37k,432}<1,-1|1,-3>(8,-4,3:8,1:8,D:8,S:8,X:8,F:8,(D^S^X^F):8,1,-173)*
  77. JVC_squashed: IRP = {37.9k,527,33%}<1,-1|1,-3>(16,-8,(D:8,F:8,1,^46.42m)*)
  78. JVC{2}: IRP = {37.9k,527,33%}<1,-1|1,-3>(D:8,F:8,1,^46.42m)*
  79. Kaseikyo: IRP = {37k,432}<1,-1|1,-3>(8,-4,M:8,N:8,X:4,D:4,S:8,F:8,E:4,C:4,1,-173)*{X=((M^N)::4)^(M^N),chksum=D^S^F^(E*16),C=chksum::4^chksum}
  80. Kaseikyo56: IRP = {37k,432}<1,-1|1,-3>(8,-4,M:8,N:8,H:4,D:4,S:8,E:8,F:8,G:8,1,-173)*{H=((M^N)::4)^(M^N),chksum=S^G^F^(E*16)^D,C=chksum::4^chksum}
  81. Kathrein: IRP = {38k,540}<1,-1|1,-3>(16,-8,D:4,~D:4,F:8,~F:8,1,^105m,(16,-8,F:8,1,^105m)+)
  82. Konka: IRP = {38k,500,msb}<1,-3|1,-5>(6,-6,D:8,F:8,1,-8,1,-46)*
  83. Logitech: IRP = {38k,127}<3,-4|3,-8>(31,-36,D:4,~D:4,F:8,~F:8,3,-50m)*
  84. Lumagen: IRP = {38.4k,416,msb}<1,-6|1,-12>(D:4,C:1,F:7,1,-26)*{C=(#F+1)&1}
  85. Lutron: IRP = {40k,2300,msb}<-1|1>(255:8,X:24,0:4)*
  86. Matsui: IRP = {38k,525}<1,-1|1,-3>(D:3,F:7,1,^30.5m)*
  87. MCE: IRP = {36k,444,msb}<-1,1|1,-1>((6,-2,1:1,6:3,-2,2,OEM1:8,S:8,T:1,D:7,F:8,^107m)*,T=1-T){OEM1=128}
  88. MCIR-2-kbd: IRP = {300,msb}<-1,1|1,-1>(9,32:8,C:5,0:8,F:8,M:8,-74m)*{c1=#(F&0b11111000)%2,c2=(#(F&0b00000111)+#(M&0b00110000))%2,c3=(#(F&0b11000111)+#(M&0b10001110))%2,c4=(#(F&0b00110110)+#(M&0b10101101))%2,c5=(#(F&0b10101101)+#(M&0b10011011))%2,C=(c1<<4)|(c2<<3)|(c3<<2)|(c4<<1)|c5}
  89. MCIR-2-mouse: IRP = {300,msb}<-1,1|1,-1>(9,8:8,C:5,y:7,x:7,R:1,L:1,F:5,-10.7m)*
  90. Metz19: IRP = {37.9k,106,msb}<4,-9|4,-16>((8,-22,T:1,D:3,~D:3,F:6,~F:6,4,-125m)*,T=1-T)
  91. Mitsubishi: IRP = {32.6k,300}<1,-3|1,-7>(D:8,F:8,1,-80)*
  92. Mitsubishi-K: IRP = {37k,432}<1,-1|1,-3>(8,-4,35:8,203:8,X:4,D:8,S:8,F:8,T:4,1,-100)*{X=6,T=-S:4:0-S:4:4-F:4:0-F:4:4+15}
  93. NEC: IRP = {38.4k,564}<1,-1|1,-3>(16,-8,D:8,S:8,F:8,~F:8,1,^108m)
  94. NEC-f16: IRP = {38.4k,564}<1,-1|1,-3>(16,-8,D:8,S:8,F:8,E:8,1,^108m)
  95. NEC-Shirriff: IRP = {38.4k,msb,564}<1,-1|1,-3>(16,-8,data:length,1,-1)
  96. NEC-Shirriff-32: IRP = {38.4k,msb,564}<1,-1|1,-3>(16,-8,data:32,1,-1)
  97. NEC1: IRP = {38.4k,564}<1,-1|1,-3>(16,-8,D:8,S:8,F:8,~F:8,1,^108m,(16,-4,1,^108m)*)
  98. NEC1-f16: IRP = {38.4k,564}<1,-1|1,-3>(16,-8,D:8,S:8,F:8,E:8,1,^108m,(16,-4,1,^108m)*)
  99. NEC1-rnc: IRP = {38.4k,564}<1,-1|1,-3>(16,-8,D:8,S:8,F:8,~F:4:4,~F:4,1,^108m,(16,-4,1,^108m)*)
  100. NEC2: IRP = {38.4k,564}<1,-1|1,-3>(16,-8,D:8,S:8,F:8,~F:8,1,^108m)*
  101. NEC2-f16: IRP = {38.4k,564}<1,-1|1,-3>(16,-8,D:8,S:8,F:8,E:8,1,^108m)*
  102. NECx-f16: IRP = {38.4k,564}<1,-1|1,-3>(8,-8,D:8,S:8,F:8,E:8,1,^108m)
  103. NECx1: IRP = {38.4k,564}<1,-1|1,-3>(8,-8,D:8,S:8,F:8,~F:8,1,^108m,(8,-8,D:1,1,^108m)*)
  104. NECx1-f16: IRP = {38.4k,564}<1,-1|1,-3>(8,-8,D:8,S:8,F:8,E:8,1,^108m,(8,-8,D:1,1,^108m)*)
  105. NECx2: IRP = {38.4k,564}<1,-1|1,-3>(8,-8,D:8,S:8,F:8,~F:8,1,^108m)*
  106. NECx2-f16: IRP = {38.4k,564}<1,-1|1,-3>(8,-8,D:8,S:8,F:8,E:8,1,^108m)*
  107. Nokia: IRP = {36k,1p,msb}<6,-10|6,-16|6,-22|6,-28>(15,-10,D:8,S:8,F:8,6,^100m)*
  108. Nokia12: IRP = {36k,1p,msb}<6,-10|6,-16|6,-22|6,-28>(15,-10,D:4,F:8,6,^100m)*
  109. Nokia32: IRP = {36k,1p,msb}<6,-10|6,-16|6,-22|6,-28>((15,-10,D:8,S:8,T:1,X:7,F:8,6,^100m)*,T=1-T)
  110. Nova Pace: IRP = {38k,300,msb}<-1,1|1,-1>((1,-1,D:10,S:8,F:8,T:1,-1,1,-82m)*,T=1-T)
  111. NRC16: IRP = {38k,500}<-1,1|1,-1>(1,-5,1:1,254:8,127:7,-15m,(1,-5,1:1,F:8,D:7,-110m)+,1,-5,1:1,254:8,127:7,-15m)
  112. NRC16-32: IRP = {32k,500}<-1,1|1,-1>(1,-5,1:1,254:8,127:7,-15m,(1,-5,1:1,F:8,D:7,-110m)+,1,-5,1:1,254:8,127:7,-15m)
  113. NRC17: IRP = {500,38k,25%}<-1,1|1,-1>(1,-5,1:1,254:8,255:8,-28,(1,-5,1:1,F:8,D:8,-220)*,1,-5,1:1,254:8,255:8,-200)
  114. Ortek_NEClike: IRP = {40.0k,564}<1,-1|1,-3>(16,-8,D:8,S:8,F:8,F:4:4,~F:4,1,^108m,(16,-4,1,-3,1,^108m)*)
  115. OrtekMCE: IRP = {38.6k,480}<1,-1|-1,1>([P=0][P=1][P=2],4,-1,D:5,P:2,F:6,C:4,-48m)+{C=3+#D+#P+#F}
  116. OrtekMCE_relaxed: IRP = {38.6k,480}<1,-1|-1,1>([][P=1][P=2],4,-1,D:5,P:2,F:6,C:4,-48m)+{C=3+#D+#P+#F}
  117. PaceMSS: IRP = {38k,630,msb}<1,-7|1,-11>(1,-5,1,-5,T:1,D:1,F:8,1,^120m)*
  118. Panasonic: IRP = {37k,432}<1,-1|1,-3>(8,-4,2:8,32:8,D:8,S:8,F:8,(D^S^F):8,1,-173)*
  119. Panasonic2: IRP = {37k,432}<1,-1|1,-3>(8,-4,2:8,32:8,D:8,S:8,X:8,F:8,(D^S^X^F):8,1,-173)*
  120. Panasonic_Old: IRP = {57.6k,833}<1,-1|1,-3>(4,-4,D:5,F:6,~D:5,~F:6,1,-44m)*
  121. PCTV: IRP = {38.4k,832}<-1|1>(2,-8,1,D:8,F:8,2,-100m)
  122. pid-0001: IRP = {0k,msb}<24,-9314|24,-13486>(24,-21148,(F:5,1,-28m)+)
  123. pid-0003: IRP = {40.2k,389}<2,-2|3,-1>(F:8,~F:8,^102m)*
  124. pid-0004: IRP = {0k,msb}<12,-130|12,-372>(F:6,12,-27m)*
  125. pid-0083: IRP = {42.3k,3000}<1,-3,1,-7|1,-7,1,-3>(F:5,1,-27)*
  126. Pioneer: IRP = {40k,564}<1,-1|1,-3>(16,-8,D:8,S:8,F:8,~F:8,1,^108m)*
  127. Pioneer-Mix: IRP = {40k,564}<1,-1|1,-3>(16,-8,D0:8,~D0:8,F0:8,~F0:8,1,^108m,(16,-8,D:8,~D:8,F:8,~F:8,1,^108m)+)
  128. Proton: IRP = {38.5k,500}<1,-1|1,-3>(16,-8,D:8,1,-8,F:8,1,^63m)*
  129. Proton-40: IRP = {40.5k,500}<1,-1|1,-3>(16,-8,D:8,1,-8,F:8,1,^63m)*
  130. RC5: IRP = {36k,msb,889}<1,-1|-1,1>((1,~F:1:6,T:1,D:5,F:6,^114m)*,T=1-T)
  131. RC5-7F: IRP = {36k,msb,889}<1,-1|-1,1>((1,~D:1:5,T:1,D:5,F:7,^114m)*,T=1-T)
  132. RC5-7F-57: IRP = {57k,msb,889}<1,-1|-1,1>(1,~D:1:5,T:1,D:5,F:7,^114m)*
  133. RC5x: IRP = {36k,msb,889}<1,-1|-1,1>((1,~S:1:6,T:1,D:5,-4,S:6,F:6,^114m)*,T=1-T)
  134. RC6: IRP = {36k,444,msb}<-1,1|1,-1>((6,-2,1:1,0:3,<-2,2|2,-2>(T:1),D:8,F:8,^107m)*,T=1-T)
  135. RC6-6-20: IRP = {36k,444,msb}<-1,1|1,-1>((6,-2,1:1,6:3,<-2,2|2,-2>(T:1),D:8,S:4,F:8,-100m)*,T=1-T)
  136. RC6-M-16: IRP = {36k,444,msb}<-1,1|1,-1>((6,-2,1:1,M:3,<-2,2|2,-2>(T:1),D:8,F:8,^107m)*,T=1-T)
  137. RC6-M-28: IRP = {36k,444,msb}<-1,1|1,-1>((6,-2,1:1,M:3,<-2,2|2,-2>(T:1),D:8,S:12,F:8,-100m)*,T=1-T)
  138. RC6-M-32: IRP = {36k,444,msb}<-1,1|1,-1>((6,-2,1:1,M:3,<-2,2|2,-2>(T:1),OEM1:8,OEM2:8,D:8,F:8,^107m)*,T=1-T)
  139. RC6-M-56: IRP = {36k,444,msb}<-1,1|1,-1>(6,-2,1:1,M:3,<-2,2|2,-2>(T:1),C:56,-131.0m)*
  140. RCA: IRP = {58k,460,msb}<1,-2|1,-4>(8,-8,D:4,F:8,~D:4,~F:8,1,-16)*
  141. RCA(Old): IRP = {58k,460,msb}<1,-2|1,-4>([40][8],-8,D:4,F:8,~D:4,~F:8,2,-16)
  142. RCA-38: IRP = {38.7k,460,msb}<1,-2|1,-4>(8,-8,D:4,F:8,~D:4,~F:8,1,-16)*
  143. RCA-38(Old): IRP = {38.7k,460,msb}<1,-2|1,-4>([40][8],-8,D:4,F:8,~D:4,~F:8,2,-16)
  144. RECS80: IRP = RECS80-0045{}
  145. RECS80-0045: IRP = {38k,158,msb}<1,-31|1,-47>(1:1,T:1,D:3,F:6,1,-45m)*
  146. RECS80-0068: IRP = {33.3k,180,msb}<1,-31|1,-47>(1:1,T:1,D:3,F:6,1,^138m)*
  147. RECS80-0090: IRP = {0k,158,msb}<1,-31|1,-47>(1:1,T:1,D:3,F:6,1,^138m)*
  148. Replay: IRP = {36k,444,msb}<-1,1|1,-1>(6,-2,1:1,6:3,<-2,2|2,-2>(T:1),D:8,S:8,F:8,-100m/*???*/)*
  149. Revox: IRP = {0k,15u}<1,-9|1,-19>(1,-29,0:1,D:4,F:6,1,-29,1,-100285u)*
  150. Roku: IRP = {38.0k,564}<1,-1|1,-3>(16,-8,D:8,S:8,F:7,0:1,~F:7,1:1,1,^108m,(16,-8,D:8,S:8,F:7,1:1,~F:7,0:1,1,^108m)*)
  151. Rs200: IRP = {35.7k,msb}<50p,-120p|21p,-120p>(25:6,(H4-1):2,(H3-1):2,(H2-1):2,(H1-1):2,P:1,(D-1):3,F:2,0:2,sum:4,-1160p)*{P=~(#(D-1)+#F):1,sum=9+((H4-1)*4+(H3-1))+((H2-1)*4+(H1-1))+(P*8+(D-1))+F*4}
  152. RTI_Relay: IRP = {40.244k,398,msb}<1,-1|-1,1>(1,A:31,F:1,F:8,D:23,D:8,0:4,-19.5m)*{A=0x7fe08080}
  153. RTI_Relay_alt: IRP = {40.244k,398,msb}<1,-1|-1,1>(1,A:31,F:1,F:8,D:23,D:8,0:4,-19.5m)*{A=0x7fe08080,D=2**(4-N)}
  154. Sampo: IRP = {38.4k,833}<1,-1|1,-3>(4,-4,D:6,F:6,S:6,~F:6,1,-39)*
  155. Samsung-SMT-G: IRP = {38.5k,497,msb}<1,-1|1,-3>(4497u,-4497u,D:16,1,-4497u,S:4,F:16,1,^120m)*
  156. Samsung20: IRP = {38.4k,564}<1,-1|1,-3>(8,-8,D:6,S:6,F:8,1,^100m)*
  157. Samsung36: IRP = {37.9k,560,33%}<1,-1|1,-3>(4500u,-4500u,D:8,S:8,1,-9,E:4,F:8,~F:8,1,^108m)*
  158. ScAtl-6: IRP = {57.6k,846}<1,-1|1,-3>(4,-4,D:6,F:6,~D:6,~F:6,1,-40)*
  159. Sejin-1-38: IRP = {38.8k,310,msb}<-1|1>(<8:4|4:4|2:4|1:4>(3,3:2,D:8,F:8,S:8,E:4,C:4,-77))*{C=D:4+D:4:4+F:4+F:4:4+S:4+S:4:4+E}
  160. Sejin-1-56: IRP = {56.3k,310,msb}<-1|1>(<8:4|4:4|2:4|1:4>(3,3:2,D:8,F:8,S:8,E:4,C:4,-77))*{C=D:4+D:4:4+F:4+F:4:4+S:4+S:4:4+E}
  161. Sharp: IRP = {38k,264}<1,-3|1,-7>(D:5,F:8,1:2,1,-165,D:5,~F:8,2:2,1,-165)*
  162. SharpDVD: IRP = {38k,400}<1,-1|1,-3>(8,-4,170:8,90:8,15:4,D:4,S:8,F:8,E:4,C:4,1,-48)*{C=D^S:4:0^S:4:4^F:4:0^F:4:4^E:4}
  163. Sharp{1}: IRP = {38k,264}<1,-3|1,-7>(D:5,F:8,1:2,1,-165)*
  164. Sharp{2}: IRP = {38k,264}<1,-3|1,-7>(D:5,~F:8,2:2,1,-165)*
  165. SIM2: IRP = {38.8k,400}<3,-3|3,-7>(6,-7,D:8,F:8,3,^115m)
  166. Solidtek16: IRP = {38k}<-624,468|468,-624>(S=0,(1820,-590,0:1,D:4,F:7,S:1,C:4,1:1,-143m,S=1)3){C=F:4:0+F:3:4+8*S}
  167. Somfy: IRP = {35.7k}<308,-881|669,-520>(2072,-484,F:2,D:3,C:4,-2300)*{C=F*4+D+3}
  168. Sony12: IRP = {40k,600}<1,-1|2,-1>(4,-1,F:7,D:5,^45m)*
  169. Sony15: IRP = {40k,600}<1,-1|2,-1>(4,-1,F:7,D:8,^45m)*
  170. Sony20: IRP = {40k,600}<1,-1|2,-1>(4,-1,F:7,D:5,S:8,^45m)*
  171. Sony8: IRP = {40k,600}<1,-1|2,-1>(4,-1,F:8,^45m)
  172. SonyDSP: IRP = {40k,600}<1,-1|2,-1>((4,-1,96:8,18:7,^45m)3,(4,-1,195:8,^45m),(4,-1,81:8,^45m),(4,-1,F:8,^45m),(4,-1,(F^145):8,11:7,^45m))
  173. SonyDSP_relaxed: IRP = {40k,600}<1,-1|2,-1>((4,-1,96:8,18:7,^45m)3,(4,-1,195:8,^45m),(4,-1,81:8,^45m),(4,-1,F:8,^45m),(4,-1,(F^145):8,11:6))
  174. StreamZap: IRP = {36k,msb,889}<1,-1|-1,1>(1,~F:1:6,T:1,D:6,F:6,^114m)*
  175. StreamZap-57: IRP = {57k,msb,889}<1,-1|-1,1>(1,~F:1:6,T:1,D:6,F:6,^114m)*
  176. Sunfire: IRP = {38k,560,msb}<1,-1|3,-1>(16,-8,D:4,F:8,~D:4,~F:8,-32)*
  177. TDC-38: IRP = {38k,315,msb}<-1,1|1,-1>(1,-1,D:5,S:5,F:7,-89m)*
  178. TDC-56: IRP = {56.3k,213,msb}<-1,1|1,-1>(1,-1,D:5,S:5,F:7,-89m)*
  179. Teac-K: IRP = {37k,432}<1,-1|1,-3>(8,-4,67:8,83:8,X:4,D:4,S:8,F:8,T:8,1,-100,(8,-8,1,-100)*){T=D+S:4:0+S:4:4+F:4:0+F:4:4}
  180. Thomson: IRP = {33k,500}<1,-4|1,-9>((D:4,T:1,D:1:4,F:6,1,^80m)*,T=1-T)
  181. Thomson7: IRP = {33k,500}<1,-4|1,-9>((D:4,T:1,F:7,1,^80m)*,T=1-T)
  182. Tivo: IRP = {38.4k,564}<1,-1|1,-3>(16,-8,D:8,S:8,F:8,U:4,~F:4:4,1,-78,(16,-4,1,-173)*)
  183. Velleman: IRP = {38k,msb}<700,-5060|700,-7590>(1:1,T:1,D:3,F:6,700,-55m)*
  184. Velodyne: IRP = {38k,136,msb}<210u,-760u|210u,-896u|210u,-1032u|210u,-1168u|210u,-1304u|210u,-1449u|210u,-1576u|210u,-1712u|210u,-1848u|210u,-1984u|210u,-2120u|210u,-2256u|210u,-2392u|210u,-2528u|210u,-2664u|210u,-2800u>([T=0][T=8],S:4:4,~C:4,S:4,15:4,D:4,T:4,F:8,210u,-79m){C=(8+S:4+S:4:4+15+D+T+F:4+F:4:4)&15}
  185. Viewstar: IRP = {50.5k,337}<1,-8|1,-5>(~F:5,1,-17)*
  186. Whynter: IRP = {38k,750,msb}<1,-1|1,-3>(0:1,4,-4,F:32,1,-50m)
  187. X10: IRP = {40.8k,565}<2,-12|7,-7>(7,-7,F:5,~F:5,21,-7)*
  188. X10.n: IRP = {40.8k,565}<2,-12|7,-7>(F:5,N:-4,21,-7,(7,-7,F:5,~F:5,21,-7)+)
  189. X10_18: IRP = {40.8k,565}<2,-12|7,-7>(7,-7,F:9,~F:9,21,-7)*
  190. X10_8: IRP = {40.8k,565}<2,-12|7,-7>(7,-7,F:4,~F:4,21,-7)*
  191. Xiaomi: IRP = {36k,290,msb}<2,-2|2,-3|2,-4|2,-5>(1000u,-2,D:8,F:8,C:4,2,^30m)*{C=(D:4:4^D:4^F:4:4^F:4)}
  192. XMP: IRP = {38k,136,msb}<210u,-760u|210u,-896u|210u,-1032u|210u,-1168u|210u,-1304u|210u,-1449u|210u,-1576u|210u,-1712u|210u,-1848u|210u,-1984u|210u,-2120u|210u,-2256u|210u,-2392u|210u,-2528u|210u,-2664u|210u,-2800u>([T=0][T=8],S:4:4,C1:4,S:4,15:4,OEM:8,D:8,210u,-13.8m,S:4:4,C2:4,T:4,S:4,F:16,210u,-80.4m){C1=-(S+S::4+15+OEM+OEM::4+D+D::4),C2=-(S+S::4+T+F+F::4+F::8+F::12)}
  193. XMP-1: IRP = {38k,136,msb}<210u,-760u|210u,-896u|210u,-1032u|210u,-1168u|210u,-1304u|210u,-1449u|210u,-1576u|210u,-1712u|210u,-1848u|210u,-1984u|210u,-2120u|210u,-2256u|210u,-2392u|210u,-2528u|210u,-2664u|210u,-2800u>([T=0][T=8],S:4:4,C1:4,S:4,15:4,OEM:8,D:8,210u,-13.8m,S:4:4,C2:4,T:4,S:4,(F*256):16,210u,-80.4m){C1=-(S+S::4+15+OEM+OEM::4+D+D::4),C2=-(S+S::4+T+256*F+16*F+F+F::4)}
  194. XMP-2: IRP = {38k,136,msb}<210u,-760u|210u,-896u|210u,-1032u|210u,-1168u|210u,-1304u|210u,-1449u|210u,-1576u|210u,-1712u|210u,-1848u|210u,-1984u|210u,-2120u|210u,-2256u|210u,-2392u|210u,-2528u|210u,-2664u|210u,-2800u>([T=0][T=8],S:4:4,C1:4,S:4,15:4,OEM:8,D:8,210u,-13.8m,S:4:4,C2:4,T:4,S:4,F:16,210u,-80.4m){C1=-(S+S::4+15+OEM+OEM::4+D+D::4),C2=-(S+S::4+T+F+F::4+F::8+F::12)}
  195. XMPff: IRP = {38k,136,msb}<210u,-760u|210u,-896u|210u,-1032u|210u,-1168u|210u,-1304u|210u,-1449u|210u,-1576u|210u,-1712u|210u,-1848u|210u,-1984u|210u,-2120u|210u,-2256u|210u,-2392u|210u,-2528u|210u,-2664u|210u,-2800u>([T=0][T=8][T=9],S:4:4,C1:4,S:4,15:4,OEM:8,D:8,210u,-13.8m,S:4:4,C2:4,T:4,S:4,F:16,210u,[-80.4m][-80.4m][-13.8m]){C1=-(S+S::4+15+OEM+OEM::4+D+D::4),C2=-(S+S::4+T+F+F::4+F::8+F::12)}
  196. XMPff-1: IRP = {38k,136,msb}<210u,-760u|210u,-896u|210u,-1032u|210u,-1168u|210u,-1304u|210u,-1449u|210u,-1576u|210u,-1712u|210u,-1848u|210u,-1984u|210u,-2120u|210u,-2256u|210u,-2392u|210u,-2528u|210u,-2664u|210u,-2800u>([T=0][T=8][T=9],S:4:4,C1:4,S:4,15:4,OEM:8,D:8,210u,-13.8m,S:4:4,C2:4,T:4,S:4,(F*256):16,210u,[-80.4m][-80.4m][-13.8m]){C1=-(S+S::4+15+OEM+OEM::4+D+D::4),C2=-(S+S::4+T+256*F+16*F+F+F::4)}
  197. XMPff-2: IRP = {38k,136,msb}<210u,-760u|210u,-896u|210u,-1032u|210u,-1168u|210u,-1304u|210u,-1449u|210u,-1576u|210u,-1712u|210u,-1848u|210u,-1984u|210u,-2120u|210u,-2256u|210u,-2392u|210u,-2528u|210u,-2664u|210u,-2800u>([T=0][T=8][T=9],S:4:4,C1:4,S:4,15:4,OEM:8,D:8,210u,-13.8m,S:4:4,C2:4,T:4,S:4,F:16,210u,[-80.4m][-80.4m][-13.8m]){C1=-(S+S::4+15+OEM+OEM::4+D+D::4),C2=-(S+S::4+T+F+F::4+F::8+F::12)}
  198. Zaptor-36: IRP = {36k,330,msb}<-1,1|1,-1>([][T=0][T=1],8,-6,2,D:8,T:1,S:7,F:8,E:4,C:4,-74m){C=(D:4+D:4:4+S:4+S:3:4+8*T+F:4+F:4:4+E)&15}
  199. Zaptor-56: IRP = {56k,330,msb}<-1,1|1,-1>([][T=0][T=1],8,-6,2,D:8,T:1,S:7,F:8,E:4,C:4,-74m){C=(D:4+D:4:4+S:4+S:3:4+8*T+F:4+F:4:4+E)&15}
  200. Zenith: IRP = {40k,520,msb}<1,-10|1,-1,1,-8>(S:1,<1:2|2:2>(F:D),-90m)*
  201. Zenith5: IRP = {40k,520,msb}<1,-10|1,-1,1,-8>(S:1,<1:2|2:2>(F:D),-90m)*{D=5}
  202. Zenith6: IRP = {40k,520,msb}<1,-10|1,-1,1,-8>(S:1,<1:2|2:2>(F:D),-90m)*{D=6}
  203. Zenith7: IRP = {40k,520,msb}<1,-10|1,-1,1,-8>(S:1,<1:2|2:2>(F:D),-90m)*{D=7}
  204. Zenith8: IRP = {40k,520,msb}<1,-10|1,-1,1,-8>(S:1,<1:2|2:2>(F:D),-90m)*{D=8}
If you like the work I have been doing then feel free to Image

User avatar
kgschlosser
Site Admin
Posts: 5495
Joined: Fri Jun 05, 2015 5:43 am
Location: Rocky Mountains, Colorado USA

Re: Microsoft MCE Remote - Vista and newer

Post by kgschlosser » Sun Jun 28, 2020 2:17 am

I am still hammering away on this folks. I did ant to keep you informed of that.

I have the decode working on 147 protocols.

Code: Select all

AdNotham
Aiwa
Akai
Akord
Amino
Amino56
Anthem
Apple
Archer
Arctech
Arctech38
Audiovox
Barco
Blaupunkt
Bose
Bryston
CanalSat
CanalSatLD
Denon
Denon1
Denon2
DenonK
Dgtec
Digivision
DishNetwork
DishPlayer
Dyson
Dyson2
Elan
Elunevision
Emerson
Entone
F12
F120
F121
F32
Fujitsu
Fujitsu128
Fujitsu56
GI4DTV
GICable
GIRG
Grundig16
Grundig1630
GuangZhou
GwtS
GXB
Humax4Phase
InterVideoRC201
IODATAn
Jerrold
JVC
JVC48
JVC56
Kaseikyo
Kaseikyo56
Kathrein
Konka
Logitech
Lumagen
Lutron
Matsui
MCE
MCIR2kbd
MCIR2mouse
Metz19
Mitsubishi
MitsubishiK
Motorola
NEC
NEC48
NECf16
NECrnc
NECx
NECxf16
Nokia
Nokia12
Nokia32
NovaPace
NRC16
NRC1632
NRC17
Ortek
OrtekMCE
PaceMSS
Panasonic
Panasonic2
PanasonicOld
PCTV
PID0001
PID0003
PID0004
pid0083
Pioneer
Proton
Proton40
RC5
RC57F
RC57F57
RC5x
RC6
RC6620
RC6624
RC6632
RC6M16
RC6M28
RC6M32
RC6M56
RCA
RCA38
RCA38Old
RCAOld
RCMM
RECS800045
RECS800068
RECS800090
Revox
Roku
Rs200
RTIRelay
Sampo
Samsung20
Samsung36
SamsungSMTG
ScAtl6
Sharp
Sharp1
Sharp2
SharpDVD
SIM2
Sky
SkyHD
SkyPlus
Somfy
Sony12
Sony15
Sony20
Sony8
StreamZap
StreamZap57
TeacK
Thomson
Thomson7
Tivo
Universal
XBox360
XBoxOne
I have the encoding tested and working on a 1/3 of them also. I still have to test the rest of them.
I added the code to be able to connect to the eg server to collect a user friendly name of the codes. I still have to write the server side code and also get the data into a sql database.

the eg specific parts are pretty much done also, I will probably have to tweat because of recent changes. I am also electing to not store the saved codes in the eg config file but instead to save the data to it's own xml file. I have added the ability to turn on and off decoders the only time all decoders will get used (unless your have them all turned on) is during the learning process. This is going to automatically turn the decoder on if the code is saved.It will also turn on a decoder if a code to be blasted is not already turned on.

turning on and off decoders is going to give you the best speed when an ir code is received.

I still have to order the protocols correctly so the decoders do not bump heads with one another. and I also have to play around with it some because the smallest pulse time that the MCE receiver will do is 50us and some of the code may be 512 us and another is 560us. these may end up getting decoded incorrectly. Hence another reason for turning on and off decoders. I think that through the use of the normalization algorithm I wrote I should be able to nail down the decoder pretty well. My plan is this. run through the decoders and if more then one decoder decoded the IR then use the normalization algorithm on the code and run back through the decoders that worked the first time. This should hopefully get it hailed down to a single code.

I just ran some tests on the decoding speed. I set the decoded for a code I had all the way at the bottom of the list of decoders. I then had it run through them all. It takes approx 4 milliseconds for it to get through the entire list of them. After the first time it takes < 1 millisecond because I have it reorganize the decoders so the last decoder that worked gets bumped to the fron of the line.

It is a heap faster then I thought it would be.
If you like the work I have been doing then feel free to Image

User avatar
kgschlosser
Site Admin
Posts: 5495
Joined: Fri Jun 05, 2015 5:43 am
Location: Rocky Mountains, Colorado USA

Re: Microsoft MCE Remote - Vista and newer

Post by kgschlosser » Sun Jul 19, 2020 10:38 am

OK folks. I am getting really close to being finished with this thing.

I have managed to get I believe 152 protocols supported. There is an option that will allow you to choose enduring events or regular events.
The learn action has been removed completely. There is no need to have this anymore. Every single code that comes into EG is going to get saved and can be transmitted from this. received codes are normalized to the protocols specifications and this is what gets transmitted. This is going to improve the accuracy of a learned code by a really large amount.

There are a series of configuration panels that are built into EG. these panels are not apart of any plugin and neither is the decoder. This is done so the decoder can be used by any plugin that sends and receives IR. The configuration panels allow you to enable and disable protocols, disabling protocols may need to be done in order to eliminate incorrect decodes. It will also speed up the decoding process. I wrote the decoder so it can decode whole raw codes and also a code stream. The code stream is important for the MCE plugin specifically. Because there is no single protocol we are dialing into there is no way for me to set the timeout for the receive to a number that will suit all protocols and be able to capture an entire code for long codes and not sit waiting for a long time for short ones. By making it able to handle a stream I am now able to set the timeout for when to return data to a really small number one that will allow me to capture several burst pairs. This will keep any "code lag" to as small as possible.

In the decoder config panels you will have access to all kinds of nifty toys and you will be able to copy codes between different plugins. Because the MCE plugin is now going to be able to support multiple transceivers the plugin can be installed more then once. one for each transceiver. each plugin will gets it's own decoder for optimal performance and also so there are no issues with repeat codes. I wanted to keep the number of threads being used to a low number and not have to keep on spawning new threads each time a code is received. I opted to write a single thread worker that handles the repeat timeouts across all plugins and trhere is nother thread worker that handles calling back functions for code repeat timeouts and also received code callbacks.

I had to get really crafty with the timings for these things. There is no high precision timer that can stall a thread and return on time that is built into python. I wrote one that is accurate to about 3 millionths of a second.

I am seeing decode times for repeats coming it at < 1 millisecond and decode times for new codes averaging around 4 milliseconds. These times should improve when codes gets saved because those are the codes that will get checked for a match first and it will bypass the whole "decoding" process.


I still have to bug test and also write the EG server side code. You will be able to lookup an IR code by device manufacturer, device type, model number and select the key you want to transmit. This will have to be done through the decoder configuration panel and then the code will be accessible from inside of the plugin. Remember I wanted to keep the number of queries to the server to a minimum so things would be able to run as fast as possible.
If you like the work I have been doing then feel free to Image

Crowley
Posts: 27
Joined: Sat Dec 21, 2019 6:05 am

Re: Microsoft MCE Remote - Vista and newer

Post by Crowley » Sun Jul 19, 2020 10:42 am

Thanks for the effort and keeping us up to date!

User avatar
kgschlosser
Site Admin
Posts: 5495
Joined: Fri Jun 05, 2015 5:43 am
Location: Rocky Mountains, Colorado USA

Re: Microsoft MCE Remote - Vista and newer

Post by kgschlosser » Sun Jul 19, 2020 10:55 am

This update is ticking in at close to 37000 lines of code. It has been a pretty challenging project.
If you like the work I have been doing then feel free to Image

User avatar
kgschlosser
Site Admin
Posts: 5495
Joined: Fri Jun 05, 2015 5:43 am
Location: Rocky Mountains, Colorado USA

Re: Microsoft MCE Remote - Vista and newer

Post by kgschlosser » Wed Jul 22, 2020 2:14 am

it's getting there.
ir_decoder.png
If you like the work I have been doing then feel free to Image

User avatar
kgschlosser
Site Admin
Posts: 5495
Joined: Fri Jun 05, 2015 5:43 am
Location: Rocky Mountains, Colorado USA

Re: Microsoft MCE Remote - Vista and newer

Post by kgschlosser » Wed Jul 22, 2020 7:02 pm

OK folks. I created a pull request for the changes I have made.

https://github.com/EventGhost/EventGhost/pull/409

It is compiling right now and it will be done in probably 15 minutes or so. I will provide a link to the setup executable when it is done.

I made a new plugin for the MCE Vista + The old plugin remains in tact. You are going to have to disable the service if you want to use the new plugin. Both the new and the old plugin are going to use the new decoder. I have not tested the functionality of the old plugin and the decoder. I know that the new plugin and the decoder do work together.

There is a pre alpha thing. There are going to be lots and lots of bugs I am sure. I am going to have to tweak tolerances and things of that nature. I have it working properly with the NEC protocol and the MCE protocol. I have not tested beyond that. Make sure that in the configuration of the new plugin you UNCHECK the friendly names. I have not written the server side code yet so it will cause a huge lag because of waiting for a server response.

There is an issue that sometimes exists when opening the plugin config. the list of available receivers will not populate. You may have to close it and reopen it to get it to populate properly. I am looking into why that is happening.

The event names will ne completely different. and so are the actions. There is no longer a learn action as it is not needed anymore. I have an extremely high duplication rate of codes if the Universal decoder gets used. This is a good thing so there aren't changing codes for the same button being pressed. It is not 100% just yet and I am working on that. I should be able to get it to 99.9% with how I have written the Universal decoder. In all honesty with the 162 supported protocols the universal decoder shouldn't end up getting used.

because some protocols are so close in their specifications it is possible to get codes decoded by the wrong protocol. There are also some remotes that do not use a single protocol This adds to the problem. You have the ability to enable and disable protocols and also change they tolerances so it better fits your computer. There is an added icon to the toolbar in EG as well as an added menu option in the View drop down menu. This will bring up the decoder options for all plugins that have used the decoder. I have not tested this but you should be able to copy and paste as well as drag and drop IR codes between different plugins. You should also be able to paste either RLC or pronto directly into the protocol tree. This is also how you want to add codes. right click on the decoder to open up the add dialog you want to use. Again this is not tested as of yet. I was hoping for a few volunteers that are willing to help out. any problems or reports should be posted into the link I provided above.

Remember to backup you existing EG before installing this. DO NOT USE YOUR EXISTING SAVE FILE. make a new one to tst with. Until we know everything is working well I do not want to cause an issue with your "production" copy of EG.

Make a new tree with only this plugin in it. we want to make sure we have a clean test environment. I am looking to test the dialogs, actions and the received/transmitted codes. anything else will come later on down the road.
This project is MASSIVE as i have stated before. bugs are going to take some time to locate and fix. If you have fixed something let me know or do a pull request against my fork and branch located here.
https://github.com/kdschlosser/EventGho ... e_ir_vista

I want to keep a "paper trail" on this one because of the size of the project. I also want to make sure the people involved in testing/fixing get the credit. If you need to to explain the code I am happy to do this. It is a complex bit of code and had to be because of the enormous variations between protocols and also how Windows handles the IR receiver. The Windows API code for dealing with the receiver is NOT located with the new plugin. it is in the eg/WinApi folder.
If you like the work I have been doing then feel free to Image

Crowley
Posts: 27
Joined: Sat Dec 21, 2019 6:05 am

Re: Microsoft MCE Remote - Vista and newer

Post by Crowley » Wed Jul 22, 2020 7:20 pm

I'd be happy to test when you have the binary ready.

User avatar
kgschlosser
Site Admin
Posts: 5495
Joined: Fri Jun 05, 2015 5:43 am
Location: Rocky Mountains, Colorado USA

Re: Microsoft MCE Remote - Vista and newer

Post by kgschlosser » Thu Jul 23, 2020 7:04 am

If you like the work I have been doing then feel free to Image

Crowley
Posts: 27
Joined: Sat Dec 21, 2019 6:05 am

Re: Microsoft MCE Remote - Vista and newer

Post by Crowley » Thu Jul 23, 2020 7:42 am

Ok, I had time for just a quick test now, I can test more later. What kind of feedback are you looking for?

One thing I noticed, you have to start eg as admin for the new plugin to be able to see the receiver.

Right now, the button presses and log output put is somewhat laggy, but I guess this was expected?

This is my log with just a few "ok" presses, https://pastebin.com/fyH4xRBp there is some error there.

This with an empty tree and only the new plugin installed. No settings changed.

Edit: I forgot to uncheck friendly names. When trying to do that now, I get the following error:

Code: Select all

11:10:20 AM   ---> Welcome to EventGhost <---
11:10:22 AM   Error starting plugin: Windows Media Center IR Receiver
11:10:22 AM   Traceback (most recent call last) (WIP-2020.07.22-18.44.53):
11:10:22 AM     File "C:\Program Files (x86)\EventGhost\eg\Classes\PluginInstanceInfo.py", line 196, in Start
11:10:22 AM       self.instance.__start__(*self.args)
11:10:22 AM     File "C:\Program Files (x86)\EventGhost\plugins\MCEIrReceiver\__init__.py", line 430, in __start__
11:10:22 AM       reg_keys.remove_keys()
11:10:22 AM     File "C:\Program Files (x86)\EventGhost\plugins\MCEIrReceiver\reg_keys.py", line 27, in remove_keys
11:10:22 AM       reg.DeleteValue(key, 'CodeSetNum0')
11:10:22 AM   WindowsError: [Error 2] The system cannot find the file specified
11:10:23 AM   Error starting plugin: Windows Media Center IR Receiver
11:10:23 AM   Traceback (most recent call last) (WIP-2020.07.22-18.44.53):
11:10:23 AM     File "C:\Program Files (x86)\EventGhost\eg\Classes\PluginInstanceInfo.py", line 196, in Start
11:10:23 AM       self.instance.__start__(*self.args)
11:10:23 AM     File "C:\Program Files (x86)\EventGhost\plugins\MCEIrReceiver\__init__.py", line 430, in __start__
11:10:23 AM       reg_keys.remove_keys()
11:10:23 AM     File "C:\Program Files (x86)\EventGhost\plugins\MCEIrReceiver\reg_keys.py", line 27, in remove_keys
11:10:23 AM       reg.DeleteValue(key, 'CodeSetNum0')
11:10:23 AM   WindowsError: [Error 2] The system cannot find the file specified
Last edited by Crowley on Thu Jul 23, 2020 8:11 am, edited 1 time in total.

User avatar
kgschlosser
Site Admin
Posts: 5495
Joined: Fri Jun 05, 2015 5:43 am
Location: Rocky Mountains, Colorado USA

Re: Microsoft MCE Remote - Vista and newer

Post by kgschlosser » Thu Jul 23, 2020 8:11 am

One thing I noticed, you have to start eg as admin for the new plugin to be able to see the receiver.
really?? I have not checked this yet. My username is the admin. I did mention the closing and reopening of the config dialog and the name should appear. It might be coincidental. Try shutting down EG and restarting it not as an administrator, Do this after you have the plugin installed and the receiver selected. I am curious to see what happens.

The errors are there because I told it to spit out those errors. It is a failed decode error. It is only for a single protocol. I forgot to remove the line of code that generates that.

I am going to have to add an aggressive logging routine to this thing but until I do that I want to see what the IR code is that is being used in it's raw form. in order to do that I need you to make a macro and in that macro place in it a Python script. in the python script put the following code.

Code: Select all

print eg.event.payload.original_rlc
add this as the event.
eHome Infrared Receiver (USBCIR).*

this will spit out the raw ir code.
If you like the work I have been doing then feel free to Image

Crowley
Posts: 27
Joined: Sat Dec 21, 2019 6:05 am

Re: Microsoft MCE Remote - Vista and newer

Post by Crowley » Thu Jul 23, 2020 8:20 am

If I start without admin rights, it will give this:

Code: Select all

11:16:03 AM         Error starting plugin: Windows Media Center IR Receiver
11:16:03 AM         unable to locate MCE receiver "eHome Infrared Receiver (USBCIR)"
But right now, I can't get it work even as admin, it will spit out the error that I edited on my above post, something about reg keys. So I can't test the macro. Will try again later.

Edit:

I can't get it to work at all anymore. Even tried uninstalling, deleting appdata and programdata and starting clean.

This is always what I get:

Code: Select all

4:35:54 PM      Plugin: Windows Media Center IR Receiver
4:35:54 PM         Error starting plugin: Windows Media Center IR Receiver
4:35:54 PM         Traceback (most recent call last) (WIP-2020.07.22-18.44.53):
4:35:54 PM           File "C:\Program Files (x86)\EventGhost\eg\Classes\PluginInstanceInfo.py", line 196, in Start
4:35:54 PM             self.instance.__start__(*self.args)
4:35:54 PM           File "C:\Program Files (x86)\EventGhost\plugins\MCEIrReceiver\__init__.py", line 430, in __start__
4:35:54 PM             reg_keys.remove_keys()
4:35:54 PM           File "C:\Program Files (x86)\EventGhost\plugins\MCEIrReceiver\reg_keys.py", line 27, in remove_keys
4:35:54 PM             reg.DeleteValue(key, 'CodeSetNum0')
4:35:54 PM         WindowsError: [Error 2] The system cannot find the file specified

User avatar
kgschlosser
Site Admin
Posts: 5495
Joined: Fri Jun 05, 2015 5:43 am
Location: Rocky Mountains, Colorado USA

Re: Microsoft MCE Remote - Vista and newer

Post by kgschlosser » Thu Jul 23, 2020 3:47 pm

ok I know it's not going to be perfect and will have some issues. I am going to have to work through them. I need to figure out why there is the admin right thing. I need to get rid of that problem first.
If you like the work I have been doing then feel free to Image

Post Reply