nl::Weave::TLV::TLVReader

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

Proporciona un analizador eficiente en cuanto a la memoria para datos codificados en formato TLV de Weave.

Resumen

TLVReader implementa un analizador de “estilo de extracción” de solo hacia adelante para datos de TLV de Weave. El objeto TLVReader funciona como un cursor que se puede usar para iterar en una secuencia de elementos TLV y poder interpretar su contenido. Cuando se posicionan en un elemento, las aplicaciones pueden hacer llamadas a los métodos Get() del lector para consultar el tipo y la etiqueta del elemento actual, y extraer cualquier valor asociado. El método Next() del lector se usa para avanzar de un elemento a otro.

Un objeto TLVReader siempre se posiciona antes, en o después de un elemento TLV. Cuando se inicializa por primera vez, un TLVReader se posiciona inmediatamente antes del primer elemento de la codificación. Para comenzar a leer, una aplicación debe realizar una llamada inicial al método Next() para posicionar el lector en el primer elemento. Cuando se encuentra un elemento de contenedor, ya sea una estructura, un array o una ruta, se pueden usar los métodos OpenContainer() o EnterContainer() para iterar en el contenido del contenedor.

Cuando el lector llega al final de una codificación TLV, o al último elemento dentro de un contenedor, señala la aplicación con un error WEAVE_END_OF_TLV del método Next(). El lector seguirá mostrando WEAVE_END_OF_TLV hasta que se vuelva a inicializar o hasta que se salga del contenedor actual (a través de CloseContainer() / ExitContainer()).

Un objeto TLVReader puede analizar datos directamente desde un búfer de entrada fijo o desde una cadena de uno o más paquetesBuffers. Además, las aplicaciones pueden proporcionar una función GetNextBuffer para enviar datos al lector desde una fuente arbitraria, p.ej., un socket o un puerto en serie.

Herencia

Subclases conocidas directas:
  nl::Weave::Profiles::DataManagement_Current::CircularEventReader
  nl::Weave::TLV::CircularTLVReader

Tipos públicos

