AppNearMe µNFC stack for the NXP PN532 chip License: You can use the stack free of charge to prototype with mbed; if you want to use the stack with your commercial product, get in touch!

Dependents:   IOT_sensor_nfc AppNearMe_MuNFC_PN532_Test p2p_nfc_test NFCMoodLamp ... more

License

You can use the stack free of charge to prototype with mbed; if you want to use the stack with your commercial product, get in touch!

Committer:
AppNearMe
Date:
Tue Aug 07 21:55:12 2012 +0000
Revision:
3:0b949b2d3b55
Parent:
0:480387549d89
Versioning -> Hg

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AppNearMe 3:0b949b2d3b55 1 /*
AppNearMe 3:0b949b2d3b55 2 TLVList.h
AppNearMe 3:0b949b2d3b55 3 Copyright (c) Donatien Garnier 2012
AppNearMe 3:0b949b2d3b55 4 donatien.garnier@appnearme.com
AppNearMe 3:0b949b2d3b55 5 http://www.appnearme.com/
AppNearMe 3:0b949b2d3b55 6 */
AppNearMe 3:0b949b2d3b55 7
AppNearMe 3:0b949b2d3b55 8 /** \file TLVList.h
AppNearMe 3:0b949b2d3b55 9 * List of Type/Length/Values items
AppNearMe 3:0b949b2d3b55 10 */
AppNearMe 3:0b949b2d3b55 11
AppNearMe 3:0b949b2d3b55 12 #ifndef TLVLIST_H_
AppNearMe 3:0b949b2d3b55 13 #define TLVLIST_H_
AppNearMe 3:0b949b2d3b55 14
AppNearMe 3:0b949b2d3b55 15 #include <cstdint> //For uint_*t
AppNearMe 3:0b949b2d3b55 16 #include <cstring> //For size_t
AppNearMe 3:0b949b2d3b55 17
AppNearMe 3:0b949b2d3b55 18 using std::uint8_t;
AppNearMe 3:0b949b2d3b55 19 using std::uint16_t;
AppNearMe 3:0b949b2d3b55 20 using std::uint32_t;
AppNearMe 3:0b949b2d3b55 21 using std::size_t;
AppNearMe 3:0b949b2d3b55 22
AppNearMe 3:0b949b2d3b55 23 typedef struct __tlv_list tlv_list;
AppNearMe 3:0b949b2d3b55 24
AppNearMe 3:0b949b2d3b55 25 /** A simple container
AppNearMe 3:0b949b2d3b55 26 * List of Type/Length/Values items
AppNearMe 3:0b949b2d3b55 27 */
AppNearMe 3:0b949b2d3b55 28 class TLVList
AppNearMe 3:0b949b2d3b55 29 {
AppNearMe 3:0b949b2d3b55 30 public:
AppNearMe 3:0b949b2d3b55 31
AppNearMe 3:0b949b2d3b55 32 //getNext...
AppNearMe 3:0b949b2d3b55 33 //get()
AppNearMe 3:0b949b2d3b55 34 //put()
AppNearMe 3:0b949b2d3b55 35
AppNearMe 3:0b949b2d3b55 36
AppNearMe 3:0b949b2d3b55 37 //typedef tlv_type TLVType;
AppNearMe 3:0b949b2d3b55 38 /** Type of a TLV item
AppNearMe 3:0b949b2d3b55 39 *
AppNearMe 3:0b949b2d3b55 40 */
AppNearMe 3:0b949b2d3b55 41 enum TLVType
AppNearMe 3:0b949b2d3b55 42 {
AppNearMe 3:0b949b2d3b55 43 UINT8, //!< Unsigned char (byte)
AppNearMe 3:0b949b2d3b55 44 UINT32, //!< Unsigned int
AppNearMe 3:0b949b2d3b55 45 UINT8_ARRAY, ///< Byte array
AppNearMe 3:0b949b2d3b55 46 STRING, //!<String
AppNearMe 3:0b949b2d3b55 47 NONE, //!<End of packet
AppNearMe 3:0b949b2d3b55 48 UNKNOWN //!< Unknown type
AppNearMe 3:0b949b2d3b55 49 };
AppNearMe 3:0b949b2d3b55 50
AppNearMe 3:0b949b2d3b55 51 /* Getters */
AppNearMe 3:0b949b2d3b55 52
AppNearMe 3:0b949b2d3b55 53 /** Iterate to next item.
AppNearMe 3:0b949b2d3b55 54 * @return type if next item exists, NONE otherwise
AppNearMe 3:0b949b2d3b55 55 */
AppNearMe 3:0b949b2d3b55 56 TLVType getNext();
AppNearMe 3:0b949b2d3b55 57
AppNearMe 3:0b949b2d3b55 58 /** Get uint8_t value.
AppNearMe 3:0b949b2d3b55 59 * If the current item's type is uint32_t, the value will be masked with 0xFF.
AppNearMe 3:0b949b2d3b55 60 * @return uint8_t value OR 0 if the type is incompatible
AppNearMe 3:0b949b2d3b55 61 */
AppNearMe 3:0b949b2d3b55 62 uint8_t getUInt8();
AppNearMe 3:0b949b2d3b55 63
AppNearMe 3:0b949b2d3b55 64 /** Get uint32_t value.
AppNearMe 3:0b949b2d3b55 65 * If the current item's type is uint8_t, the value will be casted to uint32_t.
AppNearMe 3:0b949b2d3b55 66 * @return uint32_t value OR 0 if the type is incompatible
AppNearMe 3:0b949b2d3b55 67 */
AppNearMe 3:0b949b2d3b55 68 uint32_t getUInt32();
AppNearMe 3:0b949b2d3b55 69
AppNearMe 3:0b949b2d3b55 70 /** Get array length.
AppNearMe 3:0b949b2d3b55 71 * @return bytes array length
AppNearMe 3:0b949b2d3b55 72 */
AppNearMe 3:0b949b2d3b55 73 size_t getArrayLength();
AppNearMe 3:0b949b2d3b55 74
AppNearMe 3:0b949b2d3b55 75 /** Get array.
AppNearMe 3:0b949b2d3b55 76 * @param buf pointer to buffer's start
AppNearMe 3:0b949b2d3b55 77 * @param maxLen maximum number of bytes to copy
AppNearMe 3:0b949b2d3b55 78 * @return number of copied bytes
AppNearMe 3:0b949b2d3b55 79 */
AppNearMe 3:0b949b2d3b55 80 size_t getArray(uint8_t* buf, size_t maxLen);
AppNearMe 3:0b949b2d3b55 81
AppNearMe 3:0b949b2d3b55 82 /** Get string length.
AppNearMe 3:0b949b2d3b55 83 * @return string length
AppNearMe 3:0b949b2d3b55 84 */
AppNearMe 3:0b949b2d3b55 85 size_t getStringLength();
AppNearMe 3:0b949b2d3b55 86
AppNearMe 3:0b949b2d3b55 87 /** Get string.
AppNearMe 3:0b949b2d3b55 88 * Copy string to buffer (including null-terminating char).
AppNearMe 3:0b949b2d3b55 89 * @param str pointer to string's start
AppNearMe 3:0b949b2d3b55 90 * @param maxLen maximum number of chars to copy (not including null-terminating char)
AppNearMe 3:0b949b2d3b55 91 * @return number of copied chars
AppNearMe 3:0b949b2d3b55 92 */
AppNearMe 3:0b949b2d3b55 93 size_t getString(char* str, size_t maxLen);
AppNearMe 3:0b949b2d3b55 94
AppNearMe 3:0b949b2d3b55 95 /* Setters */
AppNearMe 3:0b949b2d3b55 96
AppNearMe 3:0b949b2d3b55 97 /** Check whether there is space left in list.
AppNearMe 3:0b949b2d3b55 98 * @return true if there is space left, false otherwise
AppNearMe 3:0b949b2d3b55 99 */
AppNearMe 3:0b949b2d3b55 100 bool isSpace();
AppNearMe 3:0b949b2d3b55 101
AppNearMe 3:0b949b2d3b55 102 /** Put uint8_t value.
AppNearMe 3:0b949b2d3b55 103 * @param value uint8_t value
AppNearMe 3:0b949b2d3b55 104 * @return true on success, false if there is not enough space in buffer
AppNearMe 3:0b949b2d3b55 105 */
AppNearMe 3:0b949b2d3b55 106 bool putUInt8(uint8_t value);
AppNearMe 3:0b949b2d3b55 107
AppNearMe 3:0b949b2d3b55 108 /** Put uint32_t value.
AppNearMe 3:0b949b2d3b55 109 * @param value uint32_t value
AppNearMe 3:0b949b2d3b55 110 * @return true on success, false if there is not enough space in buffer
AppNearMe 3:0b949b2d3b55 111 */
AppNearMe 3:0b949b2d3b55 112 bool putUInt32(uint32_t value);
AppNearMe 3:0b949b2d3b55 113
AppNearMe 3:0b949b2d3b55 114 /** Put array.
AppNearMe 3:0b949b2d3b55 115 * @param buf pointer to buffer's start
AppNearMe 3:0b949b2d3b55 116 * @param len number of bytes to copy
AppNearMe 3:0b949b2d3b55 117 * @return number of copied bytes
AppNearMe 3:0b949b2d3b55 118 */
AppNearMe 3:0b949b2d3b55 119 size_t putArray(uint8_t* buf, size_t len);
AppNearMe 3:0b949b2d3b55 120
AppNearMe 3:0b949b2d3b55 121 /** Put string.
AppNearMe 3:0b949b2d3b55 122 * @param str pointer to null-terminated string's start
AppNearMe 3:0b949b2d3b55 123 * @return number of copied bytes
AppNearMe 3:0b949b2d3b55 124 */
AppNearMe 3:0b949b2d3b55 125 size_t putString(char* str);
AppNearMe 3:0b949b2d3b55 126
AppNearMe 3:0b949b2d3b55 127 protected:
AppNearMe 3:0b949b2d3b55 128 TLVList();
AppNearMe 3:0b949b2d3b55 129
AppNearMe 3:0b949b2d3b55 130 void wrap(tlv_list* payload);
AppNearMe 3:0b949b2d3b55 131
AppNearMe 3:0b949b2d3b55 132 private:
AppNearMe 3:0b949b2d3b55 133 tlv_list* m_tlvList;
AppNearMe 3:0b949b2d3b55 134
AppNearMe 3:0b949b2d3b55 135 TLVType m_type;
AppNearMe 3:0b949b2d3b55 136
AppNearMe 3:0b949b2d3b55 137 union
AppNearMe 3:0b949b2d3b55 138 {
AppNearMe 3:0b949b2d3b55 139 uint8_t m_uint8;
AppNearMe 3:0b949b2d3b55 140 uint32_t m_uint32;
AppNearMe 3:0b949b2d3b55 141 uint8_t* m_array;
AppNearMe 3:0b949b2d3b55 142 char* m_str;
AppNearMe 3:0b949b2d3b55 143 };
AppNearMe 3:0b949b2d3b55 144
AppNearMe 3:0b949b2d3b55 145 union
AppNearMe 3:0b949b2d3b55 146 {
AppNearMe 3:0b949b2d3b55 147 size_t m_arrayLen;
AppNearMe 3:0b949b2d3b55 148 size_t m_strLen;
AppNearMe 3:0b949b2d3b55 149 };
AppNearMe 3:0b949b2d3b55 150
AppNearMe 3:0b949b2d3b55 151 bool m_space;
AppNearMe 3:0b949b2d3b55 152
AppNearMe 3:0b949b2d3b55 153 friend class NdefCallback;
AppNearMe 3:0b949b2d3b55 154 };
AppNearMe 3:0b949b2d3b55 155
AppNearMe 3:0b949b2d3b55 156
AppNearMe 3:0b949b2d3b55 157 #endif /* TLVLIST_H_ */