nl:: Weave:: TLV:: TLVWriter
#include <src/lib/core/WeaveTLV.h>
Bietet einen speichereffizienten Encoder zum Schreiben von Daten im Weave-TLV-Format.
Zusammenfassung
TLVWriter implementiert einen Nur-Forward-Stream-Encoder für Weave TLV-Daten. Anwendungen schreiben Daten in eine Codierung, indem sie eine der Put()-Methoden des Autors aufrufen und die zugehörigen Tag- und Wertinformationen nach Bedarf übergeben. In ähnlicher Weise können Anwendungen TLV-Containertypen (Strukturen, Arrays oder Pfade) codieren, indem die OpenContainer()- oder EnterContainer()-Methoden des Autors aufgerufen werden.
Ein TLVWriter-Objekt kann Daten direkt in einen festen Ausgabepuffer oder in eine Kette aus einem oder mehreren PacketBuffer-Objekten schreiben. Darüber hinaus können Anwendungen ihre eigenen GetNewBuffer
- und FinalizeBuffer
-Funktionen bereitstellen, um die Ausgabe an ein beliebiges Ziel zu leiten, z.B. Socket oder Ereigniswarteschlange verwendet.
Übernahme
Direkte bekannte abgeleitete Klassen: nl::Weave::TLV::CircularTLVWriter
Geschützte Typen |
|
---|---|
@72{
|
enum |
Öffentliche Typen |
|
---|---|
FinalizeBufferFunct)(TLVWriter &writer, uintptr_t bufHandle, uint8_t *bufStart, uint32_t bufLen)
|
WEAVE_ERROR(* Eine Funktion, mit der die Ausgabe eines TLVWriter-Objekts finalisiert wird. |
GetNewBufferFunct)(TLVWriter &writer, uintptr_t &bufHandle, uint8_t *&bufStart, uint32_t &bufLen)
|
WEAVE_ERROR(* Eine Funktion, die einem TLVWriter neuen Pufferbereich für die Ausgabe zur Verfügung stellt. |
Öffentliche Attribute |
|
---|---|
AppData
|
void *
Ein Zeigerfeld, das für anwendungsspezifische Daten verwendet werden kann.
|
FinalizeBuffer
|
Ein Zeiger auf eine Funktion, die aufgerufen wird, wenn der TLVWriter abgeschlossen ist.
|
GetNewBuffer
|
Ein Zeiger auf eine Funktion, die einem TLVWriter neuen Pufferbereich für die Ausgabe zur Verfügung stellt.
|
ImplicitProfileId
|
uint32_t
Die Profil-ID von Tags, die in impliziter Form codiert werden sollen.
|
Geschützte Attribute |
|
---|---|
mBufHandle
|
uintptr_t
|
mBufStart
|
uint8_t *
|
mContainerType
|
|
mLenWritten
|
uint32_t
|
mMaxLen
|
uint32_t
|
mRemainingLen
|
uint32_t
|
mWritePoint
|
uint8_t *
|
Öffentliche Funktionen |
|
---|---|
CloseContainer(TLVWriter & containerWriter)
|
Schließt das Schreiben eines TLV-Containers nach einem Aufruf von OpenContainer() ab.
|
ContinuePutBytes(const uint8_t *buf, uint32_t len)
|
Codiert einen TLV-Bytestringwert.
|
CopyContainer(TLVReader & container)
|
|
CopyContainer(uint64_t tag, TLVReader & container)
|
Codiert ein TLV-Containerelement aus einem vorab codierten Satz von Mitgliedselementen.
|
CopyContainer(uint64_t tag, const uint8_t *encodedContainer, uint16_t encodedContainerLen)
|
Codiert ein TLV-Containerelement, das Mitgliederelemente aus einem vorab codierten Container enthält.
|
CopyElement(TLVReader & reader)
|
Kopiert ein TLV-Element aus einem Leserobjekt in den Autor.
|
CopyElement(uint64_t tag, TLVReader & reader)
|
|
EndContainer(TLVType outerContainerType)
|
Führt die Codierung eines TLV-Containerelements durch.
|
Finalize(void)
|
Schließen Sie das Schreiben einer TLV-Codierung ab.
|
GetContainerType(void) const
|
Gibt den Containertyp zurück, in den TLVWriter derzeit schreibt.
|
GetLengthWritten(void)
|
uint32_t
Gibt die Gesamtzahl der Byte zurück, die seit der Initialisierung des Autors geschrieben wurden.
|
Init(uint8_t *buf, uint32_t maxLen)
|
void
Initialisiert ein TLVWriter-Objekt, um in einen einzelnen Ausgabepuffer zu schreiben.
|
Init(PacketBuffer *buf, uint32_t maxLen)
|
void
Initialisiert ein TLVWriter-Objekt, um in einen einzelnen PacketBuffer zu schreiben.
|
Init(PacketBuffer *buf, uint32_t maxLen, bool allowDiscontiguousBuffers)
|
void
Initialisiert ein TLVWriter-Objekt, um in einen oder mehrere PacketBuffers zu schreiben.
|
InitMalloced(uint8_t *& outBuf, uint32_t initialBufSize, uint32_t maxLen)
|
void
Initialisiert ein TLVWriter-Objekt, um in einen dynamischen Zwischenspeicher zu schreiben.
|
OpenContainer(uint64_t tag, TLVType containerType, TLVWriter & containerWriter)
|
|
Put(uint64_t tag, int8_t v)
|
Codiert einen TLV-Ganzzahlwert mit Vorzeichen.
|
Put(uint64_t tag, int8_t v, bool preserveSize)
|
Codiert einen TLV-Ganzzahlwert mit Vorzeichen.
|
Put(uint64_t tag, int16_t v)
|
|
Put(uint64_t tag, int16_t v, bool preserveSize)
|
|
Put(uint64_t tag, int32_t v)
|
|
Put(uint64_t tag, int32_t v, bool preserveSize)
|
|
Put(uint64_t tag, int64_t v)
|
|
Put(uint64_t tag, int64_t v, bool preserveSize)
|
|
Put(uint64_t tag, uint8_t v)
|
Codiert einen TLV-Ganzzahlwert ohne Vorzeichen.
|
Put(uint64_t tag, uint8_t v, bool preserveSize)
|
Codiert einen TLV-Ganzzahlwert ohne Vorzeichen.
|
Put(uint64_t tag, uint16_t v)
|
|
Put(uint64_t tag, uint16_t v, bool preserveSize)
|
|
Put(uint64_t tag, uint32_t v)
|
|
Put(uint64_t tag, uint32_t v, bool preserveSize)
|
|
Put(uint64_t tag, uint64_t v)
|
|
Put(uint64_t tag, uint64_t v, bool preserveSize)
|
|
Put(uint64_t tag, float v)
|
|
Put(uint64_t tag, double v)
|
Codiert einen TLV-Gleitkommawert.
|
PutBoolean(uint64_t tag, bool v)
|
Codiert einen booleschen TLV-Wert.
|
PutBytes(uint64_t tag, const uint8_t *buf, uint32_t len)
|
Codiert einen TLV-Bytestringwert.
|
PutNull(uint64_t tag)
|
Codiert einen TLV-Nullwert.
|
PutPreEncodedContainer(uint64_t tag, TLVType containerType, const uint8_t *data, uint32_t dataLen)
|
Codiert ein TLV-Containerelement aus einem vorab codierten Satz von Mitgliedselementen.
|
PutString(uint64_t tag, const char *buf)
|
Codiert einen TLV-UTF8-Stringwert.
|
PutString(uint64_t tag, const char *buf, uint32_t len)
|
Codiert einen TLV-UTF8-Stringwert.
|
PutStringF(uint64_t tag, const char *fmt, ...)
|
Codieren Sie die Stringausgabe entsprechend dem Format im TLV-Element.
|
StartContainer(uint64_t tag, TLVType containerType, TLVType & outerContainerType)
|
Beginnt die Codierung eines neuen TLV-Containerelements.
|
StartPutBytes(uint64_t tag, uint32_t totalLen)
|
Codiert einen TLV-Bytestring in mehreren Blöcken.
|
VPutStringF(uint64_t tag, const char *fmt, va_list ap)
|
Codieren Sie die Stringausgabe entsprechend dem Format im TLV-Element.
|
Öffentliche statische Funktionen |
|
---|---|
FinalizePacketBuffer(TLVWriter & writer, uintptr_t bufHandle, uint8_t *bufStart, uint32_t dataLen)
|
Implementierung der Funktion TLVWriter FinalizeBuffer zum Schreiben in eine Kette von PacketBuffers
|
GetNewBuffer_Malloced(TLVWriter & writer, uintptr_t & bufHandle, uint8_t *& bufStart, uint32_t & bufLen)
|
Implementierung der Funktion TLVWriter GetNewBuffer zum Schreiben in einen dynamischen Zwischenspeicher
|
GetNewPacketBuffer(TLVWriter & writer, uintptr_t & bufHandle, uint8_t *& bufStart, uint32_t & bufLen)
|
Implementierung der Funktion TLVWriter GetNewBuffer zum Schreiben in eine Kette von PacketBuffers
|
Geschützte Funktionen |
|
---|---|
IsCloseContainerReserved(void) const
|
bool
Bestimmen Sie, ob der Container Platz für das CloseContainer-Symbol zum Starten / Öffnen des Containers reservieren soll.
|
IsContainerOpen(void) const
|
bool
|
SetCloseContainerReserved(bool aCloseContainerReserved)
|
void
Legen Sie fest, ob der Container beim Starten / Öffnen des Containers Platz für das CloseContainer-Symbol reservieren soll.
|
SetContainerOpen(bool aContainerOpen)
|
void
|
WriteData(const uint8_t *p, uint32_t len)
|
|
WriteElementHead(TLVElementType elemType, uint64_t tag, uint64_t lenOrVal)
|
|
WriteElementWithData(TLVType type, uint64_t tag, const uint8_t *data, uint32_t dataLen)
|
Geschützte Typen
@72
@72
Öffentliche Typen
FinalizeBufferFunct
WEAVE_ERROR(* FinalizeBufferFunct)(TLVWriter &writer, uintptr_t bufHandle, uint8_t *bufStart, uint32_t bufLen)
Eine Funktion, mit der die Ausgabe eines TLVWriter-Objekts finalisiert wird.
Funktionen dieses Typs werden aufgerufen, wenn die Methode Finalize() eines TLVWriter-Elements aufgerufen wird. Es wird erwartet, dass die Funktion alle erforderlichen Bereinigungen oder Finalisierungen im Zusammenhang mit der Nutzung der Ausgabe des Schreibobjekts durchführt. Beispiele dafür sind das Aufzeichnen der endgültigen Länge der Codierung oder das Schließen einer Dateibeschreibung.
Details | |||||||||
---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||
Rückgabewerte |
|
GetNewBufferFunct
WEAVE_ERROR(* GetNewBufferFunct)(TLVWriter &writer, uintptr_t &bufHandle, uint8_t *&bufStart, uint32_t &bufLen)
Eine Funktion, die einem TLVWriter neuen Pufferbereich für die Ausgabe zur Verfügung stellt.
Funktionen dieses Typs werden verwendet, um einen neuen Pufferbereich vorzubereiten, in den ein TLVWriter schreiben kann. Beim Aufruf wird erwartet, dass die Funktion einen Zeiger an einen Speicherort zurückgibt, an den neue Daten geschrieben werden sollen, zusammen mit einer zugehörigen maximalen Länge. Die Funktion kann Schreibraum bereitstellen, indem sie entweder einen neuen Zwischenspeicher für die Daten zuweist oder zuvor geschriebene Daten aus einem vorhandenen Zwischenspeicher löscht.
Details | |||||||||
---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||
Rückgabewerte |
|
Öffentliche Attribute
AppData
void * AppData
Ein Zeigerfeld, das für anwendungsspezifische Daten verwendet werden kann.
FinalizeBuffer
FinalizeBufferFunct FinalizeBuffer
Ein Zeiger auf eine Funktion, die aufgerufen wird, wenn der TLVWriter abgeschlossen ist.
Ein TLVWriter-Objekt ruft die Funktion FinalizeBuffer jedes Mal auf, wenn seine Finalize()-Methode aufgerufen wird. Anwendungen können den Funktionszeiger vor dem Aufruf von Finalize() setzen. Standardmäßig ist der Zeiger auf NULL gesetzt, was dazu führt, dass die Methode Finalize() auf das Aufrufen der Funktion verzichtet.
Weitere Informationen zur Implementierung einer FinalizeBuffer-Funktion finden Sie in der Typdefinition FinalizeBufferFunct.
GetNewBuffer
GetNewBufferFunct GetNewBuffer
Ein Zeiger auf eine Funktion, die einem TLVWriter neuen Pufferbereich für die Ausgabe zur Verfügung stellt.
Ein TLVWriter-Objekt ruft die GetNewBuffer-Funktion immer dann auf, wenn versucht wird, Daten zu schreiben, die die Größe des aktuellen Ausgabepuffers überschreiten. Bei Festlegung auf NULL (Standardwert) gibt der Autor einen WEAVE_ERROR_NO_MEMORY zurück, wenn die Ausgabedaten den aktuellen Puffer überschreiten.
GetNewBuffer kann jederzeit von einer Anwendung festgelegt werden, wird aber normalerweise gesetzt, wenn der Writer initialisiert wird.
Weitere Informationen zur Implementierung einer GetNewBuffer-Funktion finden Sie in der Typdefinition GetNewBufferFunct.
ImplicitProfileId
uint32_t ImplicitProfileId
Die Profil-ID von Tags, die in impliziter Form codiert werden sollen.
Wenn ein Autor aufgefordert wird, ein neues Element zu codieren, und wenn die Profil-ID des Tags, das mit dem neuen Element verknüpft ist, mit dem Wert des Mitglieds ImplicitProfileId
übereinstimmt, codiert der Autor das Tag in impliziter Form und lasst dabei die Profil-ID weg.
Standardmäßig ist das Attribut ImplicitProfileId
auf „kProfileIdNotRequested“ festgelegt. Dadurch wird der Autor angewiesen, keine implizit codierten Tags auszugeben. Anwendungen können ImplicitProfileId
jederzeit festlegen, um Codierungs-Tags ab dem aktuellen Punkt in der Codierung in impliziter Form zu aktivieren. Die jeweils festzulegende Profil-ID hängt normalerweise vom Kontext der Anwendung oder des gesprochenen Protokolls ab.
Geschützte Attribute
mBufHandle
uintptr_t mBufHandle
mBufStart
uint8_t * mBufStart
mContainerType
TLVType mContainerType
mLenWritten
uint32_t mLenWritten
mMaxLen
uint32_t mMaxLen
mRemainingLen
uint32_t mRemainingLen
mWritePoint
uint8_t * mWritePoint
Öffentliche Funktionen
CloseContainer
WEAVE_ERROR CloseContainer( TLVWriter & containerWriter )
Schließt das Schreiben eines TLV-Containers nach einem Aufruf von OpenContainer() ab.
Die Methode CloseContainer() stellt den Status eines übergeordneten TLVWriter-Objekts nach einem Aufruf von OpenContainer() wieder her. Für jeden Aufruf von OpenContainer()-Anwendungen muss ein entsprechender Aufruf an CloseContainer() erfolgen, wobei an beide Methoden ein Verweis auf denselben Container-Writer übergeben wird.
Wenn CloseContainer() zurückgegeben wird, können Anwendungen weiterhin den übergeordneten Autor verwenden, um zusätzliche TLV-Elemente zu schreiben, die nach dem Containerelement erscheinen. An dieser Stelle sollte der bereitgestellte Container Writer als "nicht initialisiert" betrachtet werden. und dürfen nicht ohne erneute Initialisierung verwendet werden.
Details | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||||||
Rückgabewerte |
|
ContinuePutBytes
WEAVE_ERROR ContinuePutBytes( const uint8_t *buf, uint32_t len )
Codiert einen TLV-Bytestringwert.
Sollte mit StartPutBytes verwendet werden.
Details | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||||||
Rückgabewerte |
|
CopyContainer
WEAVE_ERROR CopyContainer( TLVReader & container )
Kopiert ein TLV-Containerelement aus dem TLVReader-Objekt.
CopyContainer() codiert ein neues TLV-Containerelement, indem ein vorab codiertes Containerelement kopiert wird, das sich an der aktuellen Position eines TLVReader-Objekts befindet. Die Methode schreibt das gesamte neue Containerelement in einem Aufruf und kopiert Typ, Tag und Elemente des Containers aus der Quellcodierung. Wenn die Methode zurückgegeben wird, kann das Schreiberobjekt verwendet werden, um zusätzliche TLV-Elemente nach dem Containerelement zu schreiben.
Details | |||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||||||||||||
Rückgabewerte |
|
CopyContainer
WEAVE_ERROR CopyContainer( uint64_t tag, TLVReader & container )
Codiert ein TLV-Containerelement aus einem vorab codierten Satz von Mitgliedselementen.
Die Methode CopyContainer() codiert ein neues TLV-Containerelement (eine Struktur, ein Array oder ein Pfad), das eine Reihe von Mitgliedselementen enthält, die von einem TLVReader-Objekt stammen. Beim Aufruf der Methode wird erwartet, dass das bereitgestellte Reader-Objekt auf einem TLV-Containerelement positioniert wird. Der neu codierte Container hat denselben Typ und dieselben Mitglieder wie der Eingabecontainer. Das Tag für den neuen Container wird als Eingabeparameter angegeben.
Wenn die Methode zurückgegeben wird, kann das Schreiberobjekt verwendet werden, um zusätzliche TLV-Elemente nach dem Containerelement zu schreiben.
Details | |||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||||||||||||
Rückgabewerte |
|
CopyContainer
WEAVE_ERROR CopyContainer( uint64_t tag, const uint8_t *encodedContainer, uint16_t encodedContainerLen )
Codiert ein TLV-Containerelement, das Mitgliederelemente aus einem vorab codierten Container enthält.
Die Methode CopyContainer() codiert ein neues TLV-Containerelement (eine Struktur, ein Array oder ein Pfad), das eine Gruppe von Elementelementen enthält, die aus dem Inhalt eines bereitgestellten vorab codierten Containers stammen. Beim Aufruf der Methode werden die Daten im bereitgestellten Eingabepuffer als TLV-Containerelement geparst und ein neuer Container geschrieben, der denselben Typ und dieselben Mitglieder wie der Eingabecontainer hat. Das Tag für den neuen Container wird als Eingabeparameter angegeben.
Wenn die Methode zurückgegeben wird, kann das Schreiberobjekt verwendet werden, um zusätzliche TLV-Elemente nach dem Containerelement zu schreiben.
Details | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||||||||||
Rückgabewerte |
|
CopyElement
WEAVE_ERROR CopyElement( TLVReader & reader )
Kopiert ein TLV-Element aus einem Leserobjekt in den Autor.
Die Methode CopyElement() codiert ein neues TLV-Element, dessen Typ, Tag und Wert aus einem TLVReader-Objekt stammen. Beim Aufruf der Methode wird erwartet, dass das bereitgestellte Reader-Objekt auf dem TLV-Quellelement positioniert wird. Das neu codierte Element hat denselben Typ, Tag und Inhalt wie der Eingabecontainer. Wenn das angegebene Element ein TLV-Container (Struktur, Array oder Pfad) ist, wird der gesamte Inhalt des Containers kopiert.
Details | |||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||||||||||||
Rückgabewerte |
|
CopyElement
WEAVE_ERROR CopyElement( uint64_t tag, TLVReader & reader )
EndContainer
WEAVE_ERROR EndContainer( TLVType outerContainerType )
Führt die Codierung eines TLV-Containerelements durch.
Die Methode EndContainer() schließt die Codierung eines TLV-Containerelements ab und stellt den Status eines TLVWrite-Objekts nach einem früheren Aufruf von StartContainer() wieder her. Für jeden Aufruf von StartContainer() müssen Anwendungen einen entsprechenden Aufruf an EndContainer() senden und den vom StartContainer()-Aufruf zurückgegebenen TLVType-Wert übergeben. Wenn EndContainer() zurückgegeben wird, kann das Schreiberobjekt verwendet werden, um zusätzliche TLV-Elemente zu schreiben, die auf das Containerelement folgen.
Details | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||||||
Rückgabewerte |
|
Abschließen
WEAVE_ERROR Finalize( void )
Schließen Sie das Schreiben einer TLV-Codierung ab.
Mit der Methode Finalize() wird das Schreiben einer TLV-Codierung in den zugrunde liegenden Ausgabezwischenspeicher abgeschlossen. Die Methode muss von der Anwendung aufgerufen werden, bevor sie den Inhalt des Zwischenspeichers verwendet. Finalize() kann nur aufgerufen werden, wenn für den aktuellen Writer keine Container-Writer geöffnet sind. (Siehe OpenContainer()
).
Details | |||||||
---|---|---|---|---|---|---|---|
Rückgabewerte |
|
GetContainerType
TLVType GetContainerType( void ) const
Gibt den Containertyp zurück, in den TLVWriter derzeit schreibt.
Die Methode GetContainerType() gibt den Typ des TLV-Containers zurück, in den TLVWriter gerade schreibt. Wenn der TLVWriter keine Elemente innerhalb eines Containers schreibt (z.B. wenn auf der äußersten Ebene einer Codierung geschrieben wird), gibt die Methode kTLVType_NotRequested zurück.
Details | |
---|---|
Rückgabe |
Der TLVType des aktuellen Containers oder kTLVType_NotRequested, wenn TLVWriter keine Elemente in einem Container schreibt.
|
GetLengthWritten
uint32_t GetLengthWritten( void )
Gibt die Gesamtzahl der Byte zurück, die seit der Initialisierung des Autors geschrieben wurden.
Details | |
---|---|
Rückgabe |
Gesamtzahl der Byte, die seit der Initialisierung des Autors geschrieben wurden.
|
Init
void Init( uint8_t *buf, uint32_t maxLen )
Init
void Init( PacketBuffer *buf, uint32_t maxLen )
Initialisiert ein TLVWriter-Objekt, um in einen einzelnen PacketBuffer zu schreiben.
Der Schreibvorgang beginnt unmittelbar nach dem letzten Byte der vorhandenen Daten im bereitgestellten Zwischenspeicher.
Details | |||||
---|---|---|---|---|---|
Parameter |
|
Init
void Init( PacketBuffer *buf, uint32_t maxLen, bool allowDiscontiguousBuffers )
Initialisiert ein TLVWriter-Objekt, um in einen oder mehrere PacketBuffers zu schreiben.
Der Schreibvorgang beginnt unmittelbar nach dem letzten Byte der vorhandenen Daten im angegebenen Zwischenspeicher. Wenn allowDiscontiguousBuffers
auf „true“ gesetzt ist, werden zusätzliche PacketBuffers zugewiesen und nach Bedarf an den bereitgestellten Zwischenspeicher verkettet, um die Menge der geschriebenen Daten aufzunehmen. Wenn der angegebene Ausgabezwischenspeicher bereits der Anfang einer Pufferkette ist, wird die Ausgabe in die nachfolgenden Puffer in der Kette geschrieben, bevor neue Puffer zugeordnet werden.
Details | |||||||
---|---|---|---|---|---|---|---|
Parameter |
|
InitMalloced
void InitMalloced( uint8_t *& outBuf, uint32_t initialBufSize, uint32_t maxLen )
Initialisiert ein TLVWriter-Objekt, um in einen dynamischen Zwischenspeicher zu schreiben.
Details | |||||||
---|---|---|---|---|---|---|---|
Parameter |
|
OpenContainer
WEAVE_ERROR OpenContainer( uint64_t tag, TLVType containerType, TLVWriter & containerWriter )
Initialisiert ein neues TLVWriter-Objekt zum Schreiben der Mitglieder eines TLV-Containerelements.
Die Methode OpenContainer() wird verwendet, um TLV-Containerelemente (Strukturen, Arrays oder Pfade) in eine Codierung zu schreiben. Die Methode verwendet den Typ und das Tag (falls vorhanden) des neuen Containers sowie einen Verweis auf ein neues Writer-Objekt (den Container Writer), das zum Schreiben der Containerelemente initialisiert wird. Anwendungen schreiben die Mitglieder des neuen Containers mithilfe des Container-Writers und rufen dann CloseContainer() auf, um die Containercodierung abzuschließen.
Während der Container-Writer offen ist, dürfen Anwendungen keine Aufrufe an den übergeordneten Autor senden oder dessen Status anderweitig ändern.
Der Container-Writer übernimmt verschiedene Konfigurationseigenschaften des übergeordneten Autors. Diese sind:
- Die implizite Profil-ID (ImplicitProfileId)
- Anwendungsdatenzeiger (AppData)
- Die Funktionszeiger GetNewBuffer und FinalizeBuffer
Details | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||||||||
Rückgabewerte |
|
Put
WEAVE_ERROR Put( uint64_t tag, int8_t v )
Codiert einen TLV-Ganzzahlwert mit Vorzeichen.
Dies ist eine überlastete Mitgliederfunktion, die der Einfachheit halber zur Verfügung gestellt wird. Sie unterscheidet sich von der obigen Funktion nur darin, welche Argumente sie akzeptiert.
Details | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||||||
Rückgabewerte |
|
Put
WEAVE_ERROR Put( uint64_t tag, int8_t v, bool preserveSize )
Codiert einen TLV-Ganzzahlwert mit Vorzeichen.
Dies ist eine überlastete Mitgliederfunktion, die der Einfachheit halber zur Verfügung gestellt wird. Sie unterscheidet sich von der obigen Funktion nur darin, welche Argumente sie akzeptiert.
Details | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||||||
Rückgabewerte |
|
Put
WEAVE_ERROR Put( uint64_t tag, int16_t v )
Put
WEAVE_ERROR Put( uint64_t tag, int16_t v, bool preserveSize )
Put
WEAVE_ERROR Put( uint64_t tag, int32_t v )
Put
WEAVE_ERROR Put( uint64_t tag, int32_t v, bool preserveSize )
Put
WEAVE_ERROR Put( uint64_t tag, int64_t v )
Put
WEAVE_ERROR Put( uint64_t tag, int64_t v, bool preserveSize )
Put
WEAVE_ERROR Put( uint64_t tag, uint8_t v )
Codiert einen TLV-Ganzzahlwert ohne Vorzeichen.
Dies ist eine überlastete Mitgliederfunktion, die der Einfachheit halber zur Verfügung gestellt wird. Sie unterscheidet sich von der obigen Funktion nur darin, welche Argumente sie akzeptiert.
Details | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||||||
Rückgabewerte |
|
Put
WEAVE_ERROR Put( uint64_t tag, uint8_t v, bool preserveSize )
Codiert einen TLV-Ganzzahlwert ohne Vorzeichen.
Dies ist eine überlastete Mitgliederfunktion, die der Einfachheit halber zur Verfügung gestellt wird. Sie unterscheidet sich von der obigen Funktion nur darin, welche Argumente sie akzeptiert.
Details | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||||||
Rückgabewerte |
|
Put
WEAVE_ERROR Put( uint64_t tag, uint16_t v )
Put
WEAVE_ERROR Put( uint64_t tag, uint16_t v, bool preserveSize )
Put
WEAVE_ERROR Put( uint64_t tag, uint32_t v )
Put
WEAVE_ERROR Put( uint64_t tag, uint32_t v, bool preserveSize )
Put
WEAVE_ERROR Put( uint64_t tag, uint64_t v )
Put
WEAVE_ERROR Put( uint64_t tag, uint64_t v, bool preserveSize )
Put
WEAVE_ERROR Put( uint64_t tag, float v )
Put
WEAVE_ERROR Put( uint64_t tag, double v )
Codiert einen TLV-Gleitkommawert.
Dies ist eine überlastete Mitgliederfunktion, die der Einfachheit halber zur Verfügung gestellt wird. Sie unterscheidet sich von der obigen Funktion nur darin, welche Argumente sie akzeptiert.
Details | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||||||
Rückgabewerte |
|
PutBoolean
WEAVE_ERROR PutBoolean( uint64_t tag, bool v )
Codiert einen booleschen TLV-Wert.
Details | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||||||
Rückgabewerte |
|
PutBytes
WEAVE_ERROR PutBytes( uint64_t tag, const uint8_t *buf, uint32_t len )
Codiert einen TLV-Bytestringwert.
Details | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||||||
Rückgabewerte |
|
PutNull
WEAVE_ERROR PutNull( uint64_t tag )
Codiert einen TLV-Nullwert.
Details | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||||||
Rückgabewerte |
|
PutPreEncodedContainer
WEAVE_ERROR PutPreEncodedContainer( uint64_t tag, TLVType containerType, const uint8_t *data, uint32_t dataLen )
Codiert ein TLV-Containerelement aus einem vorab codierten Satz von Mitgliedselementen.
Die Methode PutPreEncodedContainer() codiert ein neues TLV-Containerelement (eine Struktur, ein Array oder ein Pfad), das eine Gruppe von Mitgliedselementen enthält, die aus einem vorcodierten Zwischenspeicher stammen. Der Eingabepuffer muss null oder mehr vollständig codierte TLV-Elemente mit Tags enthalten, die den Regeln entsprechen, die dem angegebenen Containertyp zugeordnet sind. Beispielsweise müssen Strukturmitglieder Tags haben, Array-Mitglieder nicht.
Die Methode codiert das gesamte Containerelement in einem Aufruf. Wenn PutPreEncodedContainer() zurückgibt, kann das Schreiberobjekt verwendet werden, um zusätzliche TLV-Elemente nach dem Containerelement zu schreiben.
Details | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||||||||
Rückgabewerte |
|
PutString
WEAVE_ERROR PutString( uint64_t tag, const char *buf )
Codiert einen TLV-UTF8-Stringwert.
Details | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||||||
Rückgabewerte |
|
PutString
WEAVE_ERROR PutString( uint64_t tag, const char *buf, uint32_t len )
Codiert einen TLV-UTF8-Stringwert.
Details | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||||||
Rückgabewerte |
|
PutStringF
WEAVE_ERROR PutStringF( uint64_t tag, const char *fmt, ... )
Codieren Sie die Stringausgabe entsprechend dem Format im TLV-Element.
PutStringF ist ein Analog zu einem Sprintf, bei dem die Ausgabe in einem TLV-Element und nicht in einem Zeichenpuffer gespeichert wird. Wenn die erweiterte printf-Funktionalität verfügbar ist, kann die Funktion die Ergebniszeichenfolge an einen nicht zusammenhängenden zugrunde liegenden Speicher ausgeben. Die Implementierung unterstützt die folgenden printf-Verbesserungen:
Die Plattform stellt eine Callback-basierte vcbprintf
bereit, die die Möglichkeit bietet, anstelle von putchar einen benutzerdefinierten Callback aufzurufen.
Die Plattform stellt eine Variante von vsnprintf
mit dem Namen vsnprintf_ex
bereit, die sich genauso wie vsnprintf verhält, mit der Ausnahme, dass die ersten n
Zeichen der Ausgabe weggelassen werden können.
Die Callback-basierte Funktion mag zwar am einfachsten sein und am wenigsten Code verwenden, die vsprintf_ex
-Funktionen benötigen aber weniger Stack.
Wenn keine der oben genannten Optionen verfügbar ist, aber die Plattform malloc
bereitstellt, weist die Funktion einen temporären Zwischenspeicher für die Ausgabe zu. Wenn die Plattform weder Verbesserungen für die Printf-Familie noch für Malloc bereitstellt, wird die Ausgabe so gekürzt, dass sie in den kontinuierlichen Zustand im aktuellen TLV-Speicher passt.
Details | |||||||
---|---|---|---|---|---|---|---|
Parameter |
|
||||||
Rückgabewerte |
|
StartContainer
WEAVE_ERROR StartContainer( uint64_t tag, TLVType containerType, TLVType & outerContainerType )
Beginnt die Codierung eines neuen TLV-Containerelements.
Die Methode StartContainer() wird verwendet, um TLV-Containerelemente (Strukturen, Arrays oder Pfade) in eine Codierung zu schreiben. Die Methode verwendet den Typ und das Tag (falls vorhanden) des neuen Containers sowie einen Verweis auf einen TLVType-Wert, der verwendet wird, um den aktuellen Kontext des Autors zu speichern, während er zum Schreiben des Containers verwendet wird.
Sobald die Methode StartContainer() zurückgegeben wird, sollte die Anwendung das aktuelle TLVWriter-Objekt verwenden, um die Elemente des Containers zu schreiben. Anschließend muss die Anwendung die Methode EndContainer() aufrufen, um die Codierung des Containers abzuschließen.
Details | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||||||||
Rückgabewerte |
|
StartPutBytes
WEAVE_ERROR StartPutBytes( uint64_t tag, uint32_t totalLen )
Codiert einen TLV-Bytestring in mehreren Blöcken.
Sollte mit „ContinuePutBytes“ verwendet werden.
Details | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||||||
Rückgabewerte |
|
VPutStringF
WEAVE_ERROR VPutStringF( uint64_t tag, const char *fmt, va_list ap )
Codieren Sie die Stringausgabe entsprechend dem Format im TLV-Element.
PutStringF ist ein Analog zu einem Sprintf, bei dem die Ausgabe in einem TLV-Element und nicht in einem Zeichenpuffer gespeichert wird. Wenn die erweiterte printf-Funktionalität verfügbar ist, kann die Funktion die Ergebniszeichenfolge an einen nicht zusammenhängenden zugrunde liegenden Speicher ausgeben. Die Implementierung unterstützt die folgenden printf-Verbesserungen:
Die Plattform stellt eine Callback-basierte vcbprintf
bereit, die die Möglichkeit bietet, anstelle von putchar einen benutzerdefinierten Callback aufzurufen.
Die Plattform stellt eine Variante von vsnprintf
mit dem Namen vsnprintf_ex
bereit, die sich genauso wie vsnprintf verhält, mit der Ausnahme, dass die ersten n
Zeichen der Ausgabe weggelassen werden können.
Die Callback-basierte Funktion mag zwar am einfachsten sein und am wenigsten Code verwenden, die vsprintf_ex
-Funktionen benötigen aber weniger Stack.
Wenn keine der oben genannten Optionen verfügbar ist, aber die Plattform malloc
bereitstellt, weist die Funktion einen temporären Zwischenspeicher für die Ausgabe zu. Wenn die Plattform weder Verbesserungen für die Printf-Familie noch für Malloc bereitstellt, wird die Ausgabe so gekürzt, dass sie in den kontinuierlichen Zustand im aktuellen TLV-Speicher passt.
Details | |||||||
---|---|---|---|---|---|---|---|
Parameter |
|
||||||
Rückgabewerte |
|
Öffentliche statische Funktionen
FinalizePacketBuffer
WEAVE_ERROR FinalizePacketBuffer( TLVWriter & writer, uintptr_t bufHandle, uint8_t *bufStart, uint32_t dataLen )
Implementierung der Funktion TLVWriter FinalizeBuffer zum Schreiben in eine Kette von PacketBuffers
Die Funktion FinalizePacketBuffer() führt die erforderliche Finalisierung durch, wenn ein TLVWriter zum Schreiben in eine Kette von PacketBuffers verwendet wird. Die Funktion ist für die Verwendung mit der Funktion GetNewPacketBuffer() vorgesehen.
Weitere Informationen zur API der Funktion FinalizePacketBuffer() finden Sie in der Typdefinition „FinalizeBufferFunct“.
GetNewBuffer_Malloced
WEAVE_ERROR GetNewBuffer_Malloced( TLVWriter & writer, uintptr_t & bufHandle, uint8_t *& bufStart, uint32_t & bufLen )
Implementierung der Funktion TLVWriter GetNewBuffer zum Schreiben in einen dynamischen Zwischenspeicher
Die Funktion GetNewBuffer_Malloced() stellt einem TLVWriter neuen Ausgaberaum bereit, indem die Größe des zugrunde liegenden dynamischen Zwischenspeichers nach Bedarf zum Speichern der Codierung verdoppelt wird. Die Funktion wurde für die Zuweisung zum TLVWriter-Funktionszeiger GetNewBuffer entwickelt.
Weitere Informationen zur API der Funktion GetNewBuffer_Malloced() finden Sie in der Typdefinition "GetNewBufferFunct".
GetNewPacketBuffer
WEAVE_ERROR GetNewPacketBuffer( TLVWriter & writer, uintptr_t & bufHandle, uint8_t *& bufStart, uint32_t & bufLen )
Implementierung der Funktion TLVWriter GetNewBuffer zum Schreiben in eine Kette von PacketBuffers
Die Funktion GetNewPacketBuffer() stellt einem TLVWriter neuen Ausgabespeicher bereit, indem eine Kette aus einem oder mehreren PacketBuffers nach Bedarf zum Speichern der Codierung zugewiesen wird. Die Funktion wurde für die Zuweisung zum TLVWriter-Funktionszeiger GetNewBuffer entwickelt.
Wenn Sie GetNewPacketBuffer mit einem TLVWriter verwenden, sollte auch die entsprechende FinalizePacketBuffer()-Funktion (oder eine Entsprechung) verwendet werden, um die Pufferkette zu finalisieren.
Weitere Informationen zur API der Funktion GetNewPacketBuffer() finden Sie in der Typdefinition "GetNewBufferFunct".
Geschützte Funktionen
IsCloseContainerReserved
bool IsCloseContainerReserved( void ) const
Bestimmen Sie, ob der Container Platz für das CloseContainer-Symbol zum Starten / Öffnen des Containers reservieren soll.
IsContainerOpen
bool IsContainerOpen( void ) const
SetCloseContainerReserved
void SetCloseContainerReserved( bool aCloseContainerReserved )
Legen Sie fest, ob der Container beim Starten / Öffnen des Containers Platz für das CloseContainer-Symbol reservieren soll.
SetContainerOpen
void SetContainerOpen( bool aContainerOpen )
WriteData
WEAVE_ERROR WriteData( const uint8_t *p, uint32_t len )
WriteElementHead
WEAVE_ERROR WriteElementHead( TLVElementType elemType, uint64_t tag, uint64_t lenOrVal )
WriteElementWithData
WEAVE_ERROR WriteElementWithData( TLVType type, uint64_t tag, const uint8_t *data, uint32_t dataLen )