Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix timeout handling for u8g_i2c_stop() #458

Merged
merged 1 commit into from
Apr 8, 2017

Conversation

matthijskooijman
Copy link
Contributor

(I realize that u8glib isn't actively developed, but perhaps you would like to merge this bugfix anyway. I'm already in the process of switching U8glib2, but came across this bug when doing a maintanance release which still has u8glib)

To trigger a stop condition, the code sets the TWSTO bit, which is
automaticaly cleared when the stop is copmleted. However, the code would
call u8g_i2c_wait() to wait until the bit was set, not cleared. In
most cases, the stop condition seems slow enough so the bit is not
cleared and u8g_i2c_wait() is satisfied (though without waiting for the
stop to be completed). However, in some cases the bit is already
cleared, so u8g_i2c_wait stalls for the entire timeout and then sets a
timeout error.

In practice, these errors aren't usually checked, so this mostly causes
some unneeded delays and not waiting for stop complete is probably not
problematic either, but it is good to fix it anyway.

This commit changes u8g_i2c_wait to allow waiting for a bit to be
cleared in addition to it being set.

To trigger a stop condition, the code sets the TWSTO bit, which is
automaticaly cleared when the stop is copmleted. However, the code would
call u8g_i2c_wait() to wait until the bit was *set*, not *cleared*. In
most cases, the stop condition seems slow enough so the bit is not
cleared and u8g_i2c_wait() is satisfied (though without waiting for the
stop to be completed). However, in some cases the bit is already
cleared, so u8g_i2c_wait stalls for the entire timeout and then sets a
timeout error.

In practice, these errors aren't usually checked, so this mostly causes
some unneeded delays and not waiting for stop complete is probably not
problematic either, but it is good to fix it anyway.

This commit changes u8g_i2c_wait to allow waiting for a bit to be
cleared in addition to it being set.
@olikraus olikraus merged commit f2e0c70 into olikraus:master Apr 8, 2017
@olikraus
Copy link
Owner

olikraus commented Apr 8, 2017

ok...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants