diff --git a/lib/Tiny/Tiny.h b/lib/Tiny/Tiny.h index 748d4d9..b2825c7 100644 --- a/lib/Tiny/Tiny.h +++ b/lib/Tiny/Tiny.h @@ -6,16 +6,16 @@ #define MASK_STATE 0x1 #define MASK_TYPE 0xF -#define ID(value) (value & 0x1F) +#define ID(value) ((unsigned long)value & MASK_ID) #define VCC(value) (((unsigned long)value & MASK_VCC) << 5) #define TEMP(value) (((unsigned long)value & MASK_VALUE) << 18) #define HUMIDITY(value) (((unsigned long)value & MASK_VALUE) << 18) #define VALUE(value) (((unsigned long)value & MASK_VALUE) << 18) -#define STATE(value) ((value & MASK_STATE) << 27) +#define STATE(value) (((unsigned long)value & MASK_STATE) << 27) #define TYPE(value) (((unsigned long)value & MASK_TYPE) << 28) #define GET_TYPE(value) (((unsigned long)value >> 28) & MASK_TYPE) -#define GET_STATE(value) ((value >> 27) & MASK_STATE) +#define GET_STATE(value) (((unsigned long)value >> 27) & MASK_STATE) #define GET_TEMP(value) (((unsigned long)value >> 18) & MASK_VALUE) #define GET_HUMIDITY(value) (((unsigned long)value >> 18) & MASK_VALUE) #define GET_VALUE(value) (((unsigned long)value >> 18) & MASK_VALUE) diff --git a/test/native/test_sensor_builder/sensor_builder.cpp b/test/native/test_sensor_builder/sensor_builder.cpp index db130f0..f011daa 100644 --- a/test/native/test_sensor_builder/sensor_builder.cpp +++ b/test/native/test_sensor_builder/sensor_builder.cpp @@ -24,6 +24,15 @@ void test_max_temp(void) { TEST_ASSERT_EQUAL(102.3, sensor["temperature"]); } +void test_max_value(void) { + StaticJsonDocument<200> jsonDoc; + unsigned long value = VALUE(1023) | TYPE(SensorType::GENERIC); + TEST_ASSERT_EQUAL(true, buildSensorJson(value, jsonDoc)); + + JsonObject sensor = jsonDoc["sensor"]; + TEST_ASSERT_EQUAL(1023, sensor["value"]); +} + void test_overflow_value(void) { StaticJsonDocument<200> jsonDoc; unsigned long value = VALUE(1024) | TYPE(SensorType::GENERIC); @@ -101,6 +110,7 @@ int main(int argc, char **argv) { UNITY_BEGIN(); RUN_TEST(test_unknown_sensor_type); RUN_TEST(test_max_temp); + RUN_TEST(test_max_value); RUN_TEST(test_overflow_value); RUN_TEST(test_max_voltage); RUN_TEST(test_overflow_voltage);