nl::Weave::TLV::TLVWriter

#include <src/lib/core/WeaveTLV.h>

Fornisce un codificatore efficiente in termini di memoria per la scrittura di dati in formato Weave TLV.

Riepilogo

TLVWriter implementa un codificatore di tipo flusso di solo forwarding per i dati Weave TLV. Le applicazioni scrivono dati in una codifica chiamando uno dei metodi Put() dell'autore, passando le informazioni sui tag e sui valori associati in base alle esigenze. Analogamente, le applicazioni possono codificare i tipi di container TLV (strutture, array o percorsi) chiamando i metodi OpenContainer() o EnterContainer() dell'autore.

Un oggetto TLVWriter può scrivere dati direttamente in un buffer di output fisso o in una catena di uno o più oggetti PacketBuffer. Inoltre, le applicazioni possono fornire le proprie funzioni GetNewBuffer e FinalizeBuffer per indirizzare l'output a una destinazione arbitraria, ad esempio un socket o una coda di eventi.

Eredità

Sottoclassi note dirette: nl::Weave::TLV::CircularTLVWriter

Tipi protetti

@72{
  kEndOfContainerMarkerSize = 1
}
enum

Tipi pubblici

FinalizeBufferFunct)(TLVWriter &writer, uintptr_t bufHandle, uint8_t *bufStart, uint32_t bufLen) WEAVE_ERROR(*
Funzione utilizzata per eseguire la finalizzazione dell'output da un oggetto TLVWriter.
GetNewBufferFunct)(TLVWriter &writer, uintptr_t &bufHandle, uint8_t *&bufStart, uint32_t &bufLen) WEAVE_ERROR(*
Una funzione che fornisce nuovo spazio di buffer di output a un TLVWriter.

Attributi pubblici

AppData
void *
Un campo puntatore che può essere utilizzato per dati specifici dell'applicazione.
FinalizeBuffer
Un puntatore a una funzione che verrà chiamata quando TLVWriter viene finalizzato.
GetNewBuffer
Un puntatore a una funzione che fornirà un nuovo spazio di buffer di output a un TLVWriter.
ImplicitProfileId
uint32_t
L'ID profilo dei tag che deve essere codificato in forma implicita.

Attributi protetti

mBufHandle
uintptr_t
mBufStart
uint8_t *
mContainerType
mLenWritten
uint32_t
mMaxLen
uint32_t
mRemainingLen
uint32_t
mWritePoint
uint8_t *

Funzioni pubbliche

CloseContainer(TLVWriter & containerWriter)
Completa la scrittura di un container TLV dopo una chiamata a OpenContainer().
ContinuePutBytes(const uint8_t *buf, uint32_t len)
Codifica un valore di stringa di byte TLV.
CopyContainer(TLVReader & container)
Copia un elemento container TLV dall'oggetto TLVReader.
CopyContainer(uint64_t tag, TLVReader & container)
Codifica un elemento container TLV da un insieme precodificato di elementi membro.
CopyContainer(uint64_t tag, const uint8_t *encodedContainer, uint16_t encodedContainerLen)
Codifica un elemento container TLV che contiene gli elementi membro di un container precodificato.
CopyElement(TLVReader & reader)
Copia un elemento TLV da un oggetto reader nell'autore.
CopyElement(uint64_t tag, TLVReader & reader)
EndContainer(TLVType outerContainerType)
Completa la codifica di un elemento contenitore TLV.
Finalize(void)
Completa la scrittura di una codifica TLV.
GetContainerType(void) const
Restituisce il tipo di container all'interno del quale TLVWriter sta attualmente scrivendo.
GetLengthWritten(void)
uint32_t
Restituisce il numero totale di byte scritti da quando il writer è stato inizializzato.
Init(uint8_t *buf, uint32_t maxLen)
void
Inizializza un oggetto TLVWriter da scrivere in un singolo buffer di output.
Init(PacketBuffer *buf, uint32_t maxLen)
void
Inizializza un oggetto TLVWriter da scrivere in un singolo PacketBuffer.
Init(PacketBuffer *buf, uint32_t maxLen, bool allowDiscontiguousBuffers)
void
Inizializza un oggetto TLVWriter per scrivere in uno o più PacketBuffer.
InitMalloced(uint8_t *& outBuf, uint32_t initialBufSize, uint32_t maxLen)
void
Inizializza un oggetto TLVWriter da scrivere in un buffer dinamico.
OpenContainer(uint64_t tag, TLVType containerType, TLVWriter & containerWriter)
Inizializza un nuovo oggetto TLVWriter per la scrittura dei membri di un elemento container TLV.
Put(uint64_t tag, int8_t v)
Codifica un valore intero con segno TLV.
Put(uint64_t tag, int8_t v, bool preserveSize)
Codifica un valore intero con segno TLV.
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)
Codifica un valore intero senza segno TLV.
Put(uint64_t tag, uint8_t v, bool preserveSize)
Codifica un valore intero senza segno TLV.
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)
Codifica un valore in virgola mobile TLV.
PutBoolean(uint64_t tag, bool v)
Codifica un valore booleano TLV.
PutBytes(uint64_t tag, const uint8_t *buf, uint32_t len)
Codifica un valore di stringa di byte TLV.
PutNull(uint64_t tag)
Codifica un valore null TLV.
PutPreEncodedContainer(uint64_t tag, TLVType containerType, const uint8_t *data, uint32_t dataLen)
Codifica un elemento container TLV da un insieme precodificato di elementi membro.
PutString(uint64_t tag, const char *buf)
Codifica un valore stringa UTF8 TLV.
PutString(uint64_t tag, const char *buf, uint32_t len)
Codifica un valore stringa UTF8 TLV.
PutStringF(uint64_t tag, const char *fmt, ...)
Codifica l'output della stringa formattato in base al formato dell'elemento TLV.
StartContainer(uint64_t tag, TLVType containerType, TLVType & outerContainerType)
Inizia la codifica di un nuovo elemento contenitore TLV.
StartPutBytes(uint64_t tag, uint32_t totalLen)
Codifica una stringa di byte TLV in più blocchi.
VPutStringF(uint64_t tag, const char *fmt, va_list ap)
Codifica l'output della stringa formattato in base al formato dell'elemento TLV.

Funzioni statiche pubbliche

FinalizePacketBuffer(TLVWriter & writer, uintptr_t bufHandle, uint8_t *bufStart, uint32_t dataLen)
Un'implementazione di una funzione FinalizeBuffer TLVWriter per la scrittura in una catena di PacketBuffers.
GetNewBuffer_Malloced(TLVWriter & writer, uintptr_t & bufHandle, uint8_t *& bufStart, uint32_t & bufLen)
Un'implementazione di una funzione GetNewBuffer TLVWriter per la scrittura in un buffer dinamico.
GetNewPacketBuffer(TLVWriter & writer, uintptr_t & bufHandle, uint8_t *& bufStart, uint32_t & bufLen)
Un'implementazione di una funzione GetNewBuffer TLVWriter per la scrittura in una catena di PacketBuffers.

Funzioni protette

IsCloseContainerReserved(void) const
bool
Stabilisci se il container deve riservare spazio per il simbolo di CloseContainer nel punto di avvio / apertura del container.
IsContainerOpen(void) const
bool
SetCloseContainerReserved(bool aCloseContainerReserved)
void
Consente di specificare se il contenitore deve riservare lo spazio per il simbolo di CloseContainer nel punto di avvio / apertura del contenitore.
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)

Tipi protetti

@72

 @72

Tipi pubblici

FinalizeBufferFunct

WEAVE_ERROR(* FinalizeBufferFunct)(TLVWriter &writer, uintptr_t bufHandle, uint8_t *bufStart, uint32_t bufLen)

Funzione utilizzata per eseguire la finalizzazione dell'output da un oggetto TLVWriter.

Le funzioni di questo tipo vengono richiamate quando viene richiamato il metodo Finalize() di un TLVWriter. La funzione dovrebbe eseguire le operazioni di pulizia o finalizzazione necessarie per consumare l'output dell'oggetto writer. Alcuni esempi includono la registrazione della lunghezza finale della codifica o la chiusura di un descrittore di file.

Dettagli
Parametri
[in] writer
Un riferimento all'oggetto TLVWriter in fase di finalizzazione.
[in,out] bufHandle
Un valore di contesto uintptr_t impostato dalle chiamate precedenti alla funzione GetNewBuffer.
[in,out] bufStart
Un puntatore all'inizio del buffer di output corrente (e finale).
[in,out] bufLen
Il numero di byte contenuti nel buffer a cui punta bufStart.
Valori restituiti
WEAVE_NO_ERROR
Se il completamento del processo è riuscito.
other
Altri codici di errore Weave o specifici della piattaforma che indicano che si è verificato un errore durante la finalizzazione.

GetNewBufferFunct

WEAVE_ERROR(* GetNewBufferFunct)(TLVWriter &writer, uintptr_t &bufHandle, uint8_t *&bufStart, uint32_t &bufLen)

Una funzione che fornisce nuovo spazio di buffer di output a un TLVWriter.

Le funzioni di questo tipo vengono utilizzate per preparare un nuovo spazio di buffer in cui un TLVWriter possa scrivere. Quando viene chiamata, la funzione dovrebbe restituire un puntatore a una posizione di memoria in cui devono essere scritti nuovi dati, insieme alla lunghezza massima associata. La funzione può fornire spazio di scrittura allocando un nuovo buffer per contenere i dati o cancellando i dati scritti in precedenza da un buffer esistente.

Dettagli
Parametri
[in] writer
Un riferimento all'oggetto TLVWriter che richiede un nuovo spazio nel buffer.
[in,out] bufHandle
Un riferimento a un valore uintptr_t che la funzione può utilizzare per archiviare dati di contesto tra le chiamate. Questo valore è inizializzato su 0 prima della prima chiamata.
[in,out] bufStart
Un riferimento a un puntatore ai dati. All'ingresso della funzione, bufStart indica l'inizio del buffer di output attuale. All'uscita, bufStart dovrebbe puntare all'inizio del nuovo buffer di output. Il nuovo valore del puntatore può essere uguale al valore precedente (ad es. se la funzione ha copiato i dati esistenti altrove) oppure può puntare a una posizione completamente nuova.
[in,out] bufLen
Un riferimento a un numero intero senza segno. Alla voce della funzione, bufLen contiene il numero di byte di spazio inutilizzato nel buffer attuale. All'uscita, bufLen dovrebbe contenere il numero massimo di byte che possono essere scritti nel nuovo buffer di output.
Valori restituiti
WEAVE_NO_ERROR
Se la funzione è riuscita a fornire più spazio di buffer per il writer.
other
Altri codici di errore Weave o specifici della piattaforma che indicano che si è verificato un errore che impedisce alla funzione di produrre ulteriore spazio di buffer.

Attributi pubblici

AppData

void * AppData

Un campo puntatore che può essere utilizzato per dati specifici dell'applicazione.

FinalizeBuffer

FinalizeBufferFunct FinalizeBuffer

Un puntatore a una funzione che verrà chiamata quando TLVWriter viene finalizzato.

Un oggetto TLVWriter chiama la funzione FinalizeBuffer ogni volta che viene chiamato il metodo Finalize(). Le applicazioni possono impostare il puntatore della funzione in qualsiasi momento prima di chiamare Finalize(). Per impostazione predefinita il puntatore è impostato su NULL, perciò il metodo Finalize() rinuncia a chiamare la funzione.

Per ulteriori informazioni sull'implementazione di una funzione FinalizeBuffer, consulta la definizione del tipo FinalizeBufferFunct.

GetNewBuffer

GetNewBufferFunct GetNewBuffer

Un puntatore a una funzione che fornirà un nuovo spazio di buffer di output a un TLVWriter.

Un oggetto TLVWriter chiama la funzione GetNewBuffer ogni volta che si tenta di scrivere dati che superano le dimensioni del buffer di output attuale. Se impostato su NULL (valore predefinito), il writer restituirà un messaggio di errore WEAVE_ERROR_NO_MEMORY se i dati di uscita superano il buffer corrente.

GetNewBuffer può essere impostato da un'applicazione in qualsiasi momento, ma in genere viene impostato al momento dell'inizializzazione del writer.

Consulta la definizione del tipo GetNewBufferFunct per ulteriori informazioni sull'implementazione di una funzione GetNewBuffer.

ImplicitProfileId

uint32_t ImplicitProfileId

L'ID profilo dei tag che deve essere codificato in forma implicita.

Quando a un autore viene chiesto di codificare un nuovo elemento, se l'ID profilo del tag associato al nuovo elemento corrisponde al valore del membro ImplicitProfileId, l'autore codifica il tag in forma implicita, omettendo l'ID profilo durante la procedura.

Per impostazione predefinita, la proprietà ImplicitProfileId è impostata su kProfileIdNot specifichi, che indica all'autore di non emettere tag con codifica implicita. Le applicazioni possono impostare ImplicitProfileId in qualsiasi momento per attivare i tag di codifica in forma implicita a partire dal punto corrente della codifica. L'ID profilo appropriato da impostare dipende solitamente dal contesto dell'applicazione o del protocollo pronunciato.

Attributi protetti

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

Funzioni pubbliche

CloseContainer

WEAVE_ERROR CloseContainer(
  TLVWriter & containerWriter
)

Completa la scrittura di un container TLV dopo una chiamata a OpenContainer().

Il metodo CloseContainer() ripristina lo stato di un oggetto TLVWriter padre dopo una chiamata a OpenContainer(). Per ogni chiamata alle applicazioni OpenContainer() deve effettuare una chiamata corrispondente a CloseContainer(), passando un riferimento allo stesso writer container per entrambi i metodi.

Quando viene restituito CloseContainer(), le applicazioni possono continuare a utilizzare l'autore principale per scrivere altri elementi TLV che vengono visualizzati dopo l'elemento container. A questo punto, il writer del container fornito deve essere considerato "de-inizializzato" e non deve essere utilizzato senza reinizializzazione.

Dettagli
Parametri
[in] containerWriter
Un riferimento all'oggetto TLVWriter fornito al metodo OpenContainer().
Valori restituiti
WEAVE_NO_ERROR
Se il metodo è riuscito.
WEAVE_ERROR_INCORRECT_STATE
Se il writer del container fornito non è nello stato corretto.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Se un altro writer di container è stato aperto sul writer container fornito e non è ancora stato chiuso.
WEAVE_ERROR_BUFFER_TOO_SMALL
Se il completamento della codifica del container supererebbe il limite del numero massimo di byte specificato al momento dell'inizializzazione del writer.
WEAVE_ERROR_NO_MEMORY
Se un tentativo di allocare un buffer di output non è riuscito a causa della mancanza di memoria.
other
Altri errori Weave o specifici della piattaforma restituiti dalle funzioni GetNewBuffer() o FinalizeBuffer() configurate.

ContinuePutBytes

WEAVE_ERROR ContinuePutBytes(
  const uint8_t *buf,
  uint32_t len
)

Codifica un valore di stringa di byte TLV.

Deve essere utilizzato con StartPutBytes.

Dettagli
Parametri
[in] buf
Un puntatore a un buffer contenente la stringa di byte da codificare.
[in] len
Il numero di byte da codificare.
Valori restituiti
WEAVE_NO_ERROR
Se il metodo è riuscito.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Se un writer di container è stato aperto sull'autore corrente e non è ancora chiuso.
WEAVE_ERROR_INVALID_TLV_TAG
Se il valore del tag specificato non è valido o non è appropriato nel contesto in cui è stato scritto.
WEAVE_ERROR_BUFFER_TOO_SMALL
Se la scrittura del valore supererebbe il limite massimo di byte specificato al momento dell'inizializzazione del writer.
WEAVE_ERROR_NO_MEMORY
Se un tentativo di allocare un buffer di output non è riuscito a causa della mancanza di memoria.
other
Altri errori Weave o specifici della piattaforma restituiti dalle funzioni GetNewBuffer() o FinalizeBuffer() configurate.

CopyContainer

WEAVE_ERROR CopyContainer(
  TLVReader & container
)

Copia un elemento container TLV dall'oggetto TLVReader.

Il metodo CopyContainer() codifica un nuovo elemento container TLV copiando un elemento container precodificato situato nella posizione corrente di un oggetto TLVReader. Il metodo scrive l'intero nuovo elemento contenitore in un'unica chiamata, copiando il tipo, il tag e gli elementi del contenitore dalla codifica di origine. Quando il metodo restituisce, l'oggetto writer può essere utilizzato per scrivere elementi TLV aggiuntivi che seguono l'elemento container.

Dettagli
Parametri
[in] container
Un riferimento a un oggetto TLVReader che identifica il container TLV precodificato da copiare.
Valori restituiti
WEAVE_NO_ERROR
Se il metodo è riuscito.
WEAVE_ERROR_INCORRECT_STATE
Se il lettore fornito non è posizionato su un elemento contenitore.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Se un writer di container è stato aperto sull'autore corrente e non è ancora chiuso.
WEAVE_ERROR_TLV_UNDERRUN
Se la codifica TLV sottostante associata al lettore fornito è terminata prematuramente.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Se il lettore fornito ha riscontrato un tipo di elemento TLV non valido o non supportato.
WEAVE_ERROR_INVALID_TLV_TAG
Se il lettore fornito ha riscontrato un tag TLV in un contesto non valido o se il tag associato al contenitore di origine non è valido o è inappropriato nel contesto in cui viene scritto il nuovo contenitore.
WEAVE_ERROR_BUFFER_TOO_SMALL
Se la scrittura del valore supererebbe il limite massimo di byte specificato al momento dell'inizializzazione del writer.
WEAVE_ERROR_NO_MEMORY
Se un tentativo di allocare un buffer di output non è riuscito a causa della mancanza di memoria.
other
Altri errori Weave o specifici della piattaforma restituiti dalle funzioni GetNewBuffer() o FinalizeBuffer() configurate oppure dalla funzione GetNextBuffer() associata all'oggetto reader.

CopyContainer

WEAVE_ERROR CopyContainer(
  uint64_t tag,
  TLVReader & container
)

Codifica un elemento container TLV da un insieme precodificato di elementi membro.

Il metodo CopyContainer() codifica un nuovo elemento contenitore TLV (una struttura, un array o un percorso) che contiene un insieme di elementi membri acquisiti da un oggetto TLVReader. Quando il metodo viene chiamato, l'oggetto Reader fornito dovrebbe trovarsi su un elemento container TLV. Il contenitore appena codificato avrà lo stesso tipo e gli stessi membri del contenitore di input. Il tag per il nuovo contenitore viene specificato come parametro di input.

Quando il metodo restituisce, l'oggetto writer può essere utilizzato per scrivere elementi TLV aggiuntivi che seguono l'elemento container.

Dettagli
Parametri
[in] tag
Il tag TLV da codificare con il container oppure AnonymousTag se il container deve essere codificato senza tag. I valori di tag devono essere creati con una delle funzioni di definizione dei tag ProfileTag(), ContextTag() o CommonTag().
[in] container
Un riferimento a un oggetto TLVReader che identifica un container TLV precodificato di cui copiare tipo e membri.
Valori restituiti
WEAVE_NO_ERROR
Se il metodo è riuscito.
WEAVE_ERROR_INCORRECT_STATE
Se il lettore fornito non è posizionato su un elemento contenitore.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Se un writer di container è stato aperto sull'autore corrente e non è ancora chiuso.
WEAVE_ERROR_TLV_UNDERRUN
Se la codifica TLV sottostante associata al lettore fornito è terminata prematuramente.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Se il lettore fornito ha riscontrato un tipo di elemento TLV non valido o non supportato.
WEAVE_ERROR_INVALID_TLV_TAG
Se il lettore fornito ha riscontrato un tag TLV in un contesto non valido o se non è valido o è inappropriato nel contesto in cui è stato scritto il nuovo contenitore.
WEAVE_ERROR_BUFFER_TOO_SMALL
Se la scrittura del valore supererebbe il limite massimo di byte specificato al momento dell'inizializzazione del writer.
WEAVE_ERROR_NO_MEMORY
Se un tentativo di allocare un buffer di output non è riuscito a causa della mancanza di memoria.
other
Altri errori Weave o specifici della piattaforma restituiti dalle funzioni GetNewBuffer() o FinalizeBuffer() configurate oppure dalla funzione GetNextBuffer() associata all'oggetto reader.

CopyContainer

WEAVE_ERROR CopyContainer(
  uint64_t tag,
  const uint8_t *encodedContainer,
  uint16_t encodedContainerLen
)

Codifica un elemento container TLV che contiene gli elementi membro di un container precodificato.

Il metodo CopyContainer() codifica un nuovo elemento contenitore TLV (una struttura, un array o un percorso) che contiene un insieme di elementi membro presi dai contenuti di un contenitore precodificato fornito. Quando viene richiamato il metodo, i dati nel buffer di input fornito vengono analizzati come elemento container TLV, viene scritto un nuovo container che ha lo stesso tipo e gli stessi membri del contenitore di input. Il tag per il nuovo contenitore viene specificato come parametro di input.

Quando il metodo restituisce, l'oggetto writer può essere utilizzato per scrivere elementi TLV aggiuntivi che seguono l'elemento container.

Dettagli
Parametri
[in] tag
Il tag TLV da codificare con il container oppure AnonymousTag se il container deve essere codificato senza tag. I valori di tag devono essere creati con una delle funzioni di definizione dei tag ProfileTag(), ContextTag() o CommonTag().
[in] encodedContainer
Un buffer contenente un container TLV precodificato di cui copiare tipo e membri.
[in] encodedContainerLen
La lunghezza in byte del container precodificato.
Valori restituiti
WEAVE_NO_ERROR
Se il metodo è riuscito.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Se un writer di container è stato aperto sull'autore corrente e non è ancora chiuso.
WEAVE_ERROR_TLV_UNDERRUN
Se il container codificato è terminato prematuramente.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Se il contenitore codificato conteneva un tipo di elemento TLV non valido o non supportato.
WEAVE_ERROR_INVALID_TLV_TAG
Se il contenitore codificato conteneva un tag TLV in un contesto non valido o se il tag fornito non è valido o non è appropriato nel contesto in cui è stato scritto il nuovo contenitore.
WEAVE_ERROR_BUFFER_TOO_SMALL
Se la scrittura del valore supererebbe il limite massimo di byte specificato al momento dell'inizializzazione del writer.
WEAVE_ERROR_NO_MEMORY
Se un tentativo di allocare un buffer di output non è riuscito a causa della mancanza di memoria.
other
Altri errori Weave o specifici della piattaforma restituiti dalle funzioni GetNewBuffer() o FinalizeBuffer() configurate oppure dalla funzione GetNextBuffer() associata all'oggetto reader.

CopyElement

WEAVE_ERROR CopyElement(
  TLVReader & reader
)

Copia un elemento TLV da un oggetto reader nell'autore.

