new xadow NFC module
Dependents: xadow_smartstrap_for_pebble
XadowNFC.cpp@1:27242e2abd99, 2015-11-06 (annotated)
- Committer:
- KillingJacky
- Date:
- Fri Nov 06 02:52:37 2015 +0000
- Revision:
- 1:27242e2abd99
- Parent:
- 0:9d116099a88d
**removed emulation for tag because the resources limit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
KillingJacky | 0:9d116099a88d | 1 | |
KillingJacky | 0:9d116099a88d | 2 | #include <stdlib.h> |
KillingJacky | 0:9d116099a88d | 3 | #include "mbed.h" |
KillingJacky | 0:9d116099a88d | 4 | #include "XadowNFC.h" |
KillingJacky | 0:9d116099a88d | 5 | #include "USBSerial.h" |
KillingJacky | 0:9d116099a88d | 6 | |
KillingJacky | 0:9d116099a88d | 7 | |
KillingJacky | 0:9d116099a88d | 8 | unsigned char uid[10] = {0}; |
KillingJacky | 0:9d116099a88d | 9 | static char cmd[2]; |
KillingJacky | 0:9d116099a88d | 10 | |
KillingJacky | 0:9d116099a88d | 11 | extern I2C i2c; |
KillingJacky | 0:9d116099a88d | 12 | extern USBSerial dbg_serial; |
KillingJacky | 0:9d116099a88d | 13 | |
KillingJacky | 0:9d116099a88d | 14 | unsigned char nfc_check_online(void) |
KillingJacky | 0:9d116099a88d | 15 | { |
KillingJacky | 0:9d116099a88d | 16 | unsigned char data[6]; |
KillingJacky | 0:9d116099a88d | 17 | unsigned char i; |
KillingJacky | 0:9d116099a88d | 18 | |
KillingJacky | 0:9d116099a88d | 19 | //dlc_i2c_configure(NFC_DEVICE_ADDR, 100); |
KillingJacky | 0:9d116099a88d | 20 | //dlc_i2c_send_byte(NFC_SCAN_ID); |
KillingJacky | 0:9d116099a88d | 21 | //dlc_i2c_send_byte(0); |
KillingJacky | 0:9d116099a88d | 22 | |
KillingJacky | 0:9d116099a88d | 23 | cmd[0] = NFC_SCAN_ID; |
KillingJacky | 0:9d116099a88d | 24 | cmd[1] = 0; |
KillingJacky | 0:9d116099a88d | 25 | i2c.write(NFC_DEVICE_ADDR, cmd, 1); //the nfc module's i2c supports only 1 byte read/write per burst |
KillingJacky | 0:9d116099a88d | 26 | i2c.write(NFC_DEVICE_ADDR, cmd+1, 1); |
KillingJacky | 0:9d116099a88d | 27 | |
KillingJacky | 0:9d116099a88d | 28 | |
KillingJacky | 0:9d116099a88d | 29 | for(i=0;i<6;i++) |
KillingJacky | 0:9d116099a88d | 30 | { |
KillingJacky | 0:9d116099a88d | 31 | //data[i] = dlc_i2c_receive_byte(); |
KillingJacky | 0:9d116099a88d | 32 | i2c.read(NFC_DEVICE_ADDR, (char *)&data[i], 1); //the nfc module's i2c supports only 1 byte read/write per burst |
KillingJacky | 0:9d116099a88d | 33 | } |
KillingJacky | 0:9d116099a88d | 34 | |
KillingJacky | 0:9d116099a88d | 35 | if(data[5] == (NFC_DEVICE_ADDR>>1))return 1; |
KillingJacky | 0:9d116099a88d | 36 | else return 0; |
KillingJacky | 0:9d116099a88d | 37 | } |
KillingJacky | 0:9d116099a88d | 38 | |
KillingJacky | 0:9d116099a88d | 39 | void nfc_adapter_init(void) |
KillingJacky | 0:9d116099a88d | 40 | { |
KillingJacky | 0:9d116099a88d | 41 | cmd[0] = NFC_ADAPTER_INIT_ID; |
KillingJacky | 0:9d116099a88d | 42 | cmd[1] = 0; |
KillingJacky | 0:9d116099a88d | 43 | i2c.write(NFC_DEVICE_ADDR, cmd, 1); |
KillingJacky | 0:9d116099a88d | 44 | i2c.write(NFC_DEVICE_ADDR, cmd+1, 1); |
KillingJacky | 0:9d116099a88d | 45 | } |
KillingJacky | 0:9d116099a88d | 46 | |
KillingJacky | 0:9d116099a88d | 47 | unsigned char *nfc_adapter_get_uid(void) |
KillingJacky | 0:9d116099a88d | 48 | { |
KillingJacky | 0:9d116099a88d | 49 | unsigned char i; |
KillingJacky | 0:9d116099a88d | 50 | |
KillingJacky | 0:9d116099a88d | 51 | cmd[0] = NFC_ADAPTER_GET_UID_ID; |
KillingJacky | 0:9d116099a88d | 52 | cmd[1] = 0; |
KillingJacky | 0:9d116099a88d | 53 | i2c.write(NFC_DEVICE_ADDR, cmd, 1); |
KillingJacky | 0:9d116099a88d | 54 | i2c.write(NFC_DEVICE_ADDR, cmd+1, 1); |
KillingJacky | 0:9d116099a88d | 55 | |
KillingJacky | 0:9d116099a88d | 56 | |
KillingJacky | 0:9d116099a88d | 57 | for(i=0;i<2;i++) |
KillingJacky | 0:9d116099a88d | 58 | { |
KillingJacky | 0:9d116099a88d | 59 | //uid[i] = dlc_i2c_receive_byte(); |
KillingJacky | 0:9d116099a88d | 60 | i2c.read(NFC_DEVICE_ADDR, (char *)&uid[i], 1); |
KillingJacky | 0:9d116099a88d | 61 | } |
KillingJacky | 0:9d116099a88d | 62 | |
KillingJacky | 0:9d116099a88d | 63 | for(i=0;i<uid[1];i++) |
KillingJacky | 0:9d116099a88d | 64 | { |
KillingJacky | 0:9d116099a88d | 65 | //uid[i + 2]= dlc_i2c_receive_byte(); |
KillingJacky | 0:9d116099a88d | 66 | i2c.read(NFC_DEVICE_ADDR, (char *)&uid[i+2], 1); |
KillingJacky | 0:9d116099a88d | 67 | } |
KillingJacky | 0:9d116099a88d | 68 | uid[uid[1] + 2] = '\0'; |
KillingJacky | 0:9d116099a88d | 69 | |
KillingJacky | 0:9d116099a88d | 70 | return (unsigned char *)uid; |
KillingJacky | 0:9d116099a88d | 71 | } |
KillingJacky | 0:9d116099a88d | 72 | |
KillingJacky | 0:9d116099a88d | 73 | unsigned char *nfc_adapter_read(void) |
KillingJacky | 0:9d116099a88d | 74 | { |
KillingJacky | 0:9d116099a88d | 75 | unsigned char data[2]; |
KillingJacky | 0:9d116099a88d | 76 | unsigned char i; |
KillingJacky | 0:9d116099a88d | 77 | |
KillingJacky | 0:9d116099a88d | 78 | cmd[0] = NFC_ADAPTER_READ_ID; |
KillingJacky | 0:9d116099a88d | 79 | cmd[1] = 0; |
KillingJacky | 0:9d116099a88d | 80 | i2c.write(NFC_DEVICE_ADDR, cmd, 1); |
KillingJacky | 0:9d116099a88d | 81 | i2c.write(NFC_DEVICE_ADDR, cmd+1, 1); |
KillingJacky | 0:9d116099a88d | 82 | |
KillingJacky | 0:9d116099a88d | 83 | for(i=0;i<2;i++) |
KillingJacky | 0:9d116099a88d | 84 | { |
KillingJacky | 0:9d116099a88d | 85 | //data[i] = dlc_i2c_receive_byte(); |
KillingJacky | 0:9d116099a88d | 86 | i2c.read(NFC_DEVICE_ADDR, (char *)&data[i], 1); |
KillingJacky | 0:9d116099a88d | 87 | } |
KillingJacky | 0:9d116099a88d | 88 | |
KillingJacky | 0:9d116099a88d | 89 | unsigned char length = data[1]; |
KillingJacky | 0:9d116099a88d | 90 | unsigned char *ptr = (unsigned char *)malloc(length + 2 + 1); |
KillingJacky | 0:9d116099a88d | 91 | *ptr = data[0]; |
KillingJacky | 0:9d116099a88d | 92 | *(ptr + 1) = data[1]; |
KillingJacky | 0:9d116099a88d | 93 | *(ptr + length + 2) = '\0'; |
KillingJacky | 0:9d116099a88d | 94 | |
KillingJacky | 0:9d116099a88d | 95 | for(i=0;i<*(ptr + 1);i++) |
KillingJacky | 0:9d116099a88d | 96 | { |
KillingJacky | 0:9d116099a88d | 97 | //*(ptr + i + 2) = dlc_i2c_receive_byte(); |
KillingJacky | 0:9d116099a88d | 98 | i2c.read(NFC_DEVICE_ADDR, (char *)(ptr + i + 2), 1); |
KillingJacky | 0:9d116099a88d | 99 | } |
KillingJacky | 0:9d116099a88d | 100 | |
KillingJacky | 0:9d116099a88d | 101 | return ptr; |
KillingJacky | 0:9d116099a88d | 102 | } |
KillingJacky | 0:9d116099a88d | 103 | |
KillingJacky | 0:9d116099a88d | 104 | void nfc_adapter_write(unsigned char *data, unsigned char length) |
KillingJacky | 0:9d116099a88d | 105 | { |
KillingJacky | 0:9d116099a88d | 106 | unsigned char i; |
KillingJacky | 0:9d116099a88d | 107 | |
KillingJacky | 0:9d116099a88d | 108 | cmd[0] = NFC_ADAPTER_WRITE_ID; |
KillingJacky | 0:9d116099a88d | 109 | cmd[1] = length; |
KillingJacky | 0:9d116099a88d | 110 | i2c.write(NFC_DEVICE_ADDR, cmd, 1); |
KillingJacky | 0:9d116099a88d | 111 | i2c.write(NFC_DEVICE_ADDR, cmd+1, 1); |
KillingJacky | 0:9d116099a88d | 112 | |
KillingJacky | 0:9d116099a88d | 113 | for(i=0;i<length;i++) |
KillingJacky | 0:9d116099a88d | 114 | { |
KillingJacky | 0:9d116099a88d | 115 | //dlc_i2c_send_byte(*(string + i)); |
KillingJacky | 0:9d116099a88d | 116 | i2c.write(NFC_DEVICE_ADDR, (char *)(data + i), 1); |
KillingJacky | 0:9d116099a88d | 117 | } |
KillingJacky | 0:9d116099a88d | 118 | } |
KillingJacky | 0:9d116099a88d | 119 | |
KillingJacky | 0:9d116099a88d | 120 | void nfc_adapter_erase(void) |
KillingJacky | 0:9d116099a88d | 121 | { |
KillingJacky | 0:9d116099a88d | 122 | cmd[0] = NFC_ADAPTER_ERASE_ID; |
KillingJacky | 0:9d116099a88d | 123 | cmd[1] = 0; |
KillingJacky | 0:9d116099a88d | 124 | i2c.write(NFC_DEVICE_ADDR, cmd, 1); |
KillingJacky | 0:9d116099a88d | 125 | i2c.write(NFC_DEVICE_ADDR, cmd+1, 1); |
KillingJacky | 0:9d116099a88d | 126 | } |
KillingJacky | 0:9d116099a88d | 127 | |
KillingJacky | 0:9d116099a88d | 128 | |
KillingJacky | 1:27242e2abd99 | 129 |