GetNextBufferFunct)(TLVReader &reader, uintptr_t &bufHandle, const uint8_t *&bufStart, uint32_t &bufLen) WEAVE_ERROR(*
Una función que se puede usar para recuperar datos TLV adicionales que se analizarán.

Atributos públicos

AppData
void *
Es un campo de puntero que puede usarse para datos específicos de la aplicación.
GetNextBuffer
Un puntero para una función que producirá datos de entrada para el objeto TLVReader.
ImplicitProfileId
uint32_t
El ID de perfil que se usará para las etiquetas de perfil codificadas de forma implícita.

Atributos protegidos

mBufEnd
const uint8_t *
mBufHandle
uintptr_t
mContainerType
mControlByte
uint16_t
mElemLenOrVal
uint64_t
mElemTag
uint64_t
mLenRead
uint32_t
mMaxLen
uint32_t
mReadPoint
const uint8_t *

Funciones públicas

CloseContainer(TLVReader & containerReader)
Completa la lectura de un contenedor TLV después de una llamada a OpenContainer().
DupBytes(uint8_t *& buf, uint32_t & dataLen)
Asigna y muestra un búfer que contiene el valor del byte actual o la cadena UTF8.
DupString(char *& buf)
Asigna y muestra un búfer que contiene el valor terminado en nulo del byte actual o la string UTF8.
EnterContainer(TLVType & outerContainerType)
Prepara un objeto TLVReader para leer los miembros del elemento de contenedor TLV.
ExitContainer(TLVType outerContainerType)
Completa la lectura de un contenedor TLV y prepara un objeto TLVReader para leer elementos después del contenedor.
Get(bool & v)
Obtén el valor del elemento actual como un tipo booleano.
Get(int8_t & v)
Obtén el valor del elemento actual como un número entero firmado de 8 bits.
Get(int16_t & v)
Obtén el valor del elemento actual como un número entero firmado de 16 bits.
Get(int32_t & v)
Obtén el valor del elemento actual como un número entero firmado de 32 bits.
Get(int64_t & v)
Obtén el valor del elemento actual como un número entero firmado de 64 bits.
Get(uint8_t & v)
Obtén el valor del elemento actual como un número entero de 8 bits sin firma.
Get(uint16_t & v)
Obtén el valor del elemento actual como un número entero sin firma de 16 bits.
Get(uint32_t & v)
Obtén el valor del elemento actual como un número entero sin firma de 32 bits.
Get(uint64_t & v)
Obtén el valor del elemento actual como un número entero sin firma de 64 bits.
Get(float & v)
Get(double & v)
Obtén el valor del elemento actual como un número de punto flotante de doble precisión.
GetBufHandle(void) const
uintptr_t
GetBytes(uint8_t *buf, uint32_t bufSize)
Obtén el valor del byte o elemento de cadena UTF8 actual.
GetContainerType(void) const
Muestra el tipo de contenedor en el que el TLVReader está leyendo actualmente.
GetControlByte(void) const
uint16_t
Muestra el byte de control asociado con el elemento TLV actual.
GetDataPtr(const uint8_t *& data)
Obtén un puntero para el byte inicial codificado de un byte TLV o un elemento de cadena UTF8.
GetLength(void) const
uint32_t
Muestra la longitud de los datos asociados con el elemento TLV actual.
GetLengthRead(void) const
uint32_t
Muestra la cantidad total de bytes leídos desde que se inicializó el lector.
GetReadPoint(void) const
const uint8_t *
Obtiene el punto en el búfer de entrada subyacente que corresponde a la posición actual del lector.
GetRemainingLength(void) const
uint32_t
Muestra la cantidad total de bytes que se pueden leer hasta que se alcanza la longitud máxima de lectura.
GetString(char *buf, uint32_t bufSize)
Obtén el valor del byte o elemento de cadena UTF8 actual como una cadena terminada en nulo.
GetTag(void) const
uint64_t
Muestra la etiqueta asociada con el elemento TLV actual.
GetType(void) const
Muestra el tipo del elemento TLV actual.
Init(const TLVReader & aReader)
void
Inicializa un objeto TLVReader de otro objeto TLVReader.
Init(const uint8_t *data, uint32_t dataLen)
void
Inicializa un objeto TLVReader para leer desde un solo búfer de entrada.
Init(PacketBuffer *buf, uint32_t maxLen)
void
Inicializa un objeto TLVReader para leer desde un solo agrupadorBuffer.
Init(PacketBuffer *buf, uint32_t maxLen, bool allowDiscontiguousBuffers)
void
Inicializa un objeto TLVReader para leer desde uno o más paquetesBuffers.
Next(void)
Avanza el objeto TLVReader al siguiente elemento TLV que se leerá.
Next(TLVType expectedType, uint64_t expectedTag)
Hace avanzar el objeto TLVReader al siguiente elemento TLV que se leerá, y confirma el tipo y la etiqueta del elemento nuevo.
OpenContainer(TLVReader & containerReader)
Inicializa un nuevo objeto TLVReader para leer los miembros de un elemento de contenedor TLV.
Skip(void)
Lleva el objeto TLVReader a inmediatamente después del elemento TLV actual.
VerifyEndOfContainer(void)
Verifica que el objeto TVLReader esté al final de un contenedor TLV.

Funciones protegidas

ClearElementState(void)
void
Borra el estado de TLVReader.
ElementType(void) const
TLVElementType
Este es un método privado que muestra el TLVElementType de mControlByte.
EnsureData(WEAVE_ERROR noDataErr)
GetElementHeadLength(uint8_t & elemHeadBytes) const
Este es un método privado que se usa para calcular la longitud del encabezado de un elemento TLV.
IsContainerOpen(void) const
bool
ReadData(uint8_t *buf, uint32_t len)
ReadElement(void)
ReadTag(TLVTagControl tagControl, const uint8_t *& p)
uint64_t
SetContainerOpen(bool aContainerOpen)
void
SkipData(void)
Omite cualquier dato contenido en el TLV actual; para ello, lee sin un búfer de destino.
SkipToEndOfContainer(void)
VerifyElement(void)

Funciones estáticas protegidas

FailGetNextBuffer(TLVReader & reader, uintptr_t & bufHandle, const uint8_t *& bufStart, uint32_t & bufLen)
GetNextPacketBuffer(TLVReader & reader, uintptr_t & bufHandle, const uint8_t *& bufStart, uint32_t & bufLen)

Tipos públicos

GetNextBufferFunct

WEAVE_ERROR(* GetNextBufferFunct)(TLVReader &reader, uintptr_t &bufHandle, const uint8_t *&bufStart, uint32_t &bufLen)

Una función que se puede usar para recuperar datos TLV adicionales que se analizarán.

Las funciones de este tipo se usan para ingresar datos de entrada a un TLVReader. Cuando se llama a la función, se espera que la función produzca datos adicionales para que el lector los analice o le indique que no hay más datos disponibles.

Detalles
Parámetros
[in] reader
Una referencia al objeto TLVReader que solicita datos de entrada.
[in,out] bufHandle
Una referencia a un valor uintptr_t que la función puede usar para almacenar datos de contexto entre llamadas. Este valor se inicializa en 0 antes de la primera llamada.
[in,out] bufStart
Es una referencia a un puntero de datos. Cuando se ingresa a la función, bufStart apunta a un byte más allá del último byte de datos TLV que consumió el lector. Al salir, se espera que bufStart apunte al primer byte de datos TLV nuevos que se analizarán. El valor nuevo del puntero puede estar dentro del mismo búfer que los datos consumidos anteriormente o puede apuntar a un búfer completamente nuevo.
[out] bufLen
Es una referencia a un número entero sin firma que la función debe establecer en la cantidad de bytes de datos TLV que se muestran. Si se alcanzó el final de los datos TLV de entrada, la función debe establecer este valor en 0.
Valores de retorno
WEAVE_NO_ERROR
Si la función produjo más datos TLV correctamente o se alcanzó el final de los datos de entrada (en este caso, bufLen debe establecerse en 0).
other
Otros códigos de error específicos de la plataforma o de Weave que indican que se produjo un error que impidió que la función produzca los datos solicitados.

Atributos públicos

AppData

void * AppData

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

GetNextBuffer

GetNextBufferFunct GetNextBuffer

Un puntero para una función que producirá datos de entrada para el objeto TLVReader.

Si se configura como NULL (el valor predeterminado), el lector supondrá que no hay más datos de entrada disponibles.

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

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

ImplicitProfileId

uint32_t ImplicitProfileId

El ID de perfil que se usará para las etiquetas de perfil codificadas de forma implícita.

Cuando el lector encuentra una etiqueta específica del perfil que se codificó de forma implícita, usa el valor de la propiedad ImplicitProfileId como el ID de perfil supuesto para la etiqueta.

De forma predeterminada, la propiedad ImplicitProfileId se establece en kProfileIdNotSpecify. Cuando se decodifican TLV que contienen etiquetas codificadas de forma implícita, las aplicaciones deben establecer ImplicitProfileId antes de leer cualquier elemento TLV que tenga esas etiquetas. Por lo general, el ID de perfil adecuado depende del contexto de la aplicación o el protocolo que se está hablando.

Si se encuentra una etiqueta codificada de forma implícita mientras ImplicitProfileId está configurado como kProfileIdNotSpecify, el lector mostrará un error WEAVE_ERROR_UNKNOWN_IMPLICIT_TLV_TAG.

Atributos protegidos

mBufEnd

const uint8_t * mBufEnd

mBufHandle

uintptr_t mBufHandle

mContainerType

TLVType mContainerType

mControlByte

uint16_t mControlByte

mElemLenOrVal

uint64_t mElemLenOrVal

mElemTag

uint64_t mElemTag

mLenRead

uint32_t mLenRead

mMaxLen

uint32_t mMaxLen

mReadPoint

const uint8_t * mReadPoint

Funciones públicas

CloseContainer

WEAVE_ERROR CloseContainer(
  TLVReader & containerReader
)

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

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

Cuando se muestra CloseContainer(), el lector superior se posiciona inmediatamente antes del primer elemento que sigue al contenedor. Desde este punto, una aplicación puede usar el método Next() para avanzar por los elementos restantes.

Las aplicaciones pueden llamar a CloseContainer() para cerrar en un lector superior en cualquier momento, sin importar si se leyeron todos los elementos del contenedor subyacente. Después de llamar a CloseContainer(), la aplicación debe considerar al lector de contenedores como "desinicializado". y no debes volver a usarlo sin volver a inicializarlo.

Detalles
Parámetros
[in] containerReader
Una referencia al objeto TLVReader que se suministró al método OpenContainer().
Valores de retorno
WEAVE_NO_ERROR
Si el método tuvo éxito.
WEAVE_ERROR_INCORRECT_STATE
Si no se llamó a OpenContainer() en el lector o si el lector del contenedor no coincide con el que se pasó al método OpenContainer().
WEAVE_ERROR_TLV_UNDERRUN
Si la codificación TLV subyacente finalizó de manera prematura.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Si el lector encontró un tipo de elemento TLV no válido o no compatible.
WEAVE_ERROR_INVALID_TLV_TAG
Si el lector encontró una etiqueta TLV en un contexto no válido.
other
Otros códigos de error de Weave o de plataforma que muestra la función GetNextBuffer() configurada. Solo es posible cuando GetNextBuffer no es NULL.

DupBytes

WEAVE_ERROR DupBytes(
  uint8_t *& buf,
  uint32_t & dataLen
)

Asigna y muestra un búfer que contiene el valor del byte actual o la cadena UTF8.

Este método crea un búfer y muestra una copia de los datos asociados con el byte o elemento de cadena UTF-8 en la posición actual. La memoria para el búfer se obtiene con malloc() y el emisor debe liberarla con free() cuando ya no sea necesaria.

Detalles
Parámetros
[out] buf
Una referencia a un puntero al que se asignará un búfer de dataLen bytes asignado por el montón en caso de éxito.
[out] dataLen
Una referencia al almacenamiento para el tamaño, en bytes, de buf en caso de éxito.
Valores de retorno
WEAVE_NO_ERROR
Si el método tuvo éxito.
WEAVE_ERROR_WRONG_TLV_TYPE
Si el elemento actual no es un byte TLV o una cadena UTF8, o el lector no está posicionado en un elemento.
WEAVE_ERROR_NO_MEMORY
Si no se pudo asignar memoria para el búfer de salida.
WEAVE_ERROR_TLV_UNDERRUN
Si la codificación TLV subyacente finalizó de manera prematura.
WEAVE_ERROR_UNSUPPORTED_WEAVE_FEATURE
Si la plataforma de destino no admite malloc() y free().
other
Otros códigos de error de Weave o de plataforma que muestra la función GetNextBuffer() configurada. Solo es posible cuando GetNextBuffer no es NULL.

DupString

WEAVE_ERROR DupString(
  char *& buf
)

Asigna y muestra un búfer que contiene el valor terminado en nulo del byte actual o la string UTF8.

Este método crea un búfer y muestra una copia terminada en nulidad de los datos asociados con el byte o elemento de cadena UTF-8 en la posición actual. La memoria para el búfer se obtiene con malloc() y el emisor debe liberarla con free() cuando ya no sea necesaria.

Detalles
Parámetros
[out] buf
Una referencia a un puntero al que se asignará un búfer asignado por el montón en caso de éxito.
Valores de retorno
WEAVE_NO_ERROR
Si el método tuvo éxito.
WEAVE_ERROR_WRONG_TLV_TYPE
Si el elemento actual no es un byte TLV o una cadena UTF8, o el lector no está posicionado en un elemento.
WEAVE_ERROR_NO_MEMORY
Si no se pudo asignar memoria para el búfer de salida.
WEAVE_ERROR_TLV_UNDERRUN
Si la codificación TLV subyacente finalizó de manera prematura.
WEAVE_ERROR_UNSUPPORTED_WEAVE_FEATURE
Si la plataforma de destino no admite malloc() y free().
other
Otros códigos de error de Weave o de plataforma que muestra la función GetNextBuffer() configurada. Solo es posible cuando GetNextBuffer no es NULL.

EnterContainer

WEAVE_ERROR EnterContainer(
  TLVType & outerContainerType
)

Prepara un objeto TLVReader para leer los miembros del elemento de contenedor TLV.

El método EnterContainer() prepara el objeto TLVReader actual para comenzar a leer los elementos miembros de un contenedor TLV (una estructura, un array o una ruta de acceso). Por cada llamada a EnterContainer(), las aplicaciones deben hacer la llamada correspondiente a ExitContainer().

Cuando se llama a EnterContainer(), el objeto TLVReader se debe posicionar en el elemento contenedor que se leerá. El método toma como argumento una referencia a un valor TLVType que se usará para guardar el contexto del lector mientras se lee el contenedor.

Cuando se muestra el método EnterContainer(), el lector se posiciona inmediatamente antes del primer miembro del contenedor. Si se llama repetidamente a Next(), el lector pasará por los miembros de la colección hasta llegar al final y mostrará WEAVE_END_OF_TLV.

Una vez que la aplicación termina de leer un contenedor, puede continuar leyendo los elementos después del contenedor mediante una llamada al método ExitContainer().

Detalles
Parámetros
[out] outerContainerType
Una referencia a un valor TLVType que recibirá el contexto del lector.
Valores de retorno
WEAVE_NO_ERROR
Si el método tuvo éxito.
WEAVE_ERROR_INCORRECT_STATE
Si el elemento actual no está posicionado en un elemento contenedor.

ExitContainer

WEAVE_ERROR ExitContainer(
  TLVType outerContainerType
)

Completa la lectura de un contenedor TLV y prepara un objeto TLVReader para leer elementos después del contenedor.

El método ExitContainer() restablece el estado de un objeto TLVReader después de una llamada a EnterContainer(). Por cada llamada a EnterContainer(), las aplicaciones deben realizar la llamada correspondiente a ExitContainer() y pasar el valor de contexto que muestra el método EnterContainer().

Cuando se muestra ExitContainer(), el lector se posiciona inmediatamente antes del primer elemento que sigue al contenedor. Desde este punto, una aplicación puede usar el método Next() para avanzar por los elementos restantes.

Una vez que se llama a EnterContainer(), las aplicaciones pueden llamar a ExitContainer() en un lector en cualquier momento, sin importar si se leyeron todos los elementos del contenedor subyacente.

Detalles
Parámetros
[in] outerContainerType
El valor TLVType que mostró el método EnterContainer().
Valores de retorno
WEAVE_NO_ERROR
Si el método tuvo éxito.
WEAVE_ERROR_INCORRECT_STATE
Si no se llamó a OpenContainer() en el lector o si el lector del contenedor no coincide con el que se pasó al método OpenContainer().
WEAVE_ERROR_TLV_UNDERRUN
Si la codificación TLV subyacente finalizó de manera prematura.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Si el lector encontró un tipo de elemento TLV no válido o no compatible.
WEAVE_ERROR_INVALID_TLV_TAG
Si el lector encontró una etiqueta TLV en un contexto no válido.
other
Otros códigos de error de Weave o de plataforma que muestra la función GetNextBuffer() configurada. Solo es posible cuando GetNextBuffer no es NULL.

Obtener

WEAVE_ERROR Get(
  bool & v
)

Obtén el valor del elemento actual como un tipo booleano.

Detalles
Parámetros
[out] v
Recibe el valor asociado con el elemento TLV actual.
Valores de retorno
WEAVE_NO_ERROR
Si el método tuvo éxito.
WEAVE_ERROR_WRONG_TLV_TYPE
Se muestra si el elemento actual no es un tipo booleano TLV o el lector no está posicionado en un elemento.

Obtener

WEAVE_ERROR Get(
  int8_t & v
)

Obtén el valor del elemento actual como un número entero firmado de 8 bits.

Si el valor entero codificado es mayor que el tipo de datos de salida, el valor resultante se truncará.

Detalles
Parámetros
[out] v
Recibe el valor asociado con el elemento TLV actual.
Valores de retorno
WEAVE_NO_ERROR
Si el método tuvo éxito.
WEAVE_ERROR_WRONG_TLV_TYPE
Si el elemento actual no es un tipo de número entero TLV (con o sin firma), o el lector no está posicionado en un elemento.

Obtener

WEAVE_ERROR Get(
  int16_t & v
)

Obtén el valor del elemento actual como un número entero firmado de 16 bits.

Si el valor entero codificado es mayor que el tipo de datos de salida, el valor resultante se truncará.

Detalles
Parámetros
[out] v
Recibe el valor asociado con el elemento TLV actual.
Valores de retorno
WEAVE_NO_ERROR
Si el método tuvo éxito.
WEAVE_ERROR_WRONG_TLV_TYPE
Si el elemento actual no es un tipo de número entero TLV (con o sin firma), o el lector no está posicionado en un elemento.

Obtener

WEAVE_ERROR Get(
  int32_t & v
)

Obtén el valor del elemento actual como un número entero firmado de 32 bits.

Si el valor entero codificado es mayor que el tipo de datos de salida, el valor resultante se truncará.

Detalles
Parámetros
[out] v
Recibe el valor asociado con el elemento TLV actual.
Valores de retorno
WEAVE_NO_ERROR
Si el método tuvo éxito.
WEAVE_ERROR_WRONG_TLV_TYPE
Si el elemento actual no es un tipo de número entero TLV (con o sin firma), o el lector no está posicionado en un elemento.

Obtener

WEAVE_ERROR Get(
  int64_t & v
)

Obtén el valor del elemento actual como un número entero firmado de 64 bits.

Si el valor entero codificado es mayor que el tipo de datos de salida, el valor resultante se truncará.

Detalles
Parámetros
[out] v
Recibe el valor asociado con el elemento TLV actual.
Valores de retorno
WEAVE_NO_ERROR
Si el método tuvo éxito.
WEAVE_ERROR_WRONG_TLV_TYPE
Si el elemento actual no es un tipo de número entero TLV (con o sin firma), o el lector no está posicionado en un elemento.

Obtener

WEAVE_ERROR Get(
  uint8_t & v
)

Obtén el valor del elemento actual como un número entero de 8 bits sin firma.

Si el valor entero codificado es mayor que el tipo de datos de salida, el valor resultante se truncará. De manera similar, si el valor entero codificado es negativo, el valor se convertirá en sin signo.

Detalles
Parámetros
[out] v
Recibe el valor asociado con el elemento TLV actual.
Valores de retorno
WEAVE_NO_ERROR
Si el método tuvo éxito.
WEAVE_ERROR_WRONG_TLV_TYPE
Si el elemento actual no es un tipo de número entero TLV (con o sin firma), o el lector no está posicionado en un elemento.

Obtener

WEAVE_ERROR Get(
  uint16_t & v
)

Obtén el valor del elemento actual como un número entero sin firma de 16 bits.

Si el valor entero codificado es mayor que el tipo de datos de salida, el valor resultante se truncará. De manera similar, si el valor entero codificado es negativo, el valor se convertirá en sin signo.

Detalles
Parámetros
[out] v
Recibe el valor asociado con el elemento TLV actual.
Valores de retorno
WEAVE_NO_ERROR
Si el método tuvo éxito.
WEAVE_ERROR_WRONG_TLV_TYPE
Si el elemento actual no es un tipo de número entero TLV (con o sin firma), o el lector no está posicionado en un elemento.

Obtener

WEAVE_ERROR Get(
  uint32_t & v
)

Obtén el valor del elemento actual como un número entero sin firma de 32 bits.

Si el valor entero codificado es mayor que el tipo de datos de salida, el valor resultante se truncará. De manera similar, si el valor entero codificado es negativo, el valor se convertirá en sin signo.

Detalles
Parámetros
[out] v
Recibe el valor asociado con el elemento TLV actual.
Valores de retorno
WEAVE_NO_ERROR
Si el método tuvo éxito.
WEAVE_ERROR_WRONG_TLV_TYPE
Si el elemento actual no es un tipo de número entero TLV (con o sin firma), o el lector no está posicionado en un elemento.

Obtener

WEAVE_ERROR Get(
  uint64_t & v
)

Obtén el valor del elemento actual como un número entero sin firma de 64 bits.

Si el valor entero codificado es negativo, el valor se convertirá en sin signo.

Detalles
Parámetros
[out] v
Recibe el valor asociado con el elemento TLV actual.
Valores de retorno
WEAVE_NO_ERROR
Si el método tuvo éxito.
WEAVE_ERROR_WRONG_TLV_TYPE
Si el elemento actual no es un tipo de número entero TLV (con o sin firma), o el lector no está posicionado en un elemento.

Obtener

WEAVE_ERROR Get(
  float & v
)

Obtener

WEAVE_ERROR Get(
  double & v
)

Obtén el valor del elemento actual como un número de punto flotante de doble precisión.

Detalles
Parámetros
[out] v
Recibe el valor asociado con el elemento TLV actual.
Valores de retorno
WEAVE_NO_ERROR
Si el método tuvo éxito.
WEAVE_ERROR_WRONG_TLV_TYPE
Si el elemento actual no es un tipo de punto flotante TLV o el lector no está posicionado en un elemento.

GetBufHandle

uintptr_t GetBufHandle(
  void
) const 

GetBytes

WEAVE_ERROR GetBytes(
  uint8_t *buf,
  uint32_t bufSize
)

Obtén el valor del byte o elemento de cadena UTF8 actual.

Para determinar el tamaño del búfer de entrada requerido, llama al método GetLength() antes de llamar a GetBytes().

Detalles
Parámetros
[in] buf
Un puntero para un búfer para recibir los datos de la cadena.
[in] bufSize
El tamaño en bytes del búfer al que apunta buf.
Valores de retorno
WEAVE_NO_ERROR
Si el método tuvo éxito.
WEAVE_ERROR_WRONG_TLV_TYPE
Si el elemento actual no es un byte TLV o una cadena UTF8, o el lector no está posicionado en un elemento.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si el búfer proporcionado es demasiado pequeño para contener los datos asociados con el elemento actual.
WEAVE_ERROR_TLV_UNDERRUN
Si la codificación TLV subyacente finalizó de manera prematura.
other
Otros códigos de error de Weave o de plataforma que muestra la función GetNextBuffer() configurada. Solo es posible cuando GetNextBuffer no es NULL.

GetContainerType

TLVType GetContainerType(
  void
) const 

Muestra el tipo de contenedor en el que el TLVReader está leyendo actualmente.

El método GetContainerType() devuelve el tipo de contenedor TLV en el que se lee TLVReader. Si el TLVReader se posiciona en el nivel más externo de una codificación TLV (es decir, antes, durante o después del elemento TLV más externo), el método mostrará kTLVType_NotSpecify.

Detalles
Resultado que se muestra
El TLVType del contenedor actual o kTLVType_NotSpecify si el TLVReader no está posicionado dentro de un contenedor.

GetControlByte

uint16_t GetControlByte(
  void
) const 

Muestra el byte de control asociado con el elemento TLV actual.

Lo ideal es que nadie nunca necesite saber sobre el byte de control y solo la implementación interna de TLV debería tener acceso a él. Sin embargo, tener acceso al byte de control es útil para fines de depuración con las TLVDebugUtilities (que intentan decodificar el byte de control de la etiqueta cuando imprime el contenido del búfer TLV).

Detalles
Resultado que se muestra
Un número entero sin firma que contiene el byte de control asociado con el elemento TLV actual. Se muestra kTLVControlByte_NotSpecify si el lector no se posiciona en un elemento.

GetDataPtr

WEAVE_ERROR GetDataPtr(
  const uint8_t *& data
)

Obtén un puntero para el byte inicial codificado de un byte TLV o un elemento de cadena UTF8.

Este método muestra un puntero directo al valor de la cadena codificada dentro del búfer de entrada subyacente. Para tener éxito, el método requiere que la totalidad del valor de la cadena esté presente en un solo búfer. De lo contrario, el método muestra WEAVE_ERROR_TLV_UNDERRUN. Esto hace que se utilice el método de uso limitado cuando se leen datos de varios búferes no contiguos.

Detalles
Parámetros
[out] data
Una referencia a un puntero constante que recibirá un puntero para los datos de string subyacentes.
Valores de retorno
WEAVE_NO_ERROR
Si el método tuvo éxito.
WEAVE_ERROR_WRONG_TLV_TYPE
Si el elemento actual no es un byte TLV o una cadena UTF8, o el lector no está posicionado en un elemento.
WEAVE_ERROR_TLV_UNDERRUN
Si la codificación TLV subyacente finalizó de manera prematura o el valor del elemento de cadena actual no se encuentra dentro de un solo búfer contiguo.
other
Otros códigos de error de Weave o de plataforma que muestra la función GetNextBuffer() configurada. Solo es posible cuando GetNextBuffer no es NULL.

GetLength

uint32_t GetLength(
  void
) const 

Muestra la longitud de los datos asociados con el elemento TLV actual.

La longitud de los datos solo se aplica a elementos de tipo string UTF8 o string de bytes. En el caso de las strings UTF8, el valor que se muestra es la cantidad de bytes de la string, no el número de caracteres.

Detalles
Resultado que se muestra
La longitud (en bytes) de los datos asociados con el elemento TLV actual, o 0 si el elemento actual no es una cadena UTF8 o de bytes, o si el lector no está posicionado en un elemento.

GetLengthRead

uint32_t GetLengthRead(
  void
) const 

Muestra la cantidad total de bytes leídos desde que se inicializó el lector.

Detalles
Resultado que se muestra
Cantidad total de bytes leídos desde que se inicializó el lector.

GetReadPoint

const uint8_t * GetReadPoint(
  void
) const 

Obtiene el punto en el búfer de entrada subyacente que corresponde a la posición actual del lector.

Detalles
Resultado que se muestra
Es un puntero en el búfer de entrada subyacente que corresponde a la posición actual del lector.

GetRemainingLength

uint32_t GetRemainingLength(
  void
) const 

Muestra la cantidad total de bytes que se pueden leer hasta que se alcanza la longitud máxima de lectura.

Detalles
Resultado que se muestra
La cantidad total de bytes que se pueden leer hasta que se alcanza la longitud máxima de lectura.

GetString

WEAVE_ERROR GetString(
  char *buf,
  uint32_t bufSize
)

Obtén el valor del byte o elemento de cadena UTF8 actual como una cadena terminada en nulo.

Para determinar el tamaño del búfer de entrada requerido, llama al método GetLength() antes de llamar a GetBytes(). El búfer de entrada debe ser al menos un byte más grande que la longitud de la cadena para adaptarse al carácter nulo.

Detalles
Parámetros
[in] buf
Un puntero a un búfer para recibir los datos de la cadena de bytes.
[in] bufSize
El tamaño en bytes del búfer al que apunta buf.
Valores de retorno
WEAVE_NO_ERROR
Si el método tuvo éxito.
WEAVE_ERROR_WRONG_TLV_TYPE
Si el elemento actual no es un byte TLV o una cadena UTF8, o el lector no está posicionado en un elemento.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si el búfer proporcionado es demasiado pequeño para contener los datos asociados con el elemento actual.
WEAVE_ERROR_TLV_UNDERRUN
Si la codificación TLV subyacente finalizó de manera prematura.
other
Otros códigos de error de Weave o de plataforma que muestra la función GetNextBuffer() configurada. Solo es posible cuando GetNextBuffer no es NULL.

GetTag

uint64_t GetTag(
  void
) const 

Muestra la etiqueta asociada con el elemento TLV actual.

El valor que muestra GetTag() se puede usar con las funciones de utilidad de etiqueta (IsProfileTag(), IsContextTag(), ProfileIdFromTag(), etc.) para determinar el tipo de etiqueta y extraer varios valores de campos de etiquetas.

Detalles
Resultado que se muestra
Un número entero sin firma que contiene información sobre la etiqueta asociada con el elemento TLV actual.

GetType

TLVType GetType(
  void
) const 

Muestra el tipo del elemento TLV actual.

Detalles
Resultado que se muestra
Un valor TLVType que describe el tipo de datos del elemento TLV actual. Si el lector no se coloca en un elemento TLV, el valor que se muestra será kTLVType_NotSpecify.

Init

void Init(
  const TLVReader & aReader
)

Inicializa un objeto TLVReader de otro objeto TLVReader.

Detalles
Parámetros
[in] aReader
Es una referencia de solo lectura al TLVReader desde el que se inicializará.

Init

void Init(
  const uint8_t *data,
  uint32_t dataLen
)

Inicializa un objeto TLVReader para leer desde un solo búfer de entrada.

Detalles
Parámetros
[in] data
Un puntero para un búfer que contiene los datos TLV que se analizarán.
[in] dataLen
La longitud de los datos TLV que se analizarán.

Init

void Init(
  PacketBuffer *buf,
  uint32_t maxLen
)

Inicializa un objeto TLVReader para leer desde un solo agrupadorBuffer.

El análisis comienza en la posición de inicio del búfer (buf->DataStart()) y continúa hasta el final de los datos en el búfer (como lo indica buf->Datalen()), o hasta que se analizaron los bytes maxLen.

Detalles
Parámetros
[in] buf
Es un puntero a un packageBuffer que contenga los datos TLV que se analizarán.
[in] maxLen
El máximo de bytes que se analizarán. El valor predeterminado es la cantidad de datos en el búfer de entrada.

Init

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

Inicializa un objeto TLVReader para leer desde uno o más paquetesBuffers.

El análisis comienza en la posición de inicio del búfer inicial (buf->DataStart()). Si allowDiscontiguousBuffers es verdadero, el lector avanzará a través de la cadena de búferes vinculados por sus punteros Next(). El análisis continúa hasta que se consumen todos los datos de la cadena del búfer (como lo indica buf->Datalen()) o se analizan los bytes maxLen.

Detalles
Parámetros
[in] buf
Es un puntero a un packageBuffer que contenga los datos TLV que se analizarán.
[in] maxLen
El máximo de bytes que se analizarán. El valor predeterminado es la cantidad total de datos en la cadena de búfer de entrada.
[in] allowDiscontiguousBuffers
Si es verdadero, avanza al siguiente búfer de la cadena una vez que se hayan consumido todos los datos en el búfer actual. Si es falso, deja de analizar al final del búfer inicial.

Siguiente

WEAVE_ERROR Next(
  void
)

Avanza el objeto TLVReader al siguiente elemento TLV que se leerá.

El método Next() posiciona el objeto lector en el siguiente elemento en una codificación TLV que reside en el mismo contexto de contención. En particular, si el lector se posiciona en el nivel más externo de una codificación TLV, llamar a Next() hará que se mueva al siguiente elemento superior. Si el lector se posiciona dentro de un elemento de contenedor TLV (una estructura, un array o una ruta), la llamada a Next() avanzará al siguiente elemento miembro del contenedor.

Dado que Next() restringe el movimiento del lector al contexto de contención actual, llamar a Next() cuando el lector se encuentre en un elemento de contenedor avanzará por el contenedor y omitirá sus elementos miembros (y los miembros de cualquier contenedor anidado) hasta llegar al primer elemento después del contenedor.

Cuando no haya más elementos dentro de un contexto de contención en particular, el método Next() mostrará un error WEAVE_END_OF_TLV y la posición del lector no se modificará.

Detalles
Valores de retorno
WEAVE_NO_ERROR
Si el lector se colocó correctamente en un elemento nuevo
WEAVE_END_OF_TLV
Si no hay más elementos disponibles.
WEAVE_ERROR_TLV_UNDERRUN
Si la codificación TLV subyacente finalizó de manera prematura.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Si el lector encontró un tipo de elemento TLV no válido o no compatible.
WEAVE_ERROR_INVALID_TLV_TAG
Si el lector encontró una etiqueta TLV en un contexto no válido.
WEAVE_ERROR_UNKNOWN_IMPLICIT_TLV_TAG
Si el lector encontró una etiqueta TLV codificada de forma implícita en la que se desconoce el ID de perfil correspondiente.
other
Otros códigos de error de Weave o de plataforma que muestra la función GetNextBuffer() configurada. Solo es posible cuando GetNextBuffer no es NULL.

Siguiente

WEAVE_ERROR Next(
  TLVType expectedType,
  uint64_t expectedTag
)

Hace avanzar el objeto TLVReader al siguiente elemento TLV que se leerá, y confirma el tipo y la etiqueta del elemento nuevo.

El método Next(TLVType esperadoType, uint64_texpectedTag) es un método de conveniencia que tiene el mismo comportamiento que Next(), pero también verifica que el tipo y la etiqueta del nuevo elemento TLV coincidan con los argumentos proporcionados.

Detalles
Parámetros
[in] expectedType
El tipo de datos esperado para el siguiente elemento.
[in] expectedTag
Es la etiqueta esperada para el siguiente elemento.
Valores de retorno
WEAVE_NO_ERROR
Si el lector se colocó correctamente en un elemento nuevo
WEAVE_END_OF_TLV
Si no hay más elementos disponibles.
WEAVE_ERROR_WRONG_TLV_TYPE
Si el tipo del elemento nuevo no coincide con el valor del argumento expectedType.
WEAVE_ERROR_UNEXPECTED_TLV_ELEMENT
Si la etiqueta asociada con el elemento nuevo no coincide con el valor del argumento expectedTag.
WEAVE_ERROR_TLV_UNDERRUN
Si la codificación TLV subyacente finalizó de manera prematura.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Si el lector encontró un tipo de elemento TLV no válido o no compatible.
WEAVE_ERROR_INVALID_TLV_TAG
Si el lector encontró una etiqueta TLV en un contexto no válido.
other
Otros códigos de error de Weave o de plataforma que muestra la función GetNextBuffer() configurada. Solo es posible cuando GetNextBuffer no es NULL.

OpenContainer

WEAVE_ERROR OpenContainer(
  TLVReader & containerReader
)

Inicializa un nuevo objeto TLVReader para leer los miembros de un elemento de contenedor TLV.

El método OpenContainer() inicializa un nuevo objeto TLVReader para leer los elementos miembros de un contenedor TLV (una estructura, un array o una ruta de acceso). Cuando se llama a OpenContainer(), el objeto TLVReader actual debe posicionarse en el elemento contenedor que se leerá. El método toma como único argumento una referencia a un nuevo lector que se inicializará para leer el contenedor. Este lector se conoce como lector de contenedores, mientras que el lector en el que se llama a OpenContainer() se conoce como lector superior.

Cuando se muestra el método OpenContainer(), el lector del contenedor se posiciona inmediatamente antes del primer miembro del contenedor. La llamada a Next() en el lector de contenedores avanzará por los miembros de la colección hasta que se llegue al final. A partir de ese momento, el lector mostrará WEAVE_END_OF_TLV.

Mientras el lector de contenedores esté abierto, las aplicaciones no deben realizar llamadas ni alterar el estado del lector superior. Una vez que una aplicación termina de usar el lector de contenedores, debe cerrarlo. Para ello, llama a CloseContainer() en el lector superior y pasa el lector del contenedor como argumento. Las aplicaciones pueden cerrar el lector de contenedores en cualquier momento, con o sin leer todos los elementos contenidos en el contenedor subyacente. Después de cerrar el lector de contenedores, las aplicaciones pueden seguir usando el lector superior.

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

  • El ID de perfil implícito (ImplicitProfileId)
  • El puntero de datos de la aplicación (AppData)
  • El puntero de la función GetNextBuffer

Detalles
Parámetros
[out] containerReader
Una referencia a un objeto TLVReader que se inicializará para leer los miembros del elemento contenedor actual. Todos los datos asociados con el objeto suministrado se reemplazan.
Valores de retorno
WEAVE_NO_ERROR
Si el método tuvo éxito.
WEAVE_ERROR_INCORRECT_STATE
Si el elemento actual no está posicionado en un elemento contenedor.

Omitir

WEAVE_ERROR Skip(
  void
)

Lleva el objeto TLVReader a inmediatamente después del elemento TLV actual.

El método Skip() posiciona el objeto lector inmediatamente después del elemento TLV actual, de modo que una llamada posterior a Next() avance al lector al siguiente elemento. Al igual que con Next(), si el lector se posiciona en un elemento de contenedor en el momento de la llamada, se omitirán los miembros del contenedor. Si el lector no se posiciona en ningún elemento, su posición no se modifica.

Detalles
Valores de retorno
WEAVE_NO_ERROR
Si el lector se colocó correctamente en un elemento nuevo
WEAVE_END_OF_TLV
Si no hay más elementos disponibles.
WEAVE_ERROR_TLV_UNDERRUN
Si la codificación TLV subyacente finalizó de manera prematura.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Si el lector encontró un tipo de elemento TLV no válido o no compatible.
WEAVE_ERROR_INVALID_TLV_TAG
Si el lector encontró una etiqueta TLV en un contexto no válido.
other
Otros códigos de error de Weave o de plataforma que muestra la función GetNextBuffer() configurada. Solo es posible cuando GetNextBuffer no es NULL.

VerifyEndOfContainer

WEAVE_ERROR VerifyEndOfContainer(
  void
)

Verifica que el objeto TVLReader esté al final de un contenedor TLV.

El método VerifyEndOfContainer() verifica que no haya más elementos TLV para leer en el contenedor de TLV actual. Este es un método de conveniencia que equivale a llamar a Next() y verificar un valor de retorno de WEAVE_END_OF_TLV.

Detalles
Valores de retorno
WEAVE_NO_ERROR
Si no hay más elementos TLV para leer
WEAVE_ERROR_UNEXPECTED_TLV_ELEMENT
Si se encontró otro elemento TLV en la colección.
WEAVE_ERROR_TLV_UNDERRUN
Si la codificación TLV subyacente finalizó de manera prematura.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Si el lector encontró un tipo de elemento TLV no válido o no compatible.
WEAVE_ERROR_INVALID_TLV_TAG
Si el lector encontró una etiqueta TLV en un contexto no válido.
other
Otros códigos de error de Weave o de plataforma que muestra la función GetNextBuffer() configurada. Solo es posible cuando GetNextBuffer no es NULL.

Funciones protegidas

ClearElementState

void ClearElementState(
  void
)

Borra el estado de TLVReader.

Este método se usa para posicionar al lector antes del primer TLV, entre los TLV o después del último TLV.

ElementType

TLVElementType ElementType(
  void
) const 

Este es un método privado que muestra el TLVElementType de mControlByte.

EnsureData

WEAVE_ERROR EnsureData(
  WEAVE_ERROR noDataErr
)

GetElementHeadLength

WEAVE_ERROR GetElementHeadLength(
  uint8_t & elemHeadBytes
) const 

Este es un método privado que se usa para calcular la longitud del encabezado de un elemento TLV.

IsContainerOpen

bool IsContainerOpen(
  void
) const 

ReadData

WEAVE_ERROR ReadData(
  uint8_t *buf,
  uint32_t len
)

ReadElement

WEAVE_ERROR ReadElement(
  void
)

ReadTag

uint64_t ReadTag(
  TLVTagControl tagControl,
  const uint8_t *& p
)

SetContainerOpen

void SetContainerOpen(
  bool aContainerOpen
)

SkipData

WEAVE_ERROR SkipData(
  void
)

Omite cualquier dato contenido en el TLV actual; para ello, lee sin un búfer de destino.

Detalles
Valores de retorno
WEAVE_NO_ERROR
Si el lector se colocó correctamente al final de los datos.
other
Otros códigos de error de Weave o de plataforma que muestra la función GetNextBuffer() configurada. Solo es posible cuando GetNextBuffer no es NULL.

SkipToEndOfContainer

WEAVE_ERROR SkipToEndOfContainer(
  void
)

VerifyElement

WEAVE_ERROR VerifyElement(
  void
)

Funciones estáticas protegidas

FailGetNextBuffer

WEAVE_ERROR FailGetNextBuffer(
  TLVReader & reader,
  uintptr_t & bufHandle,
  const uint8_t *& bufStart,
  uint32_t & bufLen
)

GetNextPacketBuffer

WEAVE_ERROR GetNextPacketBuffer(
  TLVReader & reader,
  uintptr_t & bufHandle,
  const uint8_t *& bufStart,
  uint32_t & bufLen
)