PrusaStatistics_test.cpp 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340
  1. /**
  2. * @file
  3. * @author Marek Kuhn
  4. */
  5. // For now the functions are just COPIED (lots of depencendies in ultralcd.h)
  6. #include "catch.hpp"
  7. #include <iostream>
  8. // Mocking Serial line
  9. std::string SERIAL_BUFFER = "";
  10. //#define SERIAL_ECHO(s) ( SERIAL_BUFFER += s )
  11. /*
  12. #define SERIAL_FLUSH() ( SERIAL_BUFFER.clear() )
  13. #define SERIAL_ECHOLN(s) { \
  14. SERIAL_ECHO(s); \
  15. SERIAL_BUFFER += "\n"; \
  16. }
  17. */
  18. void SERIAL_ECHO(std::string s){
  19. SERIAL_BUFFER += s;
  20. }
  21. void SERIAL_ECHO(int i){
  22. SERIAL_BUFFER += std::to_string(i);
  23. }
  24. void SERIAL_ECHOLN(std::string s){
  25. SERIAL_BUFFER += s + "\n";
  26. }
  27. void SERIAL_FLUSH(){
  28. SERIAL_BUFFER.clear();
  29. }
  30. std::string itostr3(int i){
  31. return std::to_string(i);
  32. }
  33. int _millis(){return 10000;}
  34. int farm_no;
  35. int busy_state;
  36. int PAUSED_FOR_USER;
  37. int status_number;
  38. int total_filament_used;
  39. int feedmultiply;
  40. int longFilenameOLD;
  41. int starttime;
  42. int target_temperature[1] = {215};
  43. int current_temperature[1] = {204};
  44. int target_temperature_bed = 60;
  45. int current_temperature_bed = 55;
  46. std::string FW_VERSION;
  47. struct Card {
  48. int percentDone(){ return 50; }
  49. } card;
  50. void setup_mockups(){
  51. farm_no = 0;
  52. busy_state = 0;
  53. status_number = 0;
  54. PAUSED_FOR_USER = 0;
  55. total_filament_used = 0;
  56. feedmultiply = 0;
  57. longFilenameOLD = 0;
  58. starttime = 0;
  59. FW_VERSION = "3.8.0";
  60. }
  61. /*
  62. void prusa_statistics(int _message, uint8_t _fil_nr) {
  63. #ifdef DEBUG_DISABLE_PRUSA_STATISTICS
  64. return;
  65. #endif //DEBUG_DISABLE_PRUSA_STATISTICS
  66. switch (_message)
  67. {
  68. case 0: // default message
  69. if (busy_state == PAUSED_FOR_USER)
  70. {
  71. SERIAL_ECHO("{");
  72. prusa_stat_printerstatus(15);
  73. prusa_stat_farm_number();
  74. prusa_stat_printinfo();
  75. SERIAL_ECHOLN("}");
  76. status_number = 15;
  77. }
  78. else if (isPrintPaused || card.paused)
  79. {
  80. SERIAL_ECHO("{");
  81. prusa_stat_printerstatus(14);
  82. prusa_stat_farm_number();
  83. prusa_stat_printinfo();
  84. SERIAL_ECHOLN("}");
  85. status_number = 14;
  86. }
  87. else if (IS_SD_PRINTING)
  88. {
  89. SERIAL_ECHO("{");
  90. prusa_stat_printerstatus(4);
  91. prusa_stat_farm_number();
  92. prusa_stat_printinfo();
  93. SERIAL_ECHOLN("}");
  94. status_number = 4;
  95. }
  96. else
  97. {
  98. SERIAL_ECHO("{");
  99. prusa_stat_printerstatus(1);
  100. prusa_stat_farm_number();
  101. SERIAL_ECHOLN("}");
  102. status_number = 1;
  103. }
  104. break;
  105. case 1: // 1 heating
  106. farm_status = 2;
  107. SERIAL_ECHO("{");
  108. prusa_stat_printerstatus(2);
  109. prusa_stat_farm_number();
  110. SERIAL_ECHOLN("}");
  111. status_number = 2;
  112. farm_timer = 1;
  113. break;
  114. case 2: // heating done
  115. farm_status = 3;
  116. SERIAL_ECHO("{");
  117. prusa_stat_printerstatus(3);
  118. prusa_stat_farm_number();
  119. SERIAL_ECHOLN("}");
  120. status_number = 3;
  121. farm_timer = 1;
  122. if (IS_SD_PRINTING)
  123. {
  124. farm_status = 4;
  125. SERIAL_ECHO("{");
  126. prusa_stat_printerstatus(4);
  127. prusa_stat_farm_number();
  128. SERIAL_ECHOLN("}");
  129. status_number = 4;
  130. }
  131. else
  132. {
  133. SERIAL_ECHO("{");
  134. prusa_stat_printerstatus(3);
  135. prusa_stat_farm_number();
  136. SERIAL_ECHOLN("}");
  137. status_number = 3;
  138. }
  139. farm_timer = 1;
  140. break;
  141. case 3: // filament change
  142. break;
  143. case 4: // print succesfull
  144. SERIAL_ECHO("{[RES:1][FIL:");
  145. MYSERIAL.print(int(_fil_nr));
  146. SERIAL_ECHO("]");
  147. prusa_stat_printerstatus(status_number);
  148. prusa_stat_farm_number();
  149. SERIAL_ECHOLN("}");
  150. farm_timer = 2;
  151. break;
  152. case 5: // print not succesfull
  153. SERIAL_ECHO("{[RES:0][FIL:");
  154. MYSERIAL.print(int(_fil_nr));
  155. SERIAL_ECHO("]");
  156. prusa_stat_printerstatus(status_number);
  157. prusa_stat_farm_number();
  158. SERIAL_ECHOLN("}");
  159. farm_timer = 2;
  160. break;
  161. case 6: // print done
  162. SERIAL_ECHO("{[PRN:8]");
  163. prusa_stat_farm_number();
  164. SERIAL_ECHOLN("}");
  165. status_number = 8;
  166. farm_timer = 2;
  167. break;
  168. case 7: // print done - stopped
  169. SERIAL_ECHO("{[PRN:9]");
  170. prusa_stat_farm_number();
  171. SERIAL_ECHOLN("}");
  172. status_number = 9;
  173. farm_timer = 2;
  174. break;
  175. case 8: // printer started
  176. SERIAL_ECHO("{[PRN:0][PFN:");
  177. status_number = 0;
  178. SERIAL_ECHO(farm_no);
  179. SERIAL_ECHOLN("]}");
  180. farm_timer = 2;
  181. break;
  182. case 20: // echo farm no
  183. SERIAL_ECHO("{");
  184. prusa_stat_printerstatus(status_number);
  185. prusa_stat_farm_number();
  186. SERIAL_ECHOLN("}");
  187. farm_timer = 4;
  188. break;
  189. case 21: // temperatures
  190. SERIAL_ECHO("{");
  191. prusa_stat_temperatures();
  192. prusa_stat_farm_number();
  193. prusa_stat_printerstatus(status_number);
  194. SERIAL_ECHOLN("}");
  195. break;
  196. case 22: // waiting for filament change
  197. SERIAL_ECHO("{[PRN:5]");
  198. prusa_stat_farm_number();
  199. SERIAL_ECHOLN("}");
  200. status_number = 5;
  201. break;
  202. case 90: // Error - Thermal Runaway
  203. SERIAL_ECHO("{[ERR:1]");
  204. prusa_stat_farm_number();
  205. SERIAL_ECHOLN("}");
  206. break;
  207. case 91: // Error - Thermal Runaway Preheat
  208. SERIAL_ECHO("{[ERR:2]");
  209. prusa_stat_farm_number();
  210. SERIAL_ECHOLN("}");
  211. break;
  212. case 92: // Error - Min temp
  213. SERIAL_ECHO("{[ERR:3]");
  214. prusa_stat_farm_number();
  215. SERIAL_ECHOLN("}");
  216. break;
  217. case 93: // Error - Max temp
  218. SERIAL_ECHO("{[ERR:4]");
  219. prusa_stat_farm_number();
  220. SERIAL_ECHOLN("}");
  221. break;
  222. case 99: // heartbeat
  223. SERIAL_ECHO("{[PRN:99]");
  224. prusa_stat_temperatures();
  225. SERIAL_ECHO("[PFN:");
  226. SERIAL_ECHO(farm_no);
  227. SERIAL_ECHO("]");
  228. SERIAL_ECHOLN("}");
  229. break;
  230. }
  231. }
  232. */
  233. static void prusa_stat_printerstatus(int _status)
  234. {
  235. SERIAL_ECHO("[PRN:");
  236. SERIAL_ECHO(_status);
  237. SERIAL_ECHO("]");
  238. }
  239. static void prusa_stat_farm_number() {
  240. SERIAL_ECHO("[PFN:");
  241. SERIAL_ECHO(farm_no);
  242. SERIAL_ECHO("]");
  243. }
  244. static void prusa_stat_temperatures()
  245. {
  246. SERIAL_ECHO("[ST0:");
  247. SERIAL_ECHO(target_temperature[0]);
  248. SERIAL_ECHO("][STB:");
  249. SERIAL_ECHO(target_temperature_bed);
  250. SERIAL_ECHO("][AT0:");
  251. SERIAL_ECHO(current_temperature[0]);
  252. SERIAL_ECHO("][ATB:");
  253. SERIAL_ECHO(current_temperature_bed);
  254. SERIAL_ECHO("]");
  255. }
  256. static void prusa_stat_printinfo()
  257. {
  258. SERIAL_ECHO("[TFU:");
  259. SERIAL_ECHO(total_filament_used);
  260. SERIAL_ECHO("][PCD:");
  261. SERIAL_ECHO(itostr3(card.percentDone()));
  262. SERIAL_ECHO("][FEM:");
  263. SERIAL_ECHO(itostr3(feedmultiply));
  264. SERIAL_ECHO("][FNM:");
  265. SERIAL_ECHO(longFilenameOLD);
  266. SERIAL_ECHO("][TIM:");
  267. if (starttime != 0)
  268. {
  269. SERIAL_ECHO(_millis() / 1000 - starttime / 1000);
  270. }
  271. else
  272. {
  273. SERIAL_ECHO(0);
  274. }
  275. SERIAL_ECHO("][FWR:");
  276. SERIAL_ECHO(FW_VERSION);
  277. SERIAL_ECHO("]");
  278. }
  279. TEST_CASE("Printer status is shown", "[prusa_stats]")
  280. {
  281. SERIAL_FLUSH();
  282. prusa_stat_printerstatus(1);
  283. CHECK(SERIAL_BUFFER.compare("[PRN:1]") == 0);
  284. }
  285. TEST_CASE("Printer info is showsn", "[prusa_stats]")
  286. {
  287. SERIAL_FLUSH();
  288. setup_mockups();
  289. prusa_stat_printinfo();
  290. CHECK(SERIAL_BUFFER.compare("[TFU:0][PCD:50][FEM:0][FNM:0][TIM:0][FWR:3.8.0]") == 0);
  291. }
  292. TEST_CASE("Printer temperatures are shown", "[prusa_stats]")
  293. {
  294. SERIAL_FLUSH();
  295. setup_mockups();
  296. prusa_stat_temperatures();
  297. CHECK(SERIAL_BUFFER.compare("[ST0:215][STB:60][AT0:204][ATB:55]") == 0);
  298. }
  299. TEST_CASE("Prusa_statistics Paused test", "[prusa_stats]")
  300. {
  301. CHECK(1 == 1);
  302. }