nl::Tessuto::TLV::TLVReader

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

Fornisce un analizzatore sintattico a efficienza di memoria per i dati codificati in formato TLV Weave.

Riepilogo

TLVReader implementa un analizzatore sintattico in modalità "pull-forward" solo per i dati TLV di Weave. L'oggetto TLVReader funziona come un cursore che può essere utilizzato per eseguire l'iterazione su una sequenza di elementi TLV e interpretarne i contenuti. Se posizionato su un elemento, le applicazioni possono effettuare chiamate ai metodi Get() del lettore per eseguire query sul tipo e sul tag dell'elemento corrente ed estrarre qualsiasi valore associato. Il metodo Next() del lettore viene utilizzato per passare da un elemento all'altro.

Un oggetto TLVReader viene sempre posizionato prima, dopo o dopo un elemento TLV. Quando viene inizializzato per la prima volta, un TLVReader viene posizionato immediatamente prima del primo elemento della codifica. Per iniziare a leggere, un'applicazione deve effettuare una chiamata iniziale al metodo Next() per posizionare il lettore sul primo elemento. Quando un elemento container viene rilevato come struttura, è possibile usare un array o un percorso i metodi OpenContainer() o EnterContainer() per eseguire l'iterazione dei contenuti del container.

Quando il lettore raggiunge la fine di una codifica TLV o l'ultimo elemento all'interno di un contenitore, segnala l'applicazione restituendo un errore WEAVE_END_OF_TLV dal metodo Next(). Il lettore continuerà a restituire WEAVE_END_OF_TLV fino a quando non viene reinizializzato o finché non viene chiuso il container corrente (tramite CloseContainer() / ExitContainer()).

Un oggetto TLVReader può analizzare i dati direttamente da un buffer di input fisso o da una catena di uno o più PacketBuffers. Inoltre, le applicazioni possono fornire una funzione GetNextBuffer per inviare dati al lettore da una fonte arbitraria, ad esempio una presa o una porta seriale.

Eredità

Sottoclassi note dirette:
nl::Weave::Profiles::DataManagement_Current::CircularEventReader
nl::Weave::TLV::CircularTLVReader

Tipi pubblici

GetNextBufferFunct)(TLVReader &reader, uintptr_t &bufHandle, const uint8_t *&bufStart, uint32_t &bufLen) WEAVE_ERROR(*)
Una funzione che può essere utilizzata per recuperare dati TLV aggiuntivi da analizzare.

Attributi pubblici

AppData
void *
Un campo puntatore che può essere utilizzato per dati specifici delle applicazioni.
GetNextBuffer
Un puntatore a una funzione che produce i dati di input per l'oggetto TLVReader.
ImplicitProfileId
uint32_t
L'ID profilo da utilizzare per i tag del profilo codificati in forma implicita.

Attributi protetti

mBufEnd
const uint8_t *
mBufHandle
uintptr_t
mContainerType
mControlByte
uint16_t
mElemLenOrVal
uint64_t
mElemTag
uint64_t
mLenRead
uint32_t
mMaxLen
uint32_t
mReadPoint
const uint8_t *

Funzioni pubbliche

CloseContainer(TLVReader & containerReader)
Completa la lettura di un container TLV dopo una chiamata a OpenContainer().
DupBytes(uint8_t *& buf, uint32_t & dataLen)
Alloca e restituisce un buffer contenente il valore della stringa UTF8 corrente.
DupString(char *& buf)
Alloca e restituisce un buffer contenente il valore della terminazione corrente della stringa UTF8.
EnterContainer(TLVType & outerContainerType)
Prepara un oggetto TLVReader per la lettura dei membri dell'elemento container TLV.
ExitContainer(TLVType outerContainerType)
Completa la lettura di un container TLV e prepara un oggetto TLVReader per leggere gli elementi dopo il container.
Get(bool & v)
Recupera il valore dell'elemento corrente come tipo bool.
Get(int8_t & v)
Recupera il valore dell'elemento corrente come un numero intero firmato a 8 bit.
Get(int16_t & v)
Recupera il valore dell'elemento corrente come un numero intero firmato a 16 bit.
Get(int32_t & v)
Recupera il valore dell'elemento corrente come un numero intero firmato a 32 bit.
Get(int64_t & v)
Recupera il valore dell'elemento corrente come un numero intero firmato a 64 bit.
Get(uint8_t & v)
Recupera il valore dell'elemento corrente come un numero intero senza segno a 8 bit.
Get(uint16_t & v)
Recupera il valore dell'elemento corrente come numero intero senza segno a 16 bit.
Get(uint32_t & v)
Recupera il valore dell'elemento corrente come un numero intero senza segno a 32 bit.
Get(uint64_t & v)
Recupera il valore dell'elemento corrente come un numero intero senza segno a 64 bit.
Get(float & v)
Get(double & v)
Recupera il valore dell'elemento corrente come numero a virgola mobile a precisione doppia.
GetBufHandle(void) const
uintptr_t
GetBytes(uint8_t *buf, uint32_t bufSize)
Recupera il valore dell'elemento stringa UTF8 corrente.
GetContainerType(void) const
Restituisce il tipo del container all'interno del quale TLVReader sta leggendo.
GetControlByte(void) const
uint16_t
Restituisce il byte di controllo associato all'elemento TLV corrente.
GetDataPtr(const uint8_t *& data)
Recupera un puntatore sul byte codificato iniziale di un byte byte TLV o un elemento stringa UTF8.
GetLength(void) const
uint32_t
Restituisce la lunghezza dei dati associati all'elemento TLV corrente.
GetLengthRead(void) const
uint32_t
Restituisce il numero totale di byte letti da quando il lettore è stato inizializzato.
GetReadPoint(void) const
const uint8_t *
Visualizza il punto nel buffer di input sottostante che corrisponde alla posizione corrente del lettore.
GetRemainingLength(void) const
uint32_t
Restituisce il numero totale di byte che possono essere letti fino a raggiungere la lunghezza massima di lettura.
GetString(char *buf, uint32_t bufSize)
Recupera il valore dell'elemento stringa UTF8 attuale come stringa terminata nullo.
GetTag(void) const
uint64_t
Restituisce il tag associato all'elemento TLV corrente.
GetType(void) const
Restituisce il tipo dell'elemento TLV corrente.
Init(const TLVReader & aReader)
void
Inizializza un oggetto TLVReader da un altro oggetto TLVReader.
Init(const uint8_t *data, uint32_t dataLen)
void
Inizializza un oggetto TLVReader da leggere da un singolo buffer di input.
Init(PacketBuffer *buf, uint32_t maxLen)
void
Inizializza un oggetto TLVReader da leggere da un singolo PacketBuffer.
Init(PacketBuffer *buf, uint32_t maxLen, bool allowDiscontiguousBuffers)
void
Inizializza un oggetto TLVReader da leggere da uno o più PacketBuffers.
Next(void)
Fa passare l'oggetto TLVReader all'elemento TLV successivo da leggere.
Next(TLVType expectedType, uint64_t expectedTag)
Fa passare l'oggetto TLVReader all'elemento TLV successivo da leggere, rivendicando il tipo e il tag del nuovo elemento.
OpenContainer(TLVReader & containerReader)
Inizializza un nuovo oggetto TLVReader per la lettura dei membri di un elemento container TLV.
Skip(void)
Avanza all'oggetto TLVReader subito dopo l'elemento TLV corrente.
VerifyEndOfContainer(void)
Verifica che l'oggetto TVLReader si trovi alla fine di un container TLV.

