ir_Daikin_test.cpp 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838
  1. // Copyright 2017 David Conran
  2. #include "ir_Daikin.h"
  3. #include "IRrecv.h"
  4. #include "IRrecv_test.h"
  5. #include "IRsend.h"
  6. #include "IRsend_test.h"
  7. #include "gtest/gtest.h"
  8. // Tests for sendDaikin().
  9. // Test sending typical data only.
  10. TEST(TestSendDaikin, SendDataOnly) {
  11. IRsendTest irsend(4);
  12. irsend.begin();
  13. uint8_t daikin_code[kDaikinStateLength] = {
  14. 0x11, 0xDA, 0x27, 0xF0, 0x00, 0x00, 0x00, 0x20, 0x11,
  15. 0xDA, 0x27, 0x00, 0x00, 0x41, 0x1E, 0x00, 0xB0, 0x00,
  16. 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0xE3};
  17. irsend.reset();
  18. irsend.sendDaikin(daikin_code);
  19. EXPECT_EQ(
  20. "m428s428m428s428m428s428m428s428m428s428"
  21. "m428s29428m3650s1623"
  22. "m428s1280m428s428m428s428m428s428m428s1280m428s428m428s428m428s428"
  23. "m428s428m428s1280m428s428m428s1280m428s1280m428s428m428s1280m428s1280"
  24. "m428s1280m428s1280m428s1280m428s428m428s428m428s1280m428s428m428s428"
  25. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  26. "m428s1280m428s428m428s1280m428s428m428s428m428s428m428s1280m428s1280"
  27. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  28. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  29. "m428s1280m428s1280m428s1280m428s428m428s1280m428s428m428s1280m428s1280"
  30. "m428s29428m3650s1623"
  31. "m428s1280m428s428m428s428m428s428m428s1280m428s428m428s428m428s428"
  32. "m428s428m428s1280m428s428m428s1280m428s1280m428s428m428s1280m428s1280"
  33. "m428s1280m428s1280m428s1280m428s428m428s428m428s1280m428s428m428s428"
  34. "m428s428m428s428m428s428m428s428m428s1280m428s1280m428s1280m428s1280"
  35. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  36. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  37. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  38. "m428s428m428s428m428s428m428s428m428s428m428s1280m428s428m428s428"
  39. "m428s29428m3650s1623"
  40. "m428s1280m428s428m428s428m428s428m428s1280m428s428m428s428m428s428"
  41. "m428s428m428s1280m428s428m428s1280m428s1280m428s428m428s1280m428s1280"
  42. "m428s1280m428s1280m428s1280m428s428m428s428m428s1280m428s428m428s428"
  43. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  44. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  45. "m428s1280m428s428m428s428m428s428m428s428m428s428m428s1280m428s428"
  46. "m428s428m428s1280m428s1280m428s1280m428s1280m428s428m428s428m428s428"
  47. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  48. "m428s428m428s428m428s428m428s428m428s1280m428s1280m428s428m428s1280"
  49. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  50. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  51. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  52. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  53. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  54. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  55. "m428s428m428s428m428s428m428s428m428s428m428s428m428s1280m428s1280"
  56. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  57. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  58. "m428s1280m428s1280m428s428m428s428m428s428m428s1280m428s1280m428s1280"
  59. "m428s29428",
  60. irsend.outputStr());
  61. }
  62. // Test sending with repeats.
  63. TEST(TestSendDaikin, SendWithRepeats) {
  64. IRsendTest irsend(4);
  65. irsend.begin();
  66. irsend.reset();
  67. uint8_t daikin_code[kDaikinStateLength] = {
  68. 0x11, 0xDA, 0x27, 0xF0, 0x00, 0x00, 0x00, 0x20, 0x11,
  69. 0xDA, 0x27, 0x00, 0x00, 0x41, 0x1E, 0x00, 0xB0, 0x00,
  70. 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0xE3};
  71. irsend.reset();
  72. irsend.sendDaikin(daikin_code, kDaikinStateLength, 1);
  73. EXPECT_EQ(
  74. "m428s428m428s428m428s428m428s428m428s428"
  75. "m428s29428m3650s1623"
  76. "m428s1280m428s428m428s428m428s428m428s1280m428s428m428s428m428s428"
  77. "m428s428m428s1280m428s428m428s1280m428s1280m428s428m428s1280m428s1280"
  78. "m428s1280m428s1280m428s1280m428s428m428s428m428s1280m428s428m428s428"
  79. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  80. "m428s1280m428s428m428s1280m428s428m428s428m428s428m428s1280m428s1280"
  81. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  82. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  83. "m428s1280m428s1280m428s1280m428s428m428s1280m428s428m428s1280m428s1280"
  84. "m428s29428m3650s1623"
  85. "m428s1280m428s428m428s428m428s428m428s1280m428s428m428s428m428s428"
  86. "m428s428m428s1280m428s428m428s1280m428s1280m428s428m428s1280m428s1280"
  87. "m428s1280m428s1280m428s1280m428s428m428s428m428s1280m428s428m428s428"
  88. "m428s428m428s428m428s428m428s428m428s1280m428s1280m428s1280m428s1280"
  89. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  90. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  91. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  92. "m428s428m428s428m428s428m428s428m428s428m428s1280m428s428m428s428"
  93. "m428s29428m3650s1623"
  94. "m428s1280m428s428m428s428m428s428m428s1280m428s428m428s428m428s428"
  95. "m428s428m428s1280m428s428m428s1280m428s1280m428s428m428s1280m428s1280"
  96. "m428s1280m428s1280m428s1280m428s428m428s428m428s1280m428s428m428s428"
  97. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  98. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  99. "m428s1280m428s428m428s428m428s428m428s428m428s428m428s1280m428s428"
  100. "m428s428m428s1280m428s1280m428s1280m428s1280m428s428m428s428m428s428"
  101. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  102. "m428s428m428s428m428s428m428s428m428s1280m428s1280m428s428m428s1280"
  103. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  104. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  105. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  106. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  107. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  108. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  109. "m428s428m428s428m428s428m428s428m428s428m428s428m428s1280m428s1280"
  110. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  111. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  112. "m428s1280m428s1280m428s428m428s428m428s428m428s1280m428s1280m428s1280"
  113. "m428s29428"
  114. "m428s428m428s428m428s428m428s428m428s428"
  115. "m428s29428m3650s1623"
  116. "m428s1280m428s428m428s428m428s428m428s1280m428s428m428s428m428s428"
  117. "m428s428m428s1280m428s428m428s1280m428s1280m428s428m428s1280m428s1280"
  118. "m428s1280m428s1280m428s1280m428s428m428s428m428s1280m428s428m428s428"
  119. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  120. "m428s1280m428s428m428s1280m428s428m428s428m428s428m428s1280m428s1280"
  121. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  122. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  123. "m428s1280m428s1280m428s1280m428s428m428s1280m428s428m428s1280m428s1280"
  124. "m428s29428m3650s1623"
  125. "m428s1280m428s428m428s428m428s428m428s1280m428s428m428s428m428s428"
  126. "m428s428m428s1280m428s428m428s1280m428s1280m428s428m428s1280m428s1280"
  127. "m428s1280m428s1280m428s1280m428s428m428s428m428s1280m428s428m428s428"
  128. "m428s428m428s428m428s428m428s428m428s1280m428s1280m428s1280m428s1280"
  129. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  130. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  131. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  132. "m428s428m428s428m428s428m428s428m428s428m428s1280m428s428m428s428"
  133. "m428s29428m3650s1623"
  134. "m428s1280m428s428m428s428m428s428m428s1280m428s428m428s428m428s428"
  135. "m428s428m428s1280m428s428m428s1280m428s1280m428s428m428s1280m428s1280"
  136. "m428s1280m428s1280m428s1280m428s428m428s428m428s1280m428s428m428s428"
  137. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  138. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  139. "m428s1280m428s428m428s428m428s428m428s428m428s428m428s1280m428s428"
  140. "m428s428m428s1280m428s1280m428s1280m428s1280m428s428m428s428m428s428"
  141. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  142. "m428s428m428s428m428s428m428s428m428s1280m428s1280m428s428m428s1280"
  143. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  144. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  145. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  146. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  147. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  148. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  149. "m428s428m428s428m428s428m428s428m428s428m428s428m428s1280m428s1280"
  150. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  151. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  152. "m428s1280m428s1280m428s428m428s428m428s428m428s1280m428s1280m428s1280"
  153. "m428s29428",
  154. irsend.outputStr());
  155. }
  156. // Test sending atypical sizes.
  157. TEST(TestSendDaikin, SendUnexpectedSizes) {
  158. IRsendTest irsend(4);
  159. irsend.begin();
  160. uint8_t daikin_short_code[kDaikinStateLength - 1] = {
  161. 0x11, 0xDA, 0x27, 0xF0, 0x00, 0x00, 0x00, 0x20, 0x11,
  162. 0xDA, 0x27, 0x00, 0x00, 0x41, 0x1E, 0x00, 0xB0, 0x00,
  163. 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00};
  164. irsend.reset();
  165. irsend.sendDaikin(daikin_short_code, kDaikinStateLength - 1);
  166. ASSERT_EQ("", irsend.outputStr());
  167. uint8_t daikin_long_code[kDaikinStateLength + 1] = {
  168. 0x11, 0xDA, 0x27, 0xF0, 0x00, 0x00, 0x00, 0x20, 0x11, 0xDA,
  169. 0x27, 0x00, 0x00, 0x41, 0x1E, 0x00, 0xB0, 0x00, 0x00, 0x00,
  170. 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0xE3, 0x11};
  171. irsend.reset();
  172. irsend.sendDaikin(daikin_long_code, kDaikinStateLength + 1);
  173. ASSERT_EQ(
  174. "m428s428m428s428m428s428m428s428m428s428"
  175. "m428s29428m3650s1623"
  176. "m428s1280m428s428m428s428m428s428m428s1280m428s428m428s428m428s428"
  177. "m428s428m428s1280m428s428m428s1280m428s1280m428s428m428s1280m428s1280"
  178. "m428s1280m428s1280m428s1280m428s428m428s428m428s1280m428s428m428s428"
  179. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  180. "m428s1280m428s428m428s1280m428s428m428s428m428s428m428s1280m428s1280"
  181. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  182. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  183. "m428s1280m428s1280m428s1280m428s428m428s1280m428s428m428s1280m428s1280"
  184. "m428s29428m3650s1623"
  185. "m428s1280m428s428m428s428m428s428m428s1280m428s428m428s428m428s428"
  186. "m428s428m428s1280m428s428m428s1280m428s1280m428s428m428s1280m428s1280"
  187. "m428s1280m428s1280m428s1280m428s428m428s428m428s1280m428s428m428s428"
  188. "m428s428m428s428m428s428m428s428m428s1280m428s1280m428s1280m428s1280"
  189. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  190. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  191. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  192. "m428s428m428s428m428s428m428s428m428s428m428s1280m428s428m428s428"
  193. "m428s29428m3650s1623"
  194. "m428s1280m428s428m428s428m428s428m428s1280m428s428m428s428m428s428"
  195. "m428s428m428s1280m428s428m428s1280m428s1280m428s428m428s1280m428s1280"
  196. "m428s1280m428s1280m428s1280m428s428m428s428m428s1280m428s428m428s428"
  197. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  198. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  199. "m428s1280m428s428m428s428m428s428m428s428m428s428m428s1280m428s428"
  200. "m428s428m428s1280m428s1280m428s1280m428s1280m428s428m428s428m428s428"
  201. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  202. "m428s428m428s428m428s428m428s428m428s1280m428s1280m428s428m428s1280"
  203. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  204. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  205. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  206. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  207. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  208. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  209. "m428s428m428s428m428s428m428s428m428s428m428s428m428s1280m428s1280"
  210. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  211. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  212. "m428s1280m428s1280m428s428m428s428m428s428m428s1280m428s1280m428s1280"
  213. "m428s1280m428s428m428s428m428s428m428s1280m428s428m428s428m428s428"
  214. "m428s29428",
  215. irsend.outputStr());
  216. }
  217. // Tests for IRDaikinESP class.
  218. TEST(TestDaikinClass, Power) {
  219. IRDaikinESP irdaikin(0);
  220. irdaikin.begin();
  221. irdaikin.on();
  222. EXPECT_TRUE(irdaikin.getPower());
  223. irdaikin.off();
  224. EXPECT_FALSE(irdaikin.getPower());
  225. irdaikin.setPower(true);
  226. EXPECT_TRUE(irdaikin.getPower());
  227. irdaikin.setPower(false);
  228. EXPECT_FALSE(irdaikin.getPower());
  229. }
  230. TEST(TestDaikinClass, Temperature) {
  231. IRDaikinESP irdaikin(0);
  232. irdaikin.begin();
  233. irdaikin.setTemp(0);
  234. EXPECT_EQ(kDaikinMinTemp, irdaikin.getTemp());
  235. irdaikin.setTemp(255);
  236. EXPECT_EQ(kDaikinMaxTemp, irdaikin.getTemp());
  237. irdaikin.setTemp(kDaikinMinTemp);
  238. EXPECT_EQ(kDaikinMinTemp, irdaikin.getTemp());
  239. irdaikin.setTemp(kDaikinMaxTemp);
  240. EXPECT_EQ(kDaikinMaxTemp, irdaikin.getTemp());
  241. irdaikin.setTemp(kDaikinMinTemp - 1);
  242. EXPECT_EQ(kDaikinMinTemp, irdaikin.getTemp());
  243. irdaikin.setTemp(kDaikinMaxTemp + 1);
  244. EXPECT_EQ(kDaikinMaxTemp, irdaikin.getTemp());
  245. irdaikin.setTemp(kDaikinMinTemp + 1);
  246. EXPECT_EQ(kDaikinMinTemp + 1, irdaikin.getTemp());
  247. irdaikin.setTemp(21);
  248. EXPECT_EQ(21, irdaikin.getTemp());
  249. irdaikin.setTemp(25);
  250. EXPECT_EQ(25, irdaikin.getTemp());
  251. irdaikin.setTemp(29);
  252. EXPECT_EQ(29, irdaikin.getTemp());
  253. }
  254. TEST(TestDaikinClass, OperatingMode) {
  255. IRDaikinESP irdaikin(0);
  256. irdaikin.begin();
  257. irdaikin.setMode(kDaikinAuto);
  258. EXPECT_EQ(kDaikinAuto, irdaikin.getMode());
  259. irdaikin.setMode(kDaikinCool);
  260. EXPECT_EQ(kDaikinCool, irdaikin.getMode());
  261. irdaikin.setMode(kDaikinHeat);
  262. EXPECT_EQ(kDaikinHeat, irdaikin.getMode());
  263. irdaikin.setMode(kDaikinDry);
  264. EXPECT_EQ(kDaikinDry, irdaikin.getMode());
  265. irdaikin.setMode(kDaikinFan);
  266. EXPECT_EQ(kDaikinFan, irdaikin.getMode());
  267. irdaikin.setMode(kDaikinFan + 1);
  268. EXPECT_EQ(kDaikinAuto, irdaikin.getMode());
  269. irdaikin.setMode(kDaikinAuto + 1);
  270. EXPECT_EQ(kDaikinAuto, irdaikin.getMode());
  271. irdaikin.setMode(255);
  272. EXPECT_EQ(kDaikinAuto, irdaikin.getMode());
  273. }
  274. TEST(TestDaikinClass, VaneSwing) {
  275. IRDaikinESP irdaikin(0);
  276. irdaikin.begin();
  277. irdaikin.setSwingHorizontal(true);
  278. irdaikin.setSwingVertical(false);
  279. irdaikin.setSwingHorizontal(true);
  280. EXPECT_TRUE(irdaikin.getSwingHorizontal());
  281. EXPECT_FALSE(irdaikin.getSwingVertical());
  282. irdaikin.setSwingVertical(true);
  283. EXPECT_TRUE(irdaikin.getSwingHorizontal());
  284. EXPECT_TRUE(irdaikin.getSwingVertical());
  285. irdaikin.setSwingHorizontal(false);
  286. EXPECT_FALSE(irdaikin.getSwingHorizontal());
  287. EXPECT_TRUE(irdaikin.getSwingVertical());
  288. irdaikin.setSwingVertical(false);
  289. EXPECT_FALSE(irdaikin.getSwingHorizontal());
  290. EXPECT_FALSE(irdaikin.getSwingVertical());
  291. }
  292. TEST(TestDaikinClass, QuietMode) {
  293. IRDaikinESP irdaikin(0);
  294. irdaikin.begin();
  295. irdaikin.setQuiet(true);
  296. EXPECT_TRUE(irdaikin.getQuiet());
  297. irdaikin.setQuiet(false);
  298. EXPECT_FALSE(irdaikin.getQuiet());
  299. irdaikin.setQuiet(true);
  300. EXPECT_TRUE(irdaikin.getQuiet());
  301. // Setting Econo mode should NOT change out of quiet mode.
  302. irdaikin.setEcono(true);
  303. EXPECT_TRUE(irdaikin.getQuiet());
  304. irdaikin.setEcono(false);
  305. EXPECT_TRUE(irdaikin.getQuiet());
  306. // But setting Powerful mode should exit out of quiet mode.
  307. irdaikin.setPowerful(true);
  308. EXPECT_FALSE(irdaikin.getQuiet());
  309. }
  310. TEST(TestDaikinClass, PowerfulMode) {
  311. IRDaikinESP irdaikin(0);
  312. irdaikin.begin();
  313. irdaikin.setPowerful(true);
  314. EXPECT_TRUE(irdaikin.getPowerful());
  315. irdaikin.setPowerful(false);
  316. EXPECT_FALSE(irdaikin.getPowerful());
  317. irdaikin.setPowerful(true);
  318. EXPECT_TRUE(irdaikin.getPowerful());
  319. irdaikin.setQuiet(true);
  320. EXPECT_FALSE(irdaikin.getPowerful());
  321. irdaikin.setPowerful(true);
  322. irdaikin.setEcono(true);
  323. EXPECT_FALSE(irdaikin.getPowerful());
  324. }
  325. TEST(TestDaikinClass, EconoMode) {
  326. IRDaikinESP irdaikin(0);
  327. irdaikin.begin();
  328. irdaikin.setEcono(true);
  329. EXPECT_TRUE(irdaikin.getEcono());
  330. irdaikin.setEcono(false);
  331. EXPECT_FALSE(irdaikin.getEcono());
  332. irdaikin.setEcono(true);
  333. EXPECT_TRUE(irdaikin.getEcono());
  334. // Setting Quiet mode should NOT change out of Econo mode.
  335. irdaikin.setQuiet(true);
  336. EXPECT_TRUE(irdaikin.getEcono());
  337. irdaikin.setQuiet(false);
  338. EXPECT_TRUE(irdaikin.getEcono());
  339. // But setting Powerful mode should exit out of Econo mode.
  340. irdaikin.setPowerful(true);
  341. EXPECT_FALSE(irdaikin.getEcono());
  342. }
  343. TEST(TestDaikinClass, FanSpeed) {
  344. IRDaikinESP irdaikin(0);
  345. irdaikin.begin();
  346. // Unexpected value should default to Auto.
  347. irdaikin.setFan(0);
  348. EXPECT_EQ(kDaikinFanAuto, irdaikin.getFan());
  349. // Unexpected value should default to Auto.
  350. irdaikin.setFan(255);
  351. EXPECT_EQ(kDaikinFanAuto, irdaikin.getFan());
  352. irdaikin.setFan(kDaikinFanMax);
  353. EXPECT_EQ(kDaikinFanMax, irdaikin.getFan());
  354. // Beyond Max should default to Auto.
  355. irdaikin.setFan(kDaikinFanMax + 1);
  356. EXPECT_EQ(kDaikinFanAuto, irdaikin.getFan());
  357. irdaikin.setFan(kDaikinFanMax - 1);
  358. EXPECT_EQ(kDaikinFanMax - 1, irdaikin.getFan());
  359. irdaikin.setFan(kDaikinFanMin);
  360. EXPECT_EQ(kDaikinFanMin, irdaikin.getFan());
  361. irdaikin.setFan(kDaikinFanMin + 1);
  362. EXPECT_EQ(kDaikinFanMin + 1, irdaikin.getFan());
  363. // Beyond Min should default to Auto.
  364. irdaikin.setFan(kDaikinFanMin - 1);
  365. EXPECT_EQ(kDaikinFanAuto, irdaikin.getFan());
  366. irdaikin.setFan(3);
  367. EXPECT_EQ(3, irdaikin.getFan());
  368. irdaikin.setFan(kDaikinFanAuto);
  369. EXPECT_EQ(kDaikinFanAuto, irdaikin.getFan());
  370. irdaikin.setFan(kDaikinFanQuiet);
  371. EXPECT_EQ(kDaikinFanQuiet, irdaikin.getFan());
  372. }
  373. TEST(TestDaikinClass, CurrentTime) {
  374. IRDaikinESP irdaikin(0);
  375. irdaikin.begin();
  376. irdaikin.setCurrentTime(0); // 00:00
  377. EXPECT_EQ(0, irdaikin.getCurrentTime());
  378. irdaikin.setCurrentTime(754); // 12:34
  379. EXPECT_EQ(754, irdaikin.getCurrentTime());
  380. irdaikin.setCurrentTime(1439); // 23:59
  381. EXPECT_EQ(1439, irdaikin.getCurrentTime());
  382. }
  383. TEST(TestDaikinClass, OnOffTimers) {
  384. IRDaikinESP irdaikin(0);
  385. irdaikin.begin();
  386. // Both timers turned off.
  387. irdaikin.disableOnTimer();
  388. irdaikin.disableOffTimer();
  389. EXPECT_FALSE(irdaikin.getOnTimerEnabled());
  390. EXPECT_EQ(0x600, irdaikin.getOnTime());
  391. EXPECT_FALSE(irdaikin.getOffTimerEnabled());
  392. EXPECT_EQ(0x600, irdaikin.getOffTime());
  393. // Turn on just the On Timer.
  394. irdaikin.enableOnTimer(123);
  395. EXPECT_TRUE(irdaikin.getOnTimerEnabled());
  396. EXPECT_EQ(123, irdaikin.getOnTime());
  397. EXPECT_FALSE(irdaikin.getOffTimerEnabled());
  398. EXPECT_EQ(0x600, irdaikin.getOffTime());
  399. // Now turn on the Off Timer.
  400. irdaikin.enableOffTimer(754);
  401. EXPECT_TRUE(irdaikin.getOffTimerEnabled());
  402. EXPECT_EQ(754, irdaikin.getOffTime());
  403. EXPECT_TRUE(irdaikin.getOnTimerEnabled());
  404. EXPECT_EQ(123, irdaikin.getOnTime());
  405. // Turn off the just the On Timer.
  406. irdaikin.disableOnTimer();
  407. EXPECT_FALSE(irdaikin.getOnTimerEnabled());
  408. EXPECT_EQ(0x600, irdaikin.getOnTime());
  409. EXPECT_TRUE(irdaikin.getOffTimerEnabled());
  410. EXPECT_EQ(754, irdaikin.getOffTime());
  411. // Now turn off the Off Timer.
  412. irdaikin.disableOffTimer();
  413. EXPECT_FALSE(irdaikin.getOffTimerEnabled());
  414. EXPECT_EQ(0x600, irdaikin.getOffTime());
  415. EXPECT_FALSE(irdaikin.getOnTimerEnabled());
  416. EXPECT_EQ(0x600, irdaikin.getOnTime());
  417. // Use some canary values around the timers to ensure no accidental
  418. // bit flips happen. i.e. Neighbouring bytes in the state.
  419. // (Found some during testing on systems with different endian-ness)
  420. // Tests here to make sure it never happens again.
  421. irdaikin.setSwingHorizontal(true);
  422. irdaikin.setPowerful(true);
  423. irdaikin.disableOffTimer();
  424. irdaikin.disableOnTimer();
  425. ASSERT_TRUE(irdaikin.getSwingHorizontal());
  426. ASSERT_TRUE(irdaikin.getPowerful());
  427. irdaikin.enableOnTimer(123);
  428. irdaikin.enableOffTimer(456);
  429. ASSERT_TRUE(irdaikin.getSwingHorizontal());
  430. ASSERT_TRUE(irdaikin.getPowerful());
  431. irdaikin.disableOffTimer();
  432. irdaikin.disableOnTimer();
  433. ASSERT_TRUE(irdaikin.getSwingHorizontal());
  434. ASSERT_TRUE(irdaikin.getPowerful());
  435. irdaikin.setSwingHorizontal(false);
  436. irdaikin.setPowerful(false);
  437. irdaikin.disableOffTimer();
  438. irdaikin.disableOnTimer();
  439. ASSERT_FALSE(irdaikin.getSwingHorizontal());
  440. ASSERT_FALSE(irdaikin.getPowerful());
  441. irdaikin.enableOnTimer(123);
  442. irdaikin.enableOffTimer(456);
  443. ASSERT_FALSE(irdaikin.getSwingHorizontal());
  444. ASSERT_FALSE(irdaikin.getPowerful());
  445. irdaikin.disableOffTimer();
  446. irdaikin.disableOnTimer();
  447. ASSERT_FALSE(irdaikin.getSwingHorizontal());
  448. ASSERT_FALSE(irdaikin.getPowerful());
  449. }
  450. // Test Eye mode.
  451. TEST(TestDaikinClass, EyeSetting) {
  452. IRDaikinESP irdaikin(0);
  453. irdaikin.begin();
  454. // The Eye setting is stored in the same byte as Econo mode.
  455. // Econo mode tests are there to make sure it isn't harmed and vice-versa.
  456. irdaikin.setEcono(false);
  457. irdaikin.setEye(false);
  458. ASSERT_FALSE(irdaikin.getEye());
  459. EXPECT_FALSE(irdaikin.getEcono());
  460. irdaikin.setEye(true);
  461. ASSERT_TRUE(irdaikin.getEye());
  462. EXPECT_FALSE(irdaikin.getEcono());
  463. irdaikin.setEcono(false);
  464. ASSERT_TRUE(irdaikin.getEye());
  465. EXPECT_FALSE(irdaikin.getEcono());
  466. irdaikin.setEcono(true);
  467. ASSERT_TRUE(irdaikin.getEye());
  468. EXPECT_TRUE(irdaikin.getEcono());
  469. irdaikin.setEye(false);
  470. ASSERT_FALSE(irdaikin.getEye());
  471. EXPECT_TRUE(irdaikin.getEcono());
  472. }
  473. // Test Mold mode.
  474. TEST(TestDaikinClass, MoldSetting) {
  475. IRDaikinESP irdaikin(0);
  476. irdaikin.begin();
  477. irdaikin.setMold(false);
  478. ASSERT_FALSE(irdaikin.getMold());
  479. irdaikin.setMold(true);
  480. ASSERT_TRUE(irdaikin.getMold());
  481. irdaikin.setMold(false);
  482. ASSERT_FALSE(irdaikin.getMold());
  483. }
  484. // Test Sensor mode.
  485. TEST(TestDaikinClass, SensorSetting) {
  486. IRDaikinESP irdaikin(0);
  487. irdaikin.begin();
  488. irdaikin.setSensor(false);
  489. ASSERT_FALSE(irdaikin.getSensor());
  490. irdaikin.setSensor(true);
  491. ASSERT_TRUE(irdaikin.getSensor());
  492. irdaikin.setSensor(false);
  493. ASSERT_FALSE(irdaikin.getSensor());
  494. }
  495. TEST(TestDaikinClass, RenderTime) {
  496. EXPECT_EQ("0:00", IRDaikinESP::renderTime(0));
  497. EXPECT_EQ("0:10", IRDaikinESP::renderTime(10));
  498. EXPECT_EQ("1:00", IRDaikinESP::renderTime(1 * 60 + 0));
  499. EXPECT_EQ("23:59", IRDaikinESP::renderTime(23 * 60 + 59));
  500. }
  501. TEST(TestDaikinClass, SetAndGetRaw) {
  502. IRDaikinESP irdaikin(0);
  503. uint8_t initialState[kDaikinStateLength] = {
  504. 0x11, 0xDA, 0x27, 0x00, 0x42, 0x00, 0x00, 0x54, 0x11,
  505. 0xDA, 0x27, 0x00, 0x00, 0x49, 0x1E, 0x00, 0xB0, 0x00,
  506. 0x00, 0x06, 0x60, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x4F};
  507. uint8_t expectedState[kDaikinStateLength] = {
  508. 0x11, 0xDA, 0x27, 0x00, 0x42, 0x00, 0x00, 0x54, 0x11,
  509. 0xDA, 0x27, 0x00, 0x00, 0x48, 0x2A, 0x00, 0xB0, 0x00,
  510. 0x00, 0x06, 0x60, 0x00, 0x00, 0xC0, 0x00, 0x02, 0x5A};
  511. EXPECT_STATE_EQ(initialState, irdaikin.getRaw(), kDaikinBits);
  512. // toggle the power state.
  513. irdaikin.setPower(!irdaikin.getPower());
  514. irdaikin.setTemp(21);
  515. irdaikin.setMold(true);
  516. EXPECT_STATE_EQ(expectedState, irdaikin.getRaw(), kDaikinBits);
  517. irdaikin.setRaw(initialState);
  518. EXPECT_STATE_EQ(initialState, irdaikin.getRaw(), kDaikinBits);
  519. }
  520. TEST(TestDaikinClass, ChecksumValidation) {
  521. uint8_t daikin_code[kDaikinStateLength] = {
  522. 0x11, 0xDA, 0x27, 0xF0, 0x00, 0x00, 0x00, 0x02, 0x11,
  523. 0xDA, 0x27, 0x00, 0x00, 0x41, 0x1E, 0x00, 0xB0, 0x00,
  524. 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0xE1};
  525. EXPECT_TRUE(IRDaikinESP::validChecksum(daikin_code));
  526. // Change the array so the checksum is invalid.
  527. daikin_code[0] ^= 0xFF;
  528. EXPECT_FALSE(IRDaikinESP::validChecksum(daikin_code));
  529. // Restore the previous change, and change another byte.
  530. daikin_code[0] ^= 0xFF;
  531. daikin_code[4] ^= 0xFF;
  532. EXPECT_FALSE(IRDaikinESP::validChecksum(daikin_code));
  533. daikin_code[4] ^= 0xFF;
  534. // Change something in the 2nd block.
  535. daikin_code[10] ^= 0xFF;
  536. EXPECT_FALSE(IRDaikinESP::validChecksum(daikin_code));
  537. daikin_code[10] ^= 0xFF;
  538. EXPECT_TRUE(IRDaikinESP::validChecksum(daikin_code));
  539. }
  540. // Test human readable output.
  541. TEST(TestDaikinClass, HumanReadable) {
  542. IRDaikinESP irdaikin(0);
  543. EXPECT_EQ(
  544. "Power: On, Mode: 4 (HEAT), Temp: 15C, Fan: 11 (QUIET), "
  545. "Powerful: Off, Quiet: Off, Sensor: Off, Eye: Off, Mold: Off, "
  546. "Swing (Horizontal): Off, Swing (Vertical): Off, "
  547. "Current Time: 0:00, On Time: Off, Off Time: Off",
  548. irdaikin.toString());
  549. irdaikin.setMode(kDaikinAuto);
  550. irdaikin.setTemp(25);
  551. irdaikin.setFan(kDaikinFanAuto);
  552. irdaikin.setQuiet(true);
  553. irdaikin.setSensor(true);
  554. irdaikin.setEye(true);
  555. irdaikin.setMold(true);
  556. irdaikin.setSwingVertical(true);
  557. irdaikin.setSwingHorizontal(true);
  558. irdaikin.setCurrentTime(9 * 60 + 15);
  559. irdaikin.enableOnTimer(8 * 60 + 0);
  560. irdaikin.enableOffTimer(17 * 60 + 30);
  561. irdaikin.off();
  562. EXPECT_EQ(
  563. "Power: Off, Mode: 0 (AUTO), Temp: 25C, Fan: 10 (AUTO), "
  564. "Powerful: Off, Quiet: On, Sensor: On, Eye: On, Mold: On, "
  565. "Swing (Horizontal): On, Swing (Vertical): On, "
  566. "Current Time: 9:15, On Time: 8:00, Off Time: 17:30",
  567. irdaikin.toString());
  568. }
  569. // Test general message construction after tweaking some settings.
  570. TEST(TestDaikinClass, MessageConstuction) {
  571. IRDaikinESP irdaikin(0);
  572. IRsendTest irsend(4);
  573. irdaikin.begin();
  574. irsend.begin();
  575. irdaikin.setFan(kDaikinFanMin);
  576. irdaikin.setMode(kDaikinCool);
  577. irdaikin.setTemp(27);
  578. irdaikin.setSwingVertical(false);
  579. irdaikin.setSwingHorizontal(true);
  580. irdaikin.setQuiet(false);
  581. irdaikin.setPower(true);
  582. // Check everything for kicks.
  583. EXPECT_EQ(kDaikinFanMin, irdaikin.getFan());
  584. EXPECT_EQ(kDaikinCool, irdaikin.getMode());
  585. EXPECT_EQ(27, irdaikin.getTemp());
  586. EXPECT_FALSE(irdaikin.getSwingVertical());
  587. EXPECT_TRUE(irdaikin.getSwingHorizontal());
  588. EXPECT_FALSE(irdaikin.getQuiet());
  589. EXPECT_TRUE(irdaikin.getPower());
  590. irsend.reset();
  591. irsend.sendDaikin(irdaikin.getRaw());
  592. EXPECT_EQ(
  593. "m428s428m428s428m428s428m428s428m428s428"
  594. "m428s29428m3650s1623"
  595. "m428s1280m428s428m428s428m428s428m428s1280m428s428m428s428m428s428"
  596. "m428s428m428s1280m428s428m428s1280m428s1280m428s428m428s1280m428s1280"
  597. "m428s1280m428s1280m428s1280m428s428m428s428m428s1280m428s428m428s428"
  598. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  599. "m428s1280m428s428m428s1280m428s428m428s428m428s428m428s1280m428s1280"
  600. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  601. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  602. "m428s1280m428s1280m428s1280m428s428m428s1280m428s428m428s1280m428s1280"
  603. "m428s29428m3650s1623"
  604. "m428s1280m428s428m428s428m428s428m428s1280m428s428m428s428m428s428"
  605. "m428s428m428s1280m428s428m428s1280m428s1280m428s428m428s1280m428s1280"
  606. "m428s1280m428s1280m428s1280m428s428m428s428m428s1280m428s428m428s428"
  607. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  608. "m428s428m428s1280m428s428m428s428m428s428m428s428m428s1280m428s428"
  609. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  610. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  611. "m428s428m428s428m428s1280m428s428m428s1280m428s428m428s1280m428s428"
  612. "m428s29428m3650s1623"
  613. "m428s1280m428s428m428s428m428s428m428s1280m428s428m428s428m428s428"
  614. "m428s428m428s1280m428s428m428s1280m428s1280m428s428m428s1280m428s1280"
  615. "m428s1280m428s1280m428s1280m428s428m428s428m428s1280m428s428m428s428"
  616. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  617. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  618. "m428s1280m428s428m428s428m428s1280m428s1280m428s1280m428s428m428s428"
  619. "m428s428m428s1280m428s1280m428s428m428s1280m428s1280m428s428m428s428"
  620. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  621. "m428s428m428s428m428s428m428s428m428s1280m428s1280m428s428m428s428"
  622. "m428s1280m428s1280m428s1280m428s1280m428s428m428s428m428s428m428s428"
  623. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  624. "m428s428m428s1280m428s1280m428s428m428s428m428s428m428s428m428s428"
  625. "m428s428m428s428m428s428m428s428m428s428m428s1280m428s1280m428s428"
  626. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  627. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  628. "m428s428m428s428m428s428m428s428m428s428m428s428m428s1280m428s1280"
  629. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  630. "m428s428m428s428m428s428m428s428m428s428m428s428m428s428m428s428"
  631. "m428s428m428s1280m428s1280m428s428m428s428m428s1280m428s1280m428s1280"
  632. "m428s29428",
  633. irsend.outputStr());
  634. }
  635. // Tests for decodeDaikin().
  636. // Test decoding a message captured from a real IR remote.
  637. TEST(TestDecodeDaikin, RealExample) {
  638. IRDaikinESP irdaikin(0);
  639. IRsendTest irsend(4);
  640. IRrecv irrecv(4);
  641. irsend.begin();
  642. uint8_t expectedState[kDaikinStateLength] = {
  643. 0x11, 0xDA, 0x27, 0x00, 0x42, 0x3A, 0x05, 0x93, 0x11,
  644. 0xDA, 0x27, 0x00, 0x00, 0x3F, 0x3A, 0x00, 0xA0, 0x00,
  645. 0x0A, 0x25, 0x17, 0x01, 0x00, 0xC0, 0x00, 0x00, 0x32};
  646. uint16_t rawData[kDaikinRawBits] = {
  647. 416, 446, 416, 446, 416, 446, 418, 446, 416, 446, 416, 25434,
  648. 3436, 1768, 390, 1336, 390, 446, 416, 446, 416, 446, 416, 1336,
  649. 390, 446, 416, 446, 416, 446, 416, 446, 416, 1336, 390, 448,
  650. 416, 1336, 390, 1336, 390, 448, 416, 1336, 390, 1336, 390, 1338,
  651. 388, 1338, 390, 1336, 390, 446, 416, 446, 416, 1336, 390, 446,
  652. 416, 446, 416, 446, 416, 446, 416, 446, 416, 446, 416, 448,
  653. 416, 446, 416, 446, 416, 446, 416, 1336, 390, 446, 416, 1336,
  654. 390, 448, 416, 446, 416, 446, 416, 1336, 390, 1336, 390, 446,
  655. 416, 446, 416, 446, 416, 446, 416, 446, 416, 446, 416, 446,
  656. 416, 446, 416, 446, 416, 448, 416, 446, 416, 446, 416, 446,
  657. 416, 448, 414, 448, 416, 448, 416, 1336, 390, 1336, 390, 1336,
  658. 390, 446, 414, 1336, 390, 448, 414, 1336, 390, 1336, 390, 34878,
  659. 3436, 1768, 390, 1336, 390, 446, 416, 448, 416, 446, 416, 1336,
  660. 390, 446, 416, 448, 416, 446, 416, 446, 416, 1336, 390, 446,
  661. 416, 1336, 390, 1336, 390, 446, 416, 1336, 390, 1336, 390, 1336,
  662. 390, 1336, 390, 1336, 392, 446, 414, 448, 416, 1336, 390, 446,
  663. 416, 446, 416, 446, 416, 446, 414, 448, 416, 446, 416, 448,
  664. 414, 448, 416, 446, 416, 446, 416, 446, 414, 1336, 390, 448,
  665. 416, 446, 416, 446, 416, 448, 416, 1336, 390, 446, 416, 446,
  666. 416, 1336, 390, 446, 416, 1336, 390, 1336, 390, 1336, 390, 446,
  667. 416, 446, 414, 1338, 390, 446, 416, 1336, 390, 446, 416, 446,
  668. 416, 446, 416, 446, 416, 446, 416, 1336, 390, 1336, 390, 446,
  669. 416, 446, 416, 1336, 390, 446, 416, 446, 416, 1336, 390, 34876,
  670. 3436, 1768, 388, 1336, 390, 446, 416, 446, 416, 448, 416, 1336,
  671. 390, 446, 416, 446, 416, 446, 416, 448, 416, 1336, 390, 448,
  672. 414, 1336, 390, 1336, 390, 446, 416, 1336, 388, 1338, 388, 1336,
  673. 390, 1336, 390, 1336, 390, 446, 416, 446, 416, 1336, 390, 446,
  674. 420, 442, 416, 446, 416, 446, 416, 446, 416, 446, 416, 446,
  675. 416, 446, 416, 446, 416, 446, 416, 446, 416, 446, 416, 448,
  676. 416, 446, 416, 448, 416, 446, 416, 448, 416, 446, 416, 1336,
  677. 390, 1336, 390, 1336, 388, 1338, 390, 1336, 390, 1336, 392, 446,
  678. 416, 446, 416, 448, 416, 1334, 390, 446, 416, 1338, 388, 1336,
  679. 390, 1336, 390, 446, 416, 446, 416, 448, 414, 446, 416, 446,
  680. 416, 446, 416, 448, 416, 446, 416, 446, 416, 446, 416, 446,
  681. 416, 446, 416, 446, 416, 446, 416, 446, 416, 1336, 390, 446,
  682. 416, 1336, 390, 446, 414, 448, 416, 446, 416, 446, 416, 446,
  683. 416, 448, 416, 446, 416, 446, 416, 446, 416, 1336, 390, 446,
  684. 416, 1336, 390, 446, 416, 446, 416, 446, 416, 448, 416, 1338,
  685. 390, 444, 418, 1336, 390, 448, 416, 446, 416, 1336, 390, 446,
  686. 416, 446, 416, 1336, 390, 1336, 388, 1336, 390, 446, 416, 1336,
  687. 390, 448, 414, 448, 414, 448, 416, 1334, 390, 446, 416, 446,
  688. 416, 446, 416, 448, 416, 446, 416, 446, 416, 448, 416, 446,
  689. 416, 446, 416, 446, 416, 446, 416, 446, 416, 446, 416, 446,
  690. 416, 446, 416, 446, 416, 446, 416, 446, 416, 446, 416, 446,
  691. 416, 448, 416, 1336, 390, 1336, 390, 446, 416, 446, 416, 446,
  692. 416, 446, 414, 446, 416, 448, 416, 446, 416, 448, 414, 446,
  693. 418, 446, 416, 446, 416, 448, 416, 446, 416, 448, 416, 446,
  694. 416, 448, 416, 446, 416, 1336, 390, 446, 416, 446, 416, 1338,
  695. 390, 1336, 390, 446, 416, 446, 416}; // Captured by @sillyfrog
  696. irsend.reset();
  697. irsend.sendRaw(rawData, kDaikinRawBits, 38000);
  698. irsend.makeDecodeResult();
  699. EXPECT_TRUE(irrecv.decode(&irsend.capture));
  700. ASSERT_EQ(DAIKIN, irsend.capture.decode_type);
  701. ASSERT_EQ(kDaikinBits, irsend.capture.bits);
  702. EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits);
  703. }
  704. // Decoding a message we entirely constructed based solely on a given state.
  705. TEST(TestDecodeDaikin, SyntheticExample) {
  706. IRDaikinESP irdaikin(0);
  707. IRsendTest irsend(4);
  708. IRrecv irrecv(4);
  709. irsend.begin();
  710. uint8_t expectedState[kDaikinStateLength] = {
  711. 0x11, 0xDA, 0x27, 0x00, 0x42, 0x3A, 0x05, 0x93, 0x11,
  712. 0xDA, 0x27, 0x00, 0x00, 0x3F, 0x3A, 0x00, 0xA0, 0x00,
  713. 0x0A, 0x25, 0x17, 0x01, 0x00, 0xC0, 0x00, 0x00, 0x32};
  714. irsend.reset();
  715. irsend.sendDaikin(expectedState);
  716. irsend.makeDecodeResult();
  717. EXPECT_TRUE(irrecv.decode(&irsend.capture));
  718. ASSERT_EQ(DAIKIN, irsend.capture.decode_type);
  719. ASSERT_EQ(kDaikinBits, irsend.capture.bits);
  720. EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits);
  721. }