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 Jan 15 15:34:39 2013 +0000
Revision:
13:6f98851e025b
Parent:
11:5be631376e5b
renamed rtos.h to platform_rtos.h to prevent insludes mess

Who changed what in which revision?

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