Show correct signature bytes for unknown devices

This commit is contained in:
Olaf Rempel 2020-01-04 10:24:17 +01:00
parent cb3707d2c0
commit c3f43e7fb3
1 changed files with 19 additions and 12 deletions

View File

@ -889,17 +889,18 @@ static void reset_statemachine(uint8_t event)
#if defined(DISP_WR) #if defined(DISP_WR)
uint8_t *dst = disp_text; uint8_t *dst = disp_text;
uint8_t *src = (uint8_t *)"unknown"; uint8_t *src;
if (device.sig[0] != 0x00) { if (device.name[0] != '\0')
{
src = device.name; src = device.name;
while (*src != '\0')
{
*dst++ = *src++;
}
} }
else
while (*src != '\0') { {
*dst++ = *src++;
}
if (device.sig[0] == 0x00) {
*dst++ = ' '; *dst++ = ' ';
*dst++ = '0'; *dst++ = '0';
*dst++ = 'X'; *dst++ = 'X';
@ -927,7 +928,6 @@ static void reset_statemachine(uint8_t event)
#endif /* defined(DISP_WR) */ #endif /* defined(DISP_WR) */
} else if ((event == EV_BUTTON_PRESSED) || (event == EV_PROG_ENTER)) { } else if ((event == EV_BUTTON_PRESSED) || (event == EV_PROG_ENTER)) {
memset(&device, 0x00, sizeof(struct _device));
reset_retries = 5; reset_retries = 5;
reset_cause = event; reset_cause = event;
@ -958,21 +958,28 @@ static void reset_statemachine(uint8_t event)
sync = spi_rxtx(0x00); sync = spi_rxtx(0x00);
spi_rxtx(0x00); spi_rxtx(0x00);
memset(&device, 0x00, sizeof(struct _device));
if (sync == CMD_PROG_ENABLE_2) { if (sync == CMD_PROG_ENABLE_2) {
uint8_t i; uint8_t i;
uint8_t sig[3];
for (i = 0; i < 3; i++) { for (i = 0; i < 3; i++) {
sig[i] = mem_read(CMD_READ_SIG_1, (CMD_READ_SIG_2 << 8) | i); device.sig[i] = mem_read(CMD_READ_SIG_1, (CMD_READ_SIG_2 << 8) | i);
} }
for (i = 0; i < ARRAY_SIZE(devices); i++) { for (i = 0; i < ARRAY_SIZE(devices); i++) {
if (memcmp_P(sig, devices[i].sig, sizeof(device.sig)) == 0) { if (memcmp_P(device.sig, devices[i].sig, sizeof(device.sig)) == 0) {
memcpy_P(&device, &devices[i], sizeof(struct _device)); memcpy_P(&device, &devices[i], sizeof(struct _device));
break; break;
} }
} }
/* unknown devices are untested */
if (device.name[0] == '\0')
{
device.flags |= POLL_UNTESTED;
}
state = (reset_cause == EV_PROG_ENTER) ? STATE_RESET_PROGMODE state = (reset_cause == EV_PROG_ENTER) ? STATE_RESET_PROGMODE
: STATE_IDLE; : STATE_IDLE;