nl::Weave::TLV::TLVWriter

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

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

Resumen

TLVWriter implementa un codificador de estilo de transmisión solo hacia delante para los datos TLV de Weave. Las aplicaciones escriben datos en una codificación llamando a uno de los métodos Put() del escritor y pasando la información del valor y la etiqueta asociada según sea necesario. Del mismo modo, las aplicaciones pueden codificar tipos de contenedores TLV (estructuras, arrays o rutas) 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 la salida a un destino arbitrario, p.ej., un socket o una cola de eventos.

Herencia

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

Atributos públicos

AppData
void *
Un campo de puntero que se puede usar 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á espacio del búfer de salida nuevo a un TLVWriter
ImplicitProfileId
uint32_t
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 a partir de un conjunto de elementos miembros codificados previamente.
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 previamente.
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 único PacketBuffer.
Init(PacketBuffer *buf, uint32_t maxLen, bool allowDiscontiguousBuffers)
void
Inicializa un objeto TLVWriter para escribir en uno o más PacketBuffers.
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 número entero TLV sin firma.
Put(uint64_t tag, uint8_t v, bool preserveSize)
Codifica un número entero TLV sin firma.
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 a partir de un conjunto de elementos miembros codificados previamente.
PutString(uint64_t tag, const char *buf)
Codifica un valor de string UTF8 TLV.
PutString(uint64_t tag, const char *buf, uint32_t len)
Codifica un valor de string UTF8 TLV.
PutStringF(uint64_t tag, const char *fmt, ...)
Codifica el resultado de la string con el formato del elemento TLV.
StartContainer(uint64_t tag, TLVType containerType, TLVType & outerContainerType)
Comienza a codificar un elemento contenedor TLV nuevo.
StartPutBytes(uint64_t tag, uint32_t totalLen)
Codifica una string de bytes TLV en varios fragmentos.
VPutStringF(uint64_t tag, const char *fmt, va_list ap)
Codifica el resultado de la string 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 PacketBuffers.
GetNewBuffer_Malloced(TLVWriter & writer, uintptr_t & bufHandle, uint8_t *& bufStart, uint32_t & bufLen)
Una implementación de una función TLVWriter GetNewBuffer para escribir en un búfer dinámico.
GetNewPacketBuffer(TLVWriter & writer, uintptr_t & bufHandle, uint8_t *& bufStart, uint32_t & bufLen)
Una implementación de una función TLVWriter GetNewBuffer para escribir en una cadena de PacketBuffers.

Funciones protegidas

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

Función que se usa para finalizar el resultado desde un objeto TLVWriter.

Se llama a las 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 necesaria relacionada con el consumo de la salida del objeto del escritor. Algunos ejemplos incluyen, por ejemplo, grabar la longitud final de la codificación o cerrar 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ó mediante 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 al que apunta bufStart.
Valores que se muestran
WEAVE_NO_ERROR
Si la finalización se realizó correctamente.
other
Otros códigos de error específicos de la plataforma o de Weave que indiquen 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 nuevo espacio de búfer de salida a un TLVWriter

