diff --git a/libraries/Arduino_H7_Video/src/Arduino_H7_Video.cpp b/libraries/Arduino_H7_Video/src/Arduino_H7_Video.cpp index 7f4b9570e..23e08b8ee 100644 --- a/libraries/Arduino_H7_Video/src/Arduino_H7_Video.cpp +++ b/libraries/Arduino_H7_Video/src/Arduino_H7_Video.cpp @@ -95,7 +95,10 @@ int Arduino_H7_Video::begin() { #endif /* Video controller/bridge init */ - _shield->init(_edidMode); + int err_code = _shield->init(_edidMode); + if (err_code < 0) { + return 3; /* Video controller fail init */ + } #if __has_include("lvgl.h") /* Initiliaze LVGL library */ diff --git a/libraries/Arduino_H7_Video/src/H7DisplayShield.cpp b/libraries/Arduino_H7_Video/src/H7DisplayShield.cpp index 82356a638..e045f5abe 100644 --- a/libraries/Arduino_H7_Video/src/H7DisplayShield.cpp +++ b/libraries/Arduino_H7_Video/src/H7DisplayShield.cpp @@ -31,13 +31,22 @@ int USBCVideoClass::init(int edidmode) { } //Checking HDMI plug event - anx7625_wait_hpd_event(0); + err_code = anx7625_wait_hpd_event(0); + if(err_code < 0) { + return err_code; + } //Read EDID - anx7625_dp_get_edid(0, &recognized_edid); + err_code = anx7625_dp_get_edid(0, &recognized_edid); + if(err_code < 0) { + return err_code; + } //DSI Configuration - anx7625_dp_start(0, &recognized_edid, (enum edid_modes) edidmode); + err_code = anx7625_dp_start(0, &recognized_edid, (enum edid_modes) edidmode); + if(err_code < 0) { + return err_code; + } return 0; } diff --git a/libraries/Arduino_H7_Video/src/anx7625.cpp b/libraries/Arduino_H7_Video/src/anx7625.cpp index 552da163f..5f06e96c7 100644 --- a/libraries/Arduino_H7_Video/src/anx7625.cpp +++ b/libraries/Arduino_H7_Video/src/anx7625.cpp @@ -520,15 +520,21 @@ int anx7625_init(uint8_t bus) { return 0; } -void anx7625_wait_hpd_event(uint8_t bus) { +int anx7625_wait_hpd_event(uint8_t bus) { ANXINFO("Waiting for HDMI hot plug event...\n"); - - while (1) { + + int retry_hpd_change = 10000; + while (--retry_hpd_change) { mdelay(10); int detected = anx7625_hpd_change_detect(bus); - if (detected == 1) - break; + if (detected < 0) + return -1; + if (detected > 0) + return 0; } + + ANXERROR("Timed out to detect HPD change on bus %d.\n", bus); + return -1; } int anx7625_get_cc_status(uint8_t bus, uint8_t *cc_status) { diff --git a/libraries/Arduino_H7_Video/src/anx7625.h b/libraries/Arduino_H7_Video/src/anx7625.h index a1ae467a9..e6f8de7f2 100644 --- a/libraries/Arduino_H7_Video/src/anx7625.h +++ b/libraries/Arduino_H7_Video/src/anx7625.h @@ -20,7 +20,7 @@ extern "C" { int anx7625_dp_start(uint8_t bus, const struct edid *edid, enum edid_modes mode = EDID_MODE_AUTO); int anx7625_dp_get_edid(uint8_t bus, struct edid *out); int anx7625_init(uint8_t bus); -void anx7625_wait_hpd_event(uint8_t bus); +int anx7625_wait_hpd_event(uint8_t bus); int anx7625_get_cc_status(uint8_t bus, uint8_t *cc_status); int anx7625_read_system_status(uint8_t bus, uint8_t *sys_status); bool anx7625_is_power_provider(uint8_t bus);
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies: