O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

nl :: Tecer:: TLV :: TLVReader

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

Fornece um analisador eficiente de memória para dados codificados em Weave TLV formato.

Resumo

TLVReader implementa um forward-only, “pull-estilo” analisador para Weave TLV dados. OTLVReader objecto opera como um cursor que pode ser utilizado para repetir uma sequência de TLV elementos e interpretar o seu conteúdo. Quando posicionado em um elemento, os aplicativos podem fazer chamadas para o leitor get () métodos para consultar tipo e marca do elemento atual, e para extrair qualquer valor associado. Do leitor Next () método é usado para avanço de elemento para elemento.

UmTLVReader objecto é sempre posicionado quer antes, em ou depois de um TLV elemento. Quando inicializado em primeiro lugar, umTLVReader está posicionado imediatamente antes do primeiro elemento da codificação. Para começar a ler, um aplicativo deve fazer uma chamada inicial para o Next () método para situar o leitor no primeiro elemento. Quando um elemento de recipiente é encounteredeither uma estrutura, uma matriz ou um paththe OpenContainer () ou EnterContainer () métodos podem ser usados para percorrer o conteúdo do recipiente.

Quando o leitor atinge o fim de um TLV de codificação, ou o último elemento dentro de um recipiente, ele sinaliza a aplicação por devolver um erro WEAVE_END_OF_TLV a partir do seguinte () método. O leitor irá continuar a voltar WEAVE_END_OF_TLV até que seja reinicializado, ou o recipiente actual é abandonado (por meio CloseContainer () / ExitContainer () ).

UmTLVReader objecto é possível analisar os dados directamente a partir de uma memória intermédia de entrada fixa, ou a partir de uma cadeia de um ou mais PacketBuffers. Além disso, as aplicações podem fornecer uma GetNextBuffer função de dados de alimentação para o leitor a partir de uma fonte arbitrária, por exemplo, uma tomada ou uma porta de série.

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 usado para recuperar adicionais TLV dados 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 irá produzir dados de entrada para oTLVReader objecto.
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)
Completa a leitura de um TLV recipiente 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 umTLVReader objeto para ler os membros do TLV elemento recipiente.
ExitContainer ( TLVType outerContainerType)
Completa a leitura de um TLV recipiente e prepara umTLVReader objeto para ler elementos após o recipiente.
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 do recipiente dentro do qual oTLVReader está lendo atualmente.
GetControlByte (void) const
uint16_t
Retorna o byte de controle associado com o atual TLV elemento.
GetDataPtr (const uint8_t *& data)
Obter um ponteiro para o byte codificado inicial de um TLV byte ou UTF8 elemento cadeia.
GetLength (void) const
uint32_t
Retorna o comprimento de dados associados com o atual TLV elemento.
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 a atual TLV elemento.
GetType (void) const
Retorna o tipo do atual TLV elemento.
Init (constTLVReader & aReader)
void
Inicializa umTLVReader objeto de outroTLVReader objeto.
Init (const uint8_t *data, uint32_t dataLen)
void
Inicializa umaTLVReader objecto para ler a partir de um único buffer de entrada.
Init ( PacketBuffer *buf, uint32_t maxLen)
void
Inicializa umTLVReader objeto para ler a partir de um único PacketBuffer.
Init ( PacketBuffer *buf, uint32_t maxLen, bool allowDiscontiguousBuffers)
void
Inicializa umTLVReader objeto para ler a partir de um ou mais PacketBuffers.
Next (void)
Avanços doTLVReader objeto para o próximo TLV elemento a ser lido.
Next ( TLVType expectedType, uint64_t expectedTag)
Avanços doTLVReader objeto para o próximo TLV elemento a ser lido, afirmando o tipo ea marca do novo elemento.
OpenContainer (TLVReader & containerReader)
Inicializa uma novaTLVReader objeto para ler os membros de um TLV elemento recipiente.
Skip (void)
Avança oTLVReader objeto para imediatamente após a corrente TLV elemento.
VerifyEndOfContainer (void)
Verifica se o objecto TVLReader é no final de um TLV recipiente.

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 particular usado para calcular o comprimento de um TLV cabeça elemento.
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)
Ir todos os dados contidos no atual TLV 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 usado para recuperar adicionais TLV dados a serem analisados.