Il metodo CopyElement() codifica un nuovo elemento TLV il cui tipo, tag e valore derivano da un oggetto TLVReader. Quando viene richiamato il metodo, l'oggetto Reader fornito dovrebbe trovarsi sull'elemento TLV di origine. L'elemento appena codificato avrà lo stesso tipo, tag e contenuti del contenitore di input. Se l'elemento fornito è un container TLV (struttura, array o percorso), verranno copiati l'intero contenuto del container.

Dettagli
Parametri
[in] reader
Un riferimento a un oggetto TLVReader che identifica un elemento TLV precodificato da copiare.
Valori restituiti
WEAVE_NO_ERROR
Se il metodo è riuscito.
WEAVE_ERROR_INCORRECT_STATE
Se il lettore fornito non è posizionato su un elemento.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Se un writer di container è stato aperto sull'autore corrente e non è ancora chiuso.
WEAVE_ERROR_TLV_UNDERRUN
Se la codifica TLV sottostante associata al lettore fornito è terminata prematuramente.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Se il lettore fornito ha riscontrato un tipo di elemento TLV non valido o non supportato.
WEAVE_ERROR_INVALID_TLV_TAG
Se il lettore fornito ha riscontrato un tag TLV in un contesto non valido o se non è valido o è inappropriato nel contesto in cui è stato scritto il nuovo contenitore.
WEAVE_ERROR_BUFFER_TOO_SMALL
Se la scrittura del valore supererebbe il limite massimo di byte specificato al momento dell'inizializzazione del writer.
WEAVE_ERROR_NO_MEMORY
Se un tentativo di allocare un buffer di output non è riuscito a causa della mancanza di memoria.
other
Altri errori Weave o specifici della piattaforma restituiti dalle funzioni GetNewBuffer() o FinalizeBuffer() configurate oppure dalla funzione GetNextBuffer() associata all'oggetto reader.

CopyElement

WEAVE_ERROR CopyElement(
  uint64_t tag,
  TLVReader & reader
)

EndContainer

WEAVE_ERROR EndContainer(
  TLVType outerContainerType
)

Completa la codifica di un elemento contenitore TLV.

Il metodo EndContainer() completa la codifica di un elemento container TLV e ripristina lo stato di un oggetto TLVWrite dopo una chiamata precedente a StartContainer(). Per ogni chiamata alle applicazioni StartContainer() deve effettuare una chiamata corrispondente a EndContainer(), passando il valore TLVType restituito dalla chiamata StartContainer(). Quando restituisce EndContainer(), l'oggetto writer può essere utilizzato per scrivere elementi TLV aggiuntivi che seguono l'elemento contenitore.

Dettagli
Parametri
[in] outerContainerType
Il valore TLVType restituito dal metodo StartContainer().
Valori restituiti
WEAVE_NO_ERROR
Se il metodo è riuscito.
WEAVE_ERROR_INCORRECT_STATE
Se non è stata effettuata una chiamata a StartContainer() corrispondente.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Se un writer di container è stato aperto sull'autore corrente e non è ancora chiuso.
WEAVE_ERROR_BUFFER_TOO_SMALL
Se la scrittura del valore supererebbe il limite massimo di byte specificato al momento dell'inizializzazione del writer.
WEAVE_ERROR_NO_MEMORY
Se un tentativo di allocare un buffer di output non è riuscito a causa della mancanza di memoria.
other
Altri errori Weave o specifici della piattaforma restituiti dalle funzioni GetNewBuffer() o FinalizeBuffer() configurate.

Finalizza

WEAVE_ERROR Finalize(
  void
)

Completa la scrittura di una codifica TLV.

Il metodo Finalize() completa il processo di scrittura di una codifica TLV nel buffer di output sottostante. Il metodo deve essere chiamato dall'applicazione prima di utilizzare i contenuti del buffer. La funzione Finalize() può essere chiamata solo quando non ci sono autori di container aperti per l'autore corrente. (vedi OpenContainer()).

Dettagli
Valori restituiti
WEAVE_NO_ERROR
Se la codifica è stata finalizzata correttamente.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Se un writer di container è stato aperto sull'autore corrente e non è ancora chiuso.
other
Altri errori Weave o specifici della piattaforma restituiti dalla funzione FinalizeBuffer() configurata.

GetContainerType

TLVType GetContainerType(
  void
) const 

Restituisce il tipo di container all'interno del quale TLVWriter sta attualmente scrivendo.

Il metodo GetContainerType() restituisce il tipo di container TLV in cui TLVWriter sta attualmente scrivendo. Se TLVWriter non scrive elementi all'interno di un container (ovvero se scrive al livello più esterno di una codifica), il metodo restituisce kTLVType_NotAt.

Dettagli
Restituisce
Il TLVType del container corrente oppure kTLVType_Not specifichi se TLVWriter non scrive elementi all'interno di un container.

GetLengthWritten

uint32_t GetLengthWritten(
  void
)

Restituisce il numero totale di byte scritti da quando il writer è stato inizializzato.

Dettagli
Restituisce
Numero totale di byte scritti dall'inizializzazione del writer.

Inizia

void Init(
  uint8_t *buf,
  uint32_t maxLen
)

Inizializza un oggetto TLVWriter da scrivere in un singolo buffer di output.

Dettagli
Parametri
[in] buf
Un puntatore al buffer in cui deve essere scritto TLV.
[in] maxLen
Il numero massimo di byte che devono essere scritti nel buffer di output.

Inizia

void Init(
  PacketBuffer *buf,
  uint32_t maxLen
)

Inizializza un oggetto TLVWriter da scrivere in un singolo PacketBuffer.

La scrittura inizia immediatamente dopo l'ultimo byte di dati esistenti nel buffer fornito.

Dettagli
Parametri
[in] buf
Un puntatore a un PacketBuffer in cui deve essere scritto TLV.
[in] maxLen
Il numero massimo di byte che devono essere scritti nel buffer di output.

Inizia

void Init(
  PacketBuffer *buf,
  uint32_t maxLen,
  bool allowDiscontiguousBuffers
)

Inizializza un oggetto TLVWriter per scrivere in uno o più PacketBuffer.

La scrittura inizia immediatamente dopo l'ultimo byte di dati esistenti nel buffer specificato. Se allowDiscontiguousBuffers è true, verranno allocati e concatenati ulteriori PacketBuffer al buffer fornito in base alle esigenze per contenere la quantità di dati scritti. Se il buffer di output specificato è già l'intestazione di una catena di buffer, l'output verrà scritto nei buffer successivi della catena prima che vengano assegnati nuovi buffer.

Dettagli
Parametri
[in] buf
Un puntatore a un PacketBuffer in cui devono essere scritti i dati TLV.
[in] maxLen
Il numero massimo di byte che devono essere scritti nel buffer di output.
[in] allowDiscontiguousBuffers
Se il valore è true, scrivi i dati in una catena di PacketBuffers, allocando nuovi buffer secondo necessità per archiviare i dati scritti. Se il valore è false, la scrittura non riuscirà con WEAVE_ERROR_BUFFER_TOO_Small se i dati scritti superano lo spazio disponibile nel buffer di output iniziale.

InitMalloced

void InitMalloced(
  uint8_t *& outBuf,
  uint32_t initialBufSize,
  uint32_t maxLen
)

Inizializza un oggetto TLVWriter da scrivere in un buffer dinamico.

Dettagli
Parametri
[in] buf
Un riferimento a un puntatore che riceverà il buffer allocato.
[in] maxLen
Il numero massimo di byte che devono essere scritti nel buffer di output.
[in] initialBufSize
Il numero iniziale di byte che devono essere allocati al buffer.

OpenContainer

WEAVE_ERROR OpenContainer(
  uint64_t tag,
  TLVType containerType,
  TLVWriter & containerWriter
)

