nl::Weave::TLV::TLVWriter

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

Proporciona un codificador eficiente en cuanto a la memoria para escribir datos en formato TLV de Weave.

Resumen

TLVWriter implementa un codificador con estilo de transmisión de solo reenvío para datos de TLV de Weave. Las aplicaciones escriben datos en una codificación. Para ello, llaman a uno de los métodos Put() del escritor y pasan la información de la etiqueta y del valor asociadas según sea necesario. De forma similar, las aplicaciones pueden codificar tipos de contenedores TLV (estructuras, arrays o rutas de acceso) llamando a los métodos OpenContainer() o EnterContainer() del escritor.

Un objeto TLVWriter puede escribir datos directamente en un búfer de salida fijo o en una cadena de uno o más objetos PacketBuffer. Además, las aplicaciones pueden proporcionar sus propias funciones GetNewBuffer y FinalizeBuffer para dirigir los resultados a un destino arbitrario, p.ej., un socket o una cola de eventos.

Herencia

Subclases conocidas directas: 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(*
Una función que se usa para finalizar el resultado de un objeto TLVWriter.
GetNewBufferFunct)(TLVWriter &writer, uintptr_t &bufHandle, uint8_t *&bufStart, uint32_t &bufLen) WEAVE_ERROR(*
Una función que proporciona un nuevo espacio de búfer de salida a un TLVWriter.

Atributos públicos

AppData
void *
Es un campo de puntero que puede usarse para datos específicos de la aplicación.
FinalizeBuffer
Un puntero para una función a la que se llamará cuando se finalice TLVWriter.
GetNewBuffer
Un puntero para una función que proporcionará un nuevo espacio de búfer de salida a un TLVWriter.
ImplicitProfileId
uint32_t
Es el ID de perfil de las etiquetas que se deben codificar 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 *

Funciones públicas

CloseContainer(TLVWriter & containerWriter)
Completa la escritura de un contenedor TLV después de una llamada a OpenContainer().
ContinuePutBytes(const uint8_t *buf, uint32_t len)
Codifica un valor de string de bytes TLV.
CopyContainer(TLVReader & container)
Copia un elemento de contenedor TLV del objeto TLVReader.
CopyContainer(uint64_t tag, TLVReader & container)
Codifica un elemento de contenedor TLV de un conjunto precodificado de elementos miembros.
CopyContainer(uint64_t tag, const uint8_t *encodedContainer, uint16_t encodedContainerLen)
Codifica un elemento de contenedor TLV que contiene elementos miembros de un contenedor codificado con anterioridad.
CopyElement(TLVReader & reader)
Copia un elemento TLV de un objeto de lector en el escritor.
CopyElement(uint64_t tag, TLVReader & reader)
EndContainer(TLVType outerContainerType)
Completa la codificación de un elemento de contenedor TLV.
Finalize(void)
Termina de escribir una codificación TLV.
GetContainerType(void) const
Muestra el tipo de contenedor en el que TLVWriter está escribiendo actualmente.
GetLengthWritten(void)
uint32_t
Muestra la cantidad total de bytes escritos desde que se inicializó el escritor.
Init(uint8_t *buf, uint32_t maxLen)
void
Inicializa un objeto TLVWriter para escribir en un solo búfer de salida.
Init(PacketBuffer *buf, uint32_t maxLen)
void
Inicializa un objeto TLVWriter para escribir en un solo agrupador.
Init(PacketBuffer *buf, uint32_t maxLen, bool allowDiscontiguousBuffers)
void
Inicializa un objeto TLVWriter para escribir en uno o más paquetesBuffers.
InitMalloced(uint8_t *& outBuf, uint32_t initialBufSize, uint32_t maxLen)
void
Inicializa un objeto TLVWriter para escribir en un búfer dinámico.
OpenContainer(uint64_t tag, TLVType containerType, TLVWriter & containerWriter)
Inicializa un objeto TLVWriter nuevo para escribir los miembros de un elemento de contenedor TLV.
Put(uint64_t tag, int8_t v)
Codifica un valor de número entero con firma TLV.
Put(uint64_t tag, int8_t v, bool preserveSize)
Codifica un valor de número entero con firma 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 un valor de número entero sin firma TLV.
Put(uint64_t tag, uint8_t v, bool preserveSize)
Codifica un valor de número entero sin firma 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 un valor de punto flotante TLV.
PutBoolean(uint64_t tag, bool v)
Codifica un valor booleano TLV.
PutBytes(uint64_t tag, const uint8_t *buf, uint32_t len)
Codifica un valor de string de bytes TLV.
PutNull(uint64_t tag)
Codifica un valor nulo de TLV.
PutPreEncodedContainer(uint64_t tag, TLVType containerType, const uint8_t *data, uint32_t dataLen)
Codifica un elemento de contenedor TLV de un conjunto precodificado de elementos miembros.
PutString(uint64_t tag, const char *buf)
Codifica un valor de cadena UTF8 TLV.
PutString(uint64_t tag, const char *buf, uint32_t len)
Codifica un valor de cadena UTF8 TLV.
PutStringF(uint64_t tag, const char *fmt, ...)
Codifica el resultado de la cadena con el formato del elemento TLV.
StartContainer(uint64_t tag, TLVType containerType, TLVType & outerContainerType)
Comienza a codificar un elemento de contenedor TLV nuevo.
StartPutBytes(uint64_t tag, uint32_t totalLen)
Codifica una cadena de bytes TLV en varios fragmentos.
VPutStringF(uint64_t tag, const char *fmt, va_list ap)
Codifica el resultado de la cadena con el formato del elemento TLV.

Funciones estáticas públicas

FinalizePacketBuffer(TLVWriter & writer, uintptr_t bufHandle, uint8_t *bufStart, uint32_t dataLen)
Una implementación de una función TLVWriter FinalizeBuffer para escribir en una cadena de batchBuffers.
GetNewBuffer_Malloced(TLVWriter & writer, uintptr_t & bufHandle, uint8_t *& bufStart, uint32_t & bufLen)
Una implementación de la función GetNewBuffer TLVWriter para escribir en un búfer dinámico.
GetNewPacketBuffer(TLVWriter & writer, uintptr_t & bufHandle, uint8_t *& bufStart, uint32_t & bufLen)
Una implementación de la función GetNewBuffer TLVWriter para escribir en una cadena de batchBuffers.

Funciones protegidas

IsCloseContainerReserved(void) const
bool
Determina si el contenedor debe reservar espacio para el símbolo de CloseContainer en el punto de inicio o de apertura del contenedor.
IsContainerOpen(void) const
bool
SetCloseContainerReserved(bool aCloseContainerReserved)
void
Establece si el contenedor debe reservar el espacio para el símbolo de CloseContainer en el punto de inicio o de apertura del contenedor.
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)

Una función que se usa para finalizar el resultado de un objeto TLVWriter.

