]> git.feebdaed.xyz Git - 0xmirror/WiringPi.git/commitdiff
#212 wiringPiI2CReadBlockData and wiringPiI2CWriteBlockData
authormstroh76 <m.stroh76@gmail.com>
Sun, 28 Apr 2024 14:33:16 +0000 (16:33 +0200)
committermstroh76 <m.stroh76@gmail.com>
Sun, 28 Apr 2024 14:33:16 +0000 (16:33 +0200)
wiringPi/wiringPiI2C.c
wiringPi/wiringPiI2C.h

index 3fa787dd85785732db3555e1fa2f9d14a79bad70..51f92dd7ac6d8100f48c5cfa7e50f5e53615bb67 100644 (file)
@@ -47,7 +47,6 @@
 
 #include <stdio.h>
 #include <stdlib.h>
-#include <stdint.h>
 #include <errno.h>
 #include <string.h>
 #include <fcntl.h>
@@ -154,6 +153,21 @@ int wiringPiI2CReadReg16 (int fd, int reg)
     return data.word & 0xFFFF ;
 }
 
+int wiringPiI2CReadBlockData (int fd, int reg, uint8_t size, uint8_t *values)
+{
+  union i2c_smbus_data data;
+
+  if (size>I2C_SMBUS_BLOCK_MAX) {
+    size = I2C_SMBUS_BLOCK_MAX;
+  }
+  data.block[0] = size;
+  int result = i2c_smbus_access (fd, I2C_SMBUS_READ, reg, I2C_SMBUS_I2C_BLOCK_DATA, &data);
+  if (result<0) {
+    return result;
+  }
+  memcpy(values, &data.block[1], size);
+  return data.block[0];
+}
 
 /*
  * wiringPiI2CWrite:
@@ -189,6 +203,17 @@ int wiringPiI2CWriteReg16 (int fd, int reg, int value)
   return i2c_smbus_access (fd, I2C_SMBUS_WRITE, reg, I2C_SMBUS_WORD_DATA, &data) ;
 }
 
+int wiringPiI2CWriteBlockData (int fd, int reg, uint8_t size, const uint8_t *values)
+{
+    union i2c_smbus_data data;
+
+    if (size>I2C_SMBUS_BLOCK_MAX) {
+      size = I2C_SMBUS_BLOCK_MAX;
+    }
+    data.block[0] = size;
+    memcpy(&data.block[1], values, size);
+    return i2c_smbus_access (fd, I2C_SMBUS_WRITE, reg, I2C_SMBUS_BLOCK_DATA, &data) ;
+}
 
 /*
  * wiringPiI2CSetupInterface:
index 73f031cd0cc7ef34315121459ebc7ee45a681ef4..5734bdb027ec4267caa41413edbefbced88b4d35 100644 (file)
@@ -22,6 +22,8 @@
  ***********************************************************************
  */
 
+#include <stdint.h>
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -29,10 +31,12 @@ extern "C" {
 extern int wiringPiI2CRead           (int fd) ;
 extern int wiringPiI2CReadReg8       (int fd, int reg) ;
 extern int wiringPiI2CReadReg16      (int fd, int reg) ;
+extern int wiringPiI2CReadBlockData  (int fd, int reg, uint8_t size, uint8_t *values);
 
 extern int wiringPiI2CWrite          (int fd, int data) ;
 extern int wiringPiI2CWriteReg8      (int fd, int reg, int data) ;
 extern int wiringPiI2CWriteReg16     (int fd, int reg, int data) ;
+extern int wiringPiI2CWriteBlockData (int fd, int reg, uint8_t size, const uint8_t *values);
 
 extern int wiringPiI2CSetupInterface (const char *device, int devId) ;
 extern int wiringPiI2CSetup          (const int devId) ;