nl::Weave::TLV::TLVWriter

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

Fornece um codificador com eficiência de memória para gravar dados no formato TLV do Weave.

Resumo

O TLVWriter implementa um codificador somente de encaminhamento no estilo de stream para dados TLV do Weave. Os aplicativos gravam dados em uma codificação chamando um dos métodos Put() do gravador, passando informações de tag e valor associadas conforme necessário. Da mesma forma, os aplicativos podem codificar tipos de contêiner TLV (estruturas, matrizes ou caminhos) chamando os métodos OpenContainer() ou EnterContainer() do gravador.

Um objeto TLVWriter pode gravar dados diretamente em um buffer de saída fixo ou em uma cadeia de um ou mais objetos PackageBuffer. Além disso, os aplicativos podem fornecer as próprias funções GetNewBuffer e FinalizeBuffer para direcionar a saída a um destino arbitrário, como um soquete ou uma fila de eventos.

Herança

Subclasses conhecidas diretas: nl::Weave::TLV::CircularTLVWriter

Tipos protegidos

@72{
  kEndOfContainerMarkerSize = 1
}
enum

Tipos públicos

FinalizeBufferFunct)(TLVWriter &writer, uintptr_t bufHandle, uint8_t *bufStart, uint32_t bufLen) WEAVE_ERROR(*
Uma função usada para realizar a finalização da saída de um objeto TLVWriter.
GetNewBufferFunct)(TLVWriter &writer, uintptr_t &bufHandle, uint8_t *&bufStart, uint32_t &bufLen) WEAVE_ERROR(*
Uma função que fornece um novo espaço de buffer de saída para um TLVWriter.

Atributos públicos

AppData
void *
Um campo de ponteiro que pode ser usado para dados específicos do aplicativo.
FinalizeBuffer
Um ponteiro para uma função que será chamada quando o TLVWriter for finalizado.
GetNewBuffer
Um ponteiro para uma função que fornecerá um novo espaço de buffer de saída para um TLVWriter.
ImplicitProfileId
uint32_t
O ID do perfil das tags que devem ser codificadas de forma implícita.

Atributos protegidos

mBufHandle
uintptr_t
mBufStart
uint8_t *
mContainerType
mLenWritten
uint32_t
mMaxLen
uint32_t
mRemainingLen
uint32_t
mWritePoint
uint8_t *

Funções públicas

CloseContainer(TLVWriter & containerWriter)
Completa a gravação de um contêiner TLV após uma chamada para OpenContainer().
ContinuePutBytes(const uint8_t *buf, uint32_t len)
Codifica um valor de string de bytes TLV.
CopyContainer(TLVReader & container)
Copia um elemento de contêiner TLV do objeto TLVReader.
CopyContainer(uint64_t tag, TLVReader & container)
Codifica um elemento de contêiner TLV de um conjunto pré-codificado de elementos de membro.
CopyContainer(uint64_t tag, const uint8_t *encodedContainer, uint16_t encodedContainerLen)
Codifica um elemento de contêiner TLV que contém elementos de um contêiner pré-codificado.
CopyElement(TLVReader & reader)
Copia um elemento TLV de um objeto de leitor para o gravador.
CopyElement(uint64_t tag, TLVReader & reader)
EndContainer(TLVType outerContainerType)
Completa a codificação de um elemento de contêiner TLV.
Finalize(void)
Conclua a gravação de uma codificação TLV.
GetContainerType(void) const
Retorna o tipo de contêiner em que TLVWriter está gravando no momento.
GetLengthWritten(void)
uint32_t
Retorna o número total de bytes gravados desde a inicialização do gravador.
Init(uint8_t *buf, uint32_t maxLen)
void
Inicializa um objeto TLVWriter para gravar em um único buffer de saída.
Init(PacketBuffer *buf, uint32_t maxLen)
void
Inicializa um objeto TLVWriter para gravar em um único PackageBuffer.
Init(PacketBuffer *buf, uint32_t maxLen, bool allowDiscontiguousBuffers)
void
Inicializa um objeto TLVWriter para gravar em um ou mais PackageBuffers.
InitMalloced(uint8_t *& outBuf, uint32_t initialBufSize, uint32_t maxLen)
void
Inicializa um objeto TLVWriter para gravar em um buffer dinâmico.
OpenContainer(uint64_t tag, TLVType containerType, TLVWriter & containerWriter)
Inicializa um novo objeto TLVWriter para gravar os membros de um elemento de contêiner TLV.
Put(uint64_t tag, int8_t v)
Codifica um valor inteiro com assinatura TLV.
Put(uint64_t tag, int8_t v, bool preserveSize)
Codifica um valor inteiro com assinatura TLV.
Put(uint64_t tag, int16_t v)
Put(uint64_t tag, int16_t v, bool preserveSize)
Put(uint64_t tag, int32_t v)
Put(uint64_t tag, int32_t v, bool preserveSize)
Put(uint64_t tag, int64_t v)
Put(uint64_t tag, int64_t v, bool preserveSize)
Put(uint64_t tag, uint8_t v)
Codifica um valor inteiro TLV sem assinatura.
Put(uint64_t tag, uint8_t v, bool preserveSize)
Codifica um valor inteiro TLV sem assinatura.
Put(uint64_t tag, uint16_t v)
Put(uint64_t tag, uint16_t v, bool preserveSize)
Put(uint64_t tag, uint32_t v)
Put(uint64_t tag, uint32_t v, bool preserveSize)
Put(uint64_t tag, uint64_t v)
Put(uint64_t tag, uint64_t v, bool preserveSize)
Put(uint64_t tag, float v)
Put(uint64_t tag, double v)
Codifica um valor de ponto flutuante TLV.
PutBoolean(uint64_t tag, bool v)
Codifica um valor booleano TLV.
PutBytes(uint64_t tag, const uint8_t *buf, uint32_t len)
Codifica um valor de string de bytes TLV.
PutNull(uint64_t tag)
Codifica um valor TLV nulo.
PutPreEncodedContainer(uint64_t tag, TLVType containerType, const uint8_t *data, uint32_t dataLen)
Codifica um elemento de contêiner TLV de um conjunto pré-codificado de elementos de membro.
PutString(uint64_t tag, const char *buf)
Codifica um valor de string TLV UTF8.
PutString(uint64_t tag, const char *buf, uint32_t len)
Codifica um valor de string TLV UTF8.
PutStringF(uint64_t tag, const char *fmt, ...)
Codifique a saída da string formatada de acordo com o formato no elemento TLV.
StartContainer(uint64_t tag, TLVType containerType, TLVType & outerContainerType)
Começa a codificar um novo elemento de contêiner TLV.
StartPutBytes(uint64_t tag, uint32_t totalLen)
Codifica uma string de bytes TLV em vários blocos.
VPutStringF(uint64_t tag, const char *fmt, va_list ap)
Codifique a saída da string formatada de acordo com o formato no elemento TLV.

Funções estáticas públicas

FinalizePacketBuffer(TLVWriter & writer, uintptr_t bufHandle, uint8_t *bufStart, uint32_t dataLen)
Uma implementação de uma função FinalizeBuffer TLVWriter para gravar em uma cadeia de PackageBuffers.
GetNewBuffer_Malloced(TLVWriter & writer, uintptr_t & bufHandle, uint8_t *& bufStart, uint32_t & bufLen)
Uma implementação de uma função TLVWriter GetNewBuffer para gravar em um buffer dinâmico.
GetNewPacketBuffer(TLVWriter & writer, uintptr_t & bufHandle, uint8_t *& bufStart, uint32_t & bufLen)
Uma implementação de uma função TLVWriter GetNewBuffer para gravar em uma cadeia de PackageBuffers.

Funções protegidas

IsCloseContainerReserved(void) const
bool
Determine se o contêiner deve reservar espaço para o símbolo CloseContainer no ponto de início / abertura do contêiner.
IsContainerOpen(void) const
bool
SetCloseContainerReserved(bool aCloseContainerReserved)
void
Defina se o contêiner precisa reservar o espaço para o símbolo CloseContainer no ponto de início / abertura do contêiner.
SetContainerOpen(bool aContainerOpen)
void
WriteData(const uint8_t *p, uint32_t len)
WriteElementHead(TLVElementType elemType, uint64_t tag, uint64_t lenOrVal)
WriteElementWithData(TLVType type, uint64_t tag, const uint8_t *data, uint32_t dataLen)

Tipos protegidos

@72

 @72

Tipos públicos

FinalizeBufferFunct

WEAVE_ERROR(* FinalizeBufferFunct)(TLVWriter &writer, uintptr_t bufHandle, uint8_t *bufStart, uint32_t bufLen)

Uma função usada para realizar a finalização da saída de um objeto TLVWriter.

As funções desse tipo são chamadas quando um método Finalize() do TLVWriter é chamado. Espera-se que a função execute qualquer limpeza ou finalização necessária relacionada ao consumo da saída do objeto gravador. Exemplos incluem a gravação do tamanho final da codificação ou o fechamento de um descritor de arquivo.

Detalhes
Parâmetros
[in] writer
Uma referência ao objeto TLVWriter que está sendo finalizado.
[in,out] bufHandle
Um valor de contexto uintptr_t que foi definido por chamadas anteriores para a função GetNewBuffer.
[in,out] bufStart
Um ponteiro para o início do buffer de saída atual (e final).
[in,out] bufLen
O número de bytes contidos no buffer apontado por bufStart.
Valores de retorno
WEAVE_NO_ERROR
Se a finalização foi concluída.
other
Outros códigos de erro específicos da plataforma ou do Weave, indicando que ocorreu um erro durante a finalização.

GetNewBufferFunct

WEAVE_ERROR(* GetNewBufferFunct)(TLVWriter &writer, uintptr_t &bufHandle, uint8_t *&bufStart, uint32_t &bufLen)

Uma função que fornece um novo espaço de buffer de saída para um TLVWriter.

As funções desse tipo são usadas para preparar um novo espaço de buffer para a gravação de um TLVWriter. Quando chamada, a função deve retornar um ponteiro para um local da memória onde novos dados devem ser gravados, junto com um comprimento máximo associado. A função pode fornecer espaço de gravação, seja alocando um novo buffer para conter os dados ou limpando dados gravados anteriormente de um buffer existente.

Detalhes
Parâmetros
[in] writer
Uma referência ao objeto TLVWriter que está solicitando um novo espaço de buffer.
[in,out] bufHandle
Uma referência a um valor uintptr_t que a função pode usar para armazenar dados de contexto entre chamadas. Esse valor é inicializado como 0 antes da primeira chamada.
[in,out] bufStart
Uma referência a um ponteiro de dados. Na entrada na função, bufStart aponta o início do buffer de saída atual. Na saída, espera-se que o bufStart aponte para o início do novo buffer de saída. O novo valor do ponteiro pode ser igual ao valor anterior (por exemplo, se a função copiou os dados existentes em outro lugar) ou pode apontar para uma localização totalmente nova.
[in,out] bufLen
Uma referência a um número inteiro não assinado. Na entrada na função, bufLen contém o número de byte do espaço unused do buffer atual. Na saída, espera-se que bufLen contenha o número máximo de bytes que podem ser gravados no novo buffer de saída.
Valores de retorno
WEAVE_NO_ERROR
Se a função foi capaz de fornecer mais espaço de buffer para o gravador.
other
Outros códigos de erro específicos da plataforma ou do Weave que indicam que ocorreu um erro que impede que a função produza mais espaço de buffer.

Atributos públicos

AppData

void * AppData

Um campo de ponteiro que pode ser usado para dados específicos do aplicativo.

FinalizeBuffer

FinalizeBufferFunct FinalizeBuffer

Um ponteiro para uma função que será chamada quando o TLVWriter for finalizado.

Um objeto TLVWriter chamará a função FinalizeBuffer sempre que seu método Finalize() for chamado. Os aplicativos podem definir o ponteiro da função em qualquer ponto antes de chamar Finalize(). Por padrão, o ponteiro é definido como NULL, o que faz com que o método Finalize() abandone a chamada da função.

Consulte a definição de tipo FinalizeBufferFunct para ver mais informações sobre a implementação de uma função FinalizeBuffer.

GetNewBuffer

GetNewBufferFunct GetNewBuffer

Um ponteiro para uma função que fornecerá um novo espaço de buffer de saída para um TLVWriter.

Um objeto TLVWriter chamará a função GetNewBuffer sempre que for feita uma tentativa de gravar dados que excedam o tamanho do buffer de saída atual. Se definido como NULL (o valor padrão), o gravador retornará um WEAVE_ERROR_NO_MEMORY se os dados de saída ultrapassarem o buffer atual.

GetNewBuffer pode ser definido por um aplicativo a qualquer momento, mas normalmente é definido quando o gravador é inicializado.

Consulte a definição de tipo GetNewBufferFunct para obter informações adicionais sobre a implementação de uma função GetNewBuffer.

ImplicitProfileId

uint32_t ImplicitProfileId

O ID do perfil das tags que devem ser codificadas de forma implícita.

Quando um gravador precisa codificar um novo elemento, se o ID do perfil da tag associada ao novo elemento corresponder ao valor do membro ImplicitProfileId, o gravador codificará a tag de forma implícita, omitindo o ID do perfil no processo.

Por padrão, a propriedade ImplicitProfileId é definida como kProfileIdNotspecified, que instrui o gravador a não emitir tags codificadas implicitamente. Os aplicativos podem definir ImplicitProfileId a qualquer momento para ativar as tags de codificação de forma implícita a partir do ponto atual da codificação. Geralmente, o ID de perfil apropriado a ser definido depende do contexto do aplicativo ou protocolo falado.

Atributos protegidos

mBufHandle

uintptr_t mBufHandle

mBufStart

uint8_t * mBufStart

mContainerType

TLVType mContainerType

mLenWritten

uint32_t mLenWritten

mMaxLen

uint32_t mMaxLen

mRemainingLen

uint32_t mRemainingLen

mWritePoint

uint8_t * mWritePoint

Funções públicas

CloseContainer

WEAVE_ERROR CloseContainer(
  TLVWriter & containerWriter
)

Completa a gravação de um contêiner TLV após uma chamada para OpenContainer().

O método CloseContainer() restaura o estado de um objeto TLVWriter pai após uma chamada para OpenContainer(). Para cada chamada para OpenContainer(), os aplicativos devem fazer uma chamada correspondente para CloseContainer(), transmitindo uma referência para o mesmo gravador de contêiner a ambos os métodos.

Quando CloseContainer() retorna, os aplicativos podem continuar usando o gravador pai para gravar outros elementos TLV que aparecem após o elemento do contêiner. Nesse ponto, o gravador do contêiner fornecido deve ser considerado "desinicializado" e não deve ser usado sem a reinicialização.

Detalhes
Parâmetros
[in] containerWriter
Uma referência ao objeto TLVWriter que foi fornecido ao método OpenContainer().
Valores de retorno
WEAVE_NO_ERROR
Se o método for bem-sucedido.
WEAVE_ERROR_INCORRECT_STATE
Se o gravador do contêiner fornecido não estiver no estado correto.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Se outro gravador de contêiner tiver sido aberto no gravador de contêiner fornecido e ainda não tiver sido fechado.
WEAVE_ERROR_BUFFER_TOO_SMALL
Se a conclusão da codificação do contêiner exceder o limite do número máximo de bytes especificado quando o gravador foi inicializado.
WEAVE_ERROR_NO_MEMORY
Se uma tentativa de alocação de um buffer de saída falhar devido à falta de memória.
other
Outros erros específicos do Weave ou da plataforma retornados pelas funções GetNewBuffer() ou FinalizeBuffer() configuradas.

ContinuePutBytes

WEAVE_ERROR ContinuePutBytes(
  const uint8_t *buf,
  uint32_t len
)

Codifica um valor de string de bytes TLV.

Isso precisa ser usado com StartPutBytes.

Detalhes
Parâmetros
[in] buf
Um ponteiro para um buffer contendo a string de bytes a ser codificada.
[in] len
O número de bytes a serem codificados.
Valores de retorno
WEAVE_NO_ERROR
Se o método for bem-sucedido.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Se um gravador de contêiner tiver sido aberto no gravador atual e ainda não tiver sido fechado.
WEAVE_ERROR_INVALID_TLV_TAG
Se o valor da tag especificada for inválido ou inadequado no contexto em que o valor está sendo gravado.
WEAVE_ERROR_BUFFER_TOO_SMALL
Se a gravação do valor exceder o limite do número máximo de bytes especificado quando o gravador foi inicializado.
WEAVE_ERROR_NO_MEMORY
Se uma tentativa de alocação de um buffer de saída falhar devido à falta de memória.
other
Outros erros específicos do Weave ou da plataforma retornados pelas funções GetNewBuffer() ou FinalizeBuffer() configuradas.

CopyContainer

WEAVE_ERROR CopyContainer(
  TLVReader & container
)

Copia um elemento de contêiner TLV do objeto TLVReader.

CopyContainer() codifica um novo elemento de contêiner TLV copiando um elemento de contêiner pré-codificado localizado na posição atual de um objeto TLVReader. O método grava todo o novo elemento de contêiner em uma chamada, copiando o tipo, a tag e os elementos do contêiner da codificação de origem. Quando o método retorna, o objeto gravador pode ser usado para gravar elementos TLV adicionais após o elemento do contêiner.

Detalhes
Parâmetros
[in] container
Uma referência a um objeto TLVReader que identifica o contêiner TLV pré-codificado a ser copiado.
Valores de retorno
WEAVE_NO_ERROR
Se o método for bem-sucedido.
WEAVE_ERROR_INCORRECT_STATE
Se o leitor fornecido não estiver posicionado em um elemento de contêiner.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Se um gravador de contêiner tiver sido aberto no gravador atual e ainda não tiver sido fechado.
WEAVE_ERROR_TLV_UNDERRUN
Se a codificação TLV subjacente associada ao leitor fornecido terminar prematuramente.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Se o leitor fornecido encontrou um tipo de elemento TLV inválido ou incompatível.
WEAVE_ERROR_INVALID_TLV_TAG
Se o leitor fornecido encontrou uma tag TLV em um contexto inválido ou se a tag associada ao contêiner de origem for inválida ou inadequada no contexto em que o novo contêiner está sendo gravado.
WEAVE_ERROR_BUFFER_TOO_SMALL
Se a gravação do valor exceder o limite do número máximo de bytes especificado quando o gravador foi inicializado.
WEAVE_ERROR_NO_MEMORY
Se uma tentativa de alocação de um buffer de saída falhar devido à falta de memória.
other
Outros erros específicos do Weave ou da plataforma retornados pelas funções GetNewBuffer() ou FinalizeBuffer() configuradas ou pela função GetNextBuffer() associada ao objeto do leitor.

CopyContainer

WEAVE_ERROR CopyContainer(
  uint64_t tag,
  TLVReader & container
)

Codifica um elemento de contêiner TLV de um conjunto pré-codificado de elementos de membro.

O método CopyContainer() codifica um novo elemento de contêiner TLV (uma estrutura, matriz ou caminho) contendo um conjunto de elementos de membro retirados de um objeto TLVReader. Quando o método é chamado, espera-se que o objeto de leitura fornecido seja posicionado em um elemento de contêiner TLV. O contêiner recém-codificado terá o mesmo tipo e membros que o contêiner de entrada. A tag do novo contêiner é especificada como um parâmetro de entrada.

Quando o método retorna, o objeto gravador pode ser usado para gravar elementos TLV adicionais após o elemento do contêiner.

Detalhes
Parâmetros
[in] tag
A tag TLV a ser codificada com o contêiner ou AnonymousTag se o contêiner precisar ser codificado sem uma tag. Os valores de tag precisam ser criados com uma das funções de definição de tag ProfileTag(), ContextTag() ou CommonTag().
[in] container
Uma referência a um objeto TLVReader que identifica um contêiner TLV pré-codificado com um tipo e membros que precisam ser copiados.
Valores de retorno
WEAVE_NO_ERROR
Se o método for bem-sucedido.
WEAVE_ERROR_INCORRECT_STATE
Se o leitor fornecido não estiver posicionado em um elemento de contêiner.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Se um gravador de contêiner tiver sido aberto no gravador atual e ainda não tiver sido fechado.
WEAVE_ERROR_TLV_UNDERRUN
Se a codificação TLV subjacente associada ao leitor fornecido terminar prematuramente.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Se o leitor fornecido encontrou um tipo de elemento TLV inválido ou incompatível.
WEAVE_ERROR_INVALID_TLV_TAG
Se o leitor fornecido encontrou uma tag TLV em um contexto inválido ou se a tag fornecida for inválida ou inadequada no contexto em que o novo contêiner está sendo gravado.
WEAVE_ERROR_BUFFER_TOO_SMALL
Se a gravação do valor exceder o limite do número máximo de bytes especificado quando o gravador foi inicializado.
WEAVE_ERROR_NO_MEMORY
Se uma tentativa de alocação de um buffer de saída falhar devido à falta de memória.
other
Outros erros específicos do Weave ou da plataforma retornados pelas funções GetNewBuffer() ou FinalizeBuffer() configuradas ou pela função GetNextBuffer() associada ao objeto do leitor.

CopyContainer

WEAVE_ERROR CopyContainer(
  uint64_t tag,
  const uint8_t *encodedContainer,
  uint16_t encodedContainerLen
)

Codifica um elemento de contêiner TLV que contém elementos de um contêiner pré-codificado.

O método CopyContainer() codifica um novo elemento de contêiner TLV (uma estrutura, matriz ou caminho) contendo um conjunto de elementos de membro retirados do conteúdo de um contêiner pré-codificado fornecido. Quando o método é chamado, os dados no buffer de entrada fornecido são analisados como um elemento de contêiner TLV. Um novo contêiner é gravado com o mesmo tipo e membros do contêiner de entrada. A tag do novo contêiner é especificada como um parâmetro de entrada.

Quando o método retorna, o objeto gravador pode ser usado para gravar elementos TLV adicionais após o elemento do contêiner.

Detalhes
Parâmetros
[in] tag
A tag TLV a ser codificada com o contêiner ou AnonymousTag se o contêiner precisar ser codificado sem uma tag. Os valores de tag precisam ser criados com uma das funções de definição de tag ProfileTag(), ContextTag() ou CommonTag().
[in] encodedContainer
Um buffer contendo um contêiner TLV pré-codificado com o tipo e os membros que precisam ser copiados.
[in] encodedContainerLen
O tamanho em bytes do contêiner pré-codificado.
Valores de retorno
WEAVE_NO_ERROR
Se o método for bem-sucedido.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Se um gravador de contêiner tiver sido aberto no gravador atual e ainda não tiver sido fechado.
WEAVE_ERROR_TLV_UNDERRUN
Se o contêiner codificado foi encerrado prematuramente.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Se o contêiner codificado continha um tipo de elemento TLV inválido ou incompatível.
WEAVE_ERROR_INVALID_TLV_TAG
Se o contêiner codificado continha uma tag TLV em um contexto inválido ou se a tag fornecida for inválida ou inadequada no contexto em que o novo contêiner está sendo gravado.
WEAVE_ERROR_BUFFER_TOO_SMALL
Se a gravação do valor exceder o limite do número máximo de bytes especificado quando o gravador foi inicializado.
WEAVE_ERROR_NO_MEMORY
Se uma tentativa de alocação de um buffer de saída falhar devido à falta de memória.
other
Outros erros específicos do Weave ou da plataforma retornados pelas funções GetNewBuffer() ou FinalizeBuffer() configuradas ou pela função GetNextBuffer() associada ao objeto do leitor.

CopyElement

WEAVE_ERROR CopyElement(
  TLVReader & reader
)

Copia um elemento TLV de um objeto de leitor para o gravador.

O método CopyElement() codifica um novo elemento TLV cujo tipo, tag e valor são obtidos de um objeto TLVReader. Quando o método é chamado, espera-se que o objeto leitor fornecido seja posicionado no elemento TLV de origem. O elemento recém-codificado terá o mesmo tipo, tag e conteúdo que o contêiner de entrada. Se o elemento fornecido for um contêiner TLV (estrutura, matriz ou caminho), todo o conteúdo do contêiner será copiado.

Detalhes
Parâmetros
[in] reader
Uma referência a um objeto TLVReader que identifica um elemento TLV pré-codificado que precisa ser copiado.
Valores de retorno
WEAVE_NO_ERROR
Se o método for bem-sucedido.
WEAVE_ERROR_INCORRECT_STATE
Se o leitor fornecido não estiver posicionado em um elemento.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Se um gravador de contêiner tiver sido aberto no gravador atual e ainda não tiver sido fechado.
WEAVE_ERROR_TLV_UNDERRUN
Se a codificação TLV subjacente associada ao leitor fornecido terminar prematuramente.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Se o leitor fornecido encontrou um tipo de elemento TLV inválido ou incompatível.
WEAVE_ERROR_INVALID_TLV_TAG
Se o leitor fornecido encontrou uma tag TLV em um contexto inválido ou se a tag fornecida for inválida ou inadequada no contexto em que o novo contêiner está sendo gravado.
WEAVE_ERROR_BUFFER_TOO_SMALL
Se a gravação do valor exceder o limite do número máximo de bytes especificado quando o gravador foi inicializado.
WEAVE_ERROR_NO_MEMORY
Se uma tentativa de alocação de um buffer de saída falhar devido à falta de memória.
other
Outros erros específicos do Weave ou da plataforma retornados pelas funções GetNewBuffer() ou FinalizeBuffer() configuradas ou pela função GetNextBuffer() associada ao objeto do leitor.

CopyElement

WEAVE_ERROR CopyElement(
  uint64_t tag,
  TLVReader & reader
)

EndContainer

WEAVE_ERROR EndContainer(
  TLVType outerContainerType
)

Completa a codificação de um elemento de contêiner TLV.

O método EndContainer() conclui a codificação de um elemento de contêiner TLV e restaura o estado de um objeto TLVWrite após uma chamada anterior para StartContainer(). Para cada chamada para StartContainer(), os aplicativos precisam fazer uma chamada correspondente para EndContainer(), transmitindo o valor de TLVType retornado pela chamada StartContainer(). Quando EndContainer() retorna, o objeto gravador pode ser usado para gravar outros elementos TLV que seguem o elemento do contêiner.

Detalhes
Parâmetros
[in] outerContainerType
O valor de TLVType retornado pelo método StartContainer().
Valores de retorno
WEAVE_NO_ERROR
Se o método for bem-sucedido.
WEAVE_ERROR_INCORRECT_STATE
Se uma chamada StartContainer() correspondente não tiver sido feita.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Se um gravador de contêiner tiver sido aberto no gravador atual e ainda não tiver sido fechado.
WEAVE_ERROR_BUFFER_TOO_SMALL
Se a gravação do valor exceder o limite do número máximo de bytes especificado quando o gravador foi inicializado.
WEAVE_ERROR_NO_MEMORY
Se uma tentativa de alocação de um buffer de saída falhar devido à falta de memória.
other
Outros erros específicos do Weave ou da plataforma retornados pelas funções GetNewBuffer() ou FinalizeBuffer() configuradas.

Finalizar

WEAVE_ERROR Finalize(
  void
)

Conclua a gravação de uma codificação TLV.

O método Finalize() completa o processo de gravação de uma codificação TLV no buffer de saída. O método precisa ser chamado pelo aplicativo antes de usar o conteúdo do buffer. Finalize() só pode ser chamado quando não há gravadores de contêiner abertos para o gravador atual. Consulte OpenContainer().

Detalhes
Valores de retorno
WEAVE_NO_ERROR
Se a codificação foi finalizada com sucesso.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Se um gravador de contêiner tiver sido aberto no gravador atual e ainda não tiver sido fechado.
other
outros erros específicos do Weave ou da plataforma retornados pela função FinalizeBuffer() configurada.

GetContainerType

TLVType GetContainerType(
  void
) const 

Retorna o tipo de contêiner em que TLVWriter está gravando no momento.

O método GetContainerType() retorna o tipo de contêiner TLV em que o TLVWriter está gravando no momento. Se TLVWriter não está gravando elementos dentro de um contêiner (ou seja, gravando no nível mais externo de uma codificação), o método retorna kTLVType_Notspecified.

Detalhes
Retornos
O TLVType do contêiner atual ou kTLVType_Notspecified, se TLVWriter não está gravando elementos em um contêiner.

GetLengthWritten

uint32_t GetLengthWritten(
  void
)

Retorna o número total de bytes gravados desde a inicialização do gravador.

Detalhes
Retornos
Número total de bytes gravados desde a inicialização do gravador.

Init

void Init(
  uint8_t *buf,
  uint32_t maxLen
)

Inicializa um objeto TLVWriter para gravar em um único buffer de saída.

Detalhes
Parâmetros
[in] buf
Um ponteiro para o buffer em que TLV precisa ser gravado.
[in] maxLen
O número máximo de bytes que precisam ser gravados no buffer de saída.

Init

void Init(
  PacketBuffer *buf,
  uint32_t maxLen
)

Inicializa um objeto TLVWriter para gravar em um único PackageBuffer.

A gravação começa imediatamente após o último byte dos dados existentes no buffer fornecido.

Detalhes
Parâmetros
[in] buf
Um ponteiro para um PackageBuffer em que TLV precisa ser gravado.
[in] maxLen
O número máximo de bytes que precisam ser gravados no buffer de saída.

Init

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

Inicializa um objeto TLVWriter para gravar em um ou mais PackageBuffers.

A gravação começa imediatamente após o último byte dos dados existentes no buffer especificado. Se allowDiscontiguousBuffers for verdadeiro, outros PackageBuffers serão alocados e encadeados ao buffer fornecido conforme necessário para acomodar a quantidade de dados gravados. Se o buffer de saída especificado já for o líder de uma cadeia de buffers, a saída será gravada nos buffers subsequentes na cadeia antes que novos buffers sejam alocados.

Detalhes
Parâmetros
[in] buf
Um ponteiro para um PackageBuffer em que os dados TLV precisam ser gravados.
[in] maxLen
O número máximo de bytes que precisam ser gravados nos buffers de saída.
[in] allowDiscontiguousBuffers
Se verdadeiro, grava dados em uma cadeia de pacotesBuffers, alocando novos buffers conforme necessário para armazenar os dados gravados. Se falso, a gravação falhará com WEAVE_ERROR_BUFFER_TOO_small se os dados gravados excederem o espaço disponível no buffer de saída inicial.

InitMalloced

void InitMalloced(
  uint8_t *& outBuf,
  uint32_t initialBufSize,
  uint32_t maxLen
)

Inicializa um objeto TLVWriter para gravar em um buffer dinâmico.

Detalhes
Parâmetros
[in] buf
Uma referência a um ponteiro que receberá o buffer alocado.
[in] maxLen
O número máximo de bytes que precisam ser gravados no buffer de saída.
[in] initialBufSize
O número inicial de bytes que precisam ser alocados para o buffer.

OpenContainer

WEAVE_ERROR OpenContainer(
  uint64_t tag,
  TLVType containerType,
  TLVWriter & containerWriter
)

Inicializa um novo objeto TLVWriter para gravar os membros de um elemento de contêiner TLV.

O método OpenContainer() é usado para gravar elementos de contêiner TLV (estrutura, matrizes ou caminhos) em uma codificação. O método usa o tipo e a tag (se houver) do novo contêiner e uma referência a um novo objeto gravador (o criador de contêiner) que será inicializado com a finalidade de gravar os elementos do contêiner. Os aplicativos gravam os membros do novo contêiner usando o gravador de contêiner e, em seguida, chamam CloseContainer() para concluir a codificação.

Enquanto o gravador do contêiner estiver aberto, os aplicativos não poderão fazer chamadas ou alterar o estado do gravador pai.

O gravador do contêiner herda várias propriedades de configuração do gravador pai. São eles:

  • O ID do perfil implícito (ImplicitProfileId)
  • O ponteiro de dados do aplicativo (AppData)
  • Os ponteiros das funções GetNewBuffer e FinalizeBuffer

Detalhes
Parâmetros
[in] tag
A tag TLV a ser codificada com o contêiner ou AnonymousTag se o contêiner precisar ser codificado sem uma tag. Os valores de tag precisam ser criados com uma das funções de definição de tag ProfileTag(), ContextTag() ou CommonTag().
[in] containerType
O tipo de contêiner a ser codificado. Precisa ser kTLVType_Structure, kTLVType_Array ou kTLVType_Path.
[out] containerWriter
Uma referência a um objeto TLVWriter que será inicializado para gravar os membros do novo elemento de contêiner. Todos os dados associados ao objeto fornecido serão substituídos.
Valores de retorno
WEAVE_NO_ERROR
Se o método for bem-sucedido.
WEAVE_ERROR_WRONG_TLV_TYPE
Se o valor especificado para containerType estiver incorreto.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Se um gravador de contêiner tiver sido aberto no gravador atual e ainda não tiver sido fechado.
WEAVE_ERROR_INVALID_TLV_TAG
Se o valor da tag especificada for inválido ou inadequado no contexto em que o valor está sendo gravado.
WEAVE_ERROR_BUFFER_TOO_SMALL
Se a gravação do valor exceder o limite do número máximo de bytes especificado quando o gravador foi inicializado.
WEAVE_ERROR_NO_MEMORY
Se uma tentativa de alocação de um buffer de saída falhar devido à falta de memória.
other
Outros erros específicos do Weave ou da plataforma retornados pelas funções GetNewBuffer() ou FinalizeBuffer() configuradas.

Put

WEAVE_ERROR Put(
  uint64_t tag,
  int8_t v
)

Codifica um valor inteiro com assinatura TLV.

Essa é uma função de membro sobrecarregada, fornecida para conveniência. Ela difere da função acima apenas pelo(s) argumento(s) que ela aceita.

Detalhes
Parâmetros
[in] tag
A tag TLV a ser codificada com o valor ou AnonymousTag se o valor precisar ser codificado sem uma tag. Os valores de tag precisam ser criados com uma das funções de definição de tag ProfileTag(), ContextTag() ou CommonTag().
[in] v
O valor a ser codificado.
Valores de retorno
WEAVE_NO_ERROR
Se o método for bem-sucedido.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Se um gravador de contêiner tiver sido aberto no gravador atual e ainda não tiver sido fechado.
WEAVE_ERROR_INVALID_TLV_TAG
Se o valor da tag especificada for inválido ou inadequado no contexto em que o valor está sendo gravado.
WEAVE_ERROR_BUFFER_TOO_SMALL
Se a gravação do valor exceder o limite do número máximo de bytes especificado quando o gravador foi inicializado.
WEAVE_ERROR_NO_MEMORY
Se uma tentativa de alocação de um buffer de saída falhar devido à falta de memória.
other
Outros erros específicos do Weave ou da plataforma retornados pelas funções GetNewBuffer() ou FinalizeBuffer() configuradas.

Put

WEAVE_ERROR Put(
  uint64_t tag,
  int8_t v,
  bool preserveSize
)

Codifica um valor inteiro com assinatura TLV.

Essa é uma função de membro sobrecarregada, fornecida para conveniência. Ela difere da função acima apenas pelo(s) argumento(s) que ela aceita.

Detalhes
Parâmetros
[in] tag
A tag TLV a ser codificada com o valor ou AnonymousTag se o valor precisar ser codificado sem uma tag. Os valores de tag precisam ser criados com uma das funções de definição de tag ProfileTag(), ContextTag() ou CommonTag().
[in] v
O valor a ser codificado.
[in] preserveSize
Verdadeiro se o valor precisar ser codificado no mesmo número de bytes que o tipo de entrada. Falso se o valor precisar ser codificado no número mínimo de bytes necessários para representar o valor. Observação: é altamente recomendável que os aplicativos definam esse parâmetro como "false".
Valores de retorno
WEAVE_NO_ERROR
Se o método for bem-sucedido.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Se um gravador de contêiner tiver sido aberto no gravador atual e ainda não tiver sido fechado.
WEAVE_ERROR_INVALID_TLV_TAG
Se o valor da tag especificada for inválido ou inadequado no contexto em que o valor está sendo gravado.
WEAVE_ERROR_BUFFER_TOO_SMALL
Se a gravação do valor exceder o limite do número máximo de bytes especificado quando o gravador foi inicializado.
WEAVE_ERROR_NO_MEMORY
Se uma tentativa de alocação de um buffer de saída falhar devido à falta de memória.
other
Outros erros específicos do Weave ou da plataforma retornados pelas funções GetNewBuffer() ou FinalizeBuffer() configuradas.

Put

WEAVE_ERROR Put(
  uint64_t tag,
  int16_t v
)

Put

WEAVE_ERROR Put(
  uint64_t tag,
  int16_t v,
  bool preserveSize
)

Put

WEAVE_ERROR Put(
  uint64_t tag,
  int32_t v
)

Put

WEAVE_ERROR Put(
  uint64_t tag,
  int32_t v,
  bool preserveSize
)

Put

WEAVE_ERROR Put(
  uint64_t tag,
  int64_t v
)

Put

WEAVE_ERROR Put(
  uint64_t tag,
  int64_t v,
  bool preserveSize
)

Put

WEAVE_ERROR Put(
  uint64_t tag,
  uint8_t v
)

Codifica um valor inteiro TLV sem assinatura.

Essa é uma função de membro sobrecarregada, fornecida para conveniência. Ela difere da função acima apenas pelo(s) argumento(s) que ela aceita.

Detalhes
Parâmetros
[in] tag
A tag TLV a ser codificada com o valor ou AnonymousTag se o valor precisar ser codificado sem uma tag. Os valores de tag precisam ser criados com uma das funções de definição de tag ProfileTag(), ContextTag() ou CommonTag().
[in] v
O valor a ser codificado.
Valores de retorno
WEAVE_NO_ERROR
Se o método for bem-sucedido.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Se um gravador de contêiner tiver sido aberto no gravador atual e ainda não tiver sido fechado.
WEAVE_ERROR_INVALID_TLV_TAG
Se o valor da tag especificada for inválido ou inadequado no contexto em que o valor está sendo gravado.
WEAVE_ERROR_BUFFER_TOO_SMALL
Se a gravação do valor exceder o limite do número máximo de bytes especificado quando o gravador foi inicializado.
WEAVE_ERROR_NO_MEMORY
Se uma tentativa de alocação de um buffer de saída falhar devido à falta de memória.
other
Outros erros específicos do Weave ou da plataforma retornados pelas funções GetNewBuffer() ou FinalizeBuffer() configuradas.

Put

WEAVE_ERROR Put(
  uint64_t tag,
  uint8_t v,
  bool preserveSize
)

Codifica um valor inteiro TLV sem assinatura.

Essa é uma função de membro sobrecarregada, fornecida para conveniência. Ela difere da função acima apenas pelo(s) argumento(s) que ela aceita.

Detalhes
Parâmetros
[in] tag
A tag TLV a ser codificada com o valor ou AnonymousTag se o valor precisar ser codificado sem uma tag. Os valores de tag precisam ser criados com uma das funções de definição de tag ProfileTag(), ContextTag() ou CommonTag().
[in] v
O valor a ser codificado.
[in] preserveSize
Verdadeiro se o valor precisar ser codificado no mesmo número de bytes que o tipo de entrada. Falso se o valor precisar ser codificado no número mínimo de bytes necessários para representar o valor. Observação: é altamente recomendável que os aplicativos definam esse parâmetro como "false".
Valores de retorno
WEAVE_NO_ERROR
Se o método for bem-sucedido.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Se um gravador de contêiner tiver sido aberto no gravador atual e ainda não tiver sido fechado.
WEAVE_ERROR_INVALID_TLV_TAG
Se o valor da tag especificada for inválido ou inadequado no contexto em que o valor está sendo gravado.
WEAVE_ERROR_BUFFER_TOO_SMALL
Se a gravação do valor exceder o limite do número máximo de bytes especificado quando o gravador foi inicializado.
WEAVE_ERROR_NO_MEMORY
Se uma tentativa de alocação de um buffer de saída falhar devido à falta de memória.
other
Outros erros específicos do Weave ou da plataforma retornados pelas funções GetNewBuffer() ou FinalizeBuffer() configuradas.

Put

WEAVE_ERROR Put(
  uint64_t tag,
  uint16_t v
)

Put

WEAVE_ERROR Put(
  uint64_t tag,
  uint16_t v,
  bool preserveSize
)

Put

WEAVE_ERROR Put(
  uint64_t tag,
  uint32_t v
)

Put

WEAVE_ERROR Put(
  uint64_t tag,
  uint32_t v,
  bool preserveSize
)

Put

WEAVE_ERROR Put(
  uint64_t tag,
  uint64_t v
)

Put

WEAVE_ERROR Put(
  uint64_t tag,
  uint64_t v,
  bool preserveSize
)

Put

WEAVE_ERROR Put(
  uint64_t tag,
  float v
)

Put

WEAVE_ERROR Put(
  uint64_t tag,
  double v
)

Codifica um valor de ponto flutuante TLV.

Essa é uma função de membro sobrecarregada, fornecida para conveniência. Ela difere da função acima apenas pelo(s) argumento(s) que ela aceita.

Detalhes
Parâmetros
[in] tag
A tag TLV a ser codificada com o valor ou AnonymousTag se o valor precisar ser codificado sem uma tag. Os valores de tag precisam ser criados com uma das funções de definição de tag ProfileTag(), ContextTag() ou CommonTag().
[in] v
O valor a ser codificado.
Valores de retorno
WEAVE_NO_ERROR
Se o método for bem-sucedido.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Se um gravador de contêiner tiver sido aberto no gravador atual e ainda não tiver sido fechado.
WEAVE_ERROR_INVALID_TLV_TAG
Se o valor da tag especificada for inválido ou inadequado no contexto em que o valor está sendo gravado.
WEAVE_ERROR_BUFFER_TOO_SMALL
Se a gravação do valor exceder o limite do número máximo de bytes especificado quando o gravador foi inicializado.
WEAVE_ERROR_NO_MEMORY
Se uma tentativa de alocação de um buffer de saída falhar devido à falta de memória.
other
Outros erros específicos do Weave ou da plataforma retornados pelas funções GetNewBuffer() ou FinalizeBuffer() configuradas.

PutBoolean

WEAVE_ERROR PutBoolean(
  uint64_t tag,
  bool v
)

Codifica um valor booleano TLV.

Detalhes
Parâmetros
[in] tag
A tag TLV a ser codificada com o valor ou AnonymousTag se o valor precisar ser codificado sem uma tag. Os valores de tag precisam ser criados com uma das funções de definição de tag ProfileTag(), ContextTag() ou CommonTag().
[in] v
O valor a ser codificado.
Valores de retorno
WEAVE_NO_ERROR
Se o método for bem-sucedido.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Se um gravador de contêiner tiver sido aberto no gravador atual e ainda não tiver sido fechado.
WEAVE_ERROR_INVALID_TLV_TAG
Se o valor da tag especificada for inválido ou inadequado no contexto em que o valor está sendo gravado.
WEAVE_ERROR_BUFFER_TOO_SMALL
Se a gravação do valor exceder o limite do número máximo de bytes especificado quando o gravador foi inicializado.
WEAVE_ERROR_NO_MEMORY
Se uma tentativa de alocação de um buffer de saída falhar devido à falta de memória.
other
Outros erros específicos do Weave ou da plataforma retornados pelas funções GetNewBuffer() ou FinalizeBuffer() configuradas.

PutBytes

WEAVE_ERROR PutBytes(
  uint64_t tag,
  const uint8_t *buf,
  uint32_t len
)

Codifica um valor de string de bytes TLV.

Detalhes
Parâmetros
[in] tag
A tag TLV a ser codificada com o valor ou AnonymousTag se o valor precisar ser codificado sem uma tag. Os valores de tag precisam ser criados com uma das funções de definição de tag ProfileTag(), ContextTag() ou CommonTag().
[in] buf
Um ponteiro para um buffer contendo a string de bytes a ser codificada.
[in] len
O número de bytes a serem codificados.
Valores de retorno
WEAVE_NO_ERROR
Se o método for bem-sucedido.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Se um gravador de contêiner tiver sido aberto no gravador atual e ainda não tiver sido fechado.
WEAVE_ERROR_INVALID_TLV_TAG
Se o valor da tag especificada for inválido ou inadequado no contexto em que o valor está sendo gravado.
WEAVE_ERROR_BUFFER_TOO_SMALL
Se a gravação do valor exceder o limite do número máximo de bytes especificado quando o gravador foi inicializado.
WEAVE_ERROR_NO_MEMORY
Se uma tentativa de alocação de um buffer de saída falhar devido à falta de memória.
other
Outros erros específicos do Weave ou da plataforma retornados pelas funções GetNewBuffer() ou FinalizeBuffer() configuradas.

PutNull

WEAVE_ERROR PutNull(
  uint64_t tag
)

Codifica um valor TLV nulo.

Detalhes
Parâmetros
[in] tag
A tag TLV a ser codificada com o valor ou AnonymousTag se o valor precisar ser codificado sem uma tag. Os valores de tag precisam ser criados com uma das funções de definição de tag ProfileTag(), ContextTag() ou CommonTag().
Valores de retorno
WEAVE_NO_ERROR
Se o método for bem-sucedido.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Se um gravador de contêiner tiver sido aberto no gravador atual e ainda não tiver sido fechado.
WEAVE_ERROR_INVALID_TLV_TAG
Se o valor da tag especificada for inválido ou inadequado no contexto em que o valor está sendo gravado.
WEAVE_ERROR_BUFFER_TOO_SMALL
Se a gravação do valor exceder o limite do número máximo de bytes especificado quando o gravador foi inicializado.
WEAVE_ERROR_NO_MEMORY
Se uma tentativa de alocação de um buffer de saída falhar devido à falta de memória.
other
Outros erros específicos do Weave ou da plataforma retornados pelas funções GetNewBuffer() ou FinalizeBuffer() configuradas.

PutPreEncodedContainer

WEAVE_ERROR PutPreEncodedContainer(
  uint64_t tag,
  TLVType containerType,
  const uint8_t *data,
  uint32_t dataLen
)

Codifica um elemento de contêiner TLV de um conjunto pré-codificado de elementos de membro.

O método PutPreEncodedContainer() codifica um novo elemento de contêiner TLV (uma estrutura, matriz ou caminho) contendo um conjunto de elementos de membro retirados de um buffer pré-codificado. O buffer de entrada precisa conter zero ou mais elementos TLV codificados, com tags que estejam em conformidade com as regras associadas ao tipo de contêiner especificado. Por exemplo, os membros da estrutura precisam ter tags, mas os membros da matriz não precisam.

O método codifica todo o elemento de contêiner em uma chamada. Quando PutPreEncodedContainer() retorna, o objeto gravador pode ser usado para gravar outros elementos TLV após o elemento do contêiner.

Detalhes
Parâmetros
[in] tag
A tag TLV a ser codificada com o contêiner ou AnonymousTag se o contêiner precisar ser codificado sem uma tag. Os valores de tag precisam ser criados com uma das funções de definição de tag ProfileTag(), ContextTag() ou CommonTag().
[in] containerType
O tipo de contêiner a ser codificado. Precisa ser kTLVType_Structure, kTLVType_Array ou kTLVType_Path.
[in] data
Um ponteiro para um buffer que contém zero dos elementos TLV mais codificados que se tornarão membros do novo contêiner.
[in] dataLen
O número de bytes no buffer data.
Valores de retorno
WEAVE_NO_ERROR
Se o método for bem-sucedido.
WEAVE_ERROR_WRONG_TLV_TYPE
Se o valor especificado para containerType estiver incorreto.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Se um gravador de contêiner tiver sido aberto no gravador atual e ainda não tiver sido fechado.
WEAVE_ERROR_INVALID_TLV_TAG
Se o valor da tag especificada for inválido ou inadequado no contexto em que o valor está sendo gravado.
WEAVE_ERROR_BUFFER_TOO_SMALL
Se a gravação do valor exceder o limite do número máximo de bytes especificado quando o gravador foi inicializado.
WEAVE_ERROR_NO_MEMORY
Se uma tentativa de alocação de um buffer de saída falhar devido à falta de memória.
other
Outros erros específicos do Weave ou da plataforma retornados pelas funções GetNewBuffer() ou FinalizeBuffer() configuradas.

PutString

WEAVE_ERROR PutString(
  uint64_t tag,
  const char *buf
)

Codifica um valor de string TLV UTF8.

Detalhes
Parâmetros
[in] tag
A tag TLV a ser codificada com o valor ou AnonymousTag se o valor precisar ser codificado sem uma tag. Os valores de tag precisam ser criados com uma das funções de definição de tag ProfileTag(), ContextTag() ou CommonTag().
[in] buf
Um ponteiro para a string UTF-8 terminada em nulo a ser codificada.
Valores de retorno
WEAVE_NO_ERROR
Se o método for bem-sucedido.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Se um gravador de contêiner tiver sido aberto no gravador atual e ainda não tiver sido fechado.
WEAVE_ERROR_INVALID_TLV_TAG
Se o valor da tag especificada for inválido ou inadequado no contexto em que o valor está sendo gravado.
WEAVE_ERROR_BUFFER_TOO_SMALL
Se a gravação do valor exceder o limite do número máximo de bytes especificado quando o gravador foi inicializado.
WEAVE_ERROR_NO_MEMORY
Se uma tentativa de alocação de um buffer de saída falhar devido à falta de memória.
other
Outros erros específicos do Weave ou da plataforma retornados pelas funções GetNewBuffer() ou FinalizeBuffer() configuradas.

PutString

WEAVE_ERROR PutString(
  uint64_t tag,
  const char *buf,
  uint32_t len
)

Codifica um valor de string TLV UTF8.

Detalhes
Parâmetros
[in] tag
A tag TLV a ser codificada com o valor ou AnonymousTag se o valor precisar ser codificado sem uma tag. Os valores de tag precisam ser criados com uma das funções de definição de tag ProfileTag(), ContextTag() ou CommonTag().
[in] buf
Um ponteiro para a string UTF-8 a ser codificada.
[in] len
O tamanho (em bytes) da string a ser codificada.
Valores de retorno
WEAVE_NO_ERROR
Se o método for bem-sucedido.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Se um gravador de contêiner tiver sido aberto no gravador atual e ainda não tiver sido fechado.
WEAVE_ERROR_INVALID_TLV_TAG
Se o valor da tag especificada for inválido ou inadequado no contexto em que o valor está sendo gravado.
WEAVE_ERROR_BUFFER_TOO_SMALL
Se a gravação do valor exceder o limite do número máximo de bytes especificado quando o gravador foi inicializado.
WEAVE_ERROR_NO_MEMORY
Se uma tentativa de alocação de um buffer de saída falhar devido à falta de memória.
other
Outros erros específicos do Weave ou da plataforma retornados pelas funções GetNewBuffer() ou FinalizeBuffer() configuradas.

PutStringF

WEAVE_ERROR PutStringF(
  uint64_t tag,
  const char *fmt,
  ...
)

Codifique a saída da string formatada de acordo com o formato no elemento TLV.

PutStringF é um análogo de sprintf, em que a saída é armazenada em um elemento TLV, e não em um buffer de caracteres. Quando a funcionalidade printf estendida está disponível, a função pode gerar a string de resultado em um armazenamento subjacente descontínuo. A implementação é compatível com as seguintes melhorias de printf:

A plataforma fornece um vcbprintf baseado em callback que permite chamar um callback personalizado em vez de putchar.

A plataforma fornece uma variante de vsnprintf chamada vsnprintf_ex, que se comporta exatamente como vsnprintf, mas tem disposições para omitir os primeiros n caracteres da saída.

Embora a função baseada em callback possa ser a mais simples e usar a menor quantidade de código, a variedade vsprintf_ex de funções vai consumir menos pilha.

Se nenhuma das opções acima estiver disponível, mas a plataforma fornecer malloc, a função vai alocar um buffer temporário para manter a saída. Quando a plataforma não fornece aprimoramentos para a família printf nem maroc, a saída é truncada para se ajustar ao estado contínuo do armazenamento TLV atual.

Detalhes
Parâmetros
[in] tag
A tag TLV a ser codificada com o valor ou AnonymousTag se o valor precisar ser codificado sem uma tag. Os valores de tag precisam ser criados com uma das funções de definição de tag ProfileTag(), ContextTag() ou CommonTag().
[in] fmt
A string de formato usada para formatar a lista de argumentos. Segue a mesma sintaxe e regras da string de formato da família de funções printf.
[in] ...
Uma lista de argumentos a serem formatados no valor de saída de acordo com fmt.
Valores de retorno
WEAVE_NO_ERROR
Se o método for bem-sucedido.
other
Se as chamadas subjacentes para os métodos TLVWriter WriteElementHead ou GetNewBuffer falharem, o erro delas será encaminhado imediatamente para a pilha de chamadas.

StartContainer

WEAVE_ERROR StartContainer(
  uint64_t tag,
  TLVType containerType,
  TLVType & outerContainerType
)

Começa a codificar um novo elemento de contêiner TLV.

O método StartContainer() é usado para gravar elementos de contêiner TLV (estrutura, matrizes ou caminhos) em uma codificação. O método usa o tipo e a tag (se houver) do novo contêiner e uma referência a um valor TLVType que será usado para salvar o contexto atual do gravador enquanto ele estiver sendo usado para gravar o contêiner.

Quando o método StartContainer() retornar, o aplicativo deverá usar o objeto TLVWriter atual para gravar os elementos do contêiner. Quando terminar, o aplicativo precisa chamar o método EndContainer() para concluir a codificação do contêiner.

Detalhes
Parâmetros
[in] tag
A tag TLV a ser codificada com o contêiner ou AnonymousTag se o contêiner precisar ser codificado sem uma tag. Os valores de tag precisam ser criados com uma das funções de definição de tag ProfileTag(), ContextTag() ou CommonTag().
[in] containerType
O tipo de contêiner a ser codificado. Precisa ser kTLVType_Structure, kTLVType_Array ou kTLVType_Path.
[out] outerContainerType
Uma referência a um valor TLVType que receberá o contexto do escritor.
Valores de retorno
WEAVE_NO_ERROR
Se o método for bem-sucedido.
WEAVE_ERROR_WRONG_TLV_TYPE
Se o valor especificado para containerType estiver incorreto.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Se um gravador de contêiner tiver sido aberto no gravador atual e ainda não tiver sido fechado.
WEAVE_ERROR_INVALID_TLV_TAG
Se o valor da tag especificada for inválido ou inadequado no contexto em que o valor está sendo gravado.
WEAVE_ERROR_BUFFER_TOO_SMALL
Se a gravação do valor exceder o limite do número máximo de bytes especificado quando o gravador foi inicializado.
WEAVE_ERROR_NO_MEMORY
Se uma tentativa de alocação de um buffer de saída falhar devido à falta de memória.
other
Outros erros específicos do Weave ou da plataforma retornados pelas funções GetNewBuffer() ou FinalizeBuffer() configuradas.

StartPutBytes

WEAVE_ERROR StartPutBytes(
  uint64_t tag,
  uint32_t totalLen
)

Codifica uma string de bytes TLV em vários blocos.

Precisa ser usado com ContinuePutBytes.

Detalhes
Parâmetros
[in] tag
A tag TLV a ser codificada com o valor ou AnonymousTag se o valor precisar ser codificado sem uma tag. Os valores de tag precisam ser criados com uma das funções de definição de tag ProfileTag(), ContextTag() ou CommonTag().
[in] totalLen
O número total de bytes a serem codificados.
Valores de retorno
WEAVE_NO_ERROR
Se o método for bem-sucedido.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Se um gravador de contêiner tiver sido aberto no gravador atual e ainda não tiver sido fechado.
WEAVE_ERROR_INVALID_TLV_TAG
Se o valor da tag especificada for inválido ou inadequado no contexto em que o valor está sendo gravado.
WEAVE_ERROR_BUFFER_TOO_SMALL
Se a gravação do valor exceder o limite do número máximo de bytes especificado quando o gravador foi inicializado.
WEAVE_ERROR_NO_MEMORY
Se uma tentativa de alocação de um buffer de saída falhar devido à falta de memória.
other
Outros erros específicos do Weave ou da plataforma retornados pelas funções GetNewBuffer() ou FinalizeBuffer() configuradas.

VPutStringF

WEAVE_ERROR VPutStringF(
  uint64_t tag,
  const char *fmt,
  va_list ap
)

Codifique a saída da string formatada de acordo com o formato no elemento TLV.

PutStringF é um análogo de sprintf, em que a saída é armazenada em um elemento TLV, e não em um buffer de caracteres. Quando a funcionalidade printf estendida está disponível, a função pode gerar a string de resultado em um armazenamento subjacente descontínuo. A implementação é compatível com as seguintes melhorias de printf:

A plataforma fornece um vcbprintf baseado em callback que permite chamar um callback personalizado em vez de putchar.

A plataforma fornece uma variante de vsnprintf chamada vsnprintf_ex, que se comporta exatamente como vsnprintf, mas tem disposições para omitir os primeiros n caracteres da saída.

Embora a função baseada em callback possa ser a mais simples e usar a menor quantidade de código, a variedade vsprintf_ex de funções vai consumir menos pilha.

Se nenhuma das opções acima estiver disponível, mas a plataforma fornecer malloc, a função vai alocar um buffer temporário para manter a saída. Quando a plataforma não fornece aprimoramentos para a família printf nem maroc, a saída é truncada para se ajustar ao estado contínuo do armazenamento TLV atual.

Detalhes
Parâmetros
[in] tag
A tag TLV a ser codificada com o valor ou AnonymousTag se o valor precisar ser codificado sem uma tag. Os valores de tag precisam ser criados com uma das funções de definição de tag ProfileTag(), ContextTag() ou CommonTag().
[in] fmt
A string de formato usada para formatar a lista de argumentos. Segue a mesma sintaxe e regras da string de formato da família de funções printf.
[in] ap
Uma lista de argumentos a serem formatados no valor de saída de acordo com fmt.
Valores de retorno
WEAVE_NO_ERROR
Se o método for bem-sucedido.
other
Se as chamadas subjacentes para os métodos TLVWriter WriteElementHead ou GetNewBuffer falharem, o erro delas será encaminhado imediatamente para a pilha de chamadas.

Funções estáticas públicas

FinalizePacketBuffer

WEAVE_ERROR FinalizePacketBuffer(
  TLVWriter & writer,
  uintptr_t bufHandle,
  uint8_t *bufStart,
  uint32_t dataLen
)

Uma implementação de uma função FinalizeBuffer TLVWriter para gravar em uma cadeia de PackageBuffers.

A função FinalizePacketBuffer() executa a finalização necessária ao usar um TLVWriter para gravar em uma cadeia de PackageBuffers. A função foi desenvolvida para ser usada em conjunto com a função GetNewPacketBuffer().

Consulte a definição do tipo FinalizeBufferFunct para ver mais informações sobre a API da função FinalizePacketBuffer().

GetNewBuffer_Malloced

WEAVE_ERROR GetNewBuffer_Malloced(
  TLVWriter & writer,
  uintptr_t & bufHandle,
  uint8_t *& bufStart,
  uint32_t & bufLen
)

Uma implementação de uma função TLVWriter GetNewBuffer para gravar em um buffer dinâmico.

A função GetNewBuffer_Malloced() fornece um novo espaço de saída para um TLVWriter ao dobrar o tamanho do buffer dinâmico subjacente conforme necessário para armazenar a codificação. A função foi projetada para ser atribuída ao ponteiro de função TLVWriter GetNewBuffer.

Consulte a definição de tipo GetNewBufferFunct para informações adicionais sobre a API da função GetNewBuffer_Malloced().

GetNewPacketBuffer

WEAVE_ERROR GetNewPacketBuffer(
  TLVWriter & writer,
  uintptr_t & bufHandle,
  uint8_t *& bufStart,
  uint32_t & bufLen
)

Uma implementação de uma função TLVWriter GetNewBuffer para gravar em uma cadeia de PackageBuffers.

A função GetNewPacketBuffer() fornece um novo espaço de saída para um TLVWriter com a alocação de uma cadeia de um ou mais pacotesBuffers conforme necessário para armazenar a codificação. A função foi projetada para ser atribuída ao ponteiro de função TLVWriter GetNewBuffer.

Ao usar o GetNewPacketBuffer com um TLVWriter, a função FinalizePacketBuffer() correspondente (ou uma equivalente) também precisará ser usada para finalizar a cadeia do buffer.

Consulte a definição do tipo GetNewBufferFunct para ver mais informações sobre a API da função GetNewPacketBuffer().

Funções protegidas

IsCloseContainerReserved

bool IsCloseContainerReserved(
  void
) const 

Determine se o contêiner deve reservar espaço para o símbolo CloseContainer no ponto de início / abertura do contêiner.

IsContainerOpen

bool IsContainerOpen(
  void
) const 

SetCloseContainerReserved

void SetCloseContainerReserved(
  bool aCloseContainerReserved
)

Defina se o contêiner precisa reservar o espaço para o símbolo CloseContainer no ponto de início / abertura do contêiner.

SetContainerOpen

void SetContainerOpen(
  bool aContainerOpen
)

WriteData

WEAVE_ERROR WriteData(
  const uint8_t *p,
  uint32_t len
)

WriteElementHead

WEAVE_ERROR WriteElementHead(
  TLVElementType elemType,
  uint64_t tag,
  uint64_t lenOrVal
)

WriteElementWithData

WEAVE_ERROR WriteElementWithData(
  TLVType type,
  uint64_t tag,
  const uint8_t *data,
  uint32_t dataLen
)