Se llama a funciones de este tipo cuando se llama al método Finalize() de un TLVWriter. Se espera que la función realice cualquier limpieza o finalización necesarias relacionadas con el consumo del resultado del objeto writer. Algunos ejemplos incluyen, por ejemplo, el registro de la longitud final de la codificación o el cierre de un descriptor de archivo.

Detalles
Parámetros
[in] writer
Una referencia al objeto TLVWriter que se está finalizando.
[in,out] bufHandle
Un valor de contexto uintptr_t que se estableció con llamadas anteriores a la función GetNewBuffer.
[in,out] bufStart
Un puntero al comienzo del búfer de salida actual (y final).
[in,out] bufLen
La cantidad de bytes contenidos en el búfer a los que apunta bufStart.
Valores de retorno
WEAVE_NO_ERROR
Si la finalización fue exitosa.
other
Otros códigos de error específicos de la plataforma o de Weave que indican que se produjo un error durante la finalización.

GetNewBufferFunct

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

Una función que proporciona un nuevo espacio de búfer de salida a un TLVWriter.

Las funciones de este tipo se usan para preparar un nuevo espacio de búfer en el que un TLVWriter realizará operaciones de escritura. Cuando se la llama, se espera que la función devuelva un puntero a una ubicación de memoria donde se deben escribir datos nuevos, junto con una longitud máxima asociada. La función puede proporcionar espacio de escritura asignando un búfer nuevo para que contenga los datos o borrando los datos escritos anteriormente de un búfer existente.

Detalles
Parámetros
[in] writer
Una referencia al objeto TLVWriter que solicita un nuevo espacio de búfer.
[in,out] bufHandle
Una referencia a un valor uintptr_t que la función puede usar para almacenar datos de contexto entre llamadas. Este valor se inicializa en 0 antes de la primera llamada.
[in,out] bufStart
Es una referencia a un puntero de datos. Cuando se ingresa a la función, bufStart apunta el comienzo del búfer de salida actual. Al salir, se espera que bufStart apunte al comienzo del nuevo búfer de salida. El nuevo valor del puntero puede ser el mismo que el valor anterior (p.ej., si la función copió los datos existentes en otro lugar) o puede apuntar a una ubicación completamente nueva.
[in,out] bufLen
Es una referencia a un número entero sin firma. Al ingresar a la función, bufLen contiene la cantidad de bytes de espacio unused en el búfer actual. Para la salida, se espera que bufLen contenga la cantidad máxima de bytes que se pueden escribir en el nuevo búfer de salida.
Valores de retorno
WEAVE_NO_ERROR
Si la función pudo proporcionar más espacio de búfer al escritor,
other
Otros códigos de error específicos de la plataforma o de Weave que indican que se produjo un error que impidió que la función produjera espacio de búfer adicional.

Atributos públicos

AppData

void * AppData

Es un campo de puntero que puede usarse para datos específicos de la aplicación.

FinalizeBuffer

FinalizeBufferFunct FinalizeBuffer

Un puntero para una función a la que se llamará cuando se finalice TLVWriter.

Un objeto TLVWriter llamará a la función FinalizeBuffer cada vez que se llame al método Finalize(). Las aplicaciones pueden configurar el puntero de función en cualquier momento antes de llamar a Finalize(). De forma predeterminada, el puntero se establece en NULL, lo que hace que el método Finalize() no llame a la función.

Consulta la definición del tipo FinalizeBufferFunct para obtener información adicional sobre la implementación de una función FinalizeBuffer.

GetNewBuffer

GetNewBufferFunct GetNewBuffer

Un puntero para una función que proporcionará un nuevo espacio de búfer de salida a un TLVWriter.

Un objeto TLVWriter llamará a la función GetNewBuffer cada vez que se intente escribir datos que superen el tamaño del búfer de salida actual. Si se configura como NULL (el valor predeterminado), el escritor mostrará un error WEAVE_ERROR_NO_MEMORY si los datos de salida sobrepasan el búfer actual.

Una aplicación puede establecer GetNewBuffer en cualquier momento, pero, por lo general, se configura cuando se inicializa el escritor.

Consulta la definición del tipo GetNewBufferFunct para obtener información adicional sobre cómo implementar una función GetNewBuffer.

ImplicitProfileId

uint32_t ImplicitProfileId

Es el ID de perfil de las etiquetas que se deben codificar de forma implícita.

Cuando se le solicita a un escritor que codifique un elemento nuevo, si el ID de perfil de la etiqueta asociada con el elemento nuevo coincide con el valor del miembro ImplicitProfileId, el escritor codificará la etiqueta de forma implícita y omitirá el ID de perfil en el proceso.

De forma predeterminada, la propiedad ImplicitProfileId se establece en kProfileIdNotSpecify, lo que le indica al escritor que no emita etiquetas codificadas de forma implícita. Las aplicaciones pueden configurar ImplicitProfileId en cualquier momento para habilitar las etiquetas de codificación de forma implícita a partir del punto actual de la codificación. Por lo general, el ID de perfil apropiado para configurar depende del contexto de la aplicación o el protocolo que se está hablando.

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

Funciones públicas

CloseContainer

WEAVE_ERROR CloseContainer(
  TLVWriter & containerWriter
)

Completa la escritura de un contenedor TLV después de una llamada a OpenContainer().

El método CloseContainer() restablece el estado de un objeto TLVWriter superior después de una llamada a OpenContainer(). Por cada llamada a OpenContainer(), las aplicaciones deben realizar la llamada correspondiente a CloseContainer() y pasar una referencia al mismo escritor de contenedores a ambos métodos.

Cuando se muestra CloseContainer(), las aplicaciones pueden seguir usando el escritor superior para escribir elementos TLV adicionales que aparecen después del elemento de contenedor. En este punto, el escritor de contenedor suministrado se debe considerar “desinicializado”. y no debe usarse sin volver a inicializar.

Detalles
Parámetros
[in] containerWriter
Una referencia al objeto TLVWriter que se suministró al método OpenContainer().
Valores de retorno
WEAVE_NO_ERROR
Si el método tuvo éxito.
WEAVE_ERROR_INCORRECT_STATE
Si el escritor del contenedor proporcionado no está en el estado correcto.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Si otro escritor de contenedor se abrió en el escritor de contenedor proporcionado y aún no se cerró.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si completar la codificación del contenedor excedería el límite de la cantidad máxima de bytes especificados cuando se inicializó el escritor.
WEAVE_ERROR_NO_MEMORY
Si un intento de asignar un búfer de salida falló debido a la falta de memoria.
other
Otros errores de Weave o específicos de la plataforma que muestran las funciones configuradas GetNewBuffer() o FinalizeBuffer()

ContinuePutBytes

WEAVE_ERROR ContinuePutBytes(
  const uint8_t *buf,
  uint32_t len
)

Codifica un valor de string de bytes TLV.

Esto se debe usar con StartPutBytes.

