1 #ifndef DRIVETRAIN_DATA_H
2 #define DRIVETRAIN_DATA_H
4 #include "ComponentData.h"
20 POSITION_CONTROL, VELOCITY_CONTROL, OPEN_LOOP
39 ControlMode getControlMode(ForwardOrTurn axis);
41 void setOpenLoopOutput(ForwardOrTurn axis,
double setpoint);
42 void setVelocitySetpoint(ForwardOrTurn axis,
double setpoint);
44 void setRelativePositionSetpoint(ForwardOrTurn axis,
double setpoint,
45 double maxSpeed,
bool fromLastSetpoint =
false);
46 void setMaxPositionControlSpeed(ForwardOrTurn axis,
double maxSpeed);
48 void setControlMode(ForwardOrTurn axis, ControlMode control);
50 void setZeroHeading();
51 void zeroLastPositionSetpoint(ForwardOrTurn axis);
53 SEM_ID createPositionOperationSemaphore(ForwardOrTurn axis,
double errorThreshold);
55 bool isDesiredPositionOperationComplete(ForwardOrTurn axis,
56 double errorThreshold);
58 double getOpenLoopOutput(ForwardOrTurn axis);
59 double getVelocitySetpoint(ForwardOrTurn axis);
60 double getRelativePositionSetpoint(ForwardOrTurn axis);
61 double getAbsolutePositionSetpoint(ForwardOrTurn axis);
62 double getPositionControlMaxSpeed(ForwardOrTurn axis);
63 bool isPositionSetpointChanged(ForwardOrTurn axis);
64 void setPositionSetpointChanged(ForwardOrTurn axis,
bool changed);
65 double getPositionControlStartingPosition(ForwardOrTurn axis);
67 float getCurrentHeading();
69 void serviceOperationSemaphores();
70 void cleanWaitForSem(SEM_ID sem);
71 bool cleanWaitForSem(SEM_ID sem,
double timeout);
73 void DebugPrintPosition(ForwardOrTurn axis);
74 double getCurrentPos(ForwardOrTurn axis);
79 void overrideForwardCurrentLimit(
float limit);
80 void overrideReverseCurrentLimit(
float limit);
81 float getForwardCurrentLimit();
82 float getReverseCurrentLimit();
83 bool shouldOverrideForwardCurrentLimit();
84 bool shouldOverrideReverseCurrentLimit();
89 ControlMode m_controlModes[2];
90 double m_desiredOpenLoopOutputs[2];
91 double m_desiredRates[2];
92 double m_positionSetpoints[2];
93 double m_maxSpeeds[2];
94 double m_positionStart[2];
96 bool m_positionSetpointChanged[2];
98 bool m_overrideCurrentLimitForward;
99 bool m_overrideCurrentLimitReverse;
100 float m_currentLimitForward;
101 float m_currentLimitReverse;
103 typedef struct drivetrainOpSem
107 double errorThreshold;
109 list<drivetrainOpSem> operationSems;