One Motor 0.5.1
RoboMaster全平台一站式电机驱动库
载入中...
搜索中...
未找到
MotorManager.hpp
浏览该文件的文档.
1
7#ifndef MOTORMANAGER_HPP
8#define MOTORMANAGER_HPP
9
10#include <unordered_map>
12
15
16namespace OneMotor::Motor::DJI
17{
30 class MotorManager
31 {
32 public:
33 using Result = std::expected<void, std::string>;
34
35 MotorManager(const MotorManager&) = delete;
36 MotorManager(MotorManager&&) = delete;
37 MotorManager& operator=(MotorManager&) = delete;
38 MotorManager& operator=(MotorManager&&) = delete;
39
45
50 static MotorManager& getInstance();
51
58 Result registerMotor(Can::CanDriver& driver, uint16_t canId) noexcept;
59
66 Result deregisterMotor(Can::CanDriver& driver, uint16_t canId) noexcept;
67
75 template <uint8_t id>
76 void pushOutput(Can::CanDriver& driver, uint8_t lo_value, uint8_t hi_value) noexcept;
77
78 private:
79 using OutputArray = std::array<uint8_t, 16>;
80 using OutputPair = std::pair<OutputArray, Util::SpinLock>;
81
86 MotorManager();
87
89 std::unordered_map<Can::CanDriver*, std::set<uint16_t>> driver_motor_ids;
91 std::unordered_map<Can::CanDriver*, OutputPair> driver_motor_outputs;
92 std::atomic<bool> stop_{false};
93 std::unique_ptr<thread::Othread> thread_;
94 };
95}
96
97#endif //MOTORMANAGER_HPP
提供一个统一的CAN总线驱动接口。
提供一个封装了不同平台线程操作的线程类。
提供一个简单的自旋锁实现。
CAN总线驱动类,封装了底层CAN接口的打开、关闭、发送和接收回调注册等操作。
定义 CanDriver.hpp:32
Result registerMotor(Can::CanDriver &driver, uint16_t canId) noexcept
向管理器注册一个电机。
定义 N_MotorManager.cpp:20
~MotorManager()
析构函数。
定义 N_MotorManager.cpp:8
Result deregisterMotor(Can::CanDriver &driver, uint16_t canId) noexcept
从管理器中注销一个电机。
定义 N_MotorManager.cpp:37
void pushOutput(Can::CanDriver &driver, uint8_t lo_value, uint8_t hi_value) noexcept
将一个电机的目标电流值推送到发送缓冲区。
定义 N_MotorManager.cpp:56
static MotorManager & getInstance()
获取MotorManager的单例实例。
定义 N_MotorManager.cpp:14