ir_Kelvinator_test.cpp 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518
  1. // Copyright 2017 David Conran
  2. #include "ir_Kelvinator.h"
  3. #include "IRrecv.h"
  4. #include "IRrecv_test.h"
  5. #include "IRremoteESP8266.h"
  6. #include "IRsend.h"
  7. #include "IRsend_test.h"
  8. #include "gtest/gtest.h"
  9. // Tests for sendKelvinator().
  10. // Test sending typical data only.
  11. TEST(TestSendKelvinator, SendDataOnly) {
  12. IRsendTest irsend(4);
  13. irsend.begin();
  14. uint8_t kelv_code[kKelvinatorStateLength] = {
  15. 0x19, 0x0B, 0x80, 0x50, 0x00, 0x00, 0x00, 0xE0,
  16. 0x19, 0x0B, 0x80, 0x70, 0x00, 0x00, 0x10, 0xf0};
  17. irsend.reset();
  18. irsend.sendKelvinator(kelv_code);
  19. EXPECT_EQ(
  20. "m9010s4505"
  21. "m680s1530m680s510m680s510m680s1530m680s1530m680s510m680s510m680s510"
  22. "m680s1530m680s1530m680s510m680s1530m680s510m680s510m680s510m680s510"
  23. "m680s510m680s510m680s510m680s510m680s510m680s510m680s510m680s1530"
  24. "m680s510m680s510m680s510m680s510m680s1530m680s510m680s1530m680s510"
  25. "m680s510m680s1530m680s510"
  26. "m680s19975"
  27. "m680s510m680s510m680s510m680s510m680s510m680s510m680s510m680s510"
  28. "m680s510m680s510m680s510m680s510m680s510m680s510m680s510m680s510"
  29. "m680s510m680s510m680s510m680s510m680s510m680s510m680s510m680s510"
  30. "m680s510m680s510m680s510m680s510m680s510m680s1530m680s1530m680s1530"
  31. "m680s39950"
  32. "m9010s4505"
  33. "m680s1530m680s510m680s510m680s1530m680s1530m680s510m680s510m680s510"
  34. "m680s1530m680s1530m680s510m680s1530m680s510m680s510m680s510m680s510"
  35. "m680s510m680s510m680s510m680s510m680s510m680s510m680s510m680s1530"
  36. "m680s510m680s510m680s510m680s510m680s1530m680s1530m680s1530m680s510"
  37. "m680s510m680s1530m680s510"
  38. "m680s19975"
  39. "m680s510m680s510m680s510m680s510m680s510m680s510m680s510m680s510"
  40. "m680s510m680s510m680s510m680s510m680s510m680s510m680s510m680s510"
  41. "m680s510m680s510m680s510m680s510m680s1530m680s510m680s510m680s510"
  42. "m680s510m680s510m680s510m680s510m680s1530m680s1530m680s1530m680s1530"
  43. "m680s39950",
  44. irsend.outputStr());
  45. }
  46. // Test sending with repeats.
  47. TEST(TestSendKelvinator, SendWithRepeats) {
  48. IRsendTest irsend(4);
  49. irsend.begin();
  50. irsend.reset();
  51. uint8_t kelv_code[kKelvinatorStateLength] = {
  52. 0x19, 0x0B, 0x80, 0x50, 0x00, 0x00, 0x00, 0xE0,
  53. 0x19, 0x0B, 0x80, 0x70, 0x00, 0x00, 0x10, 0xf0};
  54. irsend.reset();
  55. irsend.sendKelvinator(kelv_code, kKelvinatorStateLength, 1);
  56. EXPECT_EQ(
  57. "m9010s4505"
  58. "m680s1530m680s510m680s510m680s1530m680s1530m680s510m680s510m680s510"
  59. "m680s1530m680s1530m680s510m680s1530m680s510m680s510m680s510m680s510"
  60. "m680s510m680s510m680s510m680s510m680s510m680s510m680s510m680s1530"
  61. "m680s510m680s510m680s510m680s510m680s1530m680s510m680s1530m680s510"
  62. "m680s510m680s1530m680s510"
  63. "m680s19975"
  64. "m680s510m680s510m680s510m680s510m680s510m680s510m680s510m680s510"
  65. "m680s510m680s510m680s510m680s510m680s510m680s510m680s510m680s510"
  66. "m680s510m680s510m680s510m680s510m680s510m680s510m680s510m680s510"
  67. "m680s510m680s510m680s510m680s510m680s510m680s1530m680s1530m680s1530"
  68. "m680s39950"
  69. "m9010s4505"
  70. "m680s1530m680s510m680s510m680s1530m680s1530m680s510m680s510m680s510"
  71. "m680s1530m680s1530m680s510m680s1530m680s510m680s510m680s510m680s510"
  72. "m680s510m680s510m680s510m680s510m680s510m680s510m680s510m680s1530"
  73. "m680s510m680s510m680s510m680s510m680s1530m680s1530m680s1530m680s510"
  74. "m680s510m680s1530m680s510"
  75. "m680s19975"
  76. "m680s510m680s510m680s510m680s510m680s510m680s510m680s510m680s510"
  77. "m680s510m680s510m680s510m680s510m680s510m680s510m680s510m680s510"
  78. "m680s510m680s510m680s510m680s510m680s1530m680s510m680s510m680s510"
  79. "m680s510m680s510m680s510m680s510m680s1530m680s1530m680s1530m680s1530"
  80. "m680s39950"
  81. "m9010s4505"
  82. "m680s1530m680s510m680s510m680s1530m680s1530m680s510m680s510m680s510"
  83. "m680s1530m680s1530m680s510m680s1530m680s510m680s510m680s510m680s510"
  84. "m680s510m680s510m680s510m680s510m680s510m680s510m680s510m680s1530"
  85. "m680s510m680s510m680s510m680s510m680s1530m680s510m680s1530m680s510"
  86. "m680s510m680s1530m680s510"
  87. "m680s19975"
  88. "m680s510m680s510m680s510m680s510m680s510m680s510m680s510m680s510"
  89. "m680s510m680s510m680s510m680s510m680s510m680s510m680s510m680s510"
  90. "m680s510m680s510m680s510m680s510m680s510m680s510m680s510m680s510"
  91. "m680s510m680s510m680s510m680s510m680s510m680s1530m680s1530m680s1530"
  92. "m680s39950"
  93. "m9010s4505"
  94. "m680s1530m680s510m680s510m680s1530m680s1530m680s510m680s510m680s510"
  95. "m680s1530m680s1530m680s510m680s1530m680s510m680s510m680s510m680s510"
  96. "m680s510m680s510m680s510m680s510m680s510m680s510m680s510m680s1530"
  97. "m680s510m680s510m680s510m680s510m680s1530m680s1530m680s1530m680s510"
  98. "m680s510m680s1530m680s510"
  99. "m680s19975"
  100. "m680s510m680s510m680s510m680s510m680s510m680s510m680s510m680s510"
  101. "m680s510m680s510m680s510m680s510m680s510m680s510m680s510m680s510"
  102. "m680s510m680s510m680s510m680s510m680s1530m680s510m680s510m680s510"
  103. "m680s510m680s510m680s510m680s510m680s1530m680s1530m680s1530m680s1530"
  104. "m680s39950",
  105. irsend.outputStr());
  106. }
  107. // Test sending atypical sizes.
  108. TEST(TestSendKelvinator, SendUnexpectedSizes) {
  109. IRsendTest irsend(4);
  110. irsend.begin();
  111. uint8_t kelv_short_code[15] = {0x19, 0x0B, 0x80, 0x50, 0x00, 0x00, 0x00, 0xE0,
  112. 0x19, 0x0B, 0x80, 0x70, 0x00, 0x00, 0x10};
  113. uint8_t kelv_long_code[17] = {0x19, 0x0B, 0x80, 0x50, 0x00, 0x00,
  114. 0x00, 0xE0, 0x19, 0x0B, 0x80, 0x70,
  115. 0x00, 0x00, 0x10, 0xf0, 0x00};
  116. irsend.reset();
  117. irsend.sendKelvinator(kelv_short_code, 15);
  118. ASSERT_EQ("", irsend.outputStr());
  119. irsend.reset();
  120. // Shouldn't be different from the SendDataOnly. We just don't send the
  121. // extra data.
  122. irsend.sendKelvinator(kelv_long_code, 17);
  123. ASSERT_EQ(
  124. "m9010s4505"
  125. "m680s1530m680s510m680s510m680s1530m680s1530m680s510m680s510m680s510"
  126. "m680s1530m680s1530m680s510m680s1530m680s510m680s510m680s510m680s510"
  127. "m680s510m680s510m680s510m680s510m680s510m680s510m680s510m680s1530"
  128. "m680s510m680s510m680s510m680s510m680s1530m680s510m680s1530m680s510"
  129. "m680s510m680s1530m680s510"
  130. "m680s19975"
  131. "m680s510m680s510m680s510m680s510m680s510m680s510m680s510m680s510"
  132. "m680s510m680s510m680s510m680s510m680s510m680s510m680s510m680s510"
  133. "m680s510m680s510m680s510m680s510m680s510m680s510m680s510m680s510"
  134. "m680s510m680s510m680s510m680s510m680s510m680s1530m680s1530m680s1530"
  135. "m680s39950"
  136. "m9010s4505"
  137. "m680s1530m680s510m680s510m680s1530m680s1530m680s510m680s510m680s510"
  138. "m680s1530m680s1530m680s510m680s1530m680s510m680s510m680s510m680s510"
  139. "m680s510m680s510m680s510m680s510m680s510m680s510m680s510m680s1530"
  140. "m680s510m680s510m680s510m680s510m680s1530m680s1530m680s1530m680s510"
  141. "m680s510m680s1530m680s510"
  142. "m680s19975"
  143. "m680s510m680s510m680s510m680s510m680s510m680s510m680s510m680s510"
  144. "m680s510m680s510m680s510m680s510m680s510m680s510m680s510m680s510"
  145. "m680s510m680s510m680s510m680s510m680s1530m680s510m680s510m680s510"
  146. "m680s510m680s510m680s510m680s510m680s1530m680s1530m680s1530m680s1530"
  147. "m680s39950",
  148. irsend.outputStr());
  149. }
  150. // Tests for IRKelvinatorAC class.
  151. TEST(TestKelvinatorClass, Power) {
  152. IRKelvinatorAC irkelv(0);
  153. irkelv.begin();
  154. irkelv.on();
  155. EXPECT_TRUE(irkelv.getPower());
  156. irkelv.off();
  157. EXPECT_FALSE(irkelv.getPower());
  158. irkelv.setPower(true);
  159. EXPECT_TRUE(irkelv.getPower());
  160. irkelv.setPower(false);
  161. EXPECT_FALSE(irkelv.getPower());
  162. }
  163. TEST(TestKelvinatorClass, Temperature) {
  164. IRKelvinatorAC irkelv(0);
  165. irkelv.begin();
  166. irkelv.setTemp(0);
  167. EXPECT_EQ(kKelvinatorMinTemp, irkelv.getTemp());
  168. irkelv.setTemp(255);
  169. EXPECT_EQ(kKelvinatorMaxTemp, irkelv.getTemp());
  170. irkelv.setTemp(kKelvinatorMinTemp);
  171. EXPECT_EQ(kKelvinatorMinTemp, irkelv.getTemp());
  172. irkelv.setTemp(kKelvinatorMaxTemp);
  173. EXPECT_EQ(kKelvinatorMaxTemp, irkelv.getTemp());
  174. irkelv.setTemp(kKelvinatorMinTemp - 1);
  175. EXPECT_EQ(kKelvinatorMinTemp, irkelv.getTemp());
  176. irkelv.setTemp(kKelvinatorMaxTemp + 1);
  177. EXPECT_EQ(kKelvinatorMaxTemp, irkelv.getTemp());
  178. irkelv.setTemp(17);
  179. EXPECT_EQ(17, irkelv.getTemp());
  180. irkelv.setTemp(21);
  181. EXPECT_EQ(21, irkelv.getTemp());
  182. irkelv.setTemp(25);
  183. EXPECT_EQ(25, irkelv.getTemp());
  184. irkelv.setTemp(29);
  185. EXPECT_EQ(29, irkelv.getTemp());
  186. }
  187. TEST(TestKelvinatorClass, OperatingMode) {
  188. IRKelvinatorAC irkelv(0);
  189. irkelv.begin();
  190. irkelv.setTemp(24);
  191. irkelv.setMode(kKelvinatorAuto);
  192. EXPECT_EQ(kKelvinatorAuto, irkelv.getMode());
  193. EXPECT_EQ(kKelvinatorAutoTemp, irkelv.getTemp());
  194. irkelv.setMode(kKelvinatorCool);
  195. EXPECT_EQ(kKelvinatorCool, irkelv.getMode());
  196. irkelv.setMode(kKelvinatorHeat);
  197. EXPECT_EQ(kKelvinatorHeat, irkelv.getMode());
  198. irkelv.setTemp(24);
  199. irkelv.setMode(kKelvinatorDry);
  200. EXPECT_EQ(kKelvinatorDry, irkelv.getMode());
  201. EXPECT_EQ(kKelvinatorAutoTemp, irkelv.getTemp());
  202. irkelv.setMode(kKelvinatorFan);
  203. EXPECT_EQ(kKelvinatorFan, irkelv.getMode());
  204. irkelv.setMode(kKelvinatorHeat + 1);
  205. EXPECT_EQ(kKelvinatorAuto, irkelv.getMode());
  206. irkelv.setMode(255);
  207. EXPECT_EQ(kKelvinatorAuto, irkelv.getMode());
  208. }
  209. TEST(TestKelvinatorClass, VaneSwing) {
  210. IRKelvinatorAC irkelv(0);
  211. irkelv.begin();
  212. irkelv.setSwingHorizontal(true);
  213. irkelv.setSwingVertical(false);
  214. irkelv.setSwingHorizontal(true);
  215. EXPECT_TRUE(irkelv.getSwingHorizontal());
  216. EXPECT_FALSE(irkelv.getSwingVertical());
  217. irkelv.setSwingVertical(true);
  218. EXPECT_TRUE(irkelv.getSwingHorizontal());
  219. EXPECT_TRUE(irkelv.getSwingVertical());
  220. irkelv.setSwingHorizontal(false);
  221. EXPECT_FALSE(irkelv.getSwingHorizontal());
  222. EXPECT_TRUE(irkelv.getSwingVertical());
  223. irkelv.setSwingVertical(false);
  224. EXPECT_FALSE(irkelv.getSwingHorizontal());
  225. EXPECT_FALSE(irkelv.getSwingVertical());
  226. }
  227. TEST(TestKelvinatorClass, QuietMode) {
  228. IRKelvinatorAC irkelv(0);
  229. irkelv.begin();
  230. irkelv.setQuiet(true);
  231. EXPECT_TRUE(irkelv.getQuiet());
  232. irkelv.setQuiet(false);
  233. EXPECT_FALSE(irkelv.getQuiet());
  234. irkelv.setQuiet(true);
  235. EXPECT_TRUE(irkelv.getQuiet());
  236. }
  237. TEST(TestKelvinatorClass, IonFilter) {
  238. IRKelvinatorAC irkelv(0);
  239. irkelv.begin();
  240. irkelv.setIonFilter(true);
  241. EXPECT_TRUE(irkelv.getIonFilter());
  242. irkelv.setIonFilter(false);
  243. EXPECT_FALSE(irkelv.getIonFilter());
  244. irkelv.setIonFilter(true);
  245. EXPECT_TRUE(irkelv.getIonFilter());
  246. }
  247. TEST(TestKelvinatorClass, Light) {
  248. IRKelvinatorAC irkelv(0);
  249. irkelv.begin();
  250. irkelv.setLight(true);
  251. EXPECT_TRUE(irkelv.getLight());
  252. irkelv.setLight(false);
  253. EXPECT_FALSE(irkelv.getLight());
  254. irkelv.setLight(true);
  255. EXPECT_TRUE(irkelv.getLight());
  256. }
  257. TEST(TestKelvinatorClass, XFan) {
  258. IRKelvinatorAC irkelv(0);
  259. irkelv.begin();
  260. irkelv.setXFan(true);
  261. EXPECT_TRUE(irkelv.getXFan());
  262. irkelv.setXFan(false);
  263. EXPECT_FALSE(irkelv.getXFan());
  264. irkelv.setXFan(true);
  265. EXPECT_TRUE(irkelv.getXFan());
  266. }
  267. TEST(TestKelvinatorClass, TurboFan) {
  268. IRKelvinatorAC irkelv(0);
  269. irkelv.begin();
  270. irkelv.setTurbo(true);
  271. EXPECT_TRUE(irkelv.getTurbo());
  272. irkelv.setTurbo(false);
  273. EXPECT_FALSE(irkelv.getTurbo());
  274. irkelv.setFan(2);
  275. irkelv.setTurbo(true);
  276. EXPECT_TRUE(irkelv.getTurbo());
  277. // Turbo mode is turned off if the temperature is changed.
  278. irkelv.setFan(3);
  279. EXPECT_FALSE(irkelv.getTurbo());
  280. // But only when it is changed, not set to the same value again.
  281. irkelv.setTurbo(true);
  282. irkelv.setFan(3);
  283. EXPECT_TRUE(irkelv.getTurbo());
  284. }
  285. TEST(TestKelvinatorClass, FanSpeed) {
  286. IRKelvinatorAC irkelv(0);
  287. irkelv.begin();
  288. irkelv.setFan(0);
  289. EXPECT_EQ(0, irkelv.getFan());
  290. irkelv.setFan(255);
  291. EXPECT_EQ(kKelvinatorFanMax, irkelv.getFan());
  292. irkelv.setFan(kKelvinatorFanMax);
  293. EXPECT_EQ(kKelvinatorFanMax, irkelv.getFan());
  294. irkelv.setFan(kKelvinatorFanMax + 1);
  295. EXPECT_EQ(kKelvinatorFanMax, irkelv.getFan());
  296. irkelv.setFan(kKelvinatorFanMax - 1);
  297. EXPECT_EQ(kKelvinatorFanMax - 1, irkelv.getFan());
  298. irkelv.setFan(1);
  299. EXPECT_EQ(1, irkelv.getFan());
  300. irkelv.setFan(1);
  301. EXPECT_EQ(1, irkelv.getFan());
  302. irkelv.setFan(3);
  303. EXPECT_EQ(3, irkelv.getFan());
  304. }
  305. TEST(TestKelvinatorClass, Checksums) {
  306. uint8_t kelv_code[kKelvinatorStateLength] = {
  307. 0x19, 0x0B, 0x80, 0x50, 0x00, 0x00, 0x00, 0xE0,
  308. 0x19, 0x0B, 0x80, 0x70, 0x00, 0x00, 0x10, 0xf0};
  309. EXPECT_TRUE(IRKelvinatorAC::validChecksum(kelv_code));
  310. // Change the array so the checksum is invalid.
  311. kelv_code[0] ^= 0xFF;
  312. EXPECT_FALSE(IRKelvinatorAC::validChecksum(kelv_code));
  313. // Restore the previous change, and change another byte.
  314. kelv_code[0] ^= 0xFF;
  315. kelv_code[4] ^= 0xFF;
  316. EXPECT_FALSE(IRKelvinatorAC::validChecksum(kelv_code));
  317. kelv_code[4] ^= 0xFF;
  318. // Change something in the 2nd block.
  319. kelv_code[10] ^= 0xFF;
  320. EXPECT_FALSE(IRKelvinatorAC::validChecksum(kelv_code));
  321. kelv_code[10] ^= 0xFF;
  322. EXPECT_TRUE(IRKelvinatorAC::validChecksum(kelv_code));
  323. }
  324. TEST(TestKelvinatorClass, SetAndGetRaw) {
  325. IRKelvinatorAC irkelv(0);
  326. uint8_t initialState[kKelvinatorStateLength] = {
  327. 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0xA0,
  328. 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0xA0};
  329. uint8_t expectedState[kKelvinatorStateLength] = {
  330. 0x08, 0x05, 0x20, 0x50, 0x00, 0x00, 0x00, 0x70,
  331. 0x08, 0x05, 0x20, 0x70, 0x00, 0x00, 0x00, 0x70};
  332. EXPECT_STATE_EQ(initialState, irkelv.getRaw(), kKelvinatorBits);
  333. // toggle the power state.
  334. irkelv.setPower(!irkelv.getPower());
  335. irkelv.setTemp(21);
  336. irkelv.setLight(true);
  337. EXPECT_STATE_EQ(expectedState, irkelv.getRaw(), kKelvinatorBits);
  338. irkelv.setRaw(initialState);
  339. EXPECT_STATE_EQ(initialState, irkelv.getRaw(), kKelvinatorBits);
  340. }
  341. TEST(TestKelvinatorClass, HumanReadable) {
  342. IRKelvinatorAC irkelv(0);
  343. EXPECT_EQ(
  344. "Power: Off, Mode: 0 (AUTO), Temp: 16C, Fan: 0 (AUTO), Turbo: Off, "
  345. "Quiet: Off, XFan: Off, IonFilter: Off, Light: Off, "
  346. "Swing (Horizontal): Off, Swing (Vertical): Off",
  347. irkelv.toString());
  348. irkelv.on();
  349. irkelv.setMode(kKelvinatorCool);
  350. irkelv.setTemp(25);
  351. irkelv.setFan(kKelvinatorFanMax);
  352. irkelv.setXFan(true);
  353. irkelv.setIonFilter(true);
  354. irkelv.setLight(true);
  355. irkelv.setSwingHorizontal(true);
  356. EXPECT_EQ(
  357. "Power: On, Mode: 1 (COOL), Temp: 25C, Fan: 5 (MAX), Turbo: Off, "
  358. "Quiet: Off, XFan: On, IonFilter: On, Light: On, "
  359. "Swing (Horizontal): On, Swing (Vertical): Off",
  360. irkelv.toString());
  361. }
  362. TEST(TestKelvinatorClass, MessageConstuction) {
  363. IRKelvinatorAC irkelv(0);
  364. IRsendTest irsend(4);
  365. irkelv.begin();
  366. irsend.begin();
  367. irkelv.setFan(1);
  368. irkelv.setMode(kKelvinatorCool);
  369. irkelv.setTemp(27);
  370. irkelv.setSwingVertical(false);
  371. irkelv.setSwingHorizontal(true);
  372. irkelv.setIonFilter(true);
  373. irkelv.setQuiet(false);
  374. irkelv.setLight(false);
  375. irkelv.setPower(true);
  376. irkelv.setTurbo(false);
  377. irkelv.setXFan(true);
  378. // Check everything for kicks.
  379. EXPECT_EQ(1, irkelv.getFan());
  380. EXPECT_EQ(kKelvinatorCool, irkelv.getMode());
  381. EXPECT_EQ(27, irkelv.getTemp());
  382. EXPECT_FALSE(irkelv.getSwingVertical());
  383. EXPECT_TRUE(irkelv.getSwingHorizontal());
  384. EXPECT_TRUE(irkelv.getIonFilter());
  385. EXPECT_FALSE(irkelv.getQuiet());
  386. EXPECT_FALSE(irkelv.getLight());
  387. EXPECT_TRUE(irkelv.getPower());
  388. EXPECT_FALSE(irkelv.getTurbo());
  389. EXPECT_TRUE(irkelv.getXFan());
  390. irsend.reset();
  391. irsend.sendKelvinator(irkelv.getRaw());
  392. EXPECT_EQ(
  393. "m9010s4505"
  394. "m680s1530m680s510m680s510m680s1530m680s1530m680s510m680s1530m680s510"
  395. "m680s1530m680s1530m680s510m680s1530m680s510m680s510m680s510m680s510"
  396. "m680s510m680s510m680s510m680s510m680s510m680s510m680s1530m680s1530"
  397. "m680s510m680s510m680s510m680s510m680s1530m680s510m680s1530m680s510"
  398. "m680s510m680s1530m680s510"
  399. "m680s19975"
  400. "m680s510m680s510m680s510m680s510m680s1530m680s510m680s510m680s510"
  401. "m680s510m680s510m680s510m680s510m680s510m680s510m680s510m680s510"
  402. "m680s510m680s510m680s510m680s510m680s510m680s510m680s510m680s510"
  403. "m680s510m680s510m680s510m680s510m680s1530m680s1530m680s1530m680s1530"
  404. "m680s39950"
  405. "m9010s4505"
  406. "m680s1530m680s510m680s510m680s1530m680s1530m680s510m680s1530m680s510"
  407. "m680s1530m680s1530m680s510m680s1530m680s510m680s510m680s510m680s510"
  408. "m680s510m680s510m680s510m680s510m680s510m680s510m680s1530m680s1530"
  409. "m680s510m680s510m680s510m680s510m680s1530m680s1530m680s1530m680s510"
  410. "m680s510m680s1530m680s510"
  411. "m680s19975"
  412. "m680s510m680s510m680s510m680s510m680s510m680s510m680s510m680s510"
  413. "m680s510m680s510m680s510m680s510m680s510m680s510m680s510m680s510"
  414. "m680s510m680s510m680s510m680s510m680s1530m680s510m680s510m680s510"
  415. "m680s510m680s510m680s510m680s510m680s1530m680s1530m680s1530m680s1530"
  416. "m680s39950",
  417. irsend.outputStr());
  418. }
  419. // Decode a synthetic Kelvinator message.
  420. TEST(TestDecodeKelvinator, NormalSynthetic) {
  421. IRsendTest irsend(4);
  422. IRrecv irrecv(4);
  423. irsend.begin();
  424. uint8_t kelv_code[kKelvinatorStateLength] = {
  425. 0x19, 0x0B, 0x80, 0x50, 0x00, 0x00, 0x00, 0xE0,
  426. 0x19, 0x0B, 0x80, 0x70, 0x00, 0x00, 0x10, 0xf0};
  427. irsend.reset();
  428. irsend.sendKelvinator(kelv_code);
  429. irsend.makeDecodeResult();
  430. EXPECT_TRUE(irrecv.decode(&irsend.capture));
  431. EXPECT_EQ(KELVINATOR, irsend.capture.decode_type);
  432. ASSERT_EQ(kKelvinatorBits, irsend.capture.bits);
  433. EXPECT_STATE_EQ(kelv_code, irsend.capture.state, kKelvinatorBits);
  434. }