ir_GICable_test.cpp 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. // Copyright 2018 David Conran
  2. #include "IRsend.h"
  3. #include "IRsend_test.h"
  4. #include "gtest/gtest.h"
  5. // Tests for sendGICable().
  6. // Test sending typical data only.
  7. TEST(TestSendGICable, SendDataOnly) {
  8. IRsendTest irsend(0);
  9. irsend.begin();
  10. irsend.sendGICable(0);
  11. EXPECT_EQ(
  12. "m9000s4400"
  13. "m550s2200m550s2200m550s2200m550s2200m550s2200m550s2200m550s2200m550s2200"
  14. "m550s2200m550s2200m550s2200m550s2200m550s2200m550s2200m550s2200m550s2200"
  15. "m550s41650"
  16. "m9000s2200m550s87850",
  17. irsend.outputStr());
  18. irsend.sendGICable(0x8807);
  19. EXPECT_EQ(
  20. "m9000s4400"
  21. "m550s4400m550s2200m550s2200m550s2200m550s4400m550s2200m550s2200m550s2200"
  22. "m550s2200m550s2200m550s2200m550s2200m550s2200m550s4400m550s4400m550s4400"
  23. "m550s30650"
  24. "m9000s2200m550s87850",
  25. irsend.outputStr());
  26. irsend.sendGICable(0xFFFF);
  27. EXPECT_EQ(
  28. "m9000s4400"
  29. "m550s4400m550s4400m550s4400m550s4400m550s4400m550s4400m550s4400m550s4400"
  30. "m550s4400m550s4400m550s4400m550s4400m550s4400m550s4400m550s4400m550s4400"
  31. "m550s6450"
  32. "m9000s2200m550s87850",
  33. irsend.outputStr());
  34. }
  35. // Test sending with repeats.
  36. TEST(TestSendGICable, SendWithRepeats) {
  37. IRsendTest irsend(0);
  38. irsend.begin();
  39. // Send a command with 0 repeats.
  40. irsend.sendGICable(0x8807, kGicableBits, 0);
  41. EXPECT_EQ(
  42. "m9000s4400"
  43. "m550s4400m550s2200m550s2200m550s2200m550s4400m550s2200m550s2200m550s2200"
  44. "m550s2200m550s2200m550s2200m550s2200m550s2200m550s4400m550s4400m550s4400"
  45. "m550s30650",
  46. irsend.outputStr());
  47. // Send a command with 1 repeat.
  48. irsend.sendGICable(0x8807, kGicableBits, 1);
  49. EXPECT_EQ(
  50. "m9000s4400"
  51. "m550s4400m550s2200m550s2200m550s2200m550s4400m550s2200m550s2200m550s2200"
  52. "m550s2200m550s2200m550s2200m550s2200m550s2200m550s4400m550s4400m550s4400"
  53. "m550s30650"
  54. "m9000s2200m550s87850",
  55. irsend.outputStr());
  56. // Send a command with 3 repeats.
  57. irsend.sendGICable(0x8807, kGicableBits, 3);
  58. EXPECT_EQ(
  59. "m9000s4400"
  60. "m550s4400m550s2200m550s2200m550s2200m550s4400m550s2200m550s2200m550s2200"
  61. "m550s2200m550s2200m550s2200m550s2200m550s2200m550s4400m550s4400m550s4400"
  62. "m550s30650"
  63. "m9000s2200m550s87850"
  64. "m9000s2200m550s87850"
  65. "m9000s2200m550s87850",
  66. irsend.outputStr());
  67. }
  68. // Tests for decodeGICable().
  69. // Decode normal GICable messages.
  70. TEST(TestDecodeGICable, SyntheticDecode) {
  71. IRsendTest irsend(0);
  72. IRrecv irrecv(0);
  73. irsend.begin();
  74. // Synthesised Normal GICable message.
  75. irsend.reset();
  76. irsend.sendGICable(0x8807);
  77. irsend.makeDecodeResult();
  78. EXPECT_TRUE(irrecv.decode(&irsend.capture));
  79. EXPECT_EQ(GICABLE, irsend.capture.decode_type);
  80. EXPECT_EQ(kGicableBits, irsend.capture.bits);
  81. EXPECT_EQ(0x8807, irsend.capture.value);
  82. EXPECT_EQ(0x0, irsend.capture.address);
  83. EXPECT_EQ(0x0, irsend.capture.command);
  84. }
  85. // Decode a recorded example
  86. TEST(TestDecodeGICable, RealExampleDecodeOK) {
  87. IRsendTest irsend(0);
  88. IRrecv irrecv(0);
  89. irsend.begin();
  90. // Real GICable "OK/Select" message.
  91. // Ref: https://github.com/markszabo/IRremoteESP8266/issues/447
  92. uint16_t rawData[39] = {9064, 4408, 580, 4408, 580, 2152, 578, 2150,
  93. 580, 2150, 580, 4408, 580, 2150, 580, 2150,
  94. 580, 2150, 580, 2150, 580, 2150, 580, 2150,
  95. 580, 2150, 580, 2150, 580, 4408, 580, 4408,
  96. 580, 4408, 580, 30622, 9066, 2148, 580};
  97. irsend.reset();
  98. irsend.sendRaw(rawData, 39, 39);
  99. irsend.makeDecodeResult();
  100. EXPECT_TRUE(irrecv.decode(&irsend.capture));
  101. EXPECT_EQ(GICABLE, irsend.capture.decode_type);
  102. EXPECT_EQ(kGicableBits, irsend.capture.bits);
  103. EXPECT_EQ(0x8807, irsend.capture.value);
  104. EXPECT_EQ(0x0, irsend.capture.address);
  105. EXPECT_EQ(0x0, irsend.capture.command);
  106. }
  107. TEST(TestDecodeGICable, RealExampleDecodeLEFT) {
  108. IRsendTest irsend(0);
  109. IRrecv irrecv(0);
  110. irsend.begin();
  111. // Real GICable "LEFT" message.
  112. // Ref: https://github.com/markszabo/IRremoteESP8266/issues/447
  113. uint16_t rawData[39] = {9040, 4434, 554, 2176, 580, 4408, 554, 4434,
  114. 582, 2148, 554, 4434, 580, 4408, 556, 2174,
  115. 580, 2150, 580, 2150, 582, 2148, 556, 2176,
  116. 580, 2150, 580, 4408, 580, 4408, 580, 4408,
  117. 582, 2150, 580, 26078, 9066, 2148, 580};
  118. irsend.reset();
  119. irsend.sendRaw(rawData, 39, 39);
  120. irsend.makeDecodeResult();
  121. EXPECT_TRUE(irrecv.decode(&irsend.capture));
  122. EXPECT_EQ(GICABLE, irsend.capture.decode_type);
  123. EXPECT_EQ(kGicableBits, irsend.capture.bits);
  124. EXPECT_EQ(0x6C0E, irsend.capture.value);
  125. EXPECT_EQ(0x0, irsend.capture.address);
  126. EXPECT_EQ(0x0, irsend.capture.command);
  127. }
  128. TEST(TestDecodeGICable, RealExampleDecodeZEROKey) {
  129. IRsendTest irsend(0);
  130. IRrecv irrecv(0);
  131. irsend.begin();
  132. // Real GICable "Zero Key" message.
  133. // Note: Zero key looks similar to a JVC message, hence this test.
  134. // Ref: https://github.com/markszabo/IRremoteESP8266/issues/447
  135. uint16_t rawData[39] = {9036, 4434, 552, 2178, 552, 2178, 552, 2180,
  136. 550, 2178, 552, 2178, 550, 2180, 552, 2178,
  137. 552, 2178, 550, 2180, 552, 2178, 526, 2204,
  138. 552, 2178, 552, 2178, 526, 2204, 526, 2204,
  139. 526, 2204, 526, 41932, 9036, 2176, 552};
  140. irsend.reset();
  141. irsend.sendRaw(rawData, 39, 39);
  142. irsend.makeDecodeResult();
  143. EXPECT_TRUE(irrecv.decode(&irsend.capture));
  144. EXPECT_EQ(GICABLE, irsend.capture.decode_type);
  145. EXPECT_EQ(kGicableBits, irsend.capture.bits);
  146. EXPECT_EQ(0x0, irsend.capture.value);
  147. EXPECT_EQ(0x0, irsend.capture.address);
  148. EXPECT_EQ(0x0, irsend.capture.command);
  149. }