Funções deste tipo são utilizados para os dados de entrada de alimentação 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 aoTLVReader objecto que está solicitando os 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. Na entrada para a função, bufStart aponta para um byte além do último TLV byte de dados consumidos pelo leitor. Na saída, bufStart é esperado para apontar para o primeiro byte de novos TLV dados 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 número inteiro sem sinal que a função deve ajustar-se ao número de TLV bytes de dados a ser devolvida. Se o fim da entrada TLV dados tenha sido atingido, a função deve definir este valor para 0.
Valores Retornados
WEAVE_NO_ERROR
Se a função produzida com sucesso mais TLV de dados, ou no final dos dados de entrada foi atingido ( 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 irá produzir dados de entrada para oTLVReader objecto.

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 do 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 codificado em forma implícita, ele usa o valor da ImplicitProfileId propriedade como o ID de perfil assumido pelo tag.

Por padrão, o ImplicitProfileId propriedade é definida como kProfileIdNotSpecified. Ao decodificar TLV que contém tags implicitamente codificados, os aplicativos devem definir ImplicitProfileId antes de ler quaisquer TLV elementos com essas tags. O id de perfil apropriado geralmente depende do contexto do aplicativo ou protocolo que está sendo falado.

Se uma tag implicitamente-codificada é encontrado ao ImplicitProfileId está definido para kProfileIdNotSpecified, o leitor irá retornar uma WEAVE_ERROR_UNKNOWN_IMPLICIT_TLV_TAG erro.

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
)

Completa a leitura de um TLV recipiente após uma chamada para OpenContainer () .

O CloseContainer () método restaura o estado de um dos paisTLVReader objecto após uma chamada para OpenContainer () . Para cada chamada para OpenContainer () aplicações deve fazer uma chamada correspondente à CloseContainer () , passando uma referência para o mesmo leitor recipiente para ambos os métodos.

Quando CloseContainer () retorna, o leitor principal está posicionado imediatamente antes do primeiro elemento que segue o recipiente. A partir deste ponto, uma aplicação pode utilizar o seguinte () método para o avanço através de quaisquer elementos restantes.

Os aplicativos podem chamar perto CloseContainer () em um leitor de pai a qualquer momento, independentemente de todos os elementos no recipiente subjacente foram lidas. Depois CloseContainer () foi chamado, o aplicativo deve considerar o leitor recipiente 'de-inicializado' e não deve usá-lo ainda mais, sem re inicializando-lo.

Detalhes
Parâmetros
[in] containerReader
Uma referência aoTLVReader objecto que foi fornecido ao OpenContainer () método.
Valores Retornados
WEAVE_NO_ERROR
Se o método for bem-sucedido.
WEAVE_ERROR_INCORRECT_STATE
Se OpenContainer () não foi chamado para o leitor, ou se o leitor recipiente não corresponder ao passado para o OpenContainer () método.
WEAVE_ERROR_TLV_UNDERRUN
Se o subjacente TLV codificando terminada prematuramente.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Se o leitor encontrou um inválido ou não suportado TLV tipo de elemento.
WEAVE_ERROR_INVALID_TLV_TAG
Se o leitor encontrou um TLV tag em um contexto inválido.
other
Outros códigos de tecer ou de erro plataforma devolvidos pela configurado GetNextBuffer () função. 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 para que uma memória intermédia atribuída-montão de dataLen bytes vão ser atribuída em caso de sucesso.
[out] dataLen
Uma referência para armazenamento para o tamanho, em bytes, de 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 de corrente não é um TLV byte ou UTF8 corda, ou o leitor não é posicionado sobre 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 o subjacente TLV codificando terminada prematuramente.
WEAVE_ERROR_UNSUPPORTED_WEAVE_FEATURE
Se a plataforma de destino não suportar malloc () e free ().
other
Outros códigos de tecer ou de erro plataforma devolvidos pela configurado GetNextBuffer () função. 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 de corrente não é um TLV byte ou UTF8 corda, ou o leitor não é posicionado sobre 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 o subjacente TLV codificando terminada prematuramente.
WEAVE_ERROR_UNSUPPORTED_WEAVE_FEATURE
Se a plataforma de destino não suportar malloc () e free ().
other
Outros códigos de tecer ou de erro plataforma devolvidos pela configurado GetNextBuffer () função. Só é possível quando GetNextBuffer não é NULL.

EnterContainer

WEAVE_ERROR EnterContainer(
  TLVType & outerContainerType
)

Prepara umTLVReader objeto para ler os membros do TLV elemento recipiente.

O EnterContainer () método prepara-se o atualTLVReader objecto para começar a ler os elementos de membro de uma TLV recipiente (uma estrutura, de matriz ou de caminho). Para cada chamada para EnterContainer () aplicações deve fazer uma chamada correspondente a ExitContainer () .

Quando EnterContainer () é chamado oTLVReader objecto tem de ser posicionado no elemento de recipiente a 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 os EnterContainer () método retorna, o leitor está posicionado imediatamente antes do primeiro membro do recipiente. Repetidamente chamando Next () vai avançar o leitor através dos membros da coleção até o fim é alcançado, altura em que o leitor irá retornar WEAVE_END_OF_TLV.

Uma vez que o pedido tenha terminado de ler um recipiente que pode continuar lendo os elementos após o contêiner chamando o ExitContainer () método.

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
)

Completa a leitura de um TLV recipiente e prepara umTLVReader objeto para ler elementos após o recipiente.

O ExitContainer () método restaura o estado de umTLVReader objecto após uma chamada para EnterContainer () . Para cada chamada para EnterContainer () aplicações deve fazer uma chamada correspondente a ExitContainer () , passando o valor de contexto retornado pelo EnterContainer () método.

Quando ExitContainer () retorna, o leitor está posicionado imediatamente antes do primeiro elemento que segue o recipiente. A partir deste ponto, uma aplicação pode utilizar o seguinte () método para o avanço através de quaisquer elementos restantes.

Uma vez EnterContainer () foi chamado, os aplicativos podem chamar ExitContainer () em um leitor em qualquer ponto no tempo, independentemente de todos os elementos no recipiente subjacente foram lidas.

Detalhes
Parâmetros
[in] outerContainerType
O valor TLVType que foi devolvido pelo EnterContainer () método.
Valores Retornados
WEAVE_NO_ERROR
Se o método for bem-sucedido.
WEAVE_ERROR_INCORRECT_STATE
Se OpenContainer () não foi chamado para o leitor, ou se o leitor recipiente não corresponder ao passado para o OpenContainer () método.
WEAVE_ERROR_TLV_UNDERRUN
Se o subjacente TLV codificando terminada prematuramente.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Se o leitor encontrou um inválido ou não suportado TLV tipo de elemento.
WEAVE_ERROR_INVALID_TLV_TAG
Se o leitor encontrou um TLV tag em um contexto inválido.
other
Outros códigos de tecer ou de erro plataforma devolvidos pela configurado GetNextBuffer () função. 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 com o atual TLV elemento.
Valores Retornados
WEAVE_NO_ERROR
Se o método for bem-sucedido.
WEAVE_ERROR_WRONG_TLV_TYPE
Se o elemento de corrente não é um TLV tipo booleano, ou o leitor não é posicionado sobre 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 com o atual TLV elemento.
Valores Retornados
WEAVE_NO_ERROR
Se o método for bem-sucedido.
WEAVE_ERROR_WRONG_TLV_TYPE
Se o elemento de corrente não é um TLV tipo inteiro (sinal ou sem sinal), ou o leitor não é posicionado sobre 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 com o atual TLV elemento.
Valores Retornados
WEAVE_NO_ERROR
Se o método for bem-sucedido.
WEAVE_ERROR_WRONG_TLV_TYPE
Se o elemento de corrente não é um TLV tipo inteiro (sinal ou sem sinal), ou o leitor não é posicionado sobre 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 com o atual TLV elemento.
Valores Retornados
WEAVE_NO_ERROR
Se o método for bem-sucedido.
WEAVE_ERROR_WRONG_TLV_TYPE
Se o elemento de corrente não é um TLV tipo inteiro (sinal ou sem sinal), ou o leitor não é posicionado sobre 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 com o atual TLV elemento.
Valores Retornados
WEAVE_NO_ERROR
Se o método for bem-sucedido.
WEAVE_ERROR_WRONG_TLV_TYPE
Se o elemento de corrente não é um TLV tipo inteiro (sinal ou sem sinal), ou o leitor não é posicionado sobre 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 com o atual TLV elemento.
Valores Retornados
WEAVE_NO_ERROR
Se o método for bem-sucedido.
WEAVE_ERROR_WRONG_TLV_TYPE
Se o elemento de corrente não é um TLV tipo inteiro (sinal ou sem sinal), ou o leitor não é posicionado sobre um elemento.