Inizializza un nuovo oggetto TLVWriter per la scrittura dei membri di un elemento container TLV.

Il metodo OpenContainer() viene utilizzato per scrivere elementi contenitore TLV (struttura, array o percorsi) in una codifica. Il metodo prende il tipo e il tag (se presenti) del nuovo contenitore, nonché un riferimento a un nuovo oggetto writer (lo writer contenitore) che verrà inizializzato allo scopo di scrivere gli elementi del contenitore. Le applicazioni scrivono i membri del nuovo contenitore utilizzando il writer del contenitore e quindi chiamano CloseContainer() per completare la codifica del contenitore.

Quando il writer del container è aperto, le applicazioni non devono effettuare chiamate o alterare in altro modo lo stato dell'autore principale.

Il writer del contenitore eredita varie proprietà di configurazione dall'autore principale. Le tre aree sono:

  • ID profilo implicito (ImplicitProfileId)
  • Il puntatore ai dati dell'applicazione (VPC)
  • Puntatori alle funzioni GetNewBuffer e FinalizeBuffer

Dettagli
Parametri
[in] tag
Il tag TLV da codificare con il container oppure AnonymousTag se il container deve essere codificato senza tag. I valori di tag devono essere creati con una delle funzioni di definizione dei tag ProfileTag(), ContextTag() o CommonTag().
[in] containerType
Il tipo di container da codificare. Il valore deve essere kTLVType_Structure, kTLVType_Array o kTLVType_Path.
[out] containerWriter
Un riferimento a un oggetto TLVWriter che verrà inizializzato per la scrittura dei membri del nuovo elemento container. Tutti i dati associati all'oggetto specificato vengono sovrascritti.
Valori restituiti
WEAVE_NO_ERROR
Se il metodo è riuscito.
WEAVE_ERROR_WRONG_TLV_TYPE
Se il valore specificato per containerType non è corretto.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Se un writer di container è stato aperto sull'autore corrente e non è ancora chiuso.
WEAVE_ERROR_INVALID_TLV_TAG
Se il valore del tag specificato non è valido o non è appropriato nel contesto in cui è stato scritto.
WEAVE_ERROR_BUFFER_TOO_SMALL
Se la scrittura del valore supererebbe il limite massimo di byte specificato al momento dell'inizializzazione del writer.
WEAVE_ERROR_NO_MEMORY
Se un tentativo di allocare un buffer di output non è riuscito a causa della mancanza di memoria.
other
Altri errori Weave o specifici della piattaforma restituiti dalle funzioni GetNewBuffer() o FinalizeBuffer() configurate.

Adotta

WEAVE_ERROR Put(
  uint64_t tag,
  int8_t v
)

Codifica un valore intero con segno TLV.

Questa è una funzione membro sovraccarico, fornita per praticità. Si differenzia dalla funzione precedente solo per gli argomenti che accetta.

Dettagli
Parametri
[in] tag
Il tag TLV da codificare con il valore o AnonymousTag se il valore deve essere codificato senza tag. I valori di tag devono essere creati con una delle funzioni di definizione dei tag ProfileTag(), ContextTag() o CommonTag().
[in] v
Il valore da codificare.
Valori restituiti
WEAVE_NO_ERROR
Se il metodo è riuscito.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Se un writer di container è stato aperto sull'autore corrente e non è ancora chiuso.
WEAVE_ERROR_INVALID_TLV_TAG
Se il valore del tag specificato non è valido o non è appropriato nel contesto in cui è stato scritto.
WEAVE_ERROR_BUFFER_TOO_SMALL
Se la scrittura del valore supererebbe il limite massimo di byte specificato al momento dell'inizializzazione del writer.
WEAVE_ERROR_NO_MEMORY
Se un tentativo di allocare un buffer di output non è riuscito a causa della mancanza di memoria.
other
Altri errori Weave o specifici della piattaforma restituiti dalle funzioni GetNewBuffer() o FinalizeBuffer() configurate.

Adotta

WEAVE_ERROR Put(
  uint64_t tag,
  int8_t v,
  bool preserveSize
)

Codifica un valore intero con segno TLV.

Questa è una funzione membro sovraccarico, fornita per praticità. Si differenzia dalla funzione precedente solo per gli argomenti che accetta.

Dettagli
Parametri
[in] tag
Il tag TLV da codificare con il valore o AnonymousTag se il valore deve essere codificato senza tag. I valori di tag devono essere creati con una delle funzioni di definizione dei tag ProfileTag(), ContextTag() o CommonTag().
[in] v
Il valore da codificare.
[in] preserveSize
True se il valore deve essere codificato nello stesso numero di byte del tipo di input. Falso se il valore deve essere codificato nel numero minimo di byte necessari per rappresentare il valore. Nota: si consiglia vivamente alle applicazioni di impostare questo parametro su false.
Valori restituiti
WEAVE_NO_ERROR
Se il metodo è riuscito.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Se un writer di container è stato aperto sull'autore corrente e non è ancora chiuso.
WEAVE_ERROR_INVALID_TLV_TAG
Se il valore del tag specificato non è valido o non è appropriato nel contesto in cui è stato scritto.
WEAVE_ERROR_BUFFER_TOO_SMALL
Se la scrittura del valore supererebbe il limite massimo di byte specificato al momento dell'inizializzazione del writer.
WEAVE_ERROR_NO_MEMORY
Se un tentativo di allocare un buffer di output non è riuscito a causa della mancanza di memoria.
other
Altri errori Weave o specifici della piattaforma restituiti dalle funzioni GetNewBuffer() o FinalizeBuffer() configurate.

Adotta

WEAVE_ERROR Put(
  uint64_t tag,
  int16_t v
)

Adotta

WEAVE_ERROR Put(
  uint64_t tag,
  int16_t v,
  bool preserveSize
)

Adotta

WEAVE_ERROR Put(
  uint64_t tag,
  int32_t v
)

Adotta

WEAVE_ERROR Put(
  uint64_t tag,
  int32_t v,
  bool preserveSize
)

Adotta

WEAVE_ERROR Put(
  uint64_t tag,
  int64_t v
)

Adotta

WEAVE_ERROR Put(
  uint64_t tag,
  int64_t v,
  bool preserveSize
)

Adotta

WEAVE_ERROR Put(
  uint64_t tag,
  uint8_t v
)

Codifica un valore intero senza segno TLV.

Questa è una funzione membro sovraccarico, fornita per praticità. Si differenzia dalla funzione precedente solo per gli argomenti che accetta.

Dettagli
Parametri
[in] tag
Il tag TLV da codificare con il valore o AnonymousTag se il valore deve essere codificato senza tag. I valori di tag devono essere creati con una delle funzioni di definizione dei tag ProfileTag(), ContextTag() o CommonTag().
[in] v
Il valore da codificare.
Valori restituiti
WEAVE_NO_ERROR
Se il metodo è riuscito.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Se un writer di container è stato aperto sull'autore corrente e non è ancora chiuso.
WEAVE_ERROR_INVALID_TLV_TAG
Se il valore del tag specificato non è valido o non è appropriato nel contesto in cui è stato scritto.
WEAVE_ERROR_BUFFER_TOO_SMALL
Se la scrittura del valore supererebbe il limite massimo di byte specificato al momento dell'inizializzazione del writer.
WEAVE_ERROR_NO_MEMORY
Se un tentativo di allocare un buffer di output non è riuscito a causa della mancanza di memoria.
other
Altri errori Weave o specifici della piattaforma restituiti dalle funzioni GetNewBuffer() o FinalizeBuffer() configurate.

Adotta

WEAVE_ERROR Put(
  uint64_t tag,
  uint8_t v,
  bool preserveSize
)

Codifica un valore intero senza segno TLV.

