mirror of
https://github.com/merbanan/rtl_433.git
synced 2026-04-21 10:07:03 -04:00
Change wt0124 to use additional checksum (#1959)
This commit is contained in:
@@ -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,
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user