Change data_acquired_handler to decoder_output_data

This commit is contained in:
Christian W. Zuckschwerdt 2018-11-26 17:02:38 +01:00 committed by Christian W. Zuckschwerdt
parent 838797ddf1
commit 96a14e6f5f
93 changed files with 322 additions and 318 deletions

View file

@ -26,7 +26,4 @@
extern int debug_output;
extern float sample_file_pos;
/** Pass the data structure to all output handlers. Frees data afterwards. */
void data_acquired_handler(data_t *data);
#endif /* INCLUDE_DECODER_H_ */

View file

@ -245,7 +245,7 @@ static int acurite_rain_gauge_callback(r_device *decoder, bitbuffer_t *bitbuffer
"rain", "Total Rain", DATA_FORMAT, "%.1f mm", DATA_DOUBLE, total_rain,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}
@ -315,7 +315,7 @@ static int acurite_th_callback(r_device *decoder, bitbuffer_t *bitbuf)
"humidity", "Humidity", DATA_INT, humidity,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
valid++;
}
@ -472,7 +472,7 @@ static float acurite_6045_getTemp(uint8_t highbyte, uint8_t lowbyte)
* @todo - figure out remaining status bits and how to report
*/
static int acurite_6045_decode(bitrow_t bb, int browlen)
static int acurite_6045_decode(r_device *decoder, bitrow_t bb, int browlen)
{
int valid = 0;
float tempf;
@ -552,7 +552,7 @@ static int acurite_6045_decode(bitrow_t bb, int browlen)
"raw_msg", "raw_message", DATA_STRING, raw_str,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
valid++;
return(valid);
@ -664,7 +664,7 @@ static int acurite_txr_callback(r_device *decoder, bitbuffer_t *bitbuf)
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
valid++;
}
@ -719,7 +719,7 @@ static int acurite_txr_callback(r_device *decoder, bitbuffer_t *bitbuf)
"raincounter_raw", NULL, DATA_INT, raincounter,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
} else if (message_type == ACURITE_MSGTYPE_5N1_WINDSPEED_TEMP_HUMIDITY) {
// Wind speed, temperature and humidity
@ -741,7 +741,7 @@ static int acurite_txr_callback(r_device *decoder, bitbuffer_t *bitbuf)
"temperature_F", "temperature", DATA_FORMAT, "%.1f F", DATA_DOUBLE, tempf,
"humidity", NULL, DATA_FORMAT, "%d", DATA_INT, humidity,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
} else if (message_type == ACURITE_MSGTYPE_WINDSPEED_TEMP_HUMIDITY_3N1) {
// Wind speed, temperature and humidity for 3-n-1
@ -762,7 +762,7 @@ static int acurite_txr_callback(r_device *decoder, bitbuffer_t *bitbuf)
"temperature_F", "temperature", DATA_FORMAT, "%.1f F", DATA_DOUBLE, tempf,
"humidity", NULL, DATA_FORMAT, "%d", DATA_INT, humidity,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
} else {
fprintf(stderr, "%s Acurite 5n1 sensor 0x%04X Ch %c, Status %02X, Unknown message type 0x%02x\n",
@ -772,7 +772,7 @@ static int acurite_txr_callback(r_device *decoder, bitbuffer_t *bitbuf)
if (browlen == ACURITE_6045_BITLEN / 8) {
// @todo check parity and reject if invalid
valid += acurite_6045_decode(bb, browlen);
valid += acurite_6045_decode(decoder, bb, browlen);
}
}
@ -926,7 +926,7 @@ static int acurite_986_callback(r_device *decoder, bitbuffer_t *bitbuf)
"status", "status", DATA_INT, status,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
valid_cnt++;
@ -1019,7 +1019,7 @@ static int acurite_606_callback(r_device *decoder, bitbuffer_t *bitbuf)
"battery", "Battery", DATA_STRING, battery ? "OK" : "LOW",
"temperature_C", "Temperature", DATA_FORMAT, "%.1f C", DATA_DOUBLE, temperature,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}
}
@ -1144,7 +1144,7 @@ static int acurite_00275rm_callback(r_device *decoder, bitbuffer_t *bitbuf)
} else { // suppress compiler warning
return 0;
}
data_acquired_handler(data);
decoder_output_data(decoder, data);
valid=1;
}
}

View file

@ -47,7 +47,7 @@ static int akhan_rke_callback(r_device *decoder, bitbuffer_t *bitbuffer) {
"data", "Data (4bit)", DATA_STRING, cmd_str,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}

View file

@ -131,7 +131,7 @@ static int alectov1_callback(r_device *decoder, bitbuffer_t *bitbuffer) {
"wind_direction", "Direction", DATA_INT, direction,
"mic", "Integrity", DATA_STRING, "CHECKSUM",
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
}
} else {
// Rain sensor
@ -145,7 +145,7 @@ static int alectov1_callback(r_device *decoder, bitbuffer_t *bitbuffer) {
"rain_total", "Total Rain", DATA_FORMAT, "%.02f mm", DATA_DOUBLE, rain_mm,
"mic", "Integrity", DATA_STRING, "CHECKSUM",
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
}
} else if (bb[2][0] == bb[3][0] && bb[3][0] == bb[4][0] && bb[4][0] == bb[5][0] &&
bb[5][0] == bb[6][0] && (bb[3][4] & 0xf) == 0 && (bb[5][4] & 0xf) == 0) {
@ -166,7 +166,7 @@ static int alectov1_callback(r_device *decoder, bitbuffer_t *bitbuffer) {
"humidity", "Humidity", DATA_FORMAT, "%u %%", DATA_INT, humidity,
"mic", "", DATA_STRING, "CHECKSUM",
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
}
if (debug_output){
fprintf(stdout, "Checksum = %01x (calculated %01x)\n", bb[1][4] >> 4, csum);

View file

@ -14,7 +14,7 @@ static const uint8_t preamble_pattern[2] = {0x01, 0x45}; // 12 bits
static const uint8_t preamble_inverted[2] = {0xfd, 0x45}; // 12 bits
static int
ambient_weather_decode(bitbuffer_t *bitbuffer, unsigned row, unsigned bitpos)
ambient_weather_decode(r_device *decoder, bitbuffer_t *bitbuffer, unsigned row, unsigned bitpos)
{
uint8_t b[6];
int deviceID;
@ -57,7 +57,7 @@ ambient_weather_decode(bitbuffer_t *bitbuffer, unsigned row, unsigned bitpos)
"humidity", "Humidity", DATA_FORMAT, "%u %%", DATA_INT, humidity,
"mic", "Integrity", DATA_STRING, "CRC",
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}
@ -75,7 +75,7 @@ ambient_weather_callback(r_device *decoder, bitbuffer_t *bitbuffer)
while ((bitpos = bitbuffer_search(bitbuffer, row, bitpos,
(const uint8_t *)&preamble_pattern, 12)) + 8+6*8 <=
bitbuffer->bits_per_row[row]) {
events += ambient_weather_decode(bitbuffer, row, bitpos + 8);
events += ambient_weather_decode(decoder, bitbuffer, row, bitpos + 8);
if (events) return events; // for now, break after first successful message
bitpos += 16;
}
@ -83,7 +83,7 @@ ambient_weather_callback(r_device *decoder, bitbuffer_t *bitbuffer)
while ((bitpos = bitbuffer_search(bitbuffer, row, bitpos,
(const uint8_t *)&preamble_inverted, 12)) + 8+6*8 <=
bitbuffer->bits_per_row[row]) {
events += ambient_weather_decode(bitbuffer, row, bitpos + 8);
events += ambient_weather_decode(decoder, bitbuffer, row, bitpos + 8);
if (events) return events; // for now, break after first successful message
bitpos += 15;
}

View file

@ -104,7 +104,7 @@ static int ambientweather_tx8300_callback(r_device *decoder, bitbuffer_t *bitbuf
data = data_append(data,
"mic", "MIC", DATA_STRING, "CHECKSUM", // actually a per-bit parity, chksum unknown
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}

View file

@ -33,7 +33,7 @@
#include "decoder.h"
static int ambientweather_wh31e_callback(bitbuffer_t *bitbuffer)
static int ambientweather_wh31e_callback(r_device *decoder, bitbuffer_t *bitbuffer)
{
char time_str[LOCAL_TIME_BUFLEN];
data_t *data;
@ -99,7 +99,7 @@ static int ambientweather_wh31e_callback(bitbuffer_t *bitbuffer)
"mic", "Integrity", DATA_STRING, "CRC",
NULL);
/* clang-format on */
data_acquired_handler(data);
decoder_output_data(decoder, data);
events++;
}
return events;

View file

@ -43,7 +43,7 @@ static int blyss_callback(r_device *decoder,bitbuffer_t *bitbuffer) {
"model", "", DATA_STRING, "Blyss-DC5ukwh",
"id", "", DATA_STRING, id_str,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}

View file

@ -17,7 +17,7 @@
#include "decoder.h"
static int brennenstuhl_rcs_2044_process_row(bitbuffer_t const *bitbuffer, int row)
static int brennenstuhl_rcs_2044_process_row(r_device *decoder, bitbuffer_t const *bitbuffer, int row)
{
uint8_t const *b = bitbuffer->bb[row];
int const length = bitbuffer->bits_per_row[row];
@ -94,7 +94,7 @@ static int brennenstuhl_rcs_2044_process_row(bitbuffer_t const *bitbuffer, int r
"key", "key", DATA_STRING, key,
"state", "state", DATA_STRING, (on_off == 0x02 ? "ON" : "OFF"),
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}
@ -102,7 +102,7 @@ static int brennenstuhl_rcs_2044_callback(r_device *decoder, bitbuffer_t *bitbuf
{
int counter = 0;
for (int row = 0; row < bitbuffer->num_rows; row++)
counter += brennenstuhl_rcs_2044_process_row(bitbuffer, row);
counter += brennenstuhl_rcs_2044_process_row(decoder, bitbuffer, row);
return counter;
}

View file

@ -81,7 +81,7 @@ static int bresser_3ch_callback(r_device *decoder, bitbuffer_t *bitbuffer) {
"humidity", "Humidity", DATA_FORMAT, "%u %%", DATA_INT, humidity,
"mic", "Integrity", DATA_STRING, "CHECKSUM",
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}

View file

@ -85,7 +85,7 @@ static int calibeur_rf104_callback(r_device *decoder, bitbuffer_t *bitbuffer) {
"humidity", "Humidity", DATA_FORMAT, "%2.0f %%", DATA_DOUBLE, humidity,
"mic", "Integrity", DATA_STRING, "CRC",
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}
return 0;

View file

@ -111,7 +111,7 @@ static int cardin_callback(r_device *decoder, bitbuffer_t *bitbuffer) {
"rbutton", "right button switches", DATA_STRING, rbutton[((bb[0][2] & 15) / 3)-1],
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}

View file

@ -73,7 +73,7 @@ static int chuango_callback(r_device *decoder, bitbuffer_t *bitbuffer) {
"cmd_id", "CMD_ID", DATA_INT, cmd,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}

View file

@ -49,7 +49,7 @@ static int current_cost_callback(r_device *decoder, bitbuffer_t *bitbuffer) {
"power2", "Power 2", DATA_FORMAT, "%d W", DATA_INT, watt2,
//"battery", "Battery", DATA_STRING, battery_low ? "LOW" : "OK", //TODO is there some low battery indicator ?
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}
// Counter (packet[0] = 0100xxxx) bits 5 and 4 are "unknown", but always 0 to date.
@ -65,7 +65,7 @@ static int current_cost_callback(r_device *decoder, bitbuffer_t *bitbuffer) {
//"counter", "Counter", DATA_FORMAT, "%d", DATA_INT, c_impulse,
"power0", "Counter", DATA_FORMAT, "%d", DATA_INT, c_impulse,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}

View file

@ -144,7 +144,7 @@ static int danfoss_cfr_callback(r_device *decoder, bitbuffer_t *bitbuffer)
"switch", "Switch", DATA_STRING, str_sw,
"mic", "Integrity", DATA_STRING, "CRC",
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}

View file

@ -128,7 +128,7 @@ static int dish_remote_6_3_callback(r_device *decoder, bitbuffer_t *bitbuffer)
"button", "", DATA_STRING, button_string,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}

View file

@ -201,7 +201,7 @@ static int dsc_callback(r_device *decoder, bitbuffer_t *bitbuffer)
"status_hex", "", DATA_STRING, status_str, // to be removed - once bits are output
"mic", "", DATA_STRING, "CRC",
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
valid_cnt++; // Have a valid packet.
}

View file

@ -90,7 +90,7 @@ static int efergy_e2_classic_callback(r_device *decoder, bitbuffer_t *bitbuffer)
"mic", "Integrity", DATA_STRING, "CHECKSUM",
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}

