Updating poll functions to return results#147
Conversation
|
I think this PR makes sense because currently there's no way to return an error from the driver. Using |
ianrrees
left a comment
There was a problem hiding this comment.
I like this change, in particular because it encourages users to think about how to handle the return value of poll() - in most of the examples I've seen it is just ignored.
| Some(req) if req.direction == UsbDirection::In => { | ||
| if let Err(_err) = self.control_in(classes, req) { | ||
| if let Err(err) = self.control_in(classes, req) { | ||
| // TODO: Propagate error out of `poll()` |
There was a problem hiding this comment.
This comment should go away with the PR, the same appears in a couple more places below.
| } | ||
|
|
||
| for cls in classes.iter_mut() { | ||
| cls.poll(); |
There was a problem hiding this comment.
This introduces a subtle change in behaviour that maybe should be documented: if there are multiple classes and an earlier one errors out, the later classes won't be polled.
However, looking at the current implementation and docstring, it's not explicit that polling the device (sometimes... unclear if that's correct per #32) results in the classes being polled.
This PR updates the traits to allow
poll()to returnResult<>types if needed. I'm unsure if theUsbClass::poll()function should return aResultor not currently.