O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.
Esta página foi traduzida pela API Cloud Translation.
Switch to English

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

O TLVReader implementa um analisador de "estilo pull" somente para frente, para dados TLV do Weave. 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 marca 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 alimentar 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 (*
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)
Prepara um objetoTLVReader para ler os membros do elemento contêiner TLV .
ExitContainer ( TLVType outerContainerType)
Conclui a leitura de um contêiner TLV e prepara um objetoTLVReader para ler os elementos após o contêiner.
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 não assinado 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 alcançado.
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)
Avança o objetoTLVReader para o próximo elemento TLV a ser lido.
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.
OpenContainer (TLVReader & containerReader)
Inicializa um novo objetoTLVReader para ler os membros de um elemento contêiner TLV .
Skip (void)
Avança o objetoTLVReader para imediatamente após o elemento TLV atual.
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
[in] reader
Uma referência ao objetoTLVReader que está solicitando dados de entrada.
[in,out] bufHandle
Uma referência a um valor uintptr_t que a função pode usar para armazenar dados de contexto entre chamadas. Este valor é inicializado em 0 antes da primeira chamada.
[in,out] bufStart
Uma referência a um ponteiro de dados. Ao entrar na função, bufStart aponta para um byte além do último byte de dados TLV consumido pelo leitor. Na saída, espera-se que bufStart aponte para o primeiro byte de novos dados TLV a serem analisados. O novo valor do ponteiro pode estar no mesmo buffer dos dados consumidos anteriormente ou pode apontar para um buffer inteiramente novo.
[out] bufLen
Uma referência a um inteiro não assinado que a função deve definir para o número de bytes de dados TLV que estão sendo retornados. Se o fim dos dados TLV de entrada for alcançado, a função deve definir este valor para 0.
Valores Retornados
WEAVE_NO_ERROR
Se a função produziu com sucesso mais dados TLV , ou o final dos dados de entrada foi alcançado ( bufLen deve ser definido como 0 neste caso).
other
Outro Weave ou códigos de erro específicos da plataforma indicando que ocorreu um erro impedindo a função de produzir os dados solicitados.

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 que está sendo falado.

Se uma tag implicitamente codificada 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 os dois 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
[in] containerReader
Uma referência ao objetoTLVReader que foi fornecido ao método OpenContainer () .
Valores Retornados
WEAVE_NO_ERROR
Se o método for bem-sucedido.
WEAVE_ERROR_INCORRECT_STATE
Se OpenContainer () não foi chamado no leitor, ou se o leitor de contêiner não corresponde ao passado para o método OpenContainer () .
WEAVE_ERROR_TLV_UNDERRUN
Se a codificação TLV subjacente terminou prematuramente.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Se o leitor encontrou um tipo de elemento TLV inválido ou não suportado.
WEAVE_ERROR_INVALID_TLV_TAG
Se o leitor encontrou uma tag TLV em um contexto inválido.
other
Outros códigos de erro de Weave ou plataforma retornados pela função GetNextBuffer () configurada. Só é possível quando GetNextBuffer não é NULL.

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 responsável pela chamada quando não for mais necessária.

Detalhes
Parâmetros
[out] buf
Uma referência a um ponteiro ao qual um buffer alocado por heap de bytes dataLen será atribuído em caso de sucesso.
[out] dataLen
Uma referência ao armazenamento para o tamanho, em bytes, do buf em caso de sucesso.
Valores Retornados
WEAVE_NO_ERROR
Se o método for bem-sucedido.
WEAVE_ERROR_WRONG_TLV_TYPE
Se o elemento atual não for um byte TLV ou uma string UTF8, ou se o leitor não estiver posicionado em um elemento.
WEAVE_ERROR_NO_MEMORY
Se a memória não puder ser alocada para o buffer de saída.
WEAVE_ERROR_TLV_UNDERRUN
Se a codificação TLV subjacente terminou prematuramente.
WEAVE_ERROR_UNSUPPORTED_WEAVE_FEATURE
Se a plataforma de destino não suportar malloc () e free ().
other
Outros códigos de erro de Weave ou plataforma retornados pela função GetNextBuffer () configurada. Só é possível quando GetNextBuffer não é NULL.

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 responsável pela chamada quando não for mais necessária.

Detalhes
Parâmetros
[out] buf
Uma referência a um ponteiro para o qual um buffer alocado em heap de será atribuído em caso de sucesso.
Valores Retornados
WEAVE_NO_ERROR
Se o método for bem-sucedido.
WEAVE_ERROR_WRONG_TLV_TYPE
Se o elemento atual não for um byte TLV ou uma string UTF8, ou se o leitor não estiver posicionado em um elemento.
WEAVE_ERROR_NO_MEMORY
Se a memória não puder ser alocada para o buffer de saída.
WEAVE_ERROR_TLV_UNDERRUN
Se a codificação TLV subjacente terminou prematuramente.
WEAVE_ERROR_UNSUPPORTED_WEAVE_FEATURE
Se a plataforma de destino não suportar malloc () e free ().
other
Outros códigos de erro de Weave ou plataforma retornados pela função GetNextBuffer () configurada. Só é possível quando GetNextBuffer não é NULL.

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, momento 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
[out] outerContainerType
Uma referência a um valor TLVType que receberá o contexto do leitor.
Valores Retornados
WEAVE_NO_ERROR
Se o método for bem-sucedido.
WEAVE_ERROR_INCORRECT_STATE
Se o elemento atual não estiver posicionado em um elemento de contêiner.

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 de chamar EnterContainer () , 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
[in] outerContainerType
O valor TLVType que foi retornado pelo método EnterContainer () .
Valores Retornados
WEAVE_NO_ERROR
Se o método for bem-sucedido.
WEAVE_ERROR_INCORRECT_STATE
Se OpenContainer () não foi chamado no leitor, ou se o leitor de contêiner não corresponde ao passado para o método OpenContainer () .
WEAVE_ERROR_TLV_UNDERRUN
Se a codificação TLV subjacente terminou prematuramente.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Se o leitor encontrou um tipo de elemento TLV inválido ou não compatível.
WEAVE_ERROR_INVALID_TLV_TAG
Se o leitor encontrou uma tag TLV em um contexto inválido.
other
Outros códigos de erro de Weave ou plataforma retornados pela função GetNextBuffer () configurada. Só é possível quando GetNextBuffer não é NULL.

Obter

WEAVE_ERROR Get(
  bool & v
)

Obtenha o valor do elemento atual como um tipo bool.

Detalhes
Parâmetros
[out] v
Recebe o valor associado ao elemento TLV atual.
Valores Retornados
WEAVE_NO_ERROR
Se o método for bem-sucedido.
WEAVE_ERROR_WRONG_TLV_TYPE
Se o elemento atual não for do tipo booleano TLV ou se o leitor não estiver posicionado em um elemento.

Obter

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 do que o tipo de dados de saída, o valor resultante será truncado.

Detalhes
Parâmetros
[out] v
Recebe o valor associado ao elemento TLV atual.
Valores Retornados
WEAVE_NO_ERROR
Se o método for bem-sucedido.
WEAVE_ERROR_WRONG_TLV_TYPE
Se o elemento atual não for um tipo inteiro TLV (com ou sem sinal), ou se o leitor não estiver posicionado em um elemento.

Obter

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 do que o tipo de dados de saída, o valor resultante será truncado.

Detalhes
Parâmetros
[out] v
Recebe o valor associado ao elemento TLV atual.
Valores Retornados
WEAVE_NO_ERROR
Se o método for bem-sucedido.
WEAVE_ERROR_WRONG_TLV_TYPE
Se o elemento atual não for um tipo inteiro TLV (com ou sem sinal), ou se o leitor não estiver posicionado em um elemento.

Obter

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 do que o tipo de dados de saída, o valor resultante será truncado.

Detalhes
Parâmetros
[out] v
Recebe o valor associado ao elemento TLV atual.
Valores Retornados
WEAVE_NO_ERROR
Se o método for bem-sucedido.
WEAVE_ERROR_WRONG_TLV_TYPE
Se o elemento atual não for um tipo inteiro TLV (com ou sem sinal), ou se o leitor não estiver posicionado em um elemento.

Obter

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
[out] v
Recebe o valor associado ao elemento TLV atual.
Valores Retornados
WEAVE_NO_ERROR
Se o método for bem-sucedido.
WEAVE_ERROR_WRONG_TLV_TYPE
Se o elemento atual não for um tipo inteiro TLV (com ou sem sinal), ou se o leitor não estiver posicionado em um elemento.

Obter

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
[out] v
Recebe o valor associado ao elemento TLV atual.
Valores Retornados
WEAVE_NO_ERROR
Se o método for bem-sucedido.
WEAVE_ERROR_WRONG_TLV_TYPE
Se o elemento atual não for um tipo inteiro TLV (com ou sem sinal), ou se o leitor não estiver posicionado em um elemento.

Obter

WEAVE_ERROR Get(
  uint16_t & v
)

Obtenha o valor do elemento atual como um inteiro não assinado 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
[out] v
Recebe o valor associado ao elemento TLV atual.
Valores Retornados
WEAVE_NO_ERROR
Se o método for bem-sucedido.
WEAVE_ERROR_WRONG_TLV_TYPE
Se o elemento atual não for um tipo inteiro TLV (com ou sem sinal), ou se o leitor não estiver posicionado em um elemento.

Obter

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 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
[out] v
Recebe o valor associado ao elemento TLV atual.
Valores Retornados
WEAVE_NO_ERROR
Se o método for bem-sucedido.
WEAVE_ERROR_WRONG_TLV_TYPE
Se o elemento atual não for um tipo inteiro TLV (com ou sem sinal), ou se o leitor não estiver posicionado em um elemento.

Obter

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
[out] v
Recebe o valor associado ao elemento TLV atual.
Valores Retornados
WEAVE_NO_ERROR
Se o método for bem-sucedido.
WEAVE_ERROR_WRONG_TLV_TYPE
Se o elemento atual não for um tipo inteiro TLV (com ou sem sinal), ou se o leitor não estiver posicionado em um elemento.

Obter

WEAVE_ERROR Get(
  float & v
)

Obter

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
[out] v
Recebe o valor associado ao elemento TLV atual.
Valores Retornados
WEAVE_NO_ERROR
Se o método for bem-sucedido.
WEAVE_ERROR_WRONG_TLV_TYPE
Se o elemento atual não for um tipo de ponto flutuante TLV ou o leitor não estiver posicionado em um elemento.

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
[in] buf
Um ponteiro para um buffer para receber os dados da string.
[in] bufSize
O tamanho em bytes do buffer apontado por buf .
Valores Retornados
WEAVE_NO_ERROR
Se o método for bem-sucedido.
WEAVE_ERROR_WRONG_TLV_TYPE
Se o elemento atual não for um byte TLV ou uma string UTF8, ou se o leitor não estiver posicionado em um elemento.
WEAVE_ERROR_BUFFER_TOO_SMALL
Se o buffer fornecido for muito pequeno para conter os dados associados ao elemento atual.
WEAVE_ERROR_TLV_UNDERRUN
Se a codificação TLV subjacente terminou prematuramente.
other
Outros códigos de erro de Weave ou plataforma retornados pela função GetNextBuffer () configurada. Só é possível quando GetNextBuffer não é NULL.

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 sem sinal que contém 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 do valor da string codificada dentro do 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
[out] data
Uma referência a um ponteiro const que receberá um ponteiro para os dados da string subjacente.
Valores Retornados
WEAVE_NO_ERROR
Se o método for bem-sucedido.
WEAVE_ERROR_WRONG_TLV_TYPE
Se o elemento atual não for um byte TLV ou uma string UTF8, ou se o leitor não estiver posicionado em um elemento.
WEAVE_ERROR_TLV_UNDERRUN
Se a codificação TLV subjacente terminou prematuramente ou o valor do elemento de string atual não está contido em um único buffer contíguo.
other
Outros códigos de erro de Weave ou plataforma retornados pela função GetNextBuffer () configurada. Só é possível quando GetNextBuffer não é NULL.

GetLength

uint32_t GetLength(
  void
) const 

Retorna o comprimento dos dados associados ao elemento TLV atual.

O comprimento dos 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 sequência UTF8 ou uma sequência 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 alcançado.

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
[in] buf
Um ponteiro para um buffer para receber os dados da string de bytes.
[in] bufSize
O tamanho em bytes do buffer apontado por buf .
Valores Retornados
WEAVE_NO_ERROR
Se o método for bem-sucedido.
WEAVE_ERROR_WRONG_TLV_TYPE
Se o elemento atual não for um byte TLV ou uma string UTF8, ou se o leitor não estiver posicionado em um elemento.
WEAVE_ERROR_BUFFER_TOO_SMALL
Se o buffer fornecido for muito pequeno para conter os dados associados ao elemento atual.
WEAVE_ERROR_TLV_UNDERRUN
Se a codificação TLV subjacente terminou prematuramente.
other
Outros códigos de erro de Weave ou plataforma retornados pela função GetNextBuffer () configurada. Só é possível quando GetNextBuffer não é NULL.

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 de 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 sem sinal que contém informações sobre a tag associada ao elemento TLV atual.

GetType

TLVType GetType(
  void
) const 

Retorna o tipo do elemento TLV atual.

Detalhes
Devoluções
Um valor TLVType que descreve o tipo de dados do elemento TLV atual. Se o leitor não estiver posicionado em um elemento TLV , o valor de retorno será kTLVType_NotSpecified.

Iniciar

void Init(
  const TLVReader & aReader
)

Inicializa um objetoTLVReader a partir de outro objetoTLVReader .

Detalhes
Parâmetros
[in] aReader
Uma referência somente leitura para oTLVReader para inicializá-lo.

Iniciar

void Init(
  const uint8_t *data,
  uint32_t dataLen
)

Inicializa um objetoTLVReader para ler de um único buffer de entrada.

Detalhes
Parâmetros
[in] data
Um ponteiro para um buffer que contém os dados TLV a serem analisados.
[in] dataLen
O comprimento dos dados TLV a serem analisados.

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 denotado por buf-> Datalen ()), ou os bytes maxLen foram analisados.

Detalhes
Parâmetros
[in] buf
Um ponteiro para um PacketBuffer contendo os dados TLV a serem analisados.
[in] maxLen
O máximo de bytes para analisar. O padrão é a quantidade de dados no buffer de entrada.

Iniciar

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

Inicializa um objetoTLVReader para ler de 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
[in] buf
Um ponteiro para um PacketBuffer contendo os dados TLV a serem analisados.
[in] maxLen
O máximo de bytes para analisar. O padrão é a quantidade total de dados na cadeia de buffer de entrada.
[in] allowDiscontiguousBuffers
Se verdadeiro, avança para o próximo buffer na cadeia, uma vez que todos os dados no buffer atual tenham sido consumidos. Se for falso, pare de analisar no final do buffer inicial.

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, pulando 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 houver mais elementos dentro de um contexto de contenção específico, o método Next () retornará um erro WEAVE_END_OF_TLV e a posição do leitor permanecerá inalterada.

Detalhes
Valores Retornados
WEAVE_NO_ERROR
Se o leitor foi posicionado com sucesso em um novo elemento.
WEAVE_END_OF_TLV
Se nenhum outro elemento estiver disponível.
WEAVE_ERROR_TLV_UNDERRUN
Se a codificação TLV subjacente terminou prematuramente.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Se o leitor encontrou um tipo de elemento TLV inválido ou não suportado.
WEAVE_ERROR_INVALID_TLV_TAG
Se o leitor encontrou uma tag TLV em um contexto inválido.
WEAVE_ERROR_UNKNOWN_IMPLICIT_TLV_TAG
Se o leitor encontrou uma tag TLV codificada implicitamente para a qual o ID de perfil correspondente é desconhecido.
other
Outros códigos de erro de Weave ou plataforma retornados pela função GetNextBuffer () configurada. Só é possível quando GetNextBuffer não é NULL.

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
[in] expectedType
O tipo de dados esperado para o próximo elemento.
[in] expectedTag
A tag esperada para o próximo elemento.
Valores Retornados
WEAVE_NO_ERROR
Se o leitor foi posicionado com sucesso em um novo elemento.
WEAVE_END_OF_TLV
Se nenhum outro elemento estiver disponível.
WEAVE_ERROR_WRONG_TLV_TYPE
Se o tipo do novo elemento não corresponder ao valor do argumento expectedType .
WEAVE_ERROR_UNEXPECTED_TLV_ELEMENT
Se a marca associada ao novo elemento não corresponder ao valor do argumento linha expectedTag .
WEAVE_ERROR_TLV_UNDERRUN
Se a codificação TLV subjacente terminou prematuramente.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Se o leitor encontrou um tipo de elemento TLV inválido ou não suportado.
WEAVE_ERROR_INVALID_TLV_TAG
Se o leitor encontrou uma tag TLV em um contexto inválido.
other
Outros códigos de erro de Weave ou plataforma retornados pela função GetNextBuffer () configurada. Só é possível quando GetNextBuffer não é NULL.

