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 void setFunctionsProg(int nReg, int inLocoId, FunctionsState &inStates)
static void writeCvProg(int inCvId, byte inValue, int callBack = 100, int callBackSub = 200)
static int readCvProg(int inCvId, int callBack = 100, int callBackSub = 200)
static bool setSpeedProg(int nReg, int inLocoId, int inStepsNumber, int inNewSpeed, bool inForward)
static void setFunctionsMain(int nReg, int inLocoId, FunctionsState &inStates)
static int readCvMain(int inCvId, int callBack = 100, int callBackSub = 200)
static int identifyLocoIdMain()
static float getCurrentProg()
static float getCurrentMain()
static int identifyLocoIdProg()
static void setCurrentSampleMaxProg(float inMax)
static void setCurrentSampleMaxMain(float inMax)
void inactivate(byte inFunctionNumber)
bool isActivated(byte inFunctionNumber)
static void powerOn(bool inMain = true, bool inProg = true)
void activate(byte inFunctionNumber)
static void writeCvMain(int inCvId, byte inValue, int callBack = 100, int callBackSub = 200)
static void panicStop(bool inStop)
static void beginMain(uint8_t inOptionalDirectionMotor, uint8_t inSignalPin, uint8_t inSignalEnablePin, uint8_t inCurrentMonitor)
static void beginMainMotorShield()
static bool setSpeedMain(int nReg, int inLocoId, int inStepsNumber, int inNewSpeed, bool inForward)
static void beginProgMotorShield()
bool isActivationChanged(byte inFunctionNumber)
static void beginMainPololu()
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 void powerOff(bool inMain = true, bool inProg = true)