i2c.cpp
Go to the documentation of this file.
1 #include <linux/i2c-dev.h>
2 #include <sys/ioctl.h>
3 #include <stdio.h>
4 #include <fcntl.h>
5 #include <arpa/inet.h>
6 #include <ros/ros.h>
7 
8 #include "i2c.h"
9 
10 int fd;
11 
12 void i2c_setup(uint8_t bus, uint8_t addr)
13 {
14  char filename[50];
15  sprintf(filename, "/dev/i2c-%d", bus);
16 
17  fd = open(filename, O_RDWR);
18 
19  if (fd < 0) {
20  ROS_FATAL("Failed to open I2C bus %d", bus);
21  ros::shutdown();
22  }
23 
24  int rc = ioctl(fd, I2C_SLAVE, addr);
25  if (rc < 0) {
26  ROS_FATAL("Failed to select I2C device with address 0x%02x", addr);
27  ros::shutdown();
28  }
29 }
30 
32 {
33  close(fd);
34 }
35 
36 bool i2c_readRegisterMulti(uint16_t reg, size_t count, void *pdata)
37 {
38  reg = htons(reg); // little endian to big endian
39 
40  // write register number
41  if (write(fd, &reg, sizeof(reg)) < 0) {
42  return false;
43  }
44 
45  return read(fd, pdata, count);
46 }
47 
48 bool i2c_readRegisterByte(int reg, uint8_t *pdata)
49 {
50  return i2c_readRegisterMulti(reg, 1, pdata) > 0;
51 }
52 
54 {
55  if (i2c_readRegisterMulti(reg, 2, pdata) < 0) {
56  return false;
57  }
58  *pdata = ntohs(*pdata); // big endian to little endian
59  return true;
60 }
61 
62 bool i2c_writeRegisterMulti(uint16_t reg, size_t count, void *pdata)
63 {
64  uint8_t buf[count + sizeof(reg)];
65 
66  reg = htons(reg); // little endian to big endian
67 
68  memcpy(buf, &reg, sizeof(reg));
69  memcpy(buf + sizeof(reg), pdata, count);
70 
71  return write(fd, buf, count + sizeof(reg)) > 0;
72 }
73 
75 {
76  return i2c_writeRegisterMulti(reg, 1, &value);
77 }
78 
79 
81 {
82  value = htons(value); // little endian to big endian
83  return i2c_writeRegisterMulti(reg, 2, &value);
84 }
#define ROS_FATAL(...)
int fd
Definition: i2c.cpp:10
bool i2c_writeRegisterByte(uint16_t reg, uint8_t value)
Definition: i2c.cpp:74
void i2c_setup(uint8_t bus, uint8_t addr)
Definition: i2c.cpp:12
bool i2c_readRegisterMulti(uint16_t reg, size_t count, void *pdata)
Definition: i2c.cpp:36
bool i2c_readRegisterByte(int reg, uint8_t *pdata)
Definition: i2c.cpp:48
ROSCPP_DECL void shutdown()
bool i2c_writeRegisterMulti(uint16_t reg, size_t count, void *pdata)
Definition: i2c.cpp:62
void i2c_release()
Definition: i2c.cpp:31
bool i2c_writeRegisterWord(uint16_t reg, uint16_t value)
Definition: i2c.cpp:80
bool i2c_readRegisterWord(uint16_t reg, uint16_t *pdata)
Definition: i2c.cpp:53
unsigned short uint16_t
Typedef defining 16 bit unsigned short type. The developer should modify this to suit the platform be...
Definition: vl53l1_types.h:123
unsigned char uint8_t
Typedef defining 8 bit unsigned char type. The developer should modify this to suit the platform bein...
Definition: vl53l1_types.h:133


vl53l1x
Author(s):
autogenerated on Sat Dec 10 2022 03:15:49