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