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