ir_Magiquest_test.cpp 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. // Copyright 2017 David Conran
  2. #include "ir_Magiquest.h"
  3. #include "IRrecv.h"
  4. #include "IRsend.h"
  5. #include "IRsend_test.h"
  6. #include "gtest/gtest.h"
  7. // Tests for encodeMagiQuest()
  8. TEST(TestEncodeMagiQuest, General) {
  9. IRsendTest irsend(0);
  10. EXPECT_EQ(0x0, irsend.encodeMagiQuest(0x0, 0x0));
  11. EXPECT_EQ(0x10001, irsend.encodeMagiQuest(0x1, 0x1));
  12. EXPECT_EQ(0x20003, irsend.encodeMagiQuest(0x2, 0x3));
  13. EXPECT_EQ(0x123456781234, irsend.encodeMagiQuest(0x12345678, 0x1234));
  14. EXPECT_EQ(0xFFFFFFFFFFFF, irsend.encodeMagiQuest(0xFFFFFFFF, 0xFFFF));
  15. }
  16. // Tests for sendMagiQuest()
  17. // Test sending typical data only.
  18. TEST(TestSendMagiQuest, SendDataOnly) {
  19. IRsendTest irsend(0);
  20. irsend.begin();
  21. irsend.reset();
  22. irsend.sendMagiQuest(0x0);
  23. EXPECT_EQ(
  24. "m280s850m280s850m280s850m280s850m280s850m280s850m280s850m280s850"
  25. "m280s850m280s850m280s850m280s850m280s850m280s850m280s850m280s850"
  26. "m280s850m280s850m280s850m280s850m280s850m280s850m280s850m280s850"
  27. "m280s850m280s850m280s850m280s850m280s850m280s850m280s850m280s850"
  28. "m280s850m280s850m280s850m280s850m280s850m280s850m280s850m280s850"
  29. "m280s850m280s850m280s850m280s850m280s850m280s850m280s850m280s850"
  30. "m280s850m280s850m280s850m280s850m280s850m280s850m280s850m280s100850",
  31. irsend.outputStr());
  32. irsend.reset();
  33. irsend.sendMagiQuest(0x123456789ABC);
  34. EXPECT_EQ(
  35. "m280s850m280s850m280s850m280s850m280s850m280s850m280s850m280s850"
  36. "m280s850m280s850m280s850m580s600m280s850m280s850m580s600m280s850"
  37. "m280s850m280s850m580s600m580s600m280s850m580s600m280s850m280s850"
  38. "m280s850m580s600m280s850m580s600m280s850m580s600m580s600m280s850"
  39. "m280s850m580s600m580s600m580s600m580s600m280s850m280s850m280s850"
  40. "m580s600m280s850m280s850m580s600m580s600m280s850m580s600m280s850"
  41. "m580s600m280s850m580s600m580s600m580s600m580s600m280s850m280s100850",
  42. irsend.outputStr());
  43. }
  44. // Test sending typical data only.
  45. TEST(TestSendMagiQuest, SendWithRepeats) {
  46. IRsendTest irsend(0);
  47. irsend.begin();
  48. irsend.reset();
  49. irsend.sendMagiQuest(0x12345678ABCD, kMagiquestBits, 2); // two repeats.
  50. EXPECT_EQ(
  51. "m280s850m280s850m280s850m280s850m280s850m280s850m280s850m280s850"
  52. "m280s850m280s850m280s850m580s600m280s850m280s850m580s600m280s850"
  53. "m280s850m280s850m580s600m580s600m280s850m580s600m280s850m280s850"
  54. "m280s850m580s600m280s850m580s600m280s850m580s600m580s600m280s850"
  55. "m280s850m580s600m580s600m580s600m580s600m280s850m280s850m280s850"
  56. "m580s600m280s850m580s600m280s850m580s600m280s850m580s600m580s600"
  57. "m580s600m580s600m280s850m280s850m580s600m580s600m280s850m580s100600"
  58. "m280s850m280s850m280s850m280s850m280s850m280s850m280s850m280s850"
  59. "m280s850m280s850m280s850m580s600m280s850m280s850m580s600m280s850"
  60. "m280s850m280s850m580s600m580s600m280s850m580s600m280s850m280s850"
  61. "m280s850m580s600m280s850m580s600m280s850m580s600m580s600m280s850"
  62. "m280s850m580s600m580s600m580s600m580s600m280s850m280s850m280s850"
  63. "m580s600m280s850m580s600m280s850m580s600m280s850m580s600m580s600"
  64. "m580s600m580s600m280s850m280s850m580s600m580s600m280s850m580s100600"
  65. "m280s850m280s850m280s850m280s850m280s850m280s850m280s850m280s850"
  66. "m280s850m280s850m280s850m580s600m280s850m280s850m580s600m280s850"
  67. "m280s850m280s850m580s600m580s600m280s850m580s600m280s850m280s850"
  68. "m280s850m580s600m280s850m580s600m280s850m580s600m580s600m280s850"
  69. "m280s850m580s600m580s600m580s600m580s600m280s850m280s850m280s850"
  70. "m580s600m280s850m580s600m280s850m580s600m280s850m580s600m580s600"
  71. "m580s600m580s600m280s850m280s850m580s600m580s600m280s850m580s100600",
  72. irsend.outputStr());
  73. }
  74. // Tests for decodeMagiQuest().
  75. // Decode normal "synthetic" messages.
  76. TEST(TestDecodeMagiQuest, NormalDecodeWithStrict) {
  77. IRsendTest irsend(0);
  78. IRrecv irrecv(0);
  79. irsend.begin();
  80. irsend.reset();
  81. irsend.sendMagiQuest(0x0);
  82. irsend.makeDecodeResult();
  83. ASSERT_TRUE(irrecv.decodeMagiQuest(&irsend.capture, kMagiquestBits, true));
  84. EXPECT_EQ(MAGIQUEST, irsend.capture.decode_type);
  85. EXPECT_EQ(kMagiquestBits, irsend.capture.bits);
  86. EXPECT_EQ(0x0, irsend.capture.value);
  87. EXPECT_EQ(0x0, irsend.capture.address);
  88. EXPECT_EQ(0x0, irsend.capture.command);
  89. EXPECT_FALSE(irsend.capture.repeat);
  90. irsend.reset();
  91. irsend.sendMagiQuest(irsend.encodeMagiQuest(0x1, 0x1));
  92. irsend.makeDecodeResult();
  93. ASSERT_TRUE(irrecv.decodeMagiQuest(&irsend.capture, kMagiquestBits, true));
  94. EXPECT_EQ(MAGIQUEST, irsend.capture.decode_type);
  95. EXPECT_EQ(kMagiquestBits, irsend.capture.bits);
  96. EXPECT_EQ(0x10001, irsend.capture.value);
  97. EXPECT_EQ(0x1, irsend.capture.address);
  98. EXPECT_EQ(0x1, irsend.capture.command);
  99. EXPECT_FALSE(irsend.capture.repeat);
  100. irsend.reset();
  101. irsend.sendMagiQuest(irsend.encodeMagiQuest(0x12345678, 0xABCD));
  102. irsend.makeDecodeResult();
  103. ASSERT_TRUE(irrecv.decodeMagiQuest(&irsend.capture, kMagiquestBits, true));
  104. EXPECT_EQ(MAGIQUEST, irsend.capture.decode_type);
  105. EXPECT_EQ(kMagiquestBits, irsend.capture.bits);
  106. EXPECT_EQ(0x12345678ABCD, irsend.capture.value);
  107. EXPECT_EQ(0x12345678, irsend.capture.address);
  108. EXPECT_EQ(0xABCD, irsend.capture.command);
  109. EXPECT_FALSE(irsend.capture.repeat);
  110. // Do the last one again, & use the full decoder, not just protocol specific.
  111. irsend.reset();
  112. irsend.sendMagiQuest(irsend.encodeMagiQuest(0x12345678, 0xABCD));
  113. irsend.makeDecodeResult();
  114. ASSERT_TRUE(irrecv.decode(&irsend.capture));
  115. EXPECT_EQ(MAGIQUEST, irsend.capture.decode_type);
  116. EXPECT_EQ(kMagiquestBits, irsend.capture.bits);
  117. EXPECT_EQ(0x12345678ABCD, irsend.capture.value);
  118. }
  119. // Decode a "real" example message.
  120. TEST(TestDecodeMagiQuest, RealExamples) {
  121. IRsendTest irsend(0);
  122. IRrecv irrecv(0);
  123. irsend.begin();
  124. irsend.reset();
  125. uint16_t rawData[111] = {262, 842, 298, 858, 238, 866, 240, 890, 238, 866,
  126. 240, 862, 244, 886, 242, 860, 246, 858, 554, 604,
  127. 264, 840, 560, 622, 266, 836, 552, 604, 556, 626,
  128. 262, 866, 240, 864, 264, 838, 268, 862, 244, 886,
  129. 536, 620, 530, 628, 554, 628, 532, 624, 244, 858,
  130. 552, 604, 264, 840, 268, 862, 266, 838, 268, 888,
  131. 240, 864, 242, 860, 268, 862, 244, 860, 236, 868,
  132. 272, 832, 264, 866, 240, 890, 532, 598, 268, 834,
  133. 294, 836, 270, 834, 262, 866, 272, 858, 238, 866,
  134. 534, 622, 268, 836, 270, 860, 268, 862, 526, 604,
  135. 264, 892, 530, 600, 268, 836, 586, 598, 270, 834,
  136. 556}; // Data from PR #365 captured by coolacid
  137. irsend.sendRaw(rawData, 111, 36000);
  138. irsend.makeDecodeResult();
  139. ASSERT_TRUE(irrecv.decode(&irsend.capture));
  140. EXPECT_EQ(MAGIQUEST, irsend.capture.decode_type);
  141. EXPECT_EQ(kMagiquestBits, irsend.capture.bits);
  142. EXPECT_EQ(0x560F40020455, irsend.capture.value);
  143. EXPECT_EQ(0x560F4002, irsend.capture.address); // Wand ID
  144. EXPECT_EQ(0x0455, irsend.capture.command); // Magnitude
  145. EXPECT_FALSE(irsend.capture.repeat);
  146. }