nl::Weave::TLV::TLVWriter

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

Fornisce un codificatore a elevata efficienza di memoria per la scrittura di dati in formato Weave TLV.

Riepilogo

TLVWriter implementa un codificatore di tipo flusso solo in avanti per i dati TLV Weave. Le applicazioni scrivono i dati in una codifica chiamando uno dei metodi Put() dello scrittore, passando le informazioni relative a tag e valori associate, se necessario. 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 direttamente: 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(*
Una 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 del buffer di output a TLVWriter.

Attributi pubblici

AppData
void *
Un campo puntatore che può essere utilizzato per i 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à nuovo spazio del buffer di output a una TLVWriter.
ImplicitProfileId
uint32_t
L'ID profilo dei tag che devono essere codificati 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 contenitore 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 elementi membri 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 container 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 per scrivere in un singolo buffer di output.
Init(PacketBuffer *buf, uint32_t maxLen)
void
Inizializza un oggetto TLVWriter per scrivere in un singolo PacketBuffer.
Init(PacketBuffer *buf, uint32_t maxLen, bool allowDiscontiguousBuffers)
void
Inizializza un oggetto TLVWriter per scrivere in uno o più PacketBuffers.
InitMalloced(uint8_t *& outBuf, uint32_t initialBufSize, uint32_t maxLen)
void
Inizializza un oggetto TLVWriter per scrivere in un buffer dinamico.
OpenContainer(uint64_t tag, TLVType containerType, TLVWriter & containerWriter)
Inizializza un nuovo oggetto TLVWriter per scrivere i 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 con 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 nullo 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 di stringa UTF8 TLV.
PutString(uint64_t tag, const char *buf, uint32_t len)
Codifica un valore di stringa UTF8 TLV.
PutStringF(uint64_t tag, const char *fmt, ...)
Codifica l'output della stringa formattato in base al formato nell'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 nell'elemento TLV.

Funzioni statiche pubbliche

FinalizePacketBuffer(TLVWriter & writer, uintptr_t bufHandle, uint8_t *bufStart, uint32_t dataLen)
Un'implementazione di una funzione FinalizeBuffer di 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 su 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
Determina se il container deve riservare spazio per il simbolo CloseContainer nel punto di avvio / apertura del container.
IsContainerOpen(void) const
bool
SetCloseContainerReserved(bool aCloseContainerReserved)
void
Specifica se il contenitore deve riservare lo spazio per il simbolo 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)

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

Funzioni di questo tipo vengono chiamate quando viene chiamato il metodo Finalize() di TLVWriter. La funzione deve eseguire qualsiasi pulizia o finalizzazione necessaria relativa all'utilizzo dell'output dell'oggetto writer. Alcuni esempi includono la registrazione della lunghezza finale della codifica o la chiusura di un descrittore di un file.

Dettagli
Parametri
[in] writer
Un riferimento all'oggetto TLVWriter in fase di finalizzazione.
[in,out] bufHandle
Un valore di contesto uintptr_t impostato da 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 la finalizzazione è andata a buon fine.
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 del buffer di output a TLVWriter.

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

Dettagli
Parametri
[in] writer
Un riferimento all'oggetto TLVWriter che richiede nuovo spazio di buffer.
[in,out] bufHandle
Un riferimento a un valore uintptr_t che la funzione può utilizzare per archiviare i dati di contesto tra le chiamate. Questo valore viene inizializzato su 0 prima della prima chiamata.
[in,out] bufStart
Un riferimento a un puntatore dati. All'accesso alla funzione, bufStart punta 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. Al momento dell'immissione della funzione, bufLen contiene il numero di byte di spazio utilizzato nel buffer attuale. All'uscita, si prevede che bufLen contenga il numero massimo di byte che possono essere scritti nel nuovo buffer di output.
Valori restituiti
WEAVE_NO_ERROR
Se la funzione è stata in grado di 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 spazio di buffer aggiuntivo.

Attributi pubblici

AppData

void * AppData

Un campo puntatore che può essere utilizzato per i 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 di funzione in qualsiasi momento prima di chiamare Finalize(). Per impostazione predefinita, il puntatore è impostato su NULL, il che fa sì che il metodo Finalize() non chiami la funzione.

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

GetNewBuffer

GetNewBufferFunct GetNewBuffer

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

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

GetNewBuffer può essere impostato da un'applicazione in qualsiasi momento, ma in genere viene impostato quando il writer viene inizializzato.

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

ImplicitProfileId

uint32_t ImplicitProfileId

L'ID profilo dei tag che devono essere codificati 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 codificherà il tag in forma implicita, omettendo durante la procedura l'ID profilo.

Per impostazione predefinita, la proprietà ImplicitProfileId è impostata su kProfileIdNotSpecified, che indica all'autore di non emettere tag implicitamente codificati. Le applicazioni possono impostare ImplicitProfileId in qualsiasi momento per attivare i tag di codifica in formato implicito a partire dal punto attuale della codifica. L'ID profilo appropriato da impostare solitamente dipende 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(), è necessario effettuare una chiamata corrispondente a CloseContainer(), passando un riferimento allo stesso writer di container a entrambi i metodi.

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

Dettagli
Parametri
[in] containerWriter
Un riferimento all'oggetto TLVWriter fornito al metodo OpenContainer().
Valori restituiti
WEAVE_NO_ERROR
Se il metodo ha esito positivo.
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 di container fornito, ma non è ancora stato chiuso.
WEAVE_ERROR_BUFFER_TOO_SMALL
Se il completamento della codifica del container supererebbe il limite massimo di byte specificati al momento dell'inizializzazione del writer.
WEAVE_ERROR_NO_MEMORY
Se un tentativo di allocare un buffer di output non è riuscito per 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 usato 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 ha esito positivo.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Se un writer di container è stato aperto nel writer attuale, ma non ancora chiuso.
WEAVE_ERROR_INVALID_TLV_TAG
Se il valore del tag specificato non è valido o non è appropriato nel contesto in cui viene scritto il valore.
WEAVE_ERROR_BUFFER_TOO_SMALL
Se scrivendo il valore il valore supererebbe il limite massimo di byte specificati al momento dell'inizializzazione del writer,
WEAVE_ERROR_NO_MEMORY
Se un tentativo di allocare un buffer di output non è riuscito per 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 contenitore TLV dall'oggetto TLVReader.

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

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 ha esito positivo.
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 nel writer attuale, ma 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 non è appropriato nel contesto in cui viene scritto il nuovo contenitore.
WEAVE_ERROR_BUFFER_TOO_SMALL
Se scrivendo il valore il valore supererebbe il limite massimo di byte specificati al momento dell'inizializzazione del writer,
WEAVE_ERROR_NO_MEMORY
Se un tentativo di allocare un buffer di output non è riuscito per 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 container TLV (una struttura, un array o un percorso) contenente un insieme di elementi membri presi da un oggetto TLVReader. Quando il metodo viene chiamato, l'oggetto reader fornito dovrebbe essere posizionato su un elemento contenitore TLV. Il container appena codificato avrà lo stesso tipo e gli stessi membri del container di input. Il tag per il nuovo contenitore è specificato come parametro di input.

Quando il metodo viene restituito, 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 contenitore o AnonymousTag se il contenitore deve essere codificato senza tag. I valori tag devono essere costruiti 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 il cui tipo e i cui membri devono essere copiati.
Valori restituiti
WEAVE_NO_ERROR
Se il metodo ha esito positivo.
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 nel writer attuale, ma 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 fornito non è valido o inappropriato nel contesto in cui viene scritto il nuovo contenitore.
WEAVE_ERROR_BUFFER_TOO_SMALL
Se scrivendo il valore il valore supererebbe il limite massimo di byte specificati al momento dell'inizializzazione del writer,
WEAVE_ERROR_NO_MEMORY
Se un tentativo di allocare un buffer di output non è riuscito per 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 elementi membri di un container precodificato.

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