View file

@ -121,7 +121,7 @@ static int efergy_optical_callback(r_device *decoder, bitbuffer_t *bitbuffer) {
"pulses", "Pulse-rate", DATA_FORMAT,"%i", DATA_INT, imp_kwh[i],
"energy", "Energy", DATA_FORMAT,"%.03f KWh", DATA_DOUBLE, energy,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
}
return 1;
}

View file

@ -44,7 +44,7 @@ static int elro_db286a_callback(r_device *decoder, bitbuffer_t *bitbuffer)
"id", "ID", DATA_STRING, id_str,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;

View file

@ -126,7 +126,7 @@ static int emontx_callback(r_device *decoder, bitbuffer_t *bitbuffer) {
words[9] == 3000 ? NULL : "temp5_C", "", DATA_FORMAT, "%.1f", DATA_DOUBLE, (double)words[9] / 10.0,
words[10] == 3000 ? NULL : "temp6_C", "", DATA_FORMAT, "%.1f", DATA_DOUBLE, (double)words[10] / 10.0,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
events++;
}
return events;

View file

@ -53,7 +53,7 @@
*/
#include "decoder.h"
static int esperanza_ews_process_row(const bitbuffer_t *bitbuffer, int row)
static int esperanza_ews_process_row(r_device *decoder, bitbuffer_t *bitbuffer, int row)
{
const uint8_t *b = bitbuffer->bb[row];
uint8_t humidity;
@ -80,7 +80,7 @@ static int esperanza_ews_process_row(const bitbuffer_t *bitbuffer, int row)
"temperature_F", "Temperature", DATA_FORMAT, "%.02f F", DATA_DOUBLE, temperature_f,
"humidity", "Humidity", DATA_FORMAT, "%u %%", DATA_INT, humidity,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}
@ -106,7 +106,7 @@ static int esperanza_ews_callback(r_device *decoder, bitbuffer_t *bitbuffer)
if (memcmp(bitbuffer->bb[row], bitbuffer->bb[row+2], sizeof(bitbuffer->bb[row])) != 0 || bitbuffer->bits_per_row[row] != 42)
return 0;
}
esperanza_ews_process_row(bitbuffer, 2);
esperanza_ews_process_row(decoder, bitbuffer, 2);
return 1;
}
return 0;

View file

@ -111,7 +111,7 @@ static int fineoffset_WH2_callback(r_device *decoder, bitbuffer_t *bitbuffer) {
"temperature_C", "Temperature", DATA_FORMAT, "%.01f C", DATA_DOUBLE, temperature,
"mic", "Integrity", DATA_STRING, "CRC",
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
}
// Thermo/Hygro
else {
@ -122,7 +122,7 @@ static int fineoffset_WH2_callback(r_device *decoder, bitbuffer_t *bitbuffer) {
"humidity", "Humidity", DATA_FORMAT, "%u %%", DATA_INT, humidity,
"mic", "Integrity", DATA_STRING, "CRC",
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
}
return 1;
}
@ -289,7 +289,7 @@ static int fineoffset_WH24_callback(r_device *decoder, bitbuffer_t *bitbuffer)
data_append(data, "light_lux", "Light", DATA_FORMAT, "%.1f lux", DATA_DOUBLE, light_lux, NULL);
data_append(data, "battery", "Battery", DATA_STRING, low_battery ? "LOW" : "OK",
"mic", "Integrity", DATA_STRING, "CRC", NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}
@ -376,7 +376,7 @@ static int fineoffset_WH25_callback(r_device *decoder, bitbuffer_t *bitbuffer) {
"battery", "Battery", DATA_STRING, low_battery ? "LOW" : "OK",
"mic", "Integrity", DATA_STRING, "CHECKSUM",
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}
@ -445,7 +445,7 @@ static int fineoffset_WH0530_callback(r_device *decoder, bitbuffer_t *bitbuffer)
"battery", "Battery", DATA_STRING, battery_low ? "LOW" : "OK",
"mic", "Integrity", DATA_STRING, "CRC",
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}

View file

@ -172,7 +172,7 @@ static int fineoffset_wh1050_callback(r_device *decoder, bitbuffer_t *bitbuffer)
"rain", "Total rainfall", DATA_FORMAT, "%.01f", DATA_DOUBLE, rain,
"battery", "Battery", DATA_STRING, battery, // Unsure about Battery byte...
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}

View file

@ -387,7 +387,7 @@ static int fineoffset_wh1080_callback(r_device *decoder, bitbuffer_t *bitbuffer)
"rain", "Total rainfall",DATA_FORMAT, "%3.1f", DATA_DOUBLE, rain,
"battery", "Battery", DATA_STRING, battery,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
} else if (msg_type == 1) {
@ -405,7 +405,7 @@ static int fineoffset_wh1080_callback(r_device *decoder, bitbuffer_t *bitbuffer)
"month", "Month\t", DATA_FORMAT, "%02d", DATA_INT, month,
"day", "Day\t", DATA_FORMAT, "%02d", DATA_INT, day,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
} else {
@ -421,7 +421,7 @@ static int fineoffset_wh1080_callback(r_device *decoder, bitbuffer_t *bitbuffer)
"wm", "Watts/m\t", DATA_FORMAT, "%.2f", DATA_DOUBLE, wm,
"fc", "Foot-candles", DATA_FORMAT, "%.2f", DATA_DOUBLE, fc,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}
}

View file

@ -143,7 +143,7 @@ static int flex_callback(r_device *decoder, bitbuffer_t *bitbuffer, struct flex_
"model", "", DATA_STRING, params->name,
"count", "", DATA_INT, match_count,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 0;
}
@ -194,7 +194,7 @@ static int flex_callback(r_device *decoder, bitbuffer_t *bitbuffer, struct flex_
"rows", "", DATA_ARRAY, data_array(bitbuffer->num_rows, DATA_DATA, row_data),
"codes", "", DATA_ARRAY, data_array(bitbuffer->num_rows, DATA_STRING, row_codes),
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
for (i = 0; i < bitbuffer->num_rows; i++) {
free(row_codes[i]);
}

View file

@ -54,7 +54,7 @@ static int fordremote_callback(r_device *decoder, bitbuffer_t *bitbuffer) {
"id", "device-id", DATA_INT, device_id,
"code", "data", DATA_INT, code,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
found++;
}

View file

@ -61,7 +61,7 @@ ft004b_callback(r_device *decoder, bitbuffer_t *bitbuffer)
"model", "", DATA_STRING, "FT-004-B Temperature Sensor",
"temperature_C", "Temperature", DATA_FORMAT, "%.1f", DATA_DOUBLE, temperature,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}

View file

