Motion Master
Loading...
Searching...
No Matches
device_procedure_machine.h
Go to the documentation of this file.
1#pragma once
2
3#include <chrono>
4#include <future>
5#include <optional>
6
8#include "device_procedure.h"
9#include "machine.h"
10#include "motion_master_error.h"
11
12class Cia402Drive;
13
15 public:
17 VirtualDeviceManager& vdm, ctpl::thread_pool& thread_pool,
18 Notifier& notifier,
20 outgoing_machine_message_queue);
21
22 void execute(uint64_t pending_signals) override;
23 void abort_client_requests(const std::string& connection_id) override;
24 bool done() override;
25
26 private:
27 class Axis {
28 public:
29 Axis(VirtualDeviceManager& vdm,
30 IncomingMachineMessage& incoming_machine_message);
31
32 enum class Stage { kInit, kStart, kWait, kDeinit, kDone };
33
34 // TODO(msankovic): Find another way of dealing with other device types
35 std::unique_ptr<Cia402Drive> cia402_drive_;
36
37 IncomingMachineMessage incoming_machine_message_;
38
39 std::unique_ptr<DeviceProcedure> device_procedure_;
40 std::optional<std::future<MotionMasterError>> future_;
41 Stage stage_ = Stage::kInit;
42 };
43
44 std::map<uint32_t, Axis> axis_map_;
45
46 void send_status(
47 const IncomingMachineMessage& incoming_machine_message,
48 motionmaster::MotionMasterMessage::MotionMasterMessage::Status* status);
49
50 void send_initial_confirmation_status(
51 uint32_t device_address,
52 IncomingMachineMessage& incoming_machine_message);
53
54 void send_error_status(uint32_t device_address,
55 IncomingMachineMessage& incoming_machine_message,
56 MotionMasterError error);
57
58 void send_success_status(uint32_t device_address,
59 IncomingMachineMessage& incoming_machine_message);
60};
Definition cia402_drive.h:48
DeviceProcedureMachine(VirtualDeviceManager &vdm, ctpl::thread_pool &thread_pool, Notifier &notifier, mm::core::containers::ThreadSafeQueue< OutgoingMachineMessage > &outgoing_machine_message_queue)
Definition device_procedure_machine.cc:10
void execute(uint64_t pending_signals) override
Execute the machine.
Definition device_procedure_machine.cc:17
void abort_client_requests(const std::string &connection_id) override
Abort all of the requests a certain client has issues.
Definition device_procedure_machine.cc:255
bool done() override
Check if all of the machine started processes are done (including the Command Workers)
Definition device_procedure_machine.cc:448
Definition incoming_machine_message.h:5
Machine(VirtualDeviceManager &vdm, ctpl::thread_pool &thread_pool, Notifier &notifier, mm::core::containers::ThreadSafeQueue< OutgoingMachineMessage > &outgoing_machine_message_queue)
Definition machine.cc:7
Definition motion_master_error.h:6
Definition notifier.h:9
Definition virtual_device_manager.h:16
Thread-safe FIFO queue with optional capacity limit.
Definition thread_safe_queue.h:23