Detalles
Parámetros
[in] buf
Un puntero para un búfer que contiene la cadena de bytes que se codificará.
[in] len
La cantidad de bytes que se codificarán.
Valores de retorno
WEAVE_NO_ERROR
Si el método tuvo éxito.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Si un escritor de contenedor se abrió en el escritor actual y aún no se cerró.
WEAVE_ERROR_INVALID_TLV_TAG
Si el valor especificado de la etiqueta no es válido o es inapropiado en el contexto en el que se escribe el valor.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si la escritura, el valor excedería el límite de la cantidad máxima de bytes especificada cuando se inicializó el escritor.
WEAVE_ERROR_NO_MEMORY
Si un intento de asignar un búfer de salida falló debido a la falta de memoria.
other
Otros errores de Weave o específicos de la plataforma que muestran las funciones configuradas GetNewBuffer() o FinalizeBuffer()

CopyContainer

WEAVE_ERROR CopyContainer(
  TLVReader & container
)

Copia un elemento de contenedor TLV del objeto TLVReader.

Para codificar un nuevo elemento de contenedor TLV, CopyContainer() copia un elemento de contenedor precodificado ubicado en la posición actual de un objeto TLVReader. El método escribe la totalidad del nuevo elemento del contenedor en una llamada y copia el tipo, la etiqueta y los elementos del contenedor de la codificación fuente. Cuando el método devuelve un resultado, el objeto writer se puede usar para escribir elementos TLV adicionales después del elemento contenedor.

Detalles
Parámetros
[in] container
Es una referencia a un objeto TLVReader que identifica el contenedor TLV precodificado que se copiará.
Valores de retorno
WEAVE_NO_ERROR
Si el método tuvo éxito.
WEAVE_ERROR_INCORRECT_STATE
Si el lector proporcionado no se encuentra en un elemento contenedor.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Si un escritor de contenedor se abrió en el escritor actual y aún no se cerró.
WEAVE_ERROR_TLV_UNDERRUN
Si la codificación TLV subyacente asociada con el lector proporcionado finaliza de forma prematura.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Si el lector proporcionado encontró un tipo de elemento TLV no válido o no compatible,
WEAVE_ERROR_INVALID_TLV_TAG
Si el lector proporcionado encontró una etiqueta TLV en un contexto no válido, o si la etiqueta asociada con el contenedor de origen no es válida o es inadecuada en el contexto en el que se escribe el contenedor nuevo.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si la escritura, el valor excedería el límite de la cantidad máxima de bytes especificada cuando se inicializó el escritor.
WEAVE_ERROR_NO_MEMORY
Si un intento de asignar un búfer de salida falló debido a la falta de memoria.
other
Otros errores de Weave o específicos de la plataforma que muestran las funciones configuradas GetNewBuffer() o FinalizeBuffer(), o la función GetNextBuffer() asociada con el objeto de lector

CopyContainer

WEAVE_ERROR CopyContainer(
  uint64_t tag,
  TLVReader & container
)

Codifica un elemento de contenedor TLV de un conjunto precodificado de elementos miembros.

El método CopyContainer() codifica un elemento de contenedor TLV nuevo (una estructura, un array o una ruta) que contiene un conjunto de elementos miembros tomados de un objeto TLVReader. Cuando se llama al método, se espera que el objeto lector proporcionado se posicione en un elemento contenedor TLV. El contenedor que se acaba de codificar tendrá el mismo tipo y los mismos miembros que el contenedor de entrada. La etiqueta del contenedor nuevo se especifica como un parámetro de entrada.

Cuando el método devuelve un resultado, el objeto writer se puede usar para escribir elementos TLV adicionales después del elemento contenedor.

Detalles
Parámetros
[in] tag
La etiqueta TLV que se codificará con el contenedor, o AnonymousTag si el contenedor se debe codificar sin una etiqueta. Los valores de las etiquetas deben construirse con una de las funciones de definición de etiquetas: ProfileTag(), ContextTag() o CommonTag().
[in] container
Una referencia a un objeto TLVReader que identifica un contenedor TLV codificado previamente cuyo tipo y sus miembros se deben copiar.
Valores de retorno
WEAVE_NO_ERROR
Si el método tuvo éxito.
WEAVE_ERROR_INCORRECT_STATE
Si el lector proporcionado no se encuentra en un elemento contenedor.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Si un escritor de contenedor se abrió en el escritor actual y aún no se cerró.
WEAVE_ERROR_TLV_UNDERRUN
Si la codificación TLV subyacente asociada con el lector proporcionado finaliza de forma prematura.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Si el lector proporcionado encontró un tipo de elemento TLV no válido o no compatible,
WEAVE_ERROR_INVALID_TLV_TAG
Si el lector proporcionado encontró una etiqueta TLV en un contexto no válido, o si la etiqueta proporcionada no es válida o es inapropiada en el contexto en el que se escribe el contenedor nuevo.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si la escritura, el valor excedería el límite de la cantidad máxima de bytes especificada cuando se inicializó el escritor.
WEAVE_ERROR_NO_MEMORY
Si un intento de asignar un búfer de salida falló debido a la falta de memoria.
other
Otros errores de Weave o específicos de la plataforma que muestran las funciones configuradas GetNewBuffer() o FinalizeBuffer(), o la función GetNextBuffer() asociada con el objeto de lector

CopyContainer

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

Codifica un elemento de contenedor TLV que contiene elementos miembros de un contenedor codificado con anterioridad.

El método CopyContainer() codifica un elemento de contenedor TLV nuevo (una estructura, un array o una ruta) que contiene un conjunto de elementos miembros tomados del contenido de un contenedor codificado previamente proporcionado. Cuando se llama al método, los datos en el búfer de entrada proporcionado se analizan como un elemento de contenedor TLV. Se escribe un contenedor nuevo con el mismo tipo y miembros que el contenedor de entrada. La etiqueta del contenedor nuevo se especifica como un parámetro de entrada.

Cuando el método devuelve un resultado, el objeto writer se puede usar para escribir elementos TLV adicionales después del elemento contenedor.

Detalles
Parámetros
[in] tag
La etiqueta TLV que se codificará con el contenedor, o AnonymousTag si el contenedor se debe codificar sin una etiqueta. Los valores de las etiquetas deben construirse con una de las funciones de definición de etiquetas: ProfileTag(), ContextTag() o CommonTag().
[in] encodedContainer
Un búfer que contiene un contenedor TLV precodificado cuyo tipo y sus miembros se deben copiar.
[in] encodedContainerLen
La longitud en bytes del contenedor codificado previamente.
Valores de retorno
WEAVE_NO_ERROR
Si el método tuvo éxito.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Si un escritor de contenedor se abrió en el escritor actual y aún no se cerró.
WEAVE_ERROR_TLV_UNDERRUN
Si el contenedor codificado finalizó antes de tiempo.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Si el contenedor codificado contiene un tipo de elemento TLV no válido o incompatible.
WEAVE_ERROR_INVALID_TLV_TAG
Si el contenedor codificado contenía una etiqueta TLV en un contexto no válido, o si la etiqueta proporcionada no es válida o es inadecuada en el contexto en el que se escribe el contenedor nuevo.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si la escritura, el valor excedería el límite de la cantidad máxima de bytes especificada cuando se inicializó el escritor.
WEAVE_ERROR_NO_MEMORY
Si un intento de asignar un búfer de salida falló debido a la falta de memoria.
other
Otros errores de Weave o específicos de la plataforma que muestran las funciones configuradas GetNewBuffer() o FinalizeBuffer(), o la función GetNextBuffer() asociada con el objeto de lector

CopyElement

WEAVE_ERROR CopyElement(
  TLVReader & reader
)

Copia un elemento TLV de un objeto de lector en el escritor.

El método CopyElement() codifica un elemento TLV nuevo cuyo tipo, etiqueta y valor se toman de un objeto TLVReader. Cuando se llama al método, se espera que el objeto lector proporcionado se posicione en el elemento TLV de origen. El elemento recién codificado tendrá el mismo tipo, etiqueta y contenido que el contenedor de entrada. Si el elemento proporcionado es un contenedor TLV (estructura, array o ruta), se copiará todo el contenido del contenedor.

Detalles
Parámetros
[in] reader
Es una referencia a un objeto TLVReader que identifica un elemento TLV precodificado que se debe copiar.
Valores de retorno
WEAVE_NO_ERROR
Si el método tuvo éxito.
WEAVE_ERROR_INCORRECT_STATE
Si el lector proporcionado no está posicionado en un elemento.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Si un escritor de contenedor se abrió en el escritor actual y aún no se cerró.
WEAVE_ERROR_TLV_UNDERRUN
Si la codificación TLV subyacente asociada con el lector proporcionado finaliza de forma prematura.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Si el lector proporcionado encontró un tipo de elemento TLV no válido o no compatible,
WEAVE_ERROR_INVALID_TLV_TAG
Si el lector proporcionado encontró una etiqueta TLV en un contexto no válido, o si la etiqueta proporcionada no es válida o es inapropiada en el contexto en el que se escribe el contenedor nuevo.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si la escritura, el valor excedería el límite de la cantidad máxima de bytes especificada cuando se inicializó el escritor.
WEAVE_ERROR_NO_MEMORY
Si un intento de asignar un búfer de salida falló debido a la falta de memoria.
other
Otros errores de Weave o específicos de la plataforma que muestran las funciones configuradas GetNewBuffer() o FinalizeBuffer(), o la función GetNextBuffer() asociada con el objeto de lector

CopyElement

WEAVE_ERROR CopyElement(
  uint64_t tag,
  TLVReader & reader
)

EndContainer

WEAVE_ERROR EndContainer(
  TLVType outerContainerType
)

Completa la codificación de un elemento de contenedor TLV.

El método EndContainer() completa la codificación de un elemento de contenedor TLV y restablece el estado de un objeto TLVWrite después de una llamada anterior a StartContainer(). Por cada llamada a StartContainer(), las aplicaciones deben realizar la llamada correspondiente a EndContainer() y pasar el valor de TLVType que muestra la llamada StartContainer(). Cuando se muestra EndContainer(), el objeto writer se puede usar para escribir elementos TLV adicionales que siguen al elemento contenedor.

Detalles
Parámetros
[in] outerContainerType
El valor TLVType que mostró el método StartContainer().
Valores de retorno
WEAVE_NO_ERROR
Si el método tuvo éxito.
WEAVE_ERROR_INCORRECT_STATE
Si no se realizó la llamada a StartContainer() correspondiente.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Si un escritor de contenedor se abrió en el escritor actual y aún no se cerró.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si la escritura, el valor excedería el límite de la cantidad máxima de bytes especificada cuando se inicializó el escritor.
WEAVE_ERROR_NO_MEMORY
Si un intento de asignar un búfer de salida falló debido a la falta de memoria.
other
Otros errores de Weave o específicos de la plataforma que muestran las funciones configuradas GetNewBuffer() o FinalizeBuffer()

Finalizar

WEAVE_ERROR Finalize(
  void
)

Termina de escribir una codificación TLV.

El método Finalize() completa el proceso de escritura de una codificación TLV en el búfer de salida subyacente. La aplicación debe llamar al método antes de que use el contenido del búfer. Solo se puede llamar a Finalize() cuando no hay escritores de contenedor abiertos para el escritor actual. (Consulta OpenContainer()).

Detalles
Valores de retorno
WEAVE_NO_ERROR
Si la codificación se finalizó correctamente.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Si un escritor de contenedor se abrió en el escritor actual y aún no se cerró.
other
Otros errores de Weave o específicos de la plataforma que muestra la función FinalizeBuffer() configurada.

GetContainerType

TLVType GetContainerType(
  void
) const 

Muestra el tipo de contenedor en el que TLVWriter está escribiendo actualmente.

El método GetContainerType() muestra el tipo de contenedor TLV en el que el TLVWriter escribe actualmente. Si TLVWriter no escribe elementos dentro de un contenedor (es decir, si escribe en el nivel más externo de una codificación), el método muestra kTLVType_NotSpecify.

Detalles
Resultado que se muestra
El TLVType del contenedor actual o kTLVType_NotSpecify si el TLVWriter no escribe elementos dentro de un contenedor.

GetLengthWritten

uint32_t GetLengthWritten(
  void
)

Muestra la cantidad total de bytes escritos desde que se inicializó el escritor.

Detalles
Resultado que se muestra
Cantidad total de bytes escritos desde que se inicializó el escritor.

Init

void Init(
  uint8_t *buf,
  uint32_t maxLen
)

Inicializa un objeto TLVWriter para escribir en un solo búfer de salida.

Detalles
Parámetros
[in] buf
Un puntero para el búfer en el que se debe escribir TLV.
[in] maxLen
La cantidad máxima de bytes que se deben escribir en el búfer de salida.

Init

void Init(
  PacketBuffer *buf,
  uint32_t maxLen
)

Inicializa un objeto TLVWriter para escribir en un solo agrupador.

La escritura comienza inmediatamente después del último byte de datos existentes en el búfer suministrado.

Detalles
Parámetros
[in] buf
Es un puntero a un PackageBuffer en el que se debe escribir TLV.
[in] maxLen
La cantidad máxima de bytes que se deben escribir en el búfer de salida.

Init

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

Inicializa un objeto TLVWriter para escribir en uno o más paquetesBuffers.

La escritura comienza inmediatamente después del último byte de datos existentes en el búfer especificado. Si allowDiscontiguousBuffers es verdadero, se asignarán paquetesBuffers adicionales y se encadenarán al búfer proporcionado según sea necesario para adaptarse a la cantidad de datos escritos. Si el búfer de salida especificado ya es la cabeza de una cadena de búferes, la salida se escribirá en los búferes posteriores de la cadena antes de asignar cualquier búfer nuevo.

Detalles
Parámetros
[in] buf
Es un puntero a un packageBuffer en el que se deben escribir los datos TLV.
[in] maxLen
La cantidad máxima de bytes que se deben escribir en los búferes de salida.
[in] allowDiscontiguousBuffers
Si es verdadero, escribe datos en una cadena de PacketBuffers y asigna búferes nuevos según sea necesario para almacenar los datos escritos. Si es falso, la escritura fallará y se mostrará WEAVE_ERROR_BUFFER_TOO_SMALL si los datos escritos superan el espacio disponible en el búfer de salida inicial.

