123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- /**************************
- * stress_test_screen.cpp *
- **************************/
-
- /****************************************************************************
- * Written By Mark Pelletier 2017 - Aleph Objects, Inc. *
- * Written By Marcio Teixeira 2018 - Aleph Objects, Inc. *
- * *
- * This program is free software: you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License as published by *
- * the Free Software Foundation, either version 3 of the License, or *
- * (at your option) any later version. *
- * *
- * This program is distributed in the hope that it will be useful, *
- * but WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
- * GNU General Public License for more details. *
- * *
- * To view a copy of the GNU General Public License, go to the following *
- * location: <https://www.gnu.org/licenses/>. *
- ****************************************************************************/
-
- #include "../config.h"
-
- #if BOTH(TOUCH_UI_FTDI_EVE, TOUCH_UI_DEVELOPER_MENU)
-
- #include "screens.h"
- #include "screen_data.h"
-
- #define STRESS_TEST_CHANGE_INTERVAL 6000
-
- #define GRID_COLS 4
- #define GRID_ROWS 9
-
- using namespace FTDI;
- using namespace Theme;
- using namespace ExtUI;
-
- void StressTestScreen::drawDots(uint16_t x, uint16_t y, uint16_t w, uint16_t h) {
- CommandProcessor cmd;
- for(uint8_t i = 0; i < 100; i++) {
- cmd.cmd(BEGIN(POINTS))
- .cmd(POINT_SIZE(20*16))
- .cmd(COLOR_RGB(random(0xFFFFFF)))
- .cmd(VERTEX2F((x + random(w)) * 16,(y + random(h)) * 16));
- }
- }
-
- bool StressTestScreen::watchDogTestNow() {
- return screen_data.StressTestScreen.next_watchdog_trigger &&
- ELAPSED(millis(), screen_data.StressTestScreen.next_watchdog_trigger);
- }
-
- void StressTestScreen::onRedraw(draw_mode_t) {
- using namespace ExtUI;
- CommandProcessor cmd;
- cmd.cmd(CLEAR_COLOR_RGB(bg_color))
- .cmd(CLEAR(true,true,true))
- .cmd(COLOR_RGB(bg_text_enabled))
- .font(font_medium)
- .text(BTN_POS(1,1), BTN_SIZE(4,1), progmem_str(screen_data.StressTestScreen.message));
-
- drawDots(BTN_POS(1,3), BTN_SIZE(4,4));
-
- cmd.font(font_medium).enabled(!watchDogTestNow()).colors(action_btn).tag(1).button(BTN_POS(2,8), BTN_SIZE(2,1), F("Exit"));
- }
-
- bool StressTestScreen::onTouchEnd(uint8_t tag) {
- CommandProcessor cmd;
- switch (tag) {
- case 1:
- runTestOnBootup(false);
- GOTO_SCREEN(StatusScreen);
- break;
- default:
- return false;
- }
- return true;
- }
-
- void StressTestScreen::runTestOnBootup(bool enable) {
- // Use a magic value in passcode to indicate
- // whether or not we need to re-run the test
- // at startup.
- LockScreen::set_hash(enable ? 0xDEAD : 0);
- injectCommands_P(PSTR("M500"));
- }
-
- void StressTestScreen::startupCheck() {
- if (LockScreen::get_hash() == 0xDEAD)
- GOTO_SCREEN(StressTestScreen);
- }
-
- void StressTestScreen::onEntry() {
- screen_data.StressTestScreen.next_watchdog_trigger = millis() + 10000 + random(40000);
- screen_data.StressTestScreen.message = PSTR("Test 1: Stress testing...");
-
- // Turn off heaters.
- setTargetTemp_celsius(0, E0);
- setTargetTemp_celsius(0, E1);
- setTargetTemp_celsius(0, BED);
-
- runTestOnBootup(true);
- }
-
- void StressTestScreen::recursiveLockup() {
- screen_data.StressTestScreen.message = PSTR("Test 2: Printer will restart.");
- current_screen.onRefresh();
- recursiveLockup();
- }
-
- void StressTestScreen::iterativeLockup() {
- screen_data.StressTestScreen.message = PSTR("Test 3: Printer will restart.");
- for(;;) current_screen.onRefresh();
- }
-
- void StressTestScreen::onIdle() {
- current_screen.onRefresh();
- reset_menu_timeout();
-
- if (!commandsInQueue()) {
- if (!isPositionKnown()) {
- extern const char G28_STR[];
- injectCommands_P(G28_STR);
- }
- else {
- injectCommands_P(PSTR(
- "G0 X100 Y100 Z100 F6000\n"
- "T0\nG4 S1"
- #if EXTRUDERS > 1
- "\nT1\nG4 S1"
- #endif
- "\nG0 X150 Y150 Z150"
- ));
- }
- }
-
- if (refresh_timer.elapsed(STRESS_TEST_CHANGE_INTERVAL)) {
- setTargetFan_percent(random(100),FAN0);
- }
-
- if (watchDogTestNow()) {
- if (random(2) % 2)
- iterativeLockup();
- else
- recursiveLockup();
- }
-
- BaseScreen::onIdle();
- }
-
- #endif // TOUCH_UI_FTDI_EVE
|