Add CMD for set and get card slot data nicknames.

This commit is contained in:
dxl
2023-02-10 11:19:44 +08:00
parent f16e56461d
commit 384114d2ef
4 changed files with 64 additions and 8 deletions
+53
View File
@@ -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 },
};
+7 -8
View File
@@ -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.
+2
View File
@@ -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
+2
View File
@@ -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)
//
// ******************************************************************