InitMalloced

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

Inicializa un objeto TLVWriter para escribir en un búfer dinámico.

Detalles
Parámetros
[in] buf
Una referencia a un puntero que recibirá el búfer asignado.
[in] maxLen
La cantidad máxima de bytes que se deben escribir en el búfer de salida.
[in] initialBufSize
La cantidad inicial de bytes que se deben asignar al búfer.

OpenContainer

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

Inicializa un objeto TLVWriter nuevo para escribir los miembros de un elemento de contenedor TLV.

El método OpenContainer() se usa para escribir elementos de contenedor TLV (estructuras, arrays o rutas) en una codificación. El método toma el tipo y la etiqueta (si los hay) del contenedor nuevo, y una referencia a un objeto de escritor nuevo (el escritor del contenedor) que se inicializará para escribir los elementos del contenedor. Las aplicaciones escriben los miembros del contenedor nuevo con el escritor del contenedor y, luego, llaman a CloseContainer() para completar la codificación del contenedor.

Mientras el escritor del contenedor esté abierto, las aplicaciones no deben hacer llamadas ni alterar el estado de este escritor.

El escritor del contenedor hereda varias propiedades de configuración del escritor superior. Debes realizar las siguientes acciones:

  • El ID de perfil implícito (ImplicitProfileId)
  • El puntero de datos de la aplicación (AppData)
  • Los punteros de las funciones GetNewBuffer y FinalizeBuffer

Detalles
Parámetros
[in] tag
La etiqueta TLV que se codificará con el contenedor, o AnonymousTag si el contenedor se debe codificar sin una etiqueta. Los valores de las etiquetas deben construirse con una de las funciones de definición de etiquetas: ProfileTag(), ContextTag() o CommonTag().
[in] containerType
El tipo de contenedor que se codificará. Debe ser kTLVType_Structure, kTLVType_Array o kTLVType_Path.
[out] containerWriter
Una referencia a un objeto TLVWriter que se inicializará para escribir los miembros del elemento de contenedor nuevo. Todos los datos asociados con el objeto suministrado se reemplazan.
Valores de retorno
WEAVE_NO_ERROR
Si el método tuvo éxito.
WEAVE_ERROR_WRONG_TLV_TYPE
Si el valor especificado para containerType es incorrecto.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Si un escritor de contenedor se abrió en el escritor actual y aún no se cerró.
WEAVE_ERROR_INVALID_TLV_TAG
Si el valor especificado de la etiqueta no es válido o es inapropiado en el contexto en el que se escribe el valor.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si la escritura, el valor excedería el límite de la cantidad máxima de bytes especificada cuando se inicializó el escritor.
WEAVE_ERROR_NO_MEMORY
Si un intento de asignar un búfer de salida falló debido a la falta de memoria.
other
Otros errores de Weave o específicos de la plataforma que muestran las funciones configuradas GetNewBuffer() o FinalizeBuffer()

Put

WEAVE_ERROR Put(
  uint64_t tag,
  int8_t v
)

Codifica un valor de número entero con firma TLV.

Esta es una función de miembro sobrecargada, proporcionada para mayor comodidad. Difiere de la función anterior solo en los argumentos que acepta.

Detalles
Parámetros
[in] tag
La etiqueta TLV que se codificará con el valor, o AnonymousTag si el valor se debe codificar sin una etiqueta. Los valores de las etiquetas deben construirse con una de las funciones de definición de etiquetas: ProfileTag(), ContextTag() o CommonTag().
[in] v
Valor que se va a codificar
Valores de retorno
WEAVE_NO_ERROR
Si el método tuvo éxito.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Si un escritor de contenedor se abrió en el escritor actual y aún no se cerró.
WEAVE_ERROR_INVALID_TLV_TAG
Si el valor especificado de la etiqueta no es válido o es inapropiado en el contexto en el que se escribe el valor.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si la escritura, el valor excedería el límite de la cantidad máxima de bytes especificada cuando se inicializó el escritor.
WEAVE_ERROR_NO_MEMORY
Si un intento de asignar un búfer de salida falló debido a la falta de memoria.
other
Otros errores de Weave o específicos de la plataforma que muestran las funciones configuradas GetNewBuffer() o FinalizeBuffer()

Put

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

Codifica un valor de número entero con firma TLV.

Esta es una función de miembro sobrecargada, proporcionada para mayor comodidad. Difiere de la función anterior solo en los argumentos que acepta.

Detalles
Parámetros
[in] tag
La etiqueta TLV que se codificará con el valor, o AnonymousTag si el valor se debe codificar sin una etiqueta. Los valores de las etiquetas deben construirse con una de las funciones de definición de etiquetas: ProfileTag(), ContextTag() o CommonTag().
[in] v
Valor que se va a codificar
[in] preserveSize
Es verdadero si el valor debe codificarse en la misma cantidad de bytes que el tipo de entrada. Es falso si el valor se debe codificar en la cantidad mínima de bytes necesaria para representar el valor. Nota: Se recomienda encarecidamente que las aplicaciones establezcan este parámetro como falso.
Valores de retorno
WEAVE_NO_ERROR
Si el método tuvo éxito.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Si un escritor de contenedor se abrió en el escritor actual y aún no se cerró.
WEAVE_ERROR_INVALID_TLV_TAG
Si el valor especificado de la etiqueta no es válido o es inapropiado en el contexto en el que se escribe el valor.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si la escritura, el valor excedería el límite de la cantidad máxima de bytes especificada cuando se inicializó el escritor.
WEAVE_ERROR_NO_MEMORY
Si un intento de asignar un búfer de salida falló debido a la falta de memoria.
other
Otros errores de Weave o específicos de la plataforma que muestran las funciones configuradas GetNewBuffer() o FinalizeBuffer()

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 un valor de número entero sin firma TLV.

Esta es una función de miembro sobrecargada, proporcionada para mayor comodidad. Difiere de la función anterior solo en los argumentos que acepta.

Detalles
Parámetros
[in] tag
La etiqueta TLV que se codificará con el valor, o AnonymousTag si el valor se debe codificar sin una etiqueta. Los valores de las etiquetas deben construirse con una de las funciones de definición de etiquetas: ProfileTag(), ContextTag() o CommonTag().
[in] v
Valor que se va a codificar
Valores de retorno
WEAVE_NO_ERROR
Si el método tuvo éxito.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Si un escritor de contenedor se abrió en el escritor actual y aún no se cerró.
WEAVE_ERROR_INVALID_TLV_TAG
Si el valor especificado de la etiqueta no es válido o es inapropiado en el contexto en el que se escribe el valor.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si la escritura, el valor excedería el límite de la cantidad máxima de bytes especificada cuando se inicializó el escritor.
WEAVE_ERROR_NO_MEMORY
Si un intento de asignar un búfer de salida falló debido a la falta de memoria.
other
Otros errores de Weave o específicos de la plataforma que muestran las funciones configuradas GetNewBuffer() o FinalizeBuffer()

