#ifndef __TLV_PARSER_H__
#define __TLV_PARSER_H__

#include "basedef.h"

//#define COMPOSITE_TAG_MASK   0x1000

#if 0
uint8 char2Uint8(uint8 input);
#endif
uint32 getTag(const BlobData* pBlobInput, const uint32 offset);
uint32 getLength(const BlobData* pBlobInput, const uint32 offset);
uint32 getTag2ByteBE(const BlobData* pBlobInput, const uint32 offset);
uint32 getLength2ByteBE(const BlobData* pBlobInput, const uint32 offset);
uint32 getTagBE(const BlobData* pBlobInput, const uint32 offset);
uint32 getLengthBE(const BlobData* pBlobInput, const uint32 offset);
boolean getValue(const BlobData* pBlobInput, const TlvDecodeData targetData, BlobData* pBlobOutput);
boolean getValue_uint8(const BlobData* pBlobInput, const TlvDecodeData targetData, uint8* pTempUint8);
boolean getValue_uint16(const BlobData* pBlobInput, const TlvDecodeData targetData, uint16* pTempUint16);
boolean getValue_uint32(const BlobData* pBlobInput, const TlvDecodeData targetData, uint32* pTempUint32);
uint32 str2Uint32(const uint8* pInput);
uint16 str2Uint16(const uint8* pInput);
boolean setTlv(const uint32 tag, const uint32 length, const void* pData, TlvEncodeData* pTlvEncData);
uint32 decode(const BlobData* pBlobInput, const uint32 offset, TlvDecodeData* pResult);
uint32 decode2ByteBE(const BlobData* pBlobInput, const uint32 offset, TlvDecodeData* pResult);
uint32 decodeBE(const BlobData* pBlobInput, const uint32 offset, TlvDecodeData* pResult);
boolean encodeTlv2Blob(const TlvEncodeData tlvInput, BlobData* pBlobOutput);
boolean encodeRawTlv2Blob(const uint32 tag, const uint32 length, const void* pData, BlobData* pBlobEncData);

#endif  //end of __TLV_PARSER_H__

