Skip to content
Snippets Groups Projects
Commit 710f2cb4 authored by Wesley W. Terpstra's avatar Wesley W. Terpstra
Browse files

Handle attempts=0 sensibly

parent 6af5e6c8
Branches
Tags
No related merge requests found
......@@ -107,10 +107,17 @@ eb_status_t eb_device_open(eb_socket_t socketp, const char* address, eb_width_t
if (eb_transports[transport->link_type].mtu == 0)
attempts = 1;
/* Try to determine port width */
if (attempts == 0) {
device->widths = EB_DATAX|EB_ADDRX;
/* Only ok if the proposed widths are distinct */
if (!eb_width_refined(proposed_widths)) {
eb_device_close(devicep);
*result = EB_NULL;
return EB_WIDTH;
}
device->widths = proposed_widths;
} else {
/* Try to determine port width */
device->widths = 0;
do {
uint8_t buf[8] = { 0x4E, 0x6F, 0x11, proposed_widths, 0x0, 0x0, 0x0, 0x0 };
......@@ -126,23 +133,23 @@ eb_status_t eb_device_open(eb_socket_t socketp, const char* address, eb_width_t
eb_socket_poll(socketp);
}
} while (device->widths == 0 && --attempts != 0);
if (device->widths == 0) {
eb_device_close(devicep);
*result = EB_NULL;
return EB_TIMEOUT;
}
device->widths &= proposed_widths;
if (eb_width_possible(device->widths) == 0) {
eb_device_close(devicep);
*result = EB_NULL;
return EB_WIDTH;
}
device->widths = eb_width_refine(device->widths);
}
if (device->widths == 0) {
eb_device_close(devicep);
*result = EB_NULL;
return EB_TIMEOUT;
}
device->widths &= proposed_widths;
if (eb_width_possible(device->widths) == 0) {
eb_device_close(devicep);
*result = EB_NULL;
return EB_WIDTH;
}
device->widths = eb_width_refine(device->widths);
*result = devicep;
return EB_OK;
}
......
......@@ -42,7 +42,7 @@ const char* eb_status(eb_status_t code) {
case EB_OK: return "success";
case EB_FAIL: return "system failure";
case EB_ADDRESS: return "invalid address";
case EB_WIDTH: return "bus width mismatch";
case EB_WIDTH: return "impossible bus width";
case EB_OVERFLOW: return "cycle length overflow";
case EB_BUSY: return "resource busy";
case EB_TIMEOUT: return "timeout";
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment