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; }
167 static inline float getCurrentMain() {
return mainMonitor.pin == UNDEFINED_PIN ? 0 : mainMonitor.current; }
172 static inline float getCurrentProg() {
return progMonitor.pin == UNDEFINED_PIN ? 0 : progMonitor.current; }
183 static inline bool setSpeedMain(
int nReg,
int inLocoId,
int inStepsNumber,
int inNewSpeed,
bool inForward) {
return setThrottle(&(mainRegs), nReg, inLocoId, inStepsNumber, inNewSpeed, inForward); }
197 static inline int readCvMain(
int inCvId,
int callBack = 100,
int callBackSub = 200) {
return mainRegs.readCVmain(inCvId, callBack, callBackSub); }
206 static inline void writeCvMain(
int inCvId, byte inValue,
int callBack = 100,
int callBackSub = 200) { writeCv(&(mainRegs), inCvId, inValue, callBack, callBackSub); }
224 static inline bool setSpeedProg(
int nReg,
int inLocoId,
int inStepsNumber,
int inNewSpeed,
bool inForward) {
return setThrottle(&(progRegs), nReg, inLocoId, inStepsNumber, inNewSpeed, inForward); }
238 static inline int readCvProg(
int inCvId,
int callBack = 100,
int callBackSub = 200) {
return progRegs.readCV(inCvId, callBack, callBackSub); }
246 static inline void writeCvProg(
int inCvId, byte inValue,
int callBack = 100,
int callBackSub = 200) { writeCv(&(progRegs), inCvId, inValue, callBack, callBackSub); }
262 static void setAccessory(
int inAddress, byte inSubAddress, byte inActivate);
265 #ifdef DCCPP_PRINT_DCCPP 267 #define PRINT_DCCPP DCCpp::showConfiguration(); 271 static void showConfiguration();
static void writeCvProg(int inCvId, byte inValue, int callBack = 100, int callBackSub = 200)
static int identifyLocoIdProg()
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 void setCurrentSampleMaxProg(float inMax)
static void setCurrentSampleMaxMain(float inMax)
static int readCvProg(int inCvId, int callBack = 100, int callBackSub = 200)
static void beginMainPololu()
static void setFunctionsProg(int nReg, int inLocoId, FunctionsState &inStates)
bool isActivated(byte inFunctionNumber)
void activate(byte inFunctionNumber)
static bool IsMainTrack(volatile RegisterList *apRegs)
static void panicStop(bool inStop)
static void setAccessory(int inAddress, byte inSubAddress, byte inActivate)
void inactivate(byte inFunctionNumber)
static int identifyLocoIdMain()
bool isActivationChanged(byte inFunctionNumber)
static float getCurrentProg()
static void beginMainMotorShield()
static bool setSpeedMain(int nReg, int inLocoId, int inStepsNumber, int inNewSpeed, bool inForward)
static void beginProgMotorShield()
static void beginProg(uint8_t inOptionalDirectionMotor, uint8_t inSignalPin, uint8_t inSignalEnablePin, uint8_t inCurrentMonitor)
static void beginProgPololu()
static void beginMain(uint8_t inOptionalDirectionMotor, uint8_t inSignalPin, uint8_t inSignalEnablePin, uint8_t inCurrentMonitor)
static float getCurrentMain()