Funzioni protette

ClearElementState(void)
void
Cancella lo stato del TLVReader.
ElementType(void) const
TLVElementType
Questo è un metodo privato che restituisce TLVElementType da mControlByte.
EnsureData(WEAVE_ERROR noDataErr)
GetElementHeadLength(uint8_t & elemHeadBytes) const
Questo è un metodo privato utilizzato per calcolare la lunghezza di un'intestazione TLV.
IsContainerOpen(void) const
bool
ReadData(uint8_t *buf, uint32_t len)
ReadElement(void)
ReadTag(TLVTagControl tagControl, const uint8_t *& p)
uint64_t
SetContainerOpen(bool aContainerOpen)
void
SkipData(void)
Salta i dati contenuti nell'attuale TLV leggendoci senza un buffer di destinazione.
SkipToEndOfContainer(void)
VerifyElement(void)

Funzioni statiche protette

FailGetNextBuffer(TLVReader & reader, uintptr_t & bufHandle, const uint8_t *& bufStart, uint32_t & bufLen)
GetNextPacketBuffer(TLVReader & reader, uintptr_t & bufHandle, const uint8_t *& bufStart, uint32_t & bufLen)

Tipi pubblici

GetNextBufferFunct

WEAVE_ERROR(* GetNextBufferFunct)(TLVReader &reader, uintptr_t &bufHandle, const uint8_t *&bufStart, uint32_t &bufLen)

Una funzione che può essere utilizzata per recuperare dati TLV aggiuntivi da analizzare.

Le funzioni di questo tipo vengono utilizzate per inviare dati di input a un TLVReader. Quando viene chiamata, la funzione dovrebbe produrre dati aggiuntivi per consentire al lettore di analizzare o segnalare che il lettore non è disponibile.

Dettagli
Parametri
[in] reader
Un riferimento all'oggetto TLVReader che richiede i dati di input.
[in,out] bufHandle
Un riferimento a un valore uintptr_t che la funzione può utilizzare per memorizzare dati contestuali tra le chiamate. Questo valore viene inizializzato su 0 prima della prima chiamata.
[in,out] bufStart
Un riferimento a un puntatore dati. Alla voce della funzione, bufStart punta a un byte oltre l'ultimo byte di dati TLV utilizzato dal lettore. All'uscita, si prevede che bufStart punti al primo byte di nuovi dati TLV da analizzare. Il nuovo valore del puntatore può trovarsi all'interno dello stesso buffer dei dati utilizzati in precedenza o può puntare a un buffer completamente nuovo.
[out] bufLen
Un riferimento a un numero intero non firmato che la funzione deve impostare sul numero di byte di dati TLV restituiti. Se è stata raggiunta la fine dei dati TLV di input, la funzione deve impostare questo valore su 0.
Valori restituiti
WEAVE_NO_ERROR
Se la funzione ha generato correttamente altri dati TLV o se è stata raggiunta la fine dei dati di input, in questo caso bufLen deve essere impostato su 0.
other
Altri codici di errore specifici di Weave o della piattaforma che indicano che si è verificato un errore che ha impedito alla funzione di produrre i dati richiesti.

Attributi pubblici

Spazio dei nomi

void * AppData

Un campo puntatore che può essere utilizzato per dati specifici delle applicazioni.

GetNextBuffer

GetNextBufferFunct GetNextBuffer

Un puntatore a una funzione che produce i dati di input per l'oggetto TLVReader.

Se viene impostato su NULL (valore predefinito), il lettore presume che non siano disponibili ulteriori dati di input.

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

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

ID profilo implicito

uint32_t ImplicitProfileId

L'ID profilo da utilizzare per i tag del profilo codificati in forma implicita.

Quando il lettore rileva un tag specifico del profilo che è stato codificato in forma implicita, utilizza il valore della proprietà ImplicitProfileId come l'ID profilo presunto per il tag.

Per impostazione predefinita, la proprietà ImplicitProfileId è impostata su kProfileIdNotSpecificato. Quando viene decodificato il TLV che contiene tag con codifica implicita, le applicazioni devono impostare ImplicitProfileId prima di leggere gli elementi TLV contenenti tali tag. L'ID profilo appropriato di solito dipende dal contesto in cui viene pronunciato l'applicazione o il protocollo.