Put

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

Codifica un valor de número entero sin firma TLV.

Esta es una función de miembro sobrecargada, proporcionada para mayor comodidad. Difiere de la función anterior solo en los argumentos que acepta.

Detalles
Parámetros
[in] tag
La etiqueta TLV que se codificará con el valor, o AnonymousTag si el valor se debe codificar sin una etiqueta. Los valores de las etiquetas deben construirse con una de las funciones de definición de etiquetas: ProfileTag(), ContextTag() o CommonTag().
[in] v
Valor que se va a codificar
[in] preserveSize
Es verdadero si el valor debe codificarse en la misma cantidad de bytes que el tipo de entrada. Es falso si el valor se debe codificar en la cantidad mínima de bytes necesaria para representar el valor. Nota: Se recomienda encarecidamente que las aplicaciones establezcan este parámetro como falso.
Valores de retorno
WEAVE_NO_ERROR
Si el método tuvo éxito.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Si un escritor de contenedor se abrió en el escritor actual y aún no se cerró.
WEAVE_ERROR_INVALID_TLV_TAG
Si el valor especificado de la etiqueta no es válido o es inapropiado en el contexto en el que se escribe el valor.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si la escritura, el valor excedería el límite de la cantidad máxima de bytes especificada cuando se inicializó el escritor.
WEAVE_ERROR_NO_MEMORY
Si un intento de asignar un búfer de salida falló debido a la falta de memoria.
other
Otros errores de Weave o específicos de la plataforma que muestran las funciones configuradas GetNewBuffer() o FinalizeBuffer()

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 un valor de punto flotante TLV.

Esta es una función de miembro sobrecargada, proporcionada para mayor comodidad. Difiere de la función anterior solo en los argumentos que acepta.

Detalles
Parámetros
[in] tag
La etiqueta TLV que se codificará con el valor, o AnonymousTag si el valor se debe codificar sin una etiqueta. Los valores de las etiquetas deben construirse con una de las funciones de definición de etiquetas: ProfileTag(), ContextTag() o CommonTag().
[in] v
Valor que se va a codificar
Valores de retorno
WEAVE_NO_ERROR
Si el método tuvo éxito.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Si un escritor de contenedor se abrió en el escritor actual y aún no se cerró.
WEAVE_ERROR_INVALID_TLV_TAG
Si el valor especificado de la etiqueta no es válido o es inapropiado en el contexto en el que se escribe el valor.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si la escritura, el valor excedería el límite de la cantidad máxima de bytes especificada cuando se inicializó el escritor.
WEAVE_ERROR_NO_MEMORY
Si un intento de asignar un búfer de salida falló debido a la falta de memoria.
other
Otros errores de Weave o específicos de la plataforma que muestran las funciones configuradas GetNewBuffer() o FinalizeBuffer()

PutBoolean

WEAVE_ERROR PutBoolean(
  uint64_t tag,
  bool v
)

Codifica un valor booleano TLV.

Detalles
Parámetros
[in] tag
La etiqueta TLV que se codificará con el valor, o AnonymousTag si el valor se debe codificar sin una etiqueta. Los valores de las etiquetas deben construirse con una de las funciones de definición de etiquetas: ProfileTag(), ContextTag() o CommonTag().
[in] v
Valor que se va a codificar
Valores de retorno
WEAVE_NO_ERROR
Si el método tuvo éxito.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Si un escritor de contenedor se abrió en el escritor actual y aún no se cerró.
WEAVE_ERROR_INVALID_TLV_TAG
Si el valor especificado de la etiqueta no es válido o es inapropiado en el contexto en el que se escribe el valor.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si la escritura, el valor excedería el límite de la cantidad máxima de bytes especificada cuando se inicializó el escritor.
WEAVE_ERROR_NO_MEMORY
Si un intento de asignar un búfer de salida falló debido a la falta de memoria.
other
Otros errores de Weave o específicos de la plataforma que muestran las funciones configuradas GetNewBuffer() o FinalizeBuffer()

PutBytes

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

Codifica un valor de string de bytes TLV.

Detalles
Parámetros
[in] tag
La etiqueta TLV que se codificará con el valor, o AnonymousTag si el valor se debe codificar sin una etiqueta. Los valores de las etiquetas deben construirse con una de las funciones de definición de etiquetas: ProfileTag(), ContextTag() o CommonTag().
[in] buf
Un puntero para un búfer que contiene la cadena de bytes que se codificará.
[in] len
La cantidad de bytes que se codificarán.
Valores de retorno
WEAVE_NO_ERROR
Si el método tuvo éxito.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Si un escritor de contenedor se abrió en el escritor actual y aún no se cerró.
WEAVE_ERROR_INVALID_TLV_TAG
Si el valor especificado de la etiqueta no es válido o es inapropiado en el contexto en el que se escribe el valor.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si la escritura, el valor excedería el límite de la cantidad máxima de bytes especificada cuando se inicializó el escritor.
WEAVE_ERROR_NO_MEMORY
Si un intento de asignar un búfer de salida falló debido a la falta de memoria.
other
Otros errores de Weave o específicos de la plataforma que muestran las funciones configuradas GetNewBuffer() o FinalizeBuffer()

PutNull

WEAVE_ERROR PutNull(
  uint64_t tag
)

Codifica un valor nulo de TLV.

Detalles
Parámetros
[in] tag
La etiqueta TLV que se codificará con el valor, o AnonymousTag si el valor se debe codificar sin una etiqueta. Los valores de las etiquetas deben construirse con una de las funciones de definición de etiquetas: ProfileTag(), ContextTag() o CommonTag().
Valores de retorno
WEAVE_NO_ERROR
Si el método tuvo éxito.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Si un escritor de contenedor se abrió en el escritor actual y aún no se cerró.
WEAVE_ERROR_INVALID_TLV_TAG
Si el valor especificado de la etiqueta no es válido o es inapropiado en el contexto en el que se escribe el valor.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si la escritura, el valor excedería el límite de la cantidad máxima de bytes especificada cuando se inicializó el escritor.
WEAVE_ERROR_NO_MEMORY
Si un intento de asignar un búfer de salida falló debido a la falta de memoria.
other
Otros errores de Weave o específicos de la plataforma que muestran las funciones configuradas GetNewBuffer() o FinalizeBuffer()

PutPreEncodedContainer

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

Codifica un elemento de contenedor TLV de un conjunto precodificado de elementos miembros.

El método PutPreEncodedContainer() codifica un nuevo elemento de contenedor TLV (una estructura, un array o una ruta) que contiene un conjunto de elementos miembros tomados de un búfer previamente codificado. Se espera que el búfer de entrada contenga cero o más elementos TLV con codificación completa, con etiquetas que cumplan con las reglas asociadas al tipo de contenedor especificado (p.ej., los miembros de la estructura deben tener etiquetas, mientras que los miembros del array no deben tener etiquetas).

