nl:: Weave:: TLV:: TLVUpdater
#include <src/lib/core/WeaveTLV.h>
Fournit une interface Reader/Writer unifiée permettant de modifier, d'ajouter et de supprimer des éléments au format TLV.
Résumé
TLVUpdater est une union des objets TLVReader et TLVWriter. Il fournit des méthodes d'interface permettant de modifier/supprimer des données dans un encodage et d'ajouter de nouveaux éléments à l'encodage TLV. L'objet TLVUpdater agit essentiellement comme deux curseurs, l'un pour lire l'encodage existant et l'autre pour l'écriture (soit pour copier des données existantes, soit pour écrire de nouvelles données).
Sur le plan sémantique, l'objet TLVUpdater fonctionne comme une union entre TLVReader et TLVWriter. Les méthodes TLVUpdater ont des significations plus ou moins similaires à celles de leurs homologues similaires dans TLVReader/TLVWriter. En cas de différences dans la sémantique, celles-ci sont clairement documentées dans la section des commentaires de la fonction dans WeaveTLVUpdater.cpp.
Remarque particulièrement importante concernant les méthodes PutBytes() et PutString() de TLVUpdater : il peut laisser l'encodage dans un état corrompu, seul l'en-tête de l'élément étant écrit en cas de débordement. Les applications peuvent appeler GetRestezFreeLength() pour s'assurer qu'il y a environ assez d'espace libre pour écrire l'encodage. Notez que GetRestezFreeLength() ne vous indique que les octets disponibles disponibles. De plus, il n'existe aucun moyen pour l'application de connaître la longueur des données encodées qui sont écrites. En cas de débordement, PutBytes() et PutString() renvoient WEAVE_ERROR_BUFFER_TOO_Small à l'appelant.
En outre, notez que la méthode Next() est surchargée pour ignorer l'élément actuel et faire passer le lecteur interne à l'élément suivant. Étant donné que le fait d'ignorer des éléments déjà encodés nécessite de modifier les variables d'état de l'espace libre du rédacteur interne pour tenir compte du nouvel espace libéré (mis à disposition en les ignorant), l'application doit appeler Next() sur le programme de mise à jour après une méthode Get() dont elle ne souhaite pas réécrire la valeur (ce qui équivaut à ignorer l'élément actuel).
Fonctions publiques |
|
---|---|
CopyElement(TLVReader & reader)
|
|
CopyElement(uint64_t tag, TLVReader & reader)
|
|
DupBytes(uint8_t *& buf, uint32_t & dataLen)
|
|
DupString(char *& buf)
|
|
EndContainer(TLVType outerContainerType)
|
|
EnterContainer(TLVType & outerContainerType)
|
Prépare un objet TLVUpdater pour lire les éléments d'un conteneur.
|
ExitContainer(TLVType outerContainerType)
|
|
Finalize(void)
|
|
Get(bool & v)
|
|
Get(int8_t & v)
|
|
Get(int16_t & v)
|
|
Get(int32_t & v)
|
|
Get(int64_t & v)
|
|
Get(uint8_t & v)
|
|
Get(uint16_t & v)
|
|
Get(uint32_t & v)
|
|
Get(uint64_t & v)
|
|
Get(float & v)
|
|
Get(double & v)
|
|
GetBytes(uint8_t *buf, uint32_t bufSize)
|
|
GetContainerType(void) const
|
|
GetDataPtr(const uint8_t *& data)
|
|
GetImplicitProfileId(void)
|
uint32_t
|
GetLength(void) const
|
uint32_t
|
GetLengthRead(void) const
|
uint32_t
|
GetLengthWritten(void)
|
uint32_t
|
GetReader(TLVReader & containerReader)
|
void
|
GetRemainingFreeLength(void)
|
uint32_t
|
GetRemainingLength(void) const
|
uint32_t
|
GetString(char *buf, uint32_t bufSize)
|
|
GetTag(void) const
|
uint64_t
|
GetType(void) const
|
|
Init(uint8_t *buf, uint32_t dataLen, uint32_t maxLen)
|
Initialisez un objet TLVUpdater pour modifier un seul tampon d'entrée.
|
Init(TLVReader & aReader, uint32_t freeLen)
|
Initialisez un objet TLVUpdater à l'aide d'un TLVReader.
|
Move(void)
|
|
MoveUntilEnd(void)
|
void
Déplacez tout le contenu du point de lecture actuel du TLVUpdater jusqu'à la fin du tampon d'entrée TLV vers la sortie.
|
Next(void)
|
Ignore l'élément actuel et fait avancer l'objet TLVUpdater vers l'élément suivant dans la TLV d'entrée.
|
Put(uint64_t tag, int8_t v)
|
|
Put(uint64_t tag, int16_t v)
|
|
Put(uint64_t tag, int32_t v)
|
|
Put(uint64_t tag, int64_t v)
|
|
Put(uint64_t tag, uint8_t v)
|
|
Put(uint64_t tag, uint16_t v)
|
|
Put(uint64_t tag, uint32_t v)
|
|
Put(uint64_t tag, uint64_t v)
|
|
Put(uint64_t tag, int8_t v, bool preserveSize)
|
|
Put(uint64_t tag, int16_t v, bool preserveSize)
|
|
Put(uint64_t tag, int32_t v, bool preserveSize)
|
|
Put(uint64_t tag, int64_t v, bool preserveSize)
|
|
Put(uint64_t tag, uint8_t v, bool preserveSize)
|
|
Put(uint64_t tag, uint16_t v, bool preserveSize)
|
|
Put(uint64_t tag, uint32_t v, bool preserveSize)
|
|
Put(uint64_t tag, uint64_t v, bool preserveSize)
|
|
Put(uint64_t tag, float v)
|
|
Put(uint64_t tag, double v)
|
|
PutBoolean(uint64_t tag, bool v)
|
|
PutBytes(uint64_t tag, const uint8_t *buf, uint32_t len)
|
|
PutNull(uint64_t tag)
|
|
PutString(uint64_t tag, const char *buf)
|
|
PutString(uint64_t tag, const char *buf, uint32_t len)
|
|
SetImplicitProfileId(uint32_t profileId)
|
void
Définissez l'ID de profil implicite pour l'objet TLVUpdater.
|
StartContainer(uint64_t tag, TLVType containerType, TLVType & outerContainerType)
|
|
VerifyEndOfContainer(void)
|
Fonctions publiques
CopyElement
WEAVE_ERROR CopyElement( TLVReader & reader )
CopyElement
WEAVE_ERROR CopyElement( uint64_t tag, TLVReader & reader )
DupBytes
WEAVE_ERROR DupBytes( uint8_t *& buf, uint32_t & dataLen )
DupString
WEAVE_ERROR DupString( char *& buf )
EndContainer
WEAVE_ERROR EndContainer( TLVType outerContainerType )
EnterContainer
WEAVE_ERROR EnterContainer( TLVType & outerContainerType )
Prépare un objet TLVUpdater pour lire les éléments d'un conteneur.
Elle encode également un début d'objet conteneur dans la sortie TLV.
La méthode EnterContainer() prépare l'objet TLVUpdater actuel pour commencer à lire les éléments membres d'un conteneur TLV (structure, tableau ou chemin d'accès). Pour chaque appel à EnterContainer(), les applications doivent effectuer un appel correspondant à ExitContainer().
Lorsque la méthode EnterContainer() est appelée, le lecteur TLVUpdater doit être positionné sur l'élément conteneur. La méthode utilise comme argument une référence à une valeur TLVType qui sera utilisée pour enregistrer le contexte du programme de mise à jour pendant la lecture du conteneur.
Lorsque la méthode EnterContainer() est renvoyée, le programme de mise à jour est positionné immédiatement avant le premier membre du conteneur. L'appel répété de Next() fait avancer le programme de mise à jour parmi les membres de la collection jusqu'à la fin, auquel cas il renvoie WEAVE_END_OF_TLV.
Une fois que l'application a fini de lire un conteneur, elle peut continuer à lire les éléments situés après le conteneur en appelant la méthode ExitContainer().
Détails | |||||||
---|---|---|---|---|---|---|---|
Paramètres |
|
||||||
Valeurs renvoyées |
|
ExitContainer
WEAVE_ERROR ExitContainer( TLVType outerContainerType )
Effectue la lecture d'un élément de conteneur TLV et encode une fin de l'élément TLV dans la sortie TLV.
La méthode ExitContainer() restaure l'état d'un objet TLVUpdater après un appel à EnterContainer(). Pour chaque appel à EnterContainer(), les applications doivent effectuer un appel correspondant à ExitContainer(), en transmettant la valeur de contexte renvoyée par la méthode EnterContainer().
Lorsque ExitContainer() est renvoyé, le lecteur TLVUpdater est positionné immédiatement avant le premier élément qui suit le conteneur dans l'entrée TLV. À ce stade, les applications peuvent appeler Next() pour faire défiler les éléments restants.
Une fois que la méthode EnterContainer() a été appelée, les applications peuvent appeler ExitContainer() sur le programme de mise à jour à tout moment, que tous les éléments du conteneur sous-jacent aient été lus ou non. Notez également que si vous appelez ExitContainer() avant de lire tous les éléments du conteneur, le conteneur mis à jour sera tronqué dans la sortie TLV.
Détails | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Paramètres |
|
||||||||||
Valeurs renvoyées |
|
Finaliser
WEAVE_ERROR Finalize( void )
Télécharger
WEAVE_ERROR Get( bool & v )
Télécharger
WEAVE_ERROR Get( int8_t & v )
Télécharger
WEAVE_ERROR Get( int16_t & v )
Télécharger
WEAVE_ERROR Get( int32_t & v )
Télécharger
WEAVE_ERROR Get( int64_t & v )
Télécharger
WEAVE_ERROR Get( uint8_t & v )
Télécharger
WEAVE_ERROR Get( uint16_t & v )
Télécharger
WEAVE_ERROR Get( uint32_t & v )
Télécharger
WEAVE_ERROR Get( uint64_t & v )
Télécharger
WEAVE_ERROR Get( float & v )
Télécharger
WEAVE_ERROR Get( double & v )
GetBytes
WEAVE_ERROR GetBytes( uint8_t *buf, uint32_t bufSize )
GetContainerType
TLVType GetContainerType( void ) const
GetDataPtr
WEAVE_ERROR GetDataPtr( const uint8_t *& data )
GetImplicitProfileId
uint32_t GetImplicitProfileId( void )
GetLength
uint32_t GetLength( void ) const
GetLengthRead
uint32_t GetLengthRead( void ) const
GetLengthWritten
uint32_t GetLengthWritten( void )
GetReader
void GetReader( TLVReader & containerReader )
GetRemainingFreeLength
uint32_t GetRemainingFreeLength( void )
GetRemainingLength
uint32_t GetRemainingLength( void ) const
GetString
WEAVE_ERROR GetString( char *buf, uint32_t bufSize )
GetTag
uint64_t GetTag( void ) const
GetType
TLVType GetType( void ) const
Init
WEAVE_ERROR Init( uint8_t *buf, uint32_t dataLen, uint32_t maxLen )
Initialisez un objet TLVUpdater pour modifier un seul tampon d'entrée.
Lors de l'appel de cette méthode, les données TLV du tampon sont déplacées à la fin du tampon et un objet TLVReader privé est initialisé sur ce tampon déplacé. Un objet TLVWriter privé est également initialisé sur l'espace libre désormais disponible au début. Les applications peuvent utiliser l'objet TLVUpdater pour analyser les données TLV, et modifier/supprimer des éléments existants ou ajouter de nouveaux éléments à l'encodage.
Détails | |||||||
---|---|---|---|---|---|---|---|
Paramètres |
|
||||||
Valeurs renvoyées |
|
Init
WEAVE_ERROR Init( TLVReader & aReader, uint32_t freeLen )
Initialisez un objet TLVUpdater à l'aide d'un TLVReader.
Lors de l'appel de cette méthode, les données TLV du tampon pointées par TLVReader sont déplacées du point de lecture actuel vers la fin du tampon. Un nouvel objet privé TLVReader est initialisé pour lire à partir de ce nouvel emplacement, tandis qu'un nouvel objet privé TLVWriter est initialisé pour écrire dans l'espace tampon libéré.
Notez que si TLVReader est déjà "activé", d'un élément, elle est d'abord retirée par rapport au début de cet élément. Notez également que cet écart fonctionne bien avec les éléments de conteneur. En d'autres termes, si TLVReader a déjà été utilisé pour appeler EnterContainer(), il n'y a rien à faire. Toutefois, si TLVReader a été positionné sur l'élément conteneur et que EnterContainer() n'a pas encore été appelé, l'objet TLVReader est sauvegardé au début de l'en-tête du conteneur.
L'objet TLVReader d'entrée est détruit avant le renvoi, et l'application ne doit pas l'utiliser à nouveau.
Détails | |||||||
---|---|---|---|---|---|---|---|
Paramètres |
|
||||||
Valeurs renvoyées |
|
Déplacer
WEAVE_ERROR Move( void )
Copie l'élément actuel de l'entrée TLV vers la sortie TLV.
La méthode Move() copie l'élément actuel sur lequel est positionné le lecteur du TLVUpdater au rédacteur du TLVUpdater. L'application doit appeler Next() et positionner le lecteur TLVUpdater sur un élément avant d'appeler cette méthode. Comme pour la méthode TLVReader::Next(), si le lecteur est positionné sur un élément de conteneur au moment de l'appel, tous les membres du conteneur sont copiés. Si le lecteur n'est positionné sur aucun élément, rien ne change à l'appel de cette méthode.
Détails | |||||||||
---|---|---|---|---|---|---|---|---|---|
Valeurs renvoyées |
|
MoveUntilEnd
void MoveUntilEnd( void )
Déplacez tout le contenu du point de lecture actuel du TLVUpdater jusqu'à la fin du tampon d'entrée TLV vers la sortie.
Cette méthode permet de tout déplacer depuis le point de lecture actuel du TLVUpdater jusqu'à la fin du tampon du lecteur vers le rédacteur de TLVUpdater.
Suivant
WEAVE_ERROR Next( void )
Ignore l'élément actuel et fait avancer l'objet TLVUpdater vers l'élément suivant dans la TLV d'entrée.
La méthode Next() ignore l'élément actuel dans la TLV d'entrée et fait avancer le lecteur de TLVUpdater vers l'élément suivant qui se trouve dans le même contexte de structuration. En particulier, si le lecteur est positionné au niveau le plus externe d'un encodage TLV, l'appel de Next() le fait passer à l'élément suivant, tout en haut. Si le lecteur est placé dans un élément de conteneur TLV (une structure, un tableau ou un chemin d'accès), l'appel de Next() le fait passer à l'élément de membre suivant du conteneur.
Étant donné que Next() contraint les mouvements du lecteur au contexte actuel de structuration, l'appel de Next() lorsque le lecteur est placé sur un élément de conteneur avance au-dessus du conteneur, en ignorant ses éléments membres (et ceux des conteneurs imbriqués) jusqu'à ce qu'il atteigne le premier élément après le conteneur.
En l'absence d'autres éléments dans un contexte de structuration particulier, la méthode Next() renvoie une erreur WEAVE_END_OF_TLV et la position du lecteur reste inchangée.
Détails | |||||
---|---|---|---|---|---|
Valeurs renvoyées |
|
Écrire
WEAVE_ERROR Put( uint64_t tag, int8_t v )
Écrire
WEAVE_ERROR Put( uint64_t tag, int16_t v )
Écrire
WEAVE_ERROR Put( uint64_t tag, int32_t v )
Écrire
WEAVE_ERROR Put( uint64_t tag, int64_t v )
Écrire
WEAVE_ERROR Put( uint64_t tag, uint8_t v )
Écrire
WEAVE_ERROR Put( uint64_t tag, uint16_t v )
Écrire
WEAVE_ERROR Put( uint64_t tag, uint32_t v )
Écrire
WEAVE_ERROR Put( uint64_t tag, uint64_t v )
Écrire
WEAVE_ERROR Put( uint64_t tag, int8_t v, bool preserveSize )
Écrire
WEAVE_ERROR Put( uint64_t tag, int16_t v, bool preserveSize )
Écrire
WEAVE_ERROR Put( uint64_t tag, int32_t v, bool preserveSize )
Écrire
WEAVE_ERROR Put( uint64_t tag, int64_t v, bool preserveSize )
Écrire
WEAVE_ERROR Put( uint64_t tag, uint8_t v, bool preserveSize )
Écrire
WEAVE_ERROR Put( uint64_t tag, uint16_t v, bool preserveSize )
Écrire
WEAVE_ERROR Put( uint64_t tag, uint32_t v, bool preserveSize )
Écrire
WEAVE_ERROR Put( uint64_t tag, uint64_t v, bool preserveSize )
Écrire
WEAVE_ERROR Put( uint64_t tag, float v )
Écrire
WEAVE_ERROR Put( uint64_t tag, double v )
PutBoolean
WEAVE_ERROR PutBoolean( uint64_t tag, bool v )
PutBytes
WEAVE_ERROR PutBytes( uint64_t tag, const uint8_t *buf, uint32_t len )
PutNull
WEAVE_ERROR PutNull( uint64_t tag )
PutString
WEAVE_ERROR PutString( uint64_t tag, const char *buf )
PutString
WEAVE_ERROR PutString( uint64_t tag, const char *buf, uint32_t len )
SetImplicitProfileId
void SetImplicitProfileId( uint32_t profileId )
Définissez l'ID de profil implicite pour l'objet TLVUpdater.
Cette méthode définit l'ID de profil implicite pour l'objet TLVUpdater. Lorsque le programme de mise à jour est invité à encoder un nouvel élément, si l'ID de profil de la balise associée au nouvel élément correspond à la valeur de profileId
, il encode la balise sous forme implicite et omet ainsi l'ID de profil dans le processus.
Détails | |||
---|---|---|---|
Paramètres |
|
StartContainer
WEAVE_ERROR StartContainer( uint64_t tag, TLVType containerType, TLVType & outerContainerType )