#include "pin_handler.h" #include #include #include static void set_data(size_t *wire, size_t id_mat, short state, size_t *pointer) { // set multiple rows or cols at the same time resulting in a undefined // behavior, the result is then voided if (state && *wire != 0 && *wire != id_mat) { *pointer = 0; return; } if (state) *wire = id_mat; else *wire = 0; } static void read_digit(char *sequence, size_t *pointer, size_t *row, size_t *col) { if (*row == 0 || *col == 0) return; const char keyboard[4][4] = { { '1', '2', '3', 'A' }, { '4', '5', '6', 'B' }, { '7', '8', '9', 'C' }, { '*', '0', '#', 'D' }, }; sequence[*pointer] = keyboard[*row - 1][*col - 1]; *pointer += 1; sequence[*pointer + 1] = 0; if (keyboard[*row - 1][*col - 1] == '#') { if (DEBUG_LEVEL >= 1) printf("full sequence: %s\n", sequence); if (!strcmp(CODE, sequence)) { errx(0, "Code found: %s\n", sequence); } else *pointer = 0; } } void set_pin(int id, short state, size_t *row, size_t *col, char *sequence, size_t *pointer) { if (DEBUG_LEVEL >= 2) printf("set pin %i, state: %u\n", id, state); if (id <= 4) { set_data(row, id, state, pointer); } else { set_data(col, id - 4, state, pointer); } read_digit(sequence, pointer, row, col); }