El método codifica la totalidad del elemento contenedor en una llamada. Cuando se muestra PutPreEncodedContainer(), el objeto writer se puede usar para escribir elementos TLV adicionales después del elemento de contenedor.

Detalles
Parámetros
[in] tag
La etiqueta TLV que se codificará con el contenedor, o AnonymousTag si el contenedor se debe codificar sin una etiqueta. Los valores de las etiquetas deben construirse con una de las funciones de definición de etiquetas: ProfileTag(), ContextTag() o CommonTag().
[in] containerType
El tipo de contenedor que se codificará. Debe ser kTLVType_Structure, kTLVType_Array o kTLVType_Path.
[in] data
Un puntero para un búfer que contiene cero o más elementos TLV codificados que se convertirán en los miembros del contenedor nuevo.
[in] dataLen
La cantidad de bytes en el búfer data.
Valores de retorno
WEAVE_NO_ERROR
Si el método tuvo éxito.
WEAVE_ERROR_WRONG_TLV_TYPE
Si el valor especificado para containerType es incorrecto.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Si un escritor de contenedor se abrió en el escritor actual y aún no se cerró.
WEAVE_ERROR_INVALID_TLV_TAG
Si el valor especificado de la etiqueta no es válido o es inapropiado en el contexto en el que se escribe el valor.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si la escritura, el valor excedería el límite de la cantidad máxima de bytes especificada cuando se inicializó el escritor.
WEAVE_ERROR_NO_MEMORY
Si un intento de asignar un búfer de salida falló debido a la falta de memoria.
other
Otros errores de Weave o específicos de la plataforma que muestran las funciones configuradas GetNewBuffer() o FinalizeBuffer()

PutString

WEAVE_ERROR PutString(
  uint64_t tag,
  const char *buf
)

Codifica un valor de cadena UTF8 TLV.

Detalles
Parámetros
[in] tag
La etiqueta TLV que se codificará con el valor, o AnonymousTag si el valor se debe codificar sin una etiqueta. Los valores de las etiquetas deben construirse con una de las funciones de definición de etiquetas: ProfileTag(), ContextTag() o CommonTag().
[in] buf
Un puntero para la cadena UTF-8 terminada en nulo que se codificará.
Valores de retorno
WEAVE_NO_ERROR
Si el método tuvo éxito.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Si un escritor de contenedor se abrió en el escritor actual y aún no se cerró.
WEAVE_ERROR_INVALID_TLV_TAG
Si el valor especificado de la etiqueta no es válido o es inapropiado en el contexto en el que se escribe el valor.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si la escritura, el valor excedería el límite de la cantidad máxima de bytes especificada cuando se inicializó el escritor.
WEAVE_ERROR_NO_MEMORY
Si un intento de asignar un búfer de salida falló debido a la falta de memoria.
other
Otros errores de Weave o específicos de la plataforma que muestran las funciones configuradas GetNewBuffer() o FinalizeBuffer()

PutString

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

Codifica un valor de cadena UTF8 TLV.

Detalles
Parámetros
[in] tag
La etiqueta TLV que se codificará con el valor, o AnonymousTag si el valor se debe codificar sin una etiqueta. Los valores de las etiquetas deben construirse con una de las funciones de definición de etiquetas: ProfileTag(), ContextTag() o CommonTag().
[in] buf
Un puntero para la cadena UTF-8 que se codificará.
[in] len
Longitud (en bytes) de la cadena que se codificará.
Valores de retorno
WEAVE_NO_ERROR
Si el método tuvo éxito.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Si un escritor de contenedor se abrió en el escritor actual y aún no se cerró.
WEAVE_ERROR_INVALID_TLV_TAG
Si el valor especificado de la etiqueta no es válido o es inapropiado en el contexto en el que se escribe el valor.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si la escritura, el valor excedería el límite de la cantidad máxima de bytes especificada cuando se inicializó el escritor.
WEAVE_ERROR_NO_MEMORY
Si un intento de asignar un búfer de salida falló debido a la falta de memoria.
other
Otros errores de Weave o específicos de la plataforma que muestran las funciones configuradas GetNewBuffer() o FinalizeBuffer()

PutStringF

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

Codifica el resultado de la cadena con el formato del elemento TLV.

PutStringF es un análogo de un sprintf en el que la salida se almacena en un elemento TLV en lugar de un búfer de caracteres. Cuando la funcionalidad printf extendida está disponible, la función puede enviar la cadena de resultados a un almacenamiento subyacente discontinuo. La implementación admite las siguientes mejoras de print:

La plataforma proporciona un vcbprintf basado en devolución de llamada que permite llamar a una devolución de llamada personalizada en lugar de putchar.

La plataforma proporciona una variante de vsnprintf llamada vsnprintf_ex, que se comporta exactamente como vsnprintf, excepto que tiene disposiciones para omitir los primeros n caracteres del resultado.

Ten en cuenta que, si bien la función basada en devolución de llamada puede ser la más simple y usar la menor cantidad de código, la variedad de funciones vsprintf_ex consumirá menos pila.

Si ninguna de las opciones anteriores está disponible, pero la plataforma proporciona malloc, la función asignará un búfer temporal para contener el resultado. Cuando la plataforma no proporciona mejoras a la familia printf ni malloc, el resultado se trunca de modo que se ajuste al estado continuo en el almacenamiento TLV actual

Detalles
Parámetros
[in] tag
La etiqueta TLV que se codificará con el valor, o AnonymousTag si el valor se debe codificar sin una etiqueta. Los valores de las etiquetas deben construirse con una de las funciones de definición de etiquetas: ProfileTag(), ContextTag() o CommonTag().
[in] fmt
Es la cadena de formato que se usa para dar formato a la lista de argumentos. Sigue las mismas reglas y sintaxis que la string de formato para la familia de funciones printf.
[in] ...
Lista de argumentos a los que se debe formatear en el valor de salida según fmt.
Valores de retorno
WEAVE_NO_ERROR
Si el método tuvo éxito.
other
Si las llamadas subyacentes a los métodos WriteElementHead o GetNewBuffer de TLVWriter WriteElementHead o GetNewBuffer fallan, su error se reenvía de inmediato a la pila de llamadas.

StartContainer

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

Comienza a codificar un elemento de contenedor TLV nuevo.

El método StartContainer() se usa para escribir elementos de contenedor TLV (estructuras, arrays o rutas) en una codificación. El método toma el tipo y la etiqueta (si corresponde) del contenedor nuevo y una referencia a un valor TLVType que se usará para guardar el contexto actual del escritor mientras se usa para escribir el contenedor.

Una vez que se muestra el método StartContainer(), la aplicación debe usar el objeto TLVWriter actual para escribir los elementos del contenedor. Cuando finaliza, la aplicación debe llamar al método EndContainer() para finalizar la codificación del contenedor.

