nl :: Tecer:: TLV :: TLVReader
#include <src/lib/core/WeaveTLV.h>
Fornece um analisador eficiente de memória para dados codificados no formato Weave TLV .
Resumo
TLVReader implementa um analisador de "estilo pull" somente para frente para dados Weave TLV . O objetoTLVReader opera como um cursor que pode ser usado para iterar sobre uma sequência de elementos TLV e interpretar seu conteúdo. Quando posicionados em um elemento, os aplicativos podem fazer chamadas aos métodos Get () do leitor para consultar o tipo e a tag do elemento atual e extrair qualquer valor associado. O método Next () do leitor é usado para avançar de um elemento para outro.
Um objetoTLVReader é sempre posicionado antes, em ou depois de um elemento TLV . Quando inicializado pela primeira vez, umTLVReader é posicionado imediatamente antes do primeiro elemento da codificação. Para começar a ler, um aplicativo deve fazer uma chamada inicial ao método Next () para posicionar o leitor no primeiro elemento. Quando um elemento de contêiner é encontrado em uma estrutura, uma matriz ou um caminho, os métodos OpenContainer () ou EnterContainer () podem ser usados para iterar através do conteúdo do contêiner.
Quando o leitor atinge o final de uma codificação TLV , ou o último elemento em um contêiner, ele sinaliza o aplicativo retornando um erro WEAVE_END_OF_TLV do método Next () . O leitor continuará a retornar WEAVE_END_OF_TLV até que seja reinicializado ou o contêiner atual seja encerrado (via CloseContainer () / ExitContainer () ).
Um objetoTLVReader pode analisar dados diretamente de um buffer de entrada fixo ou de uma cadeia de um ou mais PacketBuffers. Além disso, os aplicativos podem fornecer uma função GetNextBuffer
para fornecer dados ao leitor de uma fonte arbitrária, por exemplo, um soquete ou uma porta serial.
Herança
Subclasses diretamente conhecidas:nl :: Weave :: Profiles :: DataManagement_Current :: CircularEventReader
nl :: Weave :: TLV :: CircularTLVReader
Tipos públicos | |
---|---|
GetNextBufferFunct )(TLVReader &reader, uintptr_t &bufHandle, const uint8_t *&bufStart, uint32_t &bufLen) | WEAVE_ERROR (*WEAVE_ERROR (* Uma função que pode ser usada para recuperar dados TLV adicionais a serem analisados. |
Atributos públicos | |
---|---|
AppData | void * Um campo de ponteiro que pode ser usado para dados específicos do aplicativo. |
GetNextBuffer | Um ponteiro para uma função que produzirá dados de entrada para o objetoTLVReader . |
ImplicitProfileId | uint32_t O ID de perfil a ser usado para tags de perfil codificadas de forma implícita. |
Atributos protegidos | |
---|---|
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 * |
Funções públicas | |
---|---|
CloseContainer (TLVReader & containerReader) | Conclui a leitura de um contêiner TLV após uma chamada para OpenContainer () . |
DupBytes (uint8_t *& buf, uint32_t & dataLen) | Aloca e retorna um buffer contendo o valor do byte atual ou string UTF8. |
DupString (char *& buf) | Aloca e retorna um buffer contendo o valor terminado em nulo do byte atual ou string UTF8. |
EnterContainer ( TLVType & outerContainerType) | |
ExitContainer ( TLVType outerContainerType) | |
Get (bool & v) | Obtenha o valor do elemento atual como um tipo bool. |
Get (int8_t & v) | Obtenha o valor do elemento atual como um inteiro assinado de 8 bits. |
Get (int16_t & v) | Obtenha o valor do elemento atual como um inteiro assinado de 16 bits. |
Get (int32_t & v) | Obtenha o valor do elemento atual como um inteiro assinado de 32 bits. |
Get (int64_t & v) | Obtenha o valor do elemento atual como um inteiro assinado de 64 bits. |
Get (uint8_t & v) | Obtenha o valor do elemento atual como um inteiro sem sinal de 8 bits. |
Get (uint16_t & v) | Obtenha o valor do elemento atual como um inteiro sem sinal de 16 bits. |
Get (uint32_t & v) | Obtenha o valor do elemento atual como um inteiro sem sinal de 32 bits. |
Get (uint64_t & v) | Obtenha o valor do elemento atual como um inteiro não assinado de 64 bits. |
Get (float & v) | |
Get (double & v) | Obtenha o valor do elemento atual como um número de ponto flutuante de precisão dupla. |
GetBufHandle (void) const | uintptr_t |
GetBytes (uint8_t *buf, uint32_t bufSize) | Obtenha o valor do byte atual ou elemento de string UTF8. |
GetContainerType (void) const | Retorna o tipo de contêiner no qual oTLVReader está lendo no momento. |
GetControlByte (void) const | uint16_t Retorna o byte de controle associado ao elemento TLV atual. |
GetDataPtr (const uint8_t *& data) | Obtenha um ponteiro para o byte codificado inicial de um byte TLV ou elemento de string UTF8. |
GetLength (void) const | uint32_t Retorna o comprimento dos dados associados ao elemento TLV atual. |
GetLengthRead (void) const | uint32_t Retorna o número total de bytes lidos desde que o leitor foi inicializado. |
GetReadPoint (void) const | const uint8_t * Obtém o ponto no buffer de entrada subjacente que corresponde à posição atual do leitor. |
GetRemainingLength (void) const | uint32_t Retorna o número total de bytes que podem ser lidos até que o comprimento máximo de leitura seja atingido. |
GetString (char *buf, uint32_t bufSize) | Obtenha o valor do byte atual ou elemento de string UTF8 como uma string terminada em nulo. |
GetTag (void) const | uint64_t Retorna a tag associada ao elemento TLV atual. |
GetType (void) const | Retorna o tipo do elemento TLV atual. |
Init (constTLVReader & aReader) | void Inicializa um objetoTLVReader a partir de outro objetoTLVReader . |
Init (const uint8_t *data, uint32_t dataLen) | void Inicializa um objetoTLVReader para ler de um único buffer de entrada. |
Init ( PacketBuffer *buf, uint32_t maxLen) | void Inicializa um objetoTLVReader para ler de um único PacketBuffer. |
Init ( PacketBuffer *buf, uint32_t maxLen, bool allowDiscontiguousBuffers) | void Inicializa um objetoTLVReader para ler de um ou mais PacketBuffers. |
Next (void) | |
Next ( TLVType expectedType, uint64_t expectedTag) | |
OpenContainer (TLVReader & containerReader) | |
Skip (void) | |
VerifyEndOfContainer (void) | Verifica se o objeto TVLReader está no final de um contêiner TLV . |
Funções protegidas | |
---|---|
ClearElementState (void) | void Limpe o estado doTLVReader . |
ElementType (void) const | TLVElementType Este é um método privado que retorna o TLVElementType de mControlByte. |
EnsureData ( WEAVE_ERROR noDataErr) | |
GetElementHeadLength (uint8_t & elemHeadBytes) const | Este é um método privado usado para calcular o comprimento da cabeça de um elemento 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) | Ignore todos os dados contidos no TLV atual, lendo sobre ele sem um buffer de destino. |
SkipToEndOfContainer (void) | |
VerifyElement (void) |
Funções estáticas protegidas | |
---|---|
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) |
Tipos públicos
GetNextBufferFunct
WEAVE_ERROR(* GetNextBufferFunct)(TLVReader &reader, uintptr_t &bufHandle, const uint8_t *&bufStart, uint32_t &bufLen)
Uma função que pode ser usada para recuperar dados TLV adicionais a serem analisados.
Funções desse tipo são usadas para alimentar dados de entrada para umTLVReader . Quando chamada, espera-se que a função produza dados adicionais para o leitor analisar ou sinalizar ao leitor que não há mais dados disponíveis.
Detalhes | |||||||||
---|---|---|---|---|---|---|---|---|---|
Parâmetros |
| ||||||||
Valores Retornados |
|
Atributos públicos
Dados do aplicativo
void * AppData
Um campo de ponteiro que pode ser usado para dados específicos do aplicativo.
GetNextBuffer
GetNextBufferFunct GetNextBuffer
Um ponteiro para uma função que produzirá dados de entrada para o objetoTLVReader .
Se definido como NULL (o valor padrão), o leitor assumirá que não há mais dados de entrada disponíveis.
GetNextBuffer pode ser definido por um aplicativo a qualquer momento, mas normalmente é definido quando o leitor é inicializado.
Consulte a definição de tipo GetNextBufferFunct para obter informações adicionais sobre a implementação de uma função GetNextBuffer.
ImplicitProfileId
uint32_t ImplicitProfileId
O ID de perfil a ser usado para tags de perfil codificadas de forma implícita.
Quando o leitor encontra uma tag específica do perfil que foi codificada de forma implícita, ele usa o valor da propriedade ImplicitProfileId
como o id de perfil assumido para a tag.
Por padrão, a propriedade ImplicitProfileId
é definida como kProfileIdNotSpecified. Ao decodificar o TLV que contém tags codificadas implicitamente, os aplicativos devem definir ImplicitProfileId
antes de ler qualquer elemento TLV com tais tags. O id de perfil apropriado geralmente depende do contexto do aplicativo ou protocolo falado.
Se uma tag codificada implicitamente for encontrada enquanto ImplicitProfileId
estiver definido como kProfileIdNotSpecified, o leitor retornará um erro WEAVE_ERROR_UNKNOWN_IMPLICIT_TLV_TAG .
Atributos protegidos
mBufEnd
const uint8_t * mBufEnd
mBufHandle
uintptr_t mBufHandle
mContainerType
TLVType mContainerType
mControlByte
uint16_t mControlByte
mElemLenOrVal
uint64_t mElemLenOrVal
mElemTag
uint64_t mElemTag
mLenRead
uint32_t mLenRead
mMaxLen
uint32_t mMaxLen
mReadPoint
const uint8_t * mReadPoint
Funções públicas
CloseContainer
WEAVE_ERROR CloseContainer( TLVReader & containerReader )
Conclui a leitura de um contêiner TLV após uma chamada para OpenContainer () .
O método CloseContainer () restaura o estado de um objetoTLVReader pai após uma chamada para OpenContainer () . Para cada chamada para OpenContainer (), os aplicativos devem fazer uma chamada correspondente para CloseContainer () , passando uma referência ao mesmo leitor de contêiner para ambos os métodos.
Quando CloseContainer () retorna, o leitor pai é posicionado imediatamente antes do primeiro elemento que segue o contêiner. A partir deste ponto, um aplicativo pode usar o método Next () para avançar por quaisquer elementos restantes.
Os aplicativos podem chamar close CloseContainer () em um leitor pai a qualquer momento, independentemente de todos os elementos no contêiner subjacente terem sido lidos. Depois que CloseContainer () for chamado, o aplicativo deve considerar o leitor de contêiner 'desinicializado' e não deve usá-lo mais sem reinicializá-lo.
Detalhes | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parâmetros |
| ||||||||||||
Valores Retornados |
|
DupBytes
WEAVE_ERROR DupBytes( uint8_t *& buf, uint32_t & dataLen )
Aloca e retorna um buffer contendo o valor do byte atual ou string UTF8.
Este método cria um buffer e retorna uma cópia dos dados associados ao byte ou elemento de string UTF-8 na posição atual. A memória para o buffer é obtida com malloc () e deve ser liberada com free () pelo chamador quando não for mais necessária.
Detalhes | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parâmetros |
| ||||||||||||
Valores Retornados |
|
DupString
WEAVE_ERROR DupString( char *& buf )
Aloca e retorna um buffer contendo o valor terminado em nulo do byte atual ou string UTF8.
Este método cria um buffer e retorna uma cópia terminada em nulo dos dados associados ao byte ou elemento de string UTF-8 na posição atual. A memória para o buffer é obtida com malloc () e deve ser liberada com free () pelo chamador quando não for mais necessária.
Detalhes | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parâmetros |
| ||||||||||||
Valores Retornados |
|
EnterContainer
WEAVE_ERROR EnterContainer( TLVType & outerContainerType )
Prepara um objetoTLVReader para ler os membros do elemento contêiner TLV .
O método EnterContainer () prepara o objetoTLVReader atual para começar a ler os elementos membros de um contêiner TLV (uma estrutura, matriz ou caminho). Para cada chamada para EnterContainer (), os aplicativos devem fazer uma chamada correspondente para ExitContainer () .
Quando EnterContainer () é chamado, o objetoTLVReader deve ser posicionado no elemento do contêiner para ser lido. O método toma como argumento uma referência a um valor TLVType que será usado para salvar o contexto do leitor enquanto ele está lendo o contêiner.
Quando o método EnterContainer () retorna, o leitor é posicionado imediatamente antes do primeiro membro do contêiner. Chamar Next () repetidamente avançará o leitor através dos membros da coleção até que o fim seja alcançado, ponto em que o leitor retornará WEAVE_END_OF_TLV.
Depois que o aplicativo termina de ler um contêiner, ele pode continuar lendo os elementos após o contêiner chamando o método ExitContainer () .
Detalhes | |||||
---|---|---|---|---|---|
Parâmetros |
| ||||
Valores Retornados |
|
ExitContainer
WEAVE_ERROR ExitContainer( TLVType outerContainerType )
Conclui a leitura de um contêiner TLV e prepara um objetoTLVReader para ler os elementos após o contêiner.
O método ExitContainer () restaura o estado de um objetoTLVReader após uma chamada para EnterContainer () . Para cada chamada para EnterContainer (), os aplicativos devem fazer uma chamada correspondente para ExitContainer () , passando o valor de contexto retornado pelo método EnterContainer () .
Quando ExitContainer () retorna, o leitor é posicionado imediatamente antes do primeiro elemento que segue o contêiner. A partir deste ponto, um aplicativo pode usar o método Next () para avançar por quaisquer elementos restantes.
Depois que EnterContainer () for chamado, os aplicativos podem chamar ExitContainer () em um leitor a qualquer momento, independentemente de todos os elementos no contêiner subjacente terem sido lidos.
Detalhes | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parâmetros |
| ||||||||||||
Valores Retornados |
|
Pegue
WEAVE_ERROR Get( bool & v )
Obtenha o valor do elemento atual como um tipo bool.
Detalhes | |||||
---|---|---|---|---|---|
Parâmetros |
| ||||
Valores Retornados |
|
Pegue
WEAVE_ERROR Get( int8_t & v )
Obtenha o valor do elemento atual como um inteiro assinado de 8 bits.
Se o valor inteiro codificado for maior que o tipo de dados de saída, o valor resultante será truncado.
Detalhes | |||||
---|---|---|---|---|---|
Parâmetros |
| ||||
Valores Retornados |
|
Pegue
WEAVE_ERROR Get( int16_t & v )
Obtenha o valor do elemento atual como um inteiro assinado de 16 bits.
Se o valor inteiro codificado for maior que o tipo de dados de saída, o valor resultante será truncado.
Detalhes | |||||
---|---|---|---|---|---|
Parâmetros |
| ||||
Valores Retornados |
|
Pegue
WEAVE_ERROR Get( int32_t & v )
Obtenha o valor do elemento atual como um inteiro assinado de 32 bits.
Se o valor inteiro codificado for maior que o tipo de dados de saída, o valor resultante será truncado.
Detalhes | |||||
---|---|---|---|---|---|
Parâmetros |
| ||||
Valores Retornados |
|
Pegue
WEAVE_ERROR Get( int64_t & v )
Obtenha o valor do elemento atual como um inteiro assinado de 64 bits.
Se o valor inteiro codificado for maior do que o tipo de dados de saída, o valor resultante será truncado.
Detalhes | |||||
---|---|---|---|---|---|
Parâmetros |
| ||||
Valores Retornados |
|
Pegue
WEAVE_ERROR Get( uint8_t & v )
Obtenha o valor do elemento atual como um inteiro sem sinal de 8 bits.
Se o valor inteiro codificado for maior do que o tipo de dados de saída, o valor resultante será truncado. Da mesma forma, se o valor inteiro codificado for negativo, o valor será convertido para sem sinal.
Detalhes | |||||
---|---|---|---|---|---|
Parâmetros |
| ||||
Valores Retornados |
|
Pegue
WEAVE_ERROR Get( uint16_t & v )
Obtenha o valor do elemento atual como um inteiro sem sinal de 16 bits.
Se o valor inteiro codificado for maior do que o tipo de dados de saída, o valor resultante será truncado. Da mesma forma, se o valor inteiro codificado for negativo, o valor será convertido para sem sinal.
Detalhes | |||||
---|---|---|---|---|---|
Parâmetros |
| ||||
Valores Retornados |
|
Pegue
WEAVE_ERROR Get( uint32_t & v )
Obtenha o valor do elemento atual como um inteiro não assinado de 32 bits.
Se o valor inteiro codificado for maior que o tipo de dados de saída, o valor resultante será truncado. Da mesma forma, se o valor inteiro codificado for negativo, o valor será convertido para sem sinal.
Detalhes | |||||
---|---|---|---|---|---|
Parâmetros |
| ||||
Valores Retornados |
|
Pegue
WEAVE_ERROR Get( uint64_t & v )
Obtenha o valor do elemento atual como um inteiro não assinado de 64 bits.
Se o valor inteiro codificado for negativo, o valor será convertido para sem sinal.
Detalhes | |||||
---|---|---|---|---|---|
Parâmetros |
| ||||
Valores Retornados |
|
Pegue
WEAVE_ERROR Get( float & v )
Pegue
WEAVE_ERROR Get( double & v )
Obtenha o valor do elemento atual como um número de ponto flutuante de precisão dupla.
Detalhes | |||||
---|---|---|---|---|---|
Parâmetros |
| ||||
Valores Retornados |
|
GetBufHandle
uintptr_t GetBufHandle( void ) const
GetBytes
WEAVE_ERROR GetBytes( uint8_t *buf, uint32_t bufSize )
Obtenha o valor do byte atual ou elemento de string UTF8.
Para determinar o tamanho do buffer de entrada necessário, chame o método GetLength () antes de chamar GetBytes () .
Detalhes | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Parâmetros |
| ||||||||||
Valores Retornados |
|
GetContainerType
TLVType GetContainerType( void ) const
Retorna o tipo de contêiner no qual oTLVReader está lendo no momento.
O método GetContainerType () retorna o tipo do contêiner TLV dentro do qual oTLVReader está lendo. Se oTLVReader estiver posicionado no nível mais externo de uma codificação TLV (ou seja, antes, em ou depois do elemento TLV mais externo), o método retornará kTLVType_NotSpecified.
Detalhes | |
---|---|
Devoluções | O TLVType do contêiner atual ou kTLVType_NotSpecified se oTLVReader não estiver posicionado dentro de um contêiner. |
GetControlByte
uint16_t GetControlByte( void ) const
Retorna o byte de controle associado ao elemento TLV atual.
Idealmente, ninguém precisa saber sobre o byte de controle e apenas a implementação interna do TLV deve ter acesso a ele. Mas, no entanto, ter acesso ao byte de controle é útil para fins de depuração pelos utilitários de depuração TLV (que tentam decodificar o byte de controle de tag ao imprimir o conteúdo do buffer TLV ).
Detalhes | |
---|---|
Devoluções | Um inteiro não assinado contendo o byte de controle associado ao elemento TLV atual. kTLVControlByte_NotSpecified é retornado se o leitor não estiver posicionado em um elemento. |
GetDataPtr
WEAVE_ERROR GetDataPtr( const uint8_t *& data )
Obtenha um ponteiro para o byte codificado inicial de um byte TLV ou elemento de string UTF8.
Este método retorna um ponteiro direto para o valor da string codificada no buffer de entrada subjacente. Para ter sucesso, o método requer que todo o valor da string esteja presente em um único buffer. Caso contrário, o método retorna WEAVE_ERROR_TLV_UNDERRUN . Isso torna o método de uso limitado ao ler dados de vários buffers descontíguos.
Detalhes | |||||||||
---|---|---|---|---|---|---|---|---|---|
Parâmetros |
| ||||||||
Valores Retornados |
|
GetLength
uint32_t GetLength( void ) const
Retorna o comprimento dos dados associados ao elemento TLV atual.
O comprimento de dados só se aplica a elementos do tipo string UTF8 ou string de bytes. Para strings UTF8, o valor retornado é o número de bytes na string, não o número de caracteres.
Detalhes | |
---|---|
Devoluções | O comprimento (em bytes) dos dados associados ao elemento TLV atual, ou 0 se o elemento atual não for uma string UTF8 ou uma string de bytes, ou se o leitor não estiver posicionado em um elemento. |
GetLengthRead
uint32_t GetLengthRead( void ) const
Retorna o número total de bytes lidos desde que o leitor foi inicializado.
Detalhes | |
---|---|
Devoluções | Número total de bytes lidos desde que o leitor foi inicializado. |
GetReadPoint
const uint8_t * GetReadPoint( void ) const
Obtém o ponto no buffer de entrada subjacente que corresponde à posição atual do leitor.
Detalhes | |
---|---|
Devoluções | Um ponteiro para o buffer de entrada subjacente que corresponde à posição atual do leitor. |
GetRemainingLength
uint32_t GetRemainingLength( void ) const
Retorna o número total de bytes que podem ser lidos até que o comprimento máximo de leitura seja atingido.
Detalhes | |
---|---|
Devoluções | Número total de bytes que podem ser lidos até que o comprimento máximo de leitura seja alcançado. |
GetString
WEAVE_ERROR GetString( char *buf, uint32_t bufSize )
Obtenha o valor do byte atual ou elemento de string UTF8 como uma string terminada em nulo.
Para determinar o tamanho do buffer de entrada necessário, chame o método GetLength () antes de chamar GetBytes () . O buffer de entrada deve ser pelo menos um byte maior que o comprimento da string para acomodar o caractere nulo.
Detalhes | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Parâmetros |
| ||||||||||
Valores Retornados |
|
GetTag
uint64_t GetTag( void ) const
Retorna a tag associada ao elemento TLV atual.
O valor retornado por GetTag () pode ser usado com as funções do utilitário de tag ( IsProfileTag () , IsContextTag () , ProfileIdFromTag () , etc.) para determinar o tipo de tag e extrair vários valores de campo de tag.
Detalhes | |
---|---|
Devoluções | Um inteiro não assinado contendo informações sobre a tag associada ao elemento TLV atual. |
GetType
TLVType GetType( void ) const
Iniciar
void Init( const TLVReader & aReader )
Inicializa um objetoTLVReader a partir de outro objetoTLVReader .
Detalhes | |||
---|---|---|---|
Parâmetros |
|
Iniciar
void Init( const uint8_t *data, uint32_t dataLen )
Iniciar
void Init( PacketBuffer *buf, uint32_t maxLen )
Inicializa um objetoTLVReader para ler de um único PacketBuffer.
A análise começa na posição inicial do buffer (buf-> DataStart ()) e continua até o final dos dados no buffer (conforme indicado por buf-> Datalen ()), ou os bytes maxLen foram analisados.
Detalhes | |||||
---|---|---|---|---|---|
Parâmetros |
|
Iniciar
void Init( PacketBuffer *buf, uint32_t maxLen, bool allowDiscontiguousBuffers )
Inicializa um objetoTLVReader para ler um ou mais PacketBuffers.
A análise começa na posição inicial do buffer inicial (buf-> DataStart ()). Se allowDiscontiguousBuffers for true, o leitor avançará pela cadeia de buffers vinculados por seus ponteiros Next () . A análise continua até que todos os dados na cadeia de buffer tenham sido consumidos (conforme denotado por buf-> Datalen ()), ou maxLen bytes tenham sido analisados.
Detalhes | |||||||
---|---|---|---|---|---|---|---|
Parâmetros |
|
Próximo
WEAVE_ERROR Next( void )
Avança o objetoTLVReader para o próximo elemento TLV a ser lido.
O método Next () posiciona o objeto leitor no próximo elemento em uma codificação TLV que reside no mesmo contexto de contenção. Em particular, se o leitor estiver posicionado no nível mais externo de uma codificação TLV , chamar Next () avançará o leitor para o próximo elemento superior. Se o leitor estiver posicionado dentro de um elemento de contêiner TLV (uma estrutura, matriz ou caminho), chamar Next () avançará o leitor para o próximo elemento membro do contêiner.
Como Next () restringe o movimento do leitor ao contexto de contenção atual, chamar Next () quando o leitor está posicionado em um elemento de contêiner avançará sobre o contêiner, ignorando seus elementos de membro (e os membros de quaisquer contêineres aninhados) até atingir o primeiro elemento após o contêiner.
Quando não há mais elementos dentro de um contexto de contenção particular, o método Next () retornará um erro WEAVE_END_OF_TLV e a posição do leitor permanecerá inalterada.
Detalhes | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Valores Retornados |
|
Próximo
WEAVE_ERROR Next( TLVType expectedType, uint64_t expectedTag )
Avança o objetoTLVReader para o próximo elemento TLV a ser lido, afirmando o tipo e a tag do novo elemento.
O método Next (TLVType expectedType, uint64_t expectedTag) é um método de conveniência que tem o mesmo comportamento que Next () , mas também verifica se o tipo e a tag do novo elemento TLV correspondem aos argumentos fornecidos.
Detalhes | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parâmetros |
| ||||||||||||||||
Valores Retornados |
|
OpenContainer
WEAVE_ERROR OpenContainer( TLVReader & containerReader )
Inicializa um novo objetoTLVReader para ler os membros de um elemento de contêiner TLV .
O método OpenContainer () inicializa um novo objetoTLVReader para ler os elementos membros de um contêiner TLV (uma estrutura, array ou caminho). Quando OpenContainer () é chamado, o objetoTLVReader atual deve ser posicionado no elemento contêiner a ser lido. O método tem como único argumento uma referência a um novo leitor que será inicializado para ler o contêiner. Esse leitor é conhecido como leitor de contêiner, enquanto o leitor no qual OpenContainer () é chamado é conhecido como leitor pai .
Quando o método OpenContainer () retorna, o leitor de contêiner é posicionado imediatamente antes do primeiro membro do contêiner. Chamar Next () no leitor de contêiner avançará pelos membros da coleção até que o fim seja alcançado, ponto no qual o leitor retornará WEAVE_END_OF_TLV.
Enquanto o leitor de contêiner estiver aberto, os aplicativos não devem fazer chamadas ou alterar o estado do leitor pai. Depois que um aplicativo terminar de usar o leitor de contêiner, ele deve fechá-lo chamando CloseContainer () no leitor pai, passando o leitor de contêiner como um argumento. Os aplicativos podem fechar o leitor de contêiner a qualquer momento, com ou sem ler todos os elementos contidos no contêiner subjacente. Depois que o leitor de contêiner é fechado, os aplicativos podem continuar a usar o leitor pai.
O leitor de contêiner herda várias propriedades de configuração do leitor pai. Esses são:
- O id de perfil implícito (ImplicitProfileId)
- O ponteiro de dados do aplicativo (AppData)
- O ponteiro de função GetNextBuffer
Details | |||||
---|---|---|---|---|---|
Parameters |
| ||||
Return Values |
|
Skip
WEAVE_ERROR Skip( void )
Advances theTLVReader object to immediately after the current TLV element.
The Skip() method positions the reader object immediately after the current TLV element, such that a subsequent call to Next() will advance the reader to the following element. Like Next() , if the reader is positioned on a container element at the time of the call, the members of the container will be skipped. If the reader is not positioned on any element, its position remains unchanged.
Details | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Return Values |
|
VerifyEndOfContainer
WEAVE_ERROR VerifyEndOfContainer( void )
Verifies that the TVLReader object is at the end of a TLV container.
The VerifyEndOfContainer() method verifies that there are no further TLV elements to be read within the current TLV container. This is a convenience method that is equivalent to calling Next() and checking for a return value of WEAVE_END_OF_TLV.
Details | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Return Values |
|
Protected functions
ClearElementState
void ClearElementState( void )
ElementType
TLVElementType ElementType( void ) const
This is a private method that returns the TLVElementType from mControlByte.
EnsureData
WEAVE_ERROR EnsureData( WEAVE_ERROR noDataErr )
GetElementHeadLength
WEAVE_ERROR GetElementHeadLength( uint8_t & elemHeadBytes ) const
This is a private method used to compute the length of a TLV element head.
IsContainerOpen
bool IsContainerOpen( void ) const
ReadData
WEAVE_ERROR ReadData( uint8_t *buf, uint32_t len )
ReadElement
WEAVE_ERROR ReadElement( void )
ReadTag
uint64_t ReadTag( TLVTagControl tagControl, const uint8_t *& p )
SetContainerOpen
void SetContainerOpen( bool aContainerOpen )
SkipData
WEAVE_ERROR SkipData( void )
Skip any data contained in the current TLV by reading over it without a destination buffer.
Details | |||||
---|---|---|---|---|---|
Return Values |
|
SkipToEndOfContainer
WEAVE_ERROR SkipToEndOfContainer( void )
VerifyElement
WEAVE_ERROR VerifyElement( void )
Protected static functions
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 )