Pi Firmware: Add back HDMI Calibration (short vs long press) (#49)

Change-Id: Ia5e776266a6b7f765e8b3eeecdda7dad3289fed6
pull/101/head^2
David Banks 2019-04-26 13:46:25 +01:00
rodzic 873166aad2
commit 3e6d66c996
1 zmienionych plików z 40 dodań i 16 usunięć

Wyświetl plik

@ -30,6 +30,12 @@
#define MAX_MENU_DEPTH 4
// =============================================================
// Definitions for the key press interface
// =============================================================
#define LONG_KEY_PRESS_DURATION 25
// =============================================================
// Main states that the OSD can be in
// =============================================================
@ -37,6 +43,7 @@
typedef enum {
IDLE, // No menu
CAPTURE, // Screen capture button was pressed
CAL, // Wait for cal button to be released
CLOCK_CAL , // Intermediate state in clock calibration
CLOCK_CAL0, // Intermediate state in clock calibration
CLOCK_CAL1, // Intermediate state in clock calibration
@ -1841,23 +1848,16 @@ int osd_key(int key) {
clear_menu_bits();
}
redraw_menu();
} else if (key == key_cal) {
// TODO: A long press should run the HDMI Calibration
// Auto Calibration
clear_menu_bits();
osd_set(0, ATTR_DOUBLE_SIZE, "Auto Calibration");
action_calibrate_auto();
// Fire OSD_EXPIRED in 50 frames time
ret = 50;
// come back to IDLE
osd_state = IDLE;
} else if (key == key_capture) {
// Fire OSD_EXPIRED in 1 frames time
ret = 1;
// come back to CAL
// come back to CAPTURE
osd_state = CAPTURE;
} else if (key == key_cal) {
// Fire OSD_EXPIRED in 1 frames time
ret = 1;
// come back to CAL
osd_state = CAL;
} else if (key == OSD_EXPIRED) {
osd_clear();
}
@ -1872,10 +1872,34 @@ int osd_key(int key) {
osd_state = IDLE;
break;
case CAL:
// Cal butto pressed, use duration to determine action
val = get_key_down_duration(key_cal);
if (val > LONG_KEY_PRESS_DURATION) {
// Auto Calibration
clear_menu_bits();
osd_set(0, ATTR_DOUBLE_SIZE, "Auto Calibration");
action_calibrate_auto();
// Fire OSD_EXPIRED in 50 frames time
ret = 50;
// come back to IDLE
osd_state = IDLE;
} else if (val == 0) {
// HDMI Calibration
clear_menu_bits();
osd_set(0, ATTR_DOUBLE_SIZE, "HDMI Calibration");
// Fire OSD_EXPIRED in 1 frames time
ret = 1;
// come back to CLOCK_CAL
osd_state = CLOCK_CAL;
} else {
// Fire OSD_EXPIRED in 1 frames time
ret = 1;
// come back to CAL
}
break;
case CLOCK_CAL:
// HDMI Calibration
clear_menu_bits();
osd_set(0, ATTR_DOUBLE_SIZE, "HDMI Calibration");
// Record the starting value of vsync
last_vsync = get_vsync();
// Enable vsync