nl:: Weave:: TLV:: TLVwriter
#include <src/lib/core/WeaveTLV.h>
Fornece um codificador eficiente para a memória na gravação de dados no formato TLV do Weave.
Resumo
O TLVwriter implementa um codificador somente de fluxo para dados TLV do Weave. Os aplicativos gravam dados em uma codificação chamando um dos métodos PUT() do gravador, transmitindo as informações associadas de tag e valor 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 para um destino arbitrário, por exemplo, um soquete ou uma fila de eventos.
Herança
Subclasses conhecidas diretas: nl::Weave::TLV::CircularTLVwriter
Tipos protegidos |
|
---|---|
@72{
|
tipo enumerado |
Tipos públicos |
|
---|---|
FinalizeBufferFunct)(TLVWriter &writer, uintptr_t bufHandle, uint8_t *bufStart, uint32_t bufLen)
|
WEAVE_ERROR(* Uma função usada para executar 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 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á 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)
|
Conclui 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 byte TLV.
|
CopyContainer(TLVReader & container)
|
|
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 membro 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)
|
Conclui a codificação de um elemento de contêiner TLV.
|
Finalize(void)
|
Terminar a gravação de uma codificação TLV.
|
GetContainerType(void) const
|
Retorna o tipo de contêiner em que o TLVWriter está gravando no momento.
|
GetLengthWritten(void)
|
uint32_t
Retorna o número total de bytes gravados desde que o gravador foi inicializado.
|
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)
|
|
Put(uint64_t tag, int8_t v)
|
Codifica um valor inteiro assinado de TLV.
|
Put(uint64_t tag, int8_t v, bool preserveSize)
|
Codifica um valor inteiro assinado de 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 não assinado TLV.
|
Put(uint64_t tag, uint8_t v, bool preserveSize)
|
Codifica um valor inteiro não assinado TLV.
|
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 byte TLV.
|
PutNull(uint64_t tag)
|
Codifica um valor nulo TLV.
|
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 UTF8 TLV.
|
PutString(uint64_t tag, const char *buf, uint32_t len)
|
Codifica um valor de string UTF8 TLV.
|
PutStringF(uint64_t tag, const char *fmt, ...)
|
Codifique a saída da string formatada de acordo com o formato do 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 byte 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 do 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 de 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 GetNewBuffer TLVwriter para gravação em um buffer dinâmico.
|
GetNewPacketBuffer(TLVWriter & writer, uintptr_t & bufHandle, uint8_t *& bufStart, uint32_t & bufLen)
|
Uma implementação de uma função GetNewBuffer TLVwriter para gravação 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 momento de iniciar / abrir o contêiner.
|
IsContainerOpen(void) const
|
bool
|
SetCloseContainerReserved(bool aCloseContainerReserved)
|
void
Defina se o contêiner deve reservar o espaço para o símbolo CloseContainer no momento de iniciar / abrir o 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
FinalBufferFunct
WEAVE_ERROR(* FinalizeBufferFunct)(TLVWriter &writer, uintptr_t bufHandle, uint8_t *bufStart, uint32_t bufLen)
Uma função usada para executar a finalização da saída de um objeto TLVwriter.
As funções desse tipo são chamadas quando um método Finalize() de TLVWriter's é 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 disso incluem a gravação do comprimento final da codificação ou o fechamento de um descritor de arquivo.
Detalhes | |||||||||
---|---|---|---|---|---|---|---|---|---|
Parâmetros |
|
||||||||
Valores de retorno |
|
GetNewBufferFunct
WEAVE_ERROR(* GetNewBufferFunct)(TLVWriter &writer, uintptr_t &bufHandle, uint8_t *&bufStart, uint32_t &bufLen)
Uma função que fornece 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 o TLVwriter gravar. Quando chamada, a função precisa retornar um ponteiro para um local da memória em que os novos dados precisam ser gravados, com um comprimento máximo associado. A função pode fornecer espaço de gravação alocando um novo buffer para reter os dados ou apagando os dados gravados anteriormente de um buffer existente.
Detalhes | |||||||||
---|---|---|---|---|---|---|---|---|---|
Parâmetros |
|
||||||||
Valores de retorno |
|
Atributos públicos
AppData
void * AppData
Um campo de ponteiro que pode ser usado para dados específicos do aplicativo.
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 o método Finalize() for chamado. Os aplicativos podem definir o ponteiro da função a qualquer momento antes de chamar Finalize(). Por padrão, o ponteiro é definido como NULL, o que faz com que o método Finalize() deixe de chamar a função.
Consulte a definição de tipo FinalizeBufferFunct para ver mais informações sobre como implementar uma função FinalizeBuffer.
GetNewBuffer
GetNewBufferFunct GetNewBuffer
Um ponteiro para uma função que fornecerá novo espaço de buffer de saída para um TLVwriter.
Um objeto TLVWriter chamará a função GetNewBuffer sempre que houver uma tentativa de gravação de dados que exceda 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 estourarem o buffer atual.
GetNewBuffer pode ser definido por um aplicativo a qualquer momento, mas normalmente é configurado quando o gravador é inicializado.
Consulte a definição do tipo GetNewBufferFunct para ver mais informações sobre como implementar uma função GetNewBuffer.
ImplicitProfileId
uint32_t ImplicitProfileId
O ID do perfil das tags que devem ser codificadas de forma implícita.
Quando um escritor for solicitado a 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 tags de codificação de forma implícita a partir do ponto atual na codificação. O ID do perfil a ser definido depende do contexto do aplicativo ou do protocolo falado.
Atributos protegidos
mBufHandle
uintptr_t mBufHandle
mBufStart
uint8_t * mBufStart
Tipo de contêiner
TLVType mContainerType
MlwWritten
uint32_t mLenWritten
mMaxLen
uint32_t mMaxLen
Lente restantes
uint32_t mRemainingLen
mWritePoint
uint8_t * mWritePoint
Funções públicas
CloseContainer
WEAVE_ERROR CloseContainer( TLVWriter & containerWriter )
Conclui 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 aos aplicativos OpenContainer() precisa fazer uma chamada correspondente para CloseContainer(), passando uma referência ao mesmo gravador de contêiner para os dois métodos.
Quando CloseContainer() é retornado, os aplicativos podem continuar usando o gravador pai para gravar outros elementos TLV que aparecem após o elemento do contêiner. Neste ponto, o gravador de contêineres fornecido deve ser considerado como "#39;de-Bootd'" e não pode ser usado sem uma nova inicialização.
Detalhes | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parâmetros |
|
||||||||||||
Valores de retorno |
|
ContinuePutBytes
WEAVE_ERROR ContinuePutBytes( const uint8_t *buf, uint32_t len )
Codifica um valor de string de byte TLV.
Isso deve ser usado com Start PutBytes.
Detalhes | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parâmetros |
|
||||||||||||
Valores de retorno |
|
CopyContainer
WEAVE_ERROR CopyContainer( TLVReader & container )
Copia um elemento de contêiner TLV do objeto TLVReader.
O objeto 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 elemento novo do 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 seguindo o elemento contêiner.
Detalhes | |||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parâmetros |
|
||||||||||||||||||
Valores de retorno |
|
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, uma matriz ou um caminho) que contém um conjunto de elementos membros retirados de um objeto TLVReader. Quando o método é chamado, o objeto de leitor fornecido deve ser 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 seguindo o elemento contêiner.
Detalhes | |||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parâmetros |
|
||||||||||||||||||
Valores de retorno |
|
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 membro de um contêiner pré-codificado.
O método CopyContainer() codifica um novo elemento de contêiner TLV (uma estrutura, uma matriz ou um caminho) que contém 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 contêiner TLV. Um novo contêiner é gravado com 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 seguindo o elemento contêiner.
Detalhes | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parâmetros |
|
||||||||||||||||
Valores de retorno |
|
CopiarElemento
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 com tipo, tag e valor extraídos de um objeto TLVReader. Quando o método é chamado, o objeto de leitor fornecido deve ser 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 dele será copiado.
Detalhes | |||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parâmetros |
|
||||||||||||||||||
Valores de retorno |
|
CopiarElemento
WEAVE_ERROR CopyElement( uint64_t tag, TLVReader & reader )
Contêiner
WEAVE_ERROR EndContainer( TLVType outerContainerType )
Conclui 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 de aplicativos StartContainer() deve fazer uma chamada correspondente para EndContainer(), transmitindo o valor TLVType retornado pela chamada StartContainer(). Quando EndContainer() retorna, o objeto de gravação pode ser usado para escrever elementos TLV adicionais que seguem o elemento contêiner.
Detalhes | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parâmetros |
|
||||||||||||
Valores de retorno |
|
Finalizar
WEAVE_ERROR Finalize( void )
Terminar a gravação de uma codificação TLV.
O método Finalize() conclui o processo de gravação de uma codificação TLV no buffer de saída subjacente. 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 |
|
GetContainerType
TLVType GetContainerType( void ) const
Retorna o tipo de contêiner em que o TLVWriter está gravando no momento.
O método GetContainerType() retorna o tipo do contêiner TLV no qual o TLVWriter está gravando no momento. Se TLVWriter não estiver gravando elementos em um contêiner (ou seja, se estiver gravando no nível mais externo de uma codificação), o método retornará kTLVType_NotSpecified.
Detalhes | |
---|---|
Retorna |
O TLVType do contêiner atual, ou kTLVType_NotSpecified, se o TLVwriter não estiver gravando elementos em um contêiner.
|
GetLengthWritten
uint32_t GetLengthWritten( void )
Retorna o número total de bytes gravados desde que o gravador foi inicializado.
Detalhes | |
---|---|
Retorna |
Número total de bytes gravados desde que o gravador foi inicializado.
|
Init
void Init( uint8_t *buf, uint32_t maxLen )
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 de dados existentes no buffer fornecido.
Detalhes | |||||
---|---|---|---|---|---|
Parâmetros |
|
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 de dados existentes no buffer especificado. Se allowDiscontiguousBuffers
for verdadeiro, outros PackageBuffers serão alocados e encadeados conforme necessário para acomodar a quantidade de dados gravados. Se o buffer de saída especificado já for o cabeçalho de uma cadeia de buffers, a saída será gravada nos buffers subsequentes antes da alocação de novos buffers.
Detalhes | |||||||
---|---|---|---|---|---|---|---|
Parâmetros |
|
InitMalloc
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 |
|
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 de gravação (o gravador de contêineres), 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êineres e chamam CloseContainer() para concluir a codificação do contêiner.
Enquanto o gravador do contêiner está aberto, os aplicativos não podem fazer chamadas nem alterar o estado do gravador pai.
O gravador do contêiner herda várias propriedades de configuração do gravador pai. Eles são os seguintes:
- 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 |
|
||||||||||||||
Valores de retorno |
|
Put
WEAVE_ERROR Put( uint64_t tag, int8_t v )
Codifica um valor inteiro assinado de TLV.
Essa é uma função de membro sobrecarregada, para sua conveniência. Ela é diferente da função acima somente nos argumentos que ela aceita.
Detalhes | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parâmetros |
|
||||||||||||
Valores de retorno |
|
Put
WEAVE_ERROR Put( uint64_t tag, int8_t v, bool preserveSize )
Codifica um valor inteiro assinado de TLV.
Essa é uma função de membro sobrecarregada, para sua conveniência. Ela é diferente da função acima somente nos argumentos que ela aceita.
Detalhes | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parâmetros |
|
||||||||||||
Valores de retorno |
|
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 não assinado TLV.
Essa é uma função de membro sobrecarregada, para sua conveniência. Ela é diferente da função acima somente nos argumentos que ela aceita.
Detalhes | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parâmetros |
|
||||||||||||
Valores de retorno |
|
Put
WEAVE_ERROR Put( uint64_t tag, uint8_t v, bool preserveSize )
Codifica um valor inteiro não assinado TLV.
Essa é uma função de membro sobrecarregada, para sua conveniência. Ela é diferente da função acima somente nos argumentos que ela aceita.
Detalhes | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parâmetros |
|
||||||||||||
Valores de retorno |
|
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, para sua conveniência. Ela é diferente da função acima somente nos argumentos que ela aceita.
Detalhes | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parâmetros |
|
||||||||||||
Valores de retorno |
|
PutBoolean
WEAVE_ERROR PutBoolean( uint64_t tag, bool v )
Codifica um valor booleano TLV.
Detalhes | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parâmetros |
|
||||||||||||
Valores de retorno |
|
PutBytes
WEAVE_ERROR PutBytes( uint64_t tag, const uint8_t *buf, uint32_t len )
Codifica um valor de string de byte TLV.
Detalhes | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parâmetros |
|
||||||||||||
Valores de retorno |
|
PutNull
WEAVE_ERROR PutNull( uint64_t tag )
Codifica um valor nulo TLV.
Detalhes | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parâmetros |
|
||||||||||||
Valores de retorno |
|
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, uma matriz ou um caminho) que contém um conjunto de elementos de membro retirados de um buffer pré-codificado. Espera-se que o buffer de entrada contenha zero ou mais elementos TLV codificados, com tags em conformidade com as regras associadas ao tipo de contêiner especificado (por exemplo, membros de estrutura precisam ter tags, mas membros de matriz não precisam).
O método codifica todo o elemento do contêiner em uma chamada. Quando PUTPreEncodedContainer() retorna, o objeto de gravação pode ser usado para escrever elementos TLV adicionais seguindo o elemento de contêiner.
Detalhes | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parâmetros |
|
||||||||||||||
Valores de retorno |
|
PutString
WEAVE_ERROR PutString( uint64_t tag, const char *buf )
Codifica um valor de string UTF8 TLV.
Detalhes | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parâmetros |
|
||||||||||||
Valores de retorno |
|
PutString
WEAVE_ERROR PutString( uint64_t tag, const char *buf, uint32_t len )
Codifica um valor de string UTF8 TLV.
Detalhes | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parâmetros |
|
||||||||||||
Valores de retorno |
|
PutStringF.
WEAVE_ERROR PutStringF( uint64_t tag, const char *fmt, ... )
Codifique a saída da string formatada de acordo com o formato do elemento TLV.
PutStringF é um analógico de um sprintf em que a saída é armazenada em um elemento TLV, e não em um buffer de caracteres. Quando a funcionalidade estendida de impressão está disponível, a função pode gerar a string de resultado em um armazenamento subjacente não contínuo. A implementação é compatível com as seguintes melhorias no printf:
A plataforma fornece um vcbprintf
baseado em callback que permite chamar um callback personalizado em vez do Putchar.
A plataforma fornece uma variante de vsnprintf
chamada vsnprintf_ex
, que se comporta exatamente como Xnprintf, 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 use a menor quantidade de código, a variedade de funções vsprintf_ex
consumirá menos pilha.
Se nenhuma das opções acima estiver disponível, mas a plataforma fornecer malloc
, a função alocará um buffer temporário para manter a saída. Quando a plataforma não fornece melhorias para a família printf nem malloc, a saída é truncada de modo que se encaixe no estado contínuo no armazenamento TLV atual.
Detalhes | |||||||
---|---|---|---|---|---|---|---|
Parâmetros |
|
||||||
Valores de retorno |
|
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 está sendo usado para gravar o contêiner.
Quando o método StartContainer() retornar, o aplicativo deverá usar o objeto TLVwriter atual para escrever os elementos do contêiner. Ao terminar, o aplicativo precisará chamar o método EndContainer() para concluir a codificação do contêiner.
Detalhes | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parâmetros |
|
||||||||||||||
Valores de retorno |
|
StartPutBytes
WEAVE_ERROR StartPutBytes( uint64_t tag, uint32_t totalLen )
Codifica uma string de byte TLV em vários blocos.
Isso deve ser usado com Continue PutBytes.
Detalhes | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parâmetros |
|
||||||||||||
Valores de retorno |
|
V PutString
WEAVE_ERROR VPutStringF( uint64_t tag, const char *fmt, va_list ap )
Codifique a saída da string formatada de acordo com o formato do elemento TLV.
PutStringF é um analógico de um sprintf em que a saída é armazenada em um elemento TLV, e não em um buffer de caracteres. Quando a funcionalidade estendida de impressão está disponível, a função pode gerar a string de resultado em um armazenamento subjacente não contínuo. A implementação é compatível com as seguintes melhorias no printf:
A plataforma fornece um vcbprintf
baseado em callback que permite chamar um callback personalizado em vez do Putchar.
A plataforma fornece uma variante de vsnprintf
chamada vsnprintf_ex
, que se comporta exatamente como Xnprintf, 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 use a menor quantidade de código, a variedade de funções vsprintf_ex
consumirá menos pilha.
Se nenhuma das opções acima estiver disponível, mas a plataforma fornecer malloc
, a função alocará um buffer temporário para manter a saída. Quando a plataforma não fornece melhorias para a família printf nem malloc, a saída é truncada de modo que se encaixe no estado contínuo no armazenamento TLV atual.
Detalhes | |||||||
---|---|---|---|---|---|---|---|
Parâmetros |
|
||||||
Valores de retorno |
|
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 de 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 projetada para ser usada em conjunto com a função GetNewPacketBuffer().
Consulte a definição de 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 GetNewBuffer TLVwriter para gravação em um buffer dinâmico.
A função GetNewBuffer_Malloced() fornece um novo espaço de saída a um TLVwriter ao duplicar 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 da função GetNewBuffer TLVwriter.
Consulte a definição do tipo GetNewBufferFunct para ver mais informações 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 GetNewBuffer TLVwriter para gravação em uma cadeia de PackageBuffers.
A função GetNewPacketBuffer() fornece um novo espaço de saída a um TLVWriter, alocando uma cadeia de um ou mais PackageBuffers conforme necessário para armazenar a codificação. A função foi projetada para ser atribuída ao ponteiro da função GetNewBuffer TLVwriter.
Ao usar o GetNewPacketBuffer com um TLVWriter, a função FinalizePacketBuffer() correspondente (ou equivalente) também precisa ser usada para finalizar a cadeia de buffer.
Consulte a definição do tipo GetNewBufferFunct para ver mais informações sobre a API da função GetNewPacketBuffer().
Funções protegidas
IsCloseContainerReservado
bool IsCloseContainerReserved( void ) const
Determine se o contêiner deve reservar espaço para o símbolo CloseContainer no momento de iniciar / abrir o contêiner.
IsContainerOpen
bool IsContainerOpen( void ) const
SetCloseContainerReservado
void SetCloseContainerReserved( bool aCloseContainerReserved )
Defina se o contêiner deve reservar o espaço para o símbolo CloseContainer no momento de iniciar / abrir o contêiner.
SetContainerOpen
void SetContainerOpen( bool aContainerOpen )
Gravar dados
WEAVE_ERROR WriteData( const uint8_t *p, uint32_t len )
HeadElement
WEAVE_ERROR WriteElementHead( TLVElementType elemType, uint64_t tag, uint64_t lenOrVal )
GravarElementWithData
WEAVE_ERROR WriteElementWithData( TLVType type, uint64_t tag, const uint8_t *data, uint32_t dataLen )