CR95F X-Nucleo NFC03A1 Shield STM

Dependents:   Nucleo_NFC03A1_Demo

Committer:
duchonic
Date:
Thu Nov 08 08:06:10 2018 +0000
Revision:
4:8fce71523e13
Parent:
3:12c871b2412d
only for ISO15693 devices (docu)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
duchonic 0:57769c77d24e 1 #include <CR95HF.h>
duchonic 0:57769c77d24e 2
duchonic 0:57769c77d24e 3 DigitalOut InterfacePin(D9);
duchonic 0:57769c77d24e 4
duchonic 1:549e63ac990c 5 DigitalOut led1(D7);
duchonic 1:549e63ac990c 6 DigitalOut led2(D6);
duchonic 1:549e63ac990c 7 DigitalOut led3(D5);
duchonic 1:549e63ac990c 8 DigitalOut led4(D4);
duchonic 1:549e63ac990c 9
duchonic 1:549e63ac990c 10 CR95HF::CR95HF(PinName tx, PinName rx) : nfcDevice(tx,rx)
duchonic 0:57769c77d24e 11 {
duchonic 0:57769c77d24e 12 InterfacePin = false;
duchonic 0:57769c77d24e 13 }
duchonic 0:57769c77d24e 14
duchonic 0:57769c77d24e 15 CR95HF::~CR95HF() {};
duchonic 0:57769c77d24e 16
duchonic 1:549e63ac990c 17 uint8_t CR95HF::Init()
duchonic 0:57769c77d24e 18 {
duchonic 1:549e63ac990c 19 uint8_t commandInfo[] = {0x01, 0x00};
duchonic 3:12c871b2412d 20 uint8_t commandSetProtocoll[] = {0x02, 0x02, 0x01, 0x05};
duchonic 0:57769c77d24e 21
duchonic 0:57769c77d24e 22 printf("CR95HF_Init\r\n");
duchonic 0:57769c77d24e 23
duchonic 1:549e63ac990c 24 nfcDevice.baud(57600);
duchonic 0:57769c77d24e 25
duchonic 1:549e63ac990c 26 wait(1);
duchonic 1:549e63ac990c 27 nfcWrite(commandInfo, 2);
duchonic 1:549e63ac990c 28 wait(1);
duchonic 1:549e63ac990c 29 nfcWrite(commandSetProtocoll, 4);
duchonic 3:12c871b2412d 30 wait(1);
duchonic 3:12c871b2412d 31 nfcDevice.attach(this, &CR95HF::rxCallbackNFC, Serial::RxIrq);
duchonic 0:57769c77d24e 32 return(0);
duchonic 0:57769c77d24e 33 }
duchonic 0:57769c77d24e 34
duchonic 1:549e63ac990c 35 uint8_t CR95HF::ConfigManagerTagHunting()
duchonic 0:57769c77d24e 36 {
duchonic 0:57769c77d24e 37 uint8_t returnValue = false;
duchonic 3:12c871b2412d 38 uint8_t detectCard[] = {0x04, 0x03, 0x26, 0x01, 0x00};
duchonic 0:57769c77d24e 39
duchonic 3:12c871b2412d 40 static uint16_t counter=0;
duchonic 3:12c871b2412d 41
duchonic 3:12c871b2412d 42 rxBufPos = 0;
duchonic 3:12c871b2412d 43 rxMsgComplete = false;
duchonic 3:12c871b2412d 44
duchonic 1:549e63ac990c 45 nfcWrite(detectCard, 5);
duchonic 0:57769c77d24e 46
duchonic 3:12c871b2412d 47 wait(0.2);
duchonic 3:12c871b2412d 48
duchonic 3:12c871b2412d 49 if(blub == 0x80) {
duchonic 3:12c871b2412d 50 led3 = true;
duchonic 3:12c871b2412d 51 led4 = false;
duchonic 3:12c871b2412d 52 printf("tag deteced UID (cnt %u):", counter++);
duchonic 3:12c871b2412d 53 for(int pos=7;pos>=0;pos--)
duchonic 3:12c871b2412d 54 {
duchonic 3:12c871b2412d 55 printf("%02x", rxData[pos]);
duchonic 3:12c871b2412d 56 }
duchonic 3:12c871b2412d 57 printf("\r\n");
duchonic 3:12c871b2412d 58 }
duchonic 3:12c871b2412d 59 else
duchonic 3:12c871b2412d 60 {
duchonic 3:12c871b2412d 61 led4 = true;
duchonic 3:12c871b2412d 62 led3 = false;
duchonic 3:12c871b2412d 63 printf("no tag (%02x)\r\n", blub);
duchonic 3:12c871b2412d 64 }
duchonic 0:57769c77d24e 65 return(returnValue);
duchonic 0:57769c77d24e 66 }
duchonic 0:57769c77d24e 67
duchonic 0:57769c77d24e 68 /** private functions */
duchonic 0:57769c77d24e 69
duchonic 1:549e63ac990c 70 void CR95HF::nfcWrite(uint8_t cmd[], uint8_t len)
duchonic 0:57769c77d24e 71 {
duchonic 1:549e63ac990c 72 for(int pos=0; pos<len;pos++)
duchonic 1:549e63ac990c 73 {
duchonic 1:549e63ac990c 74 nfcDevice.putc(cmd[pos]);
duchonic 1:549e63ac990c 75 }
duchonic 1:549e63ac990c 76 }
duchonic 1:549e63ac990c 77
duchonic 1:549e63ac990c 78 void CR95HF::rxCallbackNFC()
duchonic 1:549e63ac990c 79 {
duchonic 3:12c871b2412d 80 uint8_t character;
duchonic 3:12c871b2412d 81
duchonic 1:549e63ac990c 82 while(nfcDevice.readable()) {
duchonic 3:12c871b2412d 83 character = nfcDevice.getc();
duchonic 3:12c871b2412d 84
duchonic 3:12c871b2412d 85 if(rxBufPos == 0) {
duchonic 3:12c871b2412d 86 blub = character;
duchonic 3:12c871b2412d 87 }
duchonic 3:12c871b2412d 88 else if(rxBufPos == 1) {
duchonic 3:12c871b2412d 89 len = character;
duchonic 3:12c871b2412d 90 }
duchonic 3:12c871b2412d 91 else if(rxBufPos == 2) {
duchonic 3:12c871b2412d 92
duchonic 3:12c871b2412d 93 }
duchonic 3:12c871b2412d 94 else if(rxBufPos == 3) {
duchonic 3:12c871b2412d 95
duchonic 3:12c871b2412d 96 }
duchonic 3:12c871b2412d 97 else {
duchonic 3:12c871b2412d 98 rxData[rxBufPos-4] = character;
duchonic 3:12c871b2412d 99 }
duchonic 3:12c871b2412d 100 rxBufPos++;
duchonic 3:12c871b2412d 101
duchonic 3:12c871b2412d 102 if(rxBufPos >= len) {
duchonic 3:12c871b2412d 103 rxMsgComplete = true;
duchonic 3:12c871b2412d 104 }
duchonic 3:12c871b2412d 105
duchonic 1:549e63ac990c 106 }
duchonic 3:12c871b2412d 107 }