Motion Master
Loading...
Searching...
No Matches
virtual_device_manager.h
Go to the documentation of this file.
1#pragma once
2
3#include <atomic>
4#include <cstddef>
5#include <cstdint>
6#include <map>
7#include <mutex>
8
9#include "ethercat_master.h"
10#include "ethercat_slave.h"
11
12class MockMaster;
13class Notifier;
14class VirtualDevice;
15
17 public:
18 explicit VirtualDeviceManager(Notifier &notifier);
20
27 bool init();
28
34 size_t start();
35
41 void stop();
42
49
57 void set_restart_required(bool restart_required);
58
64 size_t restart();
65
74 int32_t execute(uint64_t pending_signals) const;
75
81 [[nodiscard]] bool is_running() const;
82
88 [[nodiscard]] bool is_initialized() const;
89
95 [[nodiscard]] int get_responding_device_count() const;
96
102 [[nodiscard]] const std::map<uint32_t, VirtualDevice *> &get_devices() const;
103
111 [[nodiscard]] VirtualDevice *get_device(uint32_t address) const;
112
124 bool stop_devices();
125
136 bool disable_devices(bool blocking = false);
137
141 void clear();
142
143 void setMonitorMachinePtr(void *pMM) { pMonitorMachine = pMM; };
144
145 private:
146 void *pMonitorMachine = nullptr;
147 EthercatMaster *ethercat_master_ = nullptr;
148 Notifier &notifier_;
149 std::mutex mutex_;
150 std::atomic_bool initialized_ = false;
151 std::atomic_bool restart_required_ = false;
152
153 std::map<uint32_t, VirtualDevice *> devices_;
154};
Definition: ethercat_master.h:9
Definition: mock_master.h:12
Definition: notifier.h:10
Definition: virtual_device_manager.h:16
bool init()
Initialize the Virtual Device Manager.
Definition: virtual_device_manager.cc:27
bool is_restart_required()
Check if VDM restart is required.
Definition: virtual_device_manager.cc:151
int32_t execute(uint64_t pending_signals) const
Execute the main loop of the Virtual Device Manager.
Definition: virtual_device_manager.cc:259
void clear()
Remove all of the available devices.
Definition: virtual_device_manager.cc:277
void set_restart_required(bool restart_required)
Mark the VDM as restart required.
Definition: virtual_device_manager.cc:155
void setMonitorMachinePtr(void *pMM)
Definition: virtual_device_manager.h:143
int get_responding_device_count() const
Get the count of currently responding devices.
Definition: virtual_device_manager.cc:166
const std::map< uint32_t, VirtualDevice * > & get_devices() const
Get all available virtual devices.
Definition: virtual_device_manager.cc:173
void stop()
Stop the EtherCAT master.
Definition: virtual_device_manager.cc:139
bool is_running() const
Check if VDM is running.
Definition: virtual_device_manager.cc:266
bool is_initialized() const
Check if VDM has successfully initialized.
Definition: virtual_device_manager.cc:273
size_t restart()
Restart the EtherCAT master.
Definition: virtual_device_manager.cc:159
size_t start()
Start the EtherCAT master.
Definition: virtual_device_manager.cc:123
VirtualDevice * get_device(uint32_t address) const
Get a virtual device pointer by its ID.
Definition: virtual_device_manager.cc:178
~VirtualDeviceManager()
Definition: virtual_device_manager.cc:21
bool disable_devices(bool blocking=false)
Used to "disable" all of the available devices before certain operations.
Definition: virtual_device_manager.cc:208
bool stop_devices()
Used to "stop" all of the available devices before certain operations.
Definition: virtual_device_manager.cc:188
Definition: virtual_device.h:20