Motion Master
Loading...
Searching...
No Matches
monitor_machine.h
Go to the documentation of this file.
1#pragma once
2
3#include <readerwriterqueue/readerwriterqueue.h>
4
5#include "ethernet_slave.h"
6#include "global.h"
7#include "machine.h"
9#include "virtual_device.h"
11
13namespace ctpl {
14class thread_pool;
15}
16
17class MonitorMachine : public Machine {
18 friend class CommandWorker;
19
20 public:
21 MonitorMachine(VirtualDeviceManager &vdm, ctpl::thread_pool &thread_pool,
22 Notifier &notifier,
23 moodycamel::ReaderWriterQueue<OutgoingMachineMessage>
24 &outgoing_machine_message_queue);
25 ~MonitorMachine() override;
26
27 void execute(uint64_t pending_signals) override;
29 void abort_client_requests(const std::string &connection_id) override;
30 void abort_client_requests_by_topic(const std::string &topic);
31 void abort_client_requests_by_device_address(uint32_t device_address);
32 bool done() override;
33
34 inline mm::comm::spoe::Device *get_ethernet_device(uint32_t device_address) {
35 if (g_master_type != MasterType::kEthernet) {
36 return nullptr;
37 }
38
39 auto device = vdm_.get_device(device_address);
40 auto slave = dynamic_cast<EthernetSlave *>(device);
41
42 if (slave == nullptr) {
43 return nullptr;
44 }
45
46 return &slave->getDevice();
47 }
48
49 private:
50 struct Monitoring {
51 std::string connection_id_;
52 uint32_t device_address_;
53 std::string topic_;
54 uint32_t interval_;
55 std::vector<VirtualParameter *> parameters_;
56 VirtualParameter *timestamp_parameter_;
57 uint32_t stale_counter_ = 0;
58
59 Monitoring(const std::string &connection_id, uint32_t device_address,
60 const std::string &topic, uint32_t interval,
61 std::vector<VirtualParameter *> &parameters,
62 VirtualParameter *timestamp_parameter)
63 : connection_id_(connection_id),
64 device_address_(device_address),
65 topic_(topic),
66 interval_(interval),
67 parameters_(parameters),
68 timestamp_parameter_(timestamp_parameter) {}
69 };
70
71 uint64_t signal_counter_ = 0;
72
73 // <request_id, monitoring>
74 std::map<std::string, struct Monitoring> monitoring_map_;
75
76 ParameterValueRefresher od_entry_value_refresher_;
77
78 void send_status(
79 const IncomingMachineMessage &incoming_machine_message,
80 motionmaster::MotionMasterMessage::MotionMasterMessage::Status *status);
81};
Definition: command_worker.h:17
Definition: ethernet_slave.h:5
mm::comm::spoe::Device & getDevice()
Definition: ethernet_slave.cc:70
Definition: incoming_machine_message.h:5
Definition: machine.h:20
VirtualDeviceManager & vdm_
Definition: machine.h:73
Definition: monitor_machine.h:17
bool done() override
Check if all of the machine started processes are done (including the Command Workers)
Definition: monitor_machine.cc:460
void execute(uint64_t pending_signals) override
Execute the machine.
Definition: monitor_machine.cc:21
void abort_all_client_requests()
Definition: monitor_machine.cc:361
mm::comm::spoe::Device * get_ethernet_device(uint32_t device_address)
Definition: monitor_machine.h:34
void abort_client_requests(const std::string &connection_id) override
Abort all of the requests a certain client has issues.
Definition: monitor_machine.cc:378
void abort_client_requests_by_topic(const std::string &topic)
Definition: monitor_machine.cc:398
~MonitorMachine() override
Definition: monitor_machine.cc:19
void abort_client_requests_by_device_address(uint32_t device_address)
Definition: monitor_machine.cc:422
Definition: notifier.h:10
Definition: parameter_value_refresher.h:12
Definition: virtual_device_manager.h:16
VirtualDevice * get_device(uint32_t address) const
Get a virtual device pointer by its ID.
Definition: virtual_device_manager.cc:193
Definition: virtual_parameter.h:9
Handles TCP communication with SOMANET devices over SPoE.
Definition: spoe.h:298
MasterType g_master_type
Definition: global.cc:18
Definition: machine.h:16