nl:: Weave:: TLV:: TLVReader
#include <src/lib/core/WeaveTLV.h>
Bietet einen speichereffizienten Parser für im Weave-TLV-Format codierte Daten.
Zusammenfassung
TLVReader implementiert einen Weiterleitungs-Parser für TLV-Daten von Weave. Das TLVReader-Objekt fungiert als Cursor, mit dem über eine Sequenz von TLV-Elementen iteriert und deren Inhalt interpretiert werden kann. Wenn Anwendungen auf einem Element positioniert sind, können sie die Get()-Methoden des Lesegeräts aufrufen, um den Typ und das Tag des aktuellen Elements abzufragen und den zugehörigen Wert zu extrahieren. Die Next()-Methode des Lesers wird verwendet, um von Element zu Element zu wechseln.
Ein TLVReader-Objekt wird immer entweder vor, auf oder nach einem TLV-Element positioniert. Bei der erstmaligen Initialisierung wird ein TLVReader unmittelbar vor dem ersten Element der Codierung positioniert. Um mit dem Lesen zu beginnen, muss eine Anwendung zuerst die Methode Next() aufrufen, um den Leser auf dem ersten Element zu positionieren. Wenn ein Containerelement auf eine Struktur, ein Array oder einen Pfad stößt, können die Methoden OpenContainer() oder EnterContainer() verwendet werden, um den Inhalt des Containers zu durchlaufen.
Wenn der Reader das Ende einer TLV-Codierung oder das letzte Element in einem Container erreicht, signalisiert er der Anwendung, dass er einen WEAVE_END_OF_TLV-Fehler von der Methode Next() zurückgibt. Das Lesegerät gibt WEAVE_END_OF_TLV so lange zurück, bis er neu initialisiert wird oder der aktuelle Container (über CloseContainer() / ExitContainer()) beendet wird.
Ein TLVReader-Objekt kann Daten direkt aus einem festen Eingabepuffer oder aus einer Kette aus einem oder mehreren PacketBuffers parsen. Außerdem können Anwendungen eine GetNextBuffer
-Funktion bereitstellen, um dem Lesegerät Daten von einer beliebigen Quelle, z.B. einem Socket oder einem seriellen Port, zu liefern.
Übernahme
Direkte bekannte Unterklassen:nl::Weave::Profiles::DataManagement_Current::CircularEventReader
nl::Weave::TLV::CircularTLVReader
Öffentliche Typen |
|
---|---|
GetNextBufferFunct)(TLVReader &reader, uintptr_t &bufHandle, const uint8_t *&bufStart, uint32_t &bufLen)
|
WEAVE_ERROR(* Eine Funktion, mit der zusätzliche TLV-Daten abgerufen werden können, die geparst werden sollen. |
Öffentliche Attribute |
|
---|---|
AppData
|
void *
Ein Zeigerfeld, das für anwendungsspezifische Daten verwendet werden kann.
|
GetNextBuffer
|
Ein Zeiger auf eine Funktion, die Eingabedaten für das TLVReader-Objekt erzeugt.
|
ImplicitProfileId
|
uint32_t
Die Profil-ID, die für Profil-Tags verwendet werden soll, die implizit codiert sind.
|
Geschützte Attribute |
|
---|---|
mBufEnd
|
const uint8_t *
|
mBufHandle
|
uintptr_t
|
mContainerType
|
|
mControlByte
|
uint16_t
|
mElemLenOrVal
|
uint64_t
|
mElemTag
|
uint64_t
|
mLenRead
|
uint32_t
|
mMaxLen
|
uint32_t
|
mReadPoint
|
const uint8_t *
|
Öffentliche Funktionen |
|
---|---|
CloseContainer(TLVReader & containerReader)
|
Vollzieht das Lesen eines TLV-Containers nach einem Aufruf von OpenContainer().
|
DupBytes(uint8_t *& buf, uint32_t & dataLen)
|
Ordnet einen Puffer zu und gibt ihn zurück, der den Wert des aktuellen Bytes oder des UTF8-Strings enthält.
|
DupString(char *& buf)
|
Ordnet einen Puffer zu und gibt ihn zurück, der den als Null beendeten Wert des aktuellen Bytes oder UTF8-Strings enthält.
|
EnterContainer(TLVType & outerContainerType)
|
|
ExitContainer(TLVType outerContainerType)
|
|
Get(bool & v)
|
Ruft den Wert des aktuellen Elements als booleschen Typ ab.
|
Get(int8_t & v)
|
Ruft den Wert des aktuellen Elements als vorzeichenbehaftete 8-Bit-Ganzzahl ab.
|
Get(int16_t & v)
|
Ruft den Wert des aktuellen Elements als vorzeichenbehaftete 16-Bit-Ganzzahl ab.
|
Get(int32_t & v)
|
Ruft den Wert des aktuellen Elements als vorzeichenbehaftete 32-Bit-Ganzzahl ab.
|
Get(int64_t & v)
|
Ruft den Wert des aktuellen Elements als vorzeichenbehaftete 64-Bit-Ganzzahl ab.
|
Get(uint8_t & v)
|
Ruft den Wert des aktuellen Elements als vorzeichenlose 8-Bit-Ganzzahl ab.
|
Get(uint16_t & v)
|
Ruft den Wert des aktuellen Elements als 16-Bit-Ganzzahl ohne Vorzeichen ab.
|
Get(uint32_t & v)
|
Ruft den Wert des aktuellen Elements als vorzeichenlose 32-Bit-Ganzzahl ab.
|
Get(uint64_t & v)
|
Ruft den Wert des aktuellen Elements als vorzeichenlose 64-Bit-Ganzzahl ab.
|
Get(float & v)
|
|
Get(double & v)
|
Ruft den Wert des aktuellen Elements als Gleitkommazahl mit doppelter Genauigkeit ab.
|
GetBufHandle(void) const
|
uintptr_t
|
GetBytes(uint8_t *buf, uint32_t bufSize)
|
Ruft den Wert des aktuellen Byte- oder UTF8-Stringelements ab.
|
GetContainerType(void) const
|
Gibt den Typ des Containers zurück, in dem der TLVReader gerade liest.
|
GetControlByte(void) const
|
uint16_t
Gibt das Steuerbyte zurück, das dem aktuellen TLV-Element zugeordnet ist.
|
GetDataPtr(const uint8_t *& data)
|
Ruft einen Verweis auf das erste codierte Byte eines TLV-Bytes oder UTF8-Stringelements ab.
|
GetLength(void) const
|
uint32_t
Gibt die Länge der Daten zurück, die mit dem aktuellen TLV-Element verknüpft sind.
|
GetLengthRead(void) const
|
uint32_t
Gibt die Gesamtzahl der gelesenen Byte zurück, seit der Lesegerät initialisiert wurde.
|
GetReadPoint(void) const
|
const uint8_t *
Ruft den Punkt im zugrunde liegenden Eingabepuffer ab, der der aktuellen Position des Lesers entspricht.
|
GetRemainingLength(void) const
|
uint32_t
Gibt die Gesamtzahl der Byte zurück, die gelesen werden können, bis die maximale Leselänge erreicht ist.
|
GetString(char *buf, uint32_t bufSize)
|
Ruft den Wert des aktuellen Byte- oder UTF8-Stringelements als String mit Null-Beendigung ab.
|
GetTag(void) const
|
uint64_t
Gibt das Tag zurück, das mit dem aktuellen TLV-Element verknüpft ist.
|
GetType(void) const
|
Gibt den Typ des aktuellen TLV-Elements zurück.
|
Init(const TLVReader & aReader)
|
void
|
Init(const uint8_t *data, uint32_t dataLen)
|
void
Initialisiert ein TLVReader-Objekt, das aus einem einzelnen Eingabepuffer gelesen wird.
|
Init(PacketBuffer *buf, uint32_t maxLen)
|
void
Initialisiert ein TLVReader-Objekt, um aus einem einzelnen PacketBuffer zu lesen.
|
Init(PacketBuffer *buf, uint32_t maxLen, bool allowDiscontiguousBuffers)
|
void
Initialisiert ein TLVReader-Objekt, um aus einem oder mehreren PacketBuffers zu lesen.
|
Next(void)
|
|
Next(TLVType expectedType, uint64_t expectedTag)
|
|
OpenContainer(TLVReader & containerReader)
|
|
Skip(void)
|
|
VerifyEndOfContainer(void)
|
Überprüft, ob sich das TVLReader-Objekt am Ende eines TLV-Containers befindet.
|
Geschützte Funktionen |
|
---|---|
ClearElementState(void)
|
void
Löscht den Status von TLVReader.
|
ElementType(void) const
|
TLVElementType
Dies ist eine private Methode, die den TLVElementType von mControlByte zurückgibt.
|
EnsureData(WEAVE_ERROR noDataErr)
|
|
GetElementHeadLength(uint8_t & elemHeadBytes) const
|
Dies ist eine private Methode, mit der die Länge eines TLV-Elementkopfes berechnet wird.
|
IsContainerOpen(void) const
|
bool
|
ReadData(uint8_t *buf, uint32_t len)
|
|
ReadElement(void)
|
|
ReadTag(TLVTagControl tagControl, const uint8_t *& p)
|
uint64_t
|
SetContainerOpen(bool aContainerOpen)
|
void
|
SkipData(void)
|
Überspringen Sie alle Daten, die im aktuellen TLV enthalten sind, indem Sie sie ohne Zielzwischenspeicher lesen.
|
SkipToEndOfContainer(void)
|
|
VerifyElement(void)
|
Geschützte statische Funktionen |
|
---|---|
FailGetNextBuffer(TLVReader & reader, uintptr_t & bufHandle, const uint8_t *& bufStart, uint32_t & bufLen)
|
|
GetNextPacketBuffer(TLVReader & reader, uintptr_t & bufHandle, const uint8_t *& bufStart, uint32_t & bufLen)
|
Öffentliche Typen
GetNextBufferFunct
WEAVE_ERROR(* GetNextBufferFunct)(TLVReader &reader, uintptr_t &bufHandle, const uint8_t *&bufStart, uint32_t &bufLen)
Eine Funktion, mit der zusätzliche TLV-Daten abgerufen werden können, die geparst werden sollen.
Funktionen dieses Typs werden verwendet, um Eingabedaten in einen TLVReader zu übergeben. Wenn die Funktion aufgerufen wird, wird erwartet, dass sie zusätzliche Daten für den Leser erzeugt, um ihn zu parsen oder dem Leser zu signalisieren, dass keine weiteren Daten verfügbar sind.
Details | |||||||||
---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||
Rückgabewerte |
|
Öffentliche Attribute
AppData
void * AppData
Ein Zeigerfeld, das für anwendungsspezifische Daten verwendet werden kann.
GetNextBuffer
GetNextBufferFunct GetNextBuffer
Ein Zeiger auf eine Funktion, die Eingabedaten für das TLVReader-Objekt erzeugt.
Wenn dieser Wert auf NULL gesetzt ist (Standardwert), geht der Leser davon aus, dass keine weiteren Eingabedaten verfügbar sind.
GetNextBuffer kann jederzeit von einer Anwendung festgelegt werden, wird jedoch normalerweise bei der Initialisierung des Readers festgelegt.
Weitere Informationen zur Implementierung der GetNextBuffer-Funktion finden Sie in der Typdefinition GetNextBufferFunct.
ImplicitProfileId
uint32_t ImplicitProfileId
Die Profil-ID, die für Profil-Tags verwendet werden soll, die implizit codiert sind.
Wenn der Leser auf ein profilspezifisches Tag stößt, das implizit codiert wurde, wird der Wert der ImplicitProfileId
-Eigenschaft als angenommene Profil-ID für das Tag verwendet.
Die Eigenschaft ImplicitProfileId
ist standardmäßig auf „kProfileIdNot Specific“ festgelegt. Beim Decodieren von TLV, das implizit codierte Tags enthält, müssen Anwendungen ImplicitProfileId
festlegen, bevor TLV-Elemente mit solchen Tags gelesen werden. Die geeignete Profil-ID hängt normalerweise vom Kontext der gesprochenen Anwendung oder des gesprochenen Protokolls ab.
Wenn ein implizit codiertes Tag erkannt wird, während ImplicitProfileId
auf kProfileIdNot Specificiert ist, gibt das Lesegerät den Fehler WEAVE_ERROR_UNKNOWN_IMPLICIT_TLV_TAG zurück.
Geschützte Attribute
mBufEnd
const uint8_t * mBufEnd
mBufHandle
uintptr_t mBufHandle
mContainerType
TLVType mContainerType
mControlByte
uint16_t mControlByte
mElemLenOrVal
uint64_t mElemLenOrVal
mElemTag
uint64_t mElemTag
mLenRead
uint32_t mLenRead
mMaxLen
uint32_t mMaxLen
mReadPoint
const uint8_t * mReadPoint
Öffentliche Funktionen
CloseContainer
WEAVE_ERROR CloseContainer( TLVReader & containerReader )
Vollzieht das Lesen eines TLV-Containers nach einem Aufruf von OpenContainer().
Die CloseContainer()-Methode stellt den Status eines übergeordneten TLVReader-Objekts nach einem Aufruf von OpenContainer() wieder her. Für jeden Aufruf von OpenContainer()-Anwendungen muss ein entsprechender Aufruf an CloseContainer() erfolgen. Dabei wird ein Verweis auf denselben Container-Reader an beide Methoden übergeben.
Wenn CloseContainer() zurückgegeben wird, wird der übergeordnete Leser direkt vor dem ersten Element nach dem Container positioniert. Ab diesem Punkt kann eine Anwendung die Methode Next() verwenden, um durch alle verbleibenden Elemente zu blättern.
Anwendungen können jederzeit CloseContainer() auf einem übergeordneten Reader aufrufen, unabhängig davon, ob alle Elemente im zugrunde liegenden Container gelesen wurden. Nach dem Aufruf von CloseContainer() sollte die Anwendung den Container-Reader als "deinitialisiert" betrachten und ihn nicht weiter verwenden, ohne ihn neu zu initialisieren.
Details | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||||||
Rückgabewerte |
|
DupBytes
WEAVE_ERROR DupBytes( uint8_t *& buf, uint32_t & dataLen )
Ordnet einen Puffer zu und gibt ihn zurück, der den Wert des aktuellen Bytes oder des UTF8-Strings enthält.
Diese Methode erstellt einen Puffer für und gibt eine Kopie der Daten zurück, die mit dem Byte- oder UTF-8-Stringelement an der aktuellen Position verknüpft sind. Der Arbeitsspeicher für den Puffer wird mit Malloc() abgerufen und sollte vom Aufrufer mit free() freigegeben werden, wenn er nicht mehr benötigt wird.
Details | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||||||
Rückgabewerte |
|
DupString
WEAVE_ERROR DupString( char *& buf )
Ordnet einen Puffer zu und gibt ihn zurück, der den als Null beendeten Wert des aktuellen Bytes oder UTF8-Strings enthält.
Diese Methode erstellt einen Puffer für und gibt eine mit Null beendete Kopie der Daten zurück, die mit dem Byte- oder UTF-8-Stringelement an der aktuellen Position verknüpft sind. Der Arbeitsspeicher für den Puffer wird mit Malloc() abgerufen und sollte vom Aufrufer mit free() freigegeben werden, wenn er nicht mehr benötigt wird.
Details | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||||||
Rückgabewerte |
|
EnterContainer
WEAVE_ERROR EnterContainer( TLVType & outerContainerType )
Bereitet ein TLVReader-Objekt zum Lesen der Mitglieder des TLV-Containerelements vor.
Die EnterContainer()-Methode bereitet das aktuelle TLVReader-Objekt vor, um mit dem Lesen der Mitgliederelemente eines TLV-Containers (einer Struktur, eines Arrays oder eines Pfads) zu beginnen. Für jeden Aufruf von EnterContainer()-Anwendungen muss ein entsprechender Aufruf an ExitContainer() erfolgen.
Wenn EnterContainer() aufgerufen wird, muss das TLVReader-Objekt auf dem zu lesenden Containerelement positioniert sein. Die Methode verwendet als Argument einen Verweis auf einen TLVType -Wert, mit dem der Kontext des Lesers gespeichert wird, während er den Container liest.
Wenn die Methode EnterContainer() zurückgegeben wird, wird der Leser direkt vor dem ersten Mitglied des Containers positioniert. Durch wiederholtes Aufrufen von Next() wird der Leser durch die Mitglieder der Sammlung geleitet, bis das Ende erreicht ist. Zu diesem Zeitpunkt gibt der Leser WEAVE_END_OF_TLV zurück.
Sobald die Anwendung das Lesen eines Containers abgeschlossen hat, kann sie durch Aufrufen der Methode ExitContainer() nach dem Container weitere Elemente lesen.
Details | |||||
---|---|---|---|---|---|
Parameter |
|
||||
Rückgabewerte |
|
ExitContainer
WEAVE_ERROR ExitContainer( TLVType outerContainerType )
Vollzieht das Lesen eines TLV-Containers und bereitet ein TLVReader-Objekt vor, um Elemente nach dem Container zu lesen.
Die Methode ExitContainer() stellt den Status eines TLVReader-Objekts nach einem Aufruf von EnterContainer() wieder her. Für jeden Aufruf von EnterContainer()-Anwendungen muss ein entsprechender Aufruf an ExitContainer() erfolgen und der von der Methode EnterContainer() zurückgegebene Kontextwert übergeben werden.
Wenn ExitContainer() zurückgibt, wird der Leser direkt vor dem ersten Element nach dem Container positioniert. Ab diesem Punkt kann eine Anwendung die Methode Next() verwenden, um durch alle verbleibenden Elemente zu blättern.
Nach dem Aufruf von EnterContainer() können Anwendungen ExitContainer() auf einem Reader jederzeit aufrufen, unabhängig davon, ob alle Elemente im zugrunde liegenden Container gelesen wurden.
Details | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||||||
Rückgabewerte |
|
Get
WEAVE_ERROR Get( bool & v )
Ruft den Wert des aktuellen Elements als booleschen Typ ab.
Details | |||||
---|---|---|---|---|---|
Parameter |
|
||||
Rückgabewerte |
|
Get
WEAVE_ERROR Get( int8_t & v )
Ruft den Wert des aktuellen Elements als vorzeichenbehaftete 8-Bit-Ganzzahl ab.
Wenn der codierte Ganzzahlwert größer als der Ausgabedatentyp ist, wird der resultierende Wert abgeschnitten.
Details | |||||
---|---|---|---|---|---|
Parameter |
|
||||
Rückgabewerte |
|
Get
WEAVE_ERROR Get( int16_t & v )
Ruft den Wert des aktuellen Elements als vorzeichenbehaftete 16-Bit-Ganzzahl ab.
Wenn der codierte Ganzzahlwert größer als der Ausgabedatentyp ist, wird der resultierende Wert abgeschnitten.
Details | |||||
---|---|---|---|---|---|
Parameter |
|
||||
Rückgabewerte |
|
Get
WEAVE_ERROR Get( int32_t & v )
Ruft den Wert des aktuellen Elements als vorzeichenbehaftete 32-Bit-Ganzzahl ab.
Wenn der codierte Ganzzahlwert größer als der Ausgabedatentyp ist, wird der resultierende Wert abgeschnitten.
Details | |||||
---|---|---|---|---|---|
Parameter |
|
||||
Rückgabewerte |
|
Get
WEAVE_ERROR Get( int64_t & v )
Ruft den Wert des aktuellen Elements als vorzeichenbehaftete 64-Bit-Ganzzahl ab.
Wenn der codierte Ganzzahlwert größer als der Ausgabedatentyp ist, wird der resultierende Wert abgeschnitten.
Details | |||||
---|---|---|---|---|---|
Parameter |
|
||||
Rückgabewerte |
|
Get
WEAVE_ERROR Get( uint8_t & v )
Ruft den Wert des aktuellen Elements als vorzeichenlose 8-Bit-Ganzzahl ab.
Wenn der codierte Ganzzahlwert größer als der Ausgabedatentyp ist, wird der resultierende Wert abgeschnitten. Ist der codierte Ganzzahlwert negativ, wird der Wert in vorzeichenlose Zeichen konvertiert.
Details | |||||
---|---|---|---|---|---|
Parameter |
|
||||
Rückgabewerte |
|
Get
WEAVE_ERROR Get( uint16_t & v )
Ruft den Wert des aktuellen Elements als 16-Bit-Ganzzahl ohne Vorzeichen ab.
Wenn der codierte Ganzzahlwert größer als der Ausgabedatentyp ist, wird der resultierende Wert abgeschnitten. Ist der codierte Ganzzahlwert negativ, wird der Wert in vorzeichenlose Zeichen konvertiert.
Details | |||||
---|---|---|---|---|---|
Parameter |
|
||||
Rückgabewerte |
|
Get
WEAVE_ERROR Get( uint32_t & v )
Ruft den Wert des aktuellen Elements als vorzeichenlose 32-Bit-Ganzzahl ab.
Wenn der codierte Ganzzahlwert größer als der Ausgabedatentyp ist, wird der resultierende Wert abgeschnitten. Ist der codierte Ganzzahlwert negativ, wird der Wert in vorzeichenlose Zeichen konvertiert.
Details | |||||
---|---|---|---|---|---|
Parameter |
|
||||
Rückgabewerte |
|
Get
WEAVE_ERROR Get( uint64_t & v )
Ruft den Wert des aktuellen Elements als vorzeichenlose 64-Bit-Ganzzahl ab.
Wenn der codierte Ganzzahlwert negativ ist, wird der Wert in vorzeichenlos konvertiert.
Details | |||||
---|---|---|---|---|---|
Parameter |
|
||||
Rückgabewerte |
|
Get
WEAVE_ERROR Get( float & v )
Get
WEAVE_ERROR Get( double & v )
Ruft den Wert des aktuellen Elements als Gleitkommazahl mit doppelter Genauigkeit ab.
Details | |||||
---|---|---|---|---|---|
Parameter |
|
||||
Rückgabewerte |
|
GetBufHandle
uintptr_t GetBufHandle( void ) const
GetBytes
WEAVE_ERROR GetBytes( uint8_t *buf, uint32_t bufSize )
Ruft den Wert des aktuellen Byte- oder UTF8-Stringelements ab.
Rufen Sie die Methode GetLength() auf, bevor Sie GetBytes() aufrufen, um die erforderliche Größe des Eingabepuffers zu ermitteln.
Details | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||||
Rückgabewerte |
|
GetContainerType
TLVType GetContainerType( void ) const
Gibt den Typ des Containers zurück, in dem der TLVReader gerade liest.
Die GetContainerType()-Methode gibt den Typ des TLV-Containers zurück, in dem TLVReader liest. Wenn TLVReader auf der äußersten Ebene einer TLV-Codierung positioniert ist (d.h. vor, auf oder nach dem äußersten TLV-Element), gibt die Methode „kTLVType_Not Specific“ zurück.
Details | |
---|---|
Rückgabe |
Der TLVType des aktuellen Containers oder kTLVType_NotSpecific, wenn sich TLVReader nicht in einem Container befindet.
|
GetControlByte
uint16_t GetControlByte( void ) const
Gibt das Steuerbyte zurück, das dem aktuellen TLV-Element zugeordnet ist.
Im Idealfall braucht niemand das Kontrollbyte zu kennen und nur die interne Implementierung von TLV sollte Zugriff darauf haben. Trotzdem ist der Zugriff auf das Kontrollbyte für Debugging-Zwecke durch die TLVDebugUtilities hilfreich, die versuchen, das Tag-Steuerbyte zu decodieren, wenn der TLV-Zwischenspeicherinhalt ausgegeben wird.
Details | |
---|---|
Rückgabe |
Eine vorzeichenlose Ganzzahl, die das Kontrollbyte enthält, das dem aktuellen TLV-Element zugeordnet ist. kTLVControlByte_Notspezifiziert wird zurückgegeben, wenn sich das Lesegerät nicht auf einem Element befindet.
|
GetDataPtr
WEAVE_ERROR GetDataPtr( const uint8_t *& data )
Ruft einen Verweis auf das erste codierte Byte eines TLV-Bytes oder UTF8-Stringelements ab.
Diese Methode gibt einen direkten Verweis auf den codierten Stringwert innerhalb des zugrunde liegenden Eingabepuffers zurück. Damit die Methode erfolgreich ist, muss der gesamte Stringwert in einem einzelnen Puffer vorhanden sein. Andernfalls gibt die Methode WEAVE_ERROR_TLV_UNDERRUN zurück. Dies macht die Methode von begrenzter Verwendung, wenn Daten aus mehreren nicht zusammenhängenden Puffern gelesen werden.
Details | |||||||||
---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||
Rückgabewerte |
|
GetLength
uint32_t GetLength( void ) const
Gibt die Länge der Daten zurück, die mit dem aktuellen TLV-Element verknüpft sind.
Die Datenlänge gilt nur für Elemente des Typs „UTF8-String“ oder „Byte-String“. Bei UTF8-Strings wird als Wert die Anzahl der Byte im String zurückgegeben, nicht die Anzahl der Zeichen.
Details | |
---|---|
Rückgabe |
Die Länge (in Byte) der Daten, die mit dem aktuellen TLV-Element verknüpft sind, oder 0, wenn das aktuelle Element kein UTF8-String oder -Bytestring ist oder wenn der Leser nicht auf einem Element positioniert ist.
|
GetLengthRead
uint32_t GetLengthRead( void ) const
Gibt die Gesamtzahl der gelesenen Byte zurück, seit der Lesegerät initialisiert wurde.
Details | |
---|---|
Rückgabe |
Gesamtzahl der gelesenen Byte seit der Initialisierung des Readers.
|
GetReadPoint
const uint8_t * GetReadPoint( void ) const
Ruft den Punkt im zugrunde liegenden Eingabepuffer ab, der der aktuellen Position des Lesers entspricht.
Details | |
---|---|
Rückgabe |
Ein Zeiger auf den zugrunde liegenden Eingabepuffer, der der aktuellen Position des Lesers entspricht.
|
GetRemainingLength
uint32_t GetRemainingLength( void ) const
Gibt die Gesamtzahl der Byte zurück, die gelesen werden können, bis die maximale Leselänge erreicht ist.
Details | |
---|---|
Rückgabe |
Gesamtzahl der Byte, die gelesen werden können, bis die maximale Leselänge erreicht ist.
|
GetString
WEAVE_ERROR GetString( char *buf, uint32_t bufSize )
Ruft den Wert des aktuellen Byte- oder UTF8-Stringelements als String mit Null-Beendigung ab.
Um die erforderliche Größe des Eingabepuffers zu ermitteln, rufen Sie die Methode GetLength() auf, bevor Sie GetBytes() aufrufen. Der Eingabepuffer sollte mindestens ein Byte größer als die Stringlänge sein, damit das Nullzeichen aufgenommen werden kann.
Details | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||||
Rückgabewerte |
|
GetTag
uint64_t GetTag( void ) const
Gibt das Tag zurück, das mit dem aktuellen TLV-Element verknüpft ist.
Der von GetTag() zurückgegebene Wert kann mit den Tag-Dienstprogrammfunktionen (IsProfileTag(), IsContextTag(), ProfileIdFromTag() usw.) verwendet werden, um den Tag-Typ zu bestimmen und verschiedene Tag-Feldwerte zu extrahieren.
Details | |
---|---|
Rückgabe |
Eine vorzeichenlose Ganzzahl mit Informationen zu dem Tag, das dem aktuellen TLV-Element zugeordnet ist.
|
GetType
TLVType GetType( void ) const
Init
void Init( const TLVReader & aReader )
Init
void Init( const uint8_t *data, uint32_t dataLen )
Init
void Init( PacketBuffer *buf, uint32_t maxLen )
Initialisiert ein TLVReader-Objekt, um aus einem einzelnen PacketBuffer zu lesen.
Das Parsing beginnt an der Startposition des Puffers (buf->DataStart()) und wird bis zum Ende der Daten im Zwischenspeicher (wie durch buf->Datalen() angegeben) fortgesetzt oder bis zum Ende der Daten im Zwischenspeicher, oder maxLen Byte geparst wurden.
Details | |||||
---|---|---|---|---|---|
Parameter |
|
Init
void Init( PacketBuffer *buf, uint32_t maxLen, bool allowDiscontiguousBuffers )
Initialisiert ein TLVReader-Objekt, um aus einem oder mehreren PacketBuffers zu lesen.
Das Parsing beginnt an der Anfangsposition des Puffers (buf->DataStart()). Wenn "allowDiscontiguousBuffers" auf "true" gesetzt ist, durchläuft der Leser die Kette von Puffern, die mit ihren Next()-Zeigern verknüpft sind. Das Parsen wird fortgesetzt, bis alle Daten in der Pufferkette verarbeitet wurden (wie durch buf->Datalen() angegeben) oder maxLen Byte geparst wurden.
Details | |||||||
---|---|---|---|---|---|---|---|
Parameter |
|
Weiter
WEAVE_ERROR Next( void )
Verschiebt das TLVReader-Objekt zum nächsten TLV-Element, das gelesen werden soll.
Die Next()-Methode positioniert das Reader-Objekt auf dem nächsten Element in einer TLV-Codierung, die sich im selben Begrenzungskontext befindet. Wenn sich der Reader auf der äußersten Ebene einer TLV-Codierung befindet, wird durch das Aufrufen von Next() der Leser zum nächsten, obersten Element weitergeleitet. Wenn sich der Reader innerhalb eines TLV-Containerelements (einer Struktur, eines Arrays oder eines Pfads) befindet, wird er durch Aufrufen von Next() zum nächsten Mitgliedselement des Containers weitergeleitet.
Da Next() die Lesebewegung auf den aktuellen Begrenzungskontext einschränkt, wird beim Aufrufen von Next(), wenn sich der Leser auf einem Containerelement befindet, über den Container bewegt. Dabei werden seine Mitgliederelemente (und die Mitglieder aller verschachtelten Container) übersprungen, bis das erste Element nach dem Container erreicht ist.
Wenn in einem bestimmten Begrenzungskontext keine weiteren Elemente vorhanden sind, gibt die Next()-Methode einen WEAVE_END_OF_TLV-Fehler zurück und die Position des Lesers bleibt unverändert.
Details | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Rückgabewerte |
|
Weiter
WEAVE_ERROR Next( TLVType expectedType, uint64_t expectedTag )
Wechselt das TLVReader-Objekt zum nächsten TLV-Element, das gelesen werden soll, und bestätigt den Typ und das Tag des neuen Elements.
Die Methode Next(TLVTypeexpectedType, uint64_texpectedTag) ist eine praktische Methode, die dasselbe Verhalten wie Next() aufweist, aber auch überprüft, ob der Typ und das Tag des neuen TLV-Elements mit den bereitgestellten Argumenten übereinstimmen.
Details | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||||||||||
Rückgabewerte |
|
OpenContainer
WEAVE_ERROR OpenContainer( TLVReader & containerReader )
Initialisiert ein neues TLVReader-Objekt zum Lesen der Mitglieder eines TLV-Containerelements.
Die OpenContainer()-Methode initialisiert ein neues TLVReader-Objekt zum Lesen der Mitgliedselemente eines TLV-Containers (eine Struktur, ein Array oder einen Pfad). Wenn OpenContainer() aufgerufen wird, muss das aktuelle TLVReader-Objekt auf dem zu lesenden Containerelement positioniert sein. Die Methode verwendet als einziges Argument einen Verweis auf einen neuen Reader, der zum Lesen des Containers initialisiert wird. Dieser Reader wird als Container-Leser bezeichnet, während der Leser, auf dem OpenContainer() aufgerufen wird, als übergeordneter Leser bezeichnet wird.
Wenn die Methode OpenContainer() zurückgegeben wird, wird der Containerleser unmittelbar vor dem ersten Mitglied des Containers positioniert. Wenn Sie Next() auf dem Container-Reader aufrufen, wird er durch die Mitglieder der Sammlung blättern, bis das Ende erreicht ist. Zu diesem Zeitpunkt gibt der Reader WEAVE_END_OF_TLV zurück.
Solange der Container-Reader geöffnet ist, dürfen Anwendungen weder Aufrufe an das übergeordnete Lesegerät senden noch seinen Status anderweitig ändern. Sobald eine Anwendung den Container-Reader nicht mehr verwendet hat, muss sie durch Aufrufen von CloseContainer() auf dem übergeordneten Reader und Übergeben des Container-Readers als Argument geschlossen werden. Anwendungen können den Container-Reader jederzeit schließen, mit oder ohne alle im zugrunde liegenden Container enthaltenen Elemente zu lesen. Nachdem der Container-Leser geschlossen wurde, können Anwendungen den übergeordneten Leser weiterhin verwenden.
Der Container-Leser übernimmt verschiedene Konfigurationseigenschaften vom übergeordneten Leser. Diese sind:
- Die implizite Profil-ID (ImplicitProfileId)
- Anwendungsdatenzeiger (AppData)
- Funktionszeiger GetNextBuffer
Details | |||||
---|---|---|---|---|---|
Parameter |
|
||||
Rückgabewerte |
|
Überspringen
WEAVE_ERROR Skip( void )
Verschiebt das TLVReader-Objekt unmittelbar nach dem aktuellen TLV-Element.
Die Methode Skip() positioniert das Leseobjekt unmittelbar nach dem aktuellen TLV-Element, sodass der Leser durch einen nachfolgenden Aufruf von Next() zum folgenden Element weiter gelangt. Wie bei Next() werden die Mitglieder des Containers übersprungen, wenn sich der Leser zum Zeitpunkt des Aufrufs auf einem Containerelement befindet. Wenn sich der Leser nicht auf einem Element befindet, bleibt seine Position unverändert.
Details | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Rückgabewerte |
|
VerifyEndOfContainer
WEAVE_ERROR VerifyEndOfContainer( void )
Überprüft, ob sich das TVLReader-Objekt am Ende eines TLV-Containers befindet.
Die Methode VerifyEndOfContainer() verifiziert, dass es im aktuellen TLV-Container keine weiteren TLV-Elemente gibt, die gelesen werden können. Dies ist eine praktische Methode, die dem Aufrufen von Next() und der Suche nach einem Rückgabewert von WEAVE_END_OF_TLV entspricht.
Details | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Rückgabewerte |
|
Geschützte Funktionen
ClearElementState
void ClearElementState( void )
ElementType
TLVElementType ElementType( void ) const
Dies ist eine private Methode, die den TLVElementType von mControlByte zurückgibt.
EnsureData
WEAVE_ERROR EnsureData( WEAVE_ERROR noDataErr )
GetElementHeadLength
WEAVE_ERROR GetElementHeadLength( uint8_t & elemHeadBytes ) const
Dies ist eine private Methode, mit der die Länge eines TLV-Elementkopfes berechnet wird.
IsContainerOpen
bool IsContainerOpen( void ) const
ReadData
WEAVE_ERROR ReadData( uint8_t *buf, uint32_t len )
ReadElement
WEAVE_ERROR ReadElement( void )
ReadTag
uint64_t ReadTag( TLVTagControl tagControl, const uint8_t *& p )
SetContainerOpen
void SetContainerOpen( bool aContainerOpen )
SkipData
WEAVE_ERROR SkipData( void )
Überspringen Sie alle Daten, die im aktuellen TLV enthalten sind, indem Sie sie ohne Zielzwischenspeicher lesen.
Details | |||||
---|---|---|---|---|---|
Rückgabewerte |
|
SkipToEndOfContainer
WEAVE_ERROR SkipToEndOfContainer( void )
VerifyElement
WEAVE_ERROR VerifyElement( void )
Geschützte statische Funktionen
FailGetNextBuffer
WEAVE_ERROR FailGetNextBuffer( TLVReader & reader, uintptr_t & bufHandle, const uint8_t *& bufStart, uint32_t & bufLen )
GetNextPacketBuffer
WEAVE_ERROR GetNextPacketBuffer( TLVReader & reader, uintptr_t & bufHandle, const uint8_t *& bufStart, uint32_t & bufLen )