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