Se viene rilevato un tag con codifica implicita quando ImplicitProfileId è impostato su kProfileIdNotSpecificato, il lettore restituirà un errore WEAVE_ERROR_UNKNOWN_IMPLICIT_TLV_TAG.

Attributi protetti

Fine mBuf

const uint8_t * mBufEnd

mBufHandle

uintptr_t mBufHandle

TipoContainerM

TLVType mContainerType

mControlByte

uint16_t mControlByte

ElmLenOrVal

uint64_t mElemLenOrVal

mElemTag

uint64_t mElemTag

lettura mLen

uint32_t mLenRead

mMaxLen

uint32_t mMaxLen

mReadPoint

const uint8_t * mReadPoint

Funzioni pubbliche

Chiudi Container

WEAVE_ERROR CloseContainer(
  TLVReader & containerReader
)

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

Il metodo ChiudiContainer() ripristina lo stato di un oggetto TLVReader principale dopo una chiamata a OpenContainer(). Per ogni chiamata alle applicazioni OpenContainer() è necessario effettuare una chiamata corrispondente a CloseContainer(), trasmettendo un riferimento allo stesso lettore a entrambi i metodi.

Quando viene restituito CloseContainer(), il lettore principale viene posizionato immediatamente prima del primo elemento che segue il contenitore. Da questo punto in poi, un'applicazione può utilizzare il metodo Next() per avanzare tra gli elementi rimanenti.

Le applicazioni possono chiamare vicino CloseContainer() su un lettore principale in qualsiasi momento, indipendentemente dal fatto che tutti gli elementi nel container sottostante siano stati letti o meno. Dopo aver chiamato ChiudiContainer(), l'applicazione deve prendere in considerazione il lettore di container 'de-Initialized' e non deve utilizzarlo ulteriormente senza reinizializzarlo.

Dettagli
Parametri
[in] containerReader
Un riferimento all'oggetto TLVReader che è stato fornito al metodo OpenContainer().
Valori restituiti
WEAVE_NO_ERROR
Se il metodo ha avuto esito positivo.
WEAVE_ERROR_INCORRECT_STATE
Se OpenContainer() non è stato richiamato sul lettore, oppure se il lettore non corrisponde a quello passato al metodo OpenContainer().
WEAVE_ERROR_TLV_UNDERRUN
Se la codifica TLV sottostante è terminata prematuramente.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Se il lettore ha riscontrato un tipo di elemento TLV non valido o non supportato.
WEAVE_ERROR_INVALID_TLV_TAG
Se il lettore ha riscontrato un tag TLV in un contesto non valido.
other
Altri codici di errore Weave o di piattaforma restituiti dalla funzione GetNextBuffer() configurata. Possibile solo quando GetNextBuffer non è NULL.

Dupbyte

WEAVE_ERROR DupBytes(
  uint8_t *& buf,
  uint32_t & dataLen
)

Alloca e restituisce un buffer contenente il valore della stringa UTF8 corrente.

Questo metodo crea un buffer per e restituisce una copia dei dati associati all'elemento stringa di byte o UTF-8 nella posizione corrente. La memoria del buffer si ottiene con centrioc() e dovrebbe essere liberata con free() dal chiamante quando non è più necessario.

Dettagli
Parametri
[out] buf
Un riferimento a un puntatore a cui viene assegnato correttamente un buffer heap di dataLen byte.
[out] dataLen
Un riferimento allo spazio di archiviazione in dimensioni, in byte, di buf al completamento dell'operazione.
Valori restituiti
WEAVE_NO_ERROR
Se il metodo ha avuto esito positivo.
WEAVE_ERROR_WRONG_TLV_TYPE
Se l'elemento corrente non è una stringa TLV o un byte TLV oppure se il lettore non è posizionato su un elemento.
WEAVE_ERROR_NO_MEMORY
Se non è stato possibile allocare memoria per il buffer di output.
WEAVE_ERROR_TLV_UNDERRUN
Se la codifica TLV sottostante è terminata prematuramente.
WEAVE_ERROR_UNSUPPORTED_WEAVE_FEATURE
Se la piattaforma di destinazione non supporta Malloc() e free().
other
Altri codici di errore Weave o di piattaforma restituiti dalla funzione GetNextBuffer() configurata. Possibile solo quando GetNextBuffer non è NULL.

Dupstring

WEAVE_ERROR DupString(
  char *& buf
)

Alloca e restituisce un buffer contenente il valore della terminazione corrente della stringa UTF8.

Questo metodo crea un buffer e restituisce una copia con terminazione null dei dati associati all'elemento stringa di byte o UTF-8 nella posizione corrente. La memoria del buffer si ottiene con centrioc() e dovrebbe essere liberata con free() dal chiamante quando non è più necessario.

Dettagli
Parametri
[out] buf
Un riferimento a un puntatore a cui viene assegnato un buffer heap allo stesso modo.
Valori restituiti
WEAVE_NO_ERROR
Se il metodo ha avuto esito positivo.
WEAVE_ERROR_WRONG_TLV_TYPE
Se l'elemento corrente non è una stringa TLV o un byte TLV oppure se il lettore non è posizionato su un elemento.
WEAVE_ERROR_NO_MEMORY
Se non è stato possibile allocare memoria per il buffer di output.
WEAVE_ERROR_TLV_UNDERRUN
Se la codifica TLV sottostante è terminata prematuramente.
WEAVE_ERROR_UNSUPPORTED_WEAVE_FEATURE
Se la piattaforma di destinazione non supporta Malloc() e free().
other
Altri codici di errore Weave o di piattaforma restituiti dalla funzione GetNextBuffer() configurata. Possibile solo quando GetNextBuffer non è NULL.

Inserisci contenitore

WEAVE_ERROR EnterContainer(
  TLVType & outerContainerType
)

Prepara un oggetto TLVReader per la lettura dei membri dell'elemento container TLV.

Il metodo EnterContainer() prepara l'oggetto TLVReader corrente per iniziare a leggere gli elementi membro di un container TLV (una struttura, una matrice o un percorso). Per ogni chiamata a EnterContainer() le applicazioni devono effettuare una chiamata corrispondente a ExitContainer().

Quando EnterContainer() viene chiamato, l'oggetto TLVReader deve essere posizionato sull'elemento container per essere letto. Il metodo considera come un riferimento un valore TLVType che verrà utilizzato per salvare il contesto del lettore durante la lettura del container.

Quando viene restituito il metodo EnterContainer(), il lettore viene posizionato immediatamente prima del primo membro del contenitore. Chiamando ripetutamente Next() avanzerà il lettore tra i membri della raccolta fino al raggiungimento della fine, a quel punto il lettore restituirà WEAVE_END_OF_TLV.

Una volta che l'applicazione ha terminato la lettura di un container, può continuare a leggere gli elementi dopo il container chiamando il metodo ExitContainer().

Dettagli
Parametri
[out] outerContainerType
Un riferimento a un valore TLVType che riceverà il contesto del lettore.
Valori restituiti
WEAVE_NO_ERROR
Se il metodo ha avuto esito positivo.
WEAVE_ERROR_INCORRECT_STATE
Se l'elemento corrente non è posizionato su un elemento contenitore.

ExitContainer

WEAVE_ERROR ExitContainer(
  TLVType outerContainerType
)

Completa la lettura di un container TLV e prepara un oggetto TLVReader per leggere gli elementi dopo il container.

Il metodo ExitContainer() ripristina lo stato di un oggetto TLVReader dopo una chiamata a EnterContainer(). Per ogni chiamata alle applicazioni EnterContainer() è necessario effettuare una chiamata corrispondente a ExitContainer(), trasmettendo il valore di contesto restituito dal metodo EnterContainer().

Quando ExitContainer() restituisce, il lettore viene posizionato immediatamente prima del primo elemento che segue il contenitore. Da questo punto in poi, un'applicazione può utilizzare il metodo Next() per avanzare tra gli elementi rimanenti.

Una volta chiamato EnterContainer(), le applicazioni possono chiamare ExitContainer() su un lettore in qualsiasi momento, a prescindere dalla lettura o meno di tutti gli elementi del container sottostante.

Dettagli
Parametri
[in] outerContainerType
Il valore TLVType restituito dal metodo EnterContainer().
Valori restituiti
WEAVE_NO_ERROR
Se il metodo ha avuto esito positivo.
WEAVE_ERROR_INCORRECT_STATE
Se OpenContainer() non è stato richiamato sul lettore, oppure se il lettore non corrisponde a quello passato al metodo OpenContainer().
WEAVE_ERROR_TLV_UNDERRUN
Se la codifica TLV sottostante è terminata prematuramente.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Se il lettore ha riscontrato un tipo di elemento TLV non valido o non supportato.
WEAVE_ERROR_INVALID_TLV_TAG
Se il lettore ha riscontrato un tag TLV in un contesto non valido.
other
Altri codici di errore Weave o di piattaforma restituiti dalla funzione GetNextBuffer() configurata. Possibile solo quando GetNextBuffer non è NULL.

Get

WEAVE_ERROR Get(
  bool & v
)

Recupera il valore dell'elemento corrente come tipo bool.

Dettagli
Parametri
[out] v
Riceve il valore associato all'elemento TLV corrente.
Valori restituiti
WEAVE_NO_ERROR
Se il metodo ha avuto esito positivo.
WEAVE_ERROR_WRONG_TLV_TYPE
Se l'elemento corrente non è di tipo booleano TLV o il lettore non è posizionato su un elemento.

Get

WEAVE_ERROR Get(
  int8_t & v
)

Recupera il valore dell'elemento corrente come un numero intero firmato a 8 bit.

Se il valore intero codificato è maggiore del tipo di dati di output, il valore risultante verrà troncato.

Dettagli
Parametri
[out] v
Riceve il valore associato all'elemento TLV corrente.
Valori restituiti
WEAVE_NO_ERROR
Se il metodo ha avuto esito positivo.
WEAVE_ERROR_WRONG_TLV_TYPE
Se l'elemento corrente non è un tipo intero TLV (firmato o non firmato) oppure il lettore non è posizionato su un elemento.

Get

WEAVE_ERROR Get(
  int16_t & v
)

Recupera il valore dell'elemento corrente come un numero intero firmato a 16 bit.

Se il valore intero codificato è maggiore del tipo di dati di output, il valore risultante verrà troncato.

Dettagli
Parametri
[out] v
Riceve il valore associato all'elemento TLV corrente.
Valori restituiti
WEAVE_NO_ERROR
Se il metodo ha avuto esito positivo.
WEAVE_ERROR_WRONG_TLV_TYPE
Se l'elemento corrente non è un tipo intero TLV (firmato o non firmato) oppure il lettore non è posizionato su un elemento.

Get

WEAVE_ERROR Get(
  int32_t & v
)

Recupera il valore dell'elemento corrente come un numero intero firmato a 32 bit.

Se il valore intero codificato è maggiore del tipo di dati di output, il valore risultante verrà troncato.

Dettagli
Parametri
[out] v
Riceve il valore associato all'elemento TLV corrente.
Valori restituiti
WEAVE_NO_ERROR
Se il metodo ha avuto esito positivo.
WEAVE_ERROR_WRONG_TLV_TYPE
Se l'elemento corrente non è un tipo intero TLV (firmato o non firmato) oppure il lettore non è posizionato su un elemento.

Get

WEAVE_ERROR Get(
  int64_t & v
)

Recupera il valore dell'elemento corrente come un numero intero firmato a 64 bit.

Se il valore intero codificato è maggiore del tipo di dati di output, il valore risultante verrà troncato.

Dettagli
Parametri
[out] v
Riceve il valore associato all'elemento TLV corrente.
Valori restituiti
WEAVE_NO_ERROR
Se il metodo ha avuto esito positivo.
WEAVE_ERROR_WRONG_TLV_TYPE
Se l'elemento corrente non è un tipo intero TLV (firmato o non firmato) oppure il lettore non è posizionato su un elemento.

Get

WEAVE_ERROR Get(
  uint8_t & v
)

Recupera il valore dell'elemento corrente come un numero intero senza segno a 8 bit.

Se il valore intero codificato è maggiore del tipo di dati di output, il valore risultante verrà troncato. Allo stesso modo, se il valore intero codificato è negativo, il valore verrà convertito in non firmato.

Dettagli
Parametri
[out] v
Riceve il valore associato all'elemento TLV corrente.
Valori restituiti
WEAVE_NO_ERROR
Se il metodo ha avuto esito positivo.
WEAVE_ERROR_WRONG_TLV_TYPE
Se l'elemento corrente non è un tipo intero TLV (firmato o non firmato) oppure il lettore non è posizionato su un elemento.

Get

WEAVE_ERROR Get(
  uint16_t & v
)

Recupera il valore dell'elemento corrente come numero intero senza segno a 16 bit.

Se il valore intero codificato è maggiore del tipo di dati di output, il valore risultante verrà troncato. Allo stesso modo, se il valore intero codificato è negativo, il valore verrà convertito in non firmato.

Dettagli
Parametri
[out] v
Riceve il valore associato all'elemento TLV corrente.
Valori restituiti
WEAVE_NO_ERROR
Se il metodo ha avuto esito positivo.
WEAVE_ERROR_WRONG_TLV_TYPE
Se l'elemento corrente non è un tipo intero TLV (firmato o non firmato) oppure il lettore non è posizionato su un elemento.

Get

WEAVE_ERROR Get(
  uint32_t & v
)

Recupera il valore dell'elemento corrente come un numero intero senza segno a 32 bit.

Se il valore intero codificato è maggiore del tipo di dati di output, il valore risultante verrà troncato. Allo stesso modo, se il valore intero codificato è negativo, il valore verrà convertito in non firmato.

Dettagli
Parametri
[out] v
Riceve il valore associato all'elemento TLV corrente.
Valori restituiti
WEAVE_NO_ERROR
Se il metodo ha avuto esito positivo.
WEAVE_ERROR_WRONG_TLV_TYPE
Se l'elemento corrente non è un tipo intero TLV (firmato o non firmato) oppure il lettore non è posizionato su un elemento.

Get

WEAVE_ERROR Get(
  uint64_t & v
)

Recupera il valore dell'elemento corrente come un numero intero senza segno a 64 bit.

Se il valore intero codificato è negativo, il valore verrà convertito in non firmato.

Dettagli
Parametri
[out] v
Riceve il valore associato all'elemento TLV corrente.
Valori restituiti
WEAVE_NO_ERROR
Se il metodo ha avuto esito positivo.
WEAVE_ERROR_WRONG_TLV_TYPE
Se l'elemento corrente non è un tipo intero TLV (firmato o non firmato) oppure il lettore non è posizionato su un elemento.

Get

WEAVE_ERROR Get(
  float & v
)

Get

WEAVE_ERROR Get(
  double & v
)

Recupera il valore dell'elemento corrente come numero a virgola mobile a precisione doppia.

Dettagli
Parametri
[out] v
Riceve il valore associato all'elemento TLV corrente.
Valori restituiti
WEAVE_NO_ERROR
Se il metodo ha avuto esito positivo.
WEAVE_ERROR_WRONG_TLV_TYPE
Se l'elemento corrente non è un tipo con virgola mobile TLV o il lettore non è posizionato su un elemento.

GetBufHandle

uintptr_t GetBufHandle(
  void
) const 

GetBytes

WEAVE_ERROR GetBytes(
  uint8_t *buf,
  uint32_t bufSize
)

Recupera il valore dell'elemento stringa UTF8 corrente.

Per determinare la dimensione del buffer di input richiesta, chiama il metodo GetLength() prima di chiamare GetBytes().

Dettagli
Parametri
[in] buf
Un puntatore a un buffer per ricevere i dati della stringa.
[in] bufSize
Le dimensioni in byte del buffer puntato da buf.
Valori restituiti
WEAVE_NO_ERROR
Se il metodo ha avuto esito positivo.
WEAVE_ERROR_WRONG_TLV_TYPE
Se l'elemento corrente non è una stringa TLV o un byte TLV oppure se il lettore non è posizionato su un elemento.
WEAVE_ERROR_BUFFER_TOO_SMALL
Se il buffer fornito è troppo piccolo per contenere i dati associati all'elemento corrente.
WEAVE_ERROR_TLV_UNDERRUN
Se la codifica TLV sottostante è terminata prematuramente.
other
Altri codici di errore Weave o di piattaforma restituiti dalla funzione GetNextBuffer() configurata. Possibile solo quando GetNextBuffer non è NULL.

TipoContenitore

TLVType GetContainerType(
  void
) const 

Restituisce il tipo del container all'interno del quale TLVReader sta leggendo.

Il metodo GetContainerType() restituisce il tipo di container TLV all'interno della quale TLVReader sta leggendo. Se TLVReader è posizionato al livello più esterno di una codifica TLV (ovvero prima, sopra o dopo l'elemento TLV più esterno), il metodo restituirà kTLVType_NotSpecificato.

Dettagli
Restituisce
Il TLVType del container corrente o kTLVType_NotSpecifica se TLVReader non è posizionato all'interno di un container.

GetControlByte

uint16_t GetControlByte(
  void
) const 

Restituisce il byte di controllo associato all'elemento TLV corrente.

In teoria, nessuno deve mai sapere del byte di controllo e solo l'implementazione interna del TLV dovrebbe potervi accedere. Tuttavia, l'accesso al byte di controllo è utile ai fini del debug da parte delle utilità di debug TLV (che tentano di decodificare il byte di controllo del tag durante la stampa semplice dei contenuti del buffer TLV).

Dettagli
Restituisce
Un numero intero non firmato contenente il byte di controllo associato all'elemento TLV corrente. kTLVControlByte_NotNot viene restituito se il lettore non è posizionato su un elemento.