Detalles
Parámetros
[in] tag
La etiqueta TLV que se codificará con el contenedor, o AnonymousTag si el contenedor se debe codificar sin una etiqueta. Los valores de las etiquetas deben construirse con una de las funciones de definición de etiquetas: ProfileTag(), ContextTag() o CommonTag().
[in] containerType
El tipo de contenedor que se codificará. Debe ser kTLVType_Structure, kTLVType_Array o kTLVType_Path.
[out] outerContainerType
Una referencia a un valor TLVType que recibirá el contexto del escritor.
Valores de retorno
WEAVE_NO_ERROR
Si el método tuvo éxito.
WEAVE_ERROR_WRONG_TLV_TYPE
Si el valor especificado para containerType es incorrecto.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Si un escritor de contenedor se abrió en el escritor actual y aún no se cerró.
WEAVE_ERROR_INVALID_TLV_TAG
Si el valor especificado de la etiqueta no es válido o es inapropiado en el contexto en el que se escribe el valor.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si la escritura, el valor excedería el límite de la cantidad máxima de bytes especificada cuando se inicializó el escritor.
WEAVE_ERROR_NO_MEMORY
Si un intento de asignar un búfer de salida falló debido a la falta de memoria.
other
Otros errores de Weave o específicos de la plataforma que muestran las funciones configuradas GetNewBuffer() o FinalizeBuffer()

StartPutBytes

WEAVE_ERROR StartPutBytes(
  uint64_t tag,
  uint32_t totalLen
)

Codifica una cadena de bytes TLV en varios fragmentos.

Se debe usar con ContinuePutBytes.

Detalles
Parámetros
[in] tag
La etiqueta TLV que se codificará con el valor, o AnonymousTag si el valor se debe codificar sin una etiqueta. Los valores de las etiquetas deben construirse con una de las funciones de definición de etiquetas: ProfileTag(), ContextTag() o CommonTag().
[in] totalLen
La cantidad total de bytes que se codificarán.
Valores de retorno
WEAVE_NO_ERROR
Si el método tuvo éxito.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Si un escritor de contenedor se abrió en el escritor actual y aún no se cerró.
WEAVE_ERROR_INVALID_TLV_TAG
Si el valor especificado de la etiqueta no es válido o es inapropiado en el contexto en el que se escribe el valor.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si la escritura, el valor excedería el límite de la cantidad máxima de bytes especificada cuando se inicializó el escritor.
WEAVE_ERROR_NO_MEMORY
Si un intento de asignar un búfer de salida falló debido a la falta de memoria.
other
Otros errores de Weave o específicos de la plataforma que muestran las funciones configuradas GetNewBuffer() o FinalizeBuffer()

VPutStringF

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

Codifica el resultado de la cadena con el formato del elemento TLV.

PutStringF es un análogo de un sprintf en el que la salida se almacena en un elemento TLV en lugar de un búfer de caracteres. Cuando la funcionalidad printf extendida está disponible, la función puede enviar la cadena de resultados a un almacenamiento subyacente discontinuo. La implementación admite las siguientes mejoras de print:

La plataforma proporciona un vcbprintf basado en devolución de llamada que permite llamar a una devolución de llamada personalizada en lugar de putchar.

La plataforma proporciona una variante de vsnprintf llamada vsnprintf_ex, que se comporta exactamente como vsnprintf, excepto que tiene disposiciones para omitir los primeros n caracteres del resultado.

Ten en cuenta que, si bien la función basada en devolución de llamada puede ser la más simple y usar la menor cantidad de código, la variedad de funciones vsprintf_ex consumirá menos pila.

Si ninguna de las opciones anteriores está disponible, pero la plataforma proporciona malloc, la función asignará un búfer temporal para contener el resultado. Cuando la plataforma no proporciona mejoras a la familia printf ni malloc, el resultado se trunca de modo que se ajuste al estado continuo en el almacenamiento TLV actual

Detalles
Parámetros
[in] tag
La etiqueta TLV que se codificará con el valor, o AnonymousTag si el valor se debe codificar sin una etiqueta. Los valores de las etiquetas deben construirse con una de las funciones de definición de etiquetas: ProfileTag(), ContextTag() o CommonTag().
[in] fmt
Es la cadena de formato que se usa para dar formato a la lista de argumentos. Sigue las mismas reglas y sintaxis que la string de formato para la familia de funciones printf.
[in] ap
Lista de argumentos a los que se debe formatear en el valor de salida según fmt.
Valores de retorno
WEAVE_NO_ERROR
Si el método tuvo éxito.
other
Si las llamadas subyacentes a los métodos WriteElementHead o GetNewBuffer de TLVWriter WriteElementHead o GetNewBuffer fallan, su error se reenvía de inmediato a la pila de llamadas.

Funciones estáticas públicas

FinalizePacketBuffer

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

Una implementación de una función TLVWriter FinalizeBuffer para escribir en una cadena de batchBuffers.

La función FinalizePacketBuffer() realiza la finalización necesaria que se requiere cuando se usa un TLVWriter para escribir en una cadena de batchBuffers. La función está diseñada para usarse junto con la función GetNewPacketBuffer().

Consulta la definición del tipo FinalizeBufferFunct para obtener información adicional sobre la API de la función FinalizePacketBuffer().

GetNewBuffer_Malloced

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

Una implementación de la función GetNewBuffer TLVWriter para escribir en un búfer dinámico.

La función GetNewBuffer_Malloced() proporciona un nuevo espacio de salida a un TLVWriter duplicando el tamaño del búfer dinámico subyacente según sea necesario para almacenar la codificación. La función está diseñada para asignarse al puntero de la función GetNewBuffer TLVWriter.

Consulta la definición del tipo GetNewBufferFunct para obtener más información acerca de la API de la función GetNewBuffer_Malloced().

GetNewPacketBuffer

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

Una implementación de la función GetNewBuffer TLVWriter para escribir en una cadena de batchBuffers.

La función GetNewPacketBuffer() proporciona un nuevo espacio de salida a un TLVWriter mediante la asignación de una cadena de uno o más paquetesBundleBuffers, según sea necesario, para almacenar la codificación. La función está diseñada para asignarse al puntero de la función GetNewBuffer TLVWriter.

Ten en cuenta que, cuando se usa el GetNewPacketBuffer con un TLVWriter, también se debe usar la función FinalizePacketBuffer() correspondiente (o una equivalente) para finalizar la cadena de búferes.

Consulta la definición del tipo GetNewBufferFunct para obtener más información sobre la API de la función GetNewPacketBuffer().

Funciones protegidas

IsCloseContainerReserved

bool IsCloseContainerReserved(
  void
) const 

Determina si el contenedor debe reservar espacio para el símbolo de CloseContainer en el punto de inicio o de apertura del contenedor.

IsContainerOpen

bool IsContainerOpen(
  void
) const 

SetCloseContainerReserved

void SetCloseContainerReserved(
  bool aCloseContainerReserved
)

Establece si el contenedor debe reservar el espacio para el símbolo de CloseContainer en el punto de inicio o de apertura del contenedor.

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
)