main: print debug info
This commit is contained in:
parent
07e2df9fde
commit
1d78baf925
22
main.c
22
main.c
|
@ -119,31 +119,39 @@ structure shall also meet the requirements of CEA-861-D.
|
|||
*/
|
||||
static uint16_t edid_length(void)
|
||||
{
|
||||
puts("EDID check: ");
|
||||
// check EDID 1.3/1.4 fixed pattern header
|
||||
if (0x00 != edid[0] || 0xff != edid[1] || 0xff != edid[2] || 0xff != edid[3] || 0xff != edid[4] || 0xff != edid[5] || 0xff != edid[6] || 0x00 != edid[7]) {
|
||||
puts("invalid header\r\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (1 == edid[18]) { // EDID 1.3/1.4 128-byte structure
|
||||
if (checksum_ok(&edid[0], 128)) {
|
||||
if (0 == edid[126]) { // no extension
|
||||
puts("128 bytes\r\n");
|
||||
return 128;
|
||||
} else { // extension available
|
||||
// the usual extension is CEA EDID Timing Extension (with extension tag 02), but we allow others
|
||||
// no idea how more than 1 extension is supported
|
||||
if (checksum_ok(&edid[128], 128)) {
|
||||
puts("256 bytes (with extension)\r\n");
|
||||
return 256;
|
||||
} else {
|
||||
puts("extension CRC error\r\n");
|
||||
return 0; // EDID is broken
|
||||
}
|
||||
}
|
||||
} else {
|
||||
puts("CRC error\r\n");
|
||||
return 0;
|
||||
}
|
||||
} else if (2 == edid[18]) { // EDID 2.0 256-byte structure
|
||||
if (checksum_ok(&edid[0], 256)) {
|
||||
puts("256 bytes (no extension)\r\n");
|
||||
return 256;
|
||||
} else {
|
||||
puts("CRC error\r\n");
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
@ -245,15 +253,23 @@ void main(void)
|
|||
IWDG->PR.fields.PR = IWDG_PR_DIV256; // set prescale to longest time (1.02s)
|
||||
IWDG->KR.fields.KEY = IWDG_KR_KEY_REFRESH; // reset watchdog
|
||||
|
||||
puts("\r\nCuVoodoo HDMI firewall programmer ready\r\n");
|
||||
|
||||
// erase saved EDID when button is pressed on boot
|
||||
if (0 == (RW_BUTTON_PORT->IDR.reg & RW_BUTTON_PIN)) { // button is pressed while booting
|
||||
for (uint16_t i = 0; i < ARRAY_LENGTH(edid); i++) {
|
||||
edid[i] = 0; // create empty EDID
|
||||
}
|
||||
ram_eeprom_blockprog(edid, ARRAY_LENGTH(edid)); // erase EDID
|
||||
puts("EEPROM EDID erased\r\n");
|
||||
}
|
||||
load_edid(); // load EDID from EEPROM
|
||||
bool edid_valid = (0 != edid_length()); // verify if EDID is valid
|
||||
if (edid_valid) {
|
||||
puts("EEPROM EDID valid\r\n");
|
||||
} else {
|
||||
puts("EEPROM EDID not valid\r\n");
|
||||
}
|
||||
|
||||
rim(); // re-enable interrupts
|
||||
bool action = false; // if an action has been performed
|
||||
|
@ -276,19 +292,24 @@ void main(void)
|
|||
}
|
||||
led_error = false; // reset error state
|
||||
if (press_duration < 30) { // less than 3 sec
|
||||
puts("read I²C EDID: ");
|
||||
run_led_on(); // indicate we started
|
||||
if (read_edid()) { // read EDID from I²C
|
||||
puts(" OK\r\n");
|
||||
edid_valid = (0 != edid_length()); // verify if EDID is valid
|
||||
if (edid_valid) { // read EDID is valid
|
||||
puts("I²C EDID valid\r\n");
|
||||
IWDG_KR = IWDG_KR_KEY_REFRESH; // reset watchdog
|
||||
led_error = !save_edid(); // save to EEPROM
|
||||
IWDG_KR = IWDG_KR_KEY_REFRESH; // reset watchdog
|
||||
} else { // read EDID is not valid
|
||||
puts("I²C EDID not valid, reloading from EEPROM\r\n");
|
||||
led_error = true; // indicate read error
|
||||
load_edid(); // re-load EDID from EEPROM
|
||||
edid_valid = (0 != edid_length()); // verify if EDID is valid
|
||||
}
|
||||
} else { // read error
|
||||
puts("\r\n"); // error should have been printed
|
||||
led_error = true; // indicate read error
|
||||
load_edid(); // re-load EDID from EEPROM
|
||||
edid_valid = (0 != edid_length()); // verify if EDID is valid
|
||||
|
@ -299,6 +320,7 @@ void main(void)
|
|||
if (edid_valid) {
|
||||
led_error = !write_edid(); // write EDID to I²C EEPROM
|
||||
} else {
|
||||
puts("\r\n"); // error should have been printed
|
||||
led_error = true; // we can't program an invalid EDID
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue