mirror of
https://github.com/RfidResearchGroup/ChameleonUltra.git
synced 2026-05-12 11:22:59 -07:00
Add CMD for set and get card slot data nicknames.
This commit is contained in:
@@ -9,6 +9,7 @@
|
||||
#include "hex_utils.h"
|
||||
#include "data_cmd.h"
|
||||
#include "app_cmd.h"
|
||||
#include "tag_persistence.h"
|
||||
|
||||
|
||||
#define NRF_LOG_MODULE_NAME app_cmd
|
||||
@@ -405,6 +406,56 @@ data_frame_tx_t* cmd_processor_set_mf1_anti_collision_res(uint16_t cmd, uint16_t
|
||||
return data_frame_make(cmd, status, 0, NULL);
|
||||
}
|
||||
|
||||
data_frame_tx_t* cmd_processor_set_slot_tag_nick_name(uint16_t cmd, uint16_t status, uint16_t length, uint8_t *data) {
|
||||
// one chinese have 2byte(gbk).
|
||||
if (length > 34 || length < 3) {
|
||||
status = STATUS_PAR_ERR;
|
||||
} else {
|
||||
uint8_t slot = data[0];
|
||||
uint8_t sense_type = data[1];
|
||||
fds_slot_record_map_t map_info;
|
||||
|
||||
get_fds_map_by_slot_sense_type_for_nick(slot, sense_type, &map_info);
|
||||
|
||||
uint8_t buffer[36];
|
||||
buffer[0] = length - 2; // 减去开头的两个字节,剩下的就是昵称的字节流
|
||||
memcpy(buffer + 1, data + 2, buffer[0]); // 拷贝一份昵称到缓冲区中,这样子缓冲区里就有 一个字节开头的长度 + 昵称字节流
|
||||
|
||||
bool ret = fds_write_sync(map_info.id, map_info.key, sizeof(buffer) / 4, buffer);
|
||||
if (ret) {
|
||||
status = STATUS_DEVICE_SUCCESS;
|
||||
} else {
|
||||
status = STATUS_FLASH_WRITE_FAIL;
|
||||
}
|
||||
}
|
||||
return data_frame_make(cmd, status, 0, NULL);
|
||||
}
|
||||
|
||||
data_frame_tx_t* cmd_processor_get_slot_tag_nick_name(uint16_t cmd, uint16_t status, uint16_t length, uint8_t *data) {
|
||||
// one chinese have 2byte(gbk).
|
||||
if (length != 2) {
|
||||
status = STATUS_PAR_ERR;
|
||||
} else {
|
||||
uint8_t buffer[36];
|
||||
uint8_t slot = data[0];
|
||||
uint8_t sense_type = data[1];
|
||||
fds_slot_record_map_t map_info;
|
||||
|
||||
get_fds_map_by_slot_sense_type_for_nick(slot, sense_type, &map_info);
|
||||
bool ret = fds_read_sync(map_info.id, map_info.key, sizeof(buffer), buffer);
|
||||
if (ret) {
|
||||
status = STATUS_DEVICE_SUCCESS;
|
||||
length = buffer[0];
|
||||
data = &buffer[1];
|
||||
} else {
|
||||
status = STATUS_FLASH_READ_FAIL;
|
||||
length = 0;
|
||||
data = NULL;
|
||||
}
|
||||
}
|
||||
return data_frame_make(cmd, status, length, data);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* before reader run, reset reader and on antenna,
|
||||
@@ -480,6 +531,8 @@ static cmd_data_map_t m_data_cmd_map[] = {
|
||||
{ DATA_CMD_LOAD_MF1_BLOCK_DATA, NULL, cmd_processor_set_mf1_emulator_block, NULL },
|
||||
{ DATA_CMD_SET_MF1_ANTI_COLLISION_RES, NULL, cmd_processor_set_mf1_anti_collision_res, NULL },
|
||||
|
||||
{ DATA_CMD_SET_SLOT_TAG_NICK, NULL, cmd_processor_set_slot_tag_nick_name, NULL },
|
||||
{ DATA_CMD_GET_SLOT_TAG_NICK, NULL, cmd_processor_get_slot_tag_nick_name, NULL },
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -392,9 +392,9 @@ int main(void) {
|
||||
button_init(); // 按钮初始化
|
||||
init_leds(); // LED初始化
|
||||
sleep_timer_init(); // 休眠用的软定时器初始化
|
||||
usb_cdc_init(); // USB cdc模拟初始化
|
||||
rng_drv_and_srand_init(); // 随机数生成器初始化
|
||||
power_management_init(); // 电源管理初始化
|
||||
usb_cdc_init(); // USB cdc模拟初始化
|
||||
ble_slave_init(); // 蓝牙协议栈初始化
|
||||
check_wakeup_src(); // 检测唤醒源,根据唤醒源决定BLE广播与后续休眠动作
|
||||
|
||||
@@ -405,21 +405,20 @@ int main(void) {
|
||||
// cmd callback register
|
||||
on_data_frame_complete(on_data_frame_received);
|
||||
|
||||
// usbd event listener
|
||||
APP_ERROR_CHECK(app_usbd_power_events_enable());
|
||||
|
||||
// Enter main loop.
|
||||
NRF_LOG_INFO("NFC TAG & Reader Started");
|
||||
NRF_LOG_INFO("NFC TAG & Reader Started 1");
|
||||
while (1) {
|
||||
// Button event process
|
||||
button_press_process();
|
||||
// Data pack process
|
||||
data_frame_process();
|
||||
// Log print process
|
||||
while (NRF_LOG_PROCESS()) {
|
||||
__NOP();
|
||||
}
|
||||
while (NRF_LOG_PROCESS());
|
||||
// USB event process
|
||||
while (app_usbd_event_queue_process()) {
|
||||
__NOP();
|
||||
}
|
||||
while (app_usbd_event_queue_process());
|
||||
// No task to process, system sleep enter.
|
||||
sleep_system_run(
|
||||
system_off_enter, // If system idle sometime, we can enter deep sleep state.
|
||||
|
||||
@@ -41,4 +41,6 @@
|
||||
#define STATUS_INVALID_CMD (0x67) // 无效的指令
|
||||
#define STATUS_DEVICE_SUCCESS (0x68) // 设备相关操作成功执行
|
||||
#define STATUS_NOT_IMPLEMENTED (0x69) // 调用了某些未实现的操作,属于开发者遗漏的错误
|
||||
#define STATUS_FLASH_WRITE_FAIL (0x70) // flash写入失败
|
||||
#define STATUS_FLASH_READ_FAIL (0x71) // flash读取失败
|
||||
#endif
|
||||
|
||||
@@ -14,6 +14,8 @@
|
||||
#define DATA_CMD_SET_SLOT_TAG_TYPE (1004)
|
||||
#define DATA_CMD_SET_SLOT_DATA_DEFAULT (1005)
|
||||
#define DATA_CMD_SET_SLOT_ENABLE (1006)
|
||||
#define DATA_CMD_SET_SLOT_TAG_NICK (1007)
|
||||
#define DATA_CMD_GET_SLOT_TAG_NICK (1008)
|
||||
//
|
||||
// ******************************************************************
|
||||
|
||||
|
||||
Reference in New Issue
Block a user