@ -30,7 +30,7 @@ static inline int bit(const uint8_t *bytes, unsigned bit)
* 10 = 0
* 1100 = 1
*/
unsigned ge_decode(bitbuffer_t *inbuf, unsigned row, unsigned start, bitbuffer_t *outbuf)
unsigned ge_decode(r_device *decoder, bitbuffer_t *inbuf, unsigned row, unsigned start, bitbuffer_t *outbuf)
{
uint8_t *bits = inbuf->bb[row];
unsigned int len = inbuf->bits_per_row[row];
@ -75,14 +75,15 @@ char *ge_command_name(uint8_t command) {
}
}
static int ge_coloreffects_decode(bitbuffer_t *bitbuffer, unsigned row, unsigned start_pos) {
static int ge_coloreffects_decode(r_device *decoder, bitbuffer_t *bitbuffer, unsigned row, unsigned start_pos)
{
data_t *data;
bitbuffer_t packet_bits = {0};
uint8_t device_id;
uint8_t command;
char time_str[LOCAL_TIME_BUFLEN];
ge_decode(bitbuffer, row, start_pos, &packet_bits);
ge_decode(decoder, bitbuffer, row, start_pos, &packet_bits);
//bitbuffer_print(&packet_bits);
/* From http://www.deepdarc.com/2010/11/27/hacking-christmas-lights/
@ -122,7 +123,7 @@ static int ge_coloreffects_decode(bitbuffer_t *bitbuffer, unsigned row, unsigned
"command", "", DATA_STRING, ge_command_name(command),
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}
@ -135,7 +136,7 @@ static int ge_coloreffects_callback(r_device *decoder, bitbuffer_t *bitbuffer) {
// (if the device id and command were all zeros)
while ((bitpos = bitbuffer_search(bitbuffer, 0, bitpos, (uint8_t *)&preamble_pattern, 24)) + 57 <=
bitbuffer->bits_per_row[0]) {
events += ge_coloreffects_decode(bitbuffer, 0, bitpos + 24);
events += ge_coloreffects_decode(decoder, bitbuffer, 0, bitpos + 24);
bitpos++;
}

View file

@ -51,7 +51,7 @@ static int generic_motion_callback(r_device *decoder, bitbuffer_t *bitbuffer) {
"code", "", DATA_STRING, code_str,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}
return 0;

View file

@ -62,7 +62,7 @@ static int generic_remote_callback(r_device *decoder, bitbuffer_t *bitbuffer)
"tristate", "Tri-State", DATA_STRING, tristate,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}

View file

@ -46,7 +46,7 @@ static int generic_temperature_sensor_callback(r_device *decoder, bitbuffer_t *b
"temperature_C", "Temperature", DATA_FORMAT, "%.02f C", DATA_DOUBLE, fTemp,
"battery", "Battery?", DATA_INT, battery,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;

View file

@ -49,8 +49,7 @@
checksum = sum modulo 64
*/
static int gt_wt_02_process_row(int row, const bitbuffer_t *bitbuffer)
static int gt_wt_02_process_row(r_device *decoder, int row, const bitbuffer_t *bitbuffer)
{
data_t *data; /*JF*/
const uint8_t *b = bitbuffer->bb[row];
@ -114,7 +113,7 @@ static int gt_wt_02_process_row(int row, const bitbuffer_t *bitbuffer)
"temperature_C", "Temperature", DATA_FORMAT, "%.01f C",DATA_DOUBLE,tempC,
"humidity", "Humidity", DATA_STRING, humidity_str,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
//# {
// /* @todo: remove timestamp printing as soon as the controller takes this task */
@ -133,7 +132,7 @@ static int gt_wt_02_callback(r_device *decoder, bitbuffer_t *bitbuffer)
int counter = 0;
// iterate through all rows, return on first successful
for(int row=0; row<bitbuffer->num_rows && !counter; row++)
counter += gt_wt_02_process_row(row, bitbuffer);
counter += gt_wt_02_process_row(decoder, row, bitbuffer);
return counter;
}

View file

@ -78,7 +78,7 @@ static int hideki_ts04_callback(r_device *decoder, bitbuffer_t *bitbuffer) {
"temperature_C", "Temperature", DATA_FORMAT, "%.01f C", DATA_DOUBLE, temp/10.f,
"humidity", "Humidity", DATA_FORMAT, "%u %%", DATA_INT, humidity,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}
if (sensortype == HIDEKI_WIND) {
@ -94,7 +94,7 @@ static int hideki_ts04_callback(r_device *decoder, bitbuffer_t *bitbuffer) {
"windstrength", "Wind Strength", DATA_FORMAT, "%.02f km/h", DATA_DOUBLE, wind_strength*0.160934f,
"winddirection", "Direction", DATA_FORMAT, "%.01f °", DATA_DOUBLE, wind_direction/10.f,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}
if (sensortype == HIDEKI_TEMP) {
@ -105,7 +105,7 @@ static int hideki_ts04_callback(r_device *decoder, bitbuffer_t *bitbuffer) {
"battery", "Battery", DATA_STRING, battery_ok ? "OK": "LOW",
"temperature_C", "Temperature", DATA_FORMAT, "%.01f C", DATA_DOUBLE, temp/10.f,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}
if (sensortype == HIDEKI_RAIN) {
@ -118,7 +118,7 @@ static int hideki_ts04_callback(r_device *decoder, bitbuffer_t *bitbuffer) {
"battery", "Battery", DATA_STRING, battery_ok ? "OK": "LOW",
"rain", "Rain", DATA_FORMAT, "%.01f mm", DATA_DOUBLE, rain_units*0.7f,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}
return 0;

View file

@ -51,7 +51,7 @@ static int hondaremote_callback(r_device *decoder, bitbuffer_t *bitbuffer)
"code", "", DATA_STRING, code,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}
return 0;

View file

@ -60,7 +60,7 @@ static int honeywell_callback(r_device *decoder, bitbuffer_t *bitbuffer) {
"heartbeat" , "", DATA_STRING, heartbeat ? "yes" : "no",
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}

View file

@ -68,7 +68,7 @@ static int ht680_callback(r_device *decoder, bitbuffer_t *bitbuffer)
"button3", "Button 3", DATA_STRING, button3 == 3 ? "PRESSED" : "",
"button4", "Button 4", DATA_STRING, button4 == 3 ? "PRESSED" : "",
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}

View file

@ -71,7 +71,7 @@ static int ibis_beacon_callback(r_device *decoder, bitbuffer_t *bitbuffer) {
"mic", "Integrity", DATA_STRING, "CRC",
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}

View file

@ -57,7 +57,7 @@ static int infactory_callback(r_device *decoder, bitbuffer_t *bitbuffer) {
"temperature_F", "Temperature",DATA_FORMAT, "%.02f °F", DATA_DOUBLE, temp_f,
"humidity", "Humidity", DATA_FORMAT, "%u %%", DATA_INT, humidity,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}

View file

@ -63,7 +63,7 @@ static int kw9015b_callback(r_device *decoder, bitbuffer_t *bitbuffer) {
"rain","Rain Count", DATA_INT, iRain,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;

View file

@ -210,7 +210,7 @@ static int interlogix_callback(r_device *decoder, bitbuffer_t *bitbuffer)
"switch5", "Switch5 State", DATA_STRING, f5_latch_state,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}

View file

@ -53,7 +53,7 @@ static int intertechno_callback(r_device *decoder, bitbuffer_t *bitbuffer)
"command", "", DATA_INT, command,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}

View file

@ -81,7 +81,7 @@ static int kedsum_callback(r_device *decoder, bitbuffer_t *bitbuffer) {
"humidity", "Humidity", DATA_FORMAT, "%u %%", DATA_INT, humidity,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}

View file

@ -52,7 +52,7 @@ static int kerui_callback(r_device *decoder, bitbuffer_t *bitbuffer) {
"state", "State", DATA_STRING, cmd_str,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}

View file

@ -171,7 +171,7 @@ static int lacrossetx_callback(r_device *decoder, bitbuffer_t *bitbuffer) {
"id", "", DATA_INT, sensor_id,
"temperature_C", "Temperature", DATA_FORMAT, "%.1f C", DATA_DOUBLE, temp_c,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
events++;
break;
@ -181,7 +181,7 @@ static int lacrossetx_callback(r_device *decoder, bitbuffer_t *bitbuffer) {
"id", "", DATA_INT, sensor_id,
"humidity", "Humidity", DATA_FORMAT, "%.1f %%", DATA_DOUBLE, msg_value,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
events++;
break;

View file

@ -161,7 +161,7 @@ static int lacrosse_tx141th_bv2_callback(r_device *decoder, bitbuffer_t *bitbuff
"test", "Test?", DATA_STRING, test ? "Yes" : "No",
NULL);
}
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}

View file

@ -60,105 +60,105 @@ How to make a decoder : https://enavarro.me/ajouter-un-decodeur-ask-a-rtl_433.ht
** Generic decoder for LaCrosse "IT+" (instant transmission) protocol
** Param device29or35 contain "29" or "35" depending of the device.
**/
static int lacrosse_it(bitbuffer_t *bitbuffer, uint8_t device29or35) {
char time_str[LOCAL_TIME_BUFLEN];
data_t *data;
int brow;
uint8_t out[8];
int r_crc, c_crc;
int sensor_id, newbatt, battery_low;
int humidity;
float temp_c;
int events = 0;
static int lacrosse_it(r_device *decoder, bitbuffer_t *bitbuffer, uint8_t device29or35)
{
char time_str[LOCAL_TIME_BUFLEN];
data_t *data;
int brow;
uint8_t out[8];
int r_crc, c_crc;
int sensor_id, newbatt, battery_low;
int humidity;
float temp_c;
int events = 0;
static const uint8_t preamble[] = {
0xaa, // preamble
0x2d, // brand identifier
0xd4, // brand identifier
0x90, // data length (this decoder work only with data length of 9, so we hardcode it on the preamble)
};
static const uint8_t preamble[] = {
0xaa, // preamble
0x2d, // brand identifier
0xd4, // brand identifier
0x90, // data length (this decoder work only with data length of 9, so we hardcode it on the preamble)
};
local_time_str(0, time_str);
for (brow = 0; brow < bitbuffer->num_rows; ++brow) {
// Validate message and reject it as fast as possible : check for preamble
unsigned int start_pos = bitbuffer_search(bitbuffer, brow, 0, preamble, 28);
if(start_pos == bitbuffer->bits_per_row[brow])
continue; // no preamble detected, move to the next row
if (debug_output)
fprintf(stderr, "LaCrosse TX29/35 detected, buffer is %d bits length, device is TX%d\n", bitbuffer->bits_per_row[brow], device29or35);
// remove preamble and keep only 64 bits
bitbuffer_extract_bytes(bitbuffer, brow, start_pos, out, 64);
local_time_str(0, time_str);
for (brow = 0; brow < bitbuffer->num_rows; ++brow) {
// Validate message and reject it as fast as possible : check for preamble
unsigned int start_pos = bitbuffer_search(bitbuffer, brow, 0, preamble, 28);
if (start_pos == bitbuffer->bits_per_row[brow])
continue; // no preamble detected, move to the next row
if (debug_output)
fprintf(stderr, "LaCrosse TX29/35 detected, buffer is %d bits length, device is TX%d\n", bitbuffer->bits_per_row[brow], device29or35);
// remove preamble and keep only 64 bits
bitbuffer_extract_bytes(bitbuffer, brow, start_pos, out, 64);
/*
/*
* Check message integrity (CRC/Checksum/parity)
* Normally, it is computed on the whole message, from byte 0 (preamble) to byte 6,
* but preamble is always the same, so we can speed the process by doing a crc check
* only on byte 3,4,5,6
*/
r_crc = out[7];
c_crc = crc8(&out[3], 4, LACROSSE_TX35_CRC_POLY, LACROSSE_TX35_CRC_INIT);
if (r_crc != c_crc) {
if (debug_output)
fprintf(stderr, "%s LaCrosse TX29/35 bad CRC: calculated %02x, received %02x\n",
time_str, c_crc, r_crc);
// reject row
continue;
}
r_crc = out[7];
c_crc = crc8(&out[3], 4, LACROSSE_TX35_CRC_POLY, LACROSSE_TX35_CRC_INIT);
if (r_crc != c_crc) {
if (debug_output)
fprintf(stderr, "%s LaCrosse TX29/35 bad CRC: calculated %02x, received %02x\n",
time_str, c_crc, r_crc);
// reject row
continue;
}
/*
/*
* Now that message "envelope" has been validated,
* start parsing data.
*/
sensor_id = ((out[3] & 0x0f) << 2) | (out[4]>>6);
temp_c = 10.0 * (out[4] & 0x0f) + 1.0 * ((out[5]>>4) & 0x0f) + 0.1 * (out[5] & 0x0f) - 40.0;
newbatt = (out[4] >> 5) & 1;
battery_low = out[6] >> 7;
humidity = out[6] & 0x7f;
if (humidity == LACROSSE_TX29_NOHUMIDSENSOR) {
data = data_make(
"time", "", DATA_STRING, time_str,
"brand", "", DATA_STRING, "LaCrosse",
"model", "", DATA_STRING, (device29or35 == 29 ? "TX29-IT" : "TX35DTH-IT"),
"id", "", DATA_INT, sensor_id,
"battery", "Battery", DATA_STRING, battery_low ? "LOW" : "OK",
"newbattery", "NewBattery", DATA_INT, newbatt,
"temperature_C", "Temperature", DATA_FORMAT, "%.1f C", DATA_DOUBLE, temp_c,
"mic", "Integrity", DATA_STRING, "CRC",
NULL);
}
else {
data = data_make(
"time", "", DATA_STRING, time_str,
"brand", "", DATA_STRING, "LaCrosse",
"model", "", DATA_STRING, (device29or35 == 29 ? "TX29-IT" : "TX35DTH-IT"),
"id", "", DATA_INT, sensor_id,
"battery", "Battery", DATA_STRING, battery_low ? "LOW" : "OK",
"newbattery", "NewBattery", DATA_INT, newbatt,
"temperature_C", "Temperature", DATA_FORMAT, "%.1f C", DATA_DOUBLE, temp_c,
"humidity", "Humidity", DATA_FORMAT, "%u %%", DATA_INT, humidity,
"mic", "Integrity", DATA_STRING, "CRC",
NULL);
}
// humidity = -1; // The TX29-IT sensor do not have humidity. It is replaced by a special value
sensor_id = ((out[3] & 0x0f) << 2) | (out[4] >> 6);
temp_c = 10.0 * (out[4] & 0x0f) + 1.0 * ((out[5] >> 4) & 0x0f) + 0.1 * (out[5] & 0x0f) - 40.0;
newbatt = (out[4] >> 5) & 1;
battery_low = out[6] >> 7;
humidity = out[6] & 0x7f;
if (humidity == LACROSSE_TX29_NOHUMIDSENSOR) {
data = data_make(
"time", "", DATA_STRING, time_str,
"brand", "", DATA_STRING, "LaCrosse",
"model", "", DATA_STRING, (device29or35 == 29 ? "TX29-IT" : "TX35DTH-IT"),
"id", "", DATA_INT, sensor_id,
"battery", "Battery", DATA_STRING, battery_low ? "LOW" : "OK",
"newbattery", "NewBattery", DATA_INT, newbatt,
"temperature_C", "Temperature", DATA_FORMAT, "%.1f C", DATA_DOUBLE, temp_c,
"mic", "Integrity", DATA_STRING, "CRC",
NULL);
} else {
data = data_make(
"time", "", DATA_STRING, time_str,
"brand", "", DATA_STRING, "LaCrosse",
"model", "", DATA_STRING, (device29or35 == 29 ? "TX29-IT" : "TX35DTH-IT"),
"id", "", DATA_INT, sensor_id,
"battery", "Battery", DATA_STRING, battery_low ? "LOW" : "OK",
"newbattery", "NewBattery", DATA_INT, newbatt,
"temperature_C", "Temperature", DATA_FORMAT, "%.1f C", DATA_DOUBLE, temp_c,
"humidity", "Humidity", DATA_FORMAT, "%u %%", DATA_INT, humidity,
"mic", "Integrity", DATA_STRING, "CRC",
NULL);
}
// humidity = -1; // The TX29-IT sensor do not have humidity. It is replaced by a special value
data_acquired_handler(data);
events++;
}
return events;
decoder_output_data(decoder, data);
events++;
}
return events;
}
/**
** Wrapper for the TX29 device
**/
static int lacrossetx29_callback(r_device *decoder, bitbuffer_t *bitbuffer) {
return lacrosse_it(bitbuffer, LACROSSE_TX29_MODEL);
return lacrosse_it(decoder, bitbuffer, LACROSSE_TX29_MODEL);
}
/**
** Wrapper for the TX35 device
**/
static int lacrossetx35_callback(r_device *decoder, bitbuffer_t *bitbuffer) {
return lacrosse_it(bitbuffer, LACROSSE_TX35_MODEL);
return lacrosse_it(decoder, bitbuffer, LACROSSE_TX35_MODEL);
}
static char *output_fields[] = {

View file

@ -126,7 +126,7 @@ static int lacrossews_callback(r_device *decoder, bitbuffer_t *bitbuffer) {
"id", "", DATA_INT, sensor_id,
"temperature_C", "Temperature", DATA_FORMAT, "%.1f C", DATA_DOUBLE, temp_c,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
events++;
break;
@ -142,7 +142,7 @@ static int lacrossews_callback(r_device *decoder, bitbuffer_t *bitbuffer) {
"id", "", DATA_INT, sensor_id,
"humidity", "Humidity", DATA_INT, msg_value_bcd2,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
events++;
}
break;
@ -154,7 +154,7 @@ static int lacrossews_callback(r_device *decoder, bitbuffer_t *bitbuffer) {
"ws_id", "", DATA_INT, ws_id,
"id", "", DATA_INT, sensor_id,
"rainfall_mm", "Rainfall", DATA_FORMAT, "%3.2f mm", DATA_DOUBLE, rain_mm, NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
events++;
break;
// Wind
@ -177,7 +177,7 @@ static int lacrossews_callback(r_device *decoder, bitbuffer_t *bitbuffer) {
"id", "", DATA_INT, sensor_id,
wind_key, wind_label, DATA_FORMAT, "%3.1f m/s", DATA_DOUBLE, wind_spd,
"wind_direction", "Direction", DATA_DOUBLE, wind_dir, NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
events++;
}
break;

View file

@ -213,8 +213,8 @@ static int m_bus_decode_format_b(const m_bus_data_t *in, m_bus_data_t *out, m_bu
return 1;
}
static void m_bus_output_data(const m_bus_data_t *out, const m_bus_block1_t *block1) {
static void m_bus_output_data(r_device *decoder, const m_bus_data_t *out, const m_bus_block1_t *block1)
{
data_t *data;
char time_str[LOCAL_TIME_BUFLEN];
char str_buf[1024];
@ -241,7 +241,7 @@ static void m_bus_output_data(const m_bus_data_t *out, const m_bus_block1_t *blo
"data", "Data", DATA_STRING, str_buf,
"mic", "Integrity", DATA_STRING, "CRC",
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
}
@ -313,7 +313,7 @@ static int m_bus_mode_c_t_callback(r_device *decoder, bitbuffer_t *bitbuffer) {
if(!m_bus_decode_format_a(&data_in, &data_out, &block1)) return 0;
} // Mode T
m_bus_output_data(&data_out, &block1);
m_bus_output_data(decoder, &data_out, &block1);
return 1;
}
@ -345,7 +345,7 @@ static int m_bus_mode_r_callback(r_device *decoder, bitbuffer_t *bitbuffer) {
// Decode
if(!m_bus_decode_format_a(&data_in, &data_out, &block1)) return 0;
m_bus_output_data(&data_out, &block1);
m_bus_output_data(decoder, &data_out, &block1);
return 1;
}
@ -394,7 +394,7 @@ static int m_bus_mode_f_callback(r_device *decoder, bitbuffer_t *bitbuffer) {
return 0;
}
m_bus_output_data(&data_out, &block1);
m_bus_output_data(decoder, &data_out, &block1);
return 1;
}

View file

@ -88,7 +88,7 @@ static int maverick_et73x_callback(r_device *decoder, bitbuffer_t *bitbuffer)
"temperature1_C", "TemperatureSensor1", DATA_FORMAT, "%.02f C", DATA_DOUBLE, temp1_c,
"temperature2_C", "TemperatureSensor2", DATA_FORMAT, "%.02f C", DATA_DOUBLE, temp2_c,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}

View file

@ -43,7 +43,7 @@ static int mebus433_callback(r_device *decoder, bitbuffer_t *bitbuffer) {
"temperature_C", "Temperature", DATA_FORMAT, "%.02f C", DATA_DOUBLE, temp / 10.0,
"humidity", "Humidity", DATA_FORMAT, "%u %%", DATA_INT, hum,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;

View file

@ -212,7 +212,7 @@ static int template_callback(r_device *decoder, bitbuffer_t *bitbuffer)
"mic", "", DATA_STRING, "CHECKSUM", // CRC, CHECKSUM, or PARITY
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
// Return 1 if message successfully decoded
return 1;

View file

@ -115,7 +115,7 @@ static int newkaku_callback(r_device *decoder, bitbuffer_t *bitbuffer) {
"dim", "Dim", DATA_STRING, dim,
"dim_value", "Dim Value", DATA_INT, dv,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}

View file

@ -54,7 +54,7 @@ static int nexa_callback(r_device *decoder, bitbuffer_t *bitbuffer) {
"unit", "Unit", DATA_INT, unit_bit,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 0;
}

View file

@ -83,7 +83,7 @@ static int nexus_callback(r_device *decoder, bitbuffer_t *bitbuffer) {
"channel", "Channel", DATA_INT, channel,
"temperature_C", "Temperature", DATA_FORMAT, "%.02f C", DATA_DOUBLE, temp/10.0,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
}
// Thermo/Hygro
else {
@ -95,7 +95,7 @@ static int nexus_callback(r_device *decoder, bitbuffer_t *bitbuffer) {
"temperature_C", "Temperature", DATA_FORMAT, "%.02f C", DATA_DOUBLE, temp/10.0,
"humidity", "Humidity", DATA_FORMAT, "%u %%", DATA_INT, humidity,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
}
return 1;
}

View file

@ -35,64 +35,64 @@ static const unsigned char preamble_pattern1[2] = { 0x55, 0x62 };
// End of frame is the last half-bit repeated additional 4 times
static int oil_standard_decode(bitbuffer_t *bitbuffer, unsigned row, unsigned bitpos) {
char time_str[LOCAL_TIME_BUFLEN];
data_t *data;
uint8_t *b;
uint16_t unit_id;
uint16_t depth = 0;
uint16_t binding_countdown = 0;
uint8_t flags;
uint8_t alarm;
bitbuffer_t databits = {0};
static int oil_standard_decode(r_device *decoder, bitbuffer_t *bitbuffer, unsigned row, unsigned bitpos)
{
char time_str[LOCAL_TIME_BUFLEN];
data_t *data;
uint8_t *b;
uint16_t unit_id;
uint16_t depth = 0;
uint16_t binding_countdown = 0;
uint8_t flags;
uint8_t alarm;
bitbuffer_t databits = {0};
bitpos = bitbuffer_manchester_decode(bitbuffer, row, bitpos, &databits, 41);
bitpos = bitbuffer_manchester_decode(bitbuffer, row, bitpos, &databits, 41);
if (databits.bits_per_row[0] < 32 || databits.bits_per_row[0] > 40
|| (databits.bb[0][4] & 0xfe) != 0)
return 0;
if (databits.bits_per_row[0] < 32 || databits.bits_per_row[0] > 40 || (databits.bb[0][4] & 0xfe) != 0)
return 0;
b = databits.bb[0];
b = databits.bb[0];
// The unit ID changes when you rebind by holding a magnet to the
// sensor for long enough.
unit_id = (b[0] << 8) | b[1];
// The unit ID changes when you rebind by holding a magnet to the
// sensor for long enough.
unit_id = (b[0] << 8) | b[1];
// 0x01: Rebinding (magnet held to sensor)
// 0x02: High-bit for depth
// 0x04: (always zero?)
// 0x08: Leak/theft alarm
// 0x10: (unknown toggle)
// 0x20: (unknown toggle)
// 0x40: (unknown toggle)
// 0x80: (always zero?)
flags = b[2] & ~0x0A;
alarm = (b[2] & 0x08) >> 3;
// 0x01: Rebinding (magnet held to sensor)
// 0x02: High-bit for depth
// 0x04: (always zero?)
// 0x08: Leak/theft alarm
// 0x10: (unknown toggle)
// 0x20: (unknown toggle)
// 0x40: (unknown toggle)
// 0x80: (always zero?)
flags = b[2] & ~0x0A;
alarm = (b[2] & 0x08) >> 3;
if (flags & 1)
// When binding, the countdown counts up from 0x40 to 0x4a
// (as long as you hold the magnet to it for long enough)
// before the device ID changes. The receiver unit needs
// to receive this *strongly* in order to change its
// allegiance.
binding_countdown = b[3];
else
// A depth reading of zero indicates no reading.
depth = ((b[2] & 0x02) << 7) | b[3];
if (flags & 1)
// When binding, the countdown counts up from 0x40 to 0x4a
// (as long as you hold the magnet to it for long enough)
// before the device ID changes. The receiver unit needs
// to receive this *strongly* in order to change its
// allegiance.
binding_countdown = b[3];
else
// A depth reading of zero indicates no reading.
depth = ((b[2] & 0x02) << 7) | b[3];
local_time_str(0, time_str);
data = data_make(
"time", "", DATA_STRING, time_str,
"model", "", DATA_STRING, "Oil Ultrasonic STANDARD",
"id", "", DATA_FORMAT, "%04x", DATA_INT, unit_id,
"flags", "", DATA_FORMAT, "%02x", DATA_INT, flags,
"alarm", "", DATA_INT, alarm,
"binding_countdown", "", DATA_INT, binding_countdown,
"depth_cm", "", DATA_INT, depth,
NULL);
data_acquired_handler(data);
local_time_str(0, time_str);
data = data_make(
"time", "", DATA_STRING, time_str,
"model", "", DATA_STRING, "Oil Ultrasonic STANDARD",
"id", "", DATA_FORMAT, "%04x", DATA_INT, unit_id,
"flags", "", DATA_FORMAT, "%02x", DATA_INT, flags,
"alarm", "", DATA_INT, alarm,
"binding_countdown", "", DATA_INT, binding_countdown,
"depth_cm", "", DATA_INT, depth,
NULL);
decoder_output_data(decoder, data);
return 1;
return 1;
}
static int oil_standard_callback(r_device *decoder, bitbuffer_t *bitbuffer) {
@ -102,14 +102,14 @@ static int oil_standard_callback(r_device *decoder, bitbuffer_t *bitbuffer) {
// Find a preamble with enough bits after it that it could be a complete packet
while ((bitpos = bitbuffer_search(bitbuffer, 0, bitpos, (uint8_t *)&preamble_pattern0, 16)) + 78 <=
bitbuffer->bits_per_row[0]) {
events += oil_standard_decode(bitbuffer, 0, bitpos + 14);
events += oil_standard_decode(decoder, bitbuffer, 0, bitpos + 14);
bitpos += 2;
}
bitpos = 0;
while ((bitpos = bitbuffer_search(bitbuffer, 0, bitpos, (uint8_t *)&preamble_pattern1, 16)) + 78 <=
bitbuffer->bits_per_row[0]) {
events += oil_standard_decode(bitbuffer, 0, bitpos + 14);
events += oil_standard_decode(decoder, bitbuffer, 0, bitpos + 14);
bitpos += 2;
}
return events;

View file

@ -89,7 +89,7 @@ static int oil_watchman_callback(r_device *decoder, bitbuffer_t *bitbuffer) {
"binding_countdown", "", DATA_INT, binding_countdown,
"depth", "", DATA_INT, depth,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
events++;
}
return events;

View file

@ -169,7 +169,7 @@ static int validate_os_v2_message(unsigned char * msg, int bits_expected, int va
return 1;
}
static int oregon_scientific_v2_1_parser(bitbuffer_t *bitbuffer) {
static int oregon_scientific_v2_1_parser(r_device *decoder, bitbuffer_t *bitbuffer) {
bitrow_t *bb = bitbuffer->bb;
// Check 2nd and 3rd bytes of stream for possible Oregon Scientific v2.1 sensor data (skip first byte to get past sync/startup bit errors)
if( ((bb[0][1] == 0x55) && (bb[0][2] == 0x55)) ||
@ -258,7 +258,7 @@ static int oregon_scientific_v2_1_parser(bitbuffer_t *bitbuffer) {
"temperature_C", "Temperature", DATA_FORMAT, "%.02f C", DATA_DOUBLE, get_os_temperature(msg, sensor_id),
"humidity", "Humidity", DATA_FORMAT, "%u %%", DATA_INT, get_os_humidity(msg, sensor_id),
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
}
return 1;
} else if (sensor_id == ID_WGR968) {
@ -277,7 +277,7 @@ static int oregon_scientific_v2_1_parser(bitbuffer_t *bitbuffer) {
"average", "Average", DATA_FORMAT, "%2.1f m/s",DATA_DOUBLE, avgWindspeed,
"direction", "Direction", DATA_FORMAT, "%3.1f degrees",DATA_DOUBLE, quadrant,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
}
return 1;
} else if (sensor_id == ID_BHTR968) {
@ -307,7 +307,7 @@ static int oregon_scientific_v2_1_parser(bitbuffer_t *bitbuffer) {
"humidity", "Humidity", DATA_FORMAT, "%u %%", DATA_INT, get_os_humidity(msg, sensor_id),
"pressure_hPa", "Pressure", DATA_FORMAT, "%.0f hPa", DATA_DOUBLE, pressure,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
}
return 1;
} else if (sensor_id == ID_RGR968) {
@ -325,7 +325,7 @@ static int oregon_scientific_v2_1_parser(bitbuffer_t *bitbuffer) {
"rain_rate", "Rain Rate", DATA_FORMAT, "%.02f mm/hr", DATA_DOUBLE, rain_rate,
"total_rain", "Total Rain", DATA_FORMAT, "%.02f mm", DATA_DOUBLE, total_rain,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
}
return 1;
} else if (sensor_id == ID_THR228N && num_valid_v2_bits==153) {
@ -341,7 +341,7 @@ static int oregon_scientific_v2_1_parser(bitbuffer_t *bitbuffer) {
"battery", "Battery", DATA_STRING, get_os_battery(msg, sensor_id) ? "LOW" : "OK",
"temperature_C", "Celsius", DATA_FORMAT, "%.02f C", DATA_DOUBLE, temp_c,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
}
return 1;
} else if (sensor_id == ID_THN132N && num_valid_v2_bits==129) {
@ -357,7 +357,7 @@ static int oregon_scientific_v2_1_parser(bitbuffer_t *bitbuffer) {
"battery", "Battery", DATA_STRING, get_os_battery(msg, sensor_id) ? "LOW" : "OK",
"temperature_C", "Celsius", DATA_FORMAT, "%.02f C", DATA_DOUBLE, temp_c,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
}
return 1;
} else if ((sensor_id & 0x0fff) == ID_RTGN129 && num_valid_v2_bits==161) {
@ -373,7 +373,7 @@ static int oregon_scientific_v2_1_parser(bitbuffer_t *bitbuffer) {
"temperature_C", "Celsius", DATA_FORMAT, "%.02f C", DATA_DOUBLE, temp_c,
"humidity", "Humidity", DATA_FORMAT, "%u %%", DATA_INT, get_os_humidity(msg, sensor_id),
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
}
return 1;
} else if ((sensor_id & 0x0fff) == ID_RTGN318) {
@ -389,7 +389,7 @@ static int oregon_scientific_v2_1_parser(bitbuffer_t *bitbuffer) {
"temperature_C", "Celsius", DATA_FORMAT, "%.02f C", DATA_DOUBLE, temp_c,
"humidity", "Humidity", DATA_FORMAT, "%u %%", DATA_INT, get_os_humidity(msg, sensor_id),
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
} else if (num_valid_v2_bits==201 && (validate_os_v2_message(msg, 201, num_valid_v2_bits, 21) == 0)) {
// RF Clock message ??
@ -407,7 +407,7 @@ static int oregon_scientific_v2_1_parser(bitbuffer_t *bitbuffer) {
"battery", "Battery", DATA_STRING, get_os_battery(msg, sensor_id) ? "LOW" : "OK",
"temperature_C", "Celsius", DATA_FORMAT, "%.02f C", DATA_DOUBLE, temp_c,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
}
return 1;
@ -426,7 +426,7 @@ static int oregon_scientific_v2_1_parser(bitbuffer_t *bitbuffer) {
"humidity", "Humidity", DATA_FORMAT, "%u %%", DATA_INT, get_os_humidity(msg, sensor_id),
"pressure_hPa", "Pressure", DATA_FORMAT, "%.02f hPa", DATA_DOUBLE, pressure,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
//}
return 1;
@ -441,7 +441,7 @@ static int oregon_scientific_v2_1_parser(bitbuffer_t *bitbuffer) {
"battery", "Battery", DATA_STRING, get_os_battery(msg, sensor_id)?"LOW":"OK",
//"channel", "Channel", DATA_INT, get_os_channel(msg, sensor_id),
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
}
return 1;
}else if (num_valid_v2_bits > 16) {
@ -469,7 +469,7 @@ static int oregon_scientific_v2_1_parser(bitbuffer_t *bitbuffer) {
return 0;
}
static int oregon_scientific_v3_parser(bitbuffer_t *bitbuffer) {
static int oregon_scientific_v3_parser(r_device *decoder, bitbuffer_t *bitbuffer) {
bitrow_t *bb = bitbuffer->bb;
data_t *data;
char time_str[LOCAL_TIME_BUFLEN];
@ -538,7 +538,7 @@ static int oregon_scientific_v3_parser(bitbuffer_t *bitbuffer) {
"temperature_C", "Celsius", DATA_FORMAT, "%.02f C", DATA_DOUBLE, temp_c,
"humidity", "Humidity", DATA_FORMAT, "%u %%", DATA_INT, humidity,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
}
return 1; //msg[k] = ((msg[k] & 0x0F) << 4) + ((msg[k] & 0xF0) >> 4);
} else if (sensor_id == ID_THN802) {
@ -553,7 +553,7 @@ static int oregon_scientific_v3_parser(bitbuffer_t *bitbuffer) {
"battery", "Battery", DATA_STRING, get_os_battery(msg, sensor_id)?"LOW":"OK",
"temperature_C", "Celsius", DATA_FORMAT, "%.02f C", DATA_DOUBLE, temp_c,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
}
return 1;
} else if (sensor_id == ID_UV800) {
@ -568,7 +568,7 @@ static int oregon_scientific_v3_parser(bitbuffer_t *bitbuffer) {
"battery", "Battery", DATA_STRING, get_os_battery(msg, sensor_id)?"LOW":"OK",
"uv", "UV Index", DATA_FORMAT, "%u", DATA_INT, uvidx,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
}
} else if (sensor_id == ID_PCR800) {
if (validate_os_checksum(msg, 18) == 0) {
@ -584,7 +584,7 @@ static int oregon_scientific_v3_parser(bitbuffer_t *bitbuffer) {
"rain_rate", "Rain Rate", DATA_FORMAT, "%3.1f in/hr", DATA_DOUBLE, rain_rate,
"rain_total", "Total Rain", DATA_FORMAT, "%3.1f in", DATA_DOUBLE, total_rain,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
}
return 1;
} else if (sensor_id == ID_PCR800a) {
@ -601,7 +601,7 @@ static int oregon_scientific_v3_parser(bitbuffer_t *bitbuffer) {
"rain_rate", "Rain Rate", DATA_FORMAT, "%3.1f in/hr", DATA_DOUBLE, rain_rate,
"rain_total", "Total Rain", DATA_FORMAT, "%3.1f in", DATA_DOUBLE, total_rain,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
}
return 1;
} else if (sensor_id == ID_WGR800) {
@ -620,7 +620,7 @@ return 1;
"average", "Average", DATA_FORMAT, "%2.1f m/s",DATA_DOUBLE, avgWindspeed,
"direction", "Direction", DATA_FORMAT, "%3.1f degrees",DATA_DOUBLE, quadrant,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
}
return 1;
} else if ((msg[0] == 0x20) || (msg[0] == 0x21) || (msg[0] == 0x22) || (msg[0] == 0x23) || (msg[0] == 0x24)) { // Owl CM160 Readings
@ -635,7 +635,7 @@ return 1;
"id", "House Code", DATA_INT, msg[1]&0x0F,
"power_W", "Power", DATA_FORMAT, "%d W", DATA_INT, ipower,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
}
} else if (msg[0] == 0x26) { // Owl CM180 readings
msg[0]=msg[0] & 0x0f;
@ -656,7 +656,7 @@ return 1;
"power_W", "Power", DATA_FORMAT, "%d W",DATA_INT, ipower,
"energy_kWh", "Energy", DATA_FORMAT, "%2.1f kWh",DATA_DOUBLE, total_energy,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
} else if (!itotal) {
data = data_make(
"time", "", DATA_STRING, time_str,
@ -665,7 +665,7 @@ return 1;
"id", "House Code", DATA_INT, msg[1]&0x0F,
"power_W", "Power", DATA_FORMAT, "%d W",DATA_INT, ipower,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
}
} else if ((msg[0] != 0) && (msg[1]!= 0)) { // sync nibble was found and some data is present...
if(debug_output) {
@ -695,9 +695,9 @@ return 1;
}
static int oregon_scientific_callback(r_device *decoder, bitbuffer_t *bitbuffer) {
int ret = oregon_scientific_v2_1_parser(bitbuffer);
int ret = oregon_scientific_v2_1_parser(decoder, bitbuffer);
if (ret == 0)
ret = oregon_scientific_v3_parser(bitbuffer);
ret = oregon_scientific_v3_parser(decoder, bitbuffer);
return ret;
}

View file

@ -130,7 +130,7 @@ static int oregon_scientific_sl109h_callback(r_device *decoder, bitbuffer_t *bit
"status", "Status", DATA_INT, status,
"mic", "Integrity", DATA_STRING, "CHECKSUM",
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}

View file

@ -60,7 +60,7 @@ static int oregon_scientific_v1_callback(r_device *decoder, bitbuffer_t *bitbuff
"battery", "Battery", DATA_STRING, battery ? "LOW" : "OK",
"temperature_C","Temperature", DATA_FORMAT, "%.01f C", DATA_DOUBLE, tempC,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
ret++;
}
}

View file

@ -144,7 +144,7 @@ static int philips_callback(r_device *decoder, bitbuffer_t *bitbuffer)
"battery", "Battery", DATA_STRING, battery_status ? "LOW" : "OK",
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}

View file

@ -70,7 +70,7 @@ static int prologue_callback(r_device *decoder, bitbuffer_t *bitbuffer) {
"temperature_C", "Temperature", DATA_FORMAT, "%.02f C", DATA_DOUBLE, temp/10.0,
"humidity", "Humidity", DATA_FORMAT, "%u %%", DATA_INT, humidity,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}

View file

@ -65,7 +65,7 @@ static int proove_callback(r_device *decoder, bitbuffer_t *bitbuffer) {
"unit", "Unit", DATA_INT, unit_bit,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 0;
}

View file

@ -40,7 +40,7 @@ static int quhwa_callback(r_device *decoder, bitbuffer_t *bitbuffer)
"id", "ID", DATA_INT, id,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}

View file

@ -153,7 +153,7 @@ static int radiohead_ask_callback(r_device *decoder, bitbuffer_t *bitbuffer)
"payload", "Payload", DATA_ARRAY, data_array(data_len, DATA_INT, rh_data_payload),
"mic", "Integrity", DATA_STRING, "CRC",
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}
@ -192,7 +192,7 @@ static int sensible_living_callback(r_device *decoder, bitbuffer_t *bitbuffer)
"battery_voltage", "Battery Voltage", DATA_INT, battery_voltage,
"mic", "Integrity", DATA_STRING, "CRC",
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}

View file

@ -62,7 +62,7 @@ static int rftech_callback(r_device *decoder, bitbuffer_t *bitbuffer) {
"temperature", "Temperature", DATA_FORMAT, "%.01f C", DATA_DOUBLE, value,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}

View file

@ -64,7 +64,7 @@ static int rubicson_callback(r_device *decoder, bitbuffer_t *bitbuffer) {
"temperature_C", "Temperature", DATA_FORMAT, "%.1f C", DATA_DOUBLE, temp_c,
"mic", "Integrity", DATA_STRING, "CRC",
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}

View file

@ -120,7 +120,7 @@ static int s3318p_callback(r_device *decoder, bitbuffer_t *bitbuffer) {
"humidity", "Humidity", DATA_FORMAT, "%u %%", DATA_INT, humidity,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 0;
}

View file

@ -78,7 +78,7 @@ static int schraeder_callback(r_device *decoder, bitbuffer_t *bitbuffer) {
"mic", "Integrity", DATA_STRING, "CRC",
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 0;
}
@ -155,7 +155,7 @@ static int schrader_EG53MA4_callback(r_device *decoder, bitbuffer_t *bitbuffer)
"mic", "Integrity", DATA_STRING, "CHECKSUM",
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 0;
}

View file

@ -38,7 +38,7 @@ static int silvercrest_callback(r_device *decoder, bitbuffer_t *bitbuffer) {
"button", "", DATA_INT, cmd,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}

View file

@ -27,7 +27,7 @@ ss_get_id(char *id, uint8_t *b)
}
static int
ss_sensor_parser(bitbuffer_t *bitbuffer, int row)
ss_sensor_parser(r_device *decoder, bitbuffer_t *bitbuffer, int row)
{
char time_str[LOCAL_TIME_BUFLEN];
data_t *data;
@ -64,13 +64,13 @@ ss_sensor_parser(bitbuffer_t *bitbuffer, int row)
"extradata", "Extra Data", DATA_STRING, extradata,
NULL
);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}
static int
ss_pinentry_parser(bitbuffer_t *bitbuffer, int row)
static int
ss_pinentry_parser(r_device *decoder, bitbuffer_t *bitbuffer, int row)
{
char time_str[LOCAL_TIME_BUFLEN];
data_t *data;
@ -101,13 +101,13 @@ ss_pinentry_parser(bitbuffer_t *bitbuffer, int row)
"extradata", "Extra Data", DATA_STRING, extradata,
NULL
);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}
static int
ss_keypad_commands(bitbuffer_t *bitbuffer, int row)
static int
ss_keypad_commands(r_device *decoder, bitbuffer_t *bitbuffer, int row)
{
char time_str[LOCAL_TIME_BUFLEN];
data_t *data;
@ -140,7 +140,7 @@ ss_keypad_commands(bitbuffer_t *bitbuffer, int row)
"extradata", "", DATA_STRING, extradata,
NULL
);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}
@ -159,11 +159,11 @@ ss_sensor_callback(r_device *decoder, bitbuffer_t *bitbuffer)
bitbuffer_invert(bitbuffer);
if (b[2] == 0x88) {
return ss_sensor_parser(bitbuffer, row);
return ss_sensor_parser(decoder, bitbuffer, row);
} else if (b[2] == 0x66) {
return ss_pinentry_parser(bitbuffer, row);
return ss_pinentry_parser(decoder, bitbuffer, row);
} else if (b[2] == 0x44) {
return ss_keypad_commands(bitbuffer, row);
return ss_keypad_commands(decoder, bitbuffer, row);
} else {
if (debug_output)
fprintf(stderr, "Unknown Message Type: %02x\n", b[2]);

View file

@ -103,7 +103,7 @@ static int smoke_gs558_callback(r_device *decoder, bitbuffer_t *bitbuffer)
"learn", "", DATA_INT, learn > 1,
"code", "Raw Code", DATA_STRING, code_str,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}

View file

@ -81,7 +81,7 @@ static int solight_te44_callback(r_device *decoder, bitbuffer_t *bitbuffer) {
"temperature_C", "Temperature", DATA_FORMAT, "%.02f C", DATA_DOUBLE, temperature,
"mic", "Integrity", DATA_STRING, "CRC",
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;

View file

@ -59,7 +59,7 @@ static int springfield_callback(r_device *decoder, bitbuffer_t *bitbuffer) {
"moisture", "Moisture", DATA_INT, moisture,
// "uk1", "uk1", DATA_INT, uk1,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
ret++;
}
}

View file

@ -92,7 +92,7 @@ static int steelmate_callback(r_device *decoder, bitbuffer_t *bitbuffer) {
"battery_mV", "", DATA_INT, battery_mV,
"mic", "Integrity", DATA_STRING, "CHECKSUM",
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}

View file

@ -48,7 +48,7 @@ E: ?
"channel", "Channel number", DATA_FORMAT, "\t %d", DATA_INT, channel,
"temperature_C", "Temperature", DATA_FORMAT, "%.01f C", DATA_DOUBLE, fTemp,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;

View file

@ -52,7 +52,7 @@ inline static uint8_t reverse_byte(uint8_t byte)
return byte;
}
static int tfa_twin_plus_303049_process_row(int row, const bitbuffer_t *bitbuffer)
static int tfa_twin_plus_303049_process_row(r_device *decoder, int row, const bitbuffer_t *bitbuffer)
{
data_t *data;
const uint8_t *b = bitbuffer->bb[row];
@ -98,7 +98,7 @@ static int tfa_twin_plus_303049_process_row(int row, const bitbuffer_t *bitbuffe
"temperature_C", "Temperature", DATA_FORMAT, "%.1f C", DATA_DOUBLE, tempC,
"humidity", "Humidity", DATA_FORMAT, "%u %%", DATA_INT, humidity,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
}
return 1;
@ -108,7 +108,7 @@ static int tfa_twin_plus_303049_callback(r_device *decoder, bitbuffer_t *bitbuff
{
int counter = 0;
for(int row=0; row<bitbuffer->num_rows; row++)
counter += tfa_twin_plus_303049_process_row(row, bitbuffer);
counter += tfa_twin_plus_303049_process_row(decoder, row, bitbuffer);
return counter;
}

View file

@ -73,7 +73,7 @@ static int thermopro_tp11_sensor_callback(r_device *decoder, bitbuffer_t *bitbuf
"id", "Id", DATA_FORMAT, "\t %d", DATA_INT, device,
"temperature_C", "Temperature", DATA_FORMAT, "%.01f C", DATA_DOUBLE, fTemp,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}

View file

@ -100,7 +100,7 @@ static int thermopro_tp12_sensor_callback(r_device *decoder, bitbuffer_t *bitbuf
"temperature_1_C", "Temperature 1 (Food)", DATA_FORMAT, "%.01f C", DATA_DOUBLE, fTemp1,
"temperature_2_C", "Temperature 2 (Barbecue)", DATA_FORMAT, "%.01f C", DATA_DOUBLE, fTemp2,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}

View file

@ -26,7 +26,8 @@
static const unsigned char preamble_pattern[2] = { 0x55, 0x56 };
// full trailer is 01111110
static int tpms_citroen_decode(bitbuffer_t *bitbuffer, unsigned row, unsigned bitpos) {
static int tpms_citroen_decode(r_device *decoder, bitbuffer_t *bitbuffer, unsigned row, unsigned bitpos)
{
char time_str[LOCAL_TIME_BUFLEN];
data_t *data;
unsigned int start_pos;
@ -84,7 +85,7 @@ static int tpms_citroen_decode(bitbuffer_t *bitbuffer, unsigned row, unsigned bi
"mic", "", DATA_STRING, "CHECKSUM",
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}
@ -95,7 +96,7 @@ static int tpms_citroen_callback(r_device *decoder, bitbuffer_t *bitbuffer) {
// Find a preamble with enough bits after it that it could be a complete packet
while ((bitpos = bitbuffer_search(bitbuffer, 0, bitpos, (uint8_t *)&preamble_pattern, 16)) + 178 <=
bitbuffer->bits_per_row[0]) {
events += tpms_citroen_decode(bitbuffer, 0, bitpos + 16);
events += tpms_citroen_decode(decoder, bitbuffer, 0, bitpos + 16);
bitpos += 2;
}

View file

@ -21,7 +21,8 @@
// full preamble is 55 55 55 56 (inverted: aa aa aa a9)
static const uint8_t preamble_pattern[2] = { 0xaa, 0xa9 }; // 16 bits
static int tpms_ford_decode(bitbuffer_t *bitbuffer, unsigned row, unsigned bitpos) {
static int tpms_ford_decode(r_device *decoder, bitbuffer_t *bitbuffer, unsigned row, unsigned bitpos)
{
char time_str[LOCAL_TIME_BUFLEN];
data_t *data;
unsigned int start_pos;
@ -59,7 +60,7 @@ static int tpms_ford_decode(bitbuffer_t *bitbuffer, unsigned row, unsigned bitpo
"mic", "", DATA_STRING, "CHECKSUM",
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}
@ -76,7 +77,7 @@ static int tpms_ford_callback(r_device *decoder, bitbuffer_t *bitbuffer) {
while ((bitpos = bitbuffer_search(bitbuffer, row, bitpos,
(const uint8_t *)&preamble_pattern, 16)) + 144 <=
bitbuffer->bits_per_row[row]) {
events += tpms_ford_decode(bitbuffer, row, bitpos + 16);
events += tpms_ford_decode(decoder, bitbuffer, row, bitpos + 16);
bitpos += 15;
}
}

View file

@ -24,7 +24,8 @@
// full preamble is (7 bits) 11111 10
static const unsigned char preamble_pattern[1] = {0xf8}; // 6 bits
static int tpms_pmv107j_decode(bitbuffer_t *bitbuffer, unsigned row, unsigned bitpos) {
static int tpms_pmv107j_decode(r_device *decoder, bitbuffer_t *bitbuffer, unsigned row, unsigned bitpos)
{
char time_str[LOCAL_TIME_BUFLEN];
data_t *data;
unsigned int start_pos;
@ -90,7 +91,7 @@ static int tpms_pmv107j_decode(bitbuffer_t *bitbuffer, unsigned row, unsigned bi
"mic", "", DATA_STRING, "CRC",
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}
@ -101,7 +102,7 @@ static int tpms_pmv107j_callback(r_device *decoder, bitbuffer_t *bitbuffer) {
// Find a preamble with enough bits after it that it could be a complete packet
while ((bitpos = bitbuffer_search(bitbuffer, 0, bitpos, (const uint8_t *)&preamble_pattern, 6)) + 67*2 <=
bitbuffer->bits_per_row[0]) {
events += tpms_pmv107j_decode(bitbuffer, 0, bitpos + 6);
events += tpms_pmv107j_decode(decoder, bitbuffer, 0, bitpos + 6);
bitpos += 2;
}

View file

@ -21,7 +21,8 @@
// full preamble is 55 55 55 56 (inverted: aa aa aa a9)
static const uint8_t preamble_pattern[2] = { 0xaa, 0xa9 }; // 16 bits
static int tpms_renault_decode(bitbuffer_t *bitbuffer, unsigned row, unsigned bitpos) {
static int tpms_renault_decode(r_device *decoder, bitbuffer_t *bitbuffer, unsigned row, unsigned bitpos)
{
char time_str[LOCAL_TIME_BUFLEN];
data_t *data;
unsigned int start_pos;
@ -67,7 +68,7 @@ static int tpms_renault_decode(bitbuffer_t *bitbuffer, unsigned row, unsigned bi
"mic", "", DATA_STRING, "CRC",
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}
@ -84,7 +85,7 @@ static int tpms_renault_callback(r_device *decoder, bitbuffer_t *bitbuffer) {
while ((bitpos = bitbuffer_search(bitbuffer, row, bitpos,
(const uint8_t *)&preamble_pattern, 16)) + 160 <=
bitbuffer->bits_per_row[row]) {
events += tpms_renault_decode(bitbuffer, row, bitpos + 16);
events += tpms_renault_decode(decoder, bitbuffer, row, bitpos + 16);
bitpos += 15;
}
}

View file

@ -27,7 +27,8 @@
// full preamble is 0101 0101 0011 11 = 55 3c
static const unsigned char preamble_pattern[2] = {0x54, 0xf0}; // 12 bits
static int tpms_toyota_decode(bitbuffer_t *bitbuffer, unsigned row, unsigned bitpos) {
static int tpms_toyota_decode(r_device *decoder, bitbuffer_t *bitbuffer, unsigned row, unsigned bitpos)
{
char time_str[LOCAL_TIME_BUFLEN];
data_t *data;
unsigned int start_pos;
@ -76,7 +77,7 @@ static int tpms_toyota_decode(bitbuffer_t *bitbuffer, unsigned row, unsigned bit
"mic", "", DATA_STRING, "CRC",
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}
@ -87,7 +88,7 @@ static int tpms_toyota_callback(r_device *decoder, bitbuffer_t *bitbuffer) {
// Find a preamble with enough bits after it that it could be a complete packet
while ((bitpos = bitbuffer_search(bitbuffer, 0, bitpos, (const uint8_t *)&preamble_pattern, 12)) + 158 <=
bitbuffer->bits_per_row[0]) {
events += tpms_toyota_decode(bitbuffer, 0, bitpos + 12);
events += tpms_toyota_decode(decoder, bitbuffer, 0, bitpos + 12);
bitpos += 2;
}

View file

@ -87,7 +87,7 @@ checksum_calculate(uint8_t *b)
}
static int
ttx201_decode(bitbuffer_t *bitbuffer, unsigned row, unsigned bitpos)
ttx201_decode(r_device *decoder, bitbuffer_t *bitbuffer, unsigned row, unsigned bitpos)
{
uint8_t b[MSG_PACKET_LEN];
int bits = bitbuffer->bits_per_row[row];
@ -175,7 +175,7 @@ ttx201_decode(bitbuffer_t *bitbuffer, unsigned row, unsigned bitpos)
"temperature_C", "Temperature", DATA_FORMAT, "%.1f C", DATA_DOUBLE, temperature_c,
"mic", "MIC", DATA_STRING, "CHECKSUM",
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}
@ -188,7 +188,7 @@ ttx201_callback(r_device *decoder, bitbuffer_t *bitbuffer)
if (MSG_MIN_ROWS <= bitbuffer->num_rows && bitbuffer->num_rows <= MSG_MAX_ROWS) {
for (row = 0; row < bitbuffer->num_rows; ++row) {
events += ttx201_decode(bitbuffer, row, 0);
events += ttx201_decode(decoder, bitbuffer, row, 0);
if (events && !debug_output) return events; // for now, break after first successful message
}
}

View file

@ -161,7 +161,7 @@ vaillant_vrt340_callback(r_device *decoder, bitbuffer_t *bitbuffer)
"water", "Pre-heated Water", DATA_STRING, water_preheated ? "ON" : "off",
"battery", "Battery", DATA_STRING, isBatteryLow ? "Low" : "Ok",
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}
@ -180,7 +180,7 @@ vaillant_vrt340_callback(r_device *decoder, bitbuffer_t *bitbuffer)
"model", "", DATA_STRING, "Vaillant VRT340f Central Heating Thermostat (RF Detection)",
"device", "Device ID", DATA_INT, deviceID,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}

View file

@ -63,7 +63,7 @@ static int waveman_callback(r_device *decoder, bitbuffer_t *bitbuffer)
"button", "", DATA_INT, (nb[1] & 3) + 1,
"state", "", DATA_STRING, (nb[2] == 0xe) ? "on" : "off",
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}

View file

@ -80,7 +80,7 @@ static int wg_pb12v1_callback(r_device *decoder, bitbuffer_t *bitbuffer)
"temperature_C", "Temperature", DATA_FORMAT, "%.01f C", DATA_DOUBLE, temperature,
"mic", "Integrity", DATA_STRING, "CRC",
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}

View file

@ -78,7 +78,7 @@ static int wssensor_callback(r_device *decoder, bitbuffer_t *bitbuffer) {
"temperature_C", "Temperature", DATA_FORMAT, "%.02f C", DATA_DOUBLE, temperature_c,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}

View file

@ -85,7 +85,7 @@ static int wt1024_callback(r_device *decoder, bitbuffer_t *bitbuffer)
"data", "Data", DATA_INT, value,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
// Return 1 if message successfully decoded
return 1;

View file

@ -125,7 +125,7 @@ static int wt450_callback(r_device *decoder, bitbuffer_t *bitbuffer) {
"temperature_C", "Temperature",DATA_FORMAT, "%.02f C", DATA_DOUBLE, temp,
"humidity", "Humidity", DATA_FORMAT, "%u %%", DATA_INT, humidity,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}

View file

@ -101,7 +101,7 @@ static int x10_sec_callback(r_device *decoder, bitbuffer_t *bitbuffer) {
"code", "Code", DATA_STRING, x10_code_str,
"event", "Event", DATA_STRING, event_str,
NULL);
data_acquired_handler(data);
decoder_output_data(decoder, data);
return 1;
}
return 0;

View file

@ -50,6 +50,8 @@
r_device *flex_create_device(char *spec); // maybe put this in some header file?
void data_acquired_handler(data_t *data);
typedef enum {
CONVERT_NATIVE,
CONVERT_SI,
@ -360,7 +362,7 @@ static void calc_rssi_snr(pulse_data_t *pulse_data)
}
}
/* handles incoming structured data by dumping it */
/** Pass the data structure to all output handlers. Frees data afterwards. */
void data_acquired_handler(data_t *data)
{
if (cfg.conversion_mode == CONVERT_SI) {