Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

nl::Weave::TLV::TLVWriter

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

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

Resumen

TLVWriter implementa un codificador estilo de transmisión de solo reenvío para 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 asociada de los valores y las etiquetas según sea necesario. De manera similar, las aplicaciones pueden codificar tipos de contenedor 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 el resultado 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(*
Función que se usa para realizar la finalización del 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 *
Un campo de puntero que se puede utilizar para datos específicos de la aplicación.
FinalizeBuffer
Un puntero para una función que se llamará cuando 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
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 contenedor TLV de un conjunto codificado previamente de elementos miembros.
CopyContainer(uint64_t tag, const uint8_t *encodedContainer, uint16_t encodedContainerLen)
Codifica un elemento TLV que contiene elementos de un contenedor precodificado.
CopyElement(TLVReader & reader)
Copia un elemento TLV de un objeto lector al 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 dentro del que el 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 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 entero firmado de TLV.
Put(uint64_t tag, int8_t v, bool preserveSize)
Codifica un valor entero firmado de TLV.
Put(uint64_t tag, int16_t v)
Put(uint64_t tag, int16_t v, bool preserveSize)
Put(uint64_t tag, int32_t v)
Put(uint64_t tag, int32_t v, bool preserveSize)
Put(uint64_t tag, int64_t v)
Put(uint64_t tag, int64_t v, bool preserveSize)
Put(uint64_t tag, uint8_t v)
Codifica un valor entero sin firma TLV.
Put(uint64_t tag, uint8_t v, bool preserveSize)
Codifica un valor 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 contenedor TLV de un conjunto codificado previamente de elementos miembros.
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 formato según el formato del elemento TLV.
StartContainer(uint64_t tag, TLVType containerType, TLVType & outerContainerType)
Comienza a codificar un nuevo elemento de contenedor TLV.
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 formato según el formato del elemento TLV.

Funciones estáticas públicas

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

Funciones protegidas

IsCloseContainerReserved(void) const
bool
Determina si el contenedor debe reservar espacio para el símbolo de CloseContainer en el momento de iniciar o abrir el 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 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 realizar la finalización del resultado de un objeto TLVWriter.

Se llama a funciones de este tipo cuando se llama a un método Finalize() de TLVWriter. Se espera que la función realice cualquier limpieza o finalización necesaria para consumir el resultado del objeto de escritura. Entre los ejemplos, se incluyen el registro de la longitud final de la codificación o el cierre de un descriptor de archivos.

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ó a partir de llamadas anteriores a la función GetNewBuffer.
[in,out] bufStart
Un puntero al principio 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 fue exitosa
other
Otros códigos de error de Weave o plataformas específicas que indican que se produjo un error durante la finalización

ObtenerNewBufferFunct

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 con el fin de preparar un nuevo espacio de búfer para que un TLVWriter lo escriba. Cuando se la llama, se espera que la función muestre un puntero a una ubicación de memoria en la que se deben escribir los datos nuevos, junto con una longitud máxima asociada. La función puede proporcionar espacio de escritura asignando un nuevo búfer que contenga 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 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 las llamadas. Este valor se inicializa en 0 antes de la primera llamada.
[in,out] bufStart
Una referencia a un puntero de datos. En la entrada de la función, bufStart apunta al principio del búfer de salida actual. Al salir, se espera que bufStart apunte al principio del nuevo búfer de salida. El nuevo valor del puntero puede ser el mismo que el 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
Una referencia a un número entero sin signo. En la entrada de la función, bufLen contiene la cantidad de bytes del espacio sin usar en el búfer actual. En 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 que se muestran
WEAVE_NO_ERROR
Si la función pudo proporcionar más espacio de búfer para el escritor
other
Otros códigos de error de Weave o específicos de la plataforma indican que se produjo un error que impidió que la función generara espacio adicional en el búfer.

Atributos públicos

DatosDeApp

void * AppData

Un campo de puntero que se puede utilizar para datos específicos de la aplicación.

Búfer de finalización

FinalizeBufferFunct FinalizeBuffer

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

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

Consulta la definición de 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 en NULL (el valor predeterminado), el escritor mostrará un WEAVE_ERROR_NO_MEMORY si los datos de salida exceden el búfer actual.

Una aplicación puede configurar GetNewBuffer en cualquier momento, pero, por lo general, 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.

ID de perfil implícito

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 elemento nuevo coincide con el valor del miembro ImplicitProfileId, el escritor codificará la etiqueta en forma implícita y omitirá el ID de perfil en el proceso.

De forma predeterminada, la propiedad ImplicitProfileId se configura como kProfileIdNotSpecific, lo que le indica al escritor que no emita etiquetas codificadas de forma implícita. Las aplicaciones pueden establecer 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 correspondiente que se configure depende del contexto de la aplicación o el protocolo que se diga.

Atributos protegidos

mBufHandle

uintptr_t mBufHandle

mBufStart

uint8_t * mBufStart

Tipo de contenedor m

TLVType mContainerType

mLensten

uint32_t mLenWritten

Máx. máx.

uint32_t mMaxLen

Remanente

uint32_t mRemainingLen

mWritePoint

uint8_t * mWritePoint

Funciones públicas

Cerrar contenedor

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 superior TLVWriter después de una llamada a OpenContainer(). Por cada llamada a OpenContainer(), las aplicaciones deben realizar una 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 principal para escribir elementos TLV adicionales que aparecen después del elemento de contenedor. En este punto, se debe considerar que el escritor del contenedor proporcionado debe inicializarse y no debe usarse sin inicializarse de nuevo.

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 funciona correctamente
WEAVE_ERROR_INCORRECT_STATE
Si el escritor del contenedor suministrado no está en el estado correcto.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Si otro escritor de contenedores se abrió y no se cerró.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si se hubiera completado la codificación del contenedor, se superaría el límite en el número máximo 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 falta de memoria.
other
Otros errores de Weave o específicos de la plataforma que muestran las funciones configuradas GetNewBuffer() o FinalizeBuffer().

Continuar en bytes

WEAVE_ERROR ContinuePutBytes(
  const uint8_t *buf,
  uint32_t len
)

Codifica un valor de string de bytes TLV.

Se debe usar con Start PutBytes.

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 funciona correctamente
WEAVE_ERROR_TLV_CONTAINER_OPEN
Si un escritor de contenedores se abrió en el escritor actual y aún no se cerró.
WEAVE_ERROR_INVALID_TLV_TAG
El valor de etiqueta especificado no es válido o es inapropiado en el contexto en que se escribe el valor.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si escribe el valor, se superaría 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 falta de memoria.
other
Otros errores de Weave o específicos de la plataforma que muestran las funciones configuradas GetNewBuffer() o FinalizeBuffer().

Copiar contenedor

WEAVE_ERROR CopyContainer(
  TLVReader & container
)

Copia un elemento de contenedor TLV del objeto TLVReader.

CopyContainer() codifica un nuevo elemento de contenedor TLV mediante la copia de un elemento de contenedor codificado previamente que se encuentra en la posición actual de un objeto TLVReader. El método escribe todo el elemento nuevo del contenedor en una llamada y copia el tipo, la etiqueta y los elementos del contenedor de la codificación de origen. Cuando se muestra el método, el objeto de escritura se puede usar para escribir elementos TLV adicionales después del elemento contenedor.

Detalles
Parámetros
[in] container
Una referencia a un objeto TLVReader que identifica el contenedor TLV codificado previamente para copiarse.
Valores que se muestran
WEAVE_NO_ERROR
Si el método funciona correctamente
WEAVE_ERROR_INCORRECT_STATE
Si el lector que se proporcionó no está posicionado en un elemento del contenedor
WEAVE_ERROR_TLV_CONTAINER_OPEN
Si un escritor de contenedores 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 suministrado finalizó antes de tiempo
WEAVE_ERROR_INVALID_TLV_ELEMENT
Si el lector que se proporcionó encontró un tipo de elemento TLV no válido o no compatible.
WEAVE_ERROR_INVALID_TLV_TAG
Si el lector que se proporcionó 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 inapropiada en el contexto en que se escribe el contenedor nuevo.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si escribe el valor, se superaría 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 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 lectura.

Copiar contenedor

WEAVE_ERROR CopyContainer(
  uint64_t tag,
  TLVReader & container
)

Codifica un elemento contenedor TLV de un conjunto codificado previamente de elementos miembros.

El método CopyContainer() codifica un nuevo elemento de contenedor TLV (una estructura, un arreglo 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 codificado recientemente 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 se muestra el método, el objeto de escritura 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 debe codificarse sin una etiqueta. Los valores de las etiquetas se deben crear 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 miembros se deben copiar.
Valores que se muestran
WEAVE_NO_ERROR
Si el método funciona correctamente
WEAVE_ERROR_INCORRECT_STATE
Si el lector que se proporcionó no está posicionado en un elemento del contenedor
WEAVE_ERROR_TLV_CONTAINER_OPEN
Si un escritor de contenedores 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 suministrado finalizó antes de tiempo
WEAVE_ERROR_INVALID_TLV_ELEMENT
Si el lector que se proporcionó encontró un tipo de elemento TLV no válido o no compatible.
WEAVE_ERROR_INVALID_TLV_TAG
Si el lector que se proporcionó encontró una etiqueta TLV en un contexto no válido, o si la etiqueta proporcionada no es válida o inapropiada en el contexto en que se escribe el contenedor nuevo.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si escribe el valor, se superaría 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 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 lectura.

Copiar contenedor

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

Codifica un elemento TLV que contiene elementos de un contenedor precodificado.

El método CopyContainer() codifica un nuevo elemento de contenedor TLV (una estructura, un arreglo o una ruta) que contiene un conjunto de elementos miembros tomados del contenido de un contenedor codificado previamente. Cuando se llama al método, los datos en el búfer de entrada proporcionado se analizan como un elemento contenedor TLV. Se escribe un contenedor nuevo que tiene 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 se muestra el método, el objeto de escritura 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 debe codificarse sin una etiqueta. Los valores de las etiquetas se deben crear con una de las funciones de definición de etiquetas ProfileTag(), ContextTag() o CommonTag().
[in] encodedContainer
Un búfer que contiene un contenedor TLV codificado previamente 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 funciona correctamente
WEAVE_ERROR_TLV_CONTAINER_OPEN
Si un escritor de contenedores 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 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 inapropiada en el contexto en que se escribe el contenedor nuevo.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si escribe el valor, se superaría 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 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 lectura.

Copiar elemento

WEAVE_ERROR CopyElement(
  TLVReader & reader
)

Copia un elemento TLV de un objeto lector al 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 posponga 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, arreglo 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 previamente que se debe copiar.
Valores que se muestran
WEAVE_NO_ERROR
Si el método funciona correctamente
WEAVE_ERROR_INCORRECT_STATE
Si el lector proporcionado no se posiciona en un elemento.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Si un escritor de contenedores 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 suministrado finalizó antes de tiempo
WEAVE_ERROR_INVALID_TLV_ELEMENT
Si el lector que se proporcionó encontró un tipo de elemento TLV no válido o no compatible.
WEAVE_ERROR_INVALID_TLV_TAG
Si el lector que se proporcionó encontró una etiqueta TLV en un contexto no válido, o si la etiqueta proporcionada no es válida o inapropiada en el contexto en que se escribe el contenedor nuevo.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si escribe el valor, se superaría 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 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 lectura.

Copiar elemento

WEAVE_ERROR CopyElement(
  uint64_t tag,
  TLVReader & reader
)

Contenedor final

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 de TLVType que muestra la llamada StartContainer(). Cuando se muestra EndContainer(), el objeto de escritura se puede usar para escribir elementos TLV adicionales que sigan 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 funciona correctamente
WEAVE_ERROR_INCORRECT_STATE
Si no se realizó una llamada StartContainer() correspondiente, haz lo siguiente:
WEAVE_ERROR_TLV_CONTAINER_OPEN
Si un escritor de contenedores se abrió en el escritor actual y aún no se cerró.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si escribe el valor, se superaría 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 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 contenedores abiertos para el escritor actual. (Consulta OpenContainer()).

Detalles
Valores que se muestran
WEAVE_NO_ERROR
Si la codificación se completó correctamente
WEAVE_ERROR_TLV_CONTAINER_OPEN
Si un escritor de contenedores 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 dentro del que el TLVWriter está escribiendo actualmente.

El método GetContainerType() muestra el tipo del contenedor TLV en el que TLVWriter está escribiendo actualmente. Si el TLVWriter no escribe elementos dentro de un contenedor (es decir, si se 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 el TLVWriter no está escribiendo elementos en un contenedor.

GetLengthWritten

uint32_t GetLengthWritten(
  void
)

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

Detalles
Qué muestra
La 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 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 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, los PacketBuffers adicionales se asignarán y encadenarán al búfer proporcionado según sea necesario para acomodar la cantidad de datos escritos. Si el búfer de salida especificado ya es el encabezado de una cadena de búferes, el resultado 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 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 nuevos búferes 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 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 (estructura, arreglos 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 objeto de escritor nuevo (el escritor de contenedores) que se inicializará para escribir los elementos del contenedor. Las aplicaciones escriben los miembros del contenedor nuevo mediante 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 modificar el estado del escritor principal.

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

  • El ID implícito del perfil (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 debe codificarse sin una etiqueta. Los valores de las etiquetas se deben crear 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 nuevo elemento de contenedor. Se reemplazarán todos los datos asociados con el objeto proporcionado.
Valores que se muestran
WEAVE_NO_ERROR
Si el método funciona correctamente
WEAVE_ERROR_WRONG_TLV_TYPE
Si el valor especificado para containerType es incorrecto.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Si un escritor de contenedores se abrió en el escritor actual y aún no se cerró.
WEAVE_ERROR_INVALID_TLV_TAG
El valor de etiqueta especificado no es válido o es inapropiado en el contexto en que se escribe el valor.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si escribe el valor, se superaría 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 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 entero firmado de TLV.

Esta es una función de miembro sobrecargada que se proporciona 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 se deben crear con una de las funciones de definición de etiquetas ProfileTag(), ContextTag() o CommonTag().
[in] v
Valor que se codificará.
Valores que se muestran
WEAVE_NO_ERROR
Si el método funciona correctamente
WEAVE_ERROR_TLV_CONTAINER_OPEN
Si un escritor de contenedores se abrió en el escritor actual y aún no se cerró.
WEAVE_ERROR_INVALID_TLV_TAG
El valor de etiqueta especificado no es válido o es inapropiado en el contexto en que se escribe el valor.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si escribe el valor, se superaría 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 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 entero firmado de TLV.

Esta es una función de miembro sobrecargada que se proporciona 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 se deben crear con una de las funciones de definición de etiquetas ProfileTag(), ContextTag() o CommonTag().
[in] v
Valor que se codificará.
[in] preserveSize
Verdadero si el valor debe codificarse en la misma cantidad de bytes que el tipo de entrada. Falso si el valor debe codificarse en la cantidad mínima de bytes necesarios para representar el valor. Nota: Se recomienda que las aplicaciones establezcan este parámetro en falso.
Valores que se muestran
WEAVE_NO_ERROR
Si el método funciona correctamente
WEAVE_ERROR_TLV_CONTAINER_OPEN
Si un escritor de contenedores se abrió en el escritor actual y aún no se cerró.
WEAVE_ERROR_INVALID_TLV_TAG
El valor de etiqueta especificado no es válido o es inapropiado en el contexto en que se escribe el valor.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si escribe el valor, se superaría 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 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 entero sin firma TLV.

Esta es una función de miembro sobrecargada que se proporciona 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 se deben crear con una de las funciones de definición de etiquetas ProfileTag(), ContextTag() o CommonTag().
[in] v
Valor que se codificará.
Valores que se muestran
WEAVE_NO_ERROR
Si el método funciona correctamente
WEAVE_ERROR_TLV_CONTAINER_OPEN
Si un escritor de contenedores se abrió en el escritor actual y aún no se cerró.
WEAVE_ERROR_INVALID_TLV_TAG
El valor de etiqueta especificado no es válido o es inapropiado en el contexto en que se escribe el valor.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si escribe el valor, se superaría 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 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 entero sin firma TLV.

Esta es una función de miembro sobrecargada que se proporciona 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 se deben crear con una de las funciones de definición de etiquetas ProfileTag(), ContextTag() o CommonTag().
[in] v
Valor que se codificará.
[in] preserveSize
Verdadero si el valor debe codificarse en la misma cantidad de bytes que el tipo de entrada. Falso si el valor debe codificarse en la cantidad mínima de bytes necesarios para representar el valor. Nota: Se recomienda que las aplicaciones establezcan este parámetro en falso.
Valores que se muestran
WEAVE_NO_ERROR
Si el método funciona correctamente
WEAVE_ERROR_TLV_CONTAINER_OPEN
Si un escritor de contenedores se abrió en el escritor actual y aún no se cerró.
WEAVE_ERROR_INVALID_TLV_TAG
El valor de etiqueta especificado no es válido o es inapropiado en el contexto en que se escribe el valor.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si escribe el valor, se superaría 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 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 que se proporciona 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 se deben crear con una de las funciones de definición de etiquetas ProfileTag(), ContextTag() o CommonTag().
[in] v
Valor que se codificará.
Valores que se muestran
WEAVE_NO_ERROR
Si el método funciona correctamente
WEAVE_ERROR_TLV_CONTAINER_OPEN
Si un escritor de contenedores se abrió en el escritor actual y aún no se cerró.
WEAVE_ERROR_INVALID_TLV_TAG
El valor de etiqueta especificado no es válido o es inapropiado en el contexto en que se escribe el valor.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si escribe el valor, se superaría 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 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 se deben crear con una de las funciones de definición de etiquetas ProfileTag(), ContextTag() o CommonTag().
[in] v
Valor que se codificará.
Valores que se muestran
WEAVE_NO_ERROR
Si el método funciona correctamente
WEAVE_ERROR_TLV_CONTAINER_OPEN
Si un escritor de contenedores se abrió en el escritor actual y aún no se cerró.
WEAVE_ERROR_INVALID_TLV_TAG
El valor de etiqueta especificado no es válido o es inapropiado en el contexto en que se escribe el valor.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si escribe el valor, se superaría 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 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 se deben crear 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 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 funciona correctamente
WEAVE_ERROR_TLV_CONTAINER_OPEN
Si un escritor de contenedores se abrió en el escritor actual y aún no se cerró.
WEAVE_ERROR_INVALID_TLV_TAG
El valor de etiqueta especificado no es válido o es inapropiado en el contexto en que se escribe el valor.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si escribe el valor, se superaría 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 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 se deben crear con una de las funciones de definición de etiquetas ProfileTag(), ContextTag() o CommonTag().
Valores que se muestran
WEAVE_NO_ERROR
Si el método funciona correctamente
WEAVE_ERROR_TLV_CONTAINER_OPEN
Si un escritor de contenedores se abrió en el escritor actual y aún no se cerró.
WEAVE_ERROR_INVALID_TLV_TAG
El valor de etiqueta especificado no es válido o es inapropiado en el contexto en que se escribe el valor.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si escribe el valor, se superaría 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 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 contenedor TLV de un conjunto codificado previamente de elementos miembros.

El método PUTPreEncodedContainer() codifica un nuevo elemento de contenedor TLV (una estructura, un arreglo o una ruta) que contiene un conjunto de elementos miembros tomados de un búfer precodificado. 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 hacerlo).

El método codifica la totalidad del elemento contenedor en una llamada. Cuando se muestra PUTPreEncodedContainer(), el objeto de escritura 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 debe codificarse sin una etiqueta. Los valores de las etiquetas se deben crear 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 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 funciona correctamente
WEAVE_ERROR_WRONG_TLV_TYPE
Si el valor especificado para containerType es incorrecto.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Si un escritor de contenedores se abrió en el escritor actual y aún no se cerró.
WEAVE_ERROR_INVALID_TLV_TAG
El valor de etiqueta especificado no es válido o es inapropiado en el contexto en que se escribe el valor.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si escribe el valor, se superaría 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 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 string 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 se deben crear con una de las funciones de definición de etiquetas ProfileTag(), ContextTag() o CommonTag().
[in] buf
Un puntero para la string UTF-8 terminada en null a fin de codificarse.
Valores que se muestran
WEAVE_NO_ERROR
Si el método funciona correctamente
WEAVE_ERROR_TLV_CONTAINER_OPEN
Si un escritor de contenedores se abrió en el escritor actual y aún no se cerró.
WEAVE_ERROR_INVALID_TLV_TAG
El valor de etiqueta especificado no es válido o es inapropiado en el contexto en que se escribe el valor.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si escribe el valor, se superaría 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 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 string 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 se deben crear con una de las funciones de definición de etiquetas ProfileTag(), ContextTag() o CommonTag().
[in] buf
Un puntero para 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 funciona correctamente
WEAVE_ERROR_TLV_CONTAINER_OPEN
Si un escritor de contenedores se abrió en el escritor actual y aún no se cerró.
WEAVE_ERROR_INVALID_TLV_TAG
El valor de etiqueta especificado no es válido o es inapropiado en el contexto en que se escribe el valor.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si escribe el valor, se superaría 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 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 string con formato según el formato del elemento TLV.

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

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 caracteres n del resultado.

Ten en cuenta que, si bien la función basada en devoluciones de llamada puede ser la más simple y usa 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 ninguna mejora a la familia de printf ni al 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 se deben crear con una de las funciones de definición de etiquetas ProfileTag(), ContextTag() o CommonTag().
[in] fmt
La string que se usa 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 debe aplicar formato en el valor de salida según fmt.
Valores que se muestran
WEAVE_NO_ERROR
Si el método funciona correctamente
other
Si las llamadas subyacentes a los métodos WriteElementHead o GetNewBuffer de TLVWriter fallan, su error se reenvía de inmediato a la pila de llamadas.

Contenedor de inicio

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

Comienza a codificar un nuevo elemento de contenedor TLV.

El método StartContainer() se usa para escribir elementos de contenedor TLV (estructura, arrays o rutas de acceso) 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 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 el contenedor debe codificarse sin una etiqueta. Los valores de las etiquetas se deben crear 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 que se muestran
WEAVE_NO_ERROR
Si el método funciona correctamente
WEAVE_ERROR_WRONG_TLV_TYPE
Si el valor especificado para containerType es incorrecto.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Si un escritor de contenedores se abrió en el escritor actual y aún no se cerró.
WEAVE_ERROR_INVALID_TLV_TAG
El valor de etiqueta especificado no es válido o es inapropiado en el contexto en que se escribe el valor.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si escribe el valor, se superaría 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 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 string de bytes TLV en varios fragmentos.

Se debe usar con Continue PutBytes.

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 se deben crear 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 que se muestran
WEAVE_NO_ERROR
Si el método funciona correctamente
WEAVE_ERROR_TLV_CONTAINER_OPEN
Si un escritor de contenedores se abrió en el escritor actual y aún no se cerró.
WEAVE_ERROR_INVALID_TLV_TAG
El valor de etiqueta especificado no es válido o es inapropiado en el contexto en que se escribe el valor.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si escribe el valor, se superaría 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 falta de memoria.
other
Otros errores de Weave o específicos de la plataforma que muestran las funciones configuradas GetNewBuffer() o FinalizeBuffer().

vStringStringF

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

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

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

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 caracteres n del resultado.

Ten en cuenta que, si bien la función basada en devoluciones de llamada puede ser la más simple y usa 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 ninguna mejora a la familia de printf ni al 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 se deben crear con una de las funciones de definición de etiquetas ProfileTag(), ContextTag() o CommonTag().
[in] fmt
La string que se usa 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 debe aplicar formato en el valor de salida según fmt.
Valores que se muestran
WEAVE_NO_ERROR
Si el método funciona correctamente
other
Si las llamadas subyacentes a los métodos WriteElementHead o GetNewBuffer de TLVWriter fallan, su error se reenvía de inmediato a la pila de llamadas.

Funciones estáticas públicas

Finalizar paquete de búfer

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

Implementación de una función FinalizeBuffer TLVWriter 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 se diseñó para utilizarse junto con la función GetNewPacketBuffer().

Consulta la definición de 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
)

Implementación de una función GetNewBuffer de 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 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
)

Implementación de una función GetNewBuffer de TLVWriter para escribir en una cadena de PacketBuffers.

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 PacketBuffers 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 usas GetNewPacketBuffer con un TLVWriter, se debe usar la función FinalizePacketBuffer() (o una equivalente) correspondiente 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

IsCloseContainerReservad

bool IsCloseContainerReserved(
  void
) const 

Determina si el contenedor debe reservar espacio para el símbolo de CloseContainer en el momento de iniciar o abrir el 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 apertura del contenedor.

SetContainerOpen

void SetContainerOpen(
  bool aContainerOpen
)

Escribir datos

WEAVE_ERROR WriteData(
  const uint8_t *p,
  uint32_t len
)

EscribirElementHead

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

Escribir elementos con datos

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