nl:: Weave:: TLV:: TLVReader
#include <src/lib/core/WeaveTLV.h>
Fornece um analisador de memória eficiente para dados codificados no formato TLV do Weave.
Resumo
O TLVReader implementa um analisador de estilo pull para somente dados para dados TLV do Weave. O objeto TLVReader funciona como um cursor que pode ser usado para iterar uma sequência de elementos TLV e interpretar o conteúdo deles. 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 elemento para elemento.
Um objeto TLVReader é sempre posicionado antes, em ou depois de um elemento TLV. Quando inicializado, um TLVReader é posicionado imediatamente antes do primeiro elemento da codificação. Para começar a ler, um aplicativo precisa fazer uma chamada inicial para o método Next() a fim de posicionar o leitor no primeiro elemento. Quando um elemento de contêiner é encontrado por uma estrutura, uma matriz ou um caminho, os métodos OpenContainer() ou EnterContainer() podem ser usados para iterar pelo conteúdo do contêiner.
Quando o leitor atinge o fim 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á retornando o WEAVE_END_OF_TLV até que seja reinicializado ou até o contêiner atual ser fechado (por meio do CloseContainer() / ExitContainer()).
Um objeto TLVReader pode analisar dados diretamente de um buffer de entrada fixo ou de uma cadeia de um ou mais PackageBuffers. Além disso, os aplicativos podem fornecer uma função GetNextBuffer
para alimentar os dados de um leitor de uma fonte arbitrária, como um soquete ou uma porta serial.
Herança
Subclasses conhecidas diretas: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(* Uma função que pode ser usada para recuperar outros dados TLV 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 objeto TLVReader.
|
ImplicitProfileId
|
uint32_t
O ID do perfil a ser usado para tags de perfil codificadas em 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)
|
Conclua 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 que contém o valor do byte atual ou da string UTF8.
|
DupString(char *& buf)
|
Aloca e retorna um buffer que contém o valor terminado em nulo do byte atual ou da string UTF8.
|
EnterContainer(TLVType & outerContainerType)
|
|
ExitContainer(TLVType outerContainerType)
|
|
Get(bool & v)
|
Acesse o valor do elemento atual como um tipo booleano.
|
Get(int8_t & v)
|
Encontre o valor do elemento atual como um número inteiro assinado de 8 bits.
|
Get(int16_t & v)
|
Encontre o valor do elemento atual como um número inteiro assinado de 16 bits.
|
Get(int32_t & v)
|
Encontre o valor do elemento atual como um número inteiro assinado com 32 bits.
|
Get(int64_t & v)
|
Encontre o valor do elemento atual como um número inteiro assinado de 64 bits.
|
Get(uint8_t & v)
|
Encontre o valor do elemento atual como um número inteiro sem assinatura de 8 bits.
|
Get(uint16_t & v)
|
Encontre o valor do elemento atual como um número inteiro sem assinatura de 16 bits.
|
Get(uint32_t & v)
|
Encontre o valor do elemento atual como um número inteiro sem assinatura de 32 bits.
|
Get(uint64_t & v)
|
Encontre o valor do elemento atual como um número inteiro sem assinatura de 64 bits.
|
Get(float & v)
|
|
Get(double & v)
|
Acesse 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)
|
Encontre o valor do byte atual ou do elemento de string UTF8.
|
GetContainerType(void) const
|
Retorna o tipo de contêiner no qual o TLVReader está lendo no momento.
|
GetControlByte(void) const
|
uint16_t
Retorna o byte de controle associado ao elemento TLV atual.
|
GetDataPtr(const uint8_t *& data)
|
Receba um ponteiro para o byte codificado inicial de um elemento de string UTF8 ou byte TLV.
|
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 *
Recebe 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 tamanho máximo de leitura seja atingido.
|
GetString(char *buf, uint32_t bufSize)
|
Encontre o valor do byte atual ou do elemento de string UTF8 como uma string encerrada nula.
|
GetTag(void) const
|
uint64_t
Retorna a tag associada ao elemento TLV atual.
|
GetType(void) const
|
Retorna o tipo do elemento TLV atual.
|
Init(const TLVReader & aReader)
|
void
|
Init(const uint8_t *data, uint32_t dataLen)
|
void
Inicializa um objeto TLVReader para ler um único buffer de entrada.
|
Init(PacketBuffer *buf, uint32_t maxLen)
|
void
Inicializa um objeto TLVReader para ler um único PackageBuffer.
|
Init(PacketBuffer *buf, uint32_t maxLen, bool allowDiscontiguousBuffers)
|
void
Inicializa um objeto TLVReader para ler um ou mais PackageBuffers.
|
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 do TLVReader.
|
ElementType(void) const
|
TLVElementType
Esse é um método particular que retorna o TLVElementType de mControlByte.
|
EnsureData(WEAVE_ERROR noDataErr)
|
|
GetElementHeadLength(uint8_t & elemHeadBytes) const
|
Esse é um método particular usado para calcular o comprimento 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 outros dados TLV a serem analisados.
As funções desse tipo são usadas para alimentar dados de entrada a um TLVReader. Quando chamada, a função deve produzir dados adicionais para que o leitor analise ou sinalize que não há mais dados disponíveis.
Detalhes | |||||||||
---|---|---|---|---|---|---|---|---|---|
Parâmetros |
|
||||||||
Valores de retorno |
|
Atributos públicos
AppData
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 objeto TLVReader.
Se definido como NULL (o valor padrão), o leitor vai presumir 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 ver mais informações sobre como implementar uma função GetNextBuffer.
ImplicitProfileId
uint32_t ImplicitProfileId
O ID do perfil a ser usado para tags de perfil codificadas em forma implícita.
Quando o leitor encontrar uma tag específica do perfil codificada em forma implícita, ele usará o valor da propriedade ImplicitProfileId
como o ID do perfil presumido para a tag.
Por padrão, a propriedade ImplicitProfileId
é definida como kProfileIdNotspecified. Ao decodificar TLV que contém tags codificadas implicitamente, os aplicativos precisam definir ImplicitProfileId
antes de ler qualquer elemento TLV que tenha essas tags. O ID de perfil apropriado geralmente depende do contexto do aplicativo ou protocolo que está sendo 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
Tipo de contêiner para dispositivos móveis
TLVType mContainerType
mControlByte
uint16_t mControlByte
ElemLenOrVal
uint64_t mElemLenOrVal
TagElem
uint64_t mElemTag
Leitura de mLen
uint32_t mLenRead
mMaxLen
uint32_t mMaxLen
Ponto de leitura
const uint8_t * mReadPoint
Funções públicas
Fechar contêiner
WEAVE_ERROR CloseContainer( TLVReader & containerReader )
Conclua a leitura de um contêiner TLV após uma chamada para OpenContainer().
O método CloseContainer() restaura o estado de um objeto pai TLVReader após uma chamada para OpenContainer(). Para cada chamada de aplicativos do OpenContainer(), é necessário fazer uma chamada correspondente para CloseContainer(), transmitindo uma referência ao mesmo leitor de contêiner para ambos os métodos.
Quando CloseContainer() é retornado, o leitor pai é posicionado imediatamente antes do primeiro elemento que acompanha o contêiner. A partir desse ponto, um aplicativo pode usar o método Next() para avançar os elementos restantes.
Os aplicativos podem chamar o botão 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 deverá considerar o leitor de contêiner 'de-bootd' e não poderá usá-lo sem reiniciar o aplicativo.
Detalhes | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parâmetros |
|
||||||||||||
Valores de retorno |
|
Bytes duplos
WEAVE_ERROR DupBytes( uint8_t *& buf, uint32_t & dataLen )
Aloca e retorna um buffer que contém o valor do byte atual ou da string UTF8.
Esse 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 do buffer é recebida com malloc() e deve ser liberada com free() pelo autor da chamada quando ela não for mais necessária.
Detalhes | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parâmetros |
|
||||||||||||
Valores de retorno |
|
String DupString
WEAVE_ERROR DupString( char *& buf )
Aloca e retorna um buffer que contém o valor terminado em nulo do byte atual ou da string UTF8.
Esse método cria um buffer e retorna uma cópia com terminação nula dos dados associados ao byte ou elemento de string UTF-8 na posição atual. A memória do buffer é recebida com malloc() e deve ser liberada com free() pelo autor da chamada quando ela não for mais necessária.
Detalhes | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parâmetros |
|
||||||||||||
Valores de retorno |
|
Inserir contêiner
WEAVE_ERROR EnterContainer( TLVType & outerContainerType )
Prepara um objeto TLVReader para ler os membros do elemento do contêiner TLV.
O método EnterContainer() prepara o objeto TLVReader atual para começar a ler os elementos do membro de um contêiner TLV (uma estrutura, matriz ou caminho). Para cada chamada para EnterContainer(), os aplicativos precisam fazer uma chamada correspondente para ExitContainer().
Quando EnterContainer() é chamado, o objeto TLVReader precisa ser posicionado no elemento do contêiner para ser lido. O método usa como argumento uma referência a um valor de TLVType que será usado para salvar o contexto do leitor enquanto estiver lendo o contêiner.
Quando o método EnterContainer() retorna, o leitor é posicionado imediatamente antes do primeiro membro do contêiner. Repetir a chamada Next() avança o leitor pelos membros da coleção até o fim, quando o leitor retorna WEAVE_END_OF_TLV.
Depois que o aplicativo terminar de ler um contêiner, ele poderá continuar lendo os elementos após o contêiner chamando o método ExitContainer().
Detalhes | |||||
---|---|---|---|---|---|
Parâmetros |
|
||||
Valores de retorno |
|
Sair do Container
WEAVE_ERROR ExitContainer( TLVType outerContainerType )
Conclua a leitura de um contêiner TLV e prepara um objeto TLVReader para ler elementos depois do contêiner.
O método ExitContainer() restaura o estado de um objeto TLVReader após uma chamada para EnterContainer(). Para cada chamada aos aplicativos EnterContainer(), é necessário fazer uma chamada correspondente para ExitContainer(), transmitindo o valor do contexto retornado pelo método EnterContainer().
Quando ExitContainer() é retornado, o leitor é posicionado imediatamente antes do primeiro elemento que acompanha o contêiner. A partir desse ponto, um aplicativo pode usar o método Next() para avançar os elementos restantes.
Depois que EnterContainer() for chamado, os aplicativos poderão chamar ExitContainer() em um leitor a qualquer momento, independentemente de todos os elementos no contêiner subjacente terem sido lidos.
Detalhes | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parâmetros |
|
||||||||||||
Valores de retorno |
|
Get
WEAVE_ERROR Get( bool & v )
Acesse o valor do elemento atual como um tipo booleano.
Detalhes | |||||
---|---|---|---|---|---|
Parâmetros |
|
||||
Valores de retorno |
|
Get
WEAVE_ERROR Get( int8_t & v )
Encontre o valor do elemento atual como um número 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 de retorno |
|
Get
WEAVE_ERROR Get( int16_t & v )
Encontre o valor do elemento atual como um número 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 de retorno |
|
Get
WEAVE_ERROR Get( int32_t & v )
Encontre o valor do elemento atual como um número inteiro assinado com 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 de retorno |
|
Get
WEAVE_ERROR Get( int64_t & v )
Encontre o valor do elemento atual como um número inteiro assinado de 64 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 de retorno |
|
Get
WEAVE_ERROR Get( uint8_t & v )
Encontre o valor do elemento atual como um número inteiro sem assinatura de 8 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 não assinado.
Detalhes | |||||
---|---|---|---|---|---|
Parâmetros |
|
||||
Valores de retorno |
|
Get
WEAVE_ERROR Get( uint16_t & v )
Encontre o valor do elemento atual como um número inteiro sem assinatura de 16 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 não assinado.
Detalhes | |||||
---|---|---|---|---|---|
Parâmetros |
|
||||
Valores de retorno |
|
Get
WEAVE_ERROR Get( uint32_t & v )
Encontre o valor do elemento atual como um número inteiro sem assinatura 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 não assinado.
Detalhes | |||||
---|---|---|---|---|---|
Parâmetros |
|
||||
Valores de retorno |
|
Get
WEAVE_ERROR Get( uint64_t & v )
Encontre o valor do elemento atual como um número inteiro sem assinatura de 64 bits.
Se o valor inteiro codificado for negativo, ele será convertido para não assinado.
Detalhes | |||||
---|---|---|---|---|---|
Parâmetros |
|
||||
Valores de retorno |
|
Get
WEAVE_ERROR Get( float & v )
Get
WEAVE_ERROR Get( double & v )
Acesse o valor do elemento atual como um número de ponto flutuante de precisão dupla.
Detalhes | |||||
---|---|---|---|---|---|
Parâmetros |
|
||||
Valores de retorno |
|
GetBufHandle
uintptr_t GetBufHandle( void ) const
GetBytes
WEAVE_ERROR GetBytes( uint8_t *buf, uint32_t bufSize )
Encontre o valor do byte atual ou do elemento de string UTF8.
Para determinar o tamanho de buffer de entrada necessário, chame o método GetLength() antes de chamar GetBytes().
Detalhes | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Parâmetros |
|
||||||||||
Valores de retorno |
|
GetContainerType
TLVType GetContainerType( void ) const
Retorna o tipo de contêiner no qual o TLVReader está lendo no momento.
O método GetContainerType() retorna o tipo de contêiner TLV em que o TLVReader está lendo. Se o TLVReader for posicionado no nível mais externo de uma codificação TLV, ou seja, antes, no ou depois do elemento TLV externo, o método retornará kTLVType_Notspecified.
Detalhes | |
---|---|
Retorna |
O TLVType do contêiner atual, ou kTLVType_Notspecified, se TLVReader não está posicionado em um contêiner.
|
GetControlByte
uint16_t GetControlByte( void ) const
Retorna o byte de controle associado ao elemento TLV atual.
O ideal é que ninguém precise saber sobre o byte de controle, e somente a implementação interna do TLV deve ter acesso a ele. No entanto, ter acesso ao byte de controle é útil para fins de depuração pelos utilitários da TLVDebug (que tentam decodificar o byte de controle da tag ao imprimir o conteúdo do buffer TLV).
Detalhes | |
---|---|
Retorna |
Um número inteiro sem assinatura que contém o byte de controle associado ao elemento TLV atual. kTLVControlByte_Notspecified é retornado se o leitor não está posicionado em um elemento.
|
GetDataPtr
WEAVE_ERROR GetDataPtr( const uint8_t *& data )
Receba um ponteiro para o byte codificado inicial de um elemento de string UTF8 ou byte TLV.
Esse método retorna um ponteiro direto para o valor da string codificada dentro do buffer de entrada subjacente. Para ter sucesso, o método exige que todo o valor da string esteja presente em um único buffer. Caso contrário, o método retornará WEAVE_ERROR_TLV_UNDERRUN. Isso faz com que o método de uso seja limitado ao ler dados de vários buffers descontínuos.
Detalhes | |||||||||
---|---|---|---|---|---|---|---|---|---|
Parâmetros |
|
||||||||
Valores de retorno |
|
GetLength
uint32_t GetLength( void ) const
Retorna o comprimento dos dados associados ao elemento TLV atual.
O comprimento dos dados se aplica apenas 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 | |
---|---|
Retorna |
O tamanho (em bytes) dos dados associados ao elemento TLV atual, ou 0 se o elemento atual não for uma string UTF8 ou byte 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 | |
---|---|
Retorna |
Número total de bytes lidos desde que o leitor foi inicializado.
|
GetReadPoint
const uint8_t * GetReadPoint( void ) const
Recebe o ponto no buffer de entrada subjacente que corresponde à posição atual do leitor.
Detalhes | |
---|---|
Retorna |
Um ponteiro para o buffer de entrada subjacente que corresponde à posição atual do leitor.
|
Get solicitarLength
uint32_t GetRemainingLength( void ) const
Retorna o número total de bytes que podem ser lidos até que o tamanho máximo de leitura seja atingido.
Detalhes | |
---|---|
Retorna |
Número total de bytes que podem ser lidos até que o tamanho máximo de leitura seja atingido.
|
GetString
WEAVE_ERROR GetString( char *buf, uint32_t bufSize )
Encontre o valor do byte atual ou do elemento de string UTF8 como uma string encerrada nula.
Para determinar o tamanho de buffer de entrada necessário, chame o método GetLength() antes de chamar GetBytes(). O buffer de entrada precisa ter pelo menos um byte maior que o tamanho da string para acomodar o caractere nulo.
Detalhes | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Parâmetros |
|
||||||||||
Valores de retorno |
|
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 da tag.
Detalhes | |
---|---|
Retorna |
Um número inteiro sem assinatura que contém informações sobre a tag associada ao elemento TLV atual.
|
GetType
TLVType GetType( void ) const
Init
void Init( const TLVReader & aReader )
Init
void Init( const uint8_t *data, uint32_t dataLen )
Init
void Init( PacketBuffer *buf, uint32_t maxLen )
Inicializa um objeto TLVReader para ler um único PackageBuffer.
A análise começa na posição inicial de buffer (buf->DataStart()) e continua até o fim dos dados no buffer (conforme indicado por buf->Datalen()) ou os bytes maxLen foram analisados.
Detalhes | |||||
---|---|---|---|---|---|
Parâmetros |
|
Init
void Init( PacketBuffer *buf, uint32_t maxLen, bool allowDiscontiguousBuffers )
Inicializa um objeto TLVReader para ler um ou mais PackageBuffers.
A análise começa na posição inicial de buffer inicial (buf->DataStart()). Se allowDiscontiguousBuffers for verdadeiro, o leitor avançará na cadeia de buffers vinculados pelos ponteiros de Next(). A análise continua até que todos os dados na cadeia de buffer tenham sido consumidos (conforme indicado por buf->Datalen()) ou até que os bytes maxLen sejam analisados.
Detalhes | |||||||
---|---|---|---|---|---|---|---|
Parâmetros |
|
Próxima
WEAVE_ERROR Next( void )
avança o objeto TLVReader para o próximo elemento TLV que será lido;
O método Next() posiciona o objeto do leitor no próximo elemento em uma codificação TLV que reside no mesmo contexto de contenção. Se o leitor estiver posicionado no nível mais externo de uma codificação TLV, chamar Next() fará com que ele chegue ao próximo elemento na parte superior. Se o leitor for posicionado em um elemento do contêiner de TLV (uma estrutura, uma matriz ou um caminho), chamar Next() adiantará o leitor para o próximo elemento de membro do contêiner.
Como Next() restringe o movimento do leitor ao contexto de contenção atual, chamar Next() quando o leitor é posicionado em um elemento do contêiner avança no contêiner, ignorando os elementos (e membros de contêineres aninhados) até que chegue ao primeiro elemento após o contêiner.
Quando não há mais elementos em um contexto de contenção específico, o método Next() retorna um erro WEAVE_END_OF_TLV e a posição do leitor permanece inalterada.
Detalhes | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Valores de retorno |
|
Próxima
WEAVE_ERROR Next( TLVType expectedType, uint64_t expectedTag )
avança o objeto TLVReader para o próximo elemento TLV a ser lido, declarando o tipo e a tag do novo elemento;
O método Next(TLVTypeExpectedType, uint64_texpectedTag) é 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 de retorno |
|
OpenContainer
WEAVE_ERROR OpenContainer( TLVReader & containerReader )
Inicializa um novo objeto TLVReader para ler os membros de um elemento de contêiner TLV.
O método OpenContainer() inicializa um novo objeto TLVReader para ler os elementos de membro de um contêiner TLV (uma estrutura, matriz ou caminho). Quando OpenContainer() é chamado, o objeto TLVReader atual precisa ser posicionado no elemento do contêiner para ser lido. O método usa como argumento exclusivo uma referência a um novo leitor que será inicializado para ler o contêiner. Esse leitor é conhecido como leitor de contêiner, e 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ça com os membros da coleção até que o fim seja atingido, quando o leitor retorna WEAVE_END_OF_TLV.
Enquanto o leitor de contêiner está aberto, os aplicativos não podem fazer chamadas nem alterar o estado do leitor pai. Depois que um aplicativo termina de usar o leitor de contêiner, ele precisa fechá-lo chamando CloseContainer() no leitor pai, transmitindo o leitor de contêiner como um argumento. Os aplicativos podem fechar o leitor de contêiner a qualquer momento, com ou sem a leitura de todos os elementos contidos no contêiner subjacente. Depois que o leitor de contêiner for fechado, os aplicativos continuarão usando o leitor pai.
O leitor de contêiner herda várias propriedades de configuração do leitor pai. Eles são os seguintes:
- O ID de perfil implícito (ImplicitProfileId)
- O ponteiro de dados do aplicativo (AppData)
- O ponteiro da função GetNextBuffer
Detalhes | |||||
---|---|---|---|---|---|
Parâmetros |
|
||||
Valores de retorno |
|
Pular
WEAVE_ERROR Skip( void )
avança o objeto TLVReader imediatamente após o elemento TLV atual;
O método Skip() posiciona o objeto do leitor imediatamente após o elemento TLV atual, de modo que uma chamada subsequente para Next() avança o leitor para o elemento a seguir. Como Next(), se o leitor for posicionado em um elemento do contêiner no momento da chamada, os membros do contêiner serão ignorados. Se o leitor não estiver posicionado em nenhum elemento, a posição dele permanecerá inalterada.
Detalhes | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Valores de retorno |
|
VerificarfimDoContêiner
WEAVE_ERROR VerifyEndOfContainer( void )
Verifica se o objeto TVLReader está no final de um contêiner TLV.
O método VerifyEndOfContainer() verifica se não há mais elementos TLV TLV para serem lidos no contêiner TLV atual. Esse é um método de conveniência equivalente a chamar Next() e verificar o valor de retorno de WEAVE_END_OF_TLV.
Detalhes | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Valores de retorno |
|
Funções protegidas
Limpar ElementElement
void ClearElementState( void )
ElementType
TLVElementType ElementType( void ) const
Esse é um método particular que retorna o TLVElementType de mControlByte.
Garantirdados
WEAVE_ERROR EnsureData( WEAVE_ERROR noDataErr )
GetElementHeadLength
WEAVE_ERROR GetElementHeadLength( uint8_t & elemHeadBytes ) const
Esse é um método particular usado para calcular o comprimento de um elemento TLV.
IsContainerOpen
bool IsContainerOpen( void ) const
Dados de leitura
WEAVE_ERROR ReadData( uint8_t *buf, uint32_t len )
ReadElement
WEAVE_ERROR ReadElement( void )
Tag de leitura
uint64_t ReadTag( TLVTagControl tagControl, const uint8_t *& p )
SetContainerOpen
void SetContainerOpen( bool aContainerOpen )
Dados do Skip
WEAVE_ERROR SkipData( void )
Ignore todos os dados contidos no TLV atual lendo sobre ele sem um buffer de destino.
Detalhes | |||||
---|---|---|---|---|---|
Valores de retorno |
|
Pular para fim do contêiner
WEAVE_ERROR SkipToEndOfContainer( void )
VerificarElemento
WEAVE_ERROR VerifyElement( void )
Funções estáticas protegidas
FailedGetNextBuffer
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 )