Letter::Letter(QWidget *parent) :QWidget(parent) { setMinimumSize(800, 600); setWindowTitle(tr("A letter from somewhere...")); QHBoxLayout *layout = new QHBoxLayout; layout->setMargin(0); layout->setSpacing(0); setLayout(layout); welcome = NULL; letterEdit = NULL; letterPos = 0; QTextCodec *codec = QTextCodec::codecForName("UTF-8"); letterContent = codec->toUnicode(content); letterLen = letterContent.length(); welcomeTimer = new QTimer(this); welcomeTimer->singleShot(INIT_MSEC, this, SLOT(showWelcomePage())); fireworkTimer = NULL; }
void updateDisplay(void) { uint32_t now = micros(); static uint8_t previousArmedState = 0; bool updateNow = (int32_t)(now - nextDisplayUpdateAt) >= 0L; if (!updateNow) { return; } nextDisplayUpdateAt = now + DISPLAY_UPDATE_FREQUENCY; bool armedState = ARMING_FLAG(ARMED) ? true : false; bool armedStateChanged = armedState != previousArmedState; previousArmedState = armedState; if (armedState) { if (!armedStateChanged) { return; } pageState.pageIdBeforeArming = pageState.pageId; pageState.pageId = PAGE_ARMED; pageState.pageChanging = true; } else { if (armedStateChanged) { pageState.pageFlags |= PAGE_STATE_FLAG_FORCE_PAGE_CHANGE; pageState.pageId = pageState.pageIdBeforeArming; } pageState.pageChanging = (pageState.pageFlags & PAGE_STATE_FLAG_FORCE_PAGE_CHANGE) || (((int32_t)(now - pageState.nextPageAt) >= 0L && (pageState.pageFlags & PAGE_STATE_FLAG_CYCLE_ENABLED))); if (pageState.pageChanging && (pageState.pageFlags & PAGE_STATE_FLAG_CYCLE_ENABLED)) { pageState.cycleIndex++; pageState.cycleIndex = pageState.cycleIndex % CYCLE_PAGE_ID_COUNT; pageState.pageId = cyclePageIds[pageState.cycleIndex]; } } if (pageState.pageChanging) { pageState.pageFlags &= ~PAGE_STATE_FLAG_FORCE_PAGE_CHANGE; pageState.nextPageAt = now + PAGE_CYCLE_FREQUENCY; // Some OLED displays do not respond on the first initialisation so refresh the display // when the page changes in the hopes the hardware responds. This also allows the // user to power off/on the display or connect it while powered. resetDisplay(); if (!displayPresent) { return; } handlePageChange(); } if (!displayPresent) { return; } switch(pageState.pageId) { case PAGE_WELCOME: showWelcomePage(); break; case PAGE_ARMED: showArmedPage(); break; case PAGE_BATTERY: showBatteryPage(); break; case PAGE_SENSORS: showSensorsPage(); break; case PAGE_RX: showRxPage(); break; case PAGE_PROFILE: showProfilePage(); break; #ifdef GPS case PAGE_GPS: if (feature(FEATURE_GPS)) { showGpsPage(); } else { pageState.pageFlags |= PAGE_STATE_FLAG_FORCE_PAGE_CHANGE; } break; #endif #ifdef ENABLE_DEBUG_OLED_PAGE case PAGE_DEBUG: showDebugPage(); break; #endif } if (!armedState) { updateFailsafeStatus(); updateRxStatus(); updateTicker(); } }
void dashboardUpdate(timeUs_t currentTimeUs) { static uint8_t previousArmedState = 0; bool pageChanging; #ifdef CMS static bool wasGrabbed = false; if (displayIsGrabbed(displayPort)) { wasGrabbed = true; return; } else if (wasGrabbed) { pageChanging = true; wasGrabbed = false; } else { pageChanging = false; } #else pageChanging = false; #endif bool updateNow = (int32_t)(currentTimeUs - nextDisplayUpdateAt) >= 0L; if (!updateNow) { return; } nextDisplayUpdateAt = currentTimeUs + DASHBOARD_UPDATE_FREQUENCY; bool armedState = ARMING_FLAG(ARMED) ? true : false; bool armedStateChanged = armedState != previousArmedState; previousArmedState = armedState; if (armedState) { if (!armedStateChanged) { return; } currentPageId = PAGE_ARMED; pageChanging = true; } else { if (armedStateChanged) { currentPageId = PAGE_STATUS; pageChanging = true; } if ((currentPageId == PAGE_WELCOME) && ((int32_t)(currentTimeUs - nextPageAt) >= 0L)) { currentPageId = PAGE_STATUS; pageChanging = true; } if (forcePageChange) { pageChanging = true; forcePageChange = false; } } if (pageChanging) { // Some OLED displays do not respond on the first initialisation so refresh the display // when the page changes in the hopes the hardware responds. This also allows the // user to power off/on the display or connect it while powered. if (!displayPresent) { resetDisplay(); } if (!displayPresent) { return; } i2c_OLED_clear_display_quick(); showTitle(); } if (!displayPresent) { return; } switch(currentPageId) { case PAGE_WELCOME: showWelcomePage(); break; case PAGE_ARMED: showArmedPage(); break; case PAGE_STATUS: showStatusPage(); break; } if (!armedState) { updateFailsafeStatus(); updateRxStatus(); updateTicker(); } }
void updateDisplay(void) { uint32_t now = micros(); static uint8_t previousArmedState = 0; bool updateNow = (int32_t)(now - nextDisplayUpdateAt) >= 0L; if (!updateNow) { return; } nextDisplayUpdateAt = now + DISPLAY_UPDATE_FREQUENCY; bool armedState = ARMING_FLAG(ARMED) ? true : false; bool armedStateChanged = armedState != previousArmedState; previousArmedState = armedState; if (armedState) { if (!armedStateChanged) { return; } pageState.pageIdBeforeArming = pageState.pageId; pageState.pageId = PAGE_ARMED; pageState.pageChanging = true; } else { if (armedStateChanged) { pageState.pageFlags |= PAGE_STATE_FLAG_FORCE_PAGE_CHANGE; pageState.pageId = pageState.pageIdBeforeArming; } pageState.pageChanging = (pageState.pageFlags & PAGE_STATE_FLAG_FORCE_PAGE_CHANGE) || (((int32_t)(now - pageState.nextPageAt) >= 0L && (pageState.pageFlags & PAGE_STATE_FLAG_CYCLE_ENABLED))); if (pageState.pageChanging && (pageState.pageFlags & PAGE_STATE_FLAG_CYCLE_ENABLED)) { pageState.cycleIndex++; pageState.cycleIndex = pageState.cycleIndex % CYCLE_PAGE_ID_COUNT; pageState.pageId = cyclePageIds[pageState.cycleIndex]; } } if (pageState.pageChanging) { handlePageChange(); pageState.pageFlags &= ~PAGE_STATE_FLAG_FORCE_PAGE_CHANGE; pageState.nextPageAt = now + PAGE_CYCLE_FREQUENCY; } switch(pageState.pageId) { case PAGE_WELCOME: showWelcomePage(); break; case PAGE_ARMED: showArmedPage(); break; case PAGE_BATTERY: showBatteryPage(); break; case PAGE_SENSORS: showSensorsPage(); break; case PAGE_RX: showRxPage(); break; case PAGE_PROFILE: showProfilePage(); break; #ifdef GPS case PAGE_GPS: if (feature(FEATURE_GPS)) { showGpsPage(); } else { pageState.pageFlags |= PAGE_STATE_FLAG_FORCE_PAGE_CHANGE; } break; #endif #ifdef ENABLE_DEBUG_OLED_PAGE case PAGE_DEBUG: showDebugPage(); break; #endif } if (!armedState) { updateTicker(); } }