Merge pull request #132 from voloved/i2c_returns_result

I2c returns result
This commit is contained in:
voloved 2025-11-22 08:52:11 -05:00 committed by GitHub
commit 5adf465afd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 45 additions and 23 deletions

View File

@ -38,27 +38,31 @@ void watch_disable_i2c(void) {
i2c_disable();
}
void watch_i2c_send(int16_t addr, uint8_t *buf, uint16_t length) {
i2c_write(addr, buf, length);
int8_t watch_i2c_send(int16_t addr, uint8_t *buf, uint16_t length) {
return (int8_t)i2c_write(addr, buf, length);
}
void watch_i2c_receive(int16_t addr, uint8_t *buf, uint16_t length) {
i2c_read(addr, buf, length);
int8_t watch_i2c_receive(int16_t addr, uint8_t *buf, uint16_t length) {
return (int8_t)i2c_read(addr, buf, length);
}
void watch_i2c_write8(int16_t addr, uint8_t reg, uint8_t data) {
int8_t watch_i2c_write8(int16_t addr, uint8_t reg, uint8_t data) {
uint8_t buf[2];
buf[0] = reg;
buf[1] = data;
watch_i2c_send(addr, (uint8_t *)&buf, 2);
return (int8_t)watch_i2c_send(addr, (uint8_t *)&buf, 2);
}
uint8_t watch_i2c_read8(int16_t addr, uint8_t reg) {
uint8_t data;
watch_i2c_send(addr, (uint8_t *)&reg, 1);
watch_i2c_receive(addr, (uint8_t *)&data, 1);
if (watch_i2c_send(addr, (uint8_t *)&reg, 1) != 0) {
return 0;
}
if (watch_i2c_receive(addr, (uint8_t *)&data, 1) != 0) {
return 0;
}
return data;
}
@ -66,9 +70,12 @@ uint8_t watch_i2c_read8(int16_t addr, uint8_t reg) {
uint16_t watch_i2c_read16(int16_t addr, uint8_t reg) {
uint16_t data;
watch_i2c_send(addr, (uint8_t *)&reg, 1);
watch_i2c_receive(addr, (uint8_t *)&data, 2);
if (watch_i2c_send(addr, (uint8_t *)&reg, 1) != 0) {
return 0;
}
if (watch_i2c_receive(addr, (uint8_t *)&data, 2) != 0) {
return 0;
}
return data;
}
@ -76,18 +83,24 @@ uint32_t watch_i2c_read24(int16_t addr, uint8_t reg) {
uint32_t data;
data = 0;
watch_i2c_send(addr, (uint8_t *)&reg, 1);
watch_i2c_receive(addr, (uint8_t *)&data, 3);
if (watch_i2c_send(addr, (uint8_t *)&reg, 1) != 0) {
return 0;
}
if (watch_i2c_receive(addr, (uint8_t *)&data, 3) != 0) {
return 0;
}
return data << 8;
}
uint32_t watch_i2c_read32(int16_t addr, uint8_t reg) {
uint32_t data;
watch_i2c_send(addr, (uint8_t *)&reg, 1);
watch_i2c_receive(addr, (uint8_t *)&data, 4);
if (watch_i2c_send(addr, (uint8_t *)&reg, 1) != 0) {
return 0;
}
if (watch_i2c_receive(addr, (uint8_t *)&data, 4) != 0) {
return 0;
}
return data;
}

View File

@ -45,22 +45,25 @@ void watch_disable_i2c(void);
* @param addr The address of the device you wish to talk to.
* @param buf A series of unsigned bytes; the data you wish to transmit.
* @param length The number of bytes in buf that you wish to send.
* @return 0 if no error code, otherwise a code via i2c_result_t
*/
void watch_i2c_send(int16_t addr, uint8_t *buf, uint16_t length);
int8_t watch_i2c_send(int16_t addr, uint8_t *buf, uint16_t length);
/** @brief Receives a series of values from a device on the I2C bus.
* @param addr The address of the device you wish to hear from.
* @param buf Storage for the incoming bytes; on return, it will contain the received data.
* @param length The number of bytes that you wish to receive.
* @return 0 if no error code, otherwise a code via i2c_result_t
*/
void watch_i2c_receive(int16_t addr, uint8_t *buf, uint16_t length);
int8_t watch_i2c_receive(int16_t addr, uint8_t *buf, uint16_t length);
/** @brief Writes a byte to a register in an I2C device.
* @param addr The address of the device you wish to address.
* @param reg The register on the device that you wish to set.
* @param data The value that you wish to set the register to.
* @return 0 if no error code, otherwise a code via i2c_result_t
*/
void watch_i2c_write8(int16_t addr, uint8_t reg, uint8_t data);
int8_t watch_i2c_write8(int16_t addr, uint8_t reg, uint8_t data);
/** @brief Reads a byte from a register in an I2C device.
* @param addr The address of the device you wish to address.

View File

@ -28,11 +28,17 @@ void watch_enable_i2c(void) {}
void watch_disable_i2c(void) {}
void watch_i2c_send(int16_t addr, uint8_t *buf, uint16_t length) {}
int8_t watch_i2c_send(int16_t addr, uint8_t *buf, uint16_t length) {
return 0;
}
void watch_i2c_receive(int16_t addr, uint8_t *buf, uint16_t length) {}
int8_t watch_i2c_receive(int16_t addr, uint8_t *buf, uint16_t length) {
return 0;
}
void watch_i2c_write8(int16_t addr, uint8_t reg, uint8_t data) {}
int8_t watch_i2c_write8(int16_t addr, uint8_t reg, uint8_t data) {
return 0;
}
uint8_t watch_i2c_read8(int16_t addr, uint8_t reg) {
return 0;