LEER TAG

Dependents:   NFC_HTM_READ EMULAR_TAGS Escribir_tag NFC_HTM_READ-WRITE

Committer:
mauroar211
Date:
Fri Apr 24 19:02:44 2015 +0000
Revision:
1:a549ef8b142a
Parent:
0:b805b487fbef
SE RESTAURARON LOS ARCHIVO DE LA LIBRER?A;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mauroar211 0:b805b487fbef 1
mauroar211 0:b805b487fbef 2 #include "snep.h"
mauroar211 0:b805b487fbef 3 #include "PN532_debug.h"
mauroar211 0:b805b487fbef 4
mauroar211 0:b805b487fbef 5 int8_t SNEP::write(const uint8_t *buf, uint8_t len, uint16_t timeout)
mauroar211 0:b805b487fbef 6 {
mauroar211 0:b805b487fbef 7 if (0 >= llcp.activate(timeout)) {
mauroar211 0:b805b487fbef 8 DMSG("failed to activate PN532 as a target\n");
mauroar211 0:b805b487fbef 9 return -1;
mauroar211 0:b805b487fbef 10 }
mauroar211 0:b805b487fbef 11
mauroar211 0:b805b487fbef 12 if (0 >= llcp.connect(timeout)) {
mauroar211 0:b805b487fbef 13 DMSG("failed to set up a connection\n");
mauroar211 0:b805b487fbef 14 return -2;
mauroar211 0:b805b487fbef 15 }
mauroar211 0:b805b487fbef 16
mauroar211 0:b805b487fbef 17 // response a success SNEP message
mauroar211 0:b805b487fbef 18 headerBuf[0] = SNEP_DEFAULT_VERSION;
mauroar211 0:b805b487fbef 19 headerBuf[1] = SNEP_REQUEST_PUT;
mauroar211 0:b805b487fbef 20 headerBuf[2] = 0;
mauroar211 0:b805b487fbef 21 headerBuf[3] = 0;
mauroar211 0:b805b487fbef 22 headerBuf[4] = 0;
mauroar211 0:b805b487fbef 23 headerBuf[5] = len;
mauroar211 0:b805b487fbef 24 if (0 >= llcp.write(headerBuf, 6, buf, len)) {
mauroar211 0:b805b487fbef 25 return -3;
mauroar211 0:b805b487fbef 26 }
mauroar211 0:b805b487fbef 27
mauroar211 0:b805b487fbef 28 uint8_t rbuf[16];
mauroar211 0:b805b487fbef 29 if (6 > llcp.read(rbuf, sizeof(rbuf))) {
mauroar211 0:b805b487fbef 30 return -4;
mauroar211 0:b805b487fbef 31 }
mauroar211 0:b805b487fbef 32
mauroar211 0:b805b487fbef 33 // check SNEP version
mauroar211 0:b805b487fbef 34 if (SNEP_DEFAULT_VERSION != rbuf[0]) {
mauroar211 0:b805b487fbef 35 DMSG("The received SNEP message's major version is different\n");
mauroar211 0:b805b487fbef 36 // To-do: send Unsupported Version response
mauroar211 0:b805b487fbef 37 return -4;
mauroar211 0:b805b487fbef 38 }
mauroar211 0:b805b487fbef 39
mauroar211 0:b805b487fbef 40 // expect a put request
mauroar211 0:b805b487fbef 41 if (SNEP_RESPONSE_SUCCESS != rbuf[1]) {
mauroar211 0:b805b487fbef 42 DMSG("Expect a success response\n");
mauroar211 0:b805b487fbef 43 return -4;
mauroar211 0:b805b487fbef 44 }
mauroar211 0:b805b487fbef 45
mauroar211 0:b805b487fbef 46 llcp.disconnect(timeout);
mauroar211 0:b805b487fbef 47
mauroar211 0:b805b487fbef 48 return 1;
mauroar211 0:b805b487fbef 49 }
mauroar211 0:b805b487fbef 50
mauroar211 0:b805b487fbef 51 int16_t SNEP::read(uint8_t *buf, uint8_t len, uint16_t timeout)
mauroar211 0:b805b487fbef 52 {
mauroar211 0:b805b487fbef 53 if (0 >= llcp.activate(timeout)) {
mauroar211 0:b805b487fbef 54 DMSG("failed to activate PN532 as a target\n");
mauroar211 0:b805b487fbef 55 return -1;
mauroar211 0:b805b487fbef 56 }
mauroar211 0:b805b487fbef 57
mauroar211 0:b805b487fbef 58 if (0 >= llcp.waitForConnection(timeout)) {
mauroar211 0:b805b487fbef 59 DMSG("failed to set up a connection\n");
mauroar211 0:b805b487fbef 60 return -2;
mauroar211 0:b805b487fbef 61 }
mauroar211 0:b805b487fbef 62
mauroar211 0:b805b487fbef 63 uint16_t status = llcp.read(buf, len);
mauroar211 0:b805b487fbef 64 if (6 > status) {
mauroar211 0:b805b487fbef 65 return -3;
mauroar211 0:b805b487fbef 66 }
mauroar211 0:b805b487fbef 67
mauroar211 0:b805b487fbef 68
mauroar211 0:b805b487fbef 69 // check SNEP version
mauroar211 0:b805b487fbef 70 if (SNEP_DEFAULT_VERSION != buf[0]) {
mauroar211 0:b805b487fbef 71 DMSG("The received SNEP message's major version is different\n");
mauroar211 0:b805b487fbef 72 // To-do: send Unsupported Version response
mauroar211 0:b805b487fbef 73 return -4;
mauroar211 0:b805b487fbef 74 }
mauroar211 0:b805b487fbef 75
mauroar211 0:b805b487fbef 76 // expect a put request
mauroar211 0:b805b487fbef 77 if (SNEP_REQUEST_PUT != buf[1]) {
mauroar211 0:b805b487fbef 78 DMSG("Expect a put request\n");
mauroar211 0:b805b487fbef 79 return -4;
mauroar211 0:b805b487fbef 80 }
mauroar211 0:b805b487fbef 81
mauroar211 0:b805b487fbef 82 // check message's length
mauroar211 0:b805b487fbef 83 uint32_t length = (buf[2] << 24) + (buf[3] << 16) + (buf[4] << 8) + buf[5];
mauroar211 0:b805b487fbef 84 // length should not be more than 244 (header + body < 255, header = 6 + 3 + 2)
mauroar211 0:b805b487fbef 85 if (length > (status - 6)) {
mauroar211 0:b805b487fbef 86 DMSG("The SNEP message is too large: ");
mauroar211 0:b805b487fbef 87 DMSG_INT(length);
mauroar211 0:b805b487fbef 88 DMSG_INT(status - 6);
mauroar211 0:b805b487fbef 89 DMSG("\n");
mauroar211 0:b805b487fbef 90 return -4;
mauroar211 0:b805b487fbef 91 }
mauroar211 0:b805b487fbef 92 for (uint8_t i = 0; i < length; i++) {
mauroar211 0:b805b487fbef 93 buf[i] = buf[i + 6];
mauroar211 0:b805b487fbef 94 }
mauroar211 0:b805b487fbef 95
mauroar211 0:b805b487fbef 96 // response a success SNEP message
mauroar211 0:b805b487fbef 97 headerBuf[0] = SNEP_DEFAULT_VERSION;
mauroar211 0:b805b487fbef 98 headerBuf[1] = SNEP_RESPONSE_SUCCESS;
mauroar211 0:b805b487fbef 99 headerBuf[2] = 0;
mauroar211 0:b805b487fbef 100 headerBuf[3] = 0;
mauroar211 0:b805b487fbef 101 headerBuf[4] = 0;
mauroar211 0:b805b487fbef 102 headerBuf[5] = 0;
mauroar211 0:b805b487fbef 103 llcp.write(headerBuf, 6);
mauroar211 0:b805b487fbef 104
mauroar211 0:b805b487fbef 105 return length;
mauroar211 0:b805b487fbef 106 }