nl:: Weave:: TLV:: TLVReader
#include <src/lib/core/WeaveTLV.h>
Stellt einen speichereffizienten Parser für Daten bereit, die im Weave-TLV-Format codiert sind.
Zusammenfassung
TLVReader implementiert einen Weiterleitungs-Parser nur für Pull-Stil-Weave-Daten vom Typ TLV. Das TLVReader-Objekt dient als Cursor, mit dem sich eine Abfolge von TLV-Elementen durchlaufen und sein Inhalt interpretieren lässt. Wenn die Apps auf einem Element positioniert werden, können sie Aufrufe an die Get()-Methoden des Readers senden, um den Typ und das Tag des aktuellen Elements abzufragen und alle zugehörigen Werte 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 platziert. Bei der ersten Initialisierung wird ein TLVReader direkt vor dem ersten Element der Codierung platziert. Damit Sie den Lesevorgang starten können, muss eine Anwendung einen ersten Aufruf der Methode Next() starten, um den Leser auf dem ersten Element zu positionieren. Wenn ein Containerelement gefunden wird, kann entweder eine Struktur, ein Array oder ein Pfad verwendet werden, um mit der Methode OpenContainer() oder EnterContainer() den Inhalt des Containers zu durchlaufen.
Wenn der Leser das Ende einer TLV-Codierung oder das letzte Element in einem Container erreicht, signalisiert er der Anwendung, dass ein WEAVE_END_OF_TLV-Fehler von der Next()-Methode zurückgegeben wird. Der Reader gibt weiterhin WEAVE_END_OF_TLV weiter, bis er neu initialisiert oder der aktuelle Container über CloseContainer() bzw. ExitContainer() beendet wird.
Ein TLVReader-Objekt kann Daten direkt aus einem festen Eingabezwischenspeicher oder aus einer Kette von einem oder mehreren Paketzwischenspeichern parsen. Außerdem können Anwendungen eine GetNextBuffer
-Funktion bereitstellen, um Daten von einer beliebigen Quelle, z.B. einem Socket oder einem seriellen Port, an den Leser zu leiten.
Ü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)
|
Vervollständigt das Lesen eines TLV-Containers nach einem Aufruf von OpenContainer().
|
DupBytes(uint8_t *& buf, uint32_t & dataLen)
|
Weist einen Zwischenspeicher zu und gibt diesen zurück, der den Wert des aktuellen Bytes oder des UTF8-Strings enthält.
|
DupString(char *& buf)
|
Weist einen Zwischenspeicher zu und gibt diesen zurück, der den Nullwert des aktuellen Bytes oder des 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 8-Bit-Ganzzahl mit Vorzeichen ab.
|
Get(int16_t & v)
|
Ruft den Wert des aktuellen Elements als 16-Bit-Ganzzahl mit Vorzeichen ab.
|
Get(int32_t & v)
|
Ruft den Wert des aktuellen Elements als 32-Bit-Ganzzahl mit Vorzeichen ab.
|
Get(int64_t & v)
|
Ruft den Wert des aktuellen Elements als 64-Bit-Ganzzahl mit Vorzeichen ab.
|
Get(uint8_t & v)
|
Ruft den Wert des aktuellen Elements als 8-Bit-Ganzzahl ohne Vorzeichen 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 32-Bit-Ganzzahl ohne Vorzeichen ab.
|
Get(uint64_t & v)
|
Ruft den Wert des aktuellen Elements als 64-Bit-Ganzzahl ohne Vorzeichen 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-String-Elements ab.
|
GetContainerType(void) const
|
Gibt den Typ des Containers zurück, in dem der TLVReader derzeit liest.
|
GetControlByte(void) const
|
uint16_t
Gibt das Kontrollbyte zurück, das dem aktuellen TLV-Element zugeordnet ist.
|
GetDataPtr(const uint8_t *& data)
|
Rufen Sie einen Zeiger auf das anfängliche codierte Byte eines TLV-Byte- oder UTF8-Stringelements ab.
|
GetLength(void) const
|
uint32_t
Gibt die Datenlänge zurück, die dem aktuellen TLV-Element zugeordnet ist.
|
GetLengthRead(void) const
|
uint32_t
Gibt die Gesamtzahl der Byte zurück, die seit der Initialisierung des Lesers gelesen wurden.
|
GetReadPoint(void) const
|
const uint8_t *
Ruft den Punkt im zugrunde liegenden Eingabepuffer ab, der der aktuellen Position des Lesegeräts 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-String-Elements als null beendeten String ab.
|
GetTag(void) const
|
uint64_t
Gibt das Tag zurück, das dem aktuellen TLV-Element zugeordnet 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 liest.
|
Init(PacketBuffer *buf, uint32_t maxLen)
|
void
Initialisiert ein TLVReader-Objekt, das aus einem einzelnen PacketBuffer lesen soll.
|
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öschen Sie den Status des 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
|
Mit dieser privaten Methode wird die Länge eines TLV-Elementkopfs berechnet.
|
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 im aktuellen TLV, 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 importieren. Wenn die Funktion aufgerufen wird, wird erwartet, dass die Funktion zusätzliche Daten erzeugt, damit der Leser sie parsen kann oder dem Nutzer signalisieren kann, dass keine weiteren Daten verfügbar sind.
Details | |||||||||
---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||
Rückgabewerte |
|
Öffentliche Attribute
App-Daten
void * AppData
Ein Zeigerfeld, das für anwendungsspezifische Daten verwendet werden kann.
Nächster Zwischenspeicher
GetNextBufferFunct GetNextBuffer
Ein Zeiger auf eine Funktion, die Eingabedaten für das TLVReader-Objekt erzeugt.
Bei der Einstellung NULL (Standardwert) geht der Leser davon aus, dass keine weiteren Eingabedaten verfügbar sind.
GetNextBuffer kann von einer Anwendung jederzeit festgelegt werden, wird aber normalerweise festgelegt, wenn der Leser initialisiert wird.
Weitere Informationen zum Implementieren einer GetNextBuffer-Funktion finden Sie in der Definition des GetNextBufferFunct-Typs.
Implizites Profil-ID
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 Property ImplicitProfileId
als angenommene Profil-ID für das Tag verwendet.
Standardmäßig ist die Eigenschaft ImplicitProfileId
auf „kProfileIdNotspecified“ gesetzt. Beim Decodieren von TLVs, die implizit codierte Tags enthalten, müssen Anwendungen ImplicitProfileId
festlegen, bevor TLV-Elemente mit solchen Tags gelesen werden. Die entsprechende Profil-ID hängt in der Regel vom Kontext der gesprochenen Anwendung oder dem Protokoll ab.
Wenn ein implizit codiertes Tag gefunden wird, während ImplicitProfileId
auf kProfileIdNotspecified festgelegt ist, gibt der Leser einen WEAVE_ERROR_UNKNOWN_IMPLICIT_TLV_TAG-Fehler zurück.
Geschützte Attribute
MobufEnd
const uint8_t * mBufEnd
mBufHandle (mBufHandle)
uintptr_t mBufHandle
mContainer-Typ
TLVType mContainerType
mControlByte
uint16_t mControlByte
Logo: mElemLenOrVal
uint64_t mElemLenOrVal
mElemTag-Tag
uint64_t mElemTag
mLenRead
uint32_t mLenRead
mMaxLen
uint32_t mMaxLen
mReadPoint
const uint8_t * mReadPoint
Öffentliche Funktionen
Container schließen
WEAVE_ERROR CloseContainer( TLVReader & containerReader )
Vervollständigt das Lesen eines TLV-Containers nach einem Aufruf von OpenContainer().
Mit der Methode CloseContainer() wird der Zustand eines übergeordneten Objekts TLVReader nach einem Aufruf von OpenContainer() wiederhergestellt. Für jeden Aufruf von OpenContainer() muss ein entsprechender Aufruf an CloseContainer() erfolgen und ein Verweis auf denselben Container-Reader an beide Methoden übergeben werden.
Wenn CloseContainer() zurückgegeben wird, wird der übergeordnete Reader direkt vor dem ersten Element platziert, das auf den Container folgt. Von hier an kann eine Anwendung die Methode Next() verwenden, um durch alle verbleibenden Elemente zu gelangen.
Anwendungen können jederzeit CloseContainer() für einen übergeordneten Reader aufrufen, unabhängig davon, ob alle Elemente im zugrunde liegenden Container gelesen wurden. Nachdem CloseContainer() aufgerufen wurde, sollte die Anwendung den Container-Leser 'de-Initialized' verwenden und darf den Container ohne weitere Initialisierung nicht mehr verwenden.
Details | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||||||
Rückgabewerte |
|
DupBytes
WEAVE_ERROR DupBytes( uint8_t *& buf, uint32_t & dataLen )
Weist einen Zwischenspeicher zu und gibt diesen zurück, der den Wert des aktuellen Bytes oder des UTF8-Strings enthält.
Diese Methode erstellt einen Zwischenspeicher für die Daten, die mit dem Byte- oder UTF-8-String-Element an der aktuellen Position verknüpft sind. Der Arbeitsspeicher für den Puffer wird mit Malloc() abgerufen und sollte mit dem Free() vom Anrufer freigegeben werden, wenn er nicht mehr benötigt wird.
Details | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||||||
Rückgabewerte |
|
Dup-String
WEAVE_ERROR DupString( char *& buf )
Weist einen Zwischenspeicher zu und gibt diesen zurück, der den Nullwert des aktuellen Bytes oder des UTF8-Strings enthält.
Bei dieser Methode wird ein Puffer für die mit dem Byte- oder UTF-8-String-Element verknüpften Daten an der aktuellen Position erstellt und eine Null beendet. Der Arbeitsspeicher für den Puffer wird mit Malloc() abgerufen und sollte mit dem Free() vom Anrufer freigegeben werden, wenn er nicht mehr benötigt wird.
Details | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||||||
Rückgabewerte |
|
Eingabetaste
WEAVE_ERROR EnterContainer( TLVType & outerContainerType )
Bereitet ein TLVReader-Objekt zum Lesen der Mitglieder des TLV-Containerelements vor.
Mit der Methode EnterContainer() wird das aktuelle TLVReader-Objekt so vorbereitet, dass es die Mitgliederelemente eines TLV-Containers (Struktur, Array oder Pfad) liest. 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 werden. Die Methode akzeptiert 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 unmittelbar 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. Danach wird der Leser WEAVE_END_OF_TLV zurückgeben.
Sobald die Anwendung einen Container gelesen hat, kann er die Elemente nach dem Container lesen. Dazu ruft er die Methode ExitContainer() auf.
Details | |||||
---|---|---|---|---|---|
Parameter |
|
||||
Rückgabewerte |
|
Exit-Container
WEAVE_ERROR ExitContainer( TLVType outerContainerType )
Vervollständigt 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. Dabei muss der von der Methode EnterContainer() zurückgegebene Kontextwert übergeben werden.
Wenn ExitContainer() zurückgegeben wird, wird der Leser direkt vor dem ersten Element platziert, das auf den Container folgt. Von hier an kann eine Anwendung die Methode Next() verwenden, um durch alle verbleibenden Elemente zu gelangen.
Sobald EnterContainer() aufgerufen wird, können Anwendungen jederzeit ExitContainer() 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 booleschen 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 16-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( int32_t & v )
Ruft den Wert des aktuellen Elements als 32-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( int64_t & v )
Ruft den Wert des aktuellen Elements als 64-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( uint8_t & v )
Ruft den Wert des aktuellen Elements als 8-Bit-Ganzzahl ohne Vorzeichen 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 in das Format „Vorzeichenlos“ 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. Wenn der codierte Ganzzahlwert negativ ist, wird der Wert in das Format „Vorzeichenlos“ konvertiert.
Details | |||||
---|---|---|---|---|---|
Parameter |
|
||||
Rückgabewerte |
|
Get
WEAVE_ERROR Get( uint32_t & v )
Ruft den Wert des aktuellen Elements als 32-Bit-Ganzzahl ohne Vorzeichen 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 in das Format „Vorzeichenlos“ konvertiert.
Details | |||||
---|---|---|---|---|---|
Parameter |
|
||||
Rückgabewerte |
|
Get
WEAVE_ERROR Get( uint64_t & v )
Ruft den Wert des aktuellen Elements als 64-Bit-Ganzzahl ohne Vorzeichen ab.
Wenn der codierte Ganzzahlwert negativ ist, wird der Wert in den vorzeichenlosen Wert 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 |
|
GetBufHandles
uintptr_t GetBufHandle( void ) const
GetByte
WEAVE_ERROR GetBytes( uint8_t *buf, uint32_t bufSize )
Ruft den Wert des aktuellen Byte- oder UTF8-String-Elements ab.
Rufen Sie die Methode GetLength() auf, bevor Sie GetBytes() aufrufen, um die erforderliche Größe des Eingabezwischenspeichers zu ermitteln.
Details | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||||
Rückgabewerte |
|
GetContainerType
TLVType GetContainerType( void ) const
Gibt den Typ des Containers zurück, in dem der TLVReader derzeit liest.
Die Methode GetContainerType() gibt den Typ des TLV-Containers zurück, in dem der TLVReader liest. Wenn sich der TLVReader auf der äußersten Ebene einer TLV-Codierung befindet, also vor, am oder nach dem äußersten TLV-Element, gibt die Methode kTLVType_Notspecified zurück.
Details | |
---|---|
Rückgabe |
Der TLVType des aktuellen Containers oder „kTLVType_Notspecified“, wenn der TLVReader nicht in einem Container positioniert ist.
|
GetControlByte
uint16_t GetControlByte( void ) const
Gibt das Kontrollbyte zurück, das dem aktuellen TLV-Element zugeordnet ist.
Idealerweise benötigt niemand mehr Informationen zum Kontrollbyte. Nur die interne Implementierung von TLV sollte darauf zugreifen können. Trotzdem ist der Zugriff auf das Kontrollbyte für die Fehlerbehebung durch die TLV-Debug-Dienstprogramme hilfreich, die versuchen, das Tag-Kontroll-Byte zu decodieren, wenn der TLV-Zwischenspeicherinhalt korrekt gedruckt wird.
Details | |
---|---|
Rückgabe |
Eine vorzeichenlose Ganzzahl, die das mit dem aktuellen TLV-Element verknüpfte Kontrollbyte enthält. „kTLVControlByte_Notspecified“ wird zurückgegeben, wenn der Leser nicht bei einem Element positioniert ist.
|
GetDataPtr
WEAVE_ERROR GetDataPtr( const uint8_t *& data )
Rufen Sie einen Zeiger auf das anfängliche 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. Um erfolgreich zu sein, muss für die Methode der gesamte Stringwert in einem einzelnen Zwischenspeicher vorhanden sein. Andernfalls wird die Methode WEAVE_ERROR_TLV_UNDERRUN zurückgegeben. Dies ist die eingeschränkte Methode beim Lesen von Daten aus mehreren nicht zusammenhängenden Zwischenspeichern.
Details | |||||||||
---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||
Rückgabewerte |
|
GetLength
uint32_t GetLength( void ) const
Gibt die Datenlänge zurück, die dem aktuellen TLV-Element zugeordnet ist.
Die Datenlänge gilt nur für Elemente vom Typ UTF8- 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 mit dem aktuellen TLV-Element verknüpften Daten oder 0, wenn das aktuelle Element kein UTF8- oder Bytestring ist oder der Leser nicht auf einem Element positioniert ist
|
GetLengthRead
uint32_t GetLengthRead( void ) const
Gibt die Gesamtzahl der Byte zurück, die seit der Initialisierung des Lesers gelesen wurden.
Details | |
---|---|
Rückgabe |
Gesamtzahl der Byte, die seit der Initialisierung des Lesegeräts gelesen wurden.
|
GetReadPoint
const uint8_t * GetReadPoint( void ) const
Ruft den Punkt im zugrunde liegenden Eingabepuffer ab, der der aktuellen Position des Lesegeräts entspricht.
Details | |
---|---|
Rückgabe |
Ein Zeiger in den zugrunde liegenden Eingabepuffer, der der aktuellen Position des Lesers entspricht.
|
Restlänge
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-String-Elements als null beendeten String ab.
Um die erforderliche Größe des Eingabezwischenspeichers zu ermitteln, rufen Sie die Methode GetLength() auf, bevor Sie GetBytes() aufrufen. Der Eingabezwischenspeicher sollte mindestens ein Byte größer als die Stringlänge sein, um das Nullzeichen unterzubringen.
Details | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||||
Rückgabewerte |
|
GetTag
uint64_t GetTag( void ) const
Gibt das Tag zurück, das dem aktuellen TLV-Element zugeordnet ist.
Der von GetTag() zurückgegebene Wert kann mit den Dienstprogrammfunktionen für das Tag (IsProfileTag(), IsContextTag(), ProfileIdFromTag()) verwendet werden, um den Tag-Typ zu bestimmen und verschiedene Werte des Tag-Felds zu extrahieren.
Details | |
---|---|
Rückgabe |
Eine vorzeichenlose Ganzzahl, die Informationen über das Tag enthält, das dem aktuellen TLV-Element zugeordnet ist.
|
GetType (Typ)
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, das aus einem einzelnen PacketBuffer lesen soll.
Das Parsen beginnt an der Startposition des Zwischenspeichers (buf->DataStart()) und wird bis zum Ende der Daten im Zwischenspeicher fortgesetzt (wie durch buf->Datalen() angegeben), oder es werden die maxLen-Byte geparst.
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 Parsen beginnt an der Startposition des Zwischenspeichers (buf->DataStart()). Wenn „allowDiscontiguousBuffers“ auf „true“ gesetzt ist, springt der Leser durch die Zwischenspeicherkette, die durch seine Next()-Zeiger verknüpft ist. Das Parsing wird fortgesetzt, bis alle Daten in der Pufferkette verarbeitet sind (wie durch buf-gt;Datalen() angegeben) oder maxLen Byte geparst wurden.
Details | |||||||
---|---|---|---|---|---|---|---|
Parameter |
|
Weiter
WEAVE_ERROR Next( void )
Das TLVReader-Objekt wird zum nächsten TLV-Element weitergelesen.
Mit der Methode Next() wird das Leseobjekt auf dem nächsten Element in einer TLV-Codierung positioniert, die sich im selben Begrenzungskontext befindet. Wenn der Leser auf der äußersten Ebene einer TLV-Codierung positioniert ist, wird der Leser durch Aufrufen von Next() zum nächsten, obersten Element weitergeleitet. Wenn sich der Leser 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 Lesebewegung auf den aktuellen Einschlusskontext einschränkt, wird durch Aufrufen von Next(), wenn der Leser auf einem Containerelement positioniert wird, über den Container verschoben. Dabei werden die zugehörigen Elementelemente (und die Mitglieder aller verschachtelten Container) übersprungen, bis das erste Element nach dem Container erreicht ist.
Wenn es in einem bestimmten Einschlusskontext keine weiteren Elemente gibt, gibt die Methode Next() den Fehlerwert WEAVE_END_OF_TLV zurück und die Position des Readers bleibt unverändert.
Details | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Rückgabewerte |
|
Weiter
WEAVE_ERROR Next( TLVType expectedType, uint64_t expectedTag )
Das TLVReader-Objekt wird zum nächsten TLV-Element weitergeleitet, das gelesen werden soll. Dabei werden der Typ und das Tag des neuen Elements bestätigt.
Die Methode Next(TLVTypeexpectedType, uint64_t erwartetenTag) ist eine praktische Methode, die sich wie Next() verhält, aber auch prüft, ob Typ und Tag des neuen TLV-Elements mit den angegebenen 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 im zu lesenden Containerelement positioniert werden. Die Methode übernimmt als einziges Argument einen Verweis auf einen neuen Reader, der zum Lesen des Containers initialisiert wird. Dieser Leser wird als Container-Leser und der Leser, auf dem OpenContainer() aufgerufen wird, als übergeordneter Leser bezeichnet.
Wenn die Methode OpenContainer() zurückgegeben wird, wird der Container-Reader direkt vor dem ersten Mitglied des Containers positioniert. Wenn Next() für den Container-Reader aufgerufen wird, geht es durch die Mitglieder der Sammlung, bis das Ende erreicht ist. Zu diesem Zeitpunkt gibt der Reader WEAVE_END_OF_TLV zurück.
Wenn der Container-Reader geöffnet ist, dürfen Anwendungen keine Aufrufe tätigen oder den Status des übergeordneten Readers anderweitig ändern. Sobald eine Anwendung den Container-Reader nicht mehr verwendet, muss er geschlossen werden. Dazu ruft sie auf dem übergeordneten Reader CloseContainer() auf und übergibt den Container-Reader als Argument. Anwendungen können den Container-Reader jederzeit schließen, mit oder ohne Lesen aller Elemente im zugrunde liegenden Container. Nachdem der Container-Reader geschlossen wurde, können Anwendungen den übergeordneten Reader weiterverwenden.
Der Container-Leser übernimmt verschiedene Konfigurationsattribute vom übergeordneten Reader. Dabei handelt es sich um folgende Platzhalter:
- Die implizite Profil-ID (ImplicitProfileId)
- Der Anwendungsdatenzeiger (AppData)
- Der Funktionszeiger „GetNextBuffer“
Details | |||||
---|---|---|---|---|---|
Parameter |
|
||||
Rückgabewerte |
|
Überspringen
WEAVE_ERROR Skip( void )
Das TLVReader-Objekt wird direkt nach dem aktuellen TLV-Element angezeigt.
Mit der Methode Skip() wird das Leseobjekt unmittelbar nach dem aktuellen Element TLV positioniert. Durch einen nachfolgenden Aufruf von Next() wird der Leser zum folgenden Element weitergeleitet. Wie bei Next() werden die Mitglieder des Containers übersprungen, wenn der Leser zum Zeitpunkt des Aufrufs auf einem Containerelement positioniert ist. Wenn sich der Leser nicht auf einem Element befindet, bleibt seine Position unverändert.
Details | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Rückgabewerte |
|
Ende des Containers bestätigen
WEAVE_ERROR VerifyEndOfContainer( void )
Überprüft, ob sich das TVLReader-Objekt am Ende eines TLV-Containers befindet.
Mit der Methode VerifyEndOfContainer() wird bestätigt, dass im aktuellen TLV-Container keine weiteren TLV-Elemente gelesen werden dürfen. Diese Methode ist eine praktische Methode, um Next() aufzurufen und nach einem Rückgabewert von WEAVE_END_OF_TLV zu suchen.
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.
Daten sichern
WEAVE_ERROR EnsureData( WEAVE_ERROR noDataErr )
GetElementHeadLength
WEAVE_ERROR GetElementHeadLength( uint8_t & elemHeadBytes ) const
Mit dieser privaten Methode wird die Länge eines TLV-Elementkopfs berechnet.
IsContainerOpen (IsContainerOpen)
bool IsContainerOpen( void ) const
Daten lesen
WEAVE_ERROR ReadData( uint8_t *buf, uint32_t len )
Leseelement
WEAVE_ERROR ReadElement( void )
Lese-Tag
uint64_t ReadTag( TLVTagControl tagControl, const uint8_t *& p )
SetContainerOpen
void SetContainerOpen( bool aContainerOpen )
Daten überspringen
WEAVE_ERROR SkipData( void )
Überspringen Sie alle Daten im aktuellen TLV, indem Sie sie ohne Zielzwischenspeicher lesen.
Details | |||||
---|---|---|---|---|---|
Rückgabewerte |
|
SkipToEndOfContainer
WEAVE_ERROR SkipToEndOfContainer( void )
Element bestätigen
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 )