Motion Master
Loading...
Searching...
No Matches
device_procedure_machine.h
Go to the documentation of this file.
1#pragma once
2
3#include <readerwriterqueue/readerwriterqueue.h>
4
5#include <chrono>
6#include <future>
7
8#include "device_procedure.h"
9#include "machine.h"
10#include "motion_master_error.h"
11
12class Cia402Drive;
13
15 public:
17 ctpl::thread_pool &thread_pool, Notifier &notifier,
18 moodycamel::ReaderWriterQueue<OutgoingMachineMessage>
19 &outgoing_machine_message_queue);
20
21 void execute(uint64_t pending_signals) override;
22 void abort_client_requests(const std::string &connection_id) override;
23 bool done() override;
24
25 private:
26 class Axis {
27 public:
28 Axis(VirtualDeviceManager &vdm,
29 IncomingMachineMessage &incoming_machine_message);
30
31 enum class Stage { kInit, kStart, kWait, kDeinit, kDone };
32
33 // TODO: Find another way of dealing with other device types
34 std::unique_ptr<Cia402Drive> cia402_drive_;
35
36 IncomingMachineMessage incoming_machine_message_;
37
38 std::unique_ptr<DeviceProcedure> device_procedure_;
39 std::optional<std::future<MotionMasterError>> future_;
40 Stage stage_ = Stage::kInit;
41 };
42
43 std::map<uint32_t, Axis> axis_map_;
44
45 void send_status(
46 const IncomingMachineMessage &incoming_machine_message,
47 motionmaster::MotionMasterMessage::MotionMasterMessage::Status *status);
48
49 void send_initial_confirmation_status(
50 uint32_t device_address,
51 IncomingMachineMessage &incoming_machine_message);
52
53 void send_error_status(uint32_t device_address,
54 IncomingMachineMessage &incoming_machine_message,
55 MotionMasterError error);
56
57 void send_success_status(uint32_t device_address,
58 IncomingMachineMessage &incoming_machine_message);
59};
Definition: cia402_drive.h:48
Definition: device_procedure_machine.h:14
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
Definition: machine.h:20
Definition: motion_master_error.h:6
Definition: notifier.h:10
Definition: virtual_device_manager.h:16