ir_Mitsubishi_test.cpp 51 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118
  1. // Copyright 2017 David Conran
  2. // Copyright 2018 denxhun
  3. #include "ir_Mitsubishi.h"
  4. #include "IRrecv_test.h"
  5. #include "IRsend.h"
  6. #include "IRsend_test.h"
  7. #include "gtest/gtest.h"
  8. // Tests for sendMitsubishi().
  9. // Test sending typical data only.
  10. TEST(TestSendMitsubishi, SendDataOnly) {
  11. IRsendTest irsend(4);
  12. irsend.begin();
  13. irsend.reset();
  14. irsend.sendMitsubishi(0xE242);
  15. EXPECT_EQ(
  16. "m300s2100m300s2100m300s2100m300s900m300s900m300s900m300s2100m300s900"
  17. "m300s900m300s2100m300s900m300s900m300s900m300s900m300s2100m300s900"
  18. "m300s28080"
  19. "m300s2100m300s2100m300s2100m300s900m300s900m300s900m300s2100m300s900"
  20. "m300s900m300s2100m300s900m300s900m300s900m300s900m300s2100m300s900"
  21. "m300s28080",
  22. irsend.outputStr());
  23. irsend.reset();
  24. irsend.sendMitsubishi(0x0);
  25. EXPECT_EQ(
  26. "m300s900m300s900m300s900m300s900m300s900m300s900m300s900m300s900"
  27. "m300s900m300s900m300s900m300s900m300s900m300s900m300s900m300s900"
  28. "m300s34080"
  29. "m300s900m300s900m300s900m300s900m300s900m300s900m300s900m300s900"
  30. "m300s900m300s900m300s900m300s900m300s900m300s900m300s900m300s900"
  31. "m300s34080",
  32. irsend.outputStr());
  33. irsend.reset();
  34. irsend.sendMitsubishi(0x4321);
  35. EXPECT_EQ(
  36. "m300s900m300s2100m300s900m300s900m300s900m300s900m300s2100m300s2100"
  37. "m300s900m300s900m300s2100m300s900m300s900m300s900m300s900m300s2100"
  38. "m300s28080"
  39. "m300s900m300s2100m300s900m300s900m300s900m300s900m300s2100m300s2100"
  40. "m300s900m300s900m300s2100m300s900m300s900m300s900m300s900m300s2100"
  41. "m300s28080",
  42. irsend.outputStr());
  43. }
  44. // Test sending with different repeats.
  45. TEST(TestSendMitsubishi, SendWithRepeats) {
  46. IRsendTest irsend(4);
  47. irsend.begin();
  48. irsend.reset();
  49. irsend.sendMitsubishi(0xE242, kMitsubishiBits, 0); // 0 repeat.
  50. EXPECT_EQ(
  51. "m300s2100m300s2100m300s2100m300s900m300s900m300s900m300s2100m300s900"
  52. "m300s900m300s2100m300s900m300s900m300s900m300s900m300s2100m300s900"
  53. "m300s28080",
  54. irsend.outputStr());
  55. irsend.reset();
  56. irsend.sendMitsubishi(0xE242, kMitsubishiBits, 1); // 1 repeat.
  57. EXPECT_EQ(
  58. "m300s2100m300s2100m300s2100m300s900m300s900m300s900m300s2100m300s900"
  59. "m300s900m300s2100m300s900m300s900m300s900m300s900m300s2100m300s900"
  60. "m300s28080"
  61. "m300s2100m300s2100m300s2100m300s900m300s900m300s900m300s2100m300s900"
  62. "m300s900m300s2100m300s900m300s900m300s900m300s900m300s2100m300s900"
  63. "m300s28080",
  64. irsend.outputStr());
  65. irsend.sendMitsubishi(0xE242, kMitsubishiBits, 2); // 2 repeats.
  66. EXPECT_EQ(
  67. "m300s2100m300s2100m300s2100m300s900m300s900m300s900m300s2100m300s900"
  68. "m300s900m300s2100m300s900m300s900m300s900m300s900m300s2100m300s900"
  69. "m300s28080"
  70. "m300s2100m300s2100m300s2100m300s900m300s900m300s900m300s2100m300s900"
  71. "m300s900m300s2100m300s900m300s900m300s900m300s900m300s2100m300s900"
  72. "m300s28080"
  73. "m300s2100m300s2100m300s2100m300s900m300s900m300s900m300s2100m300s900"
  74. "m300s900m300s2100m300s900m300s900m300s900m300s900m300s2100m300s900"
  75. "m300s28080",
  76. irsend.outputStr());
  77. }
  78. // Test sending an atypical data size.
  79. TEST(TestSendMitsubishi, SendUnusualSize) {
  80. IRsendTest irsend(4);
  81. irsend.begin();
  82. irsend.reset();
  83. irsend.sendMitsubishi(0x0, 8);
  84. EXPECT_EQ(
  85. "m300s900m300s900m300s900m300s900m300s900m300s900m300s900m300s900"
  86. "m300s43680"
  87. "m300s900m300s900m300s900m300s900m300s900m300s900m300s900m300s900"
  88. "m300s43680",
  89. irsend.outputStr());
  90. irsend.reset();
  91. irsend.sendMitsubishi(0x1234567890ABCDEF, 64);
  92. EXPECT_EQ(
  93. "m300s900m300s900m300s900m300s2100m300s900m300s900m300s2100m300s900"
  94. "m300s900m300s900m300s2100m300s2100m300s900m300s2100m300s900m300s900"
  95. "m300s900m300s2100m300s900m300s2100m300s900m300s2100m300s2100m300s900"
  96. "m300s900m300s2100m300s2100m300s2100m300s2100m300s900m300s900m300s900"
  97. "m300s2100m300s900m300s900m300s2100m300s900m300s900m300s900m300s900"
  98. "m300s2100m300s900m300s2100m300s900m300s2100m300s900m300s2100m300s2100"
  99. "m300s2100m300s2100m300s900m300s900m300s2100m300s2100m300s900m300s2100"
  100. "m300s2100m300s2100m300s2100m300s900m300s2100m300s2100m300s2100m300s2100"
  101. "m300s28080"
  102. "m300s900m300s900m300s900m300s2100m300s900m300s900m300s2100m300s900"
  103. "m300s900m300s900m300s2100m300s2100m300s900m300s2100m300s900m300s900"
  104. "m300s900m300s2100m300s900m300s2100m300s900m300s2100m300s2100m300s900"
  105. "m300s900m300s2100m300s2100m300s2100m300s2100m300s900m300s900m300s900"
  106. "m300s2100m300s900m300s900m300s2100m300s900m300s900m300s900m300s900"
  107. "m300s2100m300s900m300s2100m300s900m300s2100m300s900m300s2100m300s2100"
  108. "m300s2100m300s2100m300s900m300s900m300s2100m300s2100m300s900m300s2100"
  109. "m300s2100m300s2100m300s2100m300s900m300s2100m300s2100m300s2100m300s2100"
  110. "m300s28080",
  111. irsend.outputStr());
  112. }
  113. // Decode normal Mitsubishi messages.
  114. TEST(TestDecodeMitsubishi, NormalDecodeWithStrict) {
  115. IRsendTest irsend(4);
  116. IRrecv irrecv(4);
  117. irsend.begin();
  118. // Normal Mitsubishi 16-bit message.
  119. irsend.reset();
  120. irsend.sendMitsubishi(0xC2B8);
  121. irsend.makeDecodeResult();
  122. ASSERT_TRUE(irrecv.decodeMitsubishi(&irsend.capture, kMitsubishiBits, true));
  123. EXPECT_EQ(MITSUBISHI, irsend.capture.decode_type);
  124. EXPECT_EQ(kMitsubishiBits, irsend.capture.bits);
  125. EXPECT_EQ(0xC2B8, irsend.capture.value);
  126. EXPECT_EQ(0x0, irsend.capture.address);
  127. EXPECT_EQ(0x0, irsend.capture.command);
  128. EXPECT_FALSE(irsend.capture.repeat);
  129. irsend.reset();
  130. irsend.sendMitsubishi(0x0);
  131. irsend.makeDecodeResult();
  132. ASSERT_TRUE(irrecv.decodeMitsubishi(&irsend.capture, kMitsubishiBits, true));
  133. EXPECT_EQ(MITSUBISHI, irsend.capture.decode_type);
  134. EXPECT_EQ(kMitsubishiBits, irsend.capture.bits);
  135. EXPECT_EQ(0x0, irsend.capture.value);
  136. EXPECT_EQ(0x0, irsend.capture.address);
  137. EXPECT_EQ(0x0, irsend.capture.command);
  138. EXPECT_FALSE(irsend.capture.repeat);
  139. irsend.reset();
  140. irsend.sendMitsubishi(0xFFFF);
  141. irsend.makeDecodeResult();
  142. ASSERT_TRUE(irrecv.decodeMitsubishi(&irsend.capture, kMitsubishiBits, true));
  143. EXPECT_EQ(MITSUBISHI, irsend.capture.decode_type);
  144. EXPECT_EQ(kMitsubishiBits, irsend.capture.bits);
  145. EXPECT_EQ(0xFFFF, irsend.capture.value);
  146. EXPECT_EQ(0x0, irsend.capture.address);
  147. EXPECT_EQ(0x0, irsend.capture.command);
  148. EXPECT_FALSE(irsend.capture.repeat);
  149. // Non-standard Mitsubishi sizes should fail with strict.
  150. irsend.reset();
  151. // 12 bits.
  152. irsend.sendMitsubishi(0xFFF, 12);
  153. irsend.makeDecodeResult();
  154. ASSERT_FALSE(irrecv.decodeMitsubishi(&irsend.capture, kMitsubishiBits, true));
  155. ASSERT_FALSE(irrecv.decodeMitsubishi(&irsend.capture, 12, true));
  156. ASSERT_FALSE(irrecv.decodeMitsubishi(&irsend.capture, 64, true));
  157. // 32 bits.
  158. irsend.sendMitsubishi(0xFFF, 32);
  159. irsend.makeDecodeResult();
  160. ASSERT_FALSE(irrecv.decodeMitsubishi(&irsend.capture, kMitsubishiBits, true));
  161. ASSERT_FALSE(irrecv.decodeMitsubishi(&irsend.capture, 12, true));
  162. ASSERT_FALSE(irrecv.decodeMitsubishi(&irsend.capture, 32, true));
  163. ASSERT_FALSE(irrecv.decodeMitsubishi(&irsend.capture, 64, true));
  164. }
  165. // Decode normal repeated Mitsubishi messages.
  166. TEST(TestDecodeMitsubishi, NormalDecodeWithRepeatAndStrict) {
  167. IRsendTest irsend(4);
  168. IRrecv irrecv(4);
  169. irsend.begin();
  170. // Normal Mitsubishi 16-bit message with 2 repeats.
  171. irsend.reset();
  172. irsend.sendMitsubishi(0xC2B8, kMitsubishiBits, 2);
  173. irsend.makeDecodeResult();
  174. ASSERT_TRUE(irrecv.decodeMitsubishi(&irsend.capture, kMitsubishiBits, true));
  175. EXPECT_EQ(MITSUBISHI, irsend.capture.decode_type);
  176. EXPECT_EQ(kMitsubishiBits, irsend.capture.bits);
  177. EXPECT_EQ(0xC2B8, irsend.capture.value);
  178. EXPECT_EQ(0x0, irsend.capture.address);
  179. EXPECT_EQ(0x0, irsend.capture.command);
  180. EXPECT_FALSE(irsend.capture.repeat);
  181. // Normal Mitsubishi 16-bit message with 0 repeats.
  182. irsend.reset();
  183. irsend.sendMitsubishi(0xC2B8, kMitsubishiBits, 0);
  184. irsend.makeDecodeResult();
  185. ASSERT_TRUE(irrecv.decodeMitsubishi(&irsend.capture, kMitsubishiBits, true));
  186. EXPECT_EQ(MITSUBISHI, irsend.capture.decode_type);
  187. EXPECT_EQ(kMitsubishiBits, irsend.capture.bits);
  188. EXPECT_EQ(0xC2B8, irsend.capture.value);
  189. EXPECT_EQ(0x0, irsend.capture.address);
  190. EXPECT_EQ(0x0, irsend.capture.command);
  191. EXPECT_FALSE(irsend.capture.repeat);
  192. }
  193. // Decode unsupported Mitsubishi messages.
  194. TEST(TestDecodeMitsubishi, DecodeWithNonStrictValues) {
  195. IRsendTest irsend(4);
  196. IRrecv irrecv(4);
  197. irsend.begin();
  198. irsend.reset();
  199. irsend.sendMitsubishi(0x0, 8); // Illegal sized Mitsubishi 8-bit message.
  200. irsend.makeDecodeResult();
  201. // Should fail with strict on.
  202. ASSERT_FALSE(irrecv.decodeMitsubishi(&irsend.capture, kMitsubishiBits, true));
  203. // Should pass if strict off.
  204. ASSERT_TRUE(irrecv.decodeMitsubishi(&irsend.capture, 8, false));
  205. EXPECT_EQ(MITSUBISHI, irsend.capture.decode_type);
  206. EXPECT_EQ(8, irsend.capture.bits);
  207. EXPECT_EQ(0x0, irsend.capture.value);
  208. EXPECT_EQ(0x0, irsend.capture.address);
  209. EXPECT_EQ(0x0, irsend.capture.command);
  210. ASSERT_FALSE(irrecv.decodeMitsubishi(&irsend.capture, 64, false));
  211. irsend.reset();
  212. // Illegal sized Mitsubishi 64-bit message.
  213. irsend.sendMitsubishi(0xFEDCBA9876543210, 64);
  214. irsend.makeDecodeResult();
  215. // Should fail with strict on.
  216. ASSERT_FALSE(irrecv.decodeMitsubishi(&irsend.capture, kMitsubishiBits, true));
  217. // Should pass if strict off.
  218. ASSERT_TRUE(irrecv.decodeMitsubishi(&irsend.capture, 64, false));
  219. EXPECT_EQ(MITSUBISHI, irsend.capture.decode_type);
  220. EXPECT_EQ(64, irsend.capture.bits);
  221. EXPECT_EQ(0xFEDCBA9876543210, irsend.capture.value);
  222. EXPECT_EQ(0x0, irsend.capture.address);
  223. EXPECT_EQ(0x0, irsend.capture.command);
  224. // Should fail when we are after a shorter message than we got.
  225. ASSERT_FALSE(irrecv.decodeMitsubishi(&irsend.capture, 8, false));
  226. }
  227. // Decode a 'real' example via GlobalCache
  228. TEST(TestDecodeMitsubishi, DecodeGlobalCacheExample) {
  229. IRsendTest irsend(4);
  230. IRrecv irrecv(4);
  231. irsend.begin();
  232. irsend.reset();
  233. // Mitsubishi "Power On" (16-bit) code from Global Cache.
  234. uint16_t gc_test[37] = {33000, 1, 1, 10, 70, 10, 70, 10, 70, 10, 30, 10, 30,
  235. 10, 30, 10, 70, 10, 30, 10, 30, 10, 70, 10, 30, 10,
  236. 30, 10, 30, 10, 30, 10, 70, 10, 30, 10, 936};
  237. irsend.sendGC(gc_test, 37);
  238. irsend.makeDecodeResult();
  239. ASSERT_TRUE(irrecv.decodeMitsubishi(&irsend.capture));
  240. EXPECT_EQ(MITSUBISHI, irsend.capture.decode_type);
  241. EXPECT_EQ(kMitsubishiBits, irsend.capture.bits);
  242. EXPECT_EQ(0xE242, irsend.capture.value);
  243. EXPECT_EQ(0x0, irsend.capture.address);
  244. EXPECT_EQ(0x0, irsend.capture.command);
  245. EXPECT_FALSE(irsend.capture.repeat);
  246. }
  247. // Fail to decode a non-Mitsubishi example via GlobalCache
  248. TEST(TestDecodeMitsubishi, FailToDecodeNonMitsubishiExample) {
  249. IRsendTest irsend(4);
  250. IRrecv irrecv(4);
  251. irsend.begin();
  252. irsend.reset();
  253. // Modified a few entries to unexpected values, based on previous test case.
  254. uint16_t gc_test[39] = {38000, 1, 1, 322, 162, 20, 61, 20, 61, 20,
  255. 20, 20, 20, 20, 20, 20, 127, 20, 61, 9,
  256. 20, 20, 61, 20, 20, 20, 61, 20, 61, 20,
  257. 61, 20, 20, 20, 20, 20, 20, 20, 884};
  258. irsend.sendGC(gc_test, 39);
  259. irsend.makeDecodeResult();
  260. ASSERT_FALSE(irrecv.decodeMitsubishi(&irsend.capture));
  261. ASSERT_FALSE(
  262. irrecv.decodeMitsubishi(&irsend.capture, kMitsubishiBits, false));
  263. }
  264. // Tests for Mitsubishi A/C methods.
  265. // Test sending typical data only.
  266. TEST(TestSendMitsubishiAC, SendDataOnly) {
  267. IRsendTest irsend(4);
  268. irsend.begin();
  269. uint8_t mitsub_code[kMitsubishiACStateLength] = {
  270. 0x23, 0xCB, 0x26, 0x01, 0x00, 0x20, 0x08, 0x06, 0x30,
  271. 0x45, 0x67, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F};
  272. irsend.reset();
  273. irsend.sendMitsubishiAC(mitsub_code);
  274. EXPECT_EQ(
  275. "m3400s1750"
  276. "m450s1300m450s1300m450s420m450s420m450s420m450s1300m450s420m450s420"
  277. "m450s1300m450s1300m450s420m450s1300m450s420m450s420m450s1300m450s1300"
  278. "m450s420m450s1300m450s1300m450s420m450s420m450s1300m450s420m450s420"
  279. "m450s1300m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  280. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  281. "m450s420m450s420m450s420m450s420m450s420m450s1300m450s420m450s420"
  282. "m450s420m450s420m450s420m450s1300m450s420m450s420m450s420m450s420"
  283. "m450s420m450s1300m450s1300m450s420m450s420m450s420m450s420m450s420"
  284. "m450s420m450s420m450s420m450s420m450s1300m450s1300m450s420m450s420"
  285. "m450s1300m450s420m450s1300m450s420m450s420m450s420m450s1300m450s420"
  286. "m450s1300m450s1300m450s1300m450s420m450s420m450s1300m450s1300m450s420"
  287. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  288. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  289. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  290. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  291. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  292. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  293. "m450s1300m450s1300m450s1300m450s1300m450s1300m450s420m450s420m450s420"
  294. "m440s17100"
  295. "m3400s1750"
  296. "m450s1300m450s1300m450s420m450s420m450s420m450s1300m450s420m450s420"
  297. "m450s1300m450s1300m450s420m450s1300m450s420m450s420m450s1300m450s1300"
  298. "m450s420m450s1300m450s1300m450s420m450s420m450s1300m450s420m450s420"
  299. "m450s1300m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  300. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  301. "m450s420m450s420m450s420m450s420m450s420m450s1300m450s420m450s420"
  302. "m450s420m450s420m450s420m450s1300m450s420m450s420m450s420m450s420"
  303. "m450s420m450s1300m450s1300m450s420m450s420m450s420m450s420m450s420"
  304. "m450s420m450s420m450s420m450s420m450s1300m450s1300m450s420m450s420"
  305. "m450s1300m450s420m450s1300m450s420m450s420m450s420m450s1300m450s420"
  306. "m450s1300m450s1300m450s1300m450s420m450s420m450s1300m450s1300m450s420"
  307. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  308. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  309. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  310. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  311. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  312. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  313. "m450s1300m450s1300m450s1300m450s1300m450s1300m450s420m450s420m450s420"
  314. "m440s17100",
  315. irsend.outputStr());
  316. }
  317. // Test sending with repeats.
  318. TEST(TestSendMitsubishiAC, SendWithRepeats) {
  319. IRsendTest irsend(4);
  320. irsend.begin();
  321. irsend.reset();
  322. uint8_t mitsub_code[kMitsubishiACStateLength] = {
  323. 0x23, 0xCB, 0x26, 0x01, 0x00, 0x20, 0x08, 0x06, 0x30,
  324. 0x45, 0x67, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F};
  325. irsend.sendMitsubishiAC(mitsub_code, kMitsubishiACStateLength, 0);
  326. EXPECT_EQ(
  327. "m3400s1750"
  328. "m450s1300m450s1300m450s420m450s420m450s420m450s1300m450s420m450s420"
  329. "m450s1300m450s1300m450s420m450s1300m450s420m450s420m450s1300m450s1300"
  330. "m450s420m450s1300m450s1300m450s420m450s420m450s1300m450s420m450s420"
  331. "m450s1300m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  332. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  333. "m450s420m450s420m450s420m450s420m450s420m450s1300m450s420m450s420"
  334. "m450s420m450s420m450s420m450s1300m450s420m450s420m450s420m450s420"
  335. "m450s420m450s1300m450s1300m450s420m450s420m450s420m450s420m450s420"
  336. "m450s420m450s420m450s420m450s420m450s1300m450s1300m450s420m450s420"
  337. "m450s1300m450s420m450s1300m450s420m450s420m450s420m450s1300m450s420"
  338. "m450s1300m450s1300m450s1300m450s420m450s420m450s1300m450s1300m450s420"
  339. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  340. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  341. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  342. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  343. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  344. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  345. "m450s1300m450s1300m450s1300m450s1300m450s1300m450s420m450s420m450s420"
  346. "m440s17100",
  347. irsend.outputStr());
  348. irsend.reset();
  349. irsend.sendMitsubishiAC(mitsub_code, kMitsubishiACStateLength, 2);
  350. EXPECT_EQ(
  351. "m3400s1750"
  352. "m450s1300m450s1300m450s420m450s420m450s420m450s1300m450s420m450s420"
  353. "m450s1300m450s1300m450s420m450s1300m450s420m450s420m450s1300m450s1300"
  354. "m450s420m450s1300m450s1300m450s420m450s420m450s1300m450s420m450s420"
  355. "m450s1300m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  356. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  357. "m450s420m450s420m450s420m450s420m450s420m450s1300m450s420m450s420"
  358. "m450s420m450s420m450s420m450s1300m450s420m450s420m450s420m450s420"
  359. "m450s420m450s1300m450s1300m450s420m450s420m450s420m450s420m450s420"
  360. "m450s420m450s420m450s420m450s420m450s1300m450s1300m450s420m450s420"
  361. "m450s1300m450s420m450s1300m450s420m450s420m450s420m450s1300m450s420"
  362. "m450s1300m450s1300m450s1300m450s420m450s420m450s1300m450s1300m450s420"
  363. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  364. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  365. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  366. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  367. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  368. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  369. "m450s1300m450s1300m450s1300m450s1300m450s1300m450s420m450s420m450s420"
  370. "m440s17100"
  371. "m3400s1750"
  372. "m450s1300m450s1300m450s420m450s420m450s420m450s1300m450s420m450s420"
  373. "m450s1300m450s1300m450s420m450s1300m450s420m450s420m450s1300m450s1300"
  374. "m450s420m450s1300m450s1300m450s420m450s420m450s1300m450s420m450s420"
  375. "m450s1300m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  376. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  377. "m450s420m450s420m450s420m450s420m450s420m450s1300m450s420m450s420"
  378. "m450s420m450s420m450s420m450s1300m450s420m450s420m450s420m450s420"
  379. "m450s420m450s1300m450s1300m450s420m450s420m450s420m450s420m450s420"
  380. "m450s420m450s420m450s420m450s420m450s1300m450s1300m450s420m450s420"
  381. "m450s1300m450s420m450s1300m450s420m450s420m450s420m450s1300m450s420"
  382. "m450s1300m450s1300m450s1300m450s420m450s420m450s1300m450s1300m450s420"
  383. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  384. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  385. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  386. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  387. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  388. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  389. "m450s1300m450s1300m450s1300m450s1300m450s1300m450s420m450s420m450s420"
  390. "m440s17100"
  391. "m3400s1750"
  392. "m450s1300m450s1300m450s420m450s420m450s420m450s1300m450s420m450s420"
  393. "m450s1300m450s1300m450s420m450s1300m450s420m450s420m450s1300m450s1300"
  394. "m450s420m450s1300m450s1300m450s420m450s420m450s1300m450s420m450s420"
  395. "m450s1300m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  396. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  397. "m450s420m450s420m450s420m450s420m450s420m450s1300m450s420m450s420"
  398. "m450s420m450s420m450s420m450s1300m450s420m450s420m450s420m450s420"
  399. "m450s420m450s1300m450s1300m450s420m450s420m450s420m450s420m450s420"
  400. "m450s420m450s420m450s420m450s420m450s1300m450s1300m450s420m450s420"
  401. "m450s1300m450s420m450s1300m450s420m450s420m450s420m450s1300m450s420"
  402. "m450s1300m450s1300m450s1300m450s420m450s420m450s1300m450s1300m450s420"
  403. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  404. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  405. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  406. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  407. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  408. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  409. "m450s1300m450s1300m450s1300m450s1300m450s1300m450s420m450s420m450s420"
  410. "m440s17100",
  411. irsend.outputStr());
  412. }
  413. // Test sending atypical sizes.
  414. TEST(TestSendMitsubishiAC, SendUnexpectedSizes) {
  415. IRsendTest irsend(4);
  416. irsend.begin();
  417. uint8_t mitsub_short_code[17] = {0x23, 0xCB, 0x26, 0x01, 0x00, 0x20,
  418. 0x08, 0x06, 0x30, 0x45, 0x67, 0x00,
  419. 0x00, 0x00, 0x00, 0x00, 0x00};
  420. uint8_t mitsub_long_code[19] = {0x23, 0xCB, 0x26, 0x01, 0x00, 0x20, 0x08,
  421. 0x06, 0x30, 0x45, 0x67, 0x00, 0x00, 0x00,
  422. 0x00, 0x00, 0x00, 0x1F, 0x00};
  423. irsend.reset();
  424. irsend.sendMitsubishiAC(mitsub_short_code, 17);
  425. ASSERT_EQ("", irsend.outputStr());
  426. irsend.reset();
  427. irsend.sendMitsubishiAC(mitsub_long_code, 19);
  428. ASSERT_EQ(
  429. "m3400s1750"
  430. "m450s1300m450s1300m450s420m450s420m450s420m450s1300m450s420m450s420"
  431. "m450s1300m450s1300m450s420m450s1300m450s420m450s420m450s1300m450s1300"
  432. "m450s420m450s1300m450s1300m450s420m450s420m450s1300m450s420m450s420"
  433. "m450s1300m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  434. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  435. "m450s420m450s420m450s420m450s420m450s420m450s1300m450s420m450s420"
  436. "m450s420m450s420m450s420m450s1300m450s420m450s420m450s420m450s420"
  437. "m450s420m450s1300m450s1300m450s420m450s420m450s420m450s420m450s420"
  438. "m450s420m450s420m450s420m450s420m450s1300m450s1300m450s420m450s420"
  439. "m450s1300m450s420m450s1300m450s420m450s420m450s420m450s1300m450s420"
  440. "m450s1300m450s1300m450s1300m450s420m450s420m450s1300m450s1300m450s420"
  441. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  442. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  443. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  444. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  445. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  446. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  447. "m450s1300m450s1300m450s1300m450s1300m450s1300m450s420m450s420m450s420"
  448. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  449. "m440s17100"
  450. "m3400s1750"
  451. "m450s1300m450s1300m450s420m450s420m450s420m450s1300m450s420m450s420"
  452. "m450s1300m450s1300m450s420m450s1300m450s420m450s420m450s1300m450s1300"
  453. "m450s420m450s1300m450s1300m450s420m450s420m450s1300m450s420m450s420"
  454. "m450s1300m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  455. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  456. "m450s420m450s420m450s420m450s420m450s420m450s1300m450s420m450s420"
  457. "m450s420m450s420m450s420m450s1300m450s420m450s420m450s420m450s420"
  458. "m450s420m450s1300m450s1300m450s420m450s420m450s420m450s420m450s420"
  459. "m450s420m450s420m450s420m450s420m450s1300m450s1300m450s420m450s420"
  460. "m450s1300m450s420m450s1300m450s420m450s420m450s420m450s1300m450s420"
  461. "m450s1300m450s1300m450s1300m450s420m450s420m450s1300m450s1300m450s420"
  462. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  463. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  464. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  465. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  466. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  467. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  468. "m450s1300m450s1300m450s1300m450s1300m450s1300m450s420m450s420m450s420"
  469. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  470. "m440s17100",
  471. irsend.outputStr());
  472. }
  473. // Tests for IRMitsubishiAC class.
  474. TEST(TestMitsubishiACClass, Power) {
  475. IRMitsubishiAC mitsub(0);
  476. mitsub.begin();
  477. mitsub.on();
  478. EXPECT_TRUE(mitsub.getPower());
  479. mitsub.off();
  480. EXPECT_FALSE(mitsub.getPower());
  481. mitsub.setPower(true);
  482. EXPECT_TRUE(mitsub.getPower());
  483. mitsub.setPower(false);
  484. EXPECT_FALSE(mitsub.getPower());
  485. }
  486. TEST(TestMitsubishiACClass, Temperature) {
  487. IRMitsubishiAC mitsub(0);
  488. mitsub.begin();
  489. mitsub.setTemp(0);
  490. EXPECT_EQ(kMitsubishiAcMinTemp, mitsub.getTemp());
  491. mitsub.setTemp(255);
  492. EXPECT_EQ(kMitsubishiAcMaxTemp, mitsub.getTemp());
  493. mitsub.setTemp(kMitsubishiAcMinTemp);
  494. EXPECT_EQ(kMitsubishiAcMinTemp, mitsub.getTemp());
  495. mitsub.setTemp(kMitsubishiAcMaxTemp);
  496. EXPECT_EQ(kMitsubishiAcMaxTemp, mitsub.getTemp());
  497. mitsub.setTemp(kMitsubishiAcMinTemp - 1);
  498. EXPECT_EQ(kMitsubishiAcMinTemp, mitsub.getTemp());
  499. mitsub.setTemp(kMitsubishiAcMaxTemp + 1);
  500. EXPECT_EQ(kMitsubishiAcMaxTemp, mitsub.getTemp());
  501. mitsub.setTemp(17);
  502. EXPECT_EQ(17, mitsub.getTemp());
  503. mitsub.setTemp(21);
  504. EXPECT_EQ(21, mitsub.getTemp());
  505. mitsub.setTemp(25);
  506. EXPECT_EQ(25, mitsub.getTemp());
  507. mitsub.setTemp(30);
  508. EXPECT_EQ(30, mitsub.getTemp());
  509. }
  510. TEST(TestMitsubishiACClass, OperatingMode) {
  511. IRMitsubishiAC mitsub(0);
  512. mitsub.begin();
  513. mitsub.setMode(kMitsubishiAcAuto);
  514. EXPECT_EQ(kMitsubishiAcAuto, mitsub.getMode());
  515. mitsub.setMode(kMitsubishiAcCool);
  516. EXPECT_EQ(kMitsubishiAcCool, mitsub.getMode());
  517. mitsub.setMode(kMitsubishiAcHeat);
  518. EXPECT_EQ(kMitsubishiAcHeat, mitsub.getMode());
  519. mitsub.setMode(kMitsubishiAcDry);
  520. EXPECT_EQ(kMitsubishiAcDry, mitsub.getMode());
  521. mitsub.setMode(kMitsubishiAcAuto + 1);
  522. EXPECT_EQ(kMitsubishiAcAuto, mitsub.getMode());
  523. mitsub.setMode(255);
  524. EXPECT_EQ(kMitsubishiAcAuto, mitsub.getMode());
  525. }
  526. TEST(TestMitsubishiACClass, VaneMode) {
  527. IRMitsubishiAC mitsub(0);
  528. mitsub.begin();
  529. mitsub.setVane(kMitsubishiAcVaneAuto);
  530. EXPECT_EQ(kMitsubishiAcVaneAuto, mitsub.getVane());
  531. mitsub.setVane(kMitsubishiAcVaneAuto + 1);
  532. EXPECT_EQ(kMitsubishiAcVaneAuto + 1, mitsub.getVane());
  533. mitsub.setVane(kMitsubishiAcVaneAutoMove);
  534. EXPECT_EQ(kMitsubishiAcVaneAutoMove, mitsub.getVane());
  535. mitsub.setVane(kMitsubishiAcVaneAutoMove + 1);
  536. EXPECT_EQ(kMitsubishiAcVaneAutoMove, mitsub.getVane());
  537. mitsub.setVane(kMitsubishiAcVaneAutoMove - 1);
  538. EXPECT_EQ(kMitsubishiAcVaneAutoMove - 1, mitsub.getVane());
  539. }
  540. TEST(TestMitsubishiACClass, FanSpeed) {
  541. IRMitsubishiAC mitsub(0);
  542. mitsub.begin();
  543. mitsub.setFan(kMitsubishiAcFanAuto);
  544. EXPECT_EQ(kMitsubishiAcFanAuto, mitsub.getFan());
  545. mitsub.setFan(255);
  546. EXPECT_EQ(kMitsubishiAcFanRealMax, mitsub.getFan());
  547. mitsub.setFan(kMitsubishiAcFanMax);
  548. EXPECT_EQ(kMitsubishiAcFanRealMax, mitsub.getFan());
  549. mitsub.setFan(kMitsubishiAcFanMax - 1);
  550. EXPECT_EQ(kMitsubishiAcFanMax - 1, mitsub.getFan());
  551. mitsub.setFan(1);
  552. EXPECT_EQ(1, mitsub.getFan());
  553. mitsub.setFan(2);
  554. EXPECT_EQ(2, mitsub.getFan());
  555. mitsub.setFan(3);
  556. EXPECT_EQ(3, mitsub.getFan());
  557. mitsub.setFan(4);
  558. EXPECT_EQ(4, mitsub.getFan());
  559. mitsub.setFan(kMitsubishiAcFanSilent);
  560. EXPECT_EQ(kMitsubishiAcFanSilent, mitsub.getFan());
  561. mitsub.setFan(kMitsubishiAcFanSilent + 1);
  562. EXPECT_EQ(kMitsubishiAcFanRealMax, mitsub.getFan());
  563. }
  564. TEST(TestMitsubishiACClass, MessageConstuction) {
  565. IRMitsubishiAC mitsub(0);
  566. IRsendTest irsend(4);
  567. mitsub.begin();
  568. irsend.begin();
  569. mitsub.setFan(1);
  570. mitsub.setMode(kMitsubishiAcCool);
  571. mitsub.setTemp(27);
  572. mitsub.setVane(3);
  573. mitsub.on();
  574. // Check everything for kicks.
  575. EXPECT_EQ(1, mitsub.getFan());
  576. EXPECT_EQ(kMitsubishiAcCool, mitsub.getMode());
  577. EXPECT_EQ(27, mitsub.getTemp());
  578. EXPECT_EQ(3, mitsub.getVane());
  579. EXPECT_TRUE(mitsub.getPower());
  580. irsend.reset();
  581. irsend.sendMitsubishiAC(mitsub.getRaw());
  582. EXPECT_EQ(
  583. "m3400s1750"
  584. "m450s1300m450s1300m450s420m450s420m450s420m450s1300m450s420m450s420"
  585. "m450s1300m450s1300m450s420m450s1300m450s420m450s420m450s1300m450s1300"
  586. "m450s420m450s1300m450s1300m450s420m450s420m450s1300m450s420m450s420"
  587. "m450s1300m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  588. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  589. "m450s420m450s420m450s420m450s420m450s420m450s1300m450s420m450s420"
  590. "m450s420m450s420m450s420m450s1300m450s1300m450s420m450s420m450s420"
  591. "m450s1300m450s1300m450s420m450s1300m450s420m450s420m450s420m450s420"
  592. "m450s420m450s1300m450s1300m450s420m450s1300m450s1300m450s420m450s420"
  593. "m450s1300m450s420m450s420m450s1300m450s1300m450s420m450s1300m450s420"
  594. "m450s1300m450s1300m450s1300m450s420m450s420m450s1300m450s1300m450s420"
  595. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  596. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  597. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  598. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  599. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  600. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  601. "m450s420m450s1300m450s1300m450s1300m450s420m450s420m450s1300m450s420"
  602. "m440s17100"
  603. "m3400s1750"
  604. "m450s1300m450s1300m450s420m450s420m450s420m450s1300m450s420m450s420"
  605. "m450s1300m450s1300m450s420m450s1300m450s420m450s420m450s1300m450s1300"
  606. "m450s420m450s1300m450s1300m450s420m450s420m450s1300m450s420m450s420"
  607. "m450s1300m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  608. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  609. "m450s420m450s420m450s420m450s420m450s420m450s1300m450s420m450s420"
  610. "m450s420m450s420m450s420m450s1300m450s1300m450s420m450s420m450s420"
  611. "m450s1300m450s1300m450s420m450s1300m450s420m450s420m450s420m450s420"
  612. "m450s420m450s1300m450s1300m450s420m450s1300m450s1300m450s420m450s420"
  613. "m450s1300m450s420m450s420m450s1300m450s1300m450s420m450s1300m450s420"
  614. "m450s1300m450s1300m450s1300m450s420m450s420m450s1300m450s1300m450s420"
  615. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  616. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  617. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  618. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  619. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  620. "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420"
  621. "m450s420m450s1300m450s1300m450s1300m450s420m450s420m450s1300m450s420"
  622. "m440s17100",
  623. irsend.outputStr());
  624. }
  625. // Tests for decodeMitsubishiAC() with real captured example.
  626. TEST(TestDecodeMitsubishiAC, DecodeRealExample) {
  627. IRsendTest irsend(4);
  628. IRrecv irrecv(4);
  629. irsend.begin();
  630. irsend.reset();
  631. // Mitsubishi AC "Power On, 16C, low fan, vane auto move".
  632. uint16_t rawData[583] = {
  633. 3476, 1708, 416, 1264, 420, 1260, 414, 400, 448, 390, 446, 392,
  634. 444, 1236, 440, 400, 446, 392, 446, 1234, 440, 1266, 418, 396,
  635. 442, 1264, 420, 394, 444, 394, 442, 1264, 422, 1260, 414, 398,
  636. 440, 1266, 418, 1264, 420, 392, 446, 392, 444, 1264, 422, 392,
  637. 446, 392, 446, 1260, 414, 400, 448, 390, 446, 392, 444, 394,
  638. 442, 396, 442, 398, 440, 424, 412, 400, 448, 390, 446, 392,
  639. 446, 392, 444, 394, 442, 396, 442, 396, 440, 398, 438, 400,
  640. 448, 390, 446, 392, 446, 392, 444, 396, 442, 396, 440, 398,
  641. 440, 400, 438, 400, 448, 390, 446, 392, 444, 1236, 440, 1266,
  642. 418, 394, 442, 396, 440, 398, 438, 402, 446, 1232, 444, 396,
  643. 440, 1268, 418, 394, 442, 396, 440, 398, 440, 400, 448, 390,
  644. 448, 1232, 442, 1266, 420, 394, 444, 1264, 422, 1260, 416, 396,
  645. 440, 398, 450, 1230, 444, 396, 442, 398, 440, 1266, 418, 1264,
  646. 422, 1258, 416, 1266, 418, 394, 442, 396, 440, 398, 440, 398,
  647. 438, 400, 446, 392, 446, 392, 446, 392, 444, 396, 442, 396,
  648. 440, 398, 438, 398, 438, 400, 448, 392, 446, 392, 444, 394,
  649. 444, 396, 442, 396, 440, 398, 438, 400, 448, 390, 448, 392,
  650. 444, 394, 444, 394, 442, 396, 442, 396, 440, 398, 438, 400,
  651. 448, 390, 446, 392, 446, 392, 444, 394, 442, 396, 442, 396,
  652. 440, 398, 438, 400, 448, 390, 446, 392, 444, 394, 444, 394,
  653. 442, 396, 440, 398, 440, 398, 438, 400, 448, 390, 446, 392,
  654. 444, 394, 444, 394, 442, 396, 440, 398, 438, 400, 438, 400,
  655. 448, 392, 446, 392, 444, 394, 442, 396, 442, 396, 440, 398,
  656. 438, 1240, 444, 1264, 422, 390, 446, 392, 446, 1260, 414, 1268,
  657. 418, 1264, 422, 12984, 3478, 1708, 418, 1264, 422, 1234, 442, 398,
  658. 448, 390, 446, 392, 446, 1234, 440, 400, 448, 390, 446, 1234,
  659. 442, 1266, 420, 392, 444, 1264, 420, 392, 446, 394, 444, 1236,
  660. 448, 1260, 416, 398, 440, 1266, 418, 1262, 422, 390, 446, 392,
  661. 444, 1234, 440, 400, 448, 392, 446, 1234, 440, 398, 450, 390,
  662. 446, 392, 444, 394, 444, 394, 442, 396, 442, 398, 440, 400,
  663. 438, 400, 448, 390, 446, 392, 444, 394, 442, 396, 442, 396,
  664. 440, 398, 438, 400, 448, 390, 446, 392, 446, 392, 444, 394,
  665. 442, 396, 442, 396, 440, 398, 438, 400, 448, 416, 420, 392,
  666. 444, 1234, 440, 1240, 446, 394, 442, 396, 440, 398, 438, 400,
  667. 448, 1232, 444, 396, 440, 1240, 446, 394, 442, 396, 440, 398,
  668. 440, 400, 448, 390, 446, 1232, 444, 1238, 446, 394, 444, 1236,
  669. 448, 1232, 442, 396, 440, 398, 448, 1232, 444, 396, 440, 398,
  670. 438, 1242, 444, 1238, 448, 1234, 442, 1240, 444, 394, 442, 396,
  671. 440, 398, 438, 400, 448, 390, 446, 394, 444, 420, 416, 394,
  672. 444, 396, 440, 398, 440, 398, 438, 400, 448, 418, 420, 418,
  673. 418, 394, 442, 396, 442, 396, 440, 424, 412, 400, 448, 390,
  674. 446, 392, 446, 420, 418, 420, 416, 396, 440, 398, 440, 424,
  675. 412, 426, 420, 418, 420, 392, 444, 394, 444, 422, 416, 422,
  676. 414, 398, 440, 426, 422, 388, 448, 416, 420, 418, 418, 422,
  677. 416, 422, 414, 424, 414, 398, 438, 426, 422, 418, 420, 390,
  678. 446, 418, 418, 420, 416, 396, 440, 424, 412, 426, 412, 400,
  679. 446, 418, 420, 420, 418, 420, 416, 422, 414, 422, 414, 424,
  680. 412, 426, 422, 390, 446, 1232, 442, 1240, 446, 394, 444, 394,
  681. 442, 1238, 446, 1234, 440, 1240, 444}; // UNKNOWN F6FDB82B
  682. irsend.sendRaw(rawData, 583, 33);
  683. irsend.makeDecodeResult();
  684. ASSERT_TRUE(irrecv.decode(&irsend.capture));
  685. EXPECT_EQ(MITSUBISHI_AC, irsend.capture.decode_type);
  686. EXPECT_EQ(kMitsubishiACBits, irsend.capture.bits);
  687. uint8_t expected[kMitsubishiACStateLength] = {
  688. 0x23, 0xCB, 0x26, 0x01, 0x00, 0x00, 0x18, 0x0A, 0x36,
  689. 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6};
  690. EXPECT_STATE_EQ(expected, irsend.capture.state, kMitsubishiACBits);
  691. }
  692. // Tests for decodeMitsubishiAC() when the first payload has an error.
  693. TEST(TestDecodeMitsubishiAC, DecodeRealExampleRepeatNeeded) {
  694. IRsendTest irsend(4);
  695. IRrecv irrecv(4);
  696. irsend.begin();
  697. irsend.reset();
  698. // Mitsubishi AC "Power On, 16C, low fan, vane auto move".
  699. uint16_t rawData[583] = {
  700. 3476, 1708, 416, 1264, 420, 1260, 414, 400, 448, 390, 446, 392, 444, 1236,
  701. 440, 400, 446, 392, 446, 1234, 440, 1266, 418, 396, 442, 1264, 420, 394,
  702. 444, 394, 442, 1264, 422, 1260, 414, 398, 440, 1266, 418, 1264, 420, 392,
  703. 446, 392, 444, 1264, 422, 392, 446, 392, 446, 1260, 414, 400, 448, 390,
  704. 446, 392, 444, 394, 442, 396, 442, 398, 440, 424, 412, 400, 448, 390, 446,
  705. 392, 446, 392, 444, 394, 442, 396, 442, 396, 440, 398, 438, 400, 448, 390,
  706. 446, 392, 446, 392, 444, 396, 442, 396, 440, 398, 440, 400, 438, 400, 448,
  707. 390, 446, 392, 444, 1236, 440, 1266, 418, 394, 442, 396, 440, 398, 438,
  708. 402, 446, 1232, 444, 396, 440, 1268, 418, 394, 442, 396, 440, 398,
  709. // space 699 is not recognizable:
  710. 440, 400, 448, 390, 448, 1232, 442, 1266, 420, 394, 444, 1264, 699, 1260,
  711. 416, 396, 440, 398, 450, 1230, 444, 396, 442, 398, 440, 1266, 418, 1264,
  712. 422, 1258, 416, 1266, 418, 394, 442, 396, 440, 398, 440, 398, 438, 400,
  713. 446, 392, 446, 392, 446, 392, 444, 396, 442, 396, 440, 398, 438, 398, 438,
  714. 400, 448, 392, 446, 392, 444, 394, 444, 396, 442, 396, 440, 398, 438, 400,
  715. 448, 390, 448, 392, 444, 394, 444, 394, 442, 396, 442, 396, 440, 398, 438,
  716. 400, 448, 390, 446, 392, 446, 392, 444, 394, 442, 396, 442, 396, 440, 398,
  717. 438, 400, 448, 390, 446, 392, 444, 394, 444, 394, 442, 396, 440, 398, 440,
  718. 398, 438, 400, 448, 390, 446, 392, 444, 394, 444, 394, 442, 396, 440, 398,
  719. 438, 400, 438, 400, 448, 392, 446, 392, 444, 394, 442, 396, 442, 396, 440,
  720. 398, 438, 1240, 444, 1264, 422, 390, 446, 392, 446, 1260, 414, 1268, 418,
  721. 1264, 422, 12984, 3478, 1708, 418, 1264, 422, 1234, 442, 398, 448, 390,
  722. 446, 392, 446, 1234, 440, 400, 448, 390, 446, 1234, 442, 1266, 420, 392,
  723. 444, 1264, 420, 392, 446, 394, 444, 1236, 448, 1260, 416, 398, 440, 1266,
  724. 418, 1262, 422, 390, 446, 392, 444, 1234, 440, 400, 448, 392, 446, 1234,
  725. 440, 398, 450, 390, 446, 392, 444, 394, 444, 394, 442, 396, 442, 398, 440,
  726. 400, 438, 400, 448, 390, 446, 392, 444, 394, 442, 396, 442, 396, 440, 398,
  727. 438, 400, 448, 390, 446, 392, 446, 392, 444, 394, 442, 396, 442, 396, 440,
  728. 398, 438, 400, 448, 416, 420, 392, 444, 1234, 440, 1240, 446, 394, 442,
  729. 396, 440, 398, 438, 400, 448, 1232, 444, 396, 440, 1240, 446, 394, 442,
  730. 396, 440, 398, 440, 400, 448, 390, 446, 1232, 444, 1238, 446, 394, 444,
  731. 1236, 448, 1232, 442, 396, 440, 398, 448, 1232, 444, 396, 440, 398, 438,
  732. 1242, 444, 1238, 448, 1234, 442, 1240, 444, 394, 442, 396, 440, 398, 438,
  733. 400, 448, 390, 446, 394, 444, 420, 416, 394, 444, 396, 440, 398, 440, 398,
  734. 438, 400, 448, 418, 420, 418, 418, 394, 442, 396, 442, 396, 440, 424, 412,
  735. 400, 448, 390, 446, 392, 446, 420, 418, 420, 416, 396, 440, 398, 440, 424,
  736. 412, 426, 420, 418, 420, 392, 444, 394, 444, 422, 416, 422, 414, 398, 440,
  737. 426, 422, 388, 448, 416, 420, 418, 418, 422, 416, 422, 414, 424, 414, 398,
  738. 438, 426, 422, 418, 420, 390, 446, 418, 418, 420, 416, 396, 440, 424, 412,
  739. 426, 412, 400, 446, 418, 420, 420, 418, 420, 416, 422, 414, 422, 414, 424,
  740. 412, 426, 422, 390, 446, 1232, 442, 1240, 446, 394, 444, 394, 442, 1238,
  741. 446, 1234, 440, 1240, 444}; // UNKNOWN F6FDB82B
  742. irsend.sendRaw(rawData, 583, 33);
  743. irsend.makeDecodeResult();
  744. ASSERT_TRUE(irrecv.decode(&irsend.capture));
  745. EXPECT_EQ(MITSUBISHI_AC, irsend.capture.decode_type);
  746. EXPECT_EQ(kMitsubishiACBits, irsend.capture.bits);
  747. uint8_t expected[kMitsubishiACStateLength] = {
  748. 0x23, 0xCB, 0x26, 0x01, 0x00, 0x00, 0x18, 0x0A, 0x36,
  749. 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6};
  750. EXPECT_STATE_EQ(expected, irsend.capture.state, kMitsubishiACBits);
  751. }
  752. // Tests for decodeMitsubishiAC() when the repeat mark is wrong.
  753. TEST(TestDecodeMitsubishiAC, DecodeRealExampleRepeatMarkError) {
  754. IRsendTest irsend(4);
  755. IRrecv irrecv(4);
  756. irsend.begin();
  757. irsend.reset();
  758. // Mitsubishi AC "Power On, 16C, low fan, vane auto move".
  759. uint16_t rawData[583] = {
  760. 3476, 1708, 416, 1264, 420, 1260, 414, 400, 448, 390, 446, 392, 444, 1236,
  761. 440, 400, 446, 392, 446, 1234, 440, 1266, 418, 396, 442, 1264, 420, 394,
  762. 444, 394, 442, 1264, 422, 1260, 414, 398, 440, 1266, 418, 1264, 420, 392,
  763. 446, 392, 444, 1264, 422, 392, 446, 392, 446, 1260, 414, 400, 448, 390,
  764. 446, 392, 444, 394, 442, 396, 442, 398, 440, 424, 412, 400, 448, 390, 446,
  765. 392, 446, 392, 444, 394, 442, 396, 442, 396, 440, 398, 438, 400, 448, 390,
  766. 446, 392, 446, 392, 444, 396, 442, 396, 440, 398, 440, 400, 438, 400, 448,
  767. 390, 446, 392, 444, 1236, 440, 1266, 418, 394, 442, 396, 440, 398, 438,
  768. 402, 446, 1232, 444, 396, 440, 1268, 418, 394, 442, 396, 440, 398, 440,
  769. 400, 448, 390, 448, 1232, 442, 1266, 420, 394, 444, 1264, 422, 1260, 416,
  770. 396, 440, 398, 450, 1230, 444, 396, 442, 398, 440, 1266, 418, 1264, 422,
  771. 1258, 416, 1266, 418, 394, 442, 396, 440, 398, 440, 398, 438, 400, 446,
  772. 392, 446, 392, 446, 392, 444, 396, 442, 396, 440, 398, 438, 398, 438, 400,
  773. 448, 392, 446, 392, 444, 394, 444, 396, 442, 396, 440, 398, 438, 400, 448,
  774. 390, 448, 392, 444, 394, 444, 394, 442, 396, 442, 396, 440, 398, 438, 400,
  775. 448, 390, 446, 392, 446, 392, 444, 394, 442, 396, 442, 396, 440, 398, 438,
  776. 400, 448, 390, 446, 392, 444, 394, 444, 394, 442, 396, 440, 398, 440, 398,
  777. 438, 400, 448, 390, 446, 392, 444, 394, 444, 394, 442, 396, 440, 398, 438,
  778. 400, 438, 400, 448, 392, 446, 392, 444, 394, 442, 396, 442, 396, 440, 398,
  779. 438, 1240, 444, 1264, 422, 390, 446, 392, 446,
  780. // Repeat mark (1111) wrong:
  781. 1260, 414, 1268, 418, 1264, 422, 1111, 347, 1708, 418, 1264, 422, 1234,
  782. 442, 398, 448, 390, 446, 392, 446, 1234, 440, 400, 448, 390, 446, 1234,
  783. 442, 1266, 420, 392, 444, 1264, 420, 392, 446, 394, 444, 1236, 448, 1260,
  784. 416, 398, 440, 1266, 418, 1262, 422, 390, 446, 392, 444, 1234, 440, 400,
  785. 448, 392, 446, 1234, 440, 398, 450, 390, 446, 392, 444, 394, 444, 394,
  786. 442, 396, 442, 398, 440, 400, 438, 400, 448, 390, 446, 392, 444, 394, 442,
  787. 396, 442, 396, 440, 398, 438, 400, 448, 390, 446, 392, 446, 392, 444, 394,
  788. 442, 396, 442, 396, 440, 398, 438, 400, 448, 416, 420, 392, 444, 1234,
  789. 440, 1240, 446, 394, 442, 396, 440, 398, 438, 400, 448, 1232, 444, 396,
  790. 440, 1240, 446, 394, 442, 396, 440, 398, 440, 400, 448, 390, 446, 1232,
  791. 444, 1238, 446, 394, 444, 1236, 448, 1232, 442, 396, 440, 398, 448, 1232,
  792. 444, 396, 440, 398, 438, 1242, 444, 1238, 448, 1234, 442, 1240, 444, 394,
  793. 442, 396, 440, 398, 438, 400, 448, 390, 446, 394, 444, 420, 416, 394, 444,
  794. 396, 440, 398, 440, 398, 438, 400, 448, 418, 420, 418, 418, 394, 442, 396,
  795. 442, 396, 440, 424, 412, 400, 448, 390, 446, 392, 446, 420, 418, 420, 416,
  796. 396, 440, 398, 440, 424, 412, 426, 420, 418, 420, 392, 444, 394, 444, 422,
  797. 416, 422, 414, 398, 440, 426, 422, 388, 448, 416, 420, 418, 418, 422, 416,
  798. 422, 414, 424, 414, 398, 438, 426, 422, 418, 420, 390, 446, 418, 418, 420,
  799. 416, 396, 440, 424, 412, 426, 412, 400, 446, 418, 420, 420, 418, 420, 416,
  800. 422, 414, 422, 414, 424, 412, 426, 422, 390, 446, 1232, 442, 1240, 446,
  801. 394, 444, 394, 442, 1238, 446, 1234, 440, 1240, 444}; // UNKNOWN F6FDB82B
  802. irsend.sendRaw(rawData, 583, 33);
  803. irsend.makeDecodeResult();
  804. ASSERT_TRUE(irrecv.decode(&irsend.capture));
  805. EXPECT_EQ(MITSUBISHI_AC, irsend.capture.decode_type);
  806. EXPECT_EQ(kMitsubishiACBits, irsend.capture.bits);
  807. uint8_t expected[kMitsubishiACStateLength] = {
  808. 0x23, 0xCB, 0x26, 0x01, 0x00, 0x00, 0x18, 0x0A, 0x36,
  809. 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6};
  810. EXPECT_STATE_EQ(expected, irsend.capture.state, kMitsubishiACBits);
  811. }
  812. // Tests for decodeMitsubishiAC() when first payload has an error and the
  813. // repeat mark is wrong.
  814. TEST(TestDecodeMitsubishiAC, DecodeRealExampleRepeatNeededButError) {
  815. IRsendTest irsend(4);
  816. IRrecv irrecv(4);
  817. irsend.begin();
  818. irsend.reset();
  819. // Mitsubishi AC "Power On, 16C, low fan, vane auto move".
  820. uint16_t rawData[583] = {
  821. 3476, 1708, 416, 1264, 420, 1260, 414, 400, 448, 390, 446, 392, 444, 1236,
  822. 440, 400, 446, 392, 446, 1234, 440, 1266, 418, 396, 442, 1264, 420, 394,
  823. 444, 394, 442, 1264, 422, 1260, 414, 398, 440, 1266, 418, 1264, 420, 392,
  824. 446, 392, 444, 1264, 422, 392, 446, 392, 446, 1260, 414, 400, 448, 390,
  825. 446, 392, 444, 394, 442, 396, 442, 398, 440, 424, 412, 400, 448, 390, 446,
  826. 392, 446, 392, 444, 394, 442, 396, 442, 396, 440, 398, 438, 400, 448, 390,
  827. 446, 392, 446, 392, 444, 396, 442, 396, 440, 398, 440, 400, 438, 400, 448,
  828. 390, 446, 392, 444, 1236, 440, 1266, 418, 394, 442, 396, 440, 398, 438,
  829. 402, 446, 1232, 444, 396, 440, 1268, 418, 394, 442, 396, 440, 398,
  830. // space 699 is not recognizable:
  831. 440, 400, 448, 390, 448, 1232, 442, 1266, 420, 394, 444, 1264, 699, 1260,
  832. 416, 396, 440, 398, 450, 1230, 444, 396, 442, 398, 440, 1266, 418, 1264,
  833. 422, 1258, 416, 1266, 418, 394, 442, 396, 440, 398, 440, 398, 438, 400,
  834. 446, 392, 446, 392, 446, 392, 444, 396, 442, 396, 440, 398, 438, 398, 438,
  835. 400, 448, 392, 446, 392, 444, 394, 444, 396, 442, 396, 440, 398, 438, 400,
  836. 448, 390, 448, 392, 444, 394, 444, 394, 442, 396, 442, 396, 440, 398, 438,
  837. 400, 448, 390, 446, 392, 446, 392, 444, 394, 442, 396, 442, 396, 440, 398,
  838. 438, 400, 448, 390, 446, 392, 444, 394, 444, 394, 442, 396, 440, 398, 440,
  839. 398, 438, 400, 448, 390, 446, 392, 444, 394, 444, 394, 442, 396, 440, 398,
  840. 438, 400, 438, 400, 448, 392, 446, 392, 444, 394, 442, 396, 442, 396, 440,
  841. 398, 438, 1240, 444, 1264, 422, 390, 446, 392, 446,
  842. // 1111 is not a valid repeat mark:
  843. 1260, 414, 1268, 418, 1264, 422, 1111, 3478, 1708, 418, 1264, 422, 1234,
  844. 442, 398, 448, 390, 446, 392, 446, 1234, 440, 400, 448, 390, 446, 1234,
  845. 442, 1266, 420, 392, 444, 1264, 420, 392, 446, 394, 444, 1236, 448, 1260,
  846. 416, 398, 440, 1266, 418, 1262, 422, 390, 446, 392, 444, 1234, 440, 400,
  847. 448, 392, 446, 1234, 440, 398, 450, 390, 446, 392, 444, 394, 444, 394,
  848. 442, 396, 442, 398, 440, 400, 438, 400, 448, 390, 446, 392, 444, 394, 442,
  849. 396, 442, 396, 440, 398, 438, 400, 448, 390, 446, 392, 446, 392, 444, 394,
  850. 442, 396, 442, 396, 440, 398, 438, 400, 448, 416, 420, 392, 444, 1234,
  851. 440, 1240, 446, 394, 442, 396, 440, 398, 438, 400, 448, 1232, 444, 396,
  852. 440, 1240, 446, 394, 442, 396, 440, 398, 440, 400, 448, 390, 446, 1232,
  853. 444, 1238, 446, 394, 444, 1236, 448, 1232, 442, 396, 440, 398, 448, 1232,
  854. 444, 396, 440, 398, 438, 1242, 444, 1238, 448, 1234, 442, 1240, 444, 394,
  855. 442, 396, 440, 398, 438, 400, 448, 390, 446, 394, 444, 420, 416, 394, 444,
  856. 396, 440, 398, 440, 398, 438, 400, 448, 418, 420, 418, 418, 394, 442, 396,
  857. 442, 396, 440, 424, 412, 400, 448, 390, 446, 392, 446, 420, 418, 420, 416,
  858. 396, 440, 398, 440, 424, 412, 426, 420, 418, 420, 392, 444, 394, 444, 422,
  859. 416, 422, 414, 398, 440, 426, 422, 388, 448, 416, 420, 418, 418, 422, 416,
  860. 422, 414, 424, 414, 398, 438, 426, 422, 418, 420, 390, 446, 418, 418, 420,
  861. 416, 396, 440, 424, 412, 426, 412, 400, 446, 418, 420, 420, 418, 420, 416,
  862. 422, 414, 422, 414, 424, 412, 426, 422, 390, 446, 1232, 442, 1240, 446,
  863. 394, 444, 394, 442, 1238, 446, 1234, 440, 1240, 444}; // UNKNOWN F6FDB82B
  864. irsend.sendRaw(rawData, 583, 33);
  865. irsend.makeDecodeResult();
  866. ASSERT_TRUE(irrecv.decode(&irsend.capture));
  867. EXPECT_EQ(UNKNOWN, irsend.capture.decode_type);
  868. }
  869. TEST(TestMitsubishiACClass, HumanReadable) {
  870. IRMitsubishiAC irMitsu(0);
  871. EXPECT_EQ(
  872. "Power: On (HEAT), Temp: 22C, FAN: SILENT, VANE: AUTO, "
  873. "Time: 17:10, On timer: 00:00, Off timer: 00:00, Timer: -",
  874. irMitsu.toString());
  875. }
  876. // Test sending typical data only.
  877. TEST(TestSendMitsubishi2, SendDataOnly) {
  878. IRsendTest irsend(4);
  879. irsend.begin();
  880. irsend.reset();
  881. irsend.sendMitsubishi2(0xF82);
  882. EXPECT_EQ(
  883. "m8400s4200"
  884. "m560s520m560s520m560s520m560s520m560s1560m560s1560m560s1560m560s1560"
  885. "m560s4200"
  886. "m560s1560m560s520m560s520m560s520m560s520m560s520m560s1560m560s520"
  887. "m560s28500"
  888. "m8400s4200"
  889. "m560s520m560s520m560s520m560s520m560s1560m560s1560m560s1560m560s1560"
  890. "m560s4200"
  891. "m560s1560m560s520m560s520m560s520m560s520m560s520m560s1560m560s520"
  892. "m560s28500",
  893. irsend.outputStr());
  894. irsend.reset();
  895. irsend.sendMitsubishi2(0x0);
  896. EXPECT_EQ(
  897. "m8400s4200"
  898. "m560s520m560s520m560s520m560s520m560s520m560s520m560s520m560s520"
  899. "m560s4200"
  900. "m560s520m560s520m560s520m560s520m560s520m560s520m560s520m560s520"
  901. "m560s28500"
  902. "m8400s4200"
  903. "m560s520m560s520m560s520m560s520m560s520m560s520m560s520m560s520"
  904. "m560s4200"
  905. "m560s520m560s520m560s520m560s520m560s520m560s520m560s520m560s520"
  906. "m560s28500",
  907. irsend.outputStr());
  908. }
  909. // Test sending odd repeats.
  910. TEST(TestSendMitsubishi2, Repeats) {
  911. IRsendTest irsend(4);
  912. irsend.begin();
  913. irsend.reset();
  914. irsend.sendMitsubishi2(0xF82, kMitsubishiBits, 0);
  915. EXPECT_EQ(
  916. "m8400s4200"
  917. "m560s520m560s520m560s520m560s520m560s1560m560s1560m560s1560m560s1560"
  918. "m560s4200"
  919. "m560s1560m560s520m560s520m560s520m560s520m560s520m560s1560m560s520"
  920. "m560s28500",
  921. irsend.outputStr());
  922. irsend.reset();
  923. irsend.sendMitsubishi2(0xF82, kMitsubishiBits, 2);
  924. EXPECT_EQ(
  925. "m8400s4200"
  926. "m560s520m560s520m560s520m560s520m560s1560m560s1560m560s1560m560s1560"
  927. "m560s4200"
  928. "m560s1560m560s520m560s520m560s520m560s520m560s520m560s1560m560s520"
  929. "m560s28500"
  930. "m8400s4200"
  931. "m560s520m560s520m560s520m560s520m560s1560m560s1560m560s1560m560s1560"
  932. "m560s4200"
  933. "m560s1560m560s520m560s520m560s520m560s520m560s520m560s1560m560s520"
  934. "m560s28500"
  935. "m8400s4200"
  936. "m560s520m560s520m560s520m560s520m560s1560m560s1560m560s1560m560s1560"
  937. "m560s4200"
  938. "m560s1560m560s520m560s520m560s520m560s520m560s520m560s1560m560s520"
  939. "m560s28500",
  940. irsend.outputStr());
  941. }
  942. // Tests for decodeMitsubishi2().
  943. // Decode synthetic examples.
  944. TEST(TestDecodeMitsubishi2, DecodeSyntheticExamples) {
  945. IRsendTest irsend(4);
  946. IRrecv irrecv(4);
  947. irsend.begin();
  948. irsend.reset();
  949. // Mitsubishi Projector "Power On" (16-bit).
  950. irsend.sendMitsubishi2(0xF82);
  951. irsend.makeDecodeResult();
  952. ASSERT_TRUE(irrecv.decode(&irsend.capture));
  953. EXPECT_EQ(MITSUBISHI2, irsend.capture.decode_type);
  954. EXPECT_EQ(kMitsubishiBits, irsend.capture.bits);
  955. EXPECT_EQ(0xF82, irsend.capture.value);
  956. EXPECT_EQ(0xF, irsend.capture.address);
  957. EXPECT_EQ(0x82, irsend.capture.command);
  958. irsend.reset();
  959. irsend.sendMitsubishi2(0x0);
  960. irsend.makeDecodeResult();
  961. ASSERT_TRUE(irrecv.decode(&irsend.capture));
  962. EXPECT_EQ(MITSUBISHI2, irsend.capture.decode_type);
  963. EXPECT_EQ(kMitsubishiBits, irsend.capture.bits);
  964. EXPECT_EQ(0x0, irsend.capture.value);
  965. EXPECT_EQ(0x0, irsend.capture.address);
  966. EXPECT_EQ(0x0, irsend.capture.command);
  967. irsend.reset();
  968. irsend.sendMitsubishi2(0x1234);
  969. irsend.makeDecodeResult();
  970. ASSERT_TRUE(irrecv.decode(&irsend.capture));
  971. EXPECT_EQ(MITSUBISHI2, irsend.capture.decode_type);
  972. EXPECT_EQ(kMitsubishiBits, irsend.capture.bits);
  973. EXPECT_EQ(0x1234, irsend.capture.value);
  974. EXPECT_EQ(0x12, irsend.capture.address);
  975. EXPECT_EQ(0x34, irsend.capture.command);
  976. }
  977. // Decode a 'real' example from Issue #441
  978. TEST(TestDecodeMitsubishi2, DecodeRealExample) {
  979. IRsendTest irsend(4);
  980. IRrecv irrecv(4);
  981. irsend.begin();
  982. irsend.reset();
  983. // Mitsubishi Projector "Power On" (16-bit).
  984. uint16_t rawData[75] = {
  985. 8402, 4172, 554, 490, 562, 484, 560, 514, 532, 512, 534,
  986. 1566, 526, 1572, 526, 1542, 560, 1568, 532, 4192, 534, 1564,
  987. 532, 484, 560, 512, 532, 512, 532, 514, 530, 514, 526,
  988. 1570, 524, 520, 526, 28506, 8454, 4170, 560, 514, 528, 516,
  989. 526, 520, 524, 490, 556, 1572, 534, 1534, 560, 1568, 530,
  990. 1538, 558, 4166, 560, 1538, 558, 490, 560, 512, 530, 514,
  991. 532, 484, 558, 514, 532, 1566, 530, 486, 554}; // UNKNOWN 96A1512F
  992. irsend.sendRaw(rawData, 75, 33);
  993. irsend.makeDecodeResult();
  994. ASSERT_TRUE(irrecv.decode(&irsend.capture));
  995. EXPECT_EQ(MITSUBISHI2, irsend.capture.decode_type);
  996. EXPECT_EQ(kMitsubishiBits, irsend.capture.bits);
  997. EXPECT_EQ(0xF82, irsend.capture.value);
  998. EXPECT_EQ(0xF, irsend.capture.address);
  999. EXPECT_EQ(0x82, irsend.capture.command);
  1000. }