CR95F X-Nucleo NFC03A1 Shield STM
Dependents: Nucleo_NFC03A1_Demo
CR95HF.cpp@4:8fce71523e13, 2018-11-08 (annotated)
- 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?
User | Revision | Line number | New 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 | } |