nl:: Weave:: TLV:: TLVReader
#include <src/lib/core/WeaveTLV.h>
Proporciona un analizador de memoria eficiente para los datos codificados en formato TLV de Weave.
Resumen
TLVReader implementa un analizador de “estilo de extracción” de solo lectura para datos TLV de Weave. El objeto TLVReader funciona como un cursor que se puede usar para iterar sobre una secuencia de elementos TLV y, luego, interpretar su contenido. Cuando se colocan en un elemento, las aplicaciones pueden realizar 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 se posiciona siempre antes o después de un elemento TLV, o bien sobre él. Cuando se inicializa, un TLVReader se posiciona justo antes del primer elemento de la codificación. Para comenzar a leer, una aplicación debe realizar una llamada inicial al método Next() a fin de posicionar el lector en el primer elemento. Cuando se encuentra un elemento contenedor, ya sea una estructura, un array o una ruta, se pueden usar los métodos OpenContainer() o EnterContainer() para iterar a través del contenido del contenedor.
Cuando el lector llega al final de una codificación TLV, o al último elemento dentro de un contenedor, le indica a la aplicación mediante la devolución de un error WEAVE_END_OF_TLV desde el 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 (mediante CloseContainer() o ExitContainer()).
Un objeto TLVReader puede analizar datos directamente desde un búfer de entrada fijo o desde una cadena de uno o más PacketBuffers. Además, las aplicaciones pueden proporcionar una función GetNextBuffer
para enviar datos al lector desde una fuente arbitraria, como un socket o un puerto en serie.
Herencia
Subclases directas conocidas: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 de TLV adicionales que se analizarán. |
Atributos públicos |
|
---|---|
AppData
|
void *
Un campo de puntero que se puede usar 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 utilizará 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 de la string 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)
|
|
ExitContainer(TLVType outerContainerType)
|
|
Get(bool & v)
|
Obtén el valor del elemento actual como un tipo de bool.
|
Get(int8_t & v)
|
Obtén el valor del elemento actual como un número entero de 8 bits firmado.
|
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 sin firma de 8 bits.
|
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)
|
Obtiene 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 actual o del elemento de la string UTF8.
|
GetContainerType(void) const
|
Muestra el tipo de contenedor en el que TLVReader está leyendo en ese momento.
|
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 al byte inicial codificado de un byte TLV o un elemento de string 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 actual o del elemento de la string UTF8 como una string terminada en un valor 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
|
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 único PacketBuffer.
|
Init(PacketBuffer *buf, uint32_t maxLen, bool allowDiscontiguousBuffers)
|
void
Inicializa un objeto TLVReader para leer de uno o más PacketBuffers.
|
Next(void)
|
|
Next(TLVType expectedType, uint64_t expectedTag)
|
|
OpenContainer(TLVReader & containerReader)
|
|
Skip(void)
|
|
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 de un encabezado de 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 mediante la lectura 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 de TLV adicionales que se analizarán.
Las funciones de este tipo se usan para ingresar datos de entrada a un TLVReader. Cuando se la llama, 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 |
|
||||||||
Valores que se muestran |
|
Atributos públicos
AppData
void * AppData
Un campo de puntero que se puede usar 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 está configurado como NULL (el valor predeterminado), el lector supondrá que no hay más datos de entrada disponibles.
Una aplicación puede configurar GetNextBuffer en cualquier momento, pero generalmente se establece cuando se inicializa el lector.
Consulta la definición del tipo GetNextBufferFunct para obtener información adicional sobre cómo implementar una función GetNextBuffer.
ImplicitProfileId
uint32_t ImplicitProfileId
El ID de perfil que se utilizará para las etiquetas de perfil codificadas de forma implícita.
Cuando el lector encuentra una etiqueta específica del perfil codificada de forma implícita, utiliza el valor de la propiedad ImplicitProfileId
como el ID de perfil supuesto para la etiqueta.
De forma predeterminada, la propiedad ImplicitProfileId
se configura como kProfileIdNotspecified. Cuando se decodifica TLV que contiene etiquetas codificadas de forma implícita, las aplicaciones deben establecer ImplicitProfileId
antes de leer cualquier elemento TLV que tenga esas etiquetas. En general, el ID de perfil adecuado depende del contexto de la aplicación o del protocolo que se diga.
Si se encuentra una etiqueta con codificación implícita mientras ImplicitProfileId
se configura como kProfileIdNotspecified, 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(). Para cada llamada a OpenContainer(), las aplicaciones deben realizar una llamada correspondiente a CloseContainer() y pasar una referencia al mismo lector de contenedores a ambos métodos.
Cuando se muestra CloseContainer(), el lector principal 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() cercano en un lector principal 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 “desiniciado” y no debe usarlo más sin antes reiniciarlo.
Detalles | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parámetros |
|
||||||||||||
Valores que se muestran |
|
DupBytes
WEAVE_ERROR DupBytes( uint8_t *& buf, uint32_t & dataLen )
Asigna y muestra un búfer que contiene el valor del byte actual o de la string UTF8.
Este método crea un búfer y muestra una copia de los datos asociados con el byte o con el elemento de la string 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 es necesaria.
Detalles | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parámetros |
|
||||||||||||
Valores que se muestran |
|
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 con valor nulo de los datos asociados con el byte o con el elemento de la string 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 es necesaria.
Detalles | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parámetros |
|
||||||||||||
Valores que se muestran |
|
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 miembro de un contenedor de TLV (una estructura, un array o una ruta). Para cada llamada a EnterContainer(), las aplicaciones deben realizar la llamada correspondiente a ExitContainer().
Cuando se llama a EnterContainer(), el objeto TLVReader se debe posicionar en el elemento del contenedor para que se pueda leer. El método toma como argumento una referencia a un valor TLVType que se usará para guardar el contexto del lector mientras lee el contenedor.
Cuando se muestra el método EnterContainer(), el lector se posiciona justo antes del primer miembro del contenedor. Llamar repetidamente a Next() hará que el lector avance por los miembros de la colección hasta llegar al final, momento en el que el lector mostrará WEAVE_END_OF_TLV.
Una vez que la aplicación termina de leer un contenedor, puede continuar leyendo los elementos después de este llamando al método ExitContainer().
Detalles | |||||
---|---|---|---|---|---|
Parámetros |
|
||||
Valores que se muestran |
|
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(). Para cada llamada a EnterContainer(), las aplicaciones deben realizar una llamada correspondiente a ExitContainer() y pasar el valor del contexto que muestra el método EnterContainer().
Cuando se muestra ExitContainer(), el lector se posiciona justo 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 haya llamado a EnterContainer(), las aplicaciones pueden llamar a ExitContainer() en un lector en cualquier momento, independientemente de que se hayan leído todos los elementos del contenedor subyacente.
Detalles | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parámetros |
|
||||||||||||
Valores que se muestran |
|
Obtener
WEAVE_ERROR Get( bool & v )
Obtén el valor del elemento actual como un tipo de bool.
Detalles | |||||
---|---|---|---|---|---|
Parámetros |
|
||||
Valores que se muestran |
|
Obtener
WEAVE_ERROR Get( int8_t & v )
Obtén el valor del elemento actual como un número entero de 8 bits firmado.
Si el valor de número entero codificado es mayor que el tipo de datos de salida, el valor resultante se truncará.
Detalles | |||||
---|---|---|---|---|---|
Parámetros |
|
||||
Valores que se muestran |
|
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 de número entero codificado es mayor que el tipo de datos de salida, el valor resultante se truncará.
Detalles | |||||
---|---|---|---|---|---|
Parámetros |
|
||||
Valores que se muestran |
|
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 de número entero codificado es mayor que el tipo de datos de salida, el valor resultante se truncará.
Detalles | |||||
---|---|---|---|---|---|
Parámetros |
|
||||
Valores que se muestran |
|
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 de número entero codificado es mayor que el tipo de datos de salida, el valor resultante se truncará.
Detalles | |||||
---|---|---|---|---|---|
Parámetros |
|
||||
Valores que se muestran |
|
Obtener
WEAVE_ERROR Get( uint8_t & v )
Obtén el valor del elemento actual como un número entero sin firma de 8 bits.
Si el valor de número entero codificado es mayor que el tipo de datos de salida, el valor resultante se truncará. De manera similar, si el valor de número entero codificado es negativo, el valor se convertirá en sin firma.
Detalles | |||||
---|---|---|---|---|---|
Parámetros |
|
||||
Valores que se muestran |
|
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 de número entero codificado es mayor que el tipo de datos de salida, el valor resultante se truncará. De manera similar, si el valor de número entero codificado es negativo, el valor se convertirá en sin firma.
Detalles | |||||
---|---|---|---|---|---|
Parámetros |
|
||||
Valores que se muestran |
|
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 de número entero codificado es mayor que el tipo de datos de salida, el valor resultante se truncará. De manera similar, si el valor de número entero codificado es negativo, el valor se convertirá en sin firma.
Detalles | |||||
---|---|---|---|---|---|
Parámetros |
|
||||
Valores que se muestran |
|
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 de número entero codificado es negativo, el valor se convertirá en sin firma.
Detalles | |||||
---|---|---|---|---|---|
Parámetros |
|
||||
Valores que se muestran |
|
Obtener
WEAVE_ERROR Get( float & v )
Obtener
WEAVE_ERROR Get( double & v )
Obtiene el valor del elemento actual como un número de punto flotante de doble precisión.
Detalles | |||||
---|---|---|---|---|---|
Parámetros |
|
||||
Valores que se muestran |
|
GetBufHandle
uintptr_t GetBufHandle( void ) const
GetBytes
WEAVE_ERROR GetBytes( uint8_t *buf, uint32_t bufSize )
Obtén el valor del byte actual o del elemento de la string UTF8.
Para determinar el tamaño del búfer de entrada requerido, llama al método GetLength() antes de llamar a GetBytes().
Detalles | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Parámetros |
|
||||||||||
Valores que se muestran |
|
GetContainerType
TLVType GetContainerType( void ) const
Muestra el tipo de contenedor en el que TLVReader está leyendo en ese momento.
El método GetContainerType() muestra el tipo de contenedor de TLV en el que lee TLVReader. Si el TLVReader se posiciona en el nivel más externo de una codificación TLV (es decir, antes o después del elemento TLV más externo), el método mostrará kTLVType_Notspecified.
Detalles | |
---|---|
Qué muestra |
El TLVType del contenedor actual o kTLVType_Notspecified si el TLVReader no se posiciona dentro de un contenedor.
|
GetControlByte
uint16_t GetControlByte( void ) const
Muestra el byte de control asociado con el elemento TLV actual.
Idealmente, nadie necesita 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 por parte de las Utilidades dedepuraciónde TLV (que intentan decodificar el byte de control de etiquetas cuando imprime el contenido del búfer de TLV).
Detalles | |
---|---|
Qué muestra |
Un número entero sin firma que contiene el byte de control asociado con el elemento TLV actual. Se muestra kTLVControlByte_Notspecified si el lector no se coloca en un elemento.
|
GetDataPtr
WEAVE_ERROR GetDataPtr( const uint8_t *& data )
Obtén un puntero al byte inicial codificado de un byte TLV o un elemento de string UTF8.
Este método muestra un puntero directo al valor de cadena codificado dentro del búfer de entrada subyacente. Para tener éxito, el método requiere que todo el valor de la string esté presente en un solo búfer. De lo contrario, el método muestra WEAVE_ERROR_TLV_UNDERRUN. Esto hace que el método sea de uso limitado cuando se leen datos de varios búferes discontinuos.
Detalles | |||||||||
---|---|---|---|---|---|---|---|---|---|
Parámetros |
|
||||||||
Valores que se muestran |
|
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 el número de bytes en la string, no el número de caracteres.
Detalles | |
---|---|
Qué muestra |
La longitud (en bytes) de los datos asociados con el elemento TLV actual, 0 si el elemento actual no es una string UTF8 o una string de bytes, o si el lector no se encuentra en un elemento.
|
GetLengthRead
uint32_t GetLengthRead( void ) const
Muestra la cantidad total de bytes leídos desde que se inicializó el lector.
Detalles | |
---|---|
Qué muestra |
Es la 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 | |
---|---|
Qué muestra |
Un puntero en un 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 | |
---|---|
Qué muestra |
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 actual o del elemento de la string UTF8 como una string terminada en un valor 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 string para admitir el carácter nulo.
Detalles | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Parámetros |
|
||||||||||
Valores que se muestran |
|
GetTag
uint64_t GetTag( void ) const
Muestra la etiqueta asociada con el elemento TLV actual.
El valor que muestra GetTag() se puede utilizar con las funciones de utilidad de etiquetas (IsProfileTag(), IsContextTag(), ProfileIdFromTag(), etc.) para determinar el tipo de etiqueta y extraer varios valores de campo de etiqueta.
Detalles | |
---|---|
Qué 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
Init
void Init( const TLVReader & aReader )
Init
void Init( const uint8_t *data, uint32_t dataLen )
Init
void Init( PacketBuffer *buf, uint32_t maxLen )
Inicializa un objeto TLVReader para leer desde un único PacketBuffer.
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 analizan los bytes de maxLen.
Detalles | |||||
---|---|---|---|---|---|
Parámetros |
|
Init
void Init( PacketBuffer *buf, uint32_t maxLen, bool allowDiscontiguousBuffers )
Inicializa un objeto TLVReader para leer de uno o más PacketBuffers.
El análisis comienza en la posición inicial del búfer (buf->DataStart()). Si allowDiscontiguousBuffers es verdadero, el lector avanzará por 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 de búfer (como se indica en buf->Datalen()) o hasta que se analizan los bytes maxLen.
Detalles | |||||||
---|---|---|---|---|---|---|---|
Parámetros |
|
Siguiente
WEAVE_ERROR Next( void )
Avanza el objeto TLVReader al siguiente elemento TLV que se leerá.
El método Next() posiciona el objeto de lector en el siguiente elemento en una codificación TLV que se encuentra en el mismo contexto de contención. En particular, si el lector se coloca en el nivel más externo de una codificación TLV, llamar a Next() hará que el lector avance al siguiente elemento superior. Si el lector se posiciona dentro de un elemento contenedor TLV (una estructura, un array o una ruta), llamar a Next() hará que el lector avance al siguiente elemento miembro del contenedor.
Dado que Next() restringe el movimiento del lector al contexto de contención actual, si se llama a Next() cuando el lector se ubica en un elemento de contenedor, se avanzará sobre el contenedor y se omitirán sus elementos miembros (y los miembros de cualquier contenedor anidado) hasta que llegue al primer elemento después del contenedor.
Cuando no haya más elementos dentro de un contexto de contención particular, el método Next() mostrará un error WEAVE_END_OF_TLV y la posición del lector no cambiará.
Detalles | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Valores que se muestran |
|
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(TLVTypeexpectedType, uint64_texpectedTag) es un método útil que tiene el mismo comportamiento que Next(), pero también verifica que el tipo y la etiqueta del elemento TLV nuevo coincidan con los argumentos proporcionados.
Detalles | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parámetros |
|
||||||||||||||||
Valores que se muestran |
|
OpenContainer
WEAVE_ERROR OpenContainer( TLVReader & containerReader )
Inicializa un objeto TLVReader nuevo para leer los miembros de un elemento de contenedor TLV.
El método OpenContainer() inicializa un objeto TLVReader nuevo para leer los elementos miembros de un contenedor de TLV (una estructura, un array o una ruta). Cuando se llama a OpenContainer(), el objeto TLVReader actual debe posicionarse en el elemento del contenedor para que se pueda 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 al que se llama a OpenContainer() se conoce como lector principal.
Cuando se muestra el método OpenContainer(), el lector del contenedor se posiciona justo antes del primer miembro del contenedor. Si llamas a Next() en el lector de contenedores, se avanzará por los miembros de la colección hasta llegar al final. En 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. Cuando una aplicación termina de usar el lector de contenedores, debe cerrarla. Para ello, se debe llamar a CloseContainer() en el lector principal y pasar el lector de contenedores como argumento. Las aplicaciones pueden cerrar el lector del contenedor en cualquier momento, con o sin leer todos los elementos contenidos en el contenedor subyacente. Una vez que se cierra el lector de contenedores, las aplicaciones pueden continuar usando el lector principal.
El lector de contenedores hereda varias propiedades de configuración del lector superior. que son los siguientes:
- El ID de perfil implícito (ImplicitProfileId)
- El puntero de datos de aplicación (AppData)
- Puntero de la función GetNextBuffer
Detalles | |||||
---|---|---|---|---|---|
Parámetros |
|
||||
Valores que se muestran |
|
Omitir
WEAVE_ERROR Skip( void )
Avanza el objeto TLVReader hasta inmediatamente después del elemento TLV actual.
El método Skip() coloca el objeto de lector inmediatamente después del elemento TLV actual, de modo que una llamada posterior a Next() haga que el lector avance al siguiente elemento. Al igual que con Next(), si el lector se posiciona en un elemento contenedor en el momento de la llamada, se omitirán los miembros del contenedor. Si el lector no está posicionado sobre ningún elemento, su posición no se modifica.
Detalles | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Valores que se muestran |
|
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 que se muestran |
|
Funciones protegidas
ClearElementState
void ClearElementState( void )
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 de un encabezado de 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 mediante la lectura sin un búfer de destino.
Detalles | |||||
---|---|---|---|---|---|
Valores que se muestran |
|
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 )