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:
Thu Jul 26 09:12:27 2012 +0000
Revision:
0:480387549d89
Child:
3:0b949b2d3b55
Initial commit

Who changed what in which revision?

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