gpio_manager.cpp
Go to the documentation of this file.
1 //
2 // Created by yezi on 2021/9/9.
3 //
4 
6 
7 namespace rm_hw
8 {
10 {
11 }
12 
14 {
15 }
17 {
18  std::string file = "/sys/class/gpio/gpio" + std::to_string(gpioData.pin) + "/direction";
19  int fd;
20  fd = open(file.data(), O_WRONLY);
21  if (fd == -1)
22  {
23  ROS_ERROR("[gpio]Unable to open %s", file.data());
24  }
25  else
26  {
27  if (gpioData.type == rm_control::OUTPUT)
28  {
29  if (write(fd, "out", 3) != 3)
30  {
31  ROS_ERROR("[gpio]Failed to set direction of gpio%d", gpioData.pin);
32  }
33  }
34  else
35  {
36  if (write(fd, "in", 2) != 2)
37  {
38  ROS_ERROR("[gpio]Failed to set direction of gpio%d", gpioData.pin);
39  }
40  }
41  }
42  close(fd);
43 }
44 
46 {
47  for (auto iter = gpio_state_values.begin(); iter != gpio_state_values.end(); iter++)
48  {
49  if (iter->type == rm_control::INPUT)
50  {
51  std::string file = "/sys/class/gpio/gpio" + std::to_string(iter->pin) + "/value";
52  FILE* fp = fopen(file.c_str(), "r");
53  if (fp == NULL)
54  {
55  ROS_ERROR("[gpio]Unable to read /sys/class/gpio/gpio%d/value", iter->pin);
56  }
57  else
58  {
59  char state = fgetc(fp);
60  bool value = (state == 0x31);
61  *iter->value = value;
62  fclose(fp);
63  }
64  }
65  }
66 }
67 
69 {
70  char buffer[1] = { '1' };
71  for (auto iter : gpio_command_values)
72  {
73  std::string file = "/sys/class/gpio/gpio" + std::to_string(iter.pin) + "/value";
74  int fd = open(file.c_str(), O_WRONLY);
75  if (fd == -1)
76  {
77  ROS_ERROR("[gpio]Unable to write /sys/class/gpio/gpio%i/value", iter.pin);
78  }
79  else
80  {
81  lseek(fd, 0, SEEK_SET);
82  if (*iter.value)
83  {
84  buffer[0] = '1';
85  int ref = write(fd, buffer, 1);
86  if (ref == -1)
87  ROS_ERROR("[GPIO]Failed to write to gpio%d.", iter.pin);
88  }
89  else
90  {
91  buffer[0] = '0';
92  int ref = write(fd, buffer, 1);
93  if (ref == -1)
94  ROS_ERROR("[GPIO]Failed to write to gpio%d.", iter.pin);
95  }
96  }
97  close(fd);
98  }
99 }
100 } // namespace rm_hw
rm_control::OUTPUT
OUTPUT
rm_hw::GpioManager::readGpio
void readGpio()
Definition: gpio_manager.cpp:45
gpio_manager.h
rm_hw::GpioManager::setGpioDirection
void setGpioDirection(rm_control::GpioData gpioData)
Definition: gpio_manager.cpp:16
rm_control::INPUT
INPUT
rm_control::GpioData::pin
int pin
rm_hw::GpioManager::GpioManager
GpioManager()
Definition: gpio_manager.cpp:9
rm_control::GpioData
rm_hw::GpioManager::writeGpio
void writeGpio()
Definition: gpio_manager.cpp:68
ROS_ERROR
#define ROS_ERROR(...)
rm_hw::GpioManager::~GpioManager
~GpioManager()
Definition: gpio_manager.cpp:13
rm_hw::GpioManager::gpio_command_values
std::vector< rm_control::GpioData > gpio_command_values
Definition: gpio_manager.h:28
rm_hw
Definition: control_loop.h:48
rm_control::GpioData::type
GpioType type
rm_hw::GpioManager::gpio_state_values
std::vector< rm_control::GpioData > gpio_state_values
Definition: gpio_manager.h:27


rm_hw
Author(s): Qiayuan Liao
autogenerated on Tue May 6 2025 02:23:44