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 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 byte ackThreshold;
84 static volatile RegisterList mainRegs, progRegs;
85 static CurrentMonitor mainMonitor;
86 static CurrentMonitor progMonitor;
99 static void beginMain(uint8_t inOptionalDirectionMotor, uint8_t inSignalPin, uint8_t inSignalEnablePin, uint8_t inCurrentMonitor);
106 static void beginProg(uint8_t inOptionalDirectionMotor, uint8_t inSignalPin, uint8_t inSignalEnablePin, uint8_t inCurrentMonitor);
110 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); }
113 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); }
117 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); }
120 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); }
127 static void beginEthernet(uint8_t *inMac, uint8_t *inIp, EthernetProtocol inProtocol = EthernetProtocol::TCP);
136 static bool IsMainTrack(
volatile RegisterList *apRegs) {
return apRegs == &mainRegs; }
151 static void powerOn(
bool inMain =
true,
bool inProg =
true);
157 static void powerOff(
bool inMain =
true,
bool inProg =
true);
178 static inline float getCurrentMain() {
return mainMonitor.pin == UNDEFINED_PIN ? 0 : mainMonitor.current; }
183 static inline float getCurrentProg() {
return progMonitor.pin == UNDEFINED_PIN ? 0 : progMonitor.current; }
194 static inline bool setSpeedMain(
int nReg,
int inLocoId,
int inStepsNumber,
int inNewSpeed,
bool inForward) {
return setThrottle(&(mainRegs), nReg, inLocoId, inStepsNumber, inNewSpeed, inForward); }
208 static inline int readCvMain(
int inCvId,
int callBack = 100,
int callBackSub = 200) {
return mainRegs.readCVmain(inCvId, callBack, callBackSub); }
217 static inline void writeCvMain(
int inCvId, byte inValue,
int callBack = 100,
int callBackSub = 200) { writeCv(&(mainRegs), inCvId, inValue, callBack, callBackSub); }
235 static inline bool setSpeedProg(
int nReg,
int inLocoId,
int inStepsNumber,
int inNewSpeed,
bool inForward) {
return setThrottle(&(progRegs), nReg, inLocoId, inStepsNumber, inNewSpeed, inForward); }
249 static inline int readCvProg(
int inCvId,
int callBack = 100,
int callBackSub = 200) {
return progRegs.readCV(inCvId, callBack, callBackSub); }
257 static inline void writeCvProg(
int inCvId, byte inValue,
int callBack = 100,
int callBackSub = 200) { writeCv(&(progRegs), inCvId, inValue, callBack, callBackSub); }
273 static void setAccessory(
int inAddress, byte inSubAddress, byte inActivate);
276 #ifdef DCCPP_PRINT_DCCPP 278 #define PRINT_DCCPP DCCpp::showConfiguration(); 282 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 int identifyLocoIdProg()
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 getCurrentMain()
static void setCurrentSampleMaxMain(float inMax)
static void powerOff(bool inMain = true, bool inProg = true)
bool isActivated(byte inFunctionNumber)
static void setCurrentSampleMaxProg(float inMax)
void activate(byte inFunctionNumber)
static void beginMain(uint8_t inOptionalDirectionMotor, uint8_t inSignalPin, uint8_t inSignalEnablePin, uint8_t inCurrentMonitor)
void inactivate(byte inFunctionNumber)
static float getCurrentProg()
static void beginMainMotorShield()
bool isActivationChanged(byte inFunctionNumber)
static void writeCvMain(int inCvId, byte inValue, int callBack = 100, int callBackSub = 200)
static void beginProgPololu()
static void beginProg(uint8_t inOptionalDirectionMotor, uint8_t inSignalPin, uint8_t inSignalEnablePin, uint8_t inCurrentMonitor)
static bool setSpeedMain(int nReg, int inLocoId, int inStepsNumber, int inNewSpeed, bool inForward)
static void beginProgMotorShield()
static byte setAckThreshold(byte inNewValue)
static void beginMainPololu()
static bool IsMainTrack(volatile RegisterList *apRegs)
static void panicStop(bool inStop)
static bool setSpeedProg(int nReg, int inLocoId, int inStepsNumber, int inNewSpeed, bool inForward)
static void powerOn(bool inMain = true, bool inProg = true)