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 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. Auf ähnliche Weise können Anwendungen TLV-Containertypen (Strukturen, Arrays oder Pfade) codieren, indem sie die Methoden OpenContainer() oder EnterContainer() des Autors aufrufen.
Ein TLVWriter-Objekt kann Daten direkt in einen festen Ausgabepuffer oder in eine Kette aus einem oder mehreren PacketBuffer-Objekten schreiben. Außerdem können Anwendungen ihre eigenen GetNewBuffer
- und FinalizeBuffer
-Funktionen bereitstellen, um die Ausgabe an ein beliebiges Ziel weiterzuleiten, z.B. einen Socket oder eine Ereigniswarteschlange.
Übernahme
Direkte bekannte Unterklassen: 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, die verwendet wird, um die Ausgabe eines TLVWriter-Objekts abzuschließen. |
GetNewBufferFunct)(TLVWriter &writer, uintptr_t &bufHandle, uint8_t *&bufStart, uint32_t &bufLen)
|
WEAVE_ERROR(* Eine Funktion, die einem TLVWriter neuen Ausgabepufferspeicherplatz bereitstellt. |
Öffentliche Attribute |
|
---|---|
AppData
|
void *
Ein Zeigerfeld, das für anwendungsspezifische Daten verwendet werden kann.
|
FinalizeBuffer
|
Ein Zeiger auf eine Funktion, die beim Abschluss von TLVWriter aufgerufen wird.
|
GetNewBuffer
|
Ein Zeiger auf eine Funktion, die einem TLVWriter neuen Ausgabepufferplatz bereitstellt.
|
ImplicitProfileId
|
uint32_t
Die Profil-ID von Tags, die implizit codiert werden sollten.
|
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)
|
Vervollständigt das Schreiben eines TLV-Containers nach einem Aufruf von OpenContainer().
|
ContinuePutBytes(const uint8_t *buf, uint32_t len)
|
Codiert einen TLV-Bytestring-Wert.
|
CopyContainer(TLVReader & container)
|
|
CopyContainer(uint64_t tag, TLVReader & container)
|
Codiert ein TLV-Containerelement aus einer vorcodierten Gruppe von Mitgliedselementen.
|
CopyContainer(uint64_t tag, const uint8_t *encodedContainer, uint16_t encodedContainerLen)
|
Codiert ein TLV-Containerelement, das Mitgliedselemente aus einem vorcodierten Container enthält.
|
CopyElement(TLVReader & reader)
|
Kopiert ein TLV-Element aus einem Leseobjekt in den Writer.
|
CopyElement(uint64_t tag, TLVReader & reader)
|
|
EndContainer(TLVType outerContainerType)
|
Schließen Sie die Codierung eines TLV-Containerelements ab.
|
Finalize(void)
|
Beenden Sie das Schreiben einer TLV-Codierung.
|
GetContainerType(void) const
|
Gibt den Containertyp zurück, in dem der TLVWriter gerade schreibt.
|
GetLengthWritten(void)
|
uint32_t
Gibt die Gesamtzahl der Byte zurück, die seit der Initialisierung des Writers geschrieben wurden.
|
Init(uint8_t *buf, uint32_t maxLen)
|
void
Initialisiert ein TLVWriter-Objekt, das in einen einzelnen Ausgabepuffer geschrieben wird.
|
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 vorzeichenbehafteten TLV-Ganzzahlwert.
|
Put(uint64_t tag, int8_t v, bool preserveSize)
|
Codiert einen vorzeichenbehafteten TLV-Ganzzahlwert.
|
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 vorzeichenlosen TLV-Ganzzahlwert.
|
Put(uint64_t tag, uint8_t v, bool preserveSize)
|
Codiert einen vorzeichenlosen TLV-Ganzzahlwert.
|
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-Bytestring-Wert.
|
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 einer vorcodierten Gruppe 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 mit der 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)
|
Eine 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 Puffer.
|
GetNewPacketBuffer(TLVWriter & writer, uintptr_t & bufHandle, uint8_t *& bufStart, uint32_t & bufLen)
|
Eine Implementierung der Funktion TLVWriter GetNewBuffer zum Schreiben in eine Kette von PacketBuffers.
|
Geschützte Funktionen |
|
---|---|
IsCloseContainerReserved(void) const
|
bool
Legen Sie fest, ob der Container Platz für das CloseContainer-Symbol an der Stelle reservieren soll, an der der Container gestartet bzw. geöffnet wird.
|
IsContainerOpen(void) const
|
bool
|
SetCloseContainerReserved(bool aCloseContainerReserved)
|
void
Legt fest, ob der Container am Anfang bzw. beim Ö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, die verwendet wird, um die Ausgabe eines TLVWriter-Objekts abzuschließen.
Funktionen dieses Typs werden aufgerufen, wenn die Methode Finalize() eines TLVWriter aufgerufen wird. Es wird erwartet, dass die Funktion alle erforderlichen Bereinigungen oder Finalisierungen im Zusammenhang mit der Nutzung der Ausgabe des Writer-Objekts durchführt. Beispiele hierfür sind das Aufzeichnen der endgültigen Länge der Codierung oder das Schließen eines Dateideskriptors.
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 Ausgabepufferspeicherplatz bereitstellt.
Funktionen dieses Typs werden verwendet, um neuen Pufferbereich vorzubereiten, in den ein TLVWriter schreiben kann. Wenn die Funktion aufgerufen wird, wird erwartet, dass sie einen Zeiger zu einer Speicherstelle zurückgibt, an der neue Daten geschrieben werden sollen, zusammen mit einer zugehörigen maximalen Länge. Die Funktion kann Schreibspeicherplatz entweder durch Zuweisen eines neuen Puffers zur Aufnahme der Daten oder durch Löschen zuvor geschriebener Daten aus einem vorhandenen Puffer bereitstellen.
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 beim Abschluss von TLVWriter aufgerufen wird.
Ein TLVWriter-Objekt ruft die FinalizeBuffer-Funktion bei jedem Aufruf seiner Finalize()-Methode auf. Anwendungen können den Funktionszeiger jederzeit vor dem Aufruf von Finalize() setzen. Standardmäßig ist der Zeiger auf NULL gesetzt, wodurch die Funktion Finalize() nicht mehr aufgerufen wird.
Weitere Informationen zur Implementierung der Funktion FinalizeBuffer finden Sie in der Definition des Typs FinalizeBufferFunct.
GetNewBuffer
GetNewBufferFunct GetNewBuffer
Ein Zeiger auf eine Funktion, die einem TLVWriter neuen Ausgabepufferplatz bereitstellt.
Ein TLVWriter-Objekt ruft die GetNewBuffer-Funktion immer dann auf, wenn versucht wird, Daten zu schreiben, die die Größe des aktuellen Ausgabepuffers überschreiten. Wenn der Wert auf NULL gesetzt ist (Standardwert), gibt der Schreiber den Fehler WEAVE_ERROR_NO_MEMORY zurück, wenn die Ausgabedaten den aktuellen Puffer überlaufen.
GetNewBuffer kann jederzeit von einer Anwendung festgelegt werden, wird jedoch normalerweise bei der Initialisierung des Writers festgelegt.
Weitere Informationen zur Implementierung der GetNewBuffer-Funktion finden Sie in der Typdefinition GetNewBufferFunct.
ImplicitProfileId
uint32_t ImplicitProfileId
Die Profil-ID von Tags, die implizit codiert werden sollten.
Wenn ein Autor aufgefordert wird, ein neues Element zu codieren, und die Profil-ID des Tags, das mit dem neuen Element verknüpft ist, mit dem Wert des ImplicitProfileId
-Mitglieds übereinstimmt, codiert der Autor das Tag implizit und lässt dabei die Profil-ID aus.
Standardmäßig ist die Eigenschaft ImplicitProfileId
auf „kProfileIdNot Specific“ gesetzt. Dadurch wird der Autor angewiesen, keine implizit codierten Tags auszugeben. In Anwendungen kann ImplicitProfileId
jederzeit festgelegt werden, um Codierungs-Tags in impliziter Form ab dem aktuellen Punkt der Codierung zu aktivieren. Die geeignete Profil-ID hängt normalerweise vom Kontext der gesprochenen 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 )
Vervollständigt das Schreiben eines TLV-Containers nach einem Aufruf von OpenContainer().
Die CloseContainer()-Methode 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. Dabei wird ein Verweis auf denselben Container-Writer an beide Methoden übergeben.
Wenn CloseContainer() zurückgegeben wird, verwenden Anwendungen möglicherweise weiterhin den übergeordneten Writer, um zusätzliche TLV-Elemente zu schreiben, die nach dem Containerelement erscheinen. Zu diesem Zeitpunkt sollte der bereitgestellte Container-Writer als "deinitialisiert" betrachtet werden und darf nicht ohne erneute Initialisierung verwendet werden.
Details | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||||||
Rückgabewerte |
|
ContinuePutBytes
WEAVE_ERROR ContinuePutBytes( const uint8_t *buf, uint32_t len )
Codiert einen TLV-Bytestring-Wert.
Dieser 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 vorcodiertes 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ückkehrt, kann das Writer-Objekt 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 einer vorcodierten Gruppe von Mitgliedselementen.
Die CopyContainer()-Methode codiert ein neues TLV-Containerelement (eine Struktur, ein Array oder einen Pfad), das eine Reihe von Mitgliedselementen aus einem TLVReader-Objekt enthält. Beim Aufruf der Methode wird erwartet, dass sich das bereitgestellte Leseobjekt auf einem TLV-Containerelement befindet. 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ückkehrt, kann das Writer-Objekt 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 Mitgliedselemente aus einem vorcodierten Container enthält.
Die Methode CopyContainer() codiert ein neues TLV-Containerelement (eine Struktur, ein Array oder einen Pfad), das eine Reihe von Elementelementen enthält, die aus dem Inhalt eines bereitgestellten vorcodierten 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ückkehrt, kann das Writer-Objekt 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 Leseobjekt in den Writer.
Die CopyElement()-Methode 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 im TLV-Quellelement positioniert ist. Das neu codierte Element hat denselben Typ, dasselbe Tag und denselben Inhalt wie der Eingabecontainer. Wenn das bereitgestellte 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 )
Schließen Sie die Codierung eines TLV-Containerelements ab.
Die EndContainer()-Methode 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()-Anwendungen muss ein entsprechender Aufruf an EndContainer() erfolgen und der vom StartContainer()-Aufruf zurückgegebene TLVType-Wert übergeben werden. Wenn EndContainer() zurückgibt, kann das Writer-Objekt verwendet werden, um zusätzliche TLV-Elemente zu schreiben, die auf das Containerelement folgen.
Details | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||||||
Rückgabewerte |
|
Abschließen
WEAVE_ERROR Finalize( void )
Beenden Sie das Schreiben einer TLV-Codierung.
Mit der Methode Finalize() wird das Schreiben einer TLV-Codierung in den zugrunde liegenden Ausgabepuffer abgeschlossen. Die Methode muss von der Anwendung aufgerufen werden, bevor der Inhalt des Puffers verwendet wird. Finalize() kann nur aufgerufen werden, wenn für den aktuellen Autor keine Container-Writer geöffnet sind. (siehe OpenContainer()
).
Details | |||||||
---|---|---|---|---|---|---|---|
Rückgabewerte |
|
GetContainerType
TLVType GetContainerType( void ) const
Gibt den Containertyp zurück, in dem der TLVWriter gerade schreibt.
Die GetContainerType()-Methode gibt den Typ des TLV-Containers zurück, in dem der TLVWriter gerade schreibt. Wenn der TLVWriter keine Elemente in einen Container schreibt (d.h. auf die äußerste Ebene einer Codierung), gibt die Methode "kTLVType_Not Specific" zurück.
Details | |
---|---|
Rückgabe |
Der TLVType des aktuellen Containers oder kTLVType_NotSpecific, wenn der TLVWriter keine Elemente in einen Container schreibt.
|
GetLengthWritten
uint32_t GetLengthWritten( void )
Gibt die Gesamtzahl der Byte zurück, die seit der Initialisierung des Writers geschrieben wurden.
Details | |
---|---|
Rückgabe |
Gesamtzahl der Byte, die seit der Initialisierung des Writers 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 vorhandener 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 vorhandener Daten im angegebenen Zwischenspeicher. Wenn allowDiscontiguousBuffers
„true“ ist, werden zusätzliche PacketBuffers zugewiesen und nach Bedarf mit dem bereitgestellten Zwischenspeicher verkettet, um die Menge der geschriebenen Daten aufzunehmen. Wenn der angegebene Ausgabepuffer bereits der Anfang einer Pufferkette ist, wird die Ausgabe in die nachfolgenden Puffer in der Kette geschrieben, bevor neue Puffer zugewiesen 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 OpenContainer()-Methode wird verwendet, um TLV-Containerelemente (Struktur, 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 initialisiert wird, um die Elemente des Containers zu schreiben. Anwendungen schreiben die Mitglieder des neuen Containers mithilfe des Container-Writers und rufen dann CloseContainer() auf, um die Containercodierung abzuschließen.
Solange der Container-Writer geöffnet ist, dürfen Anwendungen den übergeordneten Writer nicht aufrufen oder seinen Status nicht anderweitig ändern.
Der Container-Writer übernimmt verschiedene Konfigurationseigenschaften vom übergeordneten Writer. Diese sind:
- Die implizite Profil-ID (ImplicitProfileId)
- Anwendungsdatenzeiger (AppData)
- Die Funktionszeiger GetNewBuffer und FinalizeBuffer
Details | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||||||||
Rückgabewerte |
|
Best Practices
WEAVE_ERROR Put( uint64_t tag, int8_t v )
Codiert einen vorzeichenbehafteten TLV-Ganzzahlwert.
Dies ist eine überlastete Member-Funktion, die der Einfachheit halber dient. Sie unterscheidet sich von der obigen Funktion nur durch die akzeptierten Argumente.
Details | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||||||
Rückgabewerte |
|
Best Practices
WEAVE_ERROR Put( uint64_t tag, int8_t v, bool preserveSize )
Codiert einen vorzeichenbehafteten TLV-Ganzzahlwert.
Dies ist eine überlastete Member-Funktion, die der Einfachheit halber dient. Sie unterscheidet sich von der obigen Funktion nur durch die akzeptierten Argumente.
Details | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||||||
Rückgabewerte |
|
Best Practices
WEAVE_ERROR Put( uint64_t tag, int16_t v )
Best Practices
WEAVE_ERROR Put( uint64_t tag, int16_t v, bool preserveSize )
Best Practices
WEAVE_ERROR Put( uint64_t tag, int32_t v )
Best Practices
WEAVE_ERROR Put( uint64_t tag, int32_t v, bool preserveSize )
Best Practices
WEAVE_ERROR Put( uint64_t tag, int64_t v )
Best Practices
WEAVE_ERROR Put( uint64_t tag, int64_t v, bool preserveSize )
Best Practices
WEAVE_ERROR Put( uint64_t tag, uint8_t v )
Codiert einen vorzeichenlosen TLV-Ganzzahlwert.
Dies ist eine überlastete Member-Funktion, die der Einfachheit halber dient. Sie unterscheidet sich von der obigen Funktion nur durch die akzeptierten Argumente.
Details | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||||||
Rückgabewerte |
|
Best Practices
WEAVE_ERROR Put( uint64_t tag, uint8_t v, bool preserveSize )
Codiert einen vorzeichenlosen TLV-Ganzzahlwert.
Dies ist eine überlastete Member-Funktion, die der Einfachheit halber dient. Sie unterscheidet sich von der obigen Funktion nur durch die akzeptierten Argumente.
Details | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||||||
Rückgabewerte |
|
Best Practices
WEAVE_ERROR Put( uint64_t tag, uint16_t v )
Best Practices
WEAVE_ERROR Put( uint64_t tag, uint16_t v, bool preserveSize )
Best Practices
WEAVE_ERROR Put( uint64_t tag, uint32_t v )
Best Practices
WEAVE_ERROR Put( uint64_t tag, uint32_t v, bool preserveSize )
Best Practices
WEAVE_ERROR Put( uint64_t tag, uint64_t v )
Best Practices
WEAVE_ERROR Put( uint64_t tag, uint64_t v, bool preserveSize )
Best Practices
WEAVE_ERROR Put( uint64_t tag, float v )
Best Practices
WEAVE_ERROR Put( uint64_t tag, double v )
Codiert einen TLV-Gleitkommawert.
Dies ist eine überlastete Member-Funktion, die der Einfachheit halber dient. Sie unterscheidet sich von der obigen Funktion nur durch die akzeptierten Argumente.
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-Bytestring-Wert.
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 einer vorcodierten Gruppe von Mitgliedselementen.
Die Methode PutPreEncodedContainer() codiert ein neues TLV-Containerelement (eine Struktur, ein Array oder einen Pfad), das eine Reihe von Mitgliederelementen aus einem vorcodierten Zwischenspeicher enthält. Der Eingabezwischenspeicher sollte null oder mehr vollständig codierte TLV-Elemente mit Tags enthalten, die den Regeln für den angegebenen Containertyp entsprechen (z.B. müssen Strukturmitglieder Tags haben, Array-Mitglieder nicht).
Die Methode codiert das gesamte Containerelement in einem Aufruf. Wenn PutPreEncodedContainer() zurückgibt, kann das Schreibobjekt verwendet werden, um zusätzliche TLV-Elemente zu schreiben, die auf das Containerelement folgen.
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 einer „sprintf“, bei der die Ausgabe in einem TLV-Element und nicht in einem Zeichenzwischenspeicher gespeichert wird. Wenn die erweiterte printf-Funktionalität verfügbar ist, kann die Funktion den Ergebnisstring 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, einen benutzerdefinierten Callback anstelle von „putchar“ aufzurufen.
Die Plattform stellt eine Variante von vsnprintf
mit dem Namen vsnprintf_ex
bereit, die sich genauso verhält wie vsnprintf, nur dass die ersten n
-Zeichen der Ausgabe fehlen können.
Beachten Sie, dass die Callback-basierte Funktion zwar die einfachste Funktion ist und am wenigsten Code verwendet, die Funktion vsprintf_ex
verbraucht jedoch weniger Stack.
Wenn keine der oben genannten Optionen verfügbar ist, die Plattform aber malloc
bereitstellt, weist die Funktion einen temporären Puffer für die Ausgabe zu. Wenn die Plattform weder Verbesserungen für die printf-Familie noch für Malloc bereitstellt, wird die Ausgabe abgeschnitten, damit sie in den kontinuierlichen Zustand in den aktuellen TLV-Speicher passt.
Details | |||||||
---|---|---|---|---|---|---|---|
Parameter |
|
||||||
Rückgabewerte |
|
StartContainer
WEAVE_ERROR StartContainer( uint64_t tag, TLVType containerType, TLVType & outerContainerType )
Beginnt mit der Codierung eines neuen TLV-Containerelements.
Die Methode StartContainer() wird verwendet, um TLV-Containerelemente (Struktur, 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, mit dem der aktuelle Kontext des Writers gespeichert wird, 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.
Dies 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 einer „sprintf“, bei der die Ausgabe in einem TLV-Element und nicht in einem Zeichenzwischenspeicher gespeichert wird. Wenn die erweiterte printf-Funktionalität verfügbar ist, kann die Funktion den Ergebnisstring 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, einen benutzerdefinierten Callback anstelle von „putchar“ aufzurufen.
Die Plattform stellt eine Variante von vsnprintf
mit dem Namen vsnprintf_ex
bereit, die sich genauso verhält wie vsnprintf, nur dass die ersten n
-Zeichen der Ausgabe fehlen können.
Beachten Sie, dass die Callback-basierte Funktion zwar die einfachste Funktion ist und am wenigsten Code verwendet, die Funktion vsprintf_ex
verbraucht jedoch weniger Stack.
Wenn keine der oben genannten Optionen verfügbar ist, die Plattform aber malloc
bereitstellt, weist die Funktion einen temporären Puffer für die Ausgabe zu. Wenn die Plattform weder Verbesserungen für die printf-Familie noch für Malloc bereitstellt, wird die Ausgabe abgeschnitten, damit sie in den kontinuierlichen Zustand in den 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 )
Eine Implementierung der Funktion TLVWriter FinalizeBuffer zum Schreiben in eine Kette von PacketBuffers.
Die Funktion FinalizePacketBuffer() führt die erforderliche Finalisierung aus, die erforderlich ist, wenn ein TLVWriter verwendet wird, um in eine Kette von PacketBuffers zu schreiben. Die Funktion ist zur Verwendung in Verbindung mit der Funktion GetNewPacketBuffer() vorgesehen.
Weitere Informationen zur API der Funktion FinalizePacketBuffer() finden Sie in der Definition des Typs „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 Puffer.
Die Funktion GetNewBuffer_Malloced() liefert neuen Ausgaberaum für einen TLVWriter, indem sie die Größe des zugrunde liegenden dynamischen Puffers nach Bedarf verdoppelt, um die Codierung zu speichern. Die Funktion sollte dem Funktionszeiger TLVWriter GetNewBuffer zugewiesen werden.
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 )
Eine Implementierung der Funktion TLVWriter GetNewBuffer zum Schreiben in eine Kette von PacketBuffers.
Die Funktion GetNewPacketBuffer() stellt einem TLVWriter neuen Ausgaberaum bereit, indem sie nach Bedarf eine Kette aus einem oder mehreren PacketBuffers zur Speicherung der Codierung zuweist. Die Funktion sollte dem Funktionszeiger TLVWriter GetNewBuffer zugewiesen werden.
Hinweis: Wenn Sie GetNewPacketBuffer mit einem TLVWriter verwenden, sollte auch die entsprechende FinalizePacketBuffer()-Funktion (oder eine Entsprechung) verwendet werden, um die Pufferkette abzuschließen.
Weitere Informationen zur API der Funktion GetNewPacketBuffer() finden Sie in der Typdefinition "GetNewBufferFunct".
Geschützte Funktionen
IsCloseContainerReserved
bool IsCloseContainerReserved( void ) const
Legen Sie fest, ob der Container Platz für das CloseContainer-Symbol an der Stelle reservieren soll, an der der Container gestartet bzw. geöffnet wird.
IsContainerOpen
bool IsContainerOpen( void ) const
SetCloseContainerReserved
void SetCloseContainerReserved( bool aCloseContainerReserved )
Legt fest, ob der Container am Anfang bzw. beim Ö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 )