rtl_433/src/devices/blyss.c
obones ecb0b361ad
Change r_device.fields to constant pointer ()
Allows for static "output_fields" to be stored in readonly memory on embedded architectures.
2023-03-13 16:01:29 +01:00

74 lines
2.3 KiB
C

/** @file
Generic remote Blyss DC5-UK-WH as sold by B&Q.
Copyright (C) 2016 John Jore
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
*/
/**
Generic remote Blyss DC5-UK-WH as sold by B&Q.
DC5-UK-WH pair with receivers, the codes used may be specific to a receiver - use with caution
warmup pulse 5552 us, 2072 gap
short is 512 us pulse, 1484 us gap
long is 1508 us pulse, 488 us gap
packet gap is 6964 us
*/
#include "decoder.h"
static int blyss_callback(r_device *decoder, bitbuffer_t *bitbuffer)
{
data_t *data;
uint8_t *b;
char id_str[16];
for (int i = 0; i < bitbuffer->num_rows; ++i) {
if (bitbuffer->bits_per_row[i] != 33) // last row is 32
continue; // DECODE_ABORT_LENGTH
b = bitbuffer->bb[i];
//This needs additional validation, but works on mine. Suspect each DC5-UK-WH uses different codes as the transmitter
//is paired to the receivers to avoid being triggered by the neighbours transmitter ?!?
// TODO: cleaner implementation with 2 preamble arrays
if (((b[0] != 0xce) || (b[1] != 0x8e) || (b[2] != 0x2a) || (b[3] != 0x6c) || (b[4] != 0x80)) &&
((b[0] != 0xe7) || (b[1] != 0x37) || (b[2] != 0x7a) || (b[3] != 0x2c) || (b[4] != 0x80)))
continue; // DECODE_ABORT_EARLY
sprintf(id_str, "%02x%02x%02x%02x", b[0], b[1], b[2], b[3]);
/* clang-format off */
data = data_make(
"model", "", DATA_STRING, "Blyss-DC5ukwh",
"id", "", DATA_STRING, id_str,
NULL);
/* clang-format on */
decoder_output_data(decoder, data);
return 1;
}
return DECODE_FAIL_SANITY;
}
static char const *const output_fields[] = {
"model",
"id",
NULL,
};
r_device const blyss = {
.name = "Blyss DC5-UK-WH",
.modulation = OOK_PULSE_PWM,
.short_width = 500,
.long_width = 1500,
.gap_limit = 2500,
.reset_limit = 8000,
.decode_fn = &blyss_callback,
.fields = output_fields,
};