extract decoder for easy testing
This commit is contained in:
parent
32d9183b5e
commit
f9a34ff31a
@ -1,9 +1,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include "Protocol.h"
|
#include "Protocol.h"
|
||||||
|
#include "Decoder.h"
|
||||||
#define RC_STATE(value) value & 0x1
|
|
||||||
#define RC_DEVICE(value) (value >> 1) & 0x1F
|
|
||||||
#define RC_GROUP(value) (value >> 6) & 0x1F
|
|
||||||
|
|
||||||
class Protocol_1 : public Protocol {
|
class Protocol_1 : public Protocol {
|
||||||
|
|
||||||
@ -29,41 +26,4 @@ public:
|
|||||||
rcSwitch["channel"] = decoder.device;
|
rcSwitch["channel"] = decoder.device;
|
||||||
rcSwitch["raw_value"] = value;
|
rcSwitch["raw_value"] = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
|
||||||
struct Decoder {
|
|
||||||
bool state;
|
|
||||||
char group;
|
|
||||||
byte device;
|
|
||||||
|
|
||||||
void decode(unsigned long value) {
|
|
||||||
value = value >> 2;
|
|
||||||
unsigned long res = 0;
|
|
||||||
for (int i = 0; i < 12; i++) {
|
|
||||||
res |= ((value & 1) ^ 1) << i;
|
|
||||||
value = value >> 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
state = RC_STATE(res);
|
|
||||||
group = RC_GROUP(res);
|
|
||||||
switch (RC_DEVICE(res)) {
|
|
||||||
case 0b10000:
|
|
||||||
device = 1;
|
|
||||||
break;
|
|
||||||
case 0b01000:
|
|
||||||
device = 2;
|
|
||||||
break;
|
|
||||||
case 0b00100:
|
|
||||||
device = 3;
|
|
||||||
break;
|
|
||||||
case 0b00010:
|
|
||||||
device = 4;
|
|
||||||
break;
|
|
||||||
case 0b00001:
|
|
||||||
device = 5;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
};
|
|
||||||
|
|
||||||
|
|||||||
38
gateway/include/decoder.h
Normal file
38
gateway/include/decoder.h
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
#define RC_STATE(value) value & 0x1
|
||||||
|
#define RC_DEVICE(value) (value >> 1) & 0x1F
|
||||||
|
#define RC_GROUP(value) (value >> 6) & 0x1F
|
||||||
|
|
||||||
|
struct Decoder {
|
||||||
|
bool state;
|
||||||
|
char group;
|
||||||
|
unsigned char device;
|
||||||
|
|
||||||
|
void decode(unsigned long value) {
|
||||||
|
value = value >> 2;
|
||||||
|
unsigned long res = 0;
|
||||||
|
for (int i = 0; i < 12; i++) {
|
||||||
|
res |= ((value & 1) ^ 1) << i;
|
||||||
|
value = value >> 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
state = RC_STATE(res);
|
||||||
|
group = RC_GROUP(res);
|
||||||
|
switch (RC_DEVICE(res)) {
|
||||||
|
case 0b10000:
|
||||||
|
device = 1;
|
||||||
|
break;
|
||||||
|
case 0b01000:
|
||||||
|
device = 2;
|
||||||
|
break;
|
||||||
|
case 0b00100:
|
||||||
|
device = 3;
|
||||||
|
break;
|
||||||
|
case 0b00010:
|
||||||
|
device = 4;
|
||||||
|
break;
|
||||||
|
case 0b00001:
|
||||||
|
device = 5;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
@ -21,3 +21,6 @@ lib_deps =
|
|||||||
adafruit/DHT sensor library@1.3.10
|
adafruit/DHT sensor library@1.3.10
|
||||||
build_flags = -D DHT_SENSOR=0
|
build_flags = -D DHT_SENSOR=0
|
||||||
upload_port = /dev/ttyUSB0
|
upload_port = /dev/ttyUSB0
|
||||||
|
|
||||||
|
[env:native]
|
||||||
|
platform = native
|
||||||
|
|||||||
36
gateway/test/test_decoder.cpp
Normal file
36
gateway/test/test_decoder.cpp
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
#include <unity.h>
|
||||||
|
#include "Decoder.h"
|
||||||
|
|
||||||
|
|
||||||
|
void setUp(void) {
|
||||||
|
// set stuff up here
|
||||||
|
}
|
||||||
|
|
||||||
|
void tearDown(void) {
|
||||||
|
// clean stuff up here
|
||||||
|
}
|
||||||
|
|
||||||
|
void test_1_2_on(void) {
|
||||||
|
Decoder d;
|
||||||
|
d.decode(5574993);
|
||||||
|
TEST_ASSERT_EQUAL(true, d.state);
|
||||||
|
TEST_ASSERT_EQUAL(1, d.group);
|
||||||
|
TEST_ASSERT_EQUAL(2, d.device);
|
||||||
|
}
|
||||||
|
|
||||||
|
void test_1_1_off(void) {
|
||||||
|
Decoder d;
|
||||||
|
d.decode(5571924);
|
||||||
|
TEST_ASSERT_EQUAL(false, d.state);
|
||||||
|
TEST_ASSERT_EQUAL(1, d.group);
|
||||||
|
TEST_ASSERT_EQUAL(1, d.device);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char **argv) {
|
||||||
|
UNITY_BEGIN();
|
||||||
|
RUN_TEST(test_1_2_on);
|
||||||
|
RUN_TEST(test_1_1_off);
|
||||||
|
UNITY_END();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user