Questa è una funzione membro sovraccarico, fornita per praticità. Si differenzia dalla funzione precedente solo per gli argomenti che accetta.

Dettagli
Parametri
[in] tag
Il tag TLV da codificare con il valore o AnonymousTag se il valore deve essere codificato senza tag. I valori di tag devono essere creati con una delle funzioni di definizione dei tag ProfileTag(), ContextTag() o CommonTag().
[in] v
Il valore da codificare.
[in] preserveSize
True se il valore deve essere codificato nello stesso numero di byte del tipo di input. Falso se il valore deve essere codificato nel numero minimo di byte necessari per rappresentare il valore. Nota: si consiglia vivamente alle applicazioni di impostare questo parametro su false.
Valori restituiti
WEAVE_NO_ERROR
Se il metodo è riuscito.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Se un writer di container è stato aperto sull'autore corrente e non è ancora chiuso.
WEAVE_ERROR_INVALID_TLV_TAG
Se il valore del tag specificato non è valido o non è appropriato nel contesto in cui è stato scritto.
WEAVE_ERROR_BUFFER_TOO_SMALL
Se la scrittura del valore supererebbe il limite massimo di byte specificato al momento dell'inizializzazione del writer.
WEAVE_ERROR_NO_MEMORY
Se un tentativo di allocare un buffer di output non è riuscito a causa della mancanza di memoria.
other
Altri errori Weave o specifici della piattaforma restituiti dalle funzioni GetNewBuffer() o FinalizeBuffer() configurate.

Adotta

WEAVE_ERROR Put(
  uint64_t tag,
  uint16_t v
)

Adotta

WEAVE_ERROR Put(
  uint64_t tag,
  uint16_t v,
  bool preserveSize
)

Adotta

WEAVE_ERROR Put(
  uint64_t tag,
  uint32_t v
)

Adotta

WEAVE_ERROR Put(
  uint64_t tag,
  uint32_t v,
  bool preserveSize
)

Adotta

WEAVE_ERROR Put(
  uint64_t tag,
  uint64_t v
)

Adotta

WEAVE_ERROR Put(
  uint64_t tag,
  uint64_t v,
  bool preserveSize
)

Adotta

WEAVE_ERROR Put(
  uint64_t tag,
  float v
)

Adotta

WEAVE_ERROR Put(
  uint64_t tag,
  double v
)

Codifica un valore in virgola mobile TLV.

Questa è una funzione membro sovraccarico, fornita per praticità. Si differenzia dalla funzione precedente solo per gli argomenti che accetta.

Dettagli
Parametri
[in] tag
Il tag TLV da codificare con il valore o AnonymousTag se il valore deve essere codificato senza tag. I valori di tag devono essere creati con una delle funzioni di definizione dei tag ProfileTag(), ContextTag() o CommonTag().
[in] v
Il valore da codificare.
Valori restituiti
WEAVE_NO_ERROR
Se il metodo è riuscito.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Se un writer di container è stato aperto sull'autore corrente e non è ancora chiuso.
WEAVE_ERROR_INVALID_TLV_TAG
Se il valore del tag specificato non è valido o non è appropriato nel contesto in cui è stato scritto.
WEAVE_ERROR_BUFFER_TOO_SMALL
Se la scrittura del valore supererebbe il limite massimo di byte specificato al momento dell'inizializzazione del writer.
WEAVE_ERROR_NO_MEMORY
Se un tentativo di allocare un buffer di output non è riuscito a causa della mancanza di memoria.
other
Altri errori Weave o specifici della piattaforma restituiti dalle funzioni GetNewBuffer() o FinalizeBuffer() configurate.

PutBoolean

WEAVE_ERROR PutBoolean(
  uint64_t tag,
  bool v
)

Codifica un valore booleano TLV.

Dettagli
Parametri
[in] tag
Il tag TLV da codificare con il valore o AnonymousTag se il valore deve essere codificato senza tag. I valori di tag devono essere creati con una delle funzioni di definizione dei tag ProfileTag(), ContextTag() o CommonTag().
[in] v
Il valore da codificare.
Valori restituiti
WEAVE_NO_ERROR
Se il metodo è riuscito.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Se un writer di container è stato aperto sull'autore corrente e non è ancora chiuso.
WEAVE_ERROR_INVALID_TLV_TAG
Se il valore del tag specificato non è valido o non è appropriato nel contesto in cui è stato scritto.
WEAVE_ERROR_BUFFER_TOO_SMALL
Se la scrittura del valore supererebbe il limite massimo di byte specificato al momento dell'inizializzazione del writer.
WEAVE_ERROR_NO_MEMORY
Se un tentativo di allocare un buffer di output non è riuscito a causa della mancanza di memoria.
other
Altri errori Weave o specifici della piattaforma restituiti dalle funzioni GetNewBuffer() o FinalizeBuffer() configurate.

PutBytes

WEAVE_ERROR PutBytes(
  uint64_t tag,
  const uint8_t *buf,
  uint32_t len
)

Codifica un valore di stringa di byte TLV.

Dettagli
Parametri
[in] tag
Il tag TLV da codificare con il valore o AnonymousTag se il valore deve essere codificato senza tag. I valori di tag devono essere creati con una delle funzioni di definizione dei tag ProfileTag(), ContextTag() o CommonTag().
[in] buf
Un puntatore a un buffer contenente la stringa di byte da codificare.
[in] len
Il numero di byte da codificare.
Valori restituiti
WEAVE_NO_ERROR
Se il metodo è riuscito.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Se un writer di container è stato aperto sull'autore corrente e non è ancora chiuso.
WEAVE_ERROR_INVALID_TLV_TAG
Se il valore del tag specificato non è valido o non è appropriato nel contesto in cui è stato scritto.
WEAVE_ERROR_BUFFER_TOO_SMALL
Se la scrittura del valore supererebbe il limite massimo di byte specificato al momento dell'inizializzazione del writer.
WEAVE_ERROR_NO_MEMORY
Se un tentativo di allocare un buffer di output non è riuscito a causa della mancanza di memoria.
other
Altri errori Weave o specifici della piattaforma restituiti dalle funzioni GetNewBuffer() o FinalizeBuffer() configurate.

PutNull

WEAVE_ERROR PutNull(
  uint64_t tag
)

Codifica un valore null TLV.

Dettagli
Parametri
[in] tag
Il tag TLV da codificare con il valore o AnonymousTag se il valore deve essere codificato senza tag. I valori di tag devono essere creati con una delle funzioni di definizione dei tag ProfileTag(), ContextTag() o CommonTag().
Valori restituiti
WEAVE_NO_ERROR
Se il metodo è riuscito.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Se un writer di container è stato aperto sull'autore corrente e non è ancora chiuso.
WEAVE_ERROR_INVALID_TLV_TAG
Se il valore del tag specificato non è valido o non è appropriato nel contesto in cui è stato scritto.
WEAVE_ERROR_BUFFER_TOO_SMALL
Se la scrittura del valore supererebbe il limite massimo di byte specificato al momento dell'inizializzazione del writer.
WEAVE_ERROR_NO_MEMORY
Se un tentativo di allocare un buffer di output non è riuscito a causa della mancanza di memoria.
other
Altri errori Weave o specifici della piattaforma restituiti dalle funzioni GetNewBuffer() o FinalizeBuffer() configurate.

PutPreEncodedContainer

WEAVE_ERROR PutPreEncodedContainer(
  uint64_t tag,
  TLVType containerType,
  const uint8_t *data,
  uint32_t dataLen
)

Codifica un elemento container TLV da un insieme precodificato di elementi membro.

