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!
PN532/TLVList.h@3:0b949b2d3b55, 2012-08-07 (annotated)
- 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?
User | Revision | Line number | New 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_ */ |