#pragma once
namespace rev::detached {
class DetachedEncoderLowLevel {
public:
virtual ~DetachedEncoderLowLevel();
int GetDeviceId() const;
enum class EncoderModel {
kUnknown = 0,
kMAXSplineEncoder = 1,
};
EncoderModel GetEncoderModel() const;
struct FirmwareVersion {
int year;
int minor;
int fix;
int prerelease;
int hardwareMajor;
int hardwareMinor;
};
FirmwareVersion GetFirmwareVersion() const;
struct PeriodicStatus0 {
EncoderModel model;
};
PeriodicStatus0 GetPeriodicStatus0() const;
struct PeriodicStatus1 {
bool unexpectedFault;
bool hasResetFault;
bool canTxFault;
bool canRxFault;
bool eepromFault;
bool stickyUnexpectedFault;
bool stickyHasResetFault;
bool stickyCanTxFault;
bool stickyCanRxFault;
bool stickyEepromFault;
};
PeriodicStatus1 GetPeriodicStatus1() const;
struct PeriodicStatus2 {
float rawAngle;
float angle;
};
PeriodicStatus2 GetPeriodicStatus2() const;
struct PeriodicStatus3 {
float position;
};
PeriodicStatus3 GetPeriodicStatus3() const;
struct PeriodicStatus4 {
float velocity;
};
PeriodicStatus4 GetPeriodicStatus4() const;
void CreateSimFaultManager();
protected:
explicit DetachedEncoderLowLevel(int deviceID, EncoderModel model);
void* m_detachedEncoderHandle{nullptr};
private:
int m_deviceID;
};
}