ir_Gree_test.cpp 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527
  1. // Copyright 2017 David Conran
  2. #include "ir_Gree.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 sendGree().
  10. // Test sending typical data only.
  11. TEST(TestSendGreeChars, SendData) {
  12. IRsendTest irsend(4);
  13. irsend.begin();
  14. uint8_t gree_code[kGreeStateLength] = {0x12, 0x34, 0x56, 0x78,
  15. 0x90, 0xAB, 0xCD, 0xEF};
  16. irsend.reset();
  17. irsend.sendGree(gree_code);
  18. EXPECT_EQ(
  19. "m9000s4000"
  20. "m620s540m620s1600m620s540m620s540m620s1600m620s540m620s540m620s540"
  21. "m620s540m620s540m620s1600m620s540m620s1600m620s1600m620s540m620s540"
  22. "m620s540m620s1600m620s1600m620s540m620s1600m620s540m620s1600m620s540"
  23. "m620s540m620s540m620s540m620s1600m620s1600m620s1600m620s1600m620s540"
  24. "m620s540m620s1600m620s540"
  25. "m620s19000"
  26. "m620s540m620s540m620s540m620s540m620s1600m620s540m620s540m620s1600"
  27. "m620s1600m620s1600m620s540m620s1600m620s540m620s1600m620s540m620s1600"
  28. "m620s1600m620s540m620s1600m620s1600m620s540m620s540m620s1600m620s1600"
  29. "m620s1600m620s1600m620s1600m620s1600m620s540m620s1600m620s1600m620s1600"
  30. "m620s19000",
  31. irsend.outputStr());
  32. }
  33. TEST(TestSendGreeUint64, SendData) {
  34. IRsendTest irsend(4);
  35. irsend.begin();
  36. irsend.reset();
  37. irsend.sendGree(0x1234567890ABCDEF);
  38. EXPECT_EQ(
  39. "m9000s4000"
  40. "m620s540m620s1600m620s540m620s540m620s1600m620s540m620s540m620s540"
  41. "m620s540m620s540m620s1600m620s540m620s1600m620s1600m620s540m620s540"
  42. "m620s540m620s1600m620s1600m620s540m620s1600m620s540m620s1600m620s540"
  43. "m620s540m620s540m620s540m620s1600m620s1600m620s1600m620s1600m620s540"
  44. "m620s540m620s1600m620s540"
  45. "m620s19000"
  46. "m620s540m620s540m620s540m620s540m620s1600m620s540m620s540m620s1600"
  47. "m620s1600m620s1600m620s540m620s1600m620s540m620s1600m620s540m620s1600"
  48. "m620s1600m620s540m620s1600m620s1600m620s540m620s540m620s1600m620s1600"
  49. "m620s1600m620s1600m620s1600m620s1600m620s540m620s1600m620s1600m620s1600"
  50. "m620s19000",
  51. irsend.outputStr());
  52. }
  53. // Test sending with repeats.
  54. TEST(TestSendGreeChars, SendWithRepeats) {
  55. IRsendTest irsend(4);
  56. irsend.begin();
  57. irsend.reset();
  58. uint8_t gree_code[kGreeStateLength] = {0x12, 0x34, 0x56, 0x78,
  59. 0x90, 0xAB, 0xCD, 0xEF};
  60. irsend.reset();
  61. irsend.sendGree(gree_code, kGreeStateLength, 1);
  62. EXPECT_EQ(
  63. "m9000s4000"
  64. "m620s540m620s1600m620s540m620s540m620s1600m620s540m620s540m620s540"
  65. "m620s540m620s540m620s1600m620s540m620s1600m620s1600m620s540m620s540"
  66. "m620s540m620s1600m620s1600m620s540m620s1600m620s540m620s1600m620s540"
  67. "m620s540m620s540m620s540m620s1600m620s1600m620s1600m620s1600m620s540"
  68. "m620s540m620s1600m620s540"
  69. "m620s19000"
  70. "m620s540m620s540m620s540m620s540m620s1600m620s540m620s540m620s1600"
  71. "m620s1600m620s1600m620s540m620s1600m620s540m620s1600m620s540m620s1600"
  72. "m620s1600m620s540m620s1600m620s1600m620s540m620s540m620s1600m620s1600"
  73. "m620s1600m620s1600m620s1600m620s1600m620s540m620s1600m620s1600m620s1600"
  74. "m620s19000"
  75. "m9000s4000"
  76. "m620s540m620s1600m620s540m620s540m620s1600m620s540m620s540m620s540"
  77. "m620s540m620s540m620s1600m620s540m620s1600m620s1600m620s540m620s540"
  78. "m620s540m620s1600m620s1600m620s540m620s1600m620s540m620s1600m620s540"
  79. "m620s540m620s540m620s540m620s1600m620s1600m620s1600m620s1600m620s540"
  80. "m620s540m620s1600m620s540"
  81. "m620s19000"
  82. "m620s540m620s540m620s540m620s540m620s1600m620s540m620s540m620s1600"
  83. "m620s1600m620s1600m620s540m620s1600m620s540m620s1600m620s540m620s1600"
  84. "m620s1600m620s540m620s1600m620s1600m620s540m620s540m620s1600m620s1600"
  85. "m620s1600m620s1600m620s1600m620s1600m620s540m620s1600m620s1600m620s1600"
  86. "m620s19000",
  87. irsend.outputStr());
  88. }
  89. TEST(TestSendGreeUint64, SendWithRepeats) {
  90. IRsendTest irsend(4);
  91. irsend.begin();
  92. irsend.reset();
  93. irsend.sendGree(0x1234567890ABCDEF, kGreeBits, 1);
  94. EXPECT_EQ(
  95. "m9000s4000"
  96. "m620s540m620s1600m620s540m620s540m620s1600m620s540m620s540m620s540"
  97. "m620s540m620s540m620s1600m620s540m620s1600m620s1600m620s540m620s540"
  98. "m620s540m620s1600m620s1600m620s540m620s1600m620s540m620s1600m620s540"
  99. "m620s540m620s540m620s540m620s1600m620s1600m620s1600m620s1600m620s540"
  100. "m620s540m620s1600m620s540"
  101. "m620s19000"
  102. "m620s540m620s540m620s540m620s540m620s1600m620s540m620s540m620s1600"
  103. "m620s1600m620s1600m620s540m620s1600m620s540m620s1600m620s540m620s1600"
  104. "m620s1600m620s540m620s1600m620s1600m620s540m620s540m620s1600m620s1600"
  105. "m620s1600m620s1600m620s1600m620s1600m620s540m620s1600m620s1600m620s1600"
  106. "m620s19000"
  107. "m9000s4000"
  108. "m620s540m620s1600m620s540m620s540m620s1600m620s540m620s540m620s540"
  109. "m620s540m620s540m620s1600m620s540m620s1600m620s1600m620s540m620s540"
  110. "m620s540m620s1600m620s1600m620s540m620s1600m620s540m620s1600m620s540"
  111. "m620s540m620s540m620s540m620s1600m620s1600m620s1600m620s1600m620s540"
  112. "m620s540m620s1600m620s540"
  113. "m620s19000"
  114. "m620s540m620s540m620s540m620s540m620s1600m620s540m620s540m620s1600"
  115. "m620s1600m620s1600m620s540m620s1600m620s540m620s1600m620s540m620s1600"
  116. "m620s1600m620s540m620s1600m620s1600m620s540m620s540m620s1600m620s1600"
  117. "m620s1600m620s1600m620s1600m620s1600m620s540m620s1600m620s1600m620s1600"
  118. "m620s19000",
  119. irsend.outputStr());
  120. }
  121. // Test sending atypical sizes.
  122. TEST(TestSendGreeChars, SendUnexpectedSizes) {
  123. IRsendTest irsend(4);
  124. irsend.begin();
  125. uint8_t gree_short_code[kGreeStateLength - 1] = {0x12, 0x34, 0x56, 0x78,
  126. 0x90, 0xAB, 0xCD};
  127. uint8_t gree_long_code[kGreeStateLength + 1] = {0x12, 0x34, 0x56, 0x78, 0x90,
  128. 0xAB, 0xCD, 0xEF, 0x12};
  129. irsend.reset();
  130. irsend.sendGree(gree_short_code, kGreeStateLength - 1);
  131. ASSERT_EQ("", irsend.outputStr());
  132. irsend.reset();
  133. irsend.sendGree(gree_long_code, kGreeStateLength + 1);
  134. ASSERT_EQ(
  135. "m9000s4000"
  136. "m620s540m620s1600m620s540m620s540m620s1600m620s540m620s540m620s540"
  137. "m620s540m620s540m620s1600m620s540m620s1600m620s1600m620s540m620s540"
  138. "m620s540m620s1600m620s1600m620s540m620s1600m620s540m620s1600m620s540"
  139. "m620s540m620s540m620s540m620s1600m620s1600m620s1600m620s1600m620s540"
  140. "m620s540m620s1600m620s540"
  141. "m620s19000"
  142. "m620s540m620s540m620s540m620s540m620s1600m620s540m620s540m620s1600"
  143. "m620s1600m620s1600m620s540m620s1600m620s540m620s1600m620s540m620s1600"
  144. "m620s1600m620s540m620s1600m620s1600m620s540m620s540m620s1600m620s1600"
  145. "m620s1600m620s1600m620s1600m620s1600m620s540m620s1600m620s1600m620s1600"
  146. "m620s540m620s1600m620s540m620s540m620s1600m620s540m620s540m620s540"
  147. "m620s19000",
  148. irsend.outputStr());
  149. }
  150. TEST(TestSendGreeUint64, SendUnexpectedSizes) {
  151. IRsendTest irsend(4);
  152. irsend.begin();
  153. irsend.reset();
  154. irsend.sendGree(0x1234567890ABCDEF, kGreeBits - 1);
  155. ASSERT_EQ("", irsend.outputStr());
  156. irsend.reset();
  157. irsend.sendGree(0x1234567890ABCDEF, kGreeBits + 1);
  158. ASSERT_EQ("", irsend.outputStr());
  159. }
  160. TEST(TestSendGree, CompareUint64ToCharResults) {
  161. IRsendTest irsend_chars(4);
  162. IRsendTest irsend_uint64(0);
  163. uint8_t gree_code[kGreeStateLength] = {0x12, 0x34, 0x56, 0x78,
  164. 0x90, 0xAB, 0xCD, 0xEF};
  165. irsend_chars.begin();
  166. irsend_uint64.begin();
  167. irsend_chars.reset();
  168. irsend_uint64.reset();
  169. irsend_chars.sendGree(gree_code);
  170. irsend_uint64.sendGree(0x1234567890ABCDEF);
  171. ASSERT_EQ(irsend_chars.outputStr(), irsend_uint64.outputStr());
  172. uint8_t gree_zero_code[kGreeStateLength] = {0x00, 0x00, 0x00, 0x00,
  173. 0x00, 0x00, 0x00, 0x00};
  174. irsend_chars.reset();
  175. irsend_uint64.reset();
  176. irsend_chars.sendGree(gree_zero_code);
  177. irsend_uint64.sendGree((uint64_t)0x0);
  178. ASSERT_EQ(irsend_chars.outputStr(), irsend_uint64.outputStr());
  179. }
  180. // Tests for IRGreeAC class.
  181. TEST(TestGreeClass, Power) {
  182. IRGreeAC irgree(0);
  183. irgree.begin();
  184. irgree.on();
  185. EXPECT_TRUE(irgree.getPower());
  186. irgree.off();
  187. EXPECT_FALSE(irgree.getPower());
  188. irgree.setPower(true);
  189. EXPECT_TRUE(irgree.getPower());
  190. irgree.setPower(false);
  191. EXPECT_FALSE(irgree.getPower());
  192. }
  193. TEST(TestGreeClass, Temperature) {
  194. IRGreeAC irgree(0);
  195. irgree.begin();
  196. irgree.setMode(kGreeCool);
  197. irgree.setTemp(0);
  198. EXPECT_EQ(kGreeMinTemp, irgree.getTemp());
  199. irgree.setTemp(255);
  200. EXPECT_EQ(kGreeMaxTemp, irgree.getTemp());
  201. irgree.setTemp(kGreeMinTemp);
  202. EXPECT_EQ(kGreeMinTemp, irgree.getTemp());
  203. irgree.setTemp(kGreeMaxTemp);
  204. EXPECT_EQ(kGreeMaxTemp, irgree.getTemp());
  205. irgree.setTemp(kGreeMinTemp - 1);
  206. EXPECT_EQ(kGreeMinTemp, irgree.getTemp());
  207. irgree.setTemp(kGreeMaxTemp + 1);
  208. EXPECT_EQ(kGreeMaxTemp, irgree.getTemp());
  209. irgree.setTemp(17);
  210. EXPECT_EQ(17, irgree.getTemp());
  211. irgree.setTemp(21);
  212. EXPECT_EQ(21, irgree.getTemp());
  213. irgree.setTemp(25);
  214. EXPECT_EQ(25, irgree.getTemp());
  215. irgree.setTemp(29);
  216. EXPECT_EQ(29, irgree.getTemp());
  217. }
  218. TEST(TestGreeClass, OperatingMode) {
  219. IRGreeAC irgree(0);
  220. irgree.begin();
  221. irgree.setTemp(17);
  222. irgree.setMode(kGreeAuto); // Auto should lock the temp to 25C.
  223. EXPECT_EQ(kGreeAuto, irgree.getMode());
  224. EXPECT_EQ(25, irgree.getTemp());
  225. irgree.setTemp(17);
  226. EXPECT_EQ(25, irgree.getTemp());
  227. irgree.setMode(kGreeCool);
  228. EXPECT_EQ(kGreeCool, irgree.getMode());
  229. irgree.setMode(kGreeHeat);
  230. EXPECT_EQ(kGreeHeat, irgree.getMode());
  231. ASSERT_NE(kGreeFanMax, 1);
  232. irgree.setFan(kGreeFanMax);
  233. irgree.setMode(kGreeDry); // Dry should lock the fan to speed 1.
  234. EXPECT_EQ(kGreeDry, irgree.getMode());
  235. EXPECT_EQ(1, irgree.getFan());
  236. irgree.setFan(kGreeFanMax);
  237. EXPECT_EQ(1, irgree.getFan());
  238. irgree.setMode(kGreeFan);
  239. EXPECT_EQ(kGreeFan, irgree.getMode());
  240. irgree.setMode(kGreeHeat + 1);
  241. EXPECT_EQ(kGreeAuto, irgree.getMode());
  242. irgree.setMode(255);
  243. EXPECT_EQ(kGreeAuto, irgree.getMode());
  244. }
  245. TEST(TestGreeClass, Light) {
  246. IRGreeAC irgree(0);
  247. irgree.begin();
  248. irgree.setLight(true);
  249. EXPECT_TRUE(irgree.getLight());
  250. irgree.setLight(false);
  251. EXPECT_FALSE(irgree.getLight());
  252. irgree.setLight(true);
  253. EXPECT_TRUE(irgree.getLight());
  254. }
  255. TEST(TestGreeClass, XFan) {
  256. IRGreeAC irgree(0);
  257. irgree.begin();
  258. irgree.setXFan(true);
  259. EXPECT_TRUE(irgree.getXFan());
  260. irgree.setXFan(false);
  261. EXPECT_FALSE(irgree.getXFan());
  262. irgree.setXFan(true);
  263. EXPECT_TRUE(irgree.getXFan());
  264. }
  265. TEST(TestGreeClass, Turbo) {
  266. IRGreeAC irgree(0);
  267. irgree.begin();
  268. irgree.setTurbo(true);
  269. EXPECT_TRUE(irgree.getTurbo());
  270. irgree.setTurbo(false);
  271. EXPECT_FALSE(irgree.getTurbo());
  272. irgree.setTurbo(true);
  273. EXPECT_TRUE(irgree.getTurbo());
  274. }
  275. TEST(TestGreeClass, Sleep) {
  276. IRGreeAC irgree(0);
  277. irgree.begin();
  278. irgree.setSleep(true);
  279. EXPECT_TRUE(irgree.getSleep());
  280. irgree.setSleep(false);
  281. EXPECT_FALSE(irgree.getSleep());
  282. irgree.setSleep(true);
  283. EXPECT_TRUE(irgree.getSleep());
  284. }
  285. TEST(TestGreeClass, FanSpeed) {
  286. IRGreeAC irgree(0);
  287. irgree.begin();
  288. irgree.setFan(0);
  289. EXPECT_EQ(0, irgree.getFan());
  290. irgree.setFan(255);
  291. EXPECT_EQ(kGreeFanMax, irgree.getFan());
  292. irgree.setFan(kGreeFanMax);
  293. EXPECT_EQ(kGreeFanMax, irgree.getFan());
  294. irgree.setFan(kGreeFanMax + 1);
  295. EXPECT_EQ(kGreeFanMax, irgree.getFan());
  296. irgree.setFan(kGreeFanMax - 1);
  297. EXPECT_EQ(kGreeFanMax - 1, irgree.getFan());
  298. irgree.setFan(1);
  299. EXPECT_EQ(1, irgree.getFan());
  300. irgree.setFan(1);
  301. EXPECT_EQ(1, irgree.getFan());
  302. irgree.setFan(3);
  303. EXPECT_EQ(3, irgree.getFan());
  304. }
  305. TEST(TestGreeClass, VerticalSwing) {
  306. IRGreeAC irgree(0);
  307. irgree.begin();
  308. EXPECT_FALSE(irgree.getSwingVerticalAuto());
  309. EXPECT_EQ(kGreeSwingLastPos, irgree.getSwingVerticalPosition());
  310. irgree.setSwingVertical(true, kGreeSwingAuto);
  311. EXPECT_TRUE(irgree.getSwingVerticalAuto());
  312. EXPECT_EQ(kGreeSwingAuto, irgree.getSwingVerticalPosition());
  313. irgree.setSwingVertical(false, kGreeSwingMiddle);
  314. EXPECT_FALSE(irgree.getSwingVerticalAuto());
  315. EXPECT_EQ(kGreeSwingMiddle, irgree.getSwingVerticalPosition());
  316. irgree.setSwingVertical(true, kGreeSwingDownAuto);
  317. EXPECT_TRUE(irgree.getSwingVerticalAuto());
  318. EXPECT_EQ(kGreeSwingDownAuto, irgree.getSwingVerticalPosition());
  319. // Out of bounds.
  320. irgree.setSwingVertical(false, 255);
  321. EXPECT_FALSE(irgree.getSwingVerticalAuto());
  322. EXPECT_EQ(kGreeSwingLastPos, irgree.getSwingVerticalPosition());
  323. irgree.setSwingVertical(false, kGreeSwingAuto);
  324. EXPECT_FALSE(irgree.getSwingVerticalAuto());
  325. EXPECT_EQ(kGreeSwingLastPos, irgree.getSwingVerticalPosition());
  326. irgree.setSwingVertical(true, 255);
  327. EXPECT_TRUE(irgree.getSwingVerticalAuto());
  328. EXPECT_EQ(kGreeSwingAuto, irgree.getSwingVerticalPosition());
  329. irgree.setSwingVertical(true, kGreeSwingDown);
  330. EXPECT_TRUE(irgree.getSwingVerticalAuto());
  331. EXPECT_EQ(kGreeSwingAuto, irgree.getSwingVerticalPosition());
  332. }
  333. TEST(TestGreeClass, SetAndGetRaw) {
  334. IRGreeAC irgree(0);
  335. uint8_t initialState[kGreeStateLength] = {0x00, 0x09, 0x20, 0x50,
  336. 0x00, 0x20, 0x00, 0x50};
  337. uint8_t expectedState[kGreeStateLength] = {0xA9, 0x05, 0xD0, 0x50,
  338. 0x00, 0x20, 0x00, 0xA0};
  339. EXPECT_STATE_EQ(initialState, irgree.getRaw(), kGreeBits);
  340. // toggle the power state.
  341. irgree.setPower(!irgree.getPower());
  342. irgree.setMode(kGreeCool);
  343. irgree.setTemp(21);
  344. irgree.setFan(2);
  345. irgree.setLight(false);
  346. irgree.setTurbo(true);
  347. irgree.setSleep(true);
  348. irgree.setXFan(true);
  349. EXPECT_EQ(kGreeCool, irgree.getMode());
  350. EXPECT_EQ(21, irgree.getTemp());
  351. EXPECT_EQ(2, irgree.getFan());
  352. EXPECT_FALSE(irgree.getLight());
  353. EXPECT_TRUE(irgree.getTurbo());
  354. EXPECT_TRUE(irgree.getSleep());
  355. EXPECT_TRUE(irgree.getXFan());
  356. EXPECT_STATE_EQ(expectedState, irgree.getRaw(), kGreeBits);
  357. irgree.setRaw(initialState);
  358. EXPECT_STATE_EQ(initialState, irgree.getRaw(), kGreeBits);
  359. }
  360. TEST(TestGreeClass, HumanReadable) {
  361. IRGreeAC irgree(0);
  362. EXPECT_EQ(
  363. "Power: Off, Mode: 0 (AUTO), Temp: 25C, Fan: 0 (AUTO), Turbo: Off, "
  364. "XFan: Off, Light: On, Sleep: Off, Swing Vertical Mode: Manual, "
  365. "Swing Vertical Pos: 0 (Last Pos)",
  366. irgree.toString());
  367. irgree.on();
  368. irgree.setMode(kGreeCool);
  369. irgree.setTemp(kGreeMinTemp);
  370. irgree.setFan(kGreeFanMax);
  371. irgree.setXFan(true);
  372. irgree.setSleep(true);
  373. irgree.setLight(false);
  374. irgree.setTurbo(true);
  375. irgree.setSwingVertical(true, kGreeSwingAuto);
  376. EXPECT_EQ(
  377. "Power: On, Mode: 1 (COOL), Temp: 16C, Fan: 3 (MAX), Turbo: On, "
  378. "XFan: On, Light: Off, Sleep: On, Swing Vertical Mode: Auto, "
  379. "Swing Vertical Pos: 1 (Auto)",
  380. irgree.toString());
  381. }
  382. // Tests for decodeGree().
  383. // Decode a synthetic Gree message.
  384. TEST(TestDecodeGree, NormalSynthetic) {
  385. IRsendTest irsend(4);
  386. IRrecv irrecv(4);
  387. irsend.begin();
  388. uint8_t gree_code[kGreeStateLength] = {0x00, 0x09, 0x20, 0x50,
  389. 0x00, 0x20, 0x00, 0x50};
  390. irsend.reset();
  391. irsend.sendGree(gree_code);
  392. irsend.makeDecodeResult();
  393. EXPECT_TRUE(irrecv.decode(&irsend.capture));
  394. EXPECT_EQ(GREE, irsend.capture.decode_type);
  395. ASSERT_EQ(kGreeBits, irsend.capture.bits);
  396. EXPECT_STATE_EQ(gree_code, irsend.capture.state, kGreeBits);
  397. }
  398. // Decode a synthetic Gree message.
  399. TEST(TestDecodeGree, NormalRealExample) {
  400. IRsendTest irsend(4);
  401. IRrecv irrecv(4);
  402. IRGreeAC irgree(4);
  403. irsend.begin();
  404. uint8_t gree_code[kGreeStateLength] = {0x19, 0x0A, 0x60, 0x50,
  405. 0x02, 0x23, 0x00, 0xF0};
  406. // Ref: https://github.com/markszabo/IRremoteESP8266/issues/386
  407. uint16_t rawData[139] = {
  408. 9008, 4496, 644, 1660, 676, 530, 648, 558, 672, 1636, 646, 1660,
  409. 644, 556, 650, 584, 626, 560, 644, 580, 628, 1680, 624, 560,
  410. 648, 1662, 644, 582, 648, 536, 674, 530, 646, 580, 628, 560,
  411. 670, 532, 646, 562, 644, 556, 672, 536, 648, 1662, 646, 1660,
  412. 652, 554, 644, 558, 672, 538, 644, 560, 668, 560, 648, 1638,
  413. 668, 536, 644, 1660, 668, 532, 648, 560, 648, 1660, 674, 554,
  414. 622, 19990, 646, 580, 624, 1660, 648, 556, 648, 558, 674, 556,
  415. 622, 560, 644, 564, 668, 536, 646, 1662, 646, 1658, 672, 534,
  416. 648, 558, 644, 562, 648, 1662, 644, 584, 622, 558, 648, 562,
  417. 668, 534, 670, 536, 670, 532, 672, 536, 646, 560, 646, 558,
  418. 648, 558, 670, 534, 650, 558, 646, 560, 646, 560, 668, 1638,
  419. 646, 1662, 646, 1660, 646, 1660, 648}; // Issue #386
  420. irsend.reset();
  421. irsend.sendRaw(rawData, 139, 38000);
  422. irsend.makeDecodeResult();
  423. EXPECT_TRUE(irrecv.decode(&irsend.capture));
  424. EXPECT_EQ(GREE, irsend.capture.decode_type);
  425. ASSERT_EQ(kGreeBits, irsend.capture.bits);
  426. EXPECT_STATE_EQ(gree_code, irsend.capture.state, kGreeBits);
  427. irgree.setRaw(irsend.capture.state);
  428. EXPECT_EQ(
  429. "Power: On, Mode: 1 (COOL), Temp: 26C, Fan: 1, Turbo: Off, "
  430. "XFan: Off, Light: On, Sleep: Off, Swing Vertical Mode: Manual, "
  431. "Swing Vertical Pos: 2",
  432. irgree.toString());
  433. }