]> git.earman.xyz Git - sensor-watch.git/commitdiff
Included return value of I2C calls
authorDavid Volovskiy <devolov@gmail.com>
Sun, 19 Oct 2025 16:16:15 +0000 (12:16 -0400)
committerDavid Volovskiy <devolov@gmail.com>
Sun, 19 Oct 2025 16:51:34 +0000 (12:51 -0400)
watch-library/hardware/watch/watch_i2c.c
watch-library/shared/watch/watch_i2c.h
watch-library/simulator/watch/watch_i2c.c

index 709c63b7e7752a561a74fc477d9a1d5f49b61b02..ef898799678ed4b118570ba0ea361a339582c80a 100644 (file)
@@ -23,7 +23,6 @@
  */
 
 #include "watch_i2c.h"
-#include "i2c.h"
 
 #ifdef I2C_SERCOM
 
@@ -38,27 +37,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);
+i2c_result_t watch_i2c_send(int16_t addr, uint8_t *buf, uint16_t length) {
+    return i2c_write(addr, buf, length);
 }
 
-void watch_i2c_receive(int16_t addr, uint8_t *buf, uint16_t length) {
-    i2c_read(addr, buf, length);
+i2c_result_t watch_i2c_receive(int16_t addr, uint8_t *buf, uint16_t length) {
+    return i2c_read(addr, buf, length);
 }
 
-void watch_i2c_write8(int16_t addr, uint8_t reg, uint8_t data) {
+i2c_result_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 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) != I2C_RESULT_SUCCESS) {
+        return 0;
+    }
+    if (watch_i2c_receive(addr, (uint8_t *)&data, 1) != I2C_RESULT_SUCCESS) {
+        return 0;
+    }
 
     return data;
 }
@@ -66,9 +69,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) != I2C_RESULT_SUCCESS) {
+        return 0;
+    }
+    if (watch_i2c_receive(addr, (uint8_t *)&data, 2) != I2C_RESULT_SUCCESS) {
+        return 0;
+    }
     return data;
 }
 
@@ -76,18 +82,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) != I2C_RESULT_SUCCESS) {
+        return 0;
+    }
+    if (watch_i2c_receive(addr, (uint8_t *)&data, 3) != I2C_RESULT_SUCCESS) {
+        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) != I2C_RESULT_SUCCESS) {
+        return 0;
+    }
+    if (watch_i2c_receive(addr, (uint8_t *)&data, 4) != I2C_RESULT_SUCCESS) {
+        return 0;
+    }
     return data;
 }
 
index fbcc1a92a9121e6ab4131b85ac0bb89d0146365f..db131eb1af4eaac3f54bb77f552a6b16c75f8fc2 100644 (file)
@@ -26,6 +26,7 @@
 ////< @file watch_i2c.h
 
 #include "watch.h"
+#include "i2c.h"
 
 /** @addtogroup i2c I2C Controller Driver
   * @brief This section covers functions related to the SAM L22's built-I2C driver, including
@@ -45,22 +46,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);
+i2c_result_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);
+i2c_result_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);
+i2c_result_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.
index 09339888f022b0afca20dec7f9375bb273003e55..fea9de5c936985992364152d7488f4371d434393 100644 (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) {}
+i2c_result_t watch_i2c_send(int16_t addr, uint8_t *buf, uint16_t length) {
+    return I2C_RESULT_SUCCESS;
+}
 
-void watch_i2c_receive(int16_t addr, uint8_t *buf, uint16_t length) {}
+i2c_result_t watch_i2c_receive(int16_t addr, uint8_t *buf, uint16_t length) {
+    return I2C_RESULT_SUCCESS;
+}
 
-void watch_i2c_write8(int16_t addr, uint8_t reg, uint8_t data) {}
+i2c_result_t watch_i2c_write8(int16_t addr, uint8_t reg, uint8_t data) {
+    return I2C_RESULT_SUCCESS;
+}
 
 uint8_t watch_i2c_read8(int16_t addr, uint8_t reg) {
     return 0;