Obter

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
[out] v
Recebe o valor associado com o atual TLV elemento.
Valores Retornados
WEAVE_NO_ERROR
Se o método for bem-sucedido.
WEAVE_ERROR_WRONG_TLV_TYPE
Se o elemento de corrente não é um TLV tipo inteiro (sinal ou sem sinal), ou o leitor não é posicionado sobre 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 com o atual TLV elemento.
Valores Retornados
WEAVE_NO_ERROR
Se o método for bem-sucedido.
WEAVE_ERROR_WRONG_TLV_TYPE
Se o elemento de corrente não é um TLV tipo inteiro (sinal ou sem sinal), ou o leitor não é posicionado sobre 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 com o atual TLV elemento.
Valores Retornados
WEAVE_NO_ERROR
Se o método for bem-sucedido.
WEAVE_ERROR_WRONG_TLV_TYPE
Se o elemento de corrente não é um TLV tipo inteiro (sinal ou sem sinal), ou o leitor não é posicionado sobre 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 com o atual TLV elemento.
Valores Retornados
WEAVE_NO_ERROR
Se o método for bem-sucedido.
WEAVE_ERROR_WRONG_TLV_TYPE
Se o elemento de corrente não é um TLV tipo de ponto flutuante, ou o leitor não é posicionado sobre 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, chamar o GetLength () método 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 de memória intermédia apontada por buf .
Valores Retornados
WEAVE_NO_ERROR
Se o método for bem-sucedido.
WEAVE_ERROR_WRONG_TLV_TYPE
Se o elemento de corrente não é um TLV byte ou UTF8 corda, ou o leitor não é posicionado sobre 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 o subjacente TLV codificando terminada prematuramente.
other
Outros códigos de tecer ou de erro plataforma devolvidos pela configurado GetNextBuffer () função. Só é possível quando GetNextBuffer não é NULL.

GetContainerType

TLVType GetContainerType(
  void
) const 

Retorna o tipo do recipiente dentro do qual oTLVReader está lendo atualmente.

O GetContainerType () retorna o tipo do TLV recipiente dentro do qual aTLVReader é a leitura. Se oTLVReader está posicionado ao nível mais externa de um TLV de codificação (ou seja, antes, em ou depois de o-mais exterior TLV elemento), o método irá retornar kTLVType_NotSpecified.

Detalhes
Devoluções
O TLVType do recipiente corrente, ou se o kTLVType_NotSpecifiedTLVReader não está posicionada dentro de um recipiente.

GetControlByte

uint16_t GetControlByte(
  void
) const 

Retorna o byte de controle associado com o atual TLV elemento.

Idealmente, ninguém precisa de saber sobre o byte de controle e só a implementação interna do TLV deve ter acesso a ele. Mas, no entanto, de acesso para o byte de controlo é útil para fins de depuração pelo TLV de depuração Utilidades (que tentativa para descodificar o byte de controle etiqueta quando muito imprimir o TLV tampão conteúdos).

Detalhes
Devoluções
Um inteiro sem sinal contendo o byte de controle associada com a corrente TLV elemento. kTLVControlByte_NotSpecified é devolvido se o leitor não é posicionado sobre um elemento.

GetDataPtr

WEAVE_ERROR GetDataPtr(
  const uint8_t *& data
)

Obter um ponteiro para o byte codificado inicial de um TLV byte ou UTF8 elemento cadeia.

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 de corrente não é um TLV byte ou UTF8 corda, ou o leitor não é posicionado sobre um elemento.
WEAVE_ERROR_TLV_UNDERRUN
Se o subjacente TLV codificando terminada prematuramente ou o valor do elemento da cadeia corrente não está contido dentro de um único buffer contíguo.
other
Outros códigos de tecer ou de erro plataforma devolvidos pela configurado GetNextBuffer () função. Só é possível quando GetNextBuffer não é NULL.

GetLength

uint32_t GetLength(
  void
) const 

