7
7
8
8
#include "led.h"
9
9
10
- #include "string.h"
11
-
12
10
#include "pn532.h"
13
11
#include "pn532_uart.h"
14
12
@@ -246,7 +244,7 @@ void CDC_LED_IO_Handler()
246
244
247
245
#define CARD_READER_RATE_HI 1
248
246
#define CARD_READER_RATE_LOW 0
249
- #define CARD_READER_RATE CARD_READER_RATE_LOW
247
+ #define CARD_READER_RATE CARD_READER_RATE_HI
250
248
251
249
const uint8_t CARD_READER_FW_VERSION_HIRATE [2 ] = "\x94" ;
252
250
const uint8_t CARD_READER_FW_VERSION_LOWRATE [24 ] = "TN32MSEC003S F/W Ver1.2" ;
@@ -291,9 +289,11 @@ void CDC_CARD_IO_SendData()
291
289
// Card IO 处理函数
292
290
void CDC_CARD_IO_Handler ()
293
291
{
292
+ static uint8_t mifare_key_A [6 ];
293
+ static uint8_t mifare_key_B [6 ];
294
294
295
- static uint8_t AimeKey [ 6 ], BanaKey [ 6 ] ;
296
- uint16_t SystemCode ;
295
+ AIME_Request * req = ( AIME_Request * ) cdc_card_io . Req_PacketBuf ;
296
+ AIME_Response * resPackect = ( AIME_Response * ) cardIO_ResponseStringBuf ;
297
297
memset (cardIO_ResponseStringBuf , 0x00 , 128 ); // Clear resPackect
298
298
memset (& res , 0x00 , 128 ); // Clear resPackect
299
299
@@ -303,23 +303,21 @@ void CDC_CARD_IO_Handler()
303
303
res .frame_len = 6 ;
304
304
res .status = 0 ;
305
305
res .payload_len = 0 ;
306
- // CDC_LED_IO_PutChar(_req.cmd);
307
- switch (_req .cmd ) {
306
+
307
+ switch (req -> cmd ) {
308
+ /**
309
+ * @brief 下列状态是阻塞式处理,这里仅对PN532的发送进行处理
310
+ */
311
+ // 初始化
308
312
case CMD_TO_NORMAL_MODE :
309
- // _writeCommand(CDC2_RequestPacketBuf, 0, CDC_ResponseStringBuf, 0);
310
- // if (getFirmwareVersion())
311
- // {
312
- // res.status = 0x03;
313
- // res.payload_len = 0;
314
- // }
315
- // else
316
313
res .frame_len = 6 ;
317
314
res .status = 0 ;
318
315
res .seq_no = 0 ;
319
316
res .payload_len = 0 ;
320
317
memcpy (cardIO_ResponseStringBuf , res .buffer , 128 );
321
318
CDC_CARD_IO_SendDataReady ();
322
319
break ;
320
+ // 获取固件版本信息
323
321
case CMD_GET_FW_VERSION :
324
322
#if CARD_READER_RATE == CARD_READER_RATE_HI
325
323
memcpy (res .version , CARD_READER_FW_VERSION_HIRATE , sizeof (CARD_READER_FW_VERSION_HIRATE ) - 1 );
@@ -333,6 +331,7 @@ void CDC_CARD_IO_Handler()
333
331
memcpy (cardIO_ResponseStringBuf , res .buffer , 128 );
334
332
CDC_CARD_IO_SendDataReady ();
335
333
break ;
334
+ // 获取硬件版本信息
336
335
case CMD_GET_HW_VERSION :
337
336
#if CARD_READER_RATE == CARD_READER_RATE_HI
338
337
memcpy (res .version , CARD_READER_VERSION_HIRATE , sizeof (CARD_READER_VERSION_HIRATE ) - 1 );
@@ -346,6 +345,7 @@ void CDC_CARD_IO_Handler()
346
345
memcpy (cardIO_ResponseStringBuf , res .buffer , 128 );
347
346
CDC_CARD_IO_SendDataReady ();
348
347
break ;
348
+ // 获取设备信息
349
349
case CMD_EXT_BOARD_INFO :
350
350
#if CARD_READER_RATE == CARD_READER_RATE_HI
351
351
memcpy (res .info_payload , CARD_READER_VERSION_HIRATE , sizeof (CARD_READER_VERSION_HIRATE ) - 1 );
@@ -359,57 +359,72 @@ void CDC_CARD_IO_Handler()
359
359
memcpy (cardIO_ResponseStringBuf , res .buffer , 128 );
360
360
CDC_CARD_IO_SendDataReady ();
361
361
break ;
362
+ // 设置Mifrare卡密钥B
362
363
case CMD_MIFARE_KEY_SET_B :
363
- memcpy (key_B , _req .key , 6 );
364
+ memcpy (mifare_key_B , _req .key , 6 );
364
365
memcpy (cardIO_ResponseStringBuf , res .buffer , 128 );
365
366
CDC_CARD_IO_SendDataReady ();
366
367
break ;
368
+ // 设置Mifrare卡密钥A
367
369
case CMD_MIFARE_KEY_SET_A :
368
- memcpy (key_A , _req .key , 6 );
370
+ memcpy (mifare_key_A , _req .key , 6 );
369
371
memcpy (cardIO_ResponseStringBuf , res .buffer , 128 );
370
372
CDC_CARD_IO_SendDataReady ();
371
373
break ;
374
+ // 设置设备RGB灯
372
375
case CMD_EXT_BOARD_SET_LED_RGB :
373
376
LED_RGB_SetPort (LED_RGB_PORT_UART , _req .color_payload [0 ], _req .color_payload [1 ], _req .color_payload [2 ]);
374
377
memcpy (cardIO_ResponseStringBuf , res .buffer , 128 );
375
378
CDC_CARD_IO_SendDataReady ();
376
379
break ;
380
+ // 设置为默认模式(Not Sure)
377
381
case CMD_EXT_TO_NORMAL_MODE :
378
382
memcpy (cardIO_ResponseStringBuf , res .buffer , 128 );
379
383
CDC_CARD_IO_SendDataReady ();
380
384
break ;
385
+ // 开始拉取卡片
381
386
case CMD_START_POLLING :
382
387
PN532_setRFField (0 , 1 );
383
388
memcpy (cardIO_ResponseStringBuf , res .buffer , 128 );
384
389
CDC_CARD_IO_SendDataReady ();
385
390
break ;
391
+ // 停止拉取卡片
386
392
case CMD_STOP_POLLING :
387
393
PN532_setRFField (0 , 0 );
388
394
memcpy (cardIO_ResponseStringBuf , res .buffer , 128 );
389
395
CDC_CARD_IO_SendDataReady ();
390
396
break ;
397
+ // 发送16进制数据
391
398
case CMD_SEND_HEX_DATA :
392
399
res .status = 0x20 ;
393
400
memcpy (cardIO_ResponseStringBuf , res .buffer , 128 );
394
401
CDC_CARD_IO_SendDataReady ();
395
402
break ;
396
- // 下列状态是非阻塞式处理,这里仅对PN532的发送进行处理
403
+ /**
404
+ * @brief 下列状态是非阻塞式处理,这里仅对PN532的发送进行处理
405
+ */
406
+ // 检测卡片
397
407
case CMD_CARD_DETECT :
398
408
PN532_Polling ();
399
409
break ;
410
+ // 读取Mifare卡片
400
411
case CMD_MIFARE_READ :
401
412
// CDC_LED_IO_PutChar(0Xe1);
402
413
PN532_mifareclassic_ReadDataBlock (_req .block_no , res .block );
403
414
break ;
415
+ // 读取Felica卡片
404
416
case CMD_FELICA_THROUGH :
405
417
PN532_felica_through ();
406
418
break ;
419
+ // 验证Mifare卡片密钥B
407
420
case CMD_MIFARE_AUTHORIZE_B :
408
- PN532_mifareclassic_AuthenticateBlock (_req .uid , 4 , _req .block_no , 1 , key_B );
421
+ PN532_mifareclassic_AuthenticateBlock (_req .uid , 4 , _req .block_no , 1 , mifare_key_B );
409
422
break ;
423
+ // 验证Mifare卡片密钥A
410
424
case CMD_MIFARE_AUTHORIZE_A :
411
- PN532_mifareclassic_AuthenticateBlock (_req .uid , 4 , _req .block_no , 0 , key_A );
425
+ PN532_mifareclassic_AuthenticateBlock (_req .uid , 4 , _req .block_no , 0 , mifare_key_A );
412
426
break ;
427
+ // 其他未明行为
413
428
default :
414
429
memcpy (cardIO_ResponseStringBuf , res .buffer , 128 );
415
430
CDC_CARD_IO_SendDataReady ();
@@ -445,13 +460,7 @@ void CDC_LED_IO_UART_Poll()
445
460
cdc_led_io .Req_PacketBuf [cdc_led_io .Req_PacketPos ] = cur_byte ;
446
461
cdc_led_io .Req_PacketPos ++ ;
447
462
if (cdc_led_io .Req_PacketPos > 5 && cdc_led_io .Req_PacketPos - 5 == packect -> length ) {
448
- // CDC_LED_IO_PutChar(led_io_packect->length);
449
- // CDC_LED_IO_PutChar(checksum);
450
- // CDC_LED_IO_PutChar(led_io_prev_byte);
451
- // CDC_LED_IO_PutChar(cur_byte);
452
- // CDC_LED_IO_PutChar(cdc_led_io.Rx_CurPos);
453
463
if (checksum == cur_byte ) {
454
- // CDC_LED_IO_PutChar(0xAA);
455
464
CDC_LED_IO_Handler ();
456
465
} else {
457
466
// checksum error
@@ -533,30 +542,8 @@ void CDC_CARD_IO_UART_Poll()
533
542
cdc_card_io .Req_PacketBuf [cdc_card_io .Req_PacketPos ] = cur_byte ;
534
543
cdc_card_io .Req_PacketPos ++ ;
535
544
536
- // CDC_CARD_IO_PutChar(checksum);
537
- // CDC_CARD_IO_PutChar(cur_byte);
538
-
539
- // CDC_CARD_IO_PutChar(0xFF);
540
- // CDC_CARD_IO_PutChar(0xFF);
541
- // CDC_CARD_IO_PutChar(0xFF);
542
-
543
- // CDC_CARD_IO_PutChar(req->frame_len);
544
- // CDC_CARD_IO_PutChar(checksum);
545
- // CDC_CARD_IO_PutChar(prev_byte);
546
- // CDC_CARD_IO_PutChar(cur_byte);
547
- // CDC_CARD_IO_PutChar(cdc_card_io.Rx_CurPos);
548
-
549
545
if (cdc_card_io .Req_PacketPos > 5 && cdc_card_io .Req_PacketPos - 1 == req -> frame_len ) {
550
-
551
- // CDC_CARD_IO_PutChar(0xFF);
552
- // CDC_CARD_IO_PutChar(0xFF);
553
- // CDC_CARD_IO_PutChar(0xFF);
554
-
555
- // CDC_CARD_IO_PutChar(checksum);
556
- // CDC_CARD_IO_PutChar(cur_byte);
557
-
558
546
if (checksum == cur_byte ) {
559
- // cdc_card_io_PutChar(0xAA);
560
547
memcpy (_req .buffer , req -> buffer , 64 );
561
548
CDC_CARD_IO_Handler ();
562
549
} else {
@@ -591,58 +578,6 @@ void CDC_CARD_IO_UART_Poll()
591
578
}
592
579
593
580
return ;
594
-
595
- // uint8_t len = 0;
596
- // cdc_card_io.Rx_CurPos = 0;
597
- // uint8_t ret = cdc_card_io.Rx_Pending;
598
- // for (uint8_t i = 0; i < ret; i++) {
599
- // cur_byte = cdc_card_io.Rx_PendingBuf[i];
600
- // if (cur_byte == 0xE0) {
601
- // _req.frame_len = 0xFF;
602
- // continue;
603
- // }
604
- // if (_req.frame_len == 0xFF) {
605
- // _req.frame_len = cur_byte;
606
- // checksum = cur_byte;
607
- // len = 0;
608
- // continue;
609
- // }
610
- // if (cur_byte == 0xD0) {
611
- // prev_byte = 0xD0;
612
-
613
- // // if (cdc_card_io.Rx_Pending == 0) {
614
- // // SetEPRxValid(CDC_CARD_IO_EP);
615
- // // }
616
- // continue;
617
- // }
618
- // if (prev_byte == 0xD0) {
619
- // cur_byte++;
620
- // prev_byte = 0;
621
- // }
622
- // len += 1;
623
- // _req.buffer[len] = cur_byte;
624
- // if (len == _req.frame_len) {
625
- // if (checksum == cur_byte) {
626
- // CDC_CARD_IO_Handler();
627
- // } else {
628
- // // cdc_card_io.Req_PacketBuf[3] = 0x05; //STATUS_SUM_ERROR
629
- // CDC_CARD_IO_Handler();
630
- // }
631
-
632
- // // cdc_card_io.Req_PacketPos = 0;
633
- // // checksum = 0;
634
- // // prev_byte = 0;
635
- // // if (cdc_card_io.Rx_Pending == 0) {
636
- // // SetEPRxValid(CDC_CARD_IO_EP);
637
- // // }
638
- // // return;
639
- // break;
640
- // }
641
-
642
- // checksum += cur_byte;
643
- // cdc_card_io.Rx_Pending--;
644
- // }
645
- // SetEPRxValid(CDC_CARD_IO_EP);
646
581
#endif
647
582
}
648
583
0 commit comments