Il metodo PutPreEncodedContainer() codifica un nuovo elemento contenitore TLV (una struttura, un array o un percorso) contenente un insieme di elementi membro acquisiti da un buffer precodificato. Il buffer di input dovrebbe contenere zero o più elementi TLV con codifica completa, con tag conformi alle regole associate al tipo di contenitore specificato (ad esempio, i membri della struttura devono avere tag, mentre i membri dell'array no).

Il metodo codifica l'intero elemento contenitore in un'unica chiamata. Quando restituisce PutPreEncodedContainer(), l'oggetto writer può essere utilizzato per scrivere elementi TLV aggiuntivi che seguono l'elemento contenitore.

Dettagli
Parametri
[in] tag
Il tag TLV da codificare con il container oppure AnonymousTag se il container deve essere codificato senza tag. I valori di tag devono essere creati con una delle funzioni di definizione dei tag ProfileTag(), ContextTag() o CommonTag().
[in] containerType
Il tipo di container da codificare. Il valore deve essere kTLVType_Structure, kTLVType_Array o kTLVType_Path.
[in] data
Un puntatore a un buffer contenente zero degli elementi TLV più codificati che diventeranno i membri del nuovo container.
[in] dataLen
Il numero di byte nel buffer data.
Valori restituiti
WEAVE_NO_ERROR
Se il metodo è riuscito.
WEAVE_ERROR_WRONG_TLV_TYPE
Se il valore specificato per containerType non è corretto.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Se un writer di container è stato aperto sull'autore corrente e non è ancora chiuso.
WEAVE_ERROR_INVALID_TLV_TAG
Se il valore del tag specificato non è valido o non è appropriato nel contesto in cui è stato scritto.
WEAVE_ERROR_BUFFER_TOO_SMALL
Se la scrittura del valore supererebbe il limite massimo di byte specificato al momento dell'inizializzazione del writer.
WEAVE_ERROR_NO_MEMORY
Se un tentativo di allocare un buffer di output non è riuscito a causa della mancanza di memoria.
other
Altri errori Weave o specifici della piattaforma restituiti dalle funzioni GetNewBuffer() o FinalizeBuffer() configurate.

PutString

WEAVE_ERROR PutString(
  uint64_t tag,
  const char *buf
)

Codifica un valore stringa UTF8 TLV.

Dettagli
Parametri
[in] tag
Il tag TLV da codificare con il valore o AnonymousTag se il valore deve essere codificato senza tag. I valori di tag devono essere creati con una delle funzioni di definizione dei tag ProfileTag(), ContextTag() o CommonTag().
[in] buf
Un puntatore alla stringa UTF-8 con terminazione null da codificare.
Valori restituiti
WEAVE_NO_ERROR
Se il metodo è riuscito.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Se un writer di container è stato aperto sull'autore corrente e non è ancora chiuso.
WEAVE_ERROR_INVALID_TLV_TAG
Se il valore del tag specificato non è valido o non è appropriato nel contesto in cui è stato scritto.
WEAVE_ERROR_BUFFER_TOO_SMALL
Se la scrittura del valore supererebbe il limite massimo di byte specificato al momento dell'inizializzazione del writer.
WEAVE_ERROR_NO_MEMORY
Se un tentativo di allocare un buffer di output non è riuscito a causa della mancanza di memoria.
other
Altri errori Weave o specifici della piattaforma restituiti dalle funzioni GetNewBuffer() o FinalizeBuffer() configurate.

PutString

WEAVE_ERROR PutString(
  uint64_t tag,
  const char *buf,
  uint32_t len
)

Codifica un valore stringa UTF8 TLV.

Dettagli
Parametri
[in] tag
Il tag TLV da codificare con il valore o AnonymousTag se il valore deve essere codificato senza tag. I valori di tag devono essere creati con una delle funzioni di definizione dei tag ProfileTag(), ContextTag() o CommonTag().
[in] buf
Un puntatore alla stringa UTF-8 da codificare.
[in] len
La lunghezza (in byte) della stringa da codificare.
Valori restituiti
WEAVE_NO_ERROR
Se il metodo è riuscito.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Se un writer di container è stato aperto sull'autore corrente e non è ancora chiuso.
WEAVE_ERROR_INVALID_TLV_TAG
Se il valore del tag specificato non è valido o non è appropriato nel contesto in cui è stato scritto.
WEAVE_ERROR_BUFFER_TOO_SMALL
Se la scrittura del valore supererebbe il limite massimo di byte specificato al momento dell'inizializzazione del writer.
WEAVE_ERROR_NO_MEMORY
Se un tentativo di allocare un buffer di output non è riuscito a causa della mancanza di memoria.
other
Altri errori Weave o specifici della piattaforma restituiti dalle funzioni GetNewBuffer() o FinalizeBuffer() configurate.

PutStringF

WEAVE_ERROR PutStringF(
  uint64_t tag,
  const char *fmt,
  ...
)

Codifica l'output della stringa formattato in base al formato dell'elemento TLV.

PutStringF è un analogo di uno sprintf in cui l'output è archiviato in un elemento TLV anziché in un buffer dei caratteri. Quando è disponibile la funzionalità printf estesa, la funzione è in grado di generare la stringa risultato in uno spazio di archiviazione sottostante discontinuo. L'implementazione supporta i seguenti miglioramenti printf:

La piattaforma fornisce un vcbprintf basato su callback che offre la possibilità di chiamare una callback personalizzata al posto del putchar.

La piattaforma fornisce una variante di vsnprintf denominata vsnprintf_ex, che si comporta esattamente come vsnprintf, tranne per il fatto che prevede l'omissione dei primi n caratteri dell'output.

Tieni presente che mentre la funzione basata su callback potrebbe essere la più semplice e utilizzare la minor quantità di codice, la varietà di funzioni vsprintf_ex consuma meno stack.

Se nessuna delle opzioni precedenti è disponibile, ma la piattaforma fornisce malloc, la funzione allocherà un buffer temporaneo per contenere l'output. Quando la piattaforma non fornisce miglioramenti alla famiglia printf né al Malloc, l'output viene troncato in modo da rientrare nello stato continuo nell'attuale spazio di archiviazione TLV

Dettagli
Parametri
[in] tag
Il tag TLV da codificare con il valore o AnonymousTag se il valore deve essere codificato senza tag. I valori di tag devono essere creati con una delle funzioni di definizione dei tag ProfileTag(), ContextTag() o CommonTag().
[in] fmt
La stringa di formato utilizzata per formattare l'elenco di argomenti. Segue la stessa sintassi e le stesse regole della stringa di formato per la famiglia di funzioni printf.
[in] ...
Un elenco di argomenti da formattare nel valore di output in base al parametro fmt.
Valori restituiti
WEAVE_NO_ERROR
Se il metodo è riuscito.
other
Se le chiamate sottostanti ai metodi TLVWriter WriteElementHead o GetNewBuffer non hanno esito positivo, il loro errore viene inoltrato immediatamente nello stack di chiamate.

StartContainer

WEAVE_ERROR StartContainer(
  uint64_t tag,
  TLVType containerType,
  TLVType & outerContainerType
)

Inizia la codifica di un nuovo elemento contenitore TLV.

Il metodo StartContainer() viene utilizzato per scrivere elementi contenitore TLV (struttura, array o percorsi) in una codifica. Il metodo prende il tipo e il tag (se presenti) del nuovo contenitore, oltre a un riferimento a un valore TLVType che verrà utilizzato per salvare il contesto corrente dell'autore mentre questo viene utilizzato per scrivere il container.

Una volta restituito il metodo StartContainer(), l'applicazione deve utilizzare l'oggetto TLVWriter corrente per scrivere gli elementi del container. Al termine, l'applicazione deve chiamare il metodo EndContainer() per completare la codifica del contenitore.

Dettagli
Parametri
[in] tag
Il tag TLV da codificare con il container oppure AnonymousTag se il container deve essere codificato senza tag. I valori di tag devono essere creati con una delle funzioni di definizione dei tag ProfileTag(), ContextTag() o CommonTag().
[in] containerType
Il tipo di container da codificare. Il valore deve essere kTLVType_Structure, kTLVType_Array o kTLVType_Path.
[out] outerContainerType
Un riferimento a un valore TLVType che riceverà il contesto dell'autore.
Valori restituiti
WEAVE_NO_ERROR
Se il metodo è riuscito.
WEAVE_ERROR_WRONG_TLV_TYPE
Se il valore specificato per containerType non è corretto.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Se un writer di container è stato aperto sull'autore corrente e non è ancora chiuso.
WEAVE_ERROR_INVALID_TLV_TAG
Se il valore del tag specificato non è valido o non è appropriato nel contesto in cui è stato scritto.
WEAVE_ERROR_BUFFER_TOO_SMALL
Se la scrittura del valore supererebbe il limite massimo di byte specificato al momento dell'inizializzazione del writer.
WEAVE_ERROR_NO_MEMORY
Se un tentativo di allocare un buffer di output non è riuscito a causa della mancanza di memoria.
other
Altri errori Weave o specifici della piattaforma restituiti dalle funzioni GetNewBuffer() o FinalizeBuffer() configurate.

StartPutBytes

WEAVE_ERROR StartPutBytes(
  uint64_t tag,
  uint32_t totalLen
)

Codifica una stringa di byte TLV in più blocchi.

Deve essere utilizzato con ContinuePutBytes.

Dettagli
Parametri
[in] tag
Il tag TLV da codificare con il valore o AnonymousTag se il valore deve essere codificato senza tag. I valori di tag devono essere creati con una delle funzioni di definizione dei tag ProfileTag(), ContextTag() o CommonTag().
[in] totalLen
Il numero totale di byte da codificare.
Valori restituiti
WEAVE_NO_ERROR
Se il metodo è riuscito.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Se un writer di container è stato aperto sull'autore corrente e non è ancora chiuso.
WEAVE_ERROR_INVALID_TLV_TAG
Se il valore del tag specificato non è valido o non è appropriato nel contesto in cui è stato scritto.
WEAVE_ERROR_BUFFER_TOO_SMALL
Se la scrittura del valore supererebbe il limite massimo di byte specificato al momento dell'inizializzazione del writer.
WEAVE_ERROR_NO_MEMORY
Se un tentativo di allocare un buffer di output non è riuscito a causa della mancanza di memoria.
other
Altri errori Weave o specifici della piattaforma restituiti dalle funzioni GetNewBuffer() o FinalizeBuffer() configurate.

Stringa VPut F

WEAVE_ERROR VPutStringF(
  uint64_t tag,
  const char *fmt,
  va_list ap
)

Codifica l'output della stringa formattato in base al formato dell'elemento TLV.

PutStringF è un analogo di uno sprintf in cui l'output è archiviato in un elemento TLV anziché in un buffer dei caratteri. Quando è disponibile la funzionalità printf estesa, la funzione è in grado di generare la stringa risultato in uno spazio di archiviazione sottostante discontinuo. L'implementazione supporta i seguenti miglioramenti printf:

La piattaforma fornisce un vcbprintf basato su callback che offre la possibilità di chiamare una callback personalizzata al posto del putchar.

La piattaforma fornisce una variante di vsnprintf denominata vsnprintf_ex, che si comporta esattamente come vsnprintf, tranne per il fatto che prevede l'omissione dei primi n caratteri dell'output.

Tieni presente che mentre la funzione basata su callback potrebbe essere la più semplice e utilizzare la minor quantità di codice, la varietà di funzioni vsprintf_ex consuma meno stack.

Se nessuna delle opzioni precedenti è disponibile, ma la piattaforma fornisce malloc, la funzione allocherà un buffer temporaneo per contenere l'output. Quando la piattaforma non fornisce miglioramenti alla famiglia printf né al Malloc, l'output viene troncato in modo da rientrare nello stato continuo nell'attuale spazio di archiviazione TLV

Dettagli
Parametri
[in] tag
Il tag TLV da codificare con il valore o AnonymousTag se il valore deve essere codificato senza tag. I valori di tag devono essere creati con una delle funzioni di definizione dei tag ProfileTag(), ContextTag() o CommonTag().
[in] fmt
La stringa di formato utilizzata per formattare l'elenco di argomenti. Segue la stessa sintassi e le stesse regole della stringa di formato per la famiglia di funzioni printf.
[in] ap
Un elenco di argomenti da formattare nel valore di output in base al parametro fmt.
Valori restituiti
WEAVE_NO_ERROR
Se il metodo è riuscito.
other
Se le chiamate sottostanti ai metodi TLVWriter WriteElementHead o GetNewBuffer non hanno esito positivo, il loro errore viene inoltrato immediatamente nello stack di chiamate.

Funzioni statiche pubbliche

FinalizePacketBuffer

WEAVE_ERROR FinalizePacketBuffer(
  TLVWriter & writer,
  uintptr_t bufHandle,
  uint8_t *bufStart,
  uint32_t dataLen
)

Un'implementazione di una funzione FinalizeBuffer TLVWriter per la scrittura in una catena di PacketBuffers.

La funzione FinalizePacketBuffer() esegue la finalizzazione necessaria quando si utilizza un TLVWriter per scrivere in una catena di PacketBuffers. La funzione è progettata per essere utilizzata in combinazione con la funzione GetNewPacketBuffer().

Consulta la definizione del tipo FinalizeBufferFunct per ulteriori informazioni sull'API della funzione FinalizePacketBuffer().

GetNewBuffer_Malloced

WEAVE_ERROR GetNewBuffer_Malloced(
  TLVWriter & writer,
  uintptr_t & bufHandle,
  uint8_t *& bufStart,
  uint32_t & bufLen
)

Un'implementazione di una funzione GetNewBuffer TLVWriter per la scrittura in un buffer dinamico.

La funzione GetNewBuffer_Malloced() fornisce nuovo spazio di output a un TLVWriter raddoppiando le dimensioni del buffer dinamico sottostante secondo necessità per archiviare la codifica. La funzione è progettata per essere assegnata al puntatore della funzione GetNewBuffer TLVWriter.

Consulta la definizione del tipo GetNewBufferFunct per ulteriori informazioni sull'API della funzione GetNewBuffer_Malloced().

GetNewPacketBuffer

WEAVE_ERROR GetNewPacketBuffer(
  TLVWriter & writer,
  uintptr_t & bufHandle,
  uint8_t *& bufStart,
  uint32_t & bufLen
)

Un'implementazione di una funzione GetNewBuffer TLVWriter per la scrittura in una catena di PacketBuffers.

La funzione GetNewPacketBuffer() fornisce nuovo spazio di output a un TLVWriter allocando una catena di uno o più PacketBuffers necessari per archiviare la codifica. La funzione è progettata per essere assegnata al puntatore della funzione GetNewBuffer TLVWriter.

Tieni presente che quando utilizzi GetNewPacketBuffer con un TLVWriter, per finalizzare la catena del buffer è necessario utilizzare anche la corrispondente funzione FinalizePacketBuffer() (o una funzione equivalente).

Consulta la definizione del tipo GetNewBufferFunct per ulteriori informazioni sull'API della funzione GetNewPacketBuffer().

Funzioni protette

IsCloseContainerReserved

bool IsCloseContainerReserved(
  void
) const 

Stabilisci se il container deve riservare spazio per il simbolo di CloseContainer nel punto di avvio / apertura del container.

IsContainerOpen

bool IsContainerOpen(
  void
) const 

SetCloseContainerReserved

void SetCloseContainerReserved(
  bool aCloseContainerReserved
)

Consente di specificare se il contenitore deve riservare lo spazio per il simbolo di CloseContainer nel punto di avvio / apertura del contenitore.

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
)