Retorna o comprimento de dados associados com o atual TLV elemento.

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) de dados associados com a actual TLV elemento, ou 0 se o elemento de corrente não é uma cadeia de cadeia UTF-8 ou bytes, ou quando 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, chamar o GetLength () método 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 de memória intermédia apontada por buf .
Valores Retornados
WEAVE_NO_ERROR
Se o método for bem-sucedido.
WEAVE_ERROR_WRONG_TLV_TYPE
Se o elemento de corrente não é um TLV byte ou UTF8 corda, ou o leitor não é posicionado sobre 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 o subjacente TLV codificando terminada prematuramente.
other
Outros códigos de tecer ou de erro plataforma devolvidos pela configurado GetNextBuffer () função. Só é possível quando GetNextBuffer não é NULL.

GetTag

uint64_t GetTag(
  void
) const 

Retorna a tag associada a atual TLV elemento.

O valor devolvido por gettag () pode ser usado com as funções utilitárias tag ( IsProfileTag () , IsContextTag () , ProfileIdFromTag () , etc.) para determinar o tipo de etiqueta e para extrair vários valores de campo de etiqueta.

Detalhes
Devoluções
Um inteiro sem sinal contendo informação sobre a etiqueta associada com o actual TLV elemento.

GetType

TLVType GetType(
  void
) const 

Retorna o tipo do atual TLV elemento.

Detalhes
Devoluções
Um valor TLVType descrevendo o tipo de dados da corrente TLV elemento. Se o leitor não está posicionado em um TLV elemento, o valor de retorno será kTLVType_NotSpecified.

Iniciar

void Init(
  const TLVReader & aReader
)

Inicializa umTLVReader objeto de outroTLVReader objeto.

Detalhes
Parâmetros
[in] aReader
Uma referência somente de leitura aoTLVReader para inicializar isso.

Iniciar

void Init(
  const uint8_t *data,
  uint32_t dataLen
)

Inicializa umaTLVReader objecto para ler a partir de um único buffer de entrada.

Detalhes
Parâmetros
[in] data
Um apontador para um tampão contendo os TLV de dados a ser analisado.
[in] dataLen
O comprimento dos TLV de dados a ser analisado.

Iniciar

void Init(
  PacketBuffer *buf,
  uint32_t maxLen
)

Inicializa umTLVReader objeto para ler a partir 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 apontador para um PacketBuffer contendo os TLV de dados a ser analisado.
[in] maxLen
O máximo de bytes a serem analisados. O padrão é a quantidade de dados no buffer de entrada.

Iniciar

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

Inicializa umTLVReader objeto para ler a partir de um ou mais PacketBuffers.

