if this were a boolean or a 1 or 0 i would understand 1 = 0 or 0=1 but when were talking about a hex value i dont understand what the value would be. if i understand right ~ would flip the binary bits of that value? but when i use the bitwise NOT operator like this what does the value equal? i think it == 00001
but i cant figure out the persons logic with this method. Can someone please explain this to me
enum TiStates {
tiEnabled = 0x80,
tiRunning = 0x40,
tiOnValue = 0x20,
tiUpdated = 0x10,
tiSetable = tiEnabled + tiRunning + tiOnValue,
};
Timers*.status &= ~tiUpdated;*
```
*#pragma once
struct Hdr {
byte type;
byte to;
byte from;
byte id;
Hdr() : type(0), to(0), from(0), id(0) {}
Hdr(byte inType, byte inTo, byte inFrom) : type(inType), to(inTo), from(inFrom), id('a') {}
void incId() {
if (id++ == 'z') {
id = 'a';
}
}
bool isType(byte inType) {
return type == inType;
}
bool isTypeTo(byte inType, byte inTo) {
return isType(inType) && to == inTo;
}
};
enum TiStates {
tiEnabled = 0x80,
tiRunning = 0x40,
tiOnValue = 0x20,
tiUpdated = 0x10,
tiSetable = tiEnabled + tiRunning + tiOnValue,
};
struct aTimer {
byte status;
uint16_t onTime;
uint16_t offTime;
aTimer(uint16_t iOn, uint16_t iOff) : status(0), onTime(iOn), offTime(iOff) {}
aTimer() : status(0), onTime(0), offTime(0) {}
};
struct TimerInfos : public Hdr {
aTimer Timers[4];
int timer;
int relay1Mode = 1;
int relay2Mode = 1;
int relay3Mode = 1;
int relay4Mode = 1;
byte timer1Enabled;
byte timer2Enabled;
byte timer3Enabled;
byte timer4Enabled;
int timer1State = 0;
int timer2State = 0;
int timer3State = 0;
int timer4State = 0;
bool timer1On = false;
bool timer2On = false;
bool timer3On = false;
bool timer4On = false;
int timerRunStatus;
TimerInfos (byte from) : Hdr('T', '*', from), timer(1), timerRunStatus(0), timer1Enabled(1), timer2Enabled(1), timer3Enabled(1), timer4Enabled(1), Timers{ aTimer(111, 111), aTimer(111, 111), aTimer(111, 111), aTimer(111, 111) } {}
bool setFlags(byte timerNumber, byte flags) {
byte previous = Timers[timerNumber].status;
Timers[timerNumber].status |= flags & tiSetable;
return changedFlags(timerNumber, previous);
}
bool clrFlags(byte timerNumber, byte flags) {
byte previous = Timers[timerNumber].status;
Timers[timerNumber].status &= ~(flags & tiSetable);
return changedFlags(timerNumber, previous);
}
bool copyFlags(byte timerNumber, byte flags) {
byte previous = Timers[timerNumber].status & tiSetable;
flags &= tiSetable;
if (previous != flags) {
Timers[timerNumber].status = flags | tiUpdated;
return true;
}
return false;
}
bool setOnTime(byte timerNumber, uint16_t value) {
uint16_t previous = Timers[timerNumber].onTime;
Timers[timerNumber].onTime = value;
return changedOn(timerNumber, previous);
}
bool setOffTime(byte timerNumber, uint16_t value) {
uint16_t previous = Timers[timerNumber].offTime;
Timers[timerNumber].offTime = value;
return changedOff(timerNumber, previous);
}
bool anyUpdated() {
bool upd = false;
for (byte i = 0; i < sizeof(Timers) / sizeof(Timers[0]); i++) {
upd |= Timers[i].status & tiUpdated;
}
return upd;
}
void clrUpdated() {
for (byte i = 0; i < sizeof(Timers) / sizeof(Timers[0]); i++) {
Timers[i].status &= ~tiUpdated;
}
}
bool setFrom(TimerInfos* in) {
bool changes = false;
clrUpdated();
for (byte i = 0; i < sizeof(Timers) / sizeof(Timers[0]); i++) {
changes |= copyFlags(i, in->Timers[i].status);
changes |= setOnTime(i, in->Timers[i].onTime);
changes |= setOffTime(i, in->Timers[i].offTime);
}
return changes;
}
protected:
bool changedFlags(byte timerNumber, byte previous) {
return adjustChangedFlag(timerNumber, (Timers[timerNumber].status ^ previous) & tiSetable);
}
bool changedOn(byte timerNumber, uint16_t previous) {
return adjustChangedFlag(timerNumber, Timers[timerNumber].onTime != previous);
}
bool changedOff(byte timerNumber, uint16_t previous) {
return adjustChangedFlag(timerNumber, Timers[timerNumber].offTime != previous);
}
bool adjustChangedFlag(byte timerNumber, bool different) {
if (different) {
Timers[timerNumber].status |= tiUpdated;
//} else {
// Timers[timerNumber].status &= ~tiUpdated;
}
return different;
}
};
struct Command : public Hdr {
byte text[32 - sizeof(Hdr)];
Command(byte from) : Hdr('!', '?', from), text("") {}
byte setData(byte target, const char* txt) {
to = target;
strcpy((char*)text, txt);
return strlen(txt) + 1 + sizeof(Hdr);
}
};*
```