Skip to content

Commit 094f708

Browse files
committed
🎈 perf(读卡器): 尝试PN532库CDC库使用相同全局变量
1 parent 99fb5c4 commit 094f708

File tree

3 files changed

+138
-165
lines changed

3 files changed

+138
-165
lines changed

src/lib/cdc.c

Lines changed: 46 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,6 @@ CDC_Struct cdc_card_io;
4242
extern uint8_t key_A[6];
4343
extern uint8_t key_B[6];
4444

45-
extern AIME_Request _req;
46-
extern AIME_Response res;
47-
4845
uint8_t cardIO_SendDataReady_Flag = 0;
4946

5047
xdata void CDC_Init()
@@ -271,24 +268,26 @@ void CDC_CARD_IO_SendDataReady()
271268
// 发送准备好的 Card IO 数据
272269
void CDC_CARD_IO_SendData()
273270
{
271+
AIME_Response *res = (AIME_Response *)cdc_card_io.Res_PacketBuf;
272+
274273
uint8_t checksum, i;
275274

276275
cardIO_SendDataReady_Flag = 0;
277276

278-
res.frame_len = 6 + res.payload_len;
277+
res->frame_len = 6 + res->payload_len;
279278
checksum = 0;
280-
for (i = 0; i < res.frame_len; i++) {
281-
checksum += res.buffer[i];
279+
for (i = 0; i < res->frame_len; i++) {
280+
checksum += res->buffer[i];
282281
}
283-
res.buffer[res.frame_len] = checksum;
282+
res->buffer[res->frame_len] = checksum;
284283

285284
CDC_CARD_IO_PutChar(0xE0);
286-
for (i = 0; i <= res.frame_len; i++) {
287-
if (res.buffer[i] == 0xE0 || res.buffer[i] == 0xD0) {
285+
for (i = 0; i <= res->frame_len; i++) {
286+
if (res->buffer[i] == 0xE0 || res->buffer[i] == 0xD0) {
288287
CDC_CARD_IO_PutChar(0xD0);
289-
CDC_CARD_IO_PutChar(res.buffer[i] - 1);
288+
CDC_CARD_IO_PutChar(res->buffer[i] - 1);
290289
} else {
291-
CDC_CARD_IO_PutChar(res.buffer[i]);
290+
CDC_CARD_IO_PutChar(res->buffer[i]);
292291
}
293292
}
294293
}
@@ -300,112 +299,100 @@ void CDC_CARD_IO_Handler()
300299
static uint8_t mifare_key_B[6];
301300

302301
AIME_Request *req = (AIME_Request *)cdc_card_io.Req_PacketBuf;
303-
AIME_Response *resPackect = (AIME_Response *)cdc_card_io.Res_PacketBuf;
304-
memset(resPackect, 0x00, 128); // Clear resPackect
305-
memset(&res, 0x00, 128); // Clear resPackect
302+
AIME_Response *res = (AIME_Response *)cdc_card_io.Res_PacketBuf;
303+
memset(res, 0x00, 128); // Clear resPackect
306304

307-
res.addr = _req.addr;
308-
res.seq_no = _req.seq_no;
309-
res.cmd = _req.cmd;
310-
res.frame_len = 6;
311-
res.status = 0;
312-
res.payload_len = 0;
305+
res->addr = req->addr;
306+
res->seq_no = req->seq_no;
307+
res->cmd = req->cmd;
308+
res->frame_len = 6;
309+
res->status = 0;
310+
res->payload_len = 0;
313311

314312
switch (req->cmd) {
315313
/**
316314
* @brief 下列状态是阻塞式处理,这里仅对PN532的发送进行处理
317315
*/
318316
// 初始化
319317
case CMD_TO_NORMAL_MODE:
320-
res.frame_len = 6;
321-
res.status = 0;
322-
res.seq_no = 0;
323-
res.payload_len = 0;
324-
memcpy(cardIO_ResponseStringBuf, res.buffer, 128);
318+
res->frame_len = 6;
319+
res->status = 0;
320+
res->seq_no = 0;
321+
res->payload_len = 0;
325322
LED_RGB_SetPort(LED_RGB_PORT_UART, 0xFF, 0xFF, 0xFF);
326323
CDC_CARD_IO_SendDataReady();
327324
break;
328325
// 获取固件版本信息
329326
case CMD_GET_FW_VERSION:
330327
#if CARD_READER_RATE == CARD_READER_RATE_HI
331-
memcpy(res.version, CARD_READER_FW_VERSION_HIRATE, sizeof(CARD_READER_FW_VERSION_HIRATE) - 1);
332-
res.payload_len = sizeof(CARD_READER_FW_VERSION_HIRATE) - 1;
333-
res.frame_len = 6 + res.payload_len;
328+
memcpy(res->version, CARD_READER_FW_VERSION_HIRATE, sizeof(CARD_READER_FW_VERSION_HIRATE) - 1);
329+
res->payload_len = sizeof(CARD_READER_FW_VERSION_HIRATE) - 1;
330+
res->frame_len = 6 + res->payload_len;
334331
#elif CARD_READER_RATE == CARD_READER_RATE_LOW
335-
memcpy(res.version, CARD_READER_FW_VERSION_LOWRATE, sizeof(CARD_READER_FW_VERSION_LOWRATE) - 1);
336-
res.payload_len = sizeof(CARD_READER_FW_VERSION_LOWRATE) - 1;
337-
res.frame_len = 6 + res.payload_len;
332+
memcpy(res->version, CARD_READER_FW_VERSION_LOWRATE, sizeof(CARD_READER_FW_VERSION_LOWRATE) - 1);
333+
res->payload_len = sizeof(CARD_READER_FW_VERSION_LOWRATE) - 1;
334+
res->frame_len = 6 + res->payload_len;
338335
#endif
339-
memcpy(cardIO_ResponseStringBuf, res.buffer, 128);
340336
CDC_CARD_IO_SendDataReady();
341337
break;
342338
// 获取硬件版本信息
343339
case CMD_GET_HW_VERSION:
344340
#if CARD_READER_RATE == CARD_READER_RATE_HI
345-
memcpy(res.version, CARD_READER_VERSION_HIRATE, sizeof(CARD_READER_VERSION_HIRATE) - 1);
346-
res.payload_len = sizeof(CARD_READER_VERSION_HIRATE) - 1;
347-
res.frame_len = 6 + res.payload_len;
341+
memcpy(res->version, CARD_READER_VERSION_HIRATE, sizeof(CARD_READER_VERSION_HIRATE) - 1);
342+
res->payload_len = sizeof(CARD_READER_VERSION_HIRATE) - 1;
343+
res->frame_len = 6 + res->payload_len;
348344
#elif CARD_READER_RATE == CARD_READER_RATE_LOW
349-
memcpy(res.version, CARD_READER_VERSION_LOWRATE, sizeof(CARD_READER_VERSION_LOWRATE) - 1);
350-
res.payload_len = sizeof(CARD_READER_VERSION_LOWRATE) - 1;
351-
res.frame_len = 6 + res.payload_len;
345+
memcpy(res->version, CARD_READER_VERSION_LOWRATE, sizeof(CARD_READER_VERSION_LOWRATE) - 1);
346+
res->payload_len = sizeof(CARD_READER_VERSION_LOWRATE) - 1;
347+
res->frame_len = 6 + res->payload_len;
352348
#endif
353-
memcpy(cardIO_ResponseStringBuf, res.buffer, 128);
354349
CDC_CARD_IO_SendDataReady();
355350
break;
356351
// 获取设备信息
357352
case CMD_EXT_BOARD_INFO:
358353
#if CARD_READER_RATE == CARD_READER_RATE_HI
359-
memcpy(res.info_payload, CARD_READER_VERSION_HIRATE, sizeof(CARD_READER_VERSION_HIRATE) - 1);
360-
res.payload_len = sizeof(CARD_READER_VERSION_HIRATE) - 1;
361-
res.frame_len = 6 + res.payload_len;
354+
memcpy(res->info_payload, CARD_READER_VERSION_HIRATE, sizeof(CARD_READER_VERSION_HIRATE) - 1);
355+
res->payload_len = sizeof(CARD_READER_VERSION_HIRATE) - 1;
356+
res->frame_len = 6 + res->payload_len;
362357
#elif CARD_READER_RATE == CARD_READER_RATE_LOW
363-
memcpy(res.info_payload, CARD_READER_EXTRA_INFO_LOWRATE, sizeof(CARD_READER_EXTRA_INFO_LOWRATE) - 1);
364-
res.payload_len = sizeof(CARD_READER_EXTRA_INFO_LOWRATE) - 1;
365-
res.frame_len = 6 + res.payload_len;
358+
memcpy(res->info_payload, CARD_READER_EXTRA_INFO_LOWRATE, sizeof(CARD_READER_EXTRA_INFO_LOWRATE) - 1);
359+
res->payload_len = sizeof(CARD_READER_EXTRA_INFO_LOWRATE) - 1;
360+
res->frame_len = 6 + res->payload_len;
366361
#endif
367-
memcpy(cardIO_ResponseStringBuf, res.buffer, 128);
368362
CDC_CARD_IO_SendDataReady();
369363
break;
370364
// 设置Mifrare卡密钥B
371365
case CMD_MIFARE_KEY_SET_B:
372366
memcpy(mifare_key_B, req->key, 6);
373-
memcpy(cardIO_ResponseStringBuf, res.buffer, 128);
374367
CDC_CARD_IO_SendDataReady();
375368
break;
376-
// 设置Mifrare卡密钥A
369+
// 设置Mifare卡密钥A
377370
case CMD_MIFARE_KEY_SET_A:
378371
memcpy(mifare_key_A, req->key, 6);
379-
memcpy(cardIO_ResponseStringBuf, res.buffer, 128);
380372
CDC_CARD_IO_SendDataReady();
381373
break;
382374
// 设置设备RGB灯
383375
case CMD_EXT_BOARD_SET_LED_RGB:
384376
LED_RGB_SetPort(LED_RGB_PORT_UART, req->color_payload[0], req->color_payload[1], req->color_payload[2]);
385-
memcpy(cardIO_ResponseStringBuf, res.buffer, 128);
386377
CDC_CARD_IO_SendDataReady();
387378
break;
388379
// 设置为默认模式(Not Sure)
389380
case CMD_EXT_TO_NORMAL_MODE:
390-
memcpy(cardIO_ResponseStringBuf, res.buffer, 128);
391381
CDC_CARD_IO_SendDataReady();
392382
break;
393383
// 开始拉取卡片
394384
case CMD_START_POLLING:
395385
PN532_setRFField(0, 1);
396-
memcpy(cardIO_ResponseStringBuf, res.buffer, 128);
397386
CDC_CARD_IO_SendDataReady();
398387
break;
399388
// 停止拉取卡片
400389
case CMD_STOP_POLLING:
401390
PN532_setRFField(0, 0);
402-
memcpy(cardIO_ResponseStringBuf, res.buffer, 128);
403391
CDC_CARD_IO_SendDataReady();
404392
break;
405393
// 发送16进制数据
406394
case CMD_SEND_HEX_DATA:
407-
res.status = 0x20;
408-
memcpy(cardIO_ResponseStringBuf, res.buffer, 128);
395+
res->status = 0x20;
409396
CDC_CARD_IO_SendDataReady();
410397
break;
411398
/**
@@ -418,26 +405,26 @@ void CDC_CARD_IO_Handler()
418405
// 读取Mifare卡片
419406
case CMD_MIFARE_READ:
420407
// CDC_LED_IO_PutChar(0Xe1);
421-
PN532_mifareclassic_ReadDataBlock(_req.block_no, res.block);
408+
PN532_mifareclassic_ReadDataBlock(req->block_no, res->block);
422409
break;
423410
// 读取Felica卡片
424411
case CMD_FELICA_THROUGH:
425412
PN532_felica_through();
426413
break;
427414
// 验证Mifare卡片密钥B
428415
case CMD_MIFARE_AUTHORIZE_B:
429-
PN532_mifareclassic_AuthenticateBlock(_req.uid, 4, _req.block_no, 1, mifare_key_B);
416+
PN532_mifareclassic_AuthenticateBlock(req->uid, 4, req->block_no, 1, mifare_key_B);
430417
break;
431418
// 验证Mifare卡片密钥A
432419
case CMD_MIFARE_AUTHORIZE_A:
433-
PN532_mifareclassic_AuthenticateBlock(_req.uid, 4, _req.block_no, 0, mifare_key_A);
420+
PN532_mifareclassic_AuthenticateBlock(req->uid, 4, req->block_no, 0, mifare_key_A);
434421
break;
435422
/**
436423
* @brief 其他未定义命令,阻塞式
437424
*/
438425
// 其他未明行为
439426
default:
440-
memcpy(cardIO_ResponseStringBuf, res.buffer, 128);
427+
memcpy(cardIO_ResponseStringBuf, res->buffer, 128);
441428
CDC_CARD_IO_SendDataReady();
442429
break;
443430
}
@@ -556,10 +543,8 @@ void CDC_CARD_IO_UART_Poll()
556543

557544
if (cdc_card_io.Req_PacketPos > 5 && cdc_card_io.Req_PacketPos - 1 == req->frame_len) {
558545
if (checksum == cur_byte) {
559-
memcpy(_req.buffer, req->buffer, 64);
560546
CDC_CARD_IO_Handler();
561547
} else {
562-
memcpy(_req.buffer, req->buffer, 64);
563548
CDC_CARD_IO_Handler();
564549
// checksum error
565550
}

0 commit comments

Comments
 (0)