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!

Revision:
11:5be631376e5b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/PN532/TLVList.h	Wed Nov 07 18:19:09 2012 +0000
@@ -0,0 +1,162 @@
+/*
+    TLVList.h 
+    Copyright (c) Donatien Garnier 2012
+    donatien.garnier@appnearme.com
+    http://www.appnearme.com/
+*/
+
+/** \file TLVList.h
+*    List of Type/Length/Values items
+*/
+
+#ifndef TLVLIST_H_
+#define TLVLIST_H_
+
+#include <cstdint> //For uint_*t
+#include <cstring> //For size_t
+
+using std::uint8_t;
+using std::uint16_t;
+using std::uint32_t;
+using std::size_t;
+
+typedef struct __tlv_list tlv_list;
+
+/** A simple container
+* List of Type/Length/Values items
+*/
+class TLVList
+{
+public:
+
+  //getNext...
+  //get()
+  //put()
+
+
+  //typedef tlv_type TLVType;
+  /** Type of a TLV item
+   *
+   */
+  enum TLVType
+  {
+    UINT8, //!< Unsigned char (byte)
+    UINT32, //!< Unsigned int
+    UINT8_ARRAY, ///< Byte array
+    STRING, //!<String
+    NONE, //!<End of packet
+    UNKNOWN //!< Unknown type
+  };
+
+  /* Getters */
+
+  /** Iterate to next item.
+   *  @return type if next item exists, NONE otherwise
+   */
+  TLVType getNext();
+
+  /** Get current item's type.
+   *  @return type if item exists, NONE otherwise
+   */
+  TLVType getType();
+
+  /** Get uint8_t value.
+   * If the current item's type is uint32_t, the value will be masked with 0xFF.
+   *  @return uint8_t value OR 0 if the type is incompatible
+   */
+  uint8_t getUInt8();
+
+  /** Get uint32_t value.
+   * If the current item's type is uint8_t, the value will be casted to uint32_t.
+   *  @return uint32_t value OR 0 if the type is incompatible
+   */
+  uint32_t getUInt32();
+
+  /** Get array length.
+   *  @return bytes array length
+   */
+  size_t getArrayLength();
+
+  /** Get array.
+   *  @param buf pointer to buffer's start
+   *  @param maxLen maximum number of bytes to copy
+   *  @return number of copied bytes
+   */
+  size_t getArray(uint8_t* buf, size_t maxLen);
+
+  /** Get string length.
+   *  @return string length
+   */
+  size_t getStringLength();
+
+  /** Get string.
+   *  Copy string to buffer (including null-terminating char).
+   *  @param str pointer to string's start
+   *  @param maxLen maximum number of chars to copy (not including null-terminating char)
+   *  @return number of copied chars
+   */
+  size_t getString(char* str, size_t maxLen);
+
+  /* Setters */
+
+  /** Check whether there is space left in list.
+   *  @return true if there is space left, false otherwise
+   */
+  bool isSpace();
+
+  /** Put uint8_t value.
+   *  @param value uint8_t value
+   *  @return true on success, false if there is not enough space in buffer
+   */
+  bool putUInt8(uint8_t value);
+
+  /** Put uint32_t value.
+   *  @param value uint32_t value
+   *  @return true on success, false if there is not enough space in buffer
+   */
+  bool putUInt32(uint32_t value);
+
+  /** Put array.
+   *  @param buf pointer to buffer's start
+   *  @param len number of bytes to copy
+   *  @return number of copied bytes
+   */
+  size_t putArray(uint8_t* buf, size_t len);
+
+  /** Put string.
+   *  @param str pointer to null-terminated string's start
+   *  @return number of copied bytes
+   */
+  size_t putString(char* str);
+
+protected:
+  TLVList();
+
+  void wrap(tlv_list* payload);
+
+private:
+  tlv_list* m_tlvList;
+
+  TLVType m_type;
+
+  union
+  {
+    uint8_t m_uint8;
+    uint32_t m_uint32;
+    uint8_t* m_array;
+    char* m_str;
+  };
+
+  union
+  {
+    size_t m_arrayLen;
+    size_t m_strLen;
+  };
+
+  bool m_space;
+
+  friend class NdefCallback;
+};
+
+
+#endif /* TLVLIST_H_ */