40 lines
975 B
C++
40 lines
975 B
C++
#define RC_STATE(value) value & 0x1
|
|
#define RC_DEVICE(value) (value >> 1) & 0x1F
|
|
#define RC_GROUP(value) (value >> 6) & 0x1F
|
|
|
|
namespace RcDecoder {
|
|
|
|
struct RcSwitch {
|
|
bool state;
|
|
char group;
|
|
byte device;
|
|
};
|
|
|
|
void decode(unsigned long value, RcSwitch& decoded) {
|
|
value = value >> 2;
|
|
unsigned long res = 0;
|
|
for (int i = 0; i < 12; i++) {
|
|
res |= ((value & 1) ^ 1) << i;
|
|
value = value >> 2;
|
|
}
|
|
decoded.state = RC_STATE(res);
|
|
decoded.group = RC_GROUP(res);
|
|
switch (RC_DEVICE(res)) {
|
|
case 0b10000:
|
|
decoded.device = 1;
|
|
break;
|
|
case 0b01000:
|
|
decoded.device = 2;
|
|
break;
|
|
case 0b00100:
|
|
decoded.device = 3;
|
|
break;
|
|
case 0b00010:
|
|
decoded.device = 4;
|
|
break;
|
|
case 0b00001:
|
|
decoded.device = 5;
|
|
break;
|
|
}
|
|
}
|
|
} |