IRrecv_test.cpp 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561
  1. // Copyright 2017 David Conran
  2. #include "IRrecv_test.h"
  3. #include "IRrecv.h"
  4. #include "IRremoteESP8266.h"
  5. #include "IRsend.h"
  6. #include "IRsend_test.h"
  7. #include "gtest/gtest.h"
  8. // Tests for the IRrecv object.
  9. TEST(TestIRrecv, DefaultBufferSize) {
  10. IRrecv irrecv_default(1);
  11. EXPECT_EQ(kRawBuf, irrecv_default.getBufSize());
  12. }
  13. TEST(TestIRrecv, LargeBufferSize) {
  14. IRrecv irrecv_large(3, 1024);
  15. EXPECT_EQ(1024, irrecv_large.getBufSize());
  16. }
  17. TEST(TestIRrecv, SmallBufferSize) {
  18. IRrecv irrecv_small(4, 80);
  19. EXPECT_EQ(80, irrecv_small.getBufSize());
  20. }
  21. TEST(TestIRrecv, MediumBufferSize) {
  22. IRrecv irrecv_medium(4, 512);
  23. EXPECT_EQ(512, irrecv_medium.getBufSize());
  24. }
  25. TEST(TestIRrecv, IRrecvDestructor) {
  26. IRrecv *irrecv_ptr = new IRrecv(1);
  27. EXPECT_EQ(kRawBuf, irrecv_ptr->getBufSize());
  28. delete irrecv_ptr;
  29. irrecv_ptr = new IRrecv(1, 1234);
  30. EXPECT_EQ(1234, irrecv_ptr->getBufSize());
  31. delete irrecv_ptr;
  32. irrecv_ptr = new IRrecv(1, 123);
  33. EXPECT_EQ(123, irrecv_ptr->getBufSize());
  34. delete irrecv_ptr;
  35. }
  36. // Tests for copyIrParams()
  37. TEST(TestCopyIrParams, CopyEmpty) {
  38. irparams_t src;
  39. irparams_t dst;
  40. uint16_t test_size = 1234;
  41. src.bufsize = test_size;
  42. src.rawlen = 0;
  43. src.rawbuf = new uint16_t[test_size];
  44. src.overflow = false;
  45. dst.bufsize = 4567;
  46. dst.rawlen = 123;
  47. dst.rawbuf = new uint16_t[test_size];
  48. dst.overflow = true;
  49. // Confirm we are looking at different memory for the buffers.
  50. ASSERT_NE(src.rawbuf, dst.rawbuf);
  51. IRrecv irrecv(4);
  52. irrecv.copyIrParams(&src, &dst);
  53. ASSERT_EQ(src.bufsize, dst.bufsize);
  54. ASSERT_EQ(src.rawlen, dst.rawlen);
  55. ASSERT_NE(src.rawbuf, dst.rawbuf); // Pointers, not content.
  56. ASSERT_EQ(src.overflow, dst.overflow);
  57. // Contents of the buffers needs to match.
  58. EXPECT_EQ(0, memcmp(src.rawbuf, dst.rawbuf, src.bufsize * sizeof(uint16_t)));
  59. }
  60. TEST(TestCopyIrParams, CopyNonEmpty) {
  61. irparams_t src;
  62. irparams_t dst;
  63. uint16_t test_size = 1234;
  64. src.bufsize = test_size;
  65. src.rawlen = 67;
  66. src.rawbuf = new uint16_t[test_size];
  67. src.rawbuf[0] = 0xF00D;
  68. src.rawbuf[1] = 0xBEEF;
  69. src.rawbuf[test_size - 1] = 0xDEAD;
  70. src.overflow = true;
  71. dst.bufsize = 0;
  72. dst.rawlen = 0;
  73. dst.rawbuf = new uint16_t[test_size];
  74. dst.overflow = false;
  75. // Confirm we are looking at different memory for the buffers.
  76. ASSERT_NE(src.rawbuf, dst.rawbuf);
  77. // and that they differ before we test.
  78. EXPECT_NE(0, memcmp(src.rawbuf, dst.rawbuf, src.bufsize * sizeof(uint16_t)));
  79. IRrecv irrecv(4);
  80. irrecv.copyIrParams(&src, &dst);
  81. ASSERT_EQ(src.bufsize, dst.bufsize);
  82. EXPECT_EQ(test_size, dst.bufsize);
  83. ASSERT_EQ(src.rawlen, dst.rawlen);
  84. EXPECT_EQ(67, dst.rawlen);
  85. ASSERT_EQ(src.overflow, dst.overflow);
  86. EXPECT_TRUE(dst.overflow);
  87. ASSERT_NE(src.rawbuf, dst.rawbuf); // Pointers, not content.
  88. // Contents of the buffers needs to match.
  89. EXPECT_EQ(0, memcmp(src.rawbuf, dst.rawbuf, src.bufsize * sizeof(uint16_t)));
  90. // Check the canary values.
  91. EXPECT_EQ(0xF00D, dst.rawbuf[0]);
  92. EXPECT_EQ(0xBEEF, dst.rawbuf[1]);
  93. EXPECT_EQ(0xDEAD, dst.rawbuf[test_size - 1]);
  94. }
  95. // Tests for decode().
  96. // Test decode of a NEC message.
  97. TEST(TestDecode, DecodeNEC) {
  98. IRsendTest irsend(0);
  99. IRrecv irrecv(1);
  100. irsend.begin();
  101. irsend.reset();
  102. irsend.sendNEC(0x807F40BF);
  103. irsend.makeDecodeResult();
  104. ASSERT_TRUE(irrecv.decode(&irsend.capture));
  105. EXPECT_EQ(NEC, irsend.capture.decode_type);
  106. EXPECT_EQ(kNECBits, irsend.capture.bits);
  107. EXPECT_EQ(0x807F40BF, irsend.capture.value);
  108. }
  109. // Test decode of a JVC message.
  110. TEST(TestDecode, DecodeJVC) {
  111. IRsendTest irsend(0);
  112. IRrecv irrecv(1);
  113. irsend.begin();
  114. irsend.reset();
  115. irsend.sendJVC(0xC2B8);
  116. irsend.makeDecodeResult();
  117. ASSERT_TRUE(irrecv.decode(&irsend.capture));
  118. EXPECT_EQ(JVC, irsend.capture.decode_type);
  119. EXPECT_EQ(kJvcBits, irsend.capture.bits);
  120. EXPECT_EQ(0xC2B8, irsend.capture.value);
  121. }
  122. // Test decode of a LG message.
  123. TEST(TestDecode, DecodeLG) {
  124. IRsendTest irsend(0);
  125. IRrecv irrecv(1);
  126. irsend.begin();
  127. irsend.reset();
  128. irsend.sendLG(0x4B4AE51);
  129. irsend.makeDecodeResult();
  130. ASSERT_TRUE(irrecv.decode(&irsend.capture));
  131. EXPECT_EQ(LG, irsend.capture.decode_type);
  132. EXPECT_EQ(kLgBits, irsend.capture.bits);
  133. EXPECT_EQ(0x4B4AE51, irsend.capture.value);
  134. irsend.reset();
  135. irsend.sendLG(0xB4B4AE51, kLg32Bits);
  136. irsend.makeDecodeResult();
  137. ASSERT_TRUE(irrecv.decode(&irsend.capture));
  138. EXPECT_EQ(LG, irsend.capture.decode_type);
  139. EXPECT_EQ(kLg32Bits, irsend.capture.bits);
  140. EXPECT_EQ(0xB4B4AE51, irsend.capture.value);
  141. }
  142. // Test decode of a Panasonic message.
  143. TEST(TestDecode, DecodePanasonic) {
  144. IRsendTest irsend(0);
  145. IRrecv irrecv(1);
  146. irsend.begin();
  147. irsend.reset();
  148. irsend.sendPanasonic64(0x40040190ED7C);
  149. irsend.makeDecodeResult();
  150. ASSERT_TRUE(irrecv.decodePanasonic(&irsend.capture, kPanasonicBits, true));
  151. EXPECT_EQ(PANASONIC, irsend.capture.decode_type);
  152. EXPECT_EQ(kPanasonicBits, irsend.capture.bits);
  153. EXPECT_EQ(0x40040190ED7C, irsend.capture.value);
  154. }
  155. // Test decode of a Samsun message.
  156. TEST(TestDecode, DecodeSamsung) {
  157. IRsendTest irsend(0);
  158. IRrecv irrecv(1);
  159. irsend.begin();
  160. irsend.reset();
  161. irsend.sendSAMSUNG(0xE0E09966);
  162. irsend.makeDecodeResult();
  163. ASSERT_TRUE(irrecv.decode(&irsend.capture));
  164. EXPECT_EQ(SAMSUNG, irsend.capture.decode_type);
  165. EXPECT_EQ(kSamsungBits, irsend.capture.bits);
  166. EXPECT_EQ(0xE0E09966, irsend.capture.value);
  167. }
  168. // Test decode of a Sherwood message.
  169. TEST(TestDecode, DecodeSherwood) {
  170. IRsendTest irsend(0);
  171. IRrecv irrecv(1);
  172. irsend.begin();
  173. irsend.reset();
  174. irsend.sendSherwood(0x807F40BF);
  175. irsend.makeDecodeResult();
  176. ASSERT_TRUE(irrecv.decode(&irsend.capture));
  177. // Sherwood codes are really NEC codes.
  178. EXPECT_EQ(NEC, irsend.capture.decode_type);
  179. EXPECT_EQ(kNECBits, irsend.capture.bits);
  180. EXPECT_EQ(0x807F40BF, irsend.capture.value);
  181. }
  182. // Test decode of a Whynter message.
  183. TEST(TestDecode, DecodeWhynter) {
  184. IRsendTest irsend(0);
  185. IRrecv irrecv(1);
  186. irsend.begin();
  187. irsend.reset();
  188. irsend.sendWhynter(0x87654321);
  189. irsend.makeDecodeResult();
  190. ASSERT_TRUE(irrecv.decode(&irsend.capture));
  191. EXPECT_EQ(WHYNTER, irsend.capture.decode_type);
  192. EXPECT_EQ(kWhynterBits, irsend.capture.bits);
  193. EXPECT_EQ(0x87654321, irsend.capture.value);
  194. }
  195. // Test decode of Sony messages.
  196. TEST(TestDecode, DecodeSony) {
  197. IRsendTest irsend(0);
  198. IRrecv irrecv(1);
  199. irsend.begin();
  200. // Synthesised Normal Sony 20-bit message.
  201. irsend.reset();
  202. irsend.sendSony(irsend.encodeSony(kSony20Bits, 0x1, 0x1, 0x1));
  203. irsend.makeDecodeResult();
  204. ASSERT_TRUE(irrecv.decode(&irsend.capture));
  205. EXPECT_EQ(SONY, irsend.capture.decode_type);
  206. EXPECT_EQ(kSony20Bits, irsend.capture.bits);
  207. EXPECT_EQ(0x81080, irsend.capture.value);
  208. // Synthesised Normal Sony 15-bit message.
  209. irsend.reset();
  210. irsend.sendSony(irsend.encodeSony(kSony15Bits, 21, 1), kSony15Bits);
  211. irsend.makeDecodeResult();
  212. ASSERT_TRUE(irrecv.decode(&irsend.capture));
  213. EXPECT_EQ(SONY, irsend.capture.decode_type);
  214. EXPECT_EQ(kSony15Bits, irsend.capture.bits);
  215. EXPECT_EQ(0x5480, irsend.capture.value);
  216. // Synthesised Normal Sony 12-bit message.
  217. irsend.reset();
  218. irsend.sendSony(irsend.encodeSony(kSony12Bits, 21, 1), kSony12Bits);
  219. irsend.makeDecodeResult();
  220. ASSERT_TRUE(irrecv.decode(&irsend.capture));
  221. EXPECT_EQ(SONY, irsend.capture.decode_type);
  222. EXPECT_EQ(kSony12Bits, irsend.capture.bits);
  223. EXPECT_EQ(0xA90, irsend.capture.value);
  224. }
  225. // Test decode of Sharp messages.
  226. TEST(TestDecode, DecodeSharp) {
  227. IRsendTest irsend(0);
  228. IRrecv irrecv(1);
  229. irsend.begin();
  230. irsend.reset();
  231. irsend.sendSharpRaw(0x454A);
  232. irsend.makeDecodeResult();
  233. ASSERT_TRUE(irrecv.decode(&irsend.capture));
  234. EXPECT_EQ(SHARP, irsend.capture.decode_type);
  235. EXPECT_EQ(kSharpBits, irsend.capture.bits);
  236. EXPECT_EQ(0x454A, irsend.capture.value);
  237. }
  238. // Test decode of Sanyo messages.
  239. TEST(TestDecode, DecodeSanyo) {
  240. IRsendTest irsend(0);
  241. IRrecv irrecv(1);
  242. irsend.begin();
  243. irsend.reset();
  244. irsend.sendSanyoLC7461(0x2468DCB56A9);
  245. irsend.makeDecodeResult();
  246. ASSERT_TRUE(irrecv.decode(&irsend.capture));
  247. EXPECT_EQ(SANYO_LC7461, irsend.capture.decode_type);
  248. EXPECT_EQ(kSanyoLC7461Bits, irsend.capture.bits);
  249. EXPECT_EQ(0x2468DCB56A9, irsend.capture.value);
  250. }
  251. // Test decode of RC-MM messages.
  252. TEST(TestDecode, DecodeRCMM) {
  253. IRsendTest irsend(0);
  254. IRrecv irrecv(1);
  255. irsend.begin();
  256. // Normal RCMM 24-bit message.
  257. irsend.reset();
  258. irsend.sendRCMM(0xe0a600);
  259. irsend.makeDecodeResult();
  260. ASSERT_TRUE(irrecv.decode(&irsend.capture));
  261. EXPECT_EQ(RCMM, irsend.capture.decode_type);
  262. EXPECT_EQ(kRCMMBits, irsend.capture.bits);
  263. EXPECT_EQ(0xe0a600, irsend.capture.value);
  264. // Normal RCMM 12-bit message.
  265. irsend.reset();
  266. irsend.sendRCMM(0x600, 12);
  267. irsend.makeDecodeResult();
  268. ASSERT_TRUE(irrecv.decode(&irsend.capture));
  269. EXPECT_EQ(RCMM, irsend.capture.decode_type);
  270. EXPECT_EQ(12, irsend.capture.bits);
  271. EXPECT_EQ(0x600, irsend.capture.value);
  272. // Normal RCMM 32-bit message.
  273. irsend.reset();
  274. irsend.sendRCMM(0x28e0a600, 32);
  275. irsend.makeDecodeResult();
  276. ASSERT_TRUE(irrecv.decode(&irsend.capture));
  277. EXPECT_EQ(RCMM, irsend.capture.decode_type);
  278. EXPECT_EQ(32, irsend.capture.bits);
  279. EXPECT_EQ(0x28e0a600, irsend.capture.value);
  280. }
  281. // Test decode of Mitsubishi messages.
  282. TEST(TestDecode, DecodeMitsubishi) {
  283. IRsendTest irsend(0);
  284. IRrecv irrecv(1);
  285. irsend.begin();
  286. irsend.reset();
  287. irsend.sendMitsubishi(0xC2B8);
  288. irsend.makeDecodeResult();
  289. ASSERT_TRUE(irrecv.decode(&irsend.capture));
  290. EXPECT_EQ(MITSUBISHI, irsend.capture.decode_type);
  291. EXPECT_EQ(kMitsubishiBits, irsend.capture.bits);
  292. EXPECT_EQ(0xC2B8, irsend.capture.value);
  293. }
  294. // Test decode of RC-5/RC-5X messages.
  295. TEST(TestDecode, DecodeRC5) {
  296. IRsendTest irsend(0);
  297. IRrecv irrecv(1);
  298. irsend.begin();
  299. // Normal RC-5 12-bit message.
  300. irsend.reset();
  301. irsend.sendRC5(0x175);
  302. irsend.makeDecodeResult();
  303. ASSERT_TRUE(irrecv.decode(&irsend.capture));
  304. EXPECT_EQ(RC5, irsend.capture.decode_type);
  305. EXPECT_EQ(kRC5Bits, irsend.capture.bits);
  306. EXPECT_EQ(0x175, irsend.capture.value);
  307. // Synthesised Normal RC-5X 13-bit message.
  308. irsend.reset();
  309. irsend.sendRC5(irsend.encodeRC5X(0x02, 0x41, true), kRC5XBits);
  310. irsend.makeDecodeResult();
  311. ASSERT_TRUE(irrecv.decode(&irsend.capture));
  312. EXPECT_EQ(RC5X, irsend.capture.decode_type);
  313. EXPECT_EQ(kRC5XBits, irsend.capture.bits);
  314. EXPECT_EQ(0x1881, irsend.capture.value);
  315. }
  316. // Test decode of RC-6 messages.
  317. TEST(TestDecode, DecodeRC6) {
  318. IRsendTest irsend(0);
  319. IRrecv irrecv(1);
  320. irsend.begin();
  321. // Normal RC-6 Mode 0 (20-bit) message.
  322. irsend.reset();
  323. irsend.sendRC6(0x175);
  324. irsend.makeDecodeResult();
  325. ASSERT_TRUE(irrecv.decode(&irsend.capture));
  326. EXPECT_EQ(RC6, irsend.capture.decode_type);
  327. EXPECT_EQ(kRC6Mode0Bits, irsend.capture.bits);
  328. EXPECT_EQ(0x175, irsend.capture.value);
  329. // Normal RC-6 36-bit message.
  330. irsend.reset();
  331. irsend.sendRC6(0xC800F742A, kRC6_36Bits);
  332. irsend.makeDecodeResult();
  333. ASSERT_TRUE(irrecv.decode(&irsend.capture));
  334. EXPECT_EQ(RC6, irsend.capture.decode_type);
  335. EXPECT_EQ(kRC6_36Bits, irsend.capture.bits);
  336. EXPECT_EQ(0xC800F742A, irsend.capture.value);
  337. }
  338. // Test decode of Dish messages.
  339. TEST(TestDecode, DecodeDish) {
  340. IRsendTest irsend(0);
  341. IRrecv irrecv(1);
  342. irsend.begin();
  343. irsend.reset();
  344. irsend.sendDISH(0x9C00);
  345. irsend.makeDecodeResult();
  346. ASSERT_TRUE(irrecv.decode(&irsend.capture));
  347. EXPECT_EQ(DISH, irsend.capture.decode_type);
  348. EXPECT_EQ(kDishBits, irsend.capture.bits);
  349. EXPECT_EQ(0x9C00, irsend.capture.value);
  350. }
  351. // Test decode of Denon messages.
  352. TEST(TestDecode, DecodeDenon) {
  353. IRsendTest irsend(0);
  354. IRrecv irrecv(1);
  355. irsend.begin();
  356. // Normal Denon 15-bit message. (Sharp)
  357. irsend.reset();
  358. irsend.sendDenon(0x2278);
  359. irsend.makeDecodeResult();
  360. ASSERT_TRUE(irrecv.decode(&irsend.capture));
  361. EXPECT_EQ(DENON, irsend.capture.decode_type);
  362. EXPECT_EQ(DENON_BITS, irsend.capture.bits);
  363. EXPECT_EQ(0x2278, irsend.capture.value);
  364. // Legacy Denon 14-bit message.
  365. irsend.reset();
  366. irsend.sendDenon(0x1278, kDenonLegacyBits);
  367. irsend.makeDecodeResult();
  368. ASSERT_TRUE(irrecv.decode(&irsend.capture));
  369. EXPECT_EQ(DENON, irsend.capture.decode_type);
  370. EXPECT_EQ(DENON_BITS, irsend.capture.bits);
  371. EXPECT_EQ(0x1278, irsend.capture.value);
  372. // Normal Denon 48-bit message. (Panasonic/Kaseikyo)
  373. irsend.reset();
  374. irsend.sendDenon(0x2A4C028D6CE3, DENON_48_BITS);
  375. irsend.makeDecodeResult();
  376. ASSERT_TRUE(irrecv.decode(&irsend.capture));
  377. EXPECT_EQ(DENON, irsend.capture.decode_type);
  378. EXPECT_EQ(DENON_48_BITS, irsend.capture.bits);
  379. EXPECT_EQ(0x2A4C028D6CE3, irsend.capture.value);
  380. }
  381. // Test decode of Coolix messages.
  382. TEST(TestDecode, DecodeCoolix) {
  383. IRsendTest irsend(0);
  384. IRrecv irrecv(1);
  385. irsend.begin();
  386. irsend.reset();
  387. irsend.sendCOOLIX(0x123456);
  388. irsend.makeDecodeResult();
  389. ASSERT_TRUE(irrecv.decode(&irsend.capture));
  390. EXPECT_EQ(COOLIX, irsend.capture.decode_type);
  391. EXPECT_EQ(kCoolixBits, irsend.capture.bits);
  392. EXPECT_EQ(0x123456, irsend.capture.value);
  393. }
  394. // Test decode of Aiwa messages.
  395. TEST(TestDecode, DecodeAiwa) {
  396. IRsendTest irsend(0);
  397. IRrecv irrecv(1);
  398. irsend.begin();
  399. irsend.reset();
  400. irsend.sendAiwaRCT501(0x7F);
  401. irsend.makeDecodeResult();
  402. ASSERT_TRUE(irrecv.decode(&irsend.capture));
  403. EXPECT_EQ(AIWA_RC_T501, irsend.capture.decode_type);
  404. EXPECT_EQ(kAiwaRcT501Bits, irsend.capture.bits);
  405. EXPECT_EQ(0x7F, irsend.capture.value);
  406. }
  407. // Test matchData() on space encoded data.
  408. TEST(TestMatchData, SpaceEncoded) {
  409. IRsendTest irsend(0);
  410. IRrecv irrecv(1);
  411. irsend.begin();
  412. uint16_t space_encoded_raw[11] = {500, 500, 500, 1500, 499, 499,
  413. 501, 1501, 499, 1490, 500};
  414. match_result_t result;
  415. irsend.reset();
  416. irsend.sendRaw(space_encoded_raw, 11, 38000);
  417. irsend.makeDecodeResult();
  418. result = irrecv.matchData(irsend.capture.rawbuf + 1, 5, 500, 1500, 500, 500);
  419. ASSERT_TRUE(result.success);
  420. EXPECT_EQ(0b01011, result.data);
  421. EXPECT_EQ(10, result.used);
  422. irsend.reset();
  423. irsend.sendRaw(space_encoded_raw, 11, 38000);
  424. irsend.makeDecodeResult();
  425. result = irrecv.matchData(irsend.capture.rawbuf + 1, 5, 500, 1000, 500, 500);
  426. ASSERT_FALSE(result.success);
  427. }
  428. // Test matchData() on mark encoded data.
  429. TEST(TestMatchData, MarkEncoded) {
  430. IRsendTest irsend(0);
  431. IRrecv irrecv(1);
  432. irsend.begin();
  433. uint16_t mark_encoded_raw[11] = {500, 500, 1500, 500, 499, 499,
  434. 1501, 501, 1499, 490, 500};
  435. match_result_t result;
  436. irsend.reset();
  437. irsend.sendRaw(mark_encoded_raw, 11, 38000);
  438. irsend.makeDecodeResult();
  439. // MSBF order.
  440. result = irrecv.matchData(irsend.capture.rawbuf + 1, 5, 1500, 500, 500, 500);
  441. ASSERT_TRUE(result.success);
  442. EXPECT_EQ(0b01011, result.data);
  443. EXPECT_EQ(10, result.used);
  444. // LSBF order.
  445. result = irrecv.matchData(irsend.capture.rawbuf + 1, 5, 1500, 500, 500, 500,
  446. kTolerance, kMarkExcess, false);
  447. ASSERT_TRUE(result.success);
  448. EXPECT_EQ(0b11010, result.data); // Bits reversed of the previous test.
  449. EXPECT_EQ(10, result.used);
  450. irsend.reset();
  451. irsend.sendRaw(mark_encoded_raw, 11, 38000);
  452. irsend.makeDecodeResult();
  453. // MSBF order.
  454. result = irrecv.matchData(irsend.capture.rawbuf + 1, 5, 1000, 500, 500, 500);
  455. ASSERT_FALSE(result.success);
  456. // LSBF order.
  457. result = irrecv.matchData(irsend.capture.rawbuf + 1, 5, 1000, 500, 500, 500,
  458. kTolerance, kMarkExcess, false);
  459. ASSERT_FALSE(result.success);
  460. }
  461. // Test matchData() on "equal total bit time" encoded data.
  462. TEST(TestMatchData, EqualTotalBitTimeEncoded) {
  463. IRsendTest irsend(0);
  464. IRrecv irrecv(1);
  465. irsend.begin();
  466. uint16_t equal_encoded_raw[11] = {500, 1500, 1500, 500, 499, 1499,
  467. 1501, 501, 1499, 490, 500};
  468. match_result_t result;
  469. irsend.reset();
  470. irsend.sendRaw(equal_encoded_raw, 11, 38000);
  471. irsend.makeDecodeResult();
  472. result = irrecv.matchData(irsend.capture.rawbuf + 1, 5, 1500, 500, 500, 1500);
  473. ASSERT_TRUE(result.success);
  474. EXPECT_EQ(0b01011, result.data);
  475. EXPECT_EQ(10, result.used);
  476. irsend.reset();
  477. irsend.sendRaw(equal_encoded_raw, 11, 38000);
  478. irsend.makeDecodeResult();
  479. result = irrecv.matchData(irsend.capture.rawbuf + 1, 5, 1000, 500, 500, 1000);
  480. ASSERT_FALSE(result.success);
  481. }
  482. // Test matchData() on arbitrary encoded data.
  483. TEST(TestMatchData, ArbitraryEncoded) {
  484. IRsendTest irsend(0);
  485. IRrecv irrecv(1);
  486. irsend.begin();
  487. uint16_t arbitrary_encoded_raw[11] = {500, 1500, 3000, 1000, 499, 1499,
  488. 3001, 1001, 2999, 990, 500};
  489. match_result_t result;
  490. irsend.reset();
  491. irsend.sendRaw(arbitrary_encoded_raw, 11, 38000);
  492. irsend.makeDecodeResult();
  493. result =
  494. irrecv.matchData(irsend.capture.rawbuf + 1, 5, 3000, 1000, 500, 1500);
  495. ASSERT_TRUE(result.success);
  496. EXPECT_EQ(0b01011, result.data);
  497. EXPECT_EQ(10, result.used);
  498. irsend.reset();
  499. irsend.sendRaw(arbitrary_encoded_raw, 11, 38000);
  500. irsend.makeDecodeResult();
  501. result = irrecv.matchData(irsend.capture.rawbuf + 1, 5, 1000, 500, 500, 1000);
  502. ASSERT_FALSE(result.success);
  503. }