RokubiminiSerialBusManager.cpp
Go to the documentation of this file.
1 
3 
4 namespace rokubimini
5 {
6 namespace serial
7 {
8 bool RokubiminiSerialBusManager::loadSetup(std::vector<std::shared_ptr<rokubimini::Rokubimini>>& rokubiminis)
9 {
10  // clear the existing list
12  // Loop through all Rokubiminis and create their buses.
13  for (const auto& rokubimini_setup : attachedRokubiminiSetups_)
14  {
15  const auto rokubimini_serial_setup = std::dynamic_pointer_cast<setup::RokubiminiSerial>(rokubimini_setup);
16 
17  const std::string port = rokubimini_serial_setup->serialPort_;
18  if (port.empty())
19  {
20  ROS_ERROR("[%s] The name of the port is empty.", rokubimini_setup->name_.c_str());
21  return false;
22  }
23 
24  for (const auto& rokubimini : rokubiminis)
25  {
26  if (rokubimini->getName() == rokubimini_serial_setup->name_)
27  {
28  // save each RokubiminiSerial for future operations.
29  attachedRokubiminiSerials_.emplace_back(std::dynamic_pointer_cast<RokubiminiSerial>(rokubimini));
30  auto rokubimini_serial = (RokubiminiSerial*)(rokubimini.get());
31  if (!addRokubiminiToBus(rokubimini_serial, rokubimini_serial_setup))
32  {
33  return false;
34  }
35  }
36  }
37  }
38 
39  return true;
40 }
41 
43  RokubiminiSerial* rokubimini, const std::shared_ptr<setup::RokubiminiSerial>& rokubiminiSerialSetup) const
44 {
45  auto impl_ptr = std::make_shared<RokubiminiSerialImpl>(
46  rokubiminiSerialSetup->name_, rokubiminiSerialSetup->serialPort_, rokubiminiSerialSetup->baudRate_);
47 
48  rokubimini->setImplPointer(impl_ptr);
49  return true;
50 }
51 
53 {
54  for (const auto& rokubimini_serial : attachedRokubiminiSerials_)
55  {
56  if (!rokubimini_serial->init())
57  {
58  ROS_ERROR("[%s] The Serial device could not initialize", rokubimini_serial->getName().c_str());
59  return false;
60  }
61  }
62  return true;
63 }
64 
66 {
67  for (const auto& rokubimini_serial : attachedRokubiminiSerials_)
68  {
69  if (!rokubimini_serial->setConfigMode())
70  {
71  ROS_ERROR("[%s] The Serial device could not switch to configuration mode", rokubimini_serial->getName().c_str());
72  }
73  }
74 }
76 {
77  for (const auto& rokubimini_serial : attachedRokubiminiSerials_)
78  {
79  if (!rokubimini_serial->setRunMode())
80  {
81  ROS_ERROR("[%s] The Serial device could not switch to run mode", rokubimini_serial->getName().c_str());
82  }
83  }
84 }
85 } // namespace serial
86 } // namespace rokubimini
bool startupCommunication() override
Initializes the communication with the serial devices.
std::vector< std::shared_ptr< RokubiminiSerial > > attachedRokubiminiSerials_
std::string serialPort_
The serial port name.
void setImplPointer(const RokubiminiSerialImplPtr &implPtr)
Sets a pointer to the implementation.
The Rokubimini Serial class.
bool addRokubiminiToBus(RokubiminiSerial *rokubimini, const std::shared_ptr< setup::RokubiminiSerial > &rokubiminiSerialSetup) const
Creates a RokubiminiSerial Implementation object for the.
void setConfigMode() override
Sets all the serial devices in config mode.
std::vector< std::shared_ptr< setup::Rokubimini > > attachedRokubiminiSetups_
void setRunMode() override
Sets all the serial devices in run mode.
bool loadSetup(std::vector< std::shared_ptr< rokubimini::Rokubimini >> &rokubiminis) override
Checks for non-empty serial port names and calls the addRokubiminiToBus() method. ...
#define ROS_ERROR(...)
System dependencies.


rokubimini_serial
Author(s):
autogenerated on Wed Mar 3 2021 03:09:18