static inline void OnBTNChange(bool btn_pressed, uint btn) { // Assumes btn 1..4 // De-bouncing bool *state = &btn_state[btn]; uint *tick = &btn_debounce_tick[btn]; bool *debouncing = &btn_debouncing[btn]; if (*debouncing && systick < *tick) { return; // Event occurred within debounce interval } // Change state *state = btn_pressed; *tick = systick + DEBOUNCE_INTERVAL; *debouncing = true; //printf("btn %d : %d\n", btn, btn_pressed); reset_auto_screen_off(); // Event handling if (btn_pressed) { if (!displayOn) { ScreenOn(); } else { switch (btn) { case 1: break; case 2: PrevApp(); break; case 3: NextApp(); break; case 4: ScreenOff(); break; } } AppForegroundEvent(evtBtnPress, btn); } else { AppForegroundEvent(evtBtnRelease, btn); } }
/*---------------------------------------------------------------------------*/ void ScreenInit(void) { T_uezDevice lcd; T_pixelColor *pixels; UEZLCDOpen("LCD", &lcd); UEZLCDGetFrame(lcd, 0, (void **)&pixels); UEZLCDBacklight(lcd, 0); UEZLCDOff(lcd); swim_window_open(&G_win, DISPLAY_WIDTH, DISPLAY_HEIGHT, pixels, 0, 0, DISPLAY_WIDTH - 1, DISPLAY_HEIGHT - 1, 1, WHITE, RGB(0, 0, 0), WHITE); swim_set_font(&G_win, &APP_DEMO_DEFAULT_FONT); print(PROJECT_NAME " " VERSION_AS_TEXT "\n\n"); // clear serial screen and put up banner ScreenOn(); }