ir_Sanyo_test.cpp 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  1. // Copyright 2017 David Conran
  2. #include "IRsend.h"
  3. #include "IRsend_test.h"
  4. #include "gtest/gtest.h"
  5. // Tests for encodeSanyoLC7461().
  6. TEST(TestEncodeSanyoLC7461, NormalEncoding) {
  7. IRsendTest irsend(4);
  8. EXPECT_EQ(0x1FFF00FF, irsend.encodeSanyoLC7461(0, 0));
  9. EXPECT_EQ(0x3FFE01FE, irsend.encodeSanyoLC7461(1, 1));
  10. EXPECT_EQ(0x3FFE02FD, irsend.encodeSanyoLC7461(1, 2));
  11. EXPECT_EQ(0x3FFE000FF00, irsend.encodeSanyoLC7461(0x1FFF, 0xFF));
  12. EXPECT_EQ(0x2AAAAAA55AA, irsend.encodeSanyoLC7461(0x1555, 0x55));
  13. EXPECT_EQ(0x3FFE000FF00, irsend.encodeSanyoLC7461(0xFFFF, 0xFF));
  14. EXPECT_EQ(0x1D8113F00FF, irsend.encodeSanyoLC7461(0xEC0, 0x0));
  15. }
  16. // Tests for sendSanyoLC7461().
  17. // Test sending typical data only.
  18. TEST(TestEncodeSanyoLC7461, SendDataOnly) {
  19. IRsendTest irsend(4);
  20. irsend.begin();
  21. irsend.reset();
  22. irsend.sendSanyoLC7461(0x1D8113F00FF);
  23. EXPECT_EQ(
  24. "m8960s4480"
  25. "m560s560m560s1680m560s1680m560s1680m560s560m560s1680m560s1680m560s560"
  26. "m560s560m560s560m560s560m560s560m560s560m560s1680m560s560m560s560"
  27. "m560s560m560s1680m560s560m560s560m560s1680m560s1680m560s1680m560s1680"
  28. "m560s1680m560s1680m560s560m560s560m560s560m560s560m560s560m560s560"
  29. "m560s560m560s560m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680"
  30. "m560s1680m560s1680m560s23520",
  31. irsend.outputStr());
  32. }
  33. // Test sending with different repeats.
  34. TEST(TestEncodeSanyoLC7461, SendWithRepeats) {
  35. IRsendTest irsend(4);
  36. irsend.begin();
  37. irsend.reset();
  38. irsend.sendSanyoLC7461(0x1D8113F00FF, kSanyoLC7461Bits, 1); // 1 repeat.
  39. EXPECT_EQ(
  40. "m8960s4480"
  41. "m560s560m560s1680m560s1680m560s1680m560s560m560s1680m560s1680m560s560"
  42. "m560s560m560s560m560s560m560s560m560s560m560s1680m560s560m560s560"
  43. "m560s560m560s1680m560s560m560s560m560s1680m560s1680m560s1680m560s1680"
  44. "m560s1680m560s1680m560s560m560s560m560s560m560s560m560s560m560s560"
  45. "m560s560m560s560m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680"
  46. "m560s1680m560s1680m560s23520"
  47. "m8960s2240m560s96320",
  48. irsend.outputStr());
  49. }
  50. // Tests for decodeSanyoLC7461().
  51. // Decode normal Sanyo LC7461 messages.
  52. TEST(TestDecodeSanyoLC7461, NormalDecodeWithStrict) {
  53. IRsendTest irsend(4);
  54. IRrecv irrecv(4);
  55. irsend.begin();
  56. // Normal Sanyo LC7461 42-bit message.
  57. irsend.reset();
  58. irsend.sendSanyoLC7461(0x1D8113F00FF);
  59. irsend.makeDecodeResult();
  60. ASSERT_TRUE(
  61. irrecv.decodeSanyoLC7461(&irsend.capture, kSanyoLC7461Bits, true));
  62. EXPECT_EQ(SANYO_LC7461, irsend.capture.decode_type);
  63. EXPECT_EQ(kSanyoLC7461Bits, irsend.capture.bits);
  64. EXPECT_EQ(0x1D8113F00FF, irsend.capture.value);
  65. EXPECT_EQ(0xEC0, irsend.capture.address);
  66. EXPECT_EQ(0x0, irsend.capture.command);
  67. EXPECT_FALSE(irsend.capture.repeat);
  68. // Synthesised Normal Sanyo LC7461 42-bit message.
  69. irsend.reset();
  70. irsend.sendSanyoLC7461(irsend.encodeSanyoLC7461(0x1234, 0x56));
  71. irsend.makeDecodeResult();
  72. ASSERT_TRUE(
  73. irrecv.decodeSanyoLC7461(&irsend.capture, kSanyoLC7461Bits, true));
  74. EXPECT_EQ(SANYO_LC7461, irsend.capture.decode_type);
  75. EXPECT_EQ(kSanyoLC7461Bits, irsend.capture.bits);
  76. EXPECT_EQ(0x2468DCB56A9, irsend.capture.value);
  77. EXPECT_EQ(0x1234, irsend.capture.address);
  78. EXPECT_EQ(0x56, irsend.capture.command);
  79. EXPECT_FALSE(irsend.capture.repeat);
  80. // Synthesised Normal Sanyo LC7461 42-bit message.
  81. irsend.reset();
  82. irsend.sendSanyoLC7461(irsend.encodeSanyoLC7461(0x1, 0x1));
  83. irsend.makeDecodeResult();
  84. ASSERT_TRUE(
  85. irrecv.decodeSanyoLC7461(&irsend.capture, kSanyoLC7461Bits, true));
  86. EXPECT_EQ(SANYO_LC7461, irsend.capture.decode_type);
  87. EXPECT_EQ(kSanyoLC7461Bits, irsend.capture.bits);
  88. EXPECT_EQ(0x3FFE01FE, irsend.capture.value);
  89. EXPECT_EQ(0x1, irsend.capture.address);
  90. EXPECT_EQ(0x1, irsend.capture.command);
  91. EXPECT_FALSE(irsend.capture.repeat);
  92. }
  93. // Decode normal repeated Sanyo LC7461 messages.
  94. TEST(TestDecodeSanyoLC7461, NormalDecodeWithRepeatAndStrict) {
  95. IRsendTest irsend(4);
  96. IRrecv irrecv(4);
  97. irsend.begin();
  98. // Normal Sanyo LC7461 16-bit message with 1 repeat.
  99. irsend.reset();
  100. irsend.sendSanyoLC7461(0x3FFE01FE, kSanyoLC7461Bits, 1);
  101. irsend.makeDecodeResult();
  102. ASSERT_TRUE(
  103. irrecv.decodeSanyoLC7461(&irsend.capture, kSanyoLC7461Bits, true));
  104. EXPECT_EQ(SANYO_LC7461, irsend.capture.decode_type);
  105. EXPECT_EQ(kSanyoLC7461Bits, irsend.capture.bits);
  106. EXPECT_EQ(0x3FFE01FE, irsend.capture.value);
  107. EXPECT_EQ(0x1, irsend.capture.address);
  108. EXPECT_EQ(0x1, irsend.capture.command);
  109. EXPECT_FALSE(irsend.capture.repeat);
  110. }
  111. // Decode unsupported Sanyo LC7461 messages.
  112. TEST(TestDecodeSanyoLC7461, DecodeWithNonStrictValues) {
  113. IRsendTest irsend(4);
  114. IRrecv irrecv(4);
  115. irsend.begin();
  116. irsend.reset();
  117. irsend.sendSanyoLC7461(0x0); // Illegal value Sanyo LC7461 message.
  118. irsend.makeDecodeResult();
  119. // Should fail with strict on.
  120. ASSERT_FALSE(
  121. irrecv.decodeSanyoLC7461(&irsend.capture, kSanyoLC7461Bits, true));
  122. // Should pass if strict off.
  123. ASSERT_TRUE(
  124. irrecv.decodeSanyoLC7461(&irsend.capture, kSanyoLC7461Bits, false));
  125. EXPECT_EQ(SANYO_LC7461, irsend.capture.decode_type);
  126. EXPECT_EQ(kSanyoLC7461Bits, irsend.capture.bits);
  127. EXPECT_EQ(0x0, irsend.capture.value);
  128. EXPECT_EQ(0x0, irsend.capture.address);
  129. EXPECT_EQ(0x0, irsend.capture.command);
  130. irsend.reset();
  131. // Illegal value Sanyo LC7461 42-bit message.
  132. irsend.sendSanyoLC7461(0x1234567890A);
  133. irsend.makeDecodeResult();
  134. ASSERT_FALSE(
  135. irrecv.decodeSanyoLC7461(&irsend.capture, kSanyoLC7461Bits, true));
  136. // Should fail with strict when we ask for the wrong bit size.
  137. ASSERT_FALSE(irrecv.decodeSanyoLC7461(&irsend.capture, 32, true));
  138. ASSERT_FALSE(irrecv.decodeSanyoLC7461(&irsend.capture, 64, true));
  139. // And should fail for a bad value.
  140. ASSERT_FALSE(
  141. irrecv.decodeSanyoLC7461(&irsend.capture, kSanyoLC7461Bits, true));
  142. // Should pass if strict off.
  143. ASSERT_TRUE(
  144. irrecv.decodeSanyoLC7461(&irsend.capture, kSanyoLC7461Bits, false));
  145. EXPECT_EQ(SANYO_LC7461, irsend.capture.decode_type);
  146. EXPECT_EQ(kSanyoLC7461Bits, irsend.capture.bits);
  147. EXPECT_EQ(0x1234567890A, irsend.capture.value);
  148. EXPECT_EQ(0x91A, irsend.capture.address);
  149. EXPECT_EQ(0x89, irsend.capture.command);
  150. // Shouldn't pass if strict off and looking for a smaller size.
  151. ASSERT_FALSE(irrecv.decodeSanyoLC7461(&irsend.capture, 34, false));
  152. }
  153. // Decode (non-standard) 64-bit messages.
  154. TEST(TestDecodeSanyoLC7461, Decode64BitMessages) {
  155. IRsendTest irsend(4);
  156. IRrecv irrecv(4);
  157. irsend.begin();
  158. irsend.reset();
  159. // Illegal value & size Sanyo LC7461 64-bit message.
  160. irsend.sendSanyoLC7461(0xFFFFFFFFFFFFFFFF, 64);
  161. irsend.makeDecodeResult();
  162. // Should work with a 'normal' match (not strict)
  163. ASSERT_TRUE(irrecv.decodeSanyoLC7461(&irsend.capture, 64, false));
  164. EXPECT_EQ(SANYO_LC7461, irsend.capture.decode_type);
  165. EXPECT_EQ(64, irsend.capture.bits);
  166. EXPECT_EQ(0xFFFFFFFFFFFFFFFF, irsend.capture.value);
  167. EXPECT_EQ(0xFFFF, irsend.capture.address);
  168. EXPECT_EQ(0xFF, irsend.capture.command);
  169. }
  170. // Decode a 'real' example via GlobalCache
  171. TEST(TestDecodeSanyoLC7461, DecodeGlobalCacheExample) {
  172. IRsendTest irsend(4);
  173. IRrecv irrecv(4);
  174. irsend.begin();
  175. irsend.reset();
  176. uint16_t gc_test[95] = {
  177. 38000, 1, 89, 342, 171, 21, 21, 21, 64, 21, 64, 21, 64, 21, 21, 21,
  178. 64, 21, 64, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
  179. 64, 21, 21, 21, 21, 21, 21, 21, 64, 21, 21, 21, 21, 21, 64, 21,
  180. 64, 21, 64, 21, 64, 21, 64, 21, 64, 21, 21, 21, 21, 21, 21, 21,
  181. 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 64, 21, 64, 21, 64, 21,
  182. 64, 21, 64, 21, 64, 21, 64, 21, 64, 21, 875, 342, 171, 21, 3565};
  183. irsend.sendGC(gc_test, 95);
  184. irsend.makeDecodeResult();
  185. ASSERT_TRUE(
  186. irrecv.decodeSanyoLC7461(&irsend.capture, kSanyoLC7461Bits, true));
  187. EXPECT_EQ(SANYO_LC7461, irsend.capture.decode_type);
  188. EXPECT_EQ(kSanyoLC7461Bits, irsend.capture.bits);
  189. EXPECT_EQ(0x1D8113F00FF, irsend.capture.value);
  190. EXPECT_EQ(0xEC0, irsend.capture.address);
  191. EXPECT_EQ(0x0, irsend.capture.command);
  192. EXPECT_FALSE(irsend.capture.repeat);
  193. // Confirm what the 42-bit NEC decode is.
  194. ASSERT_TRUE(irrecv.decodeNEC(&irsend.capture, 42, false));
  195. EXPECT_EQ(0x1D8113F00FF, irsend.capture.value);
  196. }
  197. // Fail to decode a non-Sanyo LC7461 example via GlobalCache
  198. TEST(TestDecodeSanyoLC7461, FailToDecodeNonSanyoLC7461Example) {
  199. IRsendTest irsend(4);
  200. IRrecv irrecv(4);
  201. irsend.begin();
  202. irsend.reset();
  203. // Modified a few entries to unexpected values, based on previous test case.
  204. uint16_t gc_test[39] = {38000, 1, 1, 322, 162, 20, 61, 20, 61, 20,
  205. 20, 20, 20, 20, 20, 20, 127, 20, 61, 9,
  206. 20, 20, 61, 20, 20, 20, 61, 20, 61, 20,
  207. 61, 20, 20, 20, 20, 20, 20, 20, 884};
  208. irsend.sendGC(gc_test, 39);
  209. irsend.makeDecodeResult();
  210. ASSERT_FALSE(irrecv.decodeSanyoLC7461(&irsend.capture));
  211. ASSERT_FALSE(
  212. irrecv.decodeSanyoLC7461(&irsend.capture, kSanyoLC7461Bits, false));
  213. }