A análise começa na posição inicial do buffer inicial (buf-> DataStart ()). Se allowDiscontiguousBuffers é verdade, o leitor vai avançar através da cadeia de buffers ligados por suas next () ponteiros. 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 apontador para um PacketBuffer contendo os TLV de dados a ser analisado.
[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 assim que todos os dados no buffer atual forem consumidos. Se for falso, pare de analisar no final do buffer inicial.

Próximo

WEAVE_ERROR Next(
  void
)

Avanços doTLVReader objeto para o próximo TLV elemento a ser lido.

Os Próximo () as posições do método do objecto leitor no elemento seguinte, em um TLV codificando que reside no mesmo contexto de contenção. Em particular, se o leitor está posicionado ao nível mais externa de uma TLV codificação, chamando Próximo () irá avançar o leitor para o próximo, mais alto elemento. Se o leitor está posicionado dentro de um TLV elemento de recipiente (uma estrutura, matriz ou caminho), chamando Próximo () irá avançar o leitor para o próximo elemento de membro do recipiente.

Desde Próximo () constrange leitor de movimento para o contexto de contenção corrente, chamando Próximo () quando o leitor está posicionado sobre um elemento de recipiente irá avançar ao longo do recipiente, ignorando os seus elementos de membro (e os membros de quaisquer recipientes aninhados) até que atinge o primeiro elemento após o contêiner.

Quando não há mais elementos dentro de um contexto de confinamento, a seguinte () método retornará uma WEAVE_END_OF_TLV erro 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 o subjacente TLV codificando terminada prematuramente.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Se o leitor encontrou um inválido ou não suportado TLV tipo de elemento.
WEAVE_ERROR_INVALID_TLV_TAG
Se o leitor encontrou um TLV tag em um contexto inválido.
WEAVE_ERROR_UNKNOWN_IMPLICIT_TLV_TAG
Se o leitor encontrou um implicitamente codificado TLV tag para o qual o correspondente ID de perfil é desconhecida.
other
Outros códigos de tecer ou de erro plataforma devolvidos pela configurado GetNextBuffer () função. Só é possível quando GetNextBuffer não é NULL.

Próximo

WEAVE_ERROR Next(
  TLVType expectedType,
  uint64_t expectedTag
)

Avanços doTLVReader objeto para o próximo TLV elemento a ser lido, afirmando o tipo ea marca do novo elemento.

O Next (TLVType expectedType, uint64_t expectedTag) método é um método de conveniência que tem o mesmo comportamento como Next () , mas também verifica se o tipo ea marca do novo TLV elemento correspondem os 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 coincide com o valor da expectedType argumento.
WEAVE_ERROR_UNEXPECTED_TLV_ELEMENT
Se o tag associado com o novo elemento não coincide com o valor da expectedTag argumento.
WEAVE_ERROR_TLV_UNDERRUN
Se o subjacente TLV codificando terminada prematuramente.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Se o leitor encontrou um inválido ou não suportado TLV tipo de elemento.
WEAVE_ERROR_INVALID_TLV_TAG
Se o leitor encontrou um TLV tag em um contexto inválido.
other
Outros códigos de tecer ou de erro plataforma devolvidos pela configurado GetNextBuffer () função. Só é possível quando GetNextBuffer não é NULL.

OpenContainer

WEAVE_ERROR OpenContainer(
  TLVReader & containerReader
)

Inicializa uma novaTLVReader objeto para ler os membros de um TLV elemento recipiente.

O OpenContainer () método inicializa uma novaTLVReader objecto para a leitura dos elementos de membro de uma TLV recipiente (uma estrutura, de matriz ou de caminho). Quando OpenContainer () é chamado, o actualTLVReader objecto tem de ser posicionado no elemento de recipiente 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. Este leitor é conhecido como o leitor recipiente enquanto o leitor sobre a qual OpenContainer () é chamado é conhecido como o leitor-mãe.

Quando os OpenContainer () método retorna, o leitor recipiente é posicionado imediatamente antes do primeiro membro do recipiente. Chamando Next () no leitor recipiente irá avançar através dos membros da coleção até o fim é alcançado, altura em que o leitor irá 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 tiver terminado de usar o leitor recipiente que deve fechá-lo chamando CloseContainer () no leitor pai, passando o leitor recipiente 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 umTLVReader objeto 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 oTLVReader objeto para imediatamente após a corrente TLV elemento.

Os Ir () as posições do método do objecto leitor imediatamente após a corrente TLV elemento, de tal modo que uma chamada subsequente a seguir () irá avançar o leitor para o elemento seguinte. Como Next () , se o leitor está posicionado em um elemento de recipiente no momento da chamada, os membros do recipiente será ignorado. 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 o subjacente TLV codificando terminada prematuramente.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Se o leitor encontrou um inválido ou não suportado TLV tipo de elemento.
WEAVE_ERROR_INVALID_TLV_TAG
Se o leitor encontrou um TLV tag em um contexto inválido.
other
Outros códigos de tecer ou de erro plataforma devolvidos pela configurado GetNextBuffer () função. Só é possível quando GetNextBuffer não é NULL.

VerifyEndOfContainer

WEAVE_ERROR VerifyEndOfContainer(
  void
)

Verifica se o objecto TVLReader é no final de um TLV recipiente.

Os VerifyEndOfContainer () verifica método que não há mais TLV elementos a ser lidos dentro da corrente TLV recipiente. Este é um método de conveniência que é equivalente a chamar Next () e verificação de um valor de retorno de WEAVE_END_OF_TLV.

Detalhes
Valores Retornados
WEAVE_NO_ERROR
Se não há mais TLV elementos para ser lido.
WEAVE_ERROR_UNEXPECTED_TLV_ELEMENT
Se outro TLV elemento foi encontrado na coleção.
WEAVE_ERROR_TLV_UNDERRUN
Se o subjacente TLV codificando terminada prematuramente.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Se o leitor encontrou um inválido ou não suportado TLV tipo de elemento.
WEAVE_ERROR_INVALID_TLV_TAG
Se o leitor encontrou um TLV tag em um contexto inválido.
other
Outros códigos de tecer ou de erro plataforma devolvidos pela configurado GetNextBuffer () função. Só é possível quando GetNextBuffer não é 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
)