Las funciones de este tipo se usan con el fin de preparar un espacio de búfer nuevo para que un TLVWriter escriba. Cuando se llama a la función, se espera que muestre un puntero a una ubicación de memoria en la que se deben escribir datos nuevos, junto con una longitud máxima asociada. La función puede proporcionar espacio de escritura asignando un nuevo búfer para contener los datos o borrando los datos escritos previamente 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
Es 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 al 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 (por ejemplo, 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. En la entrada a la función, bufLen contiene la cantidad de bytes de espacio unused en el búfer actual. Al salir, se espera que bufLen contenga la cantidad máxima de bytes que se pueden escribir en el nuevo búfer de salida.
Valores que se muestran
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 indiquen que se produjo un error que impedía que la función produzca espacio de búfer adicional

Atributos públicos

AppData

void * AppData

Un campo de puntero que se puede usar 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 cuando se llame a su método Finalize(). Las aplicaciones pueden establecer el puntero de la función en cualquier momento antes de llamar a Finalize(). De forma predeterminada, el puntero está configurado 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á espacio del búfer de salida nuevo 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 muestra un WEAVE_ERROR_NO_MEMORY si los datos de salida desbordan el búfer actual.

Una aplicación puede configurar GetNewBuffer en cualquier momento, pero generalmente se establece cuando se inicializa el escritor.

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

ImplicitProfileId

uint32_t ImplicitProfileId

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 nuevo elemento coincide con el valor del miembro de 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 kProfileIdNotRequired, 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 en forma implícita a partir del punto actual de la codificación. El ID de perfil adecuado que se establece generalmente depende del contexto de la aplicación o del protocolo que se diga.

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(). Para cada llamada a OpenContainer(), las aplicaciones deben realizar una llamada correspondiente a CloseContainer() y pasar una referencia al mismo escritor del contenedor 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 contenedor. En este punto, el escritor del contenedor suministrado debe considerarse “desiniciado” y no debe usarse sin una nueva inicialización.

Detalles
Parámetros
[in] containerWriter
Una referencia al objeto TLVWriter que se suministró al método OpenContainer().
Valores que se muestran
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 se abrió otro escritor de contenedores en el escritor de contenedores proporcionado, pero aún no se cerró.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si completar la codificación del contenedor excede el límite de la cantidad máxima de bytes especificado 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 específicos de la plataforma o de Weave que muestran las funciones GetNewBuffer() o FinalizeBuffer() configuradas.

ContinuePutBytes

WEAVE_ERROR ContinuePutBytes(
  const uint8_t *buf,
  uint32_t len
)

Codifica un valor de string de bytes TLV.

Se debe usar con StartPutBytes.

Detalles
Parámetros
[in] buf
Un puntero para un búfer que contiene la string de bytes que se codificará.
[in] len
La cantidad de bytes que se codificarán.
Valores que se muestran
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, pero aún no se cerró.
WEAVE_ERROR_INVALID_TLV_TAG
Si el valor de etiqueta especificado no es válido o es inapropiado en el contexto en el que se escribe el valor.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si escribir el valor excede el límite de la cantidad máxima de bytes especificado 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 específicos de la plataforma o de Weave que muestran las funciones GetNewBuffer() o FinalizeBuffer() configuradas.

CopyContainer

WEAVE_ERROR CopyContainer(
  TLVReader & container
)

Copia un elemento de contenedor TLV del objeto TLVReader.

Para codificar un elemento de contenedor TLV nuevo, CopyContainer() copia un elemento de contenedor codificado con anterioridad ubicado en la posición actual de un objeto TLVReader. El método escribe todo el elemento de contenedor nuevo en una llamada y copia el tipo, la etiqueta y los elementos del contenedor de la codificación de origen. Cuando el método se muestra, el objeto del escritor se puede usar para escribir elementos TLV adicionales después del elemento de contenedor.

Detalles
Parámetros
[in] container
Una referencia a un objeto TLVReader que identifica el contenedor TLV codificado con anterioridad que se copiará.
Valores que se muestran
WEAVE_NO_ERROR
Si el método tuvo éxito.
WEAVE_ERROR_INCORRECT_STATE
Si el lector proporcionado no está posicionado en un elemento contenedor.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Si un escritor de contenedor se abrió en el escritor actual, pero aún no se cerró.
WEAVE_ERROR_TLV_UNDERRUN
Si la codificación TLV subyacente asociada con el lector proporcionado finalizó antes de tiempo.
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 inapropiada en el contexto en el que se escribe el contenedor nuevo.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si escribir el valor excede el límite de la cantidad máxima de bytes especificado 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 específicos de la plataforma o de Weave que muestran las funciones GetNewBuffer() o FinalizeBuffer() configuradas, 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 a partir de un conjunto de elementos miembros codificados previamente.

El método CopyContainer() codifica un nuevo elemento de contenedor de TLV (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 de lector proporcionado se posicione en un elemento contenedor TLV. El contenedor recién codificado tendrá el mismo tipo y los mismos miembros que el contenedor de entrada. La etiqueta del contenedor nuevo se especifica como parámetro de entrada.

Cuando el método se muestra, el objeto del escritor 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 este se debe codificar sin una etiqueta Los valores de etiqueta se deben construir con una de las funciones de definición de etiqueta ProfileTag(), ContextTag() o CommonTag().
[in] container
Una referencia a un objeto TLVReader que identifica un contenedor TLV precodificado cuyo tipo y miembros deben copiarse.
Valores que se muestran
WEAVE_NO_ERROR
Si el método tuvo éxito.
WEAVE_ERROR_INCORRECT_STATE
Si el lector proporcionado no está posicionado en un elemento contenedor.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Si un escritor de contenedor se abrió en el escritor actual, pero aún no se cerró.
WEAVE_ERROR_TLV_UNDERRUN
Si la codificación TLV subyacente asociada con el lector proporcionado finalizó antes de tiempo.
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 escribir el valor excede el límite de la cantidad máxima de bytes especificado 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 específicos de la plataforma o de Weave que muestran las funciones GetNewBuffer() o FinalizeBuffer() configuradas, 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 previamente.

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

Cuando el método se muestra, el objeto del escritor 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 este se debe codificar sin una etiqueta Los valores de etiqueta se deben construir con una de las funciones de definición de etiqueta ProfileTag(), ContextTag() o CommonTag().
[in] encodedContainer
Un búfer que contiene un contenedor TLV codificado con anterioridad cuyo tipo y miembros deben copiarse.
[in] encodedContainerLen
La longitud en bytes del contenedor codificado previamente.
Valores que se muestran
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, pero aún no se cerró.
WEAVE_ERROR_TLV_UNDERRUN
Si el contenedor codificado finalizó de manera prematura.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Si el contenedor codificado contenía un tipo de elemento TLV no válido o no compatible.
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 inapropiada en el contexto en el que se escribe el contenedor nuevo.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si escribir el valor excede el límite de la cantidad máxima de bytes especificado 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 específicos de la plataforma o de Weave que muestran las funciones GetNewBuffer() o FinalizeBuffer() configuradas, 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 nuevo elemento TLV cuyo tipo, etiqueta y valor se toman de un objeto TLVReader. Cuando se llama al método, se espera que el objeto de lector proporcionado se posicione en el elemento TLV de origen. El elemento codificado tendrá el mismo tipo, etiqueta y contenido que el contenedor de entrada. Si el elemento proporcionado es un contenedor de TLV (estructura, array o ruta), se copiará todo el contenido del contenedor.

Detalles
Parámetros
[in] reader
Una referencia a un objeto TLVReader que identifica un elemento TLV codificado con anterioridad que se debe copiar.
Valores que se muestran
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, pero aún no se cerró.
WEAVE_ERROR_TLV_UNDERRUN
Si la codificación TLV subyacente asociada con el lector proporcionado finalizó antes de tiempo.
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 escribir el valor excede el límite de la cantidad máxima de bytes especificado 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 específicos de la plataforma o de Weave que muestran las funciones GetNewBuffer() o FinalizeBuffer() configuradas, 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(). Para cada llamada a StartContainer(), las aplicaciones deben realizar una llamada correspondiente a EndContainer() y pasar el valor TLVType que muestra la llamada StartContainer(). Cuando se muestra EndContainer(), el objeto del escritor se puede usar para escribir elementos TLV adicionales que siguen al elemento del contenedor.

Detalles
Parámetros
[in] outerContainerType
El valor TLVType que mostró el método StartContainer().
Valores que se muestran
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, pero aún no se cerró.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si escribir el valor excede el límite de la cantidad máxima de bytes especificado 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 específicos de la plataforma o de Weave que muestran las funciones GetNewBuffer() o FinalizeBuffer() configuradas.

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 que se muestran
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, pero 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 de TLV en el que TLVWriter está escribiendo en la actualidad. 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_Notspecified.

Detalles
Qué muestra
El TLVType del contenedor actual o kTLVType_Notspecified si TLVWriter no está escribiendo elementos dentro de un contenedor.

GetLengthWritten

uint32_t GetLengthWritten(
  void
)

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

Detalles
Qué 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 único PacketBuffer.

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

Detalles
Parámetros
[in] buf
Un puntero para un PacketBuffer en el que se debe escribir un 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 PacketBuffers.

La escritura comienza inmediatamente después del último byte de datos existentes en el búfer especificado. Si allowDiscontiguousBuffers es verdadero, se asignarán PacketBuffers 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 el encabezado de una cadena de búferes, la salida se escribirá en los búferes posteriores de la cadena antes de que se asignen nuevos búferes.

Detalles
Parámetros
[in] buf
Un puntero para un PacketBuffer en el que se deben escribir los datos de 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á con WEAVE_ERROR_BUFFER_TOO_SMALL si los datos escritos exceden 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
Es 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 del contenedor TLV (estructura, 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 nuevo objeto de escritor (el escritor del contenedor) que se inicializará con el fin de 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 realizar llamadas ni alterar el estado del escritor superior.

El escritor del contenedor hereda varias propiedades de configuración del escritor del superior. que son los siguientes:

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

Detalles
Parámetros
[in] tag
La etiqueta TLV que se codificará con el contenedor o AnonymousTag si este se debe codificar sin una etiqueta Los valores de etiqueta se deben construir con una de las funciones de definición de etiqueta ProfileTag(), ContextTag() o CommonTag().
[in] containerType
Es 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. Se reemplazarán todos los datos asociados con el objeto proporcionado.
Valores que se muestran
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, pero aún no se cerró.
WEAVE_ERROR_INVALID_TLV_TAG
Si el valor de etiqueta especificado no es válido o es inapropiado en el contexto en el que se escribe el valor.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si escribir el valor excede el límite de la cantidad máxima de bytes especificado 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 específicos de la plataforma o de Weave que muestran las funciones GetNewBuffer() o FinalizeBuffer() configuradas.

con prácticas

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 y se proporciona por conveniencia. Se diferencia de la función anterior solo por los argumentos que acepta.

Detalles
Parámetros
[in] tag
La etiqueta TLV que se codificará con el valor o AnonymousTag si este se debe codificar sin una etiqueta Los valores de etiqueta se deben construir con una de las funciones de definición de etiqueta ProfileTag(), ContextTag() o CommonTag().
[in] v
Valor que se va a codificar.
Valores que se muestran
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, pero aún no se cerró.
WEAVE_ERROR_INVALID_TLV_TAG
Si el valor de etiqueta especificado no es válido o es inapropiado en el contexto en el que se escribe el valor.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si escribir el valor excede el límite de la cantidad máxima de bytes especificado 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 específicos de la plataforma o de Weave que muestran las funciones GetNewBuffer() o FinalizeBuffer() configuradas.

con prácticas

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 y se proporciona por conveniencia. Se diferencia de la función anterior solo por los argumentos que acepta.

Detalles
Parámetros
[in] tag
La etiqueta TLV que se codificará con el valor o AnonymousTag si este se debe codificar sin una etiqueta Los valores de etiqueta se deben construir con una de las funciones de definición de etiqueta ProfileTag(), ContextTag() o CommonTag().
[in] v
Valor que se va a codificar.
[in] preserveSize
Es verdadero si el valor se debe codificar en la misma cantidad de bytes que en el tipo de entrada. Es falso si el valor se debe codificar en la cantidad mínima de bytes necesarios para representarlo. Nota: Se recomienda que las aplicaciones establezcan este parámetro en falso.
Valores que se muestran
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, pero aún no se cerró.
WEAVE_ERROR_INVALID_TLV_TAG
Si el valor de etiqueta especificado no es válido o es inapropiado en el contexto en el que se escribe el valor.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si escribir el valor excede el límite de la cantidad máxima de bytes especificado 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 específicos de la plataforma o de Weave que muestran las funciones GetNewBuffer() o FinalizeBuffer() configuradas.

con prácticas

WEAVE_ERROR Put(
  uint64_t tag,
  int16_t v
)

con prácticas

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

con prácticas

WEAVE_ERROR Put(
  uint64_t tag,
  int32_t v
)

con prácticas

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

con prácticas

WEAVE_ERROR Put(
  uint64_t tag,
  int64_t v
)

con prácticas

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

con prácticas

WEAVE_ERROR Put(
  uint64_t tag,
  uint8_t v
)

Codifica un número entero TLV sin firma.

Esta es una función de miembro sobrecargada y se proporciona por conveniencia. Se diferencia de la función anterior solo por los argumentos que acepta.

Detalles
Parámetros
[in] tag
La etiqueta TLV que se codificará con el valor o AnonymousTag si este se debe codificar sin una etiqueta Los valores de etiqueta se deben construir con una de las funciones de definición de etiqueta ProfileTag(), ContextTag() o CommonTag().
[in] v
Valor que se va a codificar.
Valores que se muestran
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, pero aún no se cerró.
WEAVE_ERROR_INVALID_TLV_TAG
Si el valor de etiqueta especificado no es válido o es inapropiado en el contexto en el que se escribe el valor.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si escribir el valor excede el límite de la cantidad máxima de bytes especificado 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 específicos de la plataforma o de Weave que muestran las funciones GetNewBuffer() o FinalizeBuffer() configuradas.

con prácticas

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

Codifica un número entero TLV sin firma.

Esta es una función de miembro sobrecargada y se proporciona por conveniencia. Se diferencia de la función anterior solo por los argumentos que acepta.

Detalles
Parámetros
[in] tag
La etiqueta TLV que se codificará con el valor o AnonymousTag si este se debe codificar sin una etiqueta Los valores de etiqueta se deben construir con una de las funciones de definición de etiqueta ProfileTag(), ContextTag() o CommonTag().
[in] v
Valor que se va a codificar.
[in] preserveSize
Es verdadero si el valor se debe codificar en la misma cantidad de bytes que en el tipo de entrada. Es falso si el valor se debe codificar en la cantidad mínima de bytes necesarios para representarlo. Nota: Se recomienda que las aplicaciones establezcan este parámetro en falso.
Valores que se muestran
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, pero aún no se cerró.
WEAVE_ERROR_INVALID_TLV_TAG
Si el valor de etiqueta especificado no es válido o es inapropiado en el contexto en el que se escribe el valor.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si escribir el valor excede el límite de la cantidad máxima de bytes especificado 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 específicos de la plataforma o de Weave que muestran las funciones GetNewBuffer() o FinalizeBuffer() configuradas.

con prácticas

WEAVE_ERROR Put(
  uint64_t tag,
  uint16_t v
)

con prácticas

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

con prácticas

WEAVE_ERROR Put(
  uint64_t tag,
  uint32_t v
)

con prácticas

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

con prácticas

WEAVE_ERROR Put(
  uint64_t tag,
  uint64_t v
)

con prácticas

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

con prácticas

WEAVE_ERROR Put(
  uint64_t tag,
  float v
)

con prácticas

WEAVE_ERROR Put(
  uint64_t tag,
  double v
)

Codifica un valor de punto flotante TLV.

Esta es una función de miembro sobrecargada y se proporciona por conveniencia. Se diferencia de la función anterior solo por los argumentos que acepta.

Detalles
Parámetros
[in] tag
La etiqueta TLV que se codificará con el valor o AnonymousTag si este se debe codificar sin una etiqueta Los valores de etiqueta se deben construir con una de las funciones de definición de etiqueta ProfileTag(), ContextTag() o CommonTag().
[in] v
Valor que se va a codificar.
Valores que se muestran
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, pero aún no se cerró.
WEAVE_ERROR_INVALID_TLV_TAG
Si el valor de etiqueta especificado no es válido o es inapropiado en el contexto en el que se escribe el valor.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si escribir el valor excede el límite de la cantidad máxima de bytes especificado 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 específicos de la plataforma o de Weave que muestran las funciones GetNewBuffer() o FinalizeBuffer() configuradas.

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 este se debe codificar sin una etiqueta Los valores de etiqueta se deben construir con una de las funciones de definición de etiqueta ProfileTag(), ContextTag() o CommonTag().
[in] v
Valor que se va a codificar.
Valores que se muestran
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, pero aún no se cerró.
WEAVE_ERROR_INVALID_TLV_TAG
Si el valor de etiqueta especificado no es válido o es inapropiado en el contexto en el que se escribe el valor.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si escribir el valor excede el límite de la cantidad máxima de bytes especificado 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 específicos de la plataforma o de Weave que muestran las funciones GetNewBuffer() o FinalizeBuffer() configuradas.

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 este se debe codificar sin una etiqueta Los valores de etiqueta se deben construir con una de las funciones de definición de etiqueta ProfileTag(), ContextTag() o CommonTag().
[in] buf
Un puntero para un búfer que contiene la string de bytes que se codificará.
[in] len
La cantidad de bytes que se codificarán.
Valores que se muestran
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, pero aún no se cerró.
WEAVE_ERROR_INVALID_TLV_TAG
Si el valor de etiqueta especificado no es válido o es inapropiado en el contexto en el que se escribe el valor.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si escribir el valor excede el límite de la cantidad máxima de bytes especificado 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 específicos de la plataforma o de Weave que muestran las funciones GetNewBuffer() o FinalizeBuffer() configuradas.

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 este se debe codificar sin una etiqueta Los valores de etiqueta se deben construir con una de las funciones de definición de etiqueta ProfileTag(), ContextTag() o CommonTag().
Valores que se muestran
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, pero aún no se cerró.
WEAVE_ERROR_INVALID_TLV_TAG
Si el valor de etiqueta especificado no es válido o es inapropiado en el contexto en el que se escribe el valor.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si escribir el valor excede el límite de la cantidad máxima de bytes especificado 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 específicos de la plataforma o de Weave que muestran las funciones GetNewBuffer() o FinalizeBuffer() configuradas.

PutPreEncodedContainer

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

Codifica un elemento de contenedor TLV a partir de un conjunto de elementos miembros codificados previamente.

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 codificados por completo con etiquetas que cumplan con las reglas asociadas con el tipo de contenedor especificado (p.ej., los miembros de estructura deben tener etiquetas, mientras que los miembros del array no deben tenerlas).

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

Detalles
Parámetros
[in] tag
La etiqueta TLV que se codificará con el contenedor o AnonymousTag si este se debe codificar sin una etiqueta Los valores de etiqueta se deben construir con una de las funciones de definición de etiqueta ProfileTag(), ContextTag() o CommonTag().
[in] containerType
Es 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 de elementos TLV más codificados que se convertirán en miembros del contenedor nuevo.
[in] dataLen
La cantidad de bytes en el búfer data.
Valores que se muestran
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, pero aún no se cerró.
WEAVE_ERROR_INVALID_TLV_TAG
Si el valor de etiqueta especificado no es válido o es inapropiado en el contexto en el que se escribe el valor.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si escribir el valor excede el límite de la cantidad máxima de bytes especificado 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 específicos de la plataforma o de Weave que muestran las funciones GetNewBuffer() o FinalizeBuffer() configuradas.

PutString

WEAVE_ERROR PutString(
  uint64_t tag,
  const char *buf
)

Codifica un valor de string UTF8 TLV.

Detalles
Parámetros
[in] tag
La etiqueta TLV que se codificará con el valor o AnonymousTag si este se debe codificar sin una etiqueta Los valores de etiqueta se deben construir con una de las funciones de definición de etiqueta ProfileTag(), ContextTag() o CommonTag().
[in] buf
Un puntero para la string UTF-8 terminada en nulo que se codificará.
Valores que se muestran
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, pero aún no se cerró.
WEAVE_ERROR_INVALID_TLV_TAG
Si el valor de etiqueta especificado no es válido o es inapropiado en el contexto en el que se escribe el valor.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si escribir el valor excede el límite de la cantidad máxima de bytes especificado 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 específicos de la plataforma o de Weave que muestran las funciones GetNewBuffer() o FinalizeBuffer() configuradas.

PutString

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

Codifica un valor de string UTF8 TLV.

Detalles
Parámetros
[in] tag
La etiqueta TLV que se codificará con el valor o AnonymousTag si este se debe codificar sin una etiqueta Los valores de etiqueta se deben construir con una de las funciones de definición de etiqueta ProfileTag(), ContextTag() o CommonTag().
[in] buf
Un puntero a la string UTF-8 que se codificará.
[in] len
Longitud (en bytes) de la string que se codificará.
Valores que se muestran
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, pero aún no se cerró.
WEAVE_ERROR_INVALID_TLV_TAG
Si el valor de etiqueta especificado no es válido o es inapropiado en el contexto en el que se escribe el valor.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si escribir el valor excede el límite de la cantidad máxima de bytes especificado 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 específicos de la plataforma o de Weave que muestran las funciones GetNewBuffer() o FinalizeBuffer() configuradas.

PutStringF

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

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

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

La plataforma proporciona un vcbprintf basado en devoluciones 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 igual que vsnprintf, excepto que tiene disposiciones para omitir los primeros caracteres n 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 no está disponible ninguna de las opciones anteriores, 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 quepa en el estado continuo en el almacenamiento TLV actual

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

StartContainer

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

Comienza a codificar un elemento contenedor TLV nuevo.

El método StartContainer() se usa para escribir elementos del contenedor TLV (estructura, 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.

Cuando se muestra el método StartContainer(), la aplicación debe usar el objeto TLVWriter actual para escribir los elementos del contenedor. Cuando termine, 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 este se debe codificar sin una etiqueta Los valores de etiqueta se deben construir con una de las funciones de definición de etiqueta ProfileTag(), ContextTag() o CommonTag().
[in] containerType
Es el tipo de contenedor que se codificará. Debe ser kTLVType_Structure, kTLVType_Array o kTLVType_Path.
[out] outerContainerType
Es una referencia a un valor TLVType que recibirá el contexto del escritor.
Valores que se muestran
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, pero aún no se cerró.
WEAVE_ERROR_INVALID_TLV_TAG
Si el valor de etiqueta especificado no es válido o es inapropiado en el contexto en el que se escribe el valor.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si escribir el valor excede el límite de la cantidad máxima de bytes especificado 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 específicos de la plataforma o de Weave que muestran las funciones GetNewBuffer() o FinalizeBuffer() configuradas.

StartPutBytes

WEAVE_ERROR StartPutBytes(
  uint64_t tag,
  uint32_t totalLen
)

Codifica una string 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 este se debe codificar sin una etiqueta Los valores de etiqueta se deben construir con una de las funciones de definición de etiqueta ProfileTag(), ContextTag() o CommonTag().
[in] totalLen
La cantidad total de bytes que se codificarán.
Valores que se muestran
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, pero aún no se cerró.
WEAVE_ERROR_INVALID_TLV_TAG
Si el valor de etiqueta especificado no es válido o es inapropiado en el contexto en el que se escribe el valor.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si escribir el valor excede el límite de la cantidad máxima de bytes especificado 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 específicos de la plataforma o de Weave que muestran las funciones GetNewBuffer() o FinalizeBuffer() configuradas.

VPutStringF

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

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

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

La plataforma proporciona un vcbprintf basado en devoluciones 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 igual que vsnprintf, excepto que tiene disposiciones para omitir los primeros caracteres n 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 no está disponible ninguna de las opciones anteriores, 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 quepa en el estado continuo en el almacenamiento TLV actual

Detalles
Parámetros
[in] tag
La etiqueta TLV que se codificará con el valor o AnonymousTag si este se debe codificar sin una etiqueta Los valores de etiqueta se deben construir con una de las funciones de definición de etiqueta ProfileTag(), ContextTag() o CommonTag().
[in] fmt
Es la cadena de formato utilizada para dar formato a la lista de argumentos. Sigue la misma sintaxis y reglas que la string de formato para la familia de funciones printf.
[in] ap
Una lista de argumentos a los que se les dará formato en el valor de salida según fmt.
Valores que se muestran
WEAVE_NO_ERROR
Si el método tuvo éxito.
other
Si las llamadas subyacentes a los métodos WriteElementHead o GetNewBuffer de TLVWriter fallan, su error se reenvía de inmediato por 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 PacketBuffers.

La función FinalizePacketBuffer() realiza la finalización necesaria cuando se usa un TLVWriter para escribir en una cadena de PacketBuffers. La función está diseñada para usarse junto con 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 una función TLVWriter GetNewBuffer 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 TLVWriter GetNewBuffer.

Consulta la definición del tipo GetNewBufferFunct para obtener información adicional sobre 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 una función TLVWriter GetNewBuffer para escribir en una cadena de PacketBuffers.

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

Ten en cuenta que cuando usas GetNewPacketBuffer con un TLVWriter, también se debe usar la función FinalizePacketBuffer() correspondiente (o su equivalente) para finalizar la cadena del búfer.

Consulta la definición del tipo GetNewBufferFunct para obtener información adicional 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 CloseContainer cuando se inicia o abre el contenedor.

IsContainerOpen

bool IsContainerOpen(
  void
) const 

SetCloseContainerReserved

void SetCloseContainerReserved(
  bool aCloseContainerReserved
)

Establece si el contenedor debe reservar el espacio para el símbolo CloseContainer en el punto de inicio o 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
)