add decoding formats C10005 and C1k35s

This commit is contained in:
Xavier
2023-11-21 16:08:54 -05:00
parent ddb07eaeee
commit 07c286642b
3 changed files with 268 additions and 107 deletions

View File

@@ -1,41 +1,52 @@
#include "../wiegand.h"
void wiegand_isr_d0(void* context) {
void wiegand_isr_d0(void *context)
{
UNUSED(context);
uint32_t time = DWT->CYCCNT;
bool rise = furi_hal_gpio_read(pinD0);
data[bit_count] = 0;
if(rise) {
if (rise)
{
data_rise[bit_count] = time;
if(bit_count < MAX_BITS) {
if (bit_count < MAX_BITS)
{
bit_count++;
}
} else {
}
else
{
data_fall[bit_count] = time;
}
}
void wiegand_isr_d1(void* context) {
void wiegand_isr_d1(void *context)
{
UNUSED(context);
uint32_t time = DWT->CYCCNT;
bool rise = furi_hal_gpio_read(pinD1);
data[bit_count] = 1;
if(rise) {
if (rise)
{
data_rise[bit_count] = time;
if(bit_count < MAX_BITS) {
if (bit_count < MAX_BITS)
{
bit_count++;
}
} else {
}
else
{
data_fall[bit_count] = time;
}
}
void wiegand_start_read(void* context) {
App* app = context;
void wiegand_start_read(void *context)
{
App *app = context;
data_saved = false;
bit_count = 0;
furi_hal_gpio_init_simple(pinD0, GpioModeInterruptRiseFall);
@@ -45,8 +56,9 @@ void wiegand_start_read(void* context) {
furi_timer_start(app->timer, 100);
}
void wiegand_stop_read(void* context) {
App* app = context;
void wiegand_stop_read(void *context)
{
App *app = context;
furi_hal_gpio_remove_int_callback(pinD0);
furi_hal_gpio_remove_int_callback(pinD1);
furi_hal_gpio_init_simple(pinD0, GpioModeAnalog);
@@ -54,25 +66,31 @@ void wiegand_stop_read(void* context) {
furi_timer_stop(app->timer);
}
void wiegand_timer_callback(void* context) {
App* app = context;
void wiegand_timer_callback(void *context)
{
App *app = context;
uint32_t duration = DWT->CYCCNT;
const uint32_t one_millisecond = 64000;
if(bit_count == 0) {
if (bit_count == 0)
{
return;
}
duration -= data_fall[bit_count - 1];
FURI_CRITICAL_ENTER();
if(duration > 25 * one_millisecond) {
if(bit_count == 4 || bit_count == 8 || bit_count == 24 || bit_count == 26 ||
bit_count == 32 || bit_count == 34 || bit_count == 37 || bit_count == 40 ||
bit_count == 48) {
if (duration > 25 * one_millisecond)
{
if (bit_count == 4 || bit_count == 8 || bit_count == 24 || bit_count == 26 ||
bit_count == 32 || bit_count == 34 || bit_count == 35 || bit_count == 36 ||
bit_count == 37 || bit_count == 40 || bit_count == 48)
{
wiegand_stop_read(app);
scene_manager_next_scene(app->scene_manager, WiegandDataScene);
} else {
}
else
{
// No data, clear
bit_count = 0;
}
@@ -80,8 +98,9 @@ void wiegand_timer_callback(void* context) {
FURI_CRITICAL_EXIT();
}
void wiegand_read_scene_on_enter(void* context) {
App* app = context;
void wiegand_read_scene_on_enter(void *context)
{
App *app = context;
widget_reset(app->widget);
widget_add_string_element(app->widget, 0, 0, AlignLeft, AlignTop, FontPrimary, "Read Wiegand");
widget_add_string_element(
@@ -94,7 +113,8 @@ void wiegand_read_scene_on_enter(void* context) {
view_dispatcher_switch_to_view(app->view_dispatcher, WiegandWidgetView);
}
void wiegand_read_scene_on_exit(void* context) {
App* app = context;
void wiegand_read_scene_on_exit(void *context)
{
App *app = context;
wiegand_stop_read(app);
}