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 bool writeCv(
volatile RegisterList *inReg,
int inCvId, byte inCvValue,
int callBack = 100,
int callBackSub = 200);
83 static byte ackThreshold;
87 static bool IsPowerOnMain;
88 static bool IsPowerOnProg;
95 #ifndef USE_ONLY1_INTERRUPT 102 static void beginMain(uint8_t inOptionalDirectionMotor, uint8_t inSignalPin, uint8_t inSignalEnablePin, uint8_t inCurrentMonitor);
109 static void beginProg(uint8_t inOptionalDirectionMotor, uint8_t inSignalPin, uint8_t inSignalEnablePin, uint8_t inCurrentMonitor);
111 #ifdef ARDUINO_ARCH_AVR 114 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); }
117 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); }
121 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); }
124 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); }
133 static void beginMain(uint8_t inSignalPin, uint8_t inSignalEnablePin, uint8_t inCurrentMonitor);
140 static void beginProg(uint8_t inSignalPin, uint8_t inSignalEnablePin, uint8_t inCurrentMonitor);
142 #ifdef ARDUINO_ARCH_AVR 145 static inline void beginMainMotorShield() {
beginMain(DCC_SIGNAL_PIN_MAIN, MOTOR_SHIELD_SIGNAL_ENABLE_PIN_MAIN, MOTOR_SHIELD_CURRENT_MONITOR_PIN_MAIN); }
148 static inline void beginProgMotorShield() {
beginProg(DCC_SIGNAL_PIN_PROG, MOTOR_SHIELD_SIGNAL_ENABLE_PIN_PROG, MOTOR_SHIELD_CURRENT_MONITOR_PIN_PROG); }
152 static inline void beginMainPololu() {
beginMain(DCC_SIGNAL_PIN_MAIN, POLOLU_SIGNAL_ENABLE_PIN_MAIN, POLOLU_CURRENT_MONITOR_PIN_MAIN); }
155 static inline void beginProgPololu() {
beginProg(DCC_SIGNAL_PIN_PROG, POLOLU_SIGNAL_ENABLE_PIN_PROG, POLOLU_CURRENT_MONITOR_PIN_PROG); }
179 static void beginEthernet(uint8_t *inMac, uint8_t *inIp, EthernetProtocol inProtocol = EthernetProtocol::TCP);
213 static void powerOn(
bool inMain =
true,
bool inProg =
true);
219 static void powerOff(
bool inMain =
true,
bool inProg =
true);
257 static inline bool setSpeedMain(
int nReg,
int inLocoId,
int inStepsNumber,
int inNewSpeed,
bool inForward) {
return setThrottle(&(mainRegs), nReg, inLocoId, inStepsNumber, inNewSpeed, inForward); }
271 static inline int readCvMain(
int inCvId,
int callBack = 100,
int callBackSub = 200) {
return mainRegs.readCVmain(inCvId, callBack, callBackSub); }
280 static inline void writeCvMain(
int inCvId, byte inValue,
int callBack = 100,
int callBackSub = 200) { writeCv(&(mainRegs), inCvId, inValue, callBack, callBackSub); }
299 static inline bool setSpeedProg(
int nReg,
int inLocoId,
int inStepsNumber,
int inNewSpeed,
bool inForward) {
return setThrottle(&(progRegs), nReg, inLocoId, inStepsNumber, inNewSpeed, inForward); }
313 static inline int readCvProg(
int inCvId,
int callBack = 100,
int callBackSub = 200) {
return progRegs.readCV(inCvId, callBack, callBackSub); }
322 static inline bool writeCvProg(
int inCvId, byte inValue,
int callBack = 100,
int callBackSub = 200) {
return writeCv(&(progRegs), inCvId, inValue, callBack, callBackSub); }
338 static void setAccessory(
int inAddress, byte inSubAddress, byte inActivate);
342 #ifdef DCCPP_DEBUG_MODE 348 static void CheckPowerConnectionsWithLeds(uint8_t aDirPin,
unsigned int inDelay);
351 #ifdef DCCPP_PRINT_DCCPP 353 #define PRINT_DCCPP DCCpp::showConfiguration(); static void showConfiguration()
static void setAccessory(int inAddress, byte inSubAddress, byte inActivate)
static void setFunctionsProg(int nReg, int inLocoId, FunctionsState &inStates)
static bool 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 bool setSpeedProg(int nReg, int inLocoId, int inStepsNumber, int inNewSpeed, bool inForward)
static void writeCvMain(int inCvId, byte inValue, int callBack=100, int callBackSub=200)
static void beginMainDccSignal(uint8_t inSignalPin)
void activate(byte inFunctionNumber)
void inactivate(byte inFunctionNumber)
bool isActivated(byte inFunctionNumber)
static void beginMain(uint8_t inOptionalDirectionMotor, uint8_t inSignalPin, uint8_t inSignalEnablePin, uint8_t inCurrentMonitor)
static void setCurrentSampleMaxProg(float inMax)
static void beginProg(uint8_t inOptionalDirectionMotor, uint8_t inSignalPin, uint8_t inSignalEnablePin, uint8_t inCurrentMonitor)
static void setFunctionsMain(int nReg, int inLocoId, FunctionsState &inStates)
static void beginProgDccSignal(uint8_t inSignalPin)
static void setDebugDccMode()
static bool IsMainTrack(volatile RegisterList *apRegs)
static byte setAckThreshold(byte inNewValue)
static bool IsMainTrackDeclared()
static float getCurrentMain()
static bool IsProgTrackDeclared()
static void panicStop(bool inStop)
bool isActivationChanged(byte inFunctionNumber)
static void powerOff(bool inMain=true, bool inProg=true)
static void setCurrentSampleMaxMain(float inMax)
static float getCurrentProg()
static bool setSpeedMain(int nReg, int inLocoId, int inStepsNumber, int inNewSpeed, bool inForward)
static int identifyLocoIdMain()
static void powerOn(bool inMain=true, bool inProg=true)
static int readCvMain(int inCvId, int callBack=100, int callBackSub=200)