Change wt0124 to use additional checksum (#1959)

This commit is contained in:
Robert Högberg
2022-01-24 05:15:52 +01:00
committed by GitHub
parent 9ad889f46c
commit 29b14b4dc6

View File

@@ -12,9 +12,9 @@
/**
WT0124 Pool Thermometer decoder.
5e ba 9a 9f e1 34
01011110 10111010 10011010 10011111 11100001 00110100
5555RRRR RRRRTTTT TTTTTTTT UUCCFFFF XXXXXXXX ????????
5e ba 9a 9f e1 34 1
01011110 10111010 10011010 10011111 11100001 00110100 1
5555RRRR RRRRTTTT TTTTTTTT UUCCFFFF XXXXXXXX SSSSSSSS 1
- 5 = constant 5
- R = random power on id
@@ -23,8 +23,8 @@ WT0124 Pool Thermometer decoder.
- C = channel
- F = constant F
- X = xor checksum
- ? = unknown
- S = sum checksum
- 1 = constant 1
*/
#include "decoder.h"
@@ -33,8 +33,8 @@ static int wt1024_callback(r_device *decoder, bitbuffer_t *bitbuffer)
{
data_t *data;
uint8_t *b; // bits of a row
uint16_t sum;
uint16_t sensor_rid;
int16_t value;
float temp_c;
uint8_t channel;
@@ -49,10 +49,20 @@ static int wt1024_callback(r_device *decoder, bitbuffer_t *bitbuffer)
return DECODE_ABORT_EARLY;
}
/* Validate checksum */
/* Validate xor checksum */
if (xor_bytes(b, 4) != b[4])
return DECODE_FAIL_MIC;
/* Validate sum checksum */
sum = add_bytes(b, 4);
/* Carry bits are added to the sum .. */
sum += sum >> 8;
/* .. but no carry bit is added to the sum from the last addition */
sum += b[4];
sum &= 0xFF;
if (sum != b[5])
return DECODE_FAIL_MIC;
/* Get rid */
sensor_rid = (b[0] & 0x0F) << 4 | (b[1] & 0x0F);
@@ -62,9 +72,6 @@ static int wt1024_callback(r_device *decoder, bitbuffer_t *bitbuffer)
/* Get channel */
channel = (b[3] >> 4) & 0x3;
/* unk */
value = b[5];
if (decoder->verbose) {
fprintf(stderr, "wt1024_callback:");
bitbuffer_print(bitbuffer);
@@ -76,7 +83,6 @@ static int wt1024_callback(r_device *decoder, bitbuffer_t *bitbuffer)
"id", "Random ID", DATA_INT, sensor_rid,
"channel", "Channel", DATA_INT, channel,
"temperature_C", "Temperature", DATA_FORMAT, "%.1f C", DATA_DOUBLE, temp_c,
"data", "Data", DATA_INT, value,
"mic", "Integrity", DATA_STRING, "CHECKSUM",
NULL);
/* clang-format on */
@@ -99,7 +105,6 @@ static char *output_fields[] = {
"id",
"channel",
"temperature_C",
"data",
"mic",
NULL,
};