GetDataPtr

WEAVE_ERROR GetDataPtr(
  const uint8_t *& data
)

Recupera un puntatore sul byte codificato iniziale di un byte byte TLV o un elemento stringa UTF8.

Questo metodo restituisce un puntatore diretto al valore della stringa codificata all'interno del buffer di input sottostante. Per avere successo, il metodo richiede che l'intero valore della stringa sia presente in un singolo buffer. In caso contrario, il metodo restituisce WEAVE_ERROR_TLV_UNDERRUN. Questo rende il metodo di utilizzo limitato quando si leggono i dati da più buffer discontinui.

Dettagli
Parametri
[out] data
Un riferimento a un puntatore const che riceverà un puntatore ai dati della stringa sottostante.
Valori restituiti
WEAVE_NO_ERROR
Se il metodo ha avuto esito positivo.
WEAVE_ERROR_WRONG_TLV_TYPE
Se l'elemento corrente non è una stringa TLV o un byte TLV oppure se il lettore non è posizionato su un elemento.
WEAVE_ERROR_TLV_UNDERRUN
Se la codifica TLV sottostante è prematura o se il valore dell'elemento stringa corrente non è contenuto in un singolo buffer contiguo.
other
Altri codici di errore Weave o di piattaforma restituiti dalla funzione GetNextBuffer() configurata. Possibile solo quando GetNextBuffer non è NULL.

GetLength

uint32_t GetLength(
  void
) const 

Restituisce la lunghezza dei dati associati all'elemento TLV corrente.

La lunghezza dei dati si applica solo agli elementi di tipo stringa UTF8 o stringa di byte. Per le stringhe UTF8, il valore restituito corrisponde al numero di byte nella stringa, non al numero di caratteri.

Dettagli
Restituisce
La lunghezza (in byte) dei dati associati all'elemento TLV corrente oppure 0 se l'elemento corrente non è una stringa di byte o UTF8 oppure se il lettore non è posizionato su un elemento.

GetLengthRead

uint32_t GetLengthRead(
  void
) const 

Restituisce il numero totale di byte letti da quando il lettore è stato inizializzato.

Dettagli
Restituisce
Numero totale di byte letti da quando il lettore è stato inizializzato.

Recupero punto di lettura

const uint8_t * GetReadPoint(
  void
) const 

Visualizza il punto nel buffer di input sottostante che corrisponde alla posizione corrente del lettore.

Dettagli
Restituisce
Un puntatore nel buffer di input sottostante che corrisponde alla posizione corrente del lettore.

GetRemainingLength

uint32_t GetRemainingLength(
  void
) const 

Restituisce il numero totale di byte che possono essere letti fino a raggiungere la lunghezza massima di lettura.

Dettagli
Restituisce
Numero totale di byte che possono essere letti fino al raggiungimento della lunghezza massima di lettura.

GetString

WEAVE_ERROR GetString(
  char *buf,
  uint32_t bufSize
)

Recupera il valore dell'elemento stringa UTF8 attuale come stringa terminata nullo.

Per determinare la dimensione del buffer di input richiesta, chiama il metodo GetLength() prima di chiamare GetBytes(). Il buffer di input deve avere almeno un byte in più rispetto alla lunghezza della stringa per contenere il carattere null.

Dettagli
Parametri
[in] buf
Un puntatore a un buffer per ricevere i dati della stringa di byte.
[in] bufSize
Le dimensioni in byte del buffer puntato da buf.
Valori restituiti
WEAVE_NO_ERROR
Se il metodo ha avuto esito positivo.
WEAVE_ERROR_WRONG_TLV_TYPE
Se l'elemento corrente non è una stringa TLV o un byte TLV oppure se il lettore non è posizionato su un elemento.
WEAVE_ERROR_BUFFER_TOO_SMALL
Se il buffer fornito è troppo piccolo per contenere i dati associati all'elemento corrente.
WEAVE_ERROR_TLV_UNDERRUN
Se la codifica TLV sottostante è terminata prematuramente.
other
Altri codici di errore Weave o di piattaforma restituiti dalla funzione GetNextBuffer() configurata. Possibile solo quando GetNextBuffer non è NULL.

GetTag

uint64_t GetTag(
  void
) const 

Restituisce il tag associato all'elemento TLV corrente.

Il valore restituito da GetTag() può essere utilizzato con le funzioni di utilità dei tag (IsProfileTag(), IsContextTag(), ProfileIdFromTag() e così via) per determinare il tipo di tag ed estrarre i vari valori dei campi dei tag.

Dettagli
Restituisce
Un numero intero non firmato contenente informazioni sul tag associato all'elemento TLV corrente.

GetType

TLVType GetType(
  void
) const 

Restituisce il tipo dell'elemento TLV corrente.

Dettagli
Restituisce
Un valore TLVType che descrive il tipo di dati dell'elemento TLV corrente. Se il lettore non è posizionato su un elemento TLV, il valore restituito sarà kTLVType_NotSpecificato.

Init

void Init(
  const TLVReader & aReader
)

Inizializza un oggetto TLVReader da un altro oggetto TLVReader.

Dettagli
Parametri
[in] aReader
Un riferimento di sola lettura a TLVReader da cui inizializzarlo.

Init

void Init(
  const uint8_t *data,
  uint32_t dataLen
)

Inizializza un oggetto TLVReader da leggere da un singolo buffer di input.

Dettagli
Parametri
[in] data
Un puntatore a un buffer contenente i dati TLV da analizzare.
[in] dataLen
La lunghezza dei dati TLV da analizzare.

Init

void Init(
  PacketBuffer *buf,
  uint32_t maxLen
)

Inizializza un oggetto TLVReader da leggere da un singolo PacketBuffer.

L'analisi inizia dalla posizione iniziale del buffer (buf->DataStart()) e continua fino alla fine dei dati nel buffer (come indicato da buf->Datalen()) o sono stati analizzati maxLen byte.

Dettagli
Parametri
[in] buf
Un puntatore a un PacketBuffer contenente i dati TLV da analizzare.
[in] maxLen
Il numero massimo di byte da analizzare. Il valore predefinito è la quantità di dati nel buffer di input.

Init

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

Inizializza un oggetto TLVReader da leggere da uno o più PacketBuffers.

L'analisi viene avviata nella posizione iniziale del buffer (buf->DataStart()). Se allowDiscontiguousBuffers è true, il lettore avanzerà nella catena di buffer collegata dai relativi puntatori Next(). L'analisi continua finché non sono stati consumati tutti i dati nella catena di buffer (come indicato da buf->Datalen()) o vengono analizzati i byte maxLen.

Dettagli
Parametri
[in] buf
Un puntatore a un PacketBuffer contenente i dati TLV da analizzare.
[in] maxLen
Il numero massimo di byte da analizzare. Il valore predefinito è la quantità totale di dati nella catena di buffer di input.
[in] allowDiscontiguousBuffers
Se true, passa al buffer successivo della catena una volta consumati tutti i dati nel buffer attuale. Se è false, interrompi l'analisi alla fine del buffer iniziale.

Avanti

WEAVE_ERROR Next(
  void
)

Fa passare l'oggetto TLVReader all'elemento TLV successivo da leggere.

Il metodo Next() posiziona l'oggetto Reader sull'elemento successivo in una codifica TLV che si trova nello stesso contesto di contenimento. In particolare, se il lettore è posizionato al livello più esterno della codifica TLV, una chiamata a Next() lo farà passare all'elemento successivo più in alto. Se il lettore è posizionato all'interno di un elemento container TLV (una struttura, una matrice o un percorso), la chiamata a Next() avanzerà il lettore all'elemento membro successivo del container.

Poiché Next() limita il movimento del lettore al contesto di contenimento corrente, chiamando Next() quando il lettore è posizionato su un elemento container avanzerà oltre al container, ignorando gli elementi membro (e i membri di tutti i container nidificati) fino a raggiungere il primo elemento dopo il container.

Quando non sono presenti ulteriori elementi in un determinato contesto di contenimento, il metodo Next() restituirà un errore WEAVE_END_OF_TLV e la posizione del lettore rimarrà invariata.

Dettagli
Valori restituiti
WEAVE_NO_ERROR
Se il lettore è stato posizionato correttamente su un nuovo elemento.
WEAVE_END_OF_TLV
Se non sono disponibili ulteriori elementi.
WEAVE_ERROR_TLV_UNDERRUN
Se la codifica TLV sottostante è terminata prematuramente.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Se il lettore ha riscontrato un tipo di elemento TLV non valido o non supportato.
WEAVE_ERROR_INVALID_TLV_TAG
Se il lettore ha riscontrato un tag TLV in un contesto non valido.
WEAVE_ERROR_UNKNOWN_IMPLICIT_TLV_TAG
Se il lettore ha riscontrato un tag TLV implicitamente codificato per il quale l'ID profilo corrispondente è sconosciuto.
other
Altri codici di errore Weave o di piattaforma restituiti dalla funzione GetNextBuffer() configurata. Possibile solo quando GetNextBuffer non è NULL.

Avanti

WEAVE_ERROR Next(
  TLVType expectedType,
  uint64_t expectedTag
)

Fa passare l'oggetto TLVReader all'elemento TLV successivo da leggere, rivendicando il tipo e il tag del nuovo elemento.

Il metodo Next(TLVType expectedType, uint64_tatteTag) è un metodo pratico che ha lo stesso comportamento di Next(), ma verifica anche che il tipo e il tag del nuovo elemento TLV corrispondano agli argomenti forniti.

Dettagli
Parametri
[in] expectedType
Il tipo di dati previsto per l'elemento successivo.
[in] expectedTag
Il tag previsto per l'elemento successivo.
Valori restituiti
WEAVE_NO_ERROR
Se il lettore è stato posizionato correttamente su un nuovo elemento.
WEAVE_END_OF_TLV
Se non sono disponibili ulteriori elementi.
WEAVE_ERROR_WRONG_TLV_TYPE
Se il tipo del nuovo elemento non corrisponde al valore dell'argomento expectedType.
WEAVE_ERROR_UNEXPECTED_TLV_ELEMENT
Se il tag associato al nuovo elemento non corrisponde al valore dell'argomento expectedTag.
WEAVE_ERROR_TLV_UNDERRUN
Se la codifica TLV sottostante è terminata prematuramente.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Se il lettore ha riscontrato un tipo di elemento TLV non valido o non supportato.
WEAVE_ERROR_INVALID_TLV_TAG
Se il lettore ha riscontrato un tag TLV in un contesto non valido.
other
Altri codici di errore Weave o di piattaforma restituiti dalla funzione GetNextBuffer() configurata. Possibile solo quando GetNextBuffer non è NULL.

Container aperto

WEAVE_ERROR OpenContainer(
  TLVReader & containerReader
)

Inizializza un nuovo oggetto TLVReader per la lettura dei membri di un elemento container TLV.

Il metodo OpenContainer() inizializza un nuovo oggetto TLVReader per la lettura degli elementi membro di un container TLV (una struttura, una matrice o un percorso). Quando viene richiamato OpenContainer(), l'oggetto TLVReader corrente deve essere posizionato sull'elemento container per essere letto. Il metodo considera come unico argomento un riferimento a un nuovo lettore che verrà inizializzato per leggere il container. Questo lettore è noto come Lettore del contenitore, mentre il lettore su cui viene chiamato OpenContainer() è noto come Lettore principale.

Quando viene restituito il metodo OpenContainer(), il lettore viene posizionato immediatamente prima del primo membro del contenitore. La chiamata a Next() sul lettore di container avanzerà tra i membri della raccolta fino al raggiungimento della fine, a quel punto il lettore restituirà WEAVE_END_OF_TLV.

Quando il lettore container è aperto, le applicazioni non devono effettuare chiamate su o modificare lo stato del lettore principale. Quando un'applicazione ha finito di utilizzare il lettore di container, deve chiuderla chiamando CloseContainer() sul lettore principale e trasmettendo il lettore come argomento. Le applicazioni possono chiudere il lettore di container in qualsiasi momento, con o senza leggere tutti gli elementi contenuti nel container sottostante. Dopo la chiusura del lettore di container, le applicazioni possono continuare a utilizzare il lettore principale.

Il lettore di container eredita varie proprietà di configurazione dal lettore principale. Questi sono:

  • L'ID profilo implicito (ImplicitProfileId)
  • Il puntatore dei dati dell'applicazione (AppData)
  • Il puntatore della funzione GetNextBuffer

Dettagli
Parametri
[out] containerReader
Un riferimento a un oggetto TLVReader che verrà inizializzato per leggere i membri dell'elemento container corrente. Tutti i dati associati all'oggetto fornito vengono sovrascritti.
Valori restituiti
WEAVE_NO_ERROR
Se il metodo ha avuto esito positivo.
WEAVE_ERROR_INCORRECT_STATE
Se l'elemento corrente non è posizionato su un elemento contenitore.

Salta

WEAVE_ERROR Skip(
  void
)

Avanza all'oggetto TLVReader subito dopo l'elemento TLV corrente.

Il metodo Skip() posiziona l'oggetto Reader immediatamente dopo l'elemento TLV corrente, in modo che una chiamata successiva a Next() avanzi il lettore all'elemento seguente. Come nel caso di Next(), se il lettore è posizionato su un elemento container al momento della chiamata, i membri del container verranno ignorati. Se il lettore non è posizionato su alcun elemento, la sua posizione resta invariata.

Dettagli
Valori restituiti
WEAVE_NO_ERROR
Se il lettore è stato posizionato correttamente su un nuovo elemento.
WEAVE_END_OF_TLV
Se non sono disponibili ulteriori elementi.
WEAVE_ERROR_TLV_UNDERRUN
Se la codifica TLV sottostante è terminata prematuramente.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Se il lettore ha riscontrato un tipo di elemento TLV non valido o non supportato.
WEAVE_ERROR_INVALID_TLV_TAG
Se il lettore ha riscontrato un tag TLV in un contesto non valido.
other
Altri codici di errore Weave o di piattaforma restituiti dalla funzione GetNextBuffer() configurata. Possibile solo quando GetNextBuffer non è NULL.

Verifica la fine di un container

WEAVE_ERROR VerifyEndOfContainer(
  void
)

Verifica che l'oggetto TVLReader si trovi alla fine di un container TLV.

Il metodo VerifyEndOfContainer() verifica che non siano presenti altri elementi TLV da leggere all'interno dell'attuale container TLV. Questo è un metodo pratico che equivale a chiamare Next() e verificare la presenza di un valore restituito di WEAVE_END_OF_TLV.

Dettagli
Valori restituiti
WEAVE_NO_ERROR
Se non ci sono ulteriori elementi TLV da leggere.
WEAVE_ERROR_UNEXPECTED_TLV_ELEMENT
Se nella raccolta è stato rilevato un altro elemento TLV.
WEAVE_ERROR_TLV_UNDERRUN
Se la codifica TLV sottostante è terminata prematuramente.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Se il lettore ha riscontrato un tipo di elemento TLV non valido o non supportato.
WEAVE_ERROR_INVALID_TLV_TAG
Se il lettore ha riscontrato un tag TLV in un contesto non valido.
other
Altri codici di errore Weave o di piattaforma restituiti dalla funzione GetNextBuffer() configurata. Possibile solo quando GetNextBuffer non è NULL.

Funzioni protette

Cancella elementoStato

void ClearElementState(
  void
)

Cancella lo stato del TLVReader.

Questo metodo viene utilizzato per posizionare il lettore prima del primo TLV, tra i TLV o dopo l'ultimo TLV.

ElementType

TLVElementType ElementType(
  void
) const 

Questo è un metodo privato che restituisce TLVElementType da mControlByte.

Assicurazione dati

WEAVE_ERROR EnsureData(
  WEAVE_ERROR noDataErr
)

GetElementHeadLength

WEAVE_ERROR GetElementHeadLength(
  uint8_t & elemHeadBytes
) const 

Questo è un metodo privato utilizzato per calcolare la lunghezza di un'intestazione TLV.

IsContainerOpen

bool IsContainerOpen(
  void
) const 

Dati di lettura

WEAVE_ERROR ReadData(
  uint8_t *buf,
  uint32_t len
)

Elemento di lettura

WEAVE_ERROR ReadElement(
  void
)

Lettura

uint64_t ReadTag(
  TLVTagControl tagControl,
  const uint8_t *& p
)

SetContainerOpen

void SetContainerOpen(
  bool aContainerOpen
)

SkipData

WEAVE_ERROR SkipData(
  void
)

Salta i dati contenuti nell'attuale TLV leggendoci senza un buffer di destinazione.

Dettagli
Valori restituiti
WEAVE_NO_ERROR
Se il lettore è stato posizionato correttamente alla fine dei dati.
other
Altri codici di errore Weave o di piattaforma restituiti dalla funzione GetNextBuffer() configurata. Possibile solo quando GetNextBuffer non è NULL.

SkipToEndOfContainer

WEAVE_ERROR SkipToEndOfContainer(
  void
)

Verifica elemento

WEAVE_ERROR VerifyElement(
  void
)

Funzioni statiche protette

FailGetNextBuffer

WEAVE_ERROR FailGetNextBuffer(
  TLVReader & reader,
  uintptr_t & bufHandle,
  const uint8_t *& bufStart,
  uint32_t & bufLen
)

GetNextPacketBuffer

WEAVE_ERROR GetNextPacketBuffer(
  TLVReader & reader,
  uintptr_t & bufHandle,
  const uint8_t *& bufStart,
  uint32_t & bufLen
)