23 byte activeFlagsSent[4];
25 inline byte byteNumber(byte inFunctionNumber) {
return inFunctionNumber / 8; }
26 inline byte bitNumber(byte inFunctionNumber) {
return inFunctionNumber % 8; }
39 void activate(byte inFunctionNumber);
58 #ifdef DCCPP_DEBUG_MODE 62 void printActivated();
73 static bool programMode;
74 static bool panicStopped;
76 static bool setThrottle(
volatile RegisterList *inReg,
int nReg,
int inLocoId,
int inStepsNumber,
int inNewSpeed,
bool inForward);
78 static void writeCv(
volatile RegisterList *inReg,
int inCvId, byte inCvValue,
int callBack = 100,
int callBackSub = 200);
79 static int identifyLocoId(
volatile RegisterList *inReg);
80 static void setFunctions(
volatile RegisterList *inReg,
int nReg,
int inLocoId,
FunctionsState &inStates);
83 static volatile RegisterList mainRegs, progRegs;
84 static CurrentMonitor mainMonitor;
85 static CurrentMonitor progMonitor;
98 static void beginMain(uint8_t inOptionalDirectionMotor, uint8_t inSignalPin, uint8_t inSignalEnablePin, uint8_t inCurrentMonitor);
105 static void beginProg(uint8_t inOptionalDirectionMotor, uint8_t inSignalPin, uint8_t inSignalEnablePin, uint8_t inCurrentMonitor);
109 static inline void beginMainMotorShield() {
beginMain(MOTOR_SHIELD_DIRECTION_MOTOR_CHANNEL_PIN_A, DCC_SIGNAL_PIN_MAIN, MOTOR_SHIELD_SIGNAL_ENABLE_PIN_MAIN, MOTOR_SHIELD_CURRENT_MONITOR_PIN_MAIN); }
112 static inline void beginProgMotorShield() {
beginProg(MOTOR_SHIELD_DIRECTION_MOTOR_CHANNEL_PIN_B, DCC_SIGNAL_PIN_PROG, MOTOR_SHIELD_SIGNAL_ENABLE_PIN_PROG, MOTOR_SHIELD_CURRENT_MONITOR_PIN_PROG); }
116 static inline void beginMainPololu() {
beginMain(POLOLU_DIRECTION_MOTOR_CHANNEL_PIN_A, DCC_SIGNAL_PIN_MAIN, POLOLU_SIGNAL_ENABLE_PIN_MAIN, POLOLU_CURRENT_MONITOR_PIN_MAIN); }
119 static inline void beginProgPololu() {
beginProg(POLOLU_DIRECTION_MOTOR_CHANNEL_PIN_B, DCC_SIGNAL_PIN_PROG, POLOLU_SIGNAL_ENABLE_PIN_PROG, POLOLU_CURRENT_MONITOR_PIN_PROG); }
126 static void beginEthernet(uint8_t *inMac, uint8_t *inIp, EthernetProtocol inProtocol = EthernetProtocol::TCP);
135 static bool IsMainTrack(
volatile RegisterList *apRegs) {
return apRegs == &mainRegs; }
150 static void powerOn(
bool inMain =
true,
bool inProg =
true);
156 static void powerOff(
bool inMain =
true,
bool inProg =
true);
171 static inline float getCurrentMain() {
return mainMonitor.pin == UNDEFINED_PIN ? 0 : mainMonitor.current; }
176 static inline float getCurrentProg() {
return progMonitor.pin == UNDEFINED_PIN ? 0 : progMonitor.current; }
187 static inline bool setSpeedMain(
int nReg,
int inLocoId,
int inStepsNumber,
int inNewSpeed,
bool inForward) {
return setThrottle(&(mainRegs), nReg, inLocoId, inStepsNumber, inNewSpeed, inForward); }
201 static inline int readCvMain(
int inCvId,
int callBack = 100,
int callBackSub = 200) {
return mainRegs.readCVmain(inCvId, callBack, callBackSub); }
210 static inline void writeCvMain(
int inCvId, byte inValue,
int callBack = 100,
int callBackSub = 200) { writeCv(&(mainRegs), inCvId, inValue, callBack, callBackSub); }
228 static inline bool setSpeedProg(
int nReg,
int inLocoId,
int inStepsNumber,
int inNewSpeed,
bool inForward) {
return setThrottle(&(progRegs), nReg, inLocoId, inStepsNumber, inNewSpeed, inForward); }
242 static inline int readCvProg(
int inCvId,
int callBack = 100,
int callBackSub = 200) {
return progRegs.readCV(inCvId, callBack, callBackSub); }
250 static inline void writeCvProg(
int inCvId, byte inValue,
int callBack = 100,
int callBackSub = 200) { writeCv(&(progRegs), inCvId, inValue, callBack, callBackSub); }
266 static void setAccessory(
int inAddress, byte inSubAddress, byte inActivate);
269 #ifdef DCCPP_PRINT_DCCPP 271 #define PRINT_DCCPP DCCpp::showConfiguration(); 275 static void showConfiguration();
static void setAccessory(int inAddress, byte inSubAddress, byte inActivate)
static int identifyLocoIdProg()
static int readCvProg(int inCvId, int callBack = 100, int callBackSub = 200)
static void setFunctionsMain(int nReg, int inLocoId, FunctionsState &inStates)
static int readCvMain(int inCvId, int callBack = 100, int callBackSub = 200)
static bool setSpeedMain(int nReg, int inLocoId, int inStepsNumber, int inNewSpeed, bool inForward)
static void setCurrentSampleMaxProg(float inMax)
static void setCurrentSampleMaxMain(float inMax)
static void beginProgMotorShield()
static void writeCvMain(int inCvId, byte inValue, int callBack = 100, int callBackSub = 200)
static float getCurrentProg()
bool isActivated(byte inFunctionNumber)
static int identifyLocoIdMain()
void inactivate(byte inFunctionNumber)
static void setFunctionsProg(int nReg, int inLocoId, FunctionsState &inStates)
static void panicStop(bool inStop)
bool isActivationChanged(byte inFunctionNumber)
static void beginMain(uint8_t inOptionalDirectionMotor, uint8_t inSignalPin, uint8_t inSignalEnablePin, uint8_t inCurrentMonitor)
void activate(byte inFunctionNumber)
static void beginMainMotorShield()
static void writeCvProg(int inCvId, byte inValue, int callBack = 100, int callBackSub = 200)
static void beginMainPololu()
static float getCurrentMain()
static void beginProg(uint8_t inOptionalDirectionMotor, uint8_t inSignalPin, uint8_t inSignalEnablePin, uint8_t inCurrentMonitor)
static void beginProgPololu()
static bool IsMainTrack(volatile RegisterList *apRegs)
static bool setSpeedProg(int nReg, int inLocoId, int inStepsNumber, int inNewSpeed, bool inForward)
static void powerOn(bool inMain = true, bool inProg = true)
static void powerOff(bool inMain = true, bool inProg = true)