-
Notifications
You must be signed in to change notification settings - Fork 918
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
Add I2C last_abort_reason #1370
Draft
peterharperuk
wants to merge
2
commits into
raspberrypi:develop
Choose a base branch
from
peterharperuk:add_last_abort_reason
base: develop
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Draft
Changes from all commits
Commits
Show all changes
2 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -153,6 +153,11 @@ struct i2c_inst { | |
bool restart_on_next; | ||
}; | ||
|
||
typedef struct i2c_result { | ||
int32_t rval; | ||
uint32_t abort_reason; | ||
} i2c_result_t; | ||
|
||
/** | ||
* \def I2C_NUM(i2c) | ||
* \ingroup hardware_i2c | ||
|
@@ -246,6 +251,7 @@ static inline i2c_inst_t *i2c_get_instance(uint num) { | |
* | ||
* \return Number of bytes written, or PICO_ERROR_GENERIC if address not acknowledged, no device present, or PICO_ERROR_TIMEOUT if a timeout occurred. | ||
*/ | ||
i2c_result_t i2c_write_result_blocking_until(i2c_inst_t *i2c, uint8_t addr, const uint8_t *src, size_t len, bool nostop, absolute_time_t until); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Does this (and the other new |
||
int i2c_write_blocking_until(i2c_inst_t *i2c, uint8_t addr, const uint8_t *src, size_t len, bool nostop, absolute_time_t until); | ||
|
||
/*! \brief Attempt to read specified number of bytes from address, blocking until the specified absolute time is reached. | ||
|
@@ -260,6 +266,7 @@ int i2c_write_blocking_until(i2c_inst_t *i2c, uint8_t addr, const uint8_t *src, | |
* \param until The absolute time that the block will wait until the entire transaction is complete. | ||
* \return Number of bytes read, or PICO_ERROR_GENERIC if address not acknowledged, no device present, or PICO_ERROR_TIMEOUT if a timeout occurred. | ||
*/ | ||
i2c_result_t i2c_read_result_blocking_until(i2c_inst_t *i2c, uint8_t addr, uint8_t *dst, size_t len, bool nostop, absolute_time_t until); | ||
int i2c_read_blocking_until(i2c_inst_t *i2c, uint8_t addr, uint8_t *dst, size_t len, bool nostop, absolute_time_t until); | ||
|
||
/*! \brief Attempt to write specified number of bytes to address, with timeout | ||
|
@@ -282,6 +289,7 @@ static inline int i2c_write_timeout_us(i2c_inst_t *i2c, uint8_t addr, const uint | |
return i2c_write_blocking_until(i2c, addr, src, len, nostop, t); | ||
} | ||
|
||
i2c_result_t i2c_write_result_timeout_per_char_us(i2c_inst_t *i2c, uint8_t addr, const uint8_t *src, size_t len, bool nostop, uint timeout_per_char_us); | ||
int i2c_write_timeout_per_char_us(i2c_inst_t *i2c, uint8_t addr, const uint8_t *src, size_t len, bool nostop, uint timeout_per_char_us); | ||
|
||
/*! \brief Attempt to read specified number of bytes from address, with timeout | ||
|
@@ -301,6 +309,7 @@ static inline int i2c_read_timeout_us(i2c_inst_t *i2c, uint8_t addr, uint8_t *ds | |
return i2c_read_blocking_until(i2c, addr, dst, len, nostop, t); | ||
} | ||
|
||
i2c_result_t i2c_read_result_timeout_per_char_us(i2c_inst_t *i2c, uint8_t addr, uint8_t *dst, size_t len, bool nostop, uint timeout_per_char_us); | ||
int i2c_read_timeout_per_char_us(i2c_inst_t *i2c, uint8_t addr, uint8_t *dst, size_t len, bool nostop, uint timeout_per_char_us); | ||
|
||
/*! \brief Attempt to write specified number of bytes to address, blocking | ||
|
@@ -314,6 +323,7 @@ int i2c_read_timeout_per_char_us(i2c_inst_t *i2c, uint8_t addr, uint8_t *dst, si | |
* and the next transfer will begin with a Restart rather than a Start. | ||
* \return Number of bytes written, or PICO_ERROR_GENERIC if address not acknowledged, no device present. | ||
*/ | ||
i2c_result_t i2c_write_result_blocking(i2c_inst_t *i2c, uint8_t addr, const uint8_t *src, size_t len, bool nostop); | ||
int i2c_write_blocking(i2c_inst_t *i2c, uint8_t addr, const uint8_t *src, size_t len, bool nostop); | ||
|
||
/*! \brief Attempt to write specified number of bytes to address, blocking in burst mode | ||
|
@@ -329,6 +339,7 @@ int i2c_write_blocking(i2c_inst_t *i2c, uint8_t addr, const uint8_t *src, size_t | |
* \param len Length of data in bytes to receive | ||
* \return Number of bytes read, or PICO_ERROR_GENERIC if address not acknowledged or no device present. | ||
*/ | ||
i2c_result_t i2c_write_result_burst_blocking(i2c_inst_t *i2c, uint8_t addr, const uint8_t *src, size_t len); | ||
int i2c_write_burst_blocking(i2c_inst_t *i2c, uint8_t addr, const uint8_t *src, size_t len); | ||
|
||
/*! \brief Attempt to read specified number of bytes from address, blocking | ||
|
@@ -342,6 +353,7 @@ int i2c_write_burst_blocking(i2c_inst_t *i2c, uint8_t addr, const uint8_t *src, | |
* and the next transfer will begin with a Restart rather than a Start. | ||
* \return Number of bytes read, or PICO_ERROR_GENERIC if address not acknowledged or no device present. | ||
*/ | ||
i2c_result_t i2c_read_result_blocking(i2c_inst_t *i2c, uint8_t addr, uint8_t *dst, size_t len, bool nostop); | ||
int i2c_read_blocking(i2c_inst_t *i2c, uint8_t addr, uint8_t *dst, size_t len, bool nostop); | ||
|
||
/*! \brief Attempt to read specified number of bytes from address, blocking in burst mode | ||
|
@@ -357,6 +369,7 @@ int i2c_read_blocking(i2c_inst_t *i2c, uint8_t addr, uint8_t *dst, size_t len, b | |
* \param len Length of data in bytes to receive | ||
* \return Number of bytes read, or PICO_ERROR_GENERIC if address not acknowledged or no device present. | ||
*/ | ||
i2c_result_t i2c_read_result_burst_blocking(i2c_inst_t *i2c, uint8_t addr, uint8_t *dst, size_t len); | ||
int i2c_read_burst_blocking(i2c_inst_t *i2c, uint8_t addr, uint8_t *dst, size_t len); | ||
|
||
/*! \brief Determine non-blocking write space available | ||
|
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
For consistency with function-names and return-types, I wonder if
i2c_write_blocking_internal
ought to be renamed toi2c_write_result_blocking_internal
? 🤔 (It's an internal-only function name, so I think we're free to rename it?)