mirror of https://github.com/merbanan/rtl_433.git
83 lines
2.2 KiB
C
83 lines
2.2 KiB
C
/** @file
|
|
Akhan remote keyless entry system.
|
|
|
|
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.
|
|
*/
|
|
|
|
/**
|
|
Akhan remote keyless entry system.
|
|
|
|
This RKE system uses a HS1527 OTP encoder (http://sc-tech.cn/en/hs1527.pdf)
|
|
Each message consists of a preamble, 20 bit id and 4 data bits.
|
|
|
|
(code based on chuango.c and generic_remote.c)
|
|
|
|
Note: simple 24 bit fixed ID protocol (x1527 style) and should be handled by the flex decoder.
|
|
*/
|
|
|
|
#include "decoder.h"
|
|
|
|
static int akhan_rke_callback(r_device *decoder, bitbuffer_t *bitbuffer)
|
|
{
|
|
data_t *data;
|
|
uint8_t *b;
|
|
int id;
|
|
int cmd;
|
|
char const *cmd_str;
|
|
|
|
if (bitbuffer->bits_per_row[0] != 25)
|
|
return DECODE_ABORT_LENGTH;
|
|
b = bitbuffer->bb[0];
|
|
|
|
// invert bits, short pulse is 0, long pulse is 1
|
|
b[0] = ~b[0];
|
|
b[1] = ~b[1];
|
|
b[2] = ~b[2];
|
|
|
|
id = (b[0] << 12) | (b[1] << 4) | (b[2] >> 4);
|
|
cmd = b[2] & 0x0F;
|
|
switch (cmd) {
|
|
case 0x1: cmd_str = "0x1 (Lock)"; break;
|
|
case 0x2: cmd_str = "0x2 (Unlock)"; break;
|
|
case 0x4: cmd_str = "0x4 (Mute)"; break;
|
|
case 0x8: cmd_str = "0x8 (Alarm)"; break;
|
|
default: cmd_str = NULL; break;
|
|
}
|
|
|
|
if (!cmd_str)
|
|
return DECODE_FAIL_SANITY;
|
|
|
|
/* clang-format off */
|
|
data = data_make(
|
|
"model", "", DATA_STRING, "Akhan-100F14",
|
|
"id", "ID (20bit)", DATA_FORMAT, "0x%x", DATA_INT, id,
|
|
"data", "Data (4bit)", DATA_STRING, cmd_str,
|
|
NULL);
|
|
/* clang-format on */
|
|
|
|
decoder_output_data(decoder, data);
|
|
return 1;
|
|
}
|
|
|
|
static char const *const output_fields[] = {
|
|
"model",
|
|
"id",
|
|
"data",
|
|
NULL,
|
|
};
|
|
|
|
r_device const akhan_100F14 = {
|
|
.name = "Akhan 100F14 remote keyless entry",
|
|
.modulation = OOK_PULSE_PWM,
|
|
.short_width = 316,
|
|
.long_width = 1020,
|
|
.reset_limit = 1800,
|
|
.sync_width = 0,
|
|
.tolerance = 80, // us
|
|
.decode_fn = &akhan_rke_callback,
|
|
.fields = output_fields,
|
|
};
|