CTRE_Phoenix 5.20.2
PigeonIMU.h
1/*
2 * Software License Agreement
3 *
4 * Copyright (C) Cross The Road Electronics. All rights
5 * reserved.
6 *
7 * Cross The Road Electronics (CTRE) licenses to you the right to
8 * use, publish, and distribute copies of CRF (Cross The Road) firmware files (*.crf) and Software
9 * API Libraries ONLY when in use with Cross The Road Electronics hardware products.
10 *
11 * THE SOFTWARE AND DOCUMENTATION ARE PROVIDED "AS IS" WITHOUT
12 * WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT
13 * LIMITATION, ANY WARRANTY OF MERCHANTABILITY, FITNESS FOR A
14 * PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT SHALL
15 * CROSS THE ROAD ELECTRONICS BE LIABLE FOR ANY INCIDENTAL, SPECIAL,
16 * INDIRECT OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF
17 * PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY OR SERVICES, ANY CLAIMS
18 * BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE
19 * THEREOF), ANY CLAIMS FOR INDEMNITY OR CONTRIBUTION, OR OTHER
20 * SIMILAR COSTS, WHETHER ASSERTED ON THE BASIS OF CONTRACT, TORT
21 * (INCLUDING NEGLIGENCE), BREACH OF WARRANTY, OR OTHERWISE
22 */
23
24#pragma once
25
26#include <string>
27#include "ctre/phoenix/sensors/BasePigeon.h"
28
29/* forward prototype */
30namespace ctre {
31namespace phoenix {
32namespace motorcontrol {
33namespace can {
34class TalonSRX;
35}
36}
37}
38}
39
40namespace ctre {
41namespace phoenix {
43namespace sensors {
44
50
54 std::string toString() {
55 return toString("");
56 }
57
63 std::string toString(std::string prependString) {
64 std::string retstr = BasePigeonConfiguration::toString(prependString);
65
66 return retstr;
67 }
68};// struct PigeonIMU
69
74private:
75 static PigeonIMUConfiguration _default;
76public:
78};
79
84class PigeonIMU: public BasePigeon {
85public:
87 struct FusionStatus {
91 double heading;
103 std::string description;
108 };
136 };
155 };
212 std::string description;
216 double tempC;
237 };
238
245 PigeonIMU(int deviceNumber);
264
275 int SetFusedHeading(double angleDeg, int timeoutMs = 0);
286 int AddFusedHeading(double angleDeg, int timeoutMs = 0);
296 int SetFusedHeadingToCompass(int timeoutMs = 0);
297
308 int SetTemperatureCompensationDisable(bool bTempCompDisable,
309 int timeoutMs = 0);
321 int SetCompassDeclination(double angleDegOffset, int timeoutMs = 0);
333 int SetCompassAngle(double angleDeg, int timeoutMs = 0);
334
349 int EnterCalibrationMode(CalibrationMode calMode, int timeoutMs = 0);
369 int GetAccelerometerAngles(double tiltAngles[3]);
383 double GetFusedHeading() const;
387 uint32_t GetResetCount();
391 uint32_t GetResetFlags();
392
398 static std::string ToString(PigeonIMU::PigeonState state);
404 static std::string ToString(CalibrationMode cm);
405
423 ErrorCode ConfigSetCustomParam(int newValue, int paramIndex, int timeoutMs = 0);
439 int ConfigGetCustomParam(int paramIndex, int timeoutMs = 0);
440
455 int timeoutMs = 0);
456
469 int timeoutMs = 0) ;
480 int periodMs);
509 ErrorCode ClearStickyFaults(int timeoutMs = 0);
510
511 //------ All Configs ----------//
523 virtual ctre::phoenix::ErrorCode ConfigAllSettings(const PigeonIMUConfiguration &allConfigs, int timeoutMs = 50);
533 virtual void GetAllConfigs(PigeonIMUConfiguration &allConfigs, int timeoutMs = 50);
544 virtual ErrorCode ConfigFactoryDefault(int timeoutMs = 50);
545private:
547 enum MotionDriverState {
548 Init0 = 0,
549 WaitForPowerOff = 1,
550 ConfigAg = 2,
551 SelfTestAg = 3,
552 StartDMP = 4,
553 ConfigCompass_0 = 5,
554 ConfigCompass_1 = 6,
555 ConfigCompass_2 = 7,
556 ConfigCompass_3 = 8,
557 ConfigCompass_4 = 9,
558 ConfigCompass_5 = 10,
559 SelfTestCompass = 11,
560 WaitForGyroStable = 12,
561 AdditionalAccelAdjust = 13,
562 Idle = 14,
563 Calibration = 15,
564 LedInstrum = 16,
565 Error = 31,
566 };
568 enum TareType {
569 SetValue = 0x00, AddOffset = 0x01, MatchCompass = 0x02, SetOffset = 0xFF,
570 };
572 struct ResetStats {
573 int32_t resetCount;
574 int32_t resetFlags;
575 int32_t firmVers;
576 bool hasReset;
577 };
578 ResetStats _resetStats = { 0, 0, 0, false };
579
581 uint32_t _usageHist = 0;
582 uint64_t _cache;
583 uint32_t _len;
584
586 const uint32_t EXPECTED_RESPONSE_TIMEOUT_MS = (200);
587
588 int PrivateSetParameter(ParamEnum paramEnum, TareType tareType,
589 double angleDeg, int timeoutMs = 0);
590
591 PigeonIMU::PigeonState GetState(int errCode, const uint64_t & statusFrame);
592 double GetTemp(const uint64_t & statusFrame);
593
594
595
596
597};// class PigeonIMU
598} // namespace signals
599} // namespace phoenix
600} // namespace ctre
Definition: BasePigeon.h:100
Definition: PigeonIMU.h:84
virtual ErrorCode ConfigFactoryDefault(int timeoutMs=50)
int EnterCalibrationMode(CalibrationMode calMode, int timeoutMs=0)
ErrorCode GetFaults(PigeonIMU_Faults &toFill)
int SetFusedHeading(double angleDeg, int timeoutMs=0)
ErrorCode ClearStickyFaults(int timeoutMs=0)
int SetCompassAngle(double angleDeg, int timeoutMs=0)
int SetFusedHeadingToCompass(int timeoutMs=0)
ErrorCode SetControlFramePeriod(PigeonIMU_ControlFrame frame, int periodMs)
ErrorCode GetStickyFaults(PigeonIMU_StickyFaults &toFill)
int GetAccelerometerAngles(double tiltAngles[3])
PigeonIMU(ctre::phoenix::motorcontrol::can::TalonSRX &talonSrx)
int SetCompassDeclination(double angleDegOffset, int timeoutMs=0)
static std::string ToString(CalibrationMode cm)
ErrorCode SetStatusFramePeriod(PigeonIMU_StatusFrame statusFrame, uint8_t periodMs, int timeoutMs=0)
int ConfigGetCustomParam(int paramIndex, int timeoutMs=0)
double GetFusedHeading(FusionStatus &status)
CalibrationMode
Definition: PigeonIMU.h:115
@ BootTareGyroAccel
Definition: PigeonIMU.h:119
@ Magnetometer360
Definition: PigeonIMU.h:131
@ Magnetometer12Pt
Definition: PigeonIMU.h:127
@ Accelerometer
Definition: PigeonIMU.h:135
@ Temperature
Definition: PigeonIMU.h:123
PigeonState
Definition: PigeonIMU.h:138
@ NoComm
Definition: PigeonIMU.h:142
@ Initializing
Definition: PigeonIMU.h:146
@ UserCalibration
Definition: PigeonIMU.h:154
@ Ready
Definition: PigeonIMU.h:150
int SetTemperatureCompensationDisable(bool bTempCompDisable, int timeoutMs=0)
int GetGeneralStatus(PigeonIMU::GeneralStatus &statusToFill)
ErrorCode ConfigSetCustomParam(int newValue, int paramIndex, int timeoutMs=0)
int GetStatusFramePeriod(PigeonIMU_StatusFrame frame, int timeoutMs=0)
virtual ctre::phoenix::ErrorCode ConfigAllSettings(const PigeonIMUConfiguration &allConfigs, int timeoutMs=50)
virtual void GetAllConfigs(PigeonIMUConfiguration &allConfigs, int timeoutMs=50)
PigeonIMU(ctre::phoenix::motorcontrol::can::TalonSRX *talonSrx)
int AddFusedHeading(double angleDeg, int timeoutMs=0)
static std::string ToString(PigeonIMU::PigeonState state)
PigeonIMU_StatusFrame
Definition: PigeonIMU_StatusFrame.h:8
PigeonIMU_ControlFrame
Definition: PigeonIMU_ControlFrame.h:8
ParamEnum
Definition: paramEnum.h:12
ErrorCode
Definition: ErrorCode.h:12
Definition: ErrorCode.h:5
std::string toString()
Definition: BasePigeon.h:62
bool bIsValid
Definition: PigeonIMU.h:95
bool bIsFusing
Definition: PigeonIMU.h:99
int lastError
Definition: PigeonIMU.h:107
double heading
Definition: PigeonIMU.h:91
std::string description
Definition: PigeonIMU.h:103
bool bCalIsBooting
Definition: PigeonIMU.h:208
int noMotionBiasCount
Definition: PigeonIMU.h:227
int tempCompensationCount
Definition: PigeonIMU.h:232
std::string description
Definition: PigeonIMU.h:212
int lastError
Definition: PigeonIMU.h:236
PigeonIMU::CalibrationMode currentMode
Definition: PigeonIMU.h:196
int calibrationError
Definition: PigeonIMU.h:203
PigeonIMU::PigeonState state
Definition: PigeonIMU.h:191
double tempC
Definition: PigeonIMU.h:216
int upTimeSec
Definition: PigeonIMU.h:222
Definition: PigeonIMU_Faults.h:12
Definition: PigeonIMU_StickyFaults.h:12
std::string toString(std::string prependString)
Definition: PigeonIMU.h:63
std::string toString()
Definition: PigeonIMU.h:54