Feature can #4

Merged
0xFEEDC0DE64 merged 7 commits from feature_can into master 2021-05-23 17:53:27 +02:00
3 changed files with 223 additions and 24 deletions
Showing only changes of commit fee1175bf8 - Show all commits

View File

@@ -2,43 +2,19 @@
#include <cstdint> #include <cstdint>
enum { // vv namespace bobbycar {
namespace can {
template<bool isBack, bool isRight>
class MotorController
{
private:
enum { // vvv
DeviceTypeMotorController = 0b00000000000 DeviceTypeMotorController = 0b00000000000
}; };
enum { // ..vv enum { // ...v
MotorControllerRec = 0b00000000000, MotorControllerCommand = 0b00000000000,
MotorControllerSend = 0b00010000000, MotorControllerFeedback = 0b00010000000,
};
enum { // ....vvvvv
MotorControllerDcLink = 0b00000000000,
MotorControllerSpeed = 0b00000000100,
MotorControllerError = 0b00000001000,
MotorControllerAngle = 0b00000001100,
MotorControllerDcPhaA = 0b00000010000,
MotorControllerDcPhaB = 0b00000010100,
MotorControllerDcPhaC = 0b00000011000,
MotorControllerChops = 0b00000011100,
MotorControllerHall = 0b00000100000,
MotorControllerVoltage = 0b00000100100,
MotorControllerTemp = 0b00000101000
};
enum { // ....vvvvv
MotorControllerEnable = 0b00000000000,
MotorControllerInpTgt = 0b00000000100,
MotorControllerCtrlTyp = 0b00000001000,
MotorControllerCtrlMod = 0b00000001100,
MotorControllerIMotMax = 0b00000010000,
MotorControllerIDcMax = 0b00000010100,
MotorControllerNMotMax = 0b00000011000,
MotorControllerFieldWeakMax=0b00000011100,
MotorControllerPhaseAdvMax =0b00000100000,
MotorControllerBuzzerFreq = 0b00000100100,
MotorControllerBuzzerPattern=0b00000101000,
MotorControllerLed = 0b00000101100,
MotorControllerPoweroff = 0b00000110000
}; };
enum { // .........v enum { // .........v
@@ -52,229 +28,171 @@ enum { // ..........v
}; };
enum { enum {
MotorControllerFrontLeftDcLink = DeviceTypeMotorController | MotorControllerSend | MotorControllerDcLink | MotorControllerFront | MotorControllerLeft, MotorControllerMask =
MotorControllerFrontRightDcLink = DeviceTypeMotorController | MotorControllerSend | MotorControllerDcLink | MotorControllerFront | MotorControllerRight, DeviceTypeMotorController |
MotorControllerBackLeftDcLink = DeviceTypeMotorController | MotorControllerSend | MotorControllerDcLink | MotorControllerBack | MotorControllerLeft, (isBack ? MotorControllerBack : MotorControllerFront) |
MotorControllerBackRightDcLink = DeviceTypeMotorController | MotorControllerSend | MotorControllerDcLink | MotorControllerBack | MotorControllerRight, (isRight ? MotorControllerRight : MotorControllerLeft)
MotorControllerFrontLeftSpeed = DeviceTypeMotorController | MotorControllerSend | MotorControllerSpeed | MotorControllerFront | MotorControllerLeft,
MotorControllerFrontRightSpeed = DeviceTypeMotorController | MotorControllerSend | MotorControllerSpeed | MotorControllerFront | MotorControllerRight,
MotorControllerBackLeftSpeed = DeviceTypeMotorController | MotorControllerSend | MotorControllerSpeed | MotorControllerBack | MotorControllerLeft,
MotorControllerBackRightSpeed = DeviceTypeMotorController | MotorControllerSend | MotorControllerSpeed | MotorControllerBack | MotorControllerRight,
MotorControllerFrontLeftError = DeviceTypeMotorController | MotorControllerSend | MotorControllerError | MotorControllerFront | MotorControllerLeft,
MotorControllerFrontRightError = DeviceTypeMotorController | MotorControllerSend | MotorControllerError | MotorControllerFront | MotorControllerRight,
MotorControllerBackLeftError = DeviceTypeMotorController | MotorControllerSend | MotorControllerError | MotorControllerBack | MotorControllerLeft,
MotorControllerBackRightError = DeviceTypeMotorController | MotorControllerSend | MotorControllerError | MotorControllerBack | MotorControllerRight,
MotorControllerFrontLeftAngle = DeviceTypeMotorController | MotorControllerSend | MotorControllerAngle | MotorControllerFront | MotorControllerLeft,
MotorControllerFrontRightAngle = DeviceTypeMotorController | MotorControllerSend | MotorControllerAngle | MotorControllerFront | MotorControllerRight,
MotorControllerBackLeftAngle = DeviceTypeMotorController | MotorControllerSend | MotorControllerAngle | MotorControllerBack | MotorControllerLeft,
MotorControllerBackRightAngle = DeviceTypeMotorController | MotorControllerSend | MotorControllerAngle | MotorControllerBack | MotorControllerRight,
MotorControllerFrontLeftDcPhaA = DeviceTypeMotorController | MotorControllerSend | MotorControllerDcPhaA | MotorControllerFront | MotorControllerLeft,
MotorControllerFrontRightDcPhaA = DeviceTypeMotorController | MotorControllerSend | MotorControllerDcPhaA | MotorControllerFront | MotorControllerRight,
MotorControllerBackLeftDcPhaA = DeviceTypeMotorController | MotorControllerSend | MotorControllerDcPhaA | MotorControllerBack | MotorControllerLeft,
MotorControllerBackRightDcPhaA = DeviceTypeMotorController | MotorControllerSend | MotorControllerDcPhaA | MotorControllerBack | MotorControllerRight,
MotorControllerFrontLeftDcPhaB = DeviceTypeMotorController | MotorControllerSend | MotorControllerDcPhaB | MotorControllerFront | MotorControllerLeft,
MotorControllerFrontRightDcPhaB = DeviceTypeMotorController | MotorControllerSend | MotorControllerDcPhaB | MotorControllerFront | MotorControllerRight,
MotorControllerBackLeftDcPhaB = DeviceTypeMotorController | MotorControllerSend | MotorControllerDcPhaB | MotorControllerBack | MotorControllerLeft,
MotorControllerBackRightDcPhaB = DeviceTypeMotorController | MotorControllerSend | MotorControllerDcPhaB | MotorControllerBack | MotorControllerRight,
MotorControllerFrontLeftDcPhaC = DeviceTypeMotorController | MotorControllerSend | MotorControllerDcPhaC | MotorControllerFront | MotorControllerLeft,
MotorControllerFrontRightDcPhaC = DeviceTypeMotorController | MotorControllerSend | MotorControllerDcPhaC | MotorControllerFront | MotorControllerRight,
MotorControllerBackLeftDcPhaC = DeviceTypeMotorController | MotorControllerSend | MotorControllerDcPhaC | MotorControllerBack | MotorControllerLeft,
MotorControllerBackRightDcPhaC = DeviceTypeMotorController | MotorControllerSend | MotorControllerDcPhaC | MotorControllerBack | MotorControllerRight,
MotorControllerFrontLeftChops = DeviceTypeMotorController | MotorControllerSend | MotorControllerChops | MotorControllerFront | MotorControllerLeft,
MotorControllerFrontRightChops = DeviceTypeMotorController | MotorControllerSend | MotorControllerChops | MotorControllerFront | MotorControllerRight,
MotorControllerBackLeftChops = DeviceTypeMotorController | MotorControllerSend | MotorControllerChops | MotorControllerBack | MotorControllerLeft,
MotorControllerBackRightChops = DeviceTypeMotorController | MotorControllerSend | MotorControllerChops | MotorControllerBack | MotorControllerRight,
MotorControllerFrontLeftHall = DeviceTypeMotorController | MotorControllerSend | MotorControllerHall | MotorControllerFront | MotorControllerLeft,
MotorControllerFrontRightHall = DeviceTypeMotorController | MotorControllerSend | MotorControllerHall | MotorControllerFront | MotorControllerRight,
MotorControllerBackLeftHall = DeviceTypeMotorController | MotorControllerSend | MotorControllerHall | MotorControllerBack | MotorControllerLeft,
MotorControllerBackRightHall = DeviceTypeMotorController | MotorControllerSend | MotorControllerHall | MotorControllerBack | MotorControllerRight,
MotorControllerFrontLeftVoltage = DeviceTypeMotorController | MotorControllerSend | MotorControllerVoltage | MotorControllerFront | MotorControllerLeft,
MotorControllerFrontRightVoltage = DeviceTypeMotorController | MotorControllerSend | MotorControllerVoltage | MotorControllerFront | MotorControllerRight,
MotorControllerBackLeftVoltage = DeviceTypeMotorController | MotorControllerSend | MotorControllerVoltage | MotorControllerBack | MotorControllerLeft,
MotorControllerBackRightVoltage = DeviceTypeMotorController | MotorControllerSend | MotorControllerVoltage | MotorControllerBack | MotorControllerRight,
MotorControllerFrontLeftTemp = DeviceTypeMotorController | MotorControllerSend | MotorControllerTemp | MotorControllerFront | MotorControllerLeft,
MotorControllerFrontRightTemp = DeviceTypeMotorController | MotorControllerSend | MotorControllerTemp | MotorControllerFront | MotorControllerRight,
MotorControllerBackLeftTemp = DeviceTypeMotorController | MotorControllerSend | MotorControllerTemp | MotorControllerBack | MotorControllerLeft,
MotorControllerBackRightTemp = DeviceTypeMotorController | MotorControllerSend | MotorControllerTemp | MotorControllerBack | MotorControllerRight,
}; };
public:
MotorController() = delete;
~MotorController() = delete;
class Command {
private:
enum { enum {
MotorControllerFrontLeftEnable = DeviceTypeMotorController | MotorControllerRec | MotorControllerEnable | MotorControllerFront | MotorControllerLeft, MotorControllerCommandMask = MotorControllerMask | MotorControllerCommand
MotorControllerFrontRightEnable = DeviceTypeMotorController | MotorControllerRec | MotorControllerEnable | MotorControllerFront | MotorControllerRight, };
MotorControllerBackLeftEnable = DeviceTypeMotorController | MotorControllerRec | MotorControllerEnable | MotorControllerBack | MotorControllerLeft,
MotorControllerBackRightEnable = DeviceTypeMotorController | MotorControllerRec | MotorControllerEnable | MotorControllerBack | MotorControllerRight,
MotorControllerFrontLeftInpTgt = DeviceTypeMotorController | MotorControllerRec | MotorControllerInpTgt | MotorControllerFront | MotorControllerLeft, public:
MotorControllerFrontRightInpTgt = DeviceTypeMotorController | MotorControllerRec | MotorControllerInpTgt | MotorControllerFront | MotorControllerRight, Command() = delete;
MotorControllerBackLeftInpTgt = DeviceTypeMotorController | MotorControllerRec | MotorControllerInpTgt | MotorControllerBack | MotorControllerLeft, ~Command() = delete;
MotorControllerBackRightInpTgt = DeviceTypeMotorController | MotorControllerRec | MotorControllerInpTgt | MotorControllerBack | MotorControllerRight,
MotorControllerFrontLeftCtrlTyp = DeviceTypeMotorController | MotorControllerRec | MotorControllerCtrlTyp | MotorControllerFront | MotorControllerLeft, enum { // ....vvvvv
MotorControllerFrontRightCtrlTyp = DeviceTypeMotorController | MotorControllerRec | MotorControllerCtrlTyp | MotorControllerFront | MotorControllerRight, Enable = 0b00000000000 | MotorControllerCommandMask,
MotorControllerBackLeftCtrlTyp = DeviceTypeMotorController | MotorControllerRec | MotorControllerCtrlTyp | MotorControllerBack | MotorControllerLeft, InpTgt = 0b00000000100 | MotorControllerCommandMask,
MotorControllerBackRightCtrlTyp = DeviceTypeMotorController | MotorControllerRec | MotorControllerCtrlTyp | MotorControllerBack | MotorControllerRight, CtrlTyp = 0b00000001000 | MotorControllerCommandMask,
CtrlMod = 0b00000001100 | MotorControllerCommandMask,
IMotMax = 0b00000010000 | MotorControllerCommandMask,
IDcMax = 0b00000010100 | MotorControllerCommandMask,
NMotMax = 0b00000011000 | MotorControllerCommandMask,
FieldWeakMax = 0b00000011100 | MotorControllerCommandMask,
PhaseAdvMax = 0b00000100000 | MotorControllerCommandMask,
BuzzerFreq = 0b00000100100 | MotorControllerCommandMask,
BuzzerPattern = 0b00000101000 | MotorControllerCommandMask,
Led = 0b00000101100 | MotorControllerCommandMask,
Poweroff = 0b00000110000 | MotorControllerCommandMask
};
};
MotorControllerFrontLeftCtrlMod = DeviceTypeMotorController | MotorControllerRec | MotorControllerCtrlMod | MotorControllerFront | MotorControllerLeft, class Feedback {
MotorControllerFrontRightCtrlMod = DeviceTypeMotorController | MotorControllerRec | MotorControllerCtrlMod | MotorControllerFront | MotorControllerRight, private:
MotorControllerBackLeftCtrlMod = DeviceTypeMotorController | MotorControllerRec | MotorControllerCtrlMod | MotorControllerBack | MotorControllerLeft, enum {
MotorControllerBackRightCtrlMod = DeviceTypeMotorController | MotorControllerRec | MotorControllerCtrlMod | MotorControllerBack | MotorControllerRight, MotorControllerFeedbackMask = MotorControllerMask | MotorControllerFeedback
};
MotorControllerFrontLeftIMotMax = DeviceTypeMotorController | MotorControllerRec | MotorControllerIMotMax | MotorControllerFront | MotorControllerLeft, public:
MotorControllerFrontRightIMotMax = DeviceTypeMotorController | MotorControllerRec | MotorControllerIMotMax | MotorControllerFront | MotorControllerRight, Feedback() = delete;
MotorControllerBackLeftIMotMax = DeviceTypeMotorController | MotorControllerRec | MotorControllerIMotMax | MotorControllerBack | MotorControllerLeft, ~Feedback() = delete;
MotorControllerBackRightIMotMax = DeviceTypeMotorController | MotorControllerRec | MotorControllerIMotMax | MotorControllerBack | MotorControllerRight,
MotorControllerFrontLeftIDcMax = DeviceTypeMotorController | MotorControllerRec | MotorControllerIDcMax | MotorControllerFront | MotorControllerLeft, enum { // ....vvvvv
MotorControllerFrontRightIDcMax = DeviceTypeMotorController | MotorControllerRec | MotorControllerIDcMax | MotorControllerFront | MotorControllerRight, DcLink = 0b00000000000 | MotorControllerFeedbackMask,
MotorControllerBackLeftIDcMax = DeviceTypeMotorController | MotorControllerRec | MotorControllerIDcMax | MotorControllerBack | MotorControllerLeft, Speed = 0b00000000100 | MotorControllerFeedbackMask,
MotorControllerBackRightIDcMax = DeviceTypeMotorController | MotorControllerRec | MotorControllerIDcMax | MotorControllerBack | MotorControllerRight, Error = 0b00000001000 | MotorControllerFeedbackMask,
Angle = 0b00000001100 | MotorControllerFeedbackMask,
MotorControllerFrontLeftNMotMax = DeviceTypeMotorController | MotorControllerRec | MotorControllerNMotMax | MotorControllerFront | MotorControllerLeft, DcPhaA = 0b00000010000 | MotorControllerFeedbackMask,
MotorControllerFrontRightNMotMax = DeviceTypeMotorController | MotorControllerRec | MotorControllerNMotMax | MotorControllerFront | MotorControllerRight, DcPhaB = 0b00000010100 | MotorControllerFeedbackMask,
MotorControllerBackLeftNMotMax = DeviceTypeMotorController | MotorControllerRec | MotorControllerNMotMax | MotorControllerBack | MotorControllerLeft, DcPhaC = 0b00000011000 | MotorControllerFeedbackMask,
MotorControllerBackRightNMotMax = DeviceTypeMotorController | MotorControllerRec | MotorControllerNMotMax | MotorControllerBack | MotorControllerRight, Chops = 0b00000011100 | MotorControllerFeedbackMask,
Hall = 0b00000100000 | MotorControllerFeedbackMask,
MotorControllerFrontLeftFieldWeakMax = DeviceTypeMotorController | MotorControllerRec | MotorControllerFieldWeakMax | MotorControllerFront | MotorControllerLeft, Voltage = 0b00000100100 | MotorControllerFeedbackMask,
MotorControllerFrontRightFieldWeakMax = DeviceTypeMotorController | MotorControllerRec | MotorControllerFieldWeakMax | MotorControllerFront | MotorControllerRight, Temp = 0b00000101000 | MotorControllerFeedbackMask
MotorControllerBackLeftFieldWeakMax = DeviceTypeMotorController | MotorControllerRec | MotorControllerFieldWeakMax | MotorControllerBack | MotorControllerLeft, };
MotorControllerBackRightFieldWeakMax = DeviceTypeMotorController | MotorControllerRec | MotorControllerFieldWeakMax | MotorControllerBack | MotorControllerRight, };
MotorControllerFrontLeftPhaseAdvMax = DeviceTypeMotorController | MotorControllerRec | MotorControllerPhaseAdvMax | MotorControllerFront | MotorControllerLeft,
MotorControllerFrontRightPhaseAdvMax = DeviceTypeMotorController | MotorControllerRec | MotorControllerPhaseAdvMax | MotorControllerFront | MotorControllerRight,
MotorControllerBackLeftPhaseAdvMax = DeviceTypeMotorController | MotorControllerRec | MotorControllerPhaseAdvMax | MotorControllerBack | MotorControllerLeft,
MotorControllerBackRightPhaseAdvMax = DeviceTypeMotorController | MotorControllerRec | MotorControllerPhaseAdvMax | MotorControllerBack | MotorControllerRight,
MotorControllerFrontLeftBuzzerFreq = DeviceTypeMotorController | MotorControllerRec | MotorControllerBuzzerFreq | MotorControllerFront | MotorControllerLeft,
MotorControllerFrontRightBuzzerFreq = DeviceTypeMotorController | MotorControllerRec | MotorControllerBuzzerFreq | MotorControllerFront | MotorControllerRight,
MotorControllerBackLeftBuzzerFreq = DeviceTypeMotorController | MotorControllerRec | MotorControllerBuzzerFreq | MotorControllerBack | MotorControllerLeft,
MotorControllerBackRightBuzzerFreq = DeviceTypeMotorController | MotorControllerRec | MotorControllerBuzzerFreq | MotorControllerBack | MotorControllerRight,
MotorControllerFrontLeftBuzzerPattern = DeviceTypeMotorController | MotorControllerRec | MotorControllerBuzzerPattern | MotorControllerFront | MotorControllerLeft,
MotorControllerFrontRightBuzzerPattern = DeviceTypeMotorController | MotorControllerRec | MotorControllerBuzzerPattern | MotorControllerFront | MotorControllerRight,
MotorControllerBackLeftBuzzerPattern = DeviceTypeMotorController | MotorControllerRec | MotorControllerBuzzerPattern | MotorControllerBack | MotorControllerLeft,
MotorControllerBackRightBuzzerPattern = DeviceTypeMotorController | MotorControllerRec | MotorControllerBuzzerPattern | MotorControllerBack | MotorControllerRight,
MotorControllerFrontLeftLed = DeviceTypeMotorController | MotorControllerRec | MotorControllerLed | MotorControllerFront | MotorControllerLeft,
MotorControllerFrontRightLed = DeviceTypeMotorController | MotorControllerRec | MotorControllerLed | MotorControllerFront | MotorControllerRight,
MotorControllerBackLeftLed = DeviceTypeMotorController | MotorControllerRec | MotorControllerLed | MotorControllerBack | MotorControllerLeft,
MotorControllerBackRightLed = DeviceTypeMotorController | MotorControllerRec | MotorControllerLed | MotorControllerBack | MotorControllerRight,
MotorControllerFrontLeftPoweroff = DeviceTypeMotorController | MotorControllerRec | MotorControllerPoweroff | MotorControllerFront | MotorControllerLeft,
MotorControllerFrontRightPoweroff = DeviceTypeMotorController | MotorControllerRec | MotorControllerPoweroff | MotorControllerFront | MotorControllerRight,
MotorControllerBackLeftPoweroff = DeviceTypeMotorController | MotorControllerRec | MotorControllerPoweroff | MotorControllerBack | MotorControllerLeft,
MotorControllerBackRightPoweroff = DeviceTypeMotorController | MotorControllerRec | MotorControllerPoweroff | MotorControllerBack | MotorControllerRight,
}; };
inline const char *bobbycarCanIdDesc(uint16_t id) inline const char *bobbycarCanIdDesc(uint16_t id)
{ {
switch (id) switch (id)
{ {
case MotorControllerFrontLeftEnable: return "MotorControllerFrontLeftEnable"; case MotorController<false, false>::Command::Enable: return "Enable (Command, Front, Left)";
case MotorControllerFrontRightEnable: return "MotorControllerFrontRightEnable"; case MotorController<false, true>::Command::Enable: return "Enable (Command, Front, Right)";
case MotorControllerBackLeftEnable: return "MotorControllerBackLeftEnable"; case MotorController<true, false>::Command::Enable: return "Enable (Command, Back, Left)";
case MotorControllerBackRightEnable: return "MotorControllerBackRightEnable"; case MotorController<true, true>::Command::Enable: return "Enable (Command, Back, Right)";
case MotorControllerFrontLeftInpTgt: return "MotorControllerFrontLeftInpTgt"; case MotorController<false, false>::Command::InpTgt: return "InpTgt (Command, Front, Left)";
case MotorControllerFrontRightInpTgt: return "MotorControllerFrontRightInpTgt"; case MotorController<false, true>::Command::InpTgt: return "InpTgt (Command, Front, Right)";
case MotorControllerBackLeftInpTgt: return "MotorControllerBackLeftInpTgt"; case MotorController<true, false>::Command::InpTgt: return "InpTgt (Command, Back, Left)";
case MotorControllerBackRightInpTgt: return "MotorControllerBackRightInpTgt"; case MotorController<true, true>::Command::InpTgt: return "InpTgt (Command, Back, Right)";
case MotorControllerFrontLeftCtrlTyp: return "MotorControllerFrontLeftCtrlTyp"; case MotorController<false, false>::Command::CtrlTyp: return "CtrlTyp (Command, Front, Left)";
case MotorControllerFrontRightCtrlTyp: return "MotorControllerFrontRightCtrlTyp"; case MotorController<false, true>::Command::CtrlTyp: return "CtrlTyp (Command, Front, Right)";
case MotorControllerBackLeftCtrlTyp: return "MotorControllerBackLeftCtrlTyp"; case MotorController<true, false>::Command::CtrlTyp: return "CtrlTyp (Command, Back, Left)";
case MotorControllerBackRightCtrlTyp: return "MotorControllerBackRightCtrlTyp"; case MotorController<true, true>::Command::CtrlTyp: return "CtrlTyp (Command, Back, Right)";
case MotorControllerFrontLeftCtrlMod: return "MotorControllerFrontLeftCtrlMod"; case MotorController<false, false>::Command::CtrlMod: return "CtrlMod (Command, Front, Left)";
case MotorControllerFrontRightCtrlMod: return "MotorControllerFrontRightCtrlMod"; case MotorController<false, true>::Command::CtrlMod: return "CtrlMod (Command, Front, Right)";
case MotorControllerBackLeftCtrlMod: return "MotorControllerBackLeftCtrlMod"; case MotorController<true, false>::Command::CtrlMod: return "CtrlMod (Command, Back, Left)";
case MotorControllerBackRightCtrlMod: return "MotorControllerBackRightCtrlMod"; case MotorController<true, true>::Command::CtrlMod: return "CtrlMod (Command, Back, Right)";
case MotorControllerFrontLeftIMotMax: return "MotorControllerFrontLeftIMotMax"; case MotorController<false, false>::Command::IMotMax: return "IMotMax (Command, Front, Left)";
case MotorControllerFrontRightIMotMax: return "MotorControllerFrontRightIMotMax"; case MotorController<false, true>::Command::IMotMax: return "IMotMax (Command, Front, Right)";
case MotorControllerBackLeftIMotMax: return "MotorControllerBackLeftIMotMax"; case MotorController<true, false>::Command::IMotMax: return "IMotMax (Command, Back, Left)";
case MotorControllerBackRightIMotMax: return "MotorControllerBackRightIMotMax"; case MotorController<true, true>::Command::IMotMax: return "IMotMax (Command, Back, Right)";
case MotorControllerFrontLeftIDcMax: return "MotorControllerFrontLeftIDcMax"; case MotorController<false, false>::Command::IDcMax: return "IDcMax (Command, Front, Left)";
case MotorControllerFrontRightIDcMax: return "MotorControllerFrontRightIDcMax"; case MotorController<false, true>::Command::IDcMax: return "IDcMax (Command, Front, Right)";
case MotorControllerBackLeftIDcMax: return "MotorControllerBackLeftIDcMax"; case MotorController<true, false>::Command::IDcMax: return "IDcMax (Command, Back, Left)";
case MotorControllerBackRightIDcMax: return "MotorControllerBackRightIDcMax"; case MotorController<true, true>::Command::IDcMax: return "IDcMax (Command, Back, Right)";
case MotorControllerFrontLeftNMotMax: return "MotorControllerFrontLeftNMotMax"; case MotorController<false, false>::Command::NMotMax: return "NMotMax (Command, Front, Left)";
case MotorControllerFrontRightNMotMax: return "MotorControllerFrontRightNMotMax"; case MotorController<false, true>::Command::NMotMax: return "NMotMax (Command, Front, Right)";
case MotorControllerBackLeftNMotMax: return "MotorControllerBackLeftNMotMax"; case MotorController<true, false>::Command::NMotMax: return "NMotMax (Command, Back, Left)";
case MotorControllerBackRightNMotMax: return "MotorControllerBackRightNMotMax"; case MotorController<true, true>::Command::NMotMax: return "NMotMax (Command, Back, Right)";
case MotorControllerFrontLeftFieldWeakMax: return "MotorControllerFrontLeftFieldWeakMax"; case MotorController<false, false>::Command::FieldWeakMax: return "FieldWeakMax (Command, Front, Left)";
case MotorControllerFrontRightFieldWeakMax: return "MotorControllerFrontRightFieldWeakMax"; case MotorController<false, true>::Command::FieldWeakMax: return "FieldWeakMax (Command, Front, Right)";
case MotorControllerBackLeftFieldWeakMax: return "MotorControllerBackLeftFieldWeakMax"; case MotorController<true, false>::Command::FieldWeakMax: return "FieldWeakMax (Command, Back, Left)";
case MotorControllerBackRightFieldWeakMax: return "MotorControllerBackRightFieldWeakMax"; case MotorController<true, true>::Command::FieldWeakMax: return "FieldWeakMax (Command, Back, Right)";
case MotorControllerFrontLeftPhaseAdvMax: return "MotorControllerFrontLeftPhaseAdvMax"; case MotorController<false, false>::Command::PhaseAdvMax: return "PhaseAdvMax (Command, Front, Left)";
case MotorControllerFrontRightPhaseAdvMax: return "MotorControllerFrontRightPhaseAdvMax"; case MotorController<false, true>::Command::PhaseAdvMax: return "PhaseAdvMax (Command, Front, Right)";
case MotorControllerBackLeftPhaseAdvMax: return "MotorControllerBackLeftPhaseAdvMax"; case MotorController<true, false>::Command::PhaseAdvMax: return "PhaseAdvMax (Command, Back, Left)";
case MotorControllerBackRightPhaseAdvMax: return "MotorControllerBackRightPhaseAdvMax"; case MotorController<true, true>::Command::PhaseAdvMax: return "PhaseAdvMax (Command, Back, Right)";
case MotorControllerFrontLeftBuzzerFreq: return "MotorControllerFrontLeftBuzzerFreq"; case MotorController<false, false>::Command::BuzzerFreq: return "BuzzerFreq (Command, Front, Left)";
case MotorControllerFrontRightBuzzerFreq: return "MotorControllerFrontRightBuzzerFreq"; case MotorController<false, true>::Command::BuzzerFreq: return "BuzzerFreq (Command, Front, Right)";
case MotorControllerBackLeftBuzzerFreq: return "MotorControllerBackLeftBuzzerFreq"; case MotorController<true, false>::Command::BuzzerFreq: return "BuzzerFreq (Command, Back, Left)";
case MotorControllerBackRightBuzzerFreq: return "MotorControllerBackRightBuzzerFreq"; case MotorController<true, true>::Command::BuzzerFreq: return "BuzzerFreq (Command, Back, Right)";
case MotorControllerFrontLeftBuzzerPattern: return "MotorControllerFrontLeftBuzzerPattern"; case MotorController<false, false>::Command::BuzzerPattern: return "BuzzerPattern (Command, Front, Left)";
case MotorControllerFrontRightBuzzerPattern: return "MotorControllerFrontRightBuzzerPattern"; case MotorController<false, true>::Command::BuzzerPattern: return "BuzzerPattern (Command, Front, Right)";
case MotorControllerBackLeftBuzzerPattern: return "MotorControllerBackLeftBuzzerPattern"; case MotorController<true, false>::Command::BuzzerPattern: return "BuzzerPattern (Command, Back, Left)";
case MotorControllerBackRightBuzzerPattern: return "MotorControllerBackRightBuzzerPattern"; case MotorController<true, true>::Command::BuzzerPattern: return "BuzzerPattern (Command, Back, Right)";
case MotorControllerFrontLeftLed: return "MotorControllerFrontLeftLed"; case MotorController<false, false>::Command::Led: return "Led (Command, Front, Left)";
case MotorControllerFrontRightLed: return "MotorControllerFrontRightLed"; case MotorController<false, true>::Command::Led: return "Led (Command, Front, Right)";
case MotorControllerBackLeftLed: return "MotorControllerBackLeftLed"; case MotorController<true, false>::Command::Led: return "Led (Command, Back, Left)";
case MotorControllerBackRightLed: return "MotorControllerBackRightLed"; case MotorController<true, true>::Command::Led: return "Led (Command, Back, Right)";
case MotorControllerFrontLeftPoweroff: return "MotorControllerFrontLeftPoweroff"; case MotorController<false, false>::Command::Poweroff: return "Poweroff (Command, Front, Left)";
case MotorControllerFrontRightPoweroff: return "MotorControllerFrontRightPoweroff"; case MotorController<false, true>::Command::Poweroff: return "Poweroff (Command, Front, Right)";
case MotorControllerBackLeftPoweroff: return "MotorControllerBackLeftPoweroff"; case MotorController<true, false>::Command::Poweroff: return "Poweroff (Command, Back, Left)";
case MotorControllerBackRightPoweroff: return "MotorControllerBackRightPoweroff"; case MotorController<true, true>::Command::Poweroff: return "Poweroff (Command, Back, Right)";
case MotorControllerFrontLeftDcLink: return "MotorControllerFrontLeftDcLink"; case MotorController<false, false>::Feedback::DcLink: return "DcLink (Feedback, Front, Left)";
case MotorControllerFrontRightDcLink: return "MotorControllerFrontRightDcLink"; case MotorController<false, true>::Feedback::DcLink: return "DcLink (Feedback, Front, Right)";
case MotorControllerBackLeftDcLink: return "MotorControllerBackLeftDcLink"; case MotorController<true, false>::Feedback::DcLink: return "DcLink (Feedback, Back, Left)";
case MotorControllerBackRightDcLink: return "MotorControllerBackRightDcLink"; case MotorController<true, true>::Feedback::DcLink: return "DcLink (Feedback, Back, Right)";
case MotorControllerFrontLeftSpeed: return "MotorControllerFrontLeftSpeed"; case MotorController<false, false>::Feedback::Speed: return "Speed (Feedback, Front, Left)";
case MotorControllerFrontRightSpeed: return "MotorControllerFrontRightSpeed"; case MotorController<false, true>::Feedback::Speed: return "Speed (Feedback, Front, Right)";
case MotorControllerBackLeftSpeed: return "MotorControllerBackLeftSpeed"; case MotorController<true, false>::Feedback::Speed: return "Speed (Feedback, Back, Left)";
case MotorControllerBackRightSpeed: return "MotorControllerBackRightSpeed"; case MotorController<true, true>::Feedback::Speed: return "Speed (Feedback, Back, Right)";
case MotorControllerFrontLeftError: return "MotorControllerFrontLeftError"; case MotorController<false, false>::Feedback::Error: return "Error (Feedback, Front, Left)";
case MotorControllerFrontRightError: return "MotorControllerFrontRightError"; case MotorController<false, true>::Feedback::Error: return "Error (Feedback, Front, Right)";
case MotorControllerBackLeftError: return "MotorControllerBackLeftError"; case MotorController<true, false>::Feedback::Error: return "Error (Feedback, Back, Left)";
case MotorControllerBackRightError: return "MotorControllerBackRightError"; case MotorController<true, true>::Feedback::Error: return "Error (Feedback, Back, Right)";
case MotorControllerFrontLeftAngle: return "MotorControllerFrontLeftAngle"; case MotorController<false, false>::Feedback::Angle: return "Angle (Feedback, Front, Left)";
case MotorControllerFrontRightAngle: return "MotorControllerFrontRightAngle"; case MotorController<false, true>::Feedback::Angle: return "Angle (Feedback, Front, Right)";
case MotorControllerBackLeftAngle: return "MotorControllerBackLeftAngle"; case MotorController<true, false>::Feedback::Angle: return "Angle (Feedback, Back, Left)";
case MotorControllerBackRightAngle: return "MotorControllerBackRightAngle"; case MotorController<true, true>::Feedback::Angle: return "Angle (Feedback, Back, Right)";
case MotorControllerFrontLeftDcPhaA: return "MotorControllerFrontLeftDcPhaA"; case MotorController<false, false>::Feedback::DcPhaA: return "DcPhaA (Feedback, Front, Left)";
case MotorControllerFrontRightDcPhaA: return "MotorControllerFrontRightDcPhaA"; case MotorController<false, true>::Feedback::DcPhaA: return "DcPhaA (Feedback, Front, Right)";
case MotorControllerBackLeftDcPhaA: return "MotorControllerBackLeftDcPhaA"; case MotorController<true, false>::Feedback::DcPhaA: return "DcPhaA (Feedback, Back, Left)";
case MotorControllerBackRightDcPhaA: return "MotorControllerBackRightDcPhaA"; case MotorController<true, true>::Feedback::DcPhaA: return "DcPhaA (Feedback, Back, Right)";
case MotorControllerFrontLeftDcPhaB: return "MotorControllerFrontLeftDcPhaB"; case MotorController<false, false>::Feedback::DcPhaB: return "DcPhaB (Feedback, Front, Left)";
case MotorControllerFrontRightDcPhaB: return "MotorControllerFrontRightDcPhaB"; case MotorController<false, true>::Feedback::DcPhaB: return "DcPhaB (Feedback, Front, Right)";
case MotorControllerBackLeftDcPhaB: return "MotorControllerBackLeftDcPhaB"; case MotorController<true, false>::Feedback::DcPhaB: return "DcPhaB (Feedback, Back, Left)";
case MotorControllerBackRightDcPhaB: return "MotorControllerBackRightDcPhaB"; case MotorController<true, true>::Feedback::DcPhaB: return "DcPhaB (Feedback, Back, Right)";
case MotorControllerFrontLeftDcPhaC: return "MotorControllerFrontLeftDcPhaC"; case MotorController<false, false>::Feedback::DcPhaC: return "DcPhaC (Feedback, Front, Left)";
case MotorControllerFrontRightDcPhaC: return "MotorControllerFrontRightDcPhaC"; case MotorController<false, true>::Feedback::DcPhaC: return "DcPhaC (Feedback, Front, Right)";
case MotorControllerBackLeftDcPhaC: return "MotorControllerBackLeftDcPhaC"; case MotorController<true, false>::Feedback::DcPhaC: return "DcPhaC (Feedback, Back, Left)";
case MotorControllerBackRightDcPhaC: return "MotorControllerBackRightDcPhaC"; case MotorController<true, true>::Feedback::DcPhaC: return "DcPhaC (Feedback, Back, Right)";
case MotorControllerFrontLeftChops: return "MotorControllerFrontLeftChops"; case MotorController<false, false>::Feedback::Chops: return "Chops (Feedback, Front, Left)";
case MotorControllerFrontRightChops: return "MotorControllerFrontRightChops"; case MotorController<false, true>::Feedback::Chops: return "Chops (Feedback, Front, Right)";
case MotorControllerBackLeftChops: return "MotorControllerBackLeftChops"; case MotorController<true, false>::Feedback::Chops: return "Chops (Feedback, Back, Left)";
case MotorControllerBackRightChops: return "MotorControllerBackRightChops"; case MotorController<true, true>::Feedback::Chops: return "Chops (Feedback, Back, Right)";
case MotorControllerFrontLeftHall: return "MotorControllerFrontLeftHall"; case MotorController<false, false>::Feedback::Hall: return "Hall (Feedback, Front, Left)";
case MotorControllerFrontRightHall: return "MotorControllerFrontRightHall"; case MotorController<false, true>::Feedback::Hall: return "Hall (Feedback, Front, Right)";
case MotorControllerBackLeftHall: return "MotorControllerBackLeftHall"; case MotorController<true, false>::Feedback::Hall: return "Hall (Feedback, Back, Left)";
case MotorControllerBackRightHall: return "MotorControllerBackRightHall"; case MotorController<true, true>::Feedback::Hall: return "Hall (Feedback, Back, Right)";
case MotorControllerFrontLeftVoltage: return "MotorControllerFrontLeftVoltage"; case MotorController<false, false>::Feedback::Voltage: return "Voltage (Feedback, Front, Left)";
case MotorControllerFrontRightVoltage: return "MotorControllerFrontRightVoltage"; case MotorController<false, true>::Feedback::Voltage: return "Voltage (Feedback, Front, Right)";
case MotorControllerBackLeftVoltage: return "MotorControllerBackLeftVoltage"; case MotorController<true, false>::Feedback::Voltage: return "Voltage (Feedback, Back, Left)";
case MotorControllerBackRightVoltage: return "MotorControllerBackRightVoltage"; case MotorController<true, true>::Feedback::Voltage: return "Voltage (Feedback, Back, Right)";
case MotorControllerFrontLeftTemp: return "MotorControllerFrontLeftTemp"; case MotorController<false, false>::Feedback::Temp: return "Temp (Feedback, Front, Left)";
case MotorControllerFrontRightTemp: return "MotorControllerFrontRightTemp"; case MotorController<false, true>::Feedback::Temp: return "Temp (Feedback, Front, Right)";
case MotorControllerBackLeftTemp: return "MotorControllerBackLeftTemp"; case MotorController<true, false>::Feedback::Temp: return "Temp (Feedback, Back, Left)";
case MotorControllerBackRightTemp: return "MotorControllerBackRightTemp"; case MotorController<true, true>::Feedback::Temp: return "Temp (Feedback, Back, Right)";
} }
return "Unknown"; return "Unknown";
} }
}
}