Quando il metodo viene restituito, 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 contenitore o AnonymousTag se il contenitore deve essere codificato senza tag. I valori tag devono essere costruiti con una delle funzioni di definizione dei tag ProfileTag(), ContextTag() o CommonTag().
[in] encodedContainer
Un buffer contenente un container TLV precodificato il cui tipo e i cui membri devono essere copiati.
[in] encodedContainerLen
La lunghezza in byte del container precodificato.
Valori restituiti
WEAVE_NO_ERROR
Se il metodo ha esito positivo.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Se un writer di container è stato aperto nel writer attuale, ma non ancora chiuso.
WEAVE_ERROR_TLV_UNDERRUN
Se il container codificato è terminato prematuramente.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Se il contenitore codificato contiene un tipo di elemento TLV non valido o non supportato.
WEAVE_ERROR_INVALID_TLV_TAG
Se il contenitore codificato contiene un tag TLV in un contesto non valido o se il tag fornito non è valido o inappropriato nel contesto in cui viene scritto il nuovo contenitore.
WEAVE_ERROR_BUFFER_TOO_SMALL
Se scrivendo il valore il valore supererebbe il limite massimo di byte specificati al momento dell'inizializzazione del writer,
WEAVE_ERROR_NO_MEMORY
Se un tentativo di allocare un buffer di output non è riuscito per 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 il metodo viene chiamato, l'oggetto reader fornito dovrebbe essere posizionato sull'elemento TLV di origine. L'elemento appena codificato avrà lo stesso tipo, tag e contenuto 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 che deve essere copiato.
Valori restituiti
WEAVE_NO_ERROR
Se il metodo ha esito positivo.
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 nel writer attuale, ma 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 fornito non è valido o inappropriato nel contesto in cui viene scritto il nuovo contenitore.
WEAVE_ERROR_BUFFER_TOO_SMALL
Se scrivendo il valore il valore supererebbe il limite massimo di byte specificati al momento dell'inizializzazione del writer,
WEAVE_ERROR_NO_MEMORY
Se un tentativo di allocare un buffer di output non è riuscito per 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 container 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 viene restituito 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 ha esito positivo.
WEAVE_ERROR_INCORRECT_STATE
Se non è stata effettuata una chiamata StartContainer() corrispondente.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Se un writer di container è stato aperto nel writer attuale, ma non ancora chiuso.
WEAVE_ERROR_BUFFER_TOO_SMALL
Se scrivendo il valore il valore supererebbe il limite massimo di byte specificati al momento dell'inizializzazione del writer,
WEAVE_ERROR_NO_MEMORY
Se un tentativo di allocare un buffer di output non è riuscito per 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. Finalize() può essere chiamato solo se non ci sono writer 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 nel writer attuale, ma non ancora chiuso.
other
Altri errori di 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 all'interno del quale TLVWriter sta attualmente scrivendo. Se TLVWriter non scrive elementi all'interno di un container (ossia, se scrive al livello più esterno di una codifica), il metodo restituisce kTLVType_NotSpecified.

Dettagli
Restituisce
Il TLVType del container corrente o kTLVType_NotSpecified se TLVWriter non sta scrivendo 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 da quando il writer è stato inizializzato.

Init

void Init(
  uint8_t *buf,
  uint32_t maxLen
)

Inizializza un oggetto TLVWriter per 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.

Init

void Init(
  PacketBuffer *buf,
  uint32_t maxLen
)

Inizializza un oggetto TLVWriter per 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.

Init

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

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

La scrittura inizia immediatamente dopo l'ultimo byte di dati esistenti nel buffer specificato. Se allowDiscontiguousBuffers è impostato su true, altri PacketBuffer verranno allocati e concatenati 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 allocati 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 nei buffer di output.
[in] allowDiscontiguousBuffers
Se il valore è true, scrivi i dati in una catena di PacketBuffers allocando nuovi buffer in base alle esigenze 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 per 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 da allocare al buffer.

OpenContainer

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

Inizializza un nuovo oggetto TLVWriter per scrivere i membri di un elemento container TLV.

Il metodo OpenContainer() viene utilizzato per scrivere elementi container TLV (struttura, array o percorsi) in una codifica. Il metodo prende il tipo e il tag (se presenti) del nuovo contenitore e un riferimento a un nuovo oggetto writer (l'writer del container) che verrà inizializzato per la scrittura degli elementi del container. Le applicazioni scrivono i membri del nuovo container utilizzando l'autore del container e richiamano CloseContainer() per completare la codifica del container.

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

L'autore del container eredita varie proprietà di configurazione dal writer principale. Queste sono:

  • ID profilo implicito (ImplicitProfileId)
  • Il puntatore dei dati dell'applicazione (AppData)
  • Puntatori delle funzioni GetNewBuffer e FinalizeBuffer

Dettagli
Parametri
[in] tag
Il tag TLV da codificare con il contenitore o AnonymousTag se il contenitore deve essere codificato senza tag. I valori tag devono essere costruiti con una delle funzioni di definizione dei tag ProfileTag(), ContextTag() o CommonTag().
[in] containerType
Il tipo di container da codificare. 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 fornito vengono sovrascritti.
Valori restituiti
WEAVE_NO_ERROR
Se il metodo ha esito positivo.
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 nel writer attuale, ma non ancora chiuso.
WEAVE_ERROR_INVALID_TLV_TAG
Se il valore del tag specificato non è valido o non è appropriato nel contesto in cui viene scritto il valore.
WEAVE_ERROR_BUFFER_TOO_SMALL
Se scrivendo il valore il valore supererebbe il limite massimo di byte specificati al momento dell'inizializzazione del writer,
WEAVE_ERROR_NO_MEMORY
Se un tentativo di allocare un buffer di output non è riuscito per 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.

Si tratta di una funzione membro con sovraccarico, fornita per praticità. Differisce dalla funzione precedente solo per quali argomenti 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 tag devono essere costruiti 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 ha esito positivo.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Se un writer di container è stato aperto nel writer attuale, ma non ancora chiuso.
WEAVE_ERROR_INVALID_TLV_TAG
Se il valore del tag specificato non è valido o non è appropriato nel contesto in cui viene scritto il valore.
WEAVE_ERROR_BUFFER_TOO_SMALL
Se scrivendo il valore il valore supererebbe il limite massimo di byte specificati al momento dell'inizializzazione del writer,
WEAVE_ERROR_NO_MEMORY
Se un tentativo di allocare un buffer di output non è riuscito per 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.

Si tratta di una funzione membro con sovraccarico, fornita per praticità. Differisce dalla funzione precedente solo per quali argomenti 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 tag devono essere costruiti 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. False se il valore deve essere codificato nel numero minimo di byte necessari per rappresentare il valore. Nota: consigliamo vivamente alle applicazioni di impostare questo parametro su false.
Valori restituiti
WEAVE_NO_ERROR
Se il metodo ha esito positivo.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Se un writer di container è stato aperto nel writer attuale, ma non ancora chiuso.
WEAVE_ERROR_INVALID_TLV_TAG
Se il valore del tag specificato non è valido o non è appropriato nel contesto in cui viene scritto il valore.
WEAVE_ERROR_BUFFER_TOO_SMALL
Se scrivendo il valore il valore supererebbe il limite massimo di byte specificati al momento dell'inizializzazione del writer,
WEAVE_ERROR_NO_MEMORY
Se un tentativo di allocare un buffer di output non è riuscito per 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.

Si tratta di una funzione membro con sovraccarico, fornita per praticità. Differisce dalla funzione precedente solo per quali argomenti 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 tag devono essere costruiti 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 ha esito positivo.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Se un writer di container è stato aperto nel writer attuale, ma non ancora chiuso.
WEAVE_ERROR_INVALID_TLV_TAG
Se il valore del tag specificato non è valido o non è appropriato nel contesto in cui viene scritto il valore.
WEAVE_ERROR_BUFFER_TOO_SMALL
Se scrivendo il valore il valore supererebbe il limite massimo di byte specificati al momento dell'inizializzazione del writer,
WEAVE_ERROR_NO_MEMORY
Se un tentativo di allocare un buffer di output non è riuscito per 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.

Si tratta di una funzione membro con sovraccarico, fornita per praticità. Differisce dalla funzione precedente solo per quali argomenti 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 tag devono essere costruiti 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. False se il valore deve essere codificato nel numero minimo di byte necessari per rappresentare il valore. Nota: consigliamo vivamente alle applicazioni di impostare questo parametro su false.
Valori restituiti
WEAVE_NO_ERROR
Se il metodo ha esito positivo.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Se un writer di container è stato aperto nel writer attuale, ma non ancora chiuso.
WEAVE_ERROR_INVALID_TLV_TAG
Se il valore del tag specificato non è valido o non è appropriato nel contesto in cui viene scritto il valore.
WEAVE_ERROR_BUFFER_TOO_SMALL
Se scrivendo il valore il valore supererebbe il limite massimo di byte specificati al momento dell'inizializzazione del writer,
WEAVE_ERROR_NO_MEMORY
Se un tentativo di allocare un buffer di output non è riuscito per 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 con virgola mobile TLV.

Si tratta di una funzione membro con sovraccarico, fornita per praticità. Differisce dalla funzione precedente solo per quali argomenti 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 tag devono essere costruiti 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 ha esito positivo.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Se un writer di container è stato aperto nel writer attuale, ma non ancora chiuso.
WEAVE_ERROR_INVALID_TLV_TAG
Se il valore del tag specificato non è valido o non è appropriato nel contesto in cui viene scritto il valore.
WEAVE_ERROR_BUFFER_TOO_SMALL
Se scrivendo il valore il valore supererebbe il limite massimo di byte specificati al momento dell'inizializzazione del writer,
WEAVE_ERROR_NO_MEMORY
Se un tentativo di allocare un buffer di output non è riuscito per 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 tag devono essere costruiti 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 ha esito positivo.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Se un writer di container è stato aperto nel writer attuale, ma non ancora chiuso.
WEAVE_ERROR_INVALID_TLV_TAG
Se il valore del tag specificato non è valido o non è appropriato nel contesto in cui viene scritto il valore.
WEAVE_ERROR_BUFFER_TOO_SMALL
Se scrivendo il valore il valore supererebbe il limite massimo di byte specificati al momento dell'inizializzazione del writer,
WEAVE_ERROR_NO_MEMORY
Se un tentativo di allocare un buffer di output non è riuscito per 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 tag devono essere costruiti 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 ha esito positivo.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Se un writer di container è stato aperto nel writer attuale, ma non ancora chiuso.
WEAVE_ERROR_INVALID_TLV_TAG
Se il valore del tag specificato non è valido o non è appropriato nel contesto in cui viene scritto il valore.
WEAVE_ERROR_BUFFER_TOO_SMALL
Se scrivendo il valore il valore supererebbe il limite massimo di byte specificati al momento dell'inizializzazione del writer,
WEAVE_ERROR_NO_MEMORY
Se un tentativo di allocare un buffer di output non è riuscito per 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 nullo 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 tag devono essere costruiti con una delle funzioni di definizione dei tag ProfileTag(), ContextTag() o CommonTag().
Valori restituiti
WEAVE_NO_ERROR
Se il metodo ha esito positivo.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Se un writer di container è stato aperto nel writer attuale, ma non ancora chiuso.
WEAVE_ERROR_INVALID_TLV_TAG
Se il valore del tag specificato non è valido o non è appropriato nel contesto in cui viene scritto il valore.
WEAVE_ERROR_BUFFER_TOO_SMALL
Se scrivendo il valore il valore supererebbe il limite massimo di byte specificati al momento dell'inizializzazione del writer,
WEAVE_ERROR_NO_MEMORY
Se un tentativo di allocare un buffer di output non è riuscito per 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 container TLV (una struttura, un array o un percorso) contenente un insieme di elementi membri presi 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 es. i membri della struttura devono avere tag, mentre i membri dell'array no).

Il metodo codifica l'intero elemento container in un'unica chiamata. Quando viene restituito PutPreEncodedContainer(), 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 contenitore o AnonymousTag se il contenitore deve essere codificato senza tag. I valori tag devono essere costruiti con una delle funzioni di definizione dei tag ProfileTag(), ContextTag() o CommonTag().
[in] containerType
Il tipo di container da codificare. Deve essere kTLVType_Structure, kTLVType_Array o kTLVType_Path.
[in] data
Un puntatore a un buffer contenente zero di elementi TLV più codificati che diventeranno membri del nuovo container.
[in] dataLen
Il numero di byte nel buffer data.
Valori restituiti
WEAVE_NO_ERROR
Se il metodo ha esito positivo.
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 nel writer attuale, ma non ancora chiuso.
WEAVE_ERROR_INVALID_TLV_TAG
Se il valore del tag specificato non è valido o non è appropriato nel contesto in cui viene scritto il valore.
WEAVE_ERROR_BUFFER_TOO_SMALL
Se scrivendo il valore il valore supererebbe il limite massimo di byte specificati al momento dell'inizializzazione del writer,
WEAVE_ERROR_NO_MEMORY
Se un tentativo di allocare un buffer di output non è riuscito per 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 di 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 tag devono essere costruiti con una delle funzioni di definizione dei tag ProfileTag(), ContextTag() o CommonTag().
[in] buf
Un puntatore alla stringa UTF-8 con terminazione nullo da codificare.
Valori restituiti
WEAVE_NO_ERROR
Se il metodo ha esito positivo.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Se un writer di container è stato aperto nel writer attuale, ma non ancora chiuso.
WEAVE_ERROR_INVALID_TLV_TAG
Se il valore del tag specificato non è valido o non è appropriato nel contesto in cui viene scritto il valore.
WEAVE_ERROR_BUFFER_TOO_SMALL
Se scrivendo il valore il valore supererebbe il limite massimo di byte specificati al momento dell'inizializzazione del writer,
WEAVE_ERROR_NO_MEMORY
Se un tentativo di allocare un buffer di output non è riuscito per 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 di 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 tag devono essere costruiti 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 ha esito positivo.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Se un writer di container è stato aperto nel writer attuale, ma non ancora chiuso.
WEAVE_ERROR_INVALID_TLV_TAG
Se il valore del tag specificato non è valido o non è appropriato nel contesto in cui viene scritto il valore.
WEAVE_ERROR_BUFFER_TOO_SMALL
Se scrivendo il valore il valore supererebbe il limite massimo di byte specificati al momento dell'inizializzazione del writer,
WEAVE_ERROR_NO_MEMORY
Se un tentativo di allocare un buffer di output non è riuscito per 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 nell'elemento TLV.

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

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

La piattaforma fornisce una variante di vsnprintf chiamata vsnprintf_ex, che si comporta esattamente come vsnprintf, tranne per il fatto che ha delle disposizioni per omettere i primi n caratteri dell'output.

Tieni presente che, sebbene la funzione basata su callback possa essere la più semplice e utilizzi la minor quantità di codice, la varietà di funzioni vsprintf_ex consumerà meno stack.

Se nessuna delle opzioni precedenti è disponibile, ma la piattaforma fornisce malloc, la funzione allocherà un buffer temporaneo per conservare l'output. Quando la piattaforma non fornisce né miglioramenti alla famiglia di stampa né al Malloc, l'output viene troncato in modo da adattarsi allo 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 tag devono essere costruiti 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 a fmt.
Valori restituiti
WEAVE_NO_ERROR
Se il metodo ha esito positivo.
other
Se le chiamate sottostanti ai metodi TLVWriter WriteElementHead o GetNewBuffer non sono andate a buon fine, il loro errore viene inoltrato immediatamente all'interno dello 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 del container TLV (struttura, array o percorsi) in una codifica. Il metodo prende il tipo e il tag (se presenti) del nuovo contenitore e un riferimento a un valore TLVType che verrà utilizzato per salvare il contesto corrente dell'autore del testo mentre 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 terminare la codifica del container.

Dettagli
Parametri
[in] tag
Il tag TLV da codificare con il contenitore o AnonymousTag se il contenitore deve essere codificato senza tag. I valori tag devono essere costruiti con una delle funzioni di definizione dei tag ProfileTag(), ContextTag() o CommonTag().
[in] containerType
Il tipo di container da codificare. 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 ha esito positivo.
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 nel writer attuale, ma non ancora chiuso.
WEAVE_ERROR_INVALID_TLV_TAG
Se il valore del tag specificato non è valido o non è appropriato nel contesto in cui viene scritto il valore.
WEAVE_ERROR_BUFFER_TOO_SMALL
Se scrivendo il valore il valore supererebbe il limite massimo di byte specificati al momento dell'inizializzazione del writer,
WEAVE_ERROR_NO_MEMORY
Se un tentativo di allocare un buffer di output non è riuscito per 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 usato 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 tag devono essere costruiti 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 ha esito positivo.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Se un writer di container è stato aperto nel writer attuale, ma non ancora chiuso.
WEAVE_ERROR_INVALID_TLV_TAG
Se il valore del tag specificato non è valido o non è appropriato nel contesto in cui viene scritto il valore.
WEAVE_ERROR_BUFFER_TOO_SMALL
Se scrivendo il valore il valore supererebbe il limite massimo di byte specificati al momento dell'inizializzazione del writer,
WEAVE_ERROR_NO_MEMORY
Se un tentativo di allocare un buffer di output non è riuscito per mancanza di memoria.
other
Altri errori Weave o specifici della piattaforma restituiti dalle funzioni GetNewBuffer() o FinalizeBuffer() configurate.

VPutStringF

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

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

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

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

La piattaforma fornisce una variante di vsnprintf chiamata vsnprintf_ex, che si comporta esattamente come vsnprintf, tranne per il fatto che ha delle disposizioni per omettere i primi n caratteri dell'output.

Tieni presente che, sebbene la funzione basata su callback possa essere la più semplice e utilizzi la minor quantità di codice, la varietà di funzioni vsprintf_ex consumerà meno stack.

Se nessuna delle opzioni precedenti è disponibile, ma la piattaforma fornisce malloc, la funzione allocherà un buffer temporaneo per conservare l'output. Quando la piattaforma non fornisce né miglioramenti alla famiglia di stampa né al Malloc, l'output viene troncato in modo da adattarsi allo 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 tag devono essere costruiti 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 a fmt.
Valori restituiti
WEAVE_NO_ERROR
Se il metodo ha esito positivo.
other
Se le chiamate sottostanti ai metodi TLVWriter WriteElementHead o GetNewBuffer non sono andate a buon fine, il loro errore viene inoltrato immediatamente all'interno dello 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 di TLVWriter per la scrittura in una catena di PacketBuffers.

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

Per ulteriori informazioni sull'API della funzione FinalizePacketBuffer(), consulta la definizione del tipo di FinalizeBufferFunct.

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 su un buffer dinamico.

La funzione GetNewBuffer_Malloced() fornisce nuovo spazio di output a TLVWriter raddoppiando la dimensione del buffer dinamico sottostante 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 TLVWriter allocando una catena di uno o più PacketBuffers in base alle esigenze per archiviare la codifica. La funzione è progettata per essere assegnata al puntatore della funzione GetNewBuffer TLVWriter.

Tieni presente che quando utilizzi GetNewPacketBuffer con un oggetto TLVWriter, devi utilizzare anche la funzione FinalizePacketBuffer() (o una funzione equivalente) per finalizzare la catena di buffer.

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

Funzioni protette

IsCloseContainerReserved

bool IsCloseContainerReserved(
  void
) const 

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

IsContainerOpen

bool IsContainerOpen(
  void
) const 

SetCloseContainerReserved

void SetCloseContainerReserved(
  bool aCloseContainerReserved
)

Specifica se il contenitore deve riservare lo spazio per il simbolo 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
)