89 lines
2.3 KiB
C
89 lines
2.3 KiB
C
#include "st25dv.h"
|
|
|
|
identifier_results get_nugget_data() {
|
|
|
|
NDEF_MSG = rfid_read_first_ndef_entry();
|
|
|
|
TRIMMED_STRING = remove_spaces(NDEF_MSG.payload, NDEF_MSG.payload_len);
|
|
char* delim_ptr = strchr(TRIMMED_STRING.str, ',');
|
|
if (delim_ptr != NULL) {
|
|
uint8_t index_comma = delim_ptr - TRIMMED_STRING.str;
|
|
memcpy(IDENTIFIER.name_str, TRIMMED_STRING.str, index_comma);
|
|
memcpy(
|
|
IDENTIFIER.diameter_str, TRIMMED_STRING.str + index_comma + 1, TRIMMED_STRING.length);
|
|
IDENTIFIER.name_len = index_comma;
|
|
IDENTIFIER.diameter_len = TRIMMED_STRING.length - index_comma;
|
|
} else {
|
|
memcpy(IDENTIFIER.name_str, TRIMMED_STRING.str, TRIMMED_STRING.length);
|
|
IDENTIFIER.name_len = TRIMMED_STRING.length;
|
|
memcpy(IDENTIFIER.diameter_str, "N/A", 3);
|
|
IDENTIFIER.diameter_len = 3;
|
|
}
|
|
|
|
IDENTIFIER.hashed = hash(IDENTIFIER.name_str, 0, 59);
|
|
|
|
return IDENTIFIER;
|
|
}
|
|
|
|
trimmed_string_struct remove_spaces(char* str, uint8_t len_str) {
|
|
uint8_t i = 0, j = 0;
|
|
memset(TRIMMED_STRING.str, ' ', 20);
|
|
while (str[i]) {
|
|
if (str[i] != ' ') {
|
|
TRIMMED_STRING.str[j++] = str[i];
|
|
}
|
|
i++;
|
|
if (i >= len_str) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
TRIMMED_STRING.length = j;
|
|
return TRIMMED_STRING;
|
|
}
|
|
|
|
void rfid_set_low_power_down(bool state) {
|
|
SET_PIN_OUT(DDRD, DDD5);
|
|
if (state) {
|
|
SET_PIN_HIGH(PORTD, PD5);
|
|
} else {
|
|
SET_PIN_LOW(PORTD, PD5);
|
|
}
|
|
}
|
|
|
|
ndef_message rfid_read_first_ndef_entry() {
|
|
rfid_set_low_power_down(false);
|
|
rfid_set_i2c_power(true);
|
|
_delay_ms(1);
|
|
|
|
memset(DATA_BUFFER_65, ' ', 64);
|
|
|
|
char DATA_BUFFER_INTERNAL[65];
|
|
rfid_read_memory(DATA_BUFFER_INTERNAL, 64, 0x0000 + 4);
|
|
|
|
NDEF_MSG = readNDEFText(DATA_BUFFER_INTERNAL);
|
|
|
|
|
|
rfid_set_low_power_down(true);
|
|
rfid_set_i2c_power(false);
|
|
return NDEF_MSG;
|
|
}
|
|
|
|
uint8_t rfid_read_system_register() {
|
|
return read_one_byte_16bit_addr_no_err_register(I2C_SYSTEM_ADDR, 0x0000);
|
|
}
|
|
|
|
void rfid_set_i2c_power(bool state) {
|
|
|
|
SET_PIN_OUT(DDRE, DDE0);
|
|
if (state) {
|
|
SET_PIN_HIGH(PORTE, PE0);
|
|
} else {
|
|
SET_PIN_LOW(PORTE, PE0);
|
|
}
|
|
}
|
|
|
|
uint8_t rfid_read_memory(uint8_t* data, uint8_t num_bytes, uint16_t address) {
|
|
return read_n_bytes_16bit_addr(I2C_USER_ADDR, address, data, num_bytes);
|
|
}
|