nl:: Weave:: TLV:: TLVReader
#include <src/lib/core/WeaveTLV.h>
Bietet einen speichereffizienten Parser für Daten, die im Weave-TLV-Format codiert sind.
Zusammenfassung
TLVReader implementiert einen Forward-Parser für Weave-TLV-Daten im Pull-Stil. Das TLVReader-Objekt fungiert als Cursor, mit dem eine Folge von TLV-Elementen iteriert und deren Inhalt interpretiert werden kann. Wenn Anwendungen in einem Element positioniert sind, können sie die Get()-Methoden des Lesers aufrufen, um den Typ und das Tag des aktuellen Elements abzufragen und den zugehörigen Wert zu extrahieren. Die Methode Next() des Lesers wird verwendet, um von Element zu Element zu gelangen.
Ein TLVReader-Objekt wird immer entweder vor, auf oder nach einem TLV-Element positioniert. Bei der ersten Initialisierung wird ein TLVReader direkt vor dem ersten Element der Codierung positioniert. Um mit dem Lesen zu beginnen, muss eine Anwendung einen ersten Aufruf an die Methode Next() senden, um den Reader auf dem ersten Element zu positionieren. Wenn in einem Containerelement entweder eine Struktur, ein Array oder ein Pfad erkannt wird, können die Methoden OpenContainer() oder EnterContainer() verwendet werden, um den Inhalt des Containers zu durchlaufen.
Wenn das Lesegerät das Ende einer TLV-Codierung oder das letzte Element in einem Container erreicht, signalisiert es der Anwendung, indem es den Fehler WEAVE_END_OF_TLV von der Methode Next() zurückgibt. Das Reader gibt weiterhin WEAVE_END_OF_TLV zurück, bis es neu initialisiert oder der aktuelle Container beendet wird (über CloseContainer() / ExitContainer()).
Ein TLVReader-Objekt kann Daten direkt aus einem festen Eingabepuffer oder aus einer Kette von einem oder mehreren PacketBuffers parsen. Außerdem können Anwendungen eine GetNextBuffer
-Funktion bereitstellen, um Daten aus einer beliebigen Quelle an das Lesegerät zu übergeben, z.B. ein Socket oder einen seriellen Port.
Übernahme
Direkte bekannte abgeleitete Klassen: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 in impliziter Form 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)
|
Schließt das Lesen eines TLV-Containers nach einem Aufruf von OpenContainer() ab.
|
DupBytes(uint8_t *& buf, uint32_t & dataLen)
|
Ordnet einen Zwischenspeicher zu und gibt diesen zurück, der den Wert des aktuellen Byte- oder UTF8-Strings enthält.
|
DupString(char *& buf)
|
Ordnet einen Zwischenspeicher zu und gibt diesen zurück, der den mit Null endenden Wert des aktuellen Byte- oder UTF8-Strings enthält.
|
EnterContainer(TLVType & outerContainerType)
|
|
ExitContainer(TLVType outerContainerType)
|
|
Get(bool & v)
|
Ruft den Wert des aktuellen Elements als boolescher Typ ab.
|
Get(int8_t & v)
|
Ruft den Wert des aktuellen Elements als 8-Bit-Ganzzahl mit Vorzeichen 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 vorzeichenlose 16-Bit-Ganzzahl 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)
|
Rufen Sie einen Zeiger auf das erste codierte Byte eines TLV-Byte- 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 Reader 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, um aus einem einzelnen Eingabepuffer zu lesen.
|
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 des TLVReader.
|
ElementType(void) const
|
TLVElementType
Dies ist eine private Methode, die den TLVElementType aus mControlByte zurückgibt.
|
EnsureData(WEAVE_ERROR noDataErr)
|
|
GetElementHeadLength(uint8_t & elemHeadBytes) const
|
Dies ist eine private Methode zur Berechnung der Länge eines TLV-Elementkopfs.
|
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 in der aktuellen TLV enthalten sind, indem Sie sie ohne Zielzwischenspeicher überschreiben.
|
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 an einen TLVReader zu übergeben. Beim Aufruf wird erwartet, dass die Funktion zusätzliche Daten für den Leser erzeugt, damit er parsen kann, oder dem Leser signalisiert, dass keine Daten mehr 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.
Wird der Wert auf NULL (Standardwert) gesetzt, geht der Leser davon aus, dass keine weiteren Eingabedaten verfügbar sind.
GetNextBuffer kann jederzeit von einer Anwendung festgelegt werden, wird aber normalerweise bei der Initialisierung des Readers festgelegt.
Weitere Informationen zur Implementierung einer GetNextBuffer-Funktion finden Sie in der Typdefinition GetNextBufferFunct.
ImplicitProfileId
uint32_t ImplicitProfileId
Die Profil-ID, die für Profil-Tags verwendet werden soll, die in impliziter Form codiert sind.
Wenn der Leser auf ein profilspezifisches Tag stößt, das implizit codiert wurde, verwendet er den Wert der ImplicitProfileId
-Eigenschaft als angenommene Profil-ID für das Tag.
Standardmäßig ist das Attribut ImplicitProfileId
auf „kProfileIdNotRequested“ festgelegt. Beim Decodieren von TLV mit implizit codierten Tags muss in Anwendungen ImplicitProfileId
festgelegt werden, bevor TLV-Elemente mit solchen Tags gelesen werden. Die entsprechende Profil-ID hängt normalerweise vom Kontext der Anwendung oder des gesprochenen Protokolls ab.
Wenn ein implizit codiertes Tag auftritt, während ImplicitProfileId
auf kProfileIdNotRequested gesetzt ist, gibt der Reader einen WEAVE_ERROR_UNKNOWN_IMPLICIT_TLV_TAG-Fehler 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 )
Schließt das Lesen eines TLV-Containers nach einem Aufruf von OpenContainer() ab.
Die Methode CloseContainer() stellt den Status eines übergeordneten TLVReader-Objekts nach einem Aufruf von OpenContainer() wieder her. Für jeden Aufruf von OpenContainer() müssen Anwendungen einen entsprechenden Aufruf an CloseContainer() senden, wobei an beide Methoden ein Verweis an denselben Container-Reader übergeben wird.
Wenn CloseContainer() zurückgibt, wird der übergeordnete Reader direkt vor dem ersten Element platziert, das auf den Container folgt. Ab diesem Zeitpunkt kann eine Anwendung die Methode Next() verwenden, um alle verbleibenden Elemente zu durchlaufen.
Anwendungen können jederzeit schließen 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 "de-initialisiert" betrachten und darf nicht weiter verwendet werden, ohne es neu zu initialisieren.
Details | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||||||
Rückgabewerte |
|
DupBytes
WEAVE_ERROR DupBytes( uint8_t *& buf, uint32_t & dataLen )
Ordnet einen Zwischenspeicher zu und gibt diesen zurück, der den Wert des aktuellen Byte- oder UTF8-Strings enthält.
Diese Methode erstellt einen Puffer für und gibt eine Kopie der Daten zurück, die dem Byte- oder UTF-8-Stringelement an der aktuellen Position zugeordnet sind. Speicher für den Zwischenspeicher wird mit "maloc()" 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 Zwischenspeicher zu und gibt diesen zurück, der den mit Null endenden Wert des aktuellen Byte- oder UTF8-Strings enthält.
Diese Methode erstellt einen Puffer für und gibt eine mit Nullen beendete Kopie der Daten zurück, die dem Byte- oder UTF-8-Stringelement an der aktuellen Position zugeordnet sind. Speicher für den Zwischenspeicher wird mit "maloc()" 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 für das 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. Bei jedem Aufruf von EnterContainer() müssen Anwendungen einen entsprechenden Aufruf an ExitContainer() senden.
Wenn EnterContainer() aufgerufen wird, muss das TLVReader-Objekt auf dem zu lesenden Containerelement positioniert werden. Die Methode verwendet als Argument einen Verweis auf einen TLVType-Wert, mit dem der Kontext des Readers gespeichert wird, während er den Container liest.
Wenn die Methode EnterContainer() zurückgegeben wird, wird der Reader 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. An diesem Punkt gibt das Lesegerät WEAVE_END_OF_TLV zurück.
Sobald die Anwendung das Lesen eines Containers beendet hat, kann sie die Elemente nach dem Container durch Aufrufen der Methode ExitContainer() weiterlesen.
Details | |||||
---|---|---|---|---|---|
Parameter |
|
||||
Rückgabewerte |
|
ExitContainer
WEAVE_ERROR ExitContainer( TLVType outerContainerType )
Schließt das Lesen eines TLV-Containers ab 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() müssen Anwendungen einen entsprechenden Aufruf an ExitContainer() senden und den von der Methode EnterContainer() zurückgegebenen Kontextwert übergeben.
Wenn ExitContainer() zurückgegeben wird, wird der Reader direkt vor dem ersten Element platziert, das auf den Container folgt. Ab diesem Zeitpunkt kann eine Anwendung die Methode Next() verwenden, um alle verbleibenden Elemente zu durchlaufen.
Sobald EnterContainer() aufgerufen wurde, können Anwendungen ExitContainer() jederzeit auf einem Reader 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 boolescher Typ ab.
Details | |||||
---|---|---|---|---|---|
Parameter |
|
||||
Rückgabewerte |
|
Get
WEAVE_ERROR Get( int8_t & v )
Ruft den Wert des aktuellen Elements als 8-Bit-Ganzzahl mit Vorzeichen 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. Wenn der codierte Ganzzahlwert negativ ist, wird der Wert entsprechend in vorzeichenlos konvertiert.
Details | |||||
---|---|---|---|---|---|
Parameter |
|
||||
Rückgabewerte |
|
Get
WEAVE_ERROR Get( uint16_t & v )
Ruft den Wert des aktuellen Elements als vorzeichenlose 16-Bit-Ganzzahl ab.
Wenn der codierte Ganzzahlwert größer als der Ausgabedatentyp ist, wird der resultierende Wert abgeschnitten. Wenn der codierte Ganzzahlwert negativ ist, wird der Wert entsprechend in vorzeichenlos 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. Wenn der codierte Ganzzahlwert negativ ist, wird der Wert entsprechend in vorzeichenlos 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 vorzeichenlose Werte umgewandelt.
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() vor GetBytes() auf, um die erforderliche Größe des Eingabepuffers zu bestimmen.
Details | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||||
Rückgabewerte |
|
GetContainerType
TLVType GetContainerType( void ) const
Gibt den Typ des Containers zurück, in dem der TLVReader gerade liest.
Die Methode GetContainerType() gibt den Typ des TLV-Containers zurück, in dem TLVReader liest. Wenn sich der TLVReader auf der äußersten Ebene einer TLV-Codierung befindet, also vor, auf oder nach dem äußersten TLV-Element, gibt die Methode kTLVType_NotRequested zurück.
Details | |
---|---|
Rückgabe |
Der TLVType des aktuellen Containers oder kTLVType_NotRequested, wenn sich der 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 muss niemand etwas über das Kontrollbyte wissen und nur die interne Implementierung von TLV sollte Zugriff darauf haben. Trotzdem ist der Zugriff auf das Kontrollbyte für Debugging-Zwecke durch TLVDebugUtilities hilfreich, die versuchen, das Tag-Steuerbyte zu decodieren, wenn der TLV-Zwischenspeicherinhalt ausgegeben wird.
Details | |
---|---|
Rückgabe |
Eine vorzeichenlose Ganzzahl, die das Steuerbyte enthält, das dem aktuellen TLV-Element zugeordnet ist. kTLVControlByte_NotRequested wird zurückgegeben, wenn der Leser nicht auf einem Element positioniert ist.
|
GetDataPtr
WEAVE_ERROR GetDataPtr( const uint8_t *& data )
Rufen Sie einen Zeiger auf das erste codierte Byte eines TLV-Byte- oder UTF8-Stringelements ab.
Diese Methode gibt einen direkten Zeiger auf den codierten Stringwert innerhalb des zugrunde liegenden Eingabepuffers zurück. Für eine erfolgreiche Methode muss der gesamte Stringwert in einem einzigen Zwischenspeicher vorhanden sein. Andernfalls gibt die Methode WEAVE_ERROR_TLV_UNDERRUN zurück. Dadurch ist diese Methode beim Lesen von Daten aus mehreren nicht zusammenhängenden Zwischenspeichern nur begrenzt geeignet.
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 vom Typ UTF8-String oder -Bytestring. Bei UTF8-Strings ist der zurückgegebene Wert die Anzahl der Byte im String, 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 Reader nicht bei einem Element positioniert ist.
|
GetLengthRead
uint32_t GetLengthRead( void ) const
Gibt die Gesamtzahl der gelesenen Byte zurück, seit der Reader 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 in 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.
Rufen Sie die Methode GetLength() vor GetBytes() auf, um die erforderliche Größe des Eingabepuffers zu bestimmen. Der Eingabepuffer sollte mindestens ein Byte größer als die Stringlänge sein, um das Nullzeichen aufzunehmen.
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 Zwischenspeichers (buf->DataStart()) und wird bis zum Ende der Daten im Zwischenspeicher fortgesetzt (wie durch buf->Datalen() angegeben), oder wenn maxLen-Bytes 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 Startposition des anfänglichen Zwischenspeichers (buf->DataStart()). Wenn „allowDiscontiguousBuffers“ auf „true“ gesetzt ist, springt der Leser durch die Zwischenspeicherkette, die mit seinen Next()-Zeigern verknüpft ist. Das Parsing wird fortgesetzt, bis alle Daten in der Pufferkette aufgebraucht sind (wie durch buf -> Datalen() angegeben) oder maxLen-Bytes geparst wurden.
Details | |||||||
---|---|---|---|---|---|---|---|
Parameter |
|
Weiter
WEAVE_ERROR Next( void )
Überträgt das TLVReader-Objekt mit dem nächsten zu lesenden TLV-Element.
Die Methode Next() positioniert das Leseobjekt auf dem nächsten Element in einer TLV-Codierung, die sich im selben Begrenzungskontext befindet. Wenn sich der Leser auf der äußersten Ebene einer TLV-Codierung befindet, gelangt er durch das Aufrufen von Next() zum nächsten, obersten Element. Wenn sich das Lesegerät in einem TLV-Containerelement (einer Struktur, einem Array oder einem Pfad) befindet, wird der Leser durch Aufrufen von Next() zum nächsten Mitgliedselement des Containers weitergeleitet.
Da Next() die Leserbewegung auf den aktuellen Begrenzungskontext beschränkt, wird Next() aufgerufen, wenn sich der Leser auf einem Containerelement befindet, über den Container. Dabei werden seine Mitgliedselemente (und die Mitglieder aller verschachtelten Container) übersprungen, bis das erste Element nach dem Container erreicht wird.
Wenn in einem bestimmten Begrenzungskontext keine weiteren Elemente vorhanden sind, gibt die Methode Next() den Fehler WEAVE_END_OF_TLV zurück und die Position des Lesegeräts bleibt unverändert.
Details | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Rückgabewerte |
|
Weiter
WEAVE_ERROR Next( TLVType expectedType, uint64_t expectedTag )
Überträgt das TLVReader-Objekt zum nächsten zu lesenden TLV-Element, wobei Typ und Tag des neuen Elements bestätigt werden.
Die Methode Next(TLVType expectedType, uint64_texpectedTag) ist eine praktische Methode mit demselben Verhalten wie Next(). Sie prüft aber auch, 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 Methode OpenContainer() initialisiert ein neues TLVReader-Objekt zum Lesen der Mitgliederelemente eines TLV-Containers (einer Struktur, eines Arrays oder eines Pfads). Wenn OpenContainer() aufgerufen wird, muss das aktuelle TLVReader-Objekt auf dem zu lesenden Containerelement positioniert werden. Die Methode nimmt als einziges Argument einen Verweis auf einen neuen Reader an, der initialisiert wird, um den Container zu lesen. Dieser Reader wird als Container-Reader bezeichnet, während der Reader, auf dem OpenContainer() aufgerufen wird, als Parent-Reader bezeichnet wird.
Wenn die Methode OpenContainer() zurückgegeben wird, wird der Container-Reader direkt vor dem ersten Mitglied des Containers positioniert. Durch Aufrufen von Next() auf dem Container-Reader springen Sie durch die Mitglieder der Sammlung, bis das Ende erreicht ist. An diesem Punkt gibt das Lesegerät WEAVE_END_OF_TLV zurück.
Während der Container-Leser geöffnet ist, dürfen Anwendungen keine Aufrufe an den übergeordneten Reader senden oder seinen Status anderweitig ändern. Sobald eine Anwendung die Verwendung des Container-Readers beendet hat, muss sie durch Aufrufen von CloseContainer() im übergeordneten Reader geschlossen und der Container-Reader als Argument übergeben werden. Anwendungen können den Container-Reader jederzeit schließen, mit oder ohne Lesen aller im zugrunde liegenden Container enthaltenen Elemente. Nachdem der Container-Reader geschlossen wurde, können Anwendungen den übergeordneten Reader weiterhin verwenden.
Der Container-Reader übernimmt verschiedene Konfigurationseigenschaften vom übergeordneten Reader. Diese sind:
- Die implizite Profil-ID (ImplicitProfileId)
- Anwendungsdatenzeiger (AppData)
- Der Funktionszeiger GetNextBuffer
Details | |||||
---|---|---|---|---|---|
Parameter |
|
||||
Rückgabewerte |
|
Überspringen
WEAVE_ERROR Skip( void )
Versetzt das TLVReader-Objekt direkt nach dem aktuellen TLV-Element.
Die Methode Skip() positioniert das Leseobjekt direkt nach dem aktuellen TLV-Element, sodass der Leser bei einem nachfolgenden Aufruf von Next() zum folgenden Element weitergeleitet wird. Wie bei Next() werden die Mitglieder des Containers übersprungen, wenn sich der Leser zum Zeitpunkt des Aufrufs in einem Containerelement befindet. Wenn der Leser nicht in einem Element positioniert ist, 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.
Mit der Methode VerifyEndOfContainer() wird überprüft, ob im aktuellen TLV-Container keine weiteren TLV-Elemente vorhanden sind, die gelesen werden sollen. Dies ist eine unkomplizierte Methode, die dem Aufrufen von Next() und der Überprüfung auf den Rückgabewert 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 aus mControlByte zurückgibt.
EnsureData
WEAVE_ERROR EnsureData( WEAVE_ERROR noDataErr )
GetElementHeadLength
WEAVE_ERROR GetElementHeadLength( uint8_t & elemHeadBytes ) const
Dies ist eine private Methode zur Berechnung der Länge eines TLV-Elementkopfs.
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 in der aktuellen TLV enthalten sind, indem Sie sie ohne Zielzwischenspeicher überschreiben.
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 )