OpenContainer

WEAVE_ERROR OpenContainer(
  TLVReader & containerReader
)

Inicializa um novo objetoTLVReader para ler os membros de um elemento 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 do 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, momento em que 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. Estes são:

  • O id de perfil implícito (ImplicitProfileId)
  • O ponteiro de dados do aplicativo (AppData)
  • O ponteiro de função GetNextBuffer

Detalhes
Parâmetros
[out] containerReader
Uma referência a um objetoTLVReader que será inicializado para ler os membros do elemento contêiner atual. Todos os dados associados ao objeto fornecido são sobrescritos.
Valores Retornados
WEAVE_NO_ERROR
Se o método for bem-sucedido.
WEAVE_ERROR_INCORRECT_STATE
Se o elemento atual não estiver posicionado em um elemento de contêiner.

Pular

WEAVE_ERROR Skip(
  void
)

Avança o objetoTLVReader para imediatamente após o elemento TLV atual.

O método Skip () posiciona o objeto leitor imediatamente após o elemento TLV atual, de forma que uma chamada subsequente para Next () avance o leitor para o elemento seguinte. Como Next () , se o leitor estiver posicionado em um elemento de contêiner no momento da chamada, os membros do contêiner serão ignorados. Se o leitor não estiver posicionado em nenhum elemento, sua posição permanece inalterada.

Detalhes
Valores Retornados
WEAVE_NO_ERROR
Se o leitor foi posicionado com sucesso em um novo elemento.
WEAVE_END_OF_TLV
Se nenhum outro elemento estiver disponível.
WEAVE_ERROR_TLV_UNDERRUN
Se a codificação TLV subjacente terminou prematuramente.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Se o leitor encontrou um tipo de elemento TLV inválido ou não suportado.
WEAVE_ERROR_INVALID_TLV_TAG
If the reader encountered a TLV tag in an invalid context.
other
Other Weave or platform error codes returned by the configured GetNextBuffer() function. Only possible when GetNextBuffer is non-NULL.

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.

Detalhes
Valores Retornados
WEAVE_NO_ERROR
If there are no further TLV elements to be read.
WEAVE_ERROR_UNEXPECTED_TLV_ELEMENT
If another TLV element was found in the collection.
WEAVE_ERROR_TLV_UNDERRUN
If the underlying TLV encoding ended prematurely.
WEAVE_ERROR_INVALID_TLV_ELEMENT
If the reader encountered an invalid or unsupported TLV element type.
WEAVE_ERROR_INVALID_TLV_TAG
If the reader encountered a TLV tag in an invalid context.
other
Other Weave or platform error codes returned by the configured GetNextBuffer() function. Only possible when GetNextBuffer is non-NULL.

Funções protegidas

ClearElementState

void ClearElementState(
  void
)

Clear the state of theTLVReader .

This method is used to position the reader before the first TLV , between TLVs or after the last TLV .

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.

Detalhes
Valores Retornados
WEAVE_NO_ERROR
If the reader was successfully positioned at the end of the data.
other
Other Weave or platform error codes returned by the configured GetNextBuffer() function. Only possible when GetNextBuffer is non-NULL.

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
)