25 #include "MotionController.hpp"
27 #include <ccut/utils.hpp>
28 #include <ccut/yml.hpp>
29 #include <logger/Logger.hpp>
31 #include "Exception.hpp"
32 #include "MotionLibConfig.hpp"
33 #include "device/Axis.hpp"
34 #include "device/DeviceStore.hpp"
35 #include "local-config.h"
36 #include "platform/NotificationWorker.hpp"
37 #include "platform/PlatformFactory.hpp"
39 using namespace logger;
40 namespace yml = ccut::yml;
43 static const std::string s_loggerCat{
"smc:controller"};
45 using namespace internal;
47 MotionController::MotionController() :
52 ccut::ccutVersion(
true,
true);
53 logger::info(s_loggerCat) <<
"motion-lib: " << MOTIONLIB_VERSION <<
"-"
54 << MOTIONLIB_GIT_SHORT << MOTIONLIB_GIT_DIRTY;
55 m_notificationWorker->start();
58 MotionController::~MotionController()
60 m_notificationWorker->stop();
61 m_deviceStore.reset();
62 m_platformFactory.reset();
70 yml::Tree tree = parser.parse_in_arena(
"<yml>", yml::to_csubstr(config));
71 yml::NodeRef node = yml::get(tree.rootref(),
"platforms");
73 m_platformFactory->buildPlatforms(node, &parser);
75 node = yml::get(tree.rootref(),
"alias");
77 m_deviceStore->loadAlias(node, &parser);
79 catch (std::exception &ex)
81 error(s_loggerCat) <<
"failed to parse config: " << ex.what();
84 std::size_t newDeviceCount = 0;
85 for (
const PlatformBase::Shared &platform :
86 m_platformFactory->getPlatforms())
88 platform->setNotificationWorker(m_notificationWorker);
89 newDeviceCount += m_deviceStore->probeDevices(platform);
92 return newDeviceCount;
97 return m_deviceStore->getDevice(address);
102 return m_deviceStore->getDeviceCount();
107 return m_deviceStore->getDeviceList();
112 return m_deviceStore->getDeviceList(type);
117 return m_deviceStore->getAliasList();
122 return m_deviceStore->getAlias(alias);
126 const DeviceId &deviceId,
129 return m_deviceStore->addAlias(alias, deviceId,
override);
134 m_deviceStore->removeAlias(alias);
DeviceId getAlias(const std::string &alias) const
Get the given alias.
std::size_t load(const std::string &config)
Construct platforms and devices based on given configuration string.
std::set< DeviceId > getDeviceList() const
retrieve complete list of devices
std::size_t getDeviceCount() const
Get the number of registered devices.
bool addAlias(const std::string &alias, const DeviceId &deviceId, bool override=true)
add an alias
void removeAlias(const std::string &alias)
remove an alias
std::set< std::string > getAliasList() const
Get current Alias list.
DeviceBase::Shared getDevice(const DeviceId &address)
get a generic device according to its address
DeviceType
List of possible device types supported.
main motion-lib namespace