nl::Weave::TLV::TLVWriter

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

Fournit un encodeur économe en mémoire pour écrire des données au format TLV Weave.

Résumé

TLVWriter implémente un encodeur en mode flux simple pour les données TLV Weave. Les applications écrivent des données dans un encodage en appelant l'une des méthodes Put() du rédacteur, en transmettant les informations de balise et de valeur associées si nécessaire. De même, les applications peuvent encoder des types de conteneurs TLV (structures, tableaux ou chemins) en appelant les méthodes OpenContainer() ou EnterContainer() du rédacteur.

Un objet TLVWriter peut écrire des données directement dans un tampon de sortie fixe ou dans une chaîne d'un ou plusieurs objets PacketBuffer. De plus, les applications peuvent fournir leurs propres fonctions GetNewBuffer et FinalizeBuffer pour diriger la sortie vers une destination arbitraire, par exemple un socket ou une file d'attente d'événements.

Héritage

Sous-classes directes connues: nl::Weave::TLV::CircularTLVWriter

Types protégés

@72{
  kEndOfContainerMarkerSize = 1
}
énum

Types publics

FinalizeBufferFunct)(TLVWriter &writer, uintptr_t bufHandle, uint8_t *bufStart, uint32_t bufLen) WEAVE_ERROR(*
Fonction utilisée pour finaliser le résultat d'un objet TLVWriter.
GetNewBufferFunct)(TLVWriter &writer, uintptr_t &bufHandle, uint8_t *&bufStart, uint32_t &bufLen) WEAVE_ERROR(*
Fonction qui fournit un nouvel espace de tampon de sortie à un TLVWriter

Attributs publics

AppData
void *
Champ de pointeur pouvant être utilisé pour des données spécifiques à une application.
FinalizeBuffer
Pointeur vers une fonction qui sera appelée une fois la fonction TLVWriter finalisée.
GetNewBuffer
Pointeur vers une fonction qui fournira un nouvel espace de tampon de sortie à TLVWriter.
ImplicitProfileId
uint32_t
ID de profil des tags devant être encodés de manière implicite.

Attributs protégés

mBufHandle
uintptr_t
mBufStart
uint8_t *
mContainerType
mLenWritten
uint32_t
mMaxLen
uint32_t
mRemainingLen
uint32_t
mWritePoint
uint8_t *

Fonctions publiques

CloseContainer(TLVWriter & containerWriter)
Complète l'écriture d'un conteneur TLV après un appel à OpenContainer().
ContinuePutBytes(const uint8_t *buf, uint32_t len)
Encode une valeur de chaîne d'octets TLV.
CopyContainer(TLVReader & container)
Il copie un élément de conteneur TLV à partir d'un objet TLVReader.
CopyContainer(uint64_t tag, TLVReader & container)
Encode un élément de conteneur TLV à partir d'un ensemble d'éléments membres pré-codés.
CopyContainer(uint64_t tag, const uint8_t *encodedContainer, uint16_t encodedContainerLen)
Elle encode un élément de conteneur TLV contenant les éléments membres d'un conteneur précodé.
CopyElement(TLVReader & reader)
Copie un élément TLV d'un objet lecteur dans l'éditeur.
CopyElement(uint64_t tag, TLVReader & reader)
EndContainer(TLVType outerContainerType)
Complète l'encodage d'un élément de conteneur TLV.
Finalize(void)
Terminez l'écriture d'un encodage TLV.
GetContainerType(void) const
Renvoie le type de conteneur dans lequel la fonction TLVWriter écrit actuellement.
GetLengthWritten(void)
uint32_t
Renvoie le nombre total d'octets écrits depuis l'initialisation du rédacteur.
Init(uint8_t *buf, uint32_t maxLen)
void
Elle initialise un objet TLVWriter à écrire dans un seul tampon de sortie.
Init(PacketBuffer *buf, uint32_t maxLen)
void
Initialise un objet TLVWriter à écrire dans un seul PacketBuffer.
Init(PacketBuffer *buf, uint32_t maxLen, bool allowDiscontiguousBuffers)
void
Elle initialise un objet TLVWriter à écrire dans un ou plusieurs PacketBuffers.
InitMalloced(uint8_t *& outBuf, uint32_t initialBufSize, uint32_t maxLen)
void
Elle initialise un objet TLVWriter à écrire dans un tampon dynamique.
OpenContainer(uint64_t tag, TLVType containerType, TLVWriter & containerWriter)
Elle initialise un nouvel objet TLVWriter permettant d'écrire les membres d'un élément de conteneur TLV.
Put(uint64_t tag, int8_t v)
Encode une valeur entière signée TLV.
Put(uint64_t tag, int8_t v, bool preserveSize)
Encode une valeur entière signée 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)
Encode une valeur entière non signée TLV.
Put(uint64_t tag, uint8_t v, bool preserveSize)
Encode une valeur entière non signée 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)
Encode une valeur à virgule flottante TLV.
PutBoolean(uint64_t tag, bool v)
Encode une valeur booléenne TLV.
PutBytes(uint64_t tag, const uint8_t *buf, uint32_t len)
Encode une valeur de chaîne d'octets TLV.
PutNull(uint64_t tag)
Encode une valeur nulle TLV.
PutPreEncodedContainer(uint64_t tag, TLVType containerType, const uint8_t *data, uint32_t dataLen)
Encode un élément de conteneur TLV à partir d'un ensemble d'éléments membres pré-codés.
PutString(uint64_t tag, const char *buf)
Encode une valeur de chaîne UTF8 TLV.
PutString(uint64_t tag, const char *buf, uint32_t len)
Encode une valeur de chaîne UTF8 TLV.
PutStringF(uint64_t tag, const char *fmt, ...)
Encodez la sortie de chaîne formatée conformément au format de l'élément TLV.
StartContainer(uint64_t tag, TLVType containerType, TLVType & outerContainerType)
Commence à encoder un nouvel élément de conteneur TLV.
StartPutBytes(uint64_t tag, uint32_t totalLen)
Encode une chaîne d'octets TLV en plusieurs fragments.
VPutStringF(uint64_t tag, const char *fmt, va_list ap)
Encodez la sortie de chaîne formatée conformément au format de l'élément TLV.

Fonctions statiques publiques

FinalizePacketBuffer(TLVWriter & writer, uintptr_t bufHandle, uint8_t *bufStart, uint32_t dataLen)
Implémentation d'une fonction FinalizeBuffer TLVWriter permettant d'écrire dans une chaîne de PacketBuffers.
GetNewBuffer_Malloced(TLVWriter & writer, uintptr_t & bufHandle, uint8_t *& bufStart, uint32_t & bufLen)
Implémentation d'une fonction GetNewBuffer TLVWriter pour écrire dans un tampon dynamique.
GetNewPacketBuffer(TLVWriter & writer, uintptr_t & bufHandle, uint8_t *& bufStart, uint32_t & bufLen)
Implémentation d'une fonction GetNewBuffer TLVWriter pour écrire dans une chaîne de PacketBuffers.

Fonctions protégées

IsCloseContainerReserved(void) const
bool
Déterminez si le conteneur doit réserver de l'espace pour le symbole CloseContainer au point de démarrage ou d'ouverture du conteneur.
IsContainerOpen(void) const
bool
SetCloseContainerReserved(bool aCloseContainerReserved)
void
Indiquez si le conteneur doit réserver de l'espace pour le symbole CloseContainer au début ou à l'ouverture du conteneur.
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)

Types protégés

@72

 @72

Types publics

FinalizeBufferFunct

WEAVE_ERROR(* FinalizeBufferFunct)(TLVWriter &writer, uintptr_t bufHandle, uint8_t *bufStart, uint32_t bufLen)

Fonction utilisée pour finaliser le résultat d'un objet TLVWriter.

Les fonctions de ce type sont appelées lorsque la méthode Finalize() d'un TLVWriter est appelée. La fonction doit effectuer tous les nettoyages ou finals nécessaires liés à la consommation de la sortie de l'objet writer. Il peut s'agir, par exemple, de l'enregistrement de la longueur finale de l'encodage ou de la fermeture d'un descripteur de fichier.

Détails
Paramètres
[in] writer
Référence à l'objet TLVWriter en cours de finalisation.
[in,out] bufHandle
Valeur de contexte uintptr_t définie par les appels précédents à la fonction GetNewBuffer.
[in,out] bufStart
Pointeur vers le début du tampon de sortie actuel (et final).
[in,out] bufLen
Nombre d'octets contenus dans le tampon vers lequel bufStart pointe.
Valeurs renvoyées
WEAVE_NO_ERROR
Si la finalisation a réussi.
other
Autres codes d'erreur Weave ou spécifiques à la plate-forme indiquant qu'une erreur s'est produite lors de la finalisation.

GetNewBufferFunct

WEAVE_ERROR(* GetNewBufferFunct)(TLVWriter &writer, uintptr_t &bufHandle, uint8_t *&bufStart, uint32_t &bufLen)

Fonction qui fournit un nouvel espace de tampon de sortie à un TLVWriter

Les fonctions de ce type permettent de préparer un nouvel espace tampon dans lequel TLVWriter pourra écrire. Lorsqu'elle est appelée, la fonction doit renvoyer un pointeur vers un emplacement de mémoire où de nouvelles données doivent être écrites, avec une longueur maximale associée. La fonction peut fournir un espace d'écriture soit en allouant un nouveau tampon pour stocker les données, soit en effaçant les données précédemment écrites d'un tampon existant.

Détails
Paramètres
[in] writer
Référence à l'objet TLVWriter qui demande un nouvel espace de tampon.
[in,out] bufHandle
Référence à une valeur uintptr_t que la fonction peut utiliser pour stocker des données de contexte entre les appels. Cette valeur est initialisée sur 0 avant le premier appel.
[in,out] bufStart
Référence à un pointeur de données. À l'entrée de la fonction, bufStart pointe le début du tampon de sortie actuel. Lors de la sortie, bufStart doit pointer vers le début du nouveau tampon de sortie. La nouvelle valeur du pointeur peut être identique à la valeur précédente (par exemple, si la fonction a copié les données existantes ailleurs) ou elle peut pointer vers un tout nouvel emplacement.
[in,out] bufLen
Référence à un entier non signé. À l'entrée dans la fonction, bufLen contient le nombre d'octets d'espace inutilisé dans le tampon actuel. À la sortie, bufLen devrait contenir le nombre maximal d'octets pouvant être écrits dans le nouveau tampon de sortie.
Valeurs renvoyées
WEAVE_NO_ERROR
Si la fonction a pu fournir plus d'espace de mémoire tampon pour le rédacteur.
other
Autres codes d'erreur Weave ou spécifiques à la plate-forme indiquant qu'une erreur s'est produite empêchant la fonction de générer de l'espace tampon supplémentaire.

Attributs publics

AppData

void * AppData

Champ de pointeur pouvant être utilisé pour des données spécifiques à une application.

FinalizeBuffer

FinalizeBufferFunct FinalizeBuffer

Pointeur vers une fonction qui sera appelée une fois la fonction TLVWriter finalisée.

Un objet TLVWriter appelle la fonction FinalizeBuffer chaque fois que sa méthode Finalize() est appelée. Les applications peuvent définir le pointeur de fonction à tout moment avant d'appeler Finalize(). Par défaut, le pointeur est défini sur NULL, ce qui oblige la méthode Finalize() à renoncer à appeler la fonction.

Pour en savoir plus sur l'implémentation d'une fonction FinalizeBuffer, consultez la définition du type FinalizeBufferFunct.

GetNewBuffer

GetNewBufferFunct GetNewBuffer

Pointeur vers une fonction qui fournira un nouvel espace de tampon de sortie à TLVWriter.

Un objet TLVWriter appelle la fonction GetNewBuffer chaque fois qu'une tentative d'écriture de données dépasse la taille du tampon de sortie actuel. S'il est défini sur NULL (valeur par défaut), le rédacteur renvoie une erreur WEAVE_ERROR_NO_MEMORY si les données de sortie dépassent le tampon actuel.

GetNewBuffer peut être défini à tout moment par une application, mais il est généralement défini lorsque le rédacteur est initialisé.

Consultez la définition du type GetNewBufferFunct pour en savoir plus sur l'implémentation d'une fonction GetNewBuffer.

ImplicitProfileId

uint32_t ImplicitProfileId

ID de profil des tags devant être encodés de manière implicite.

Lorsqu'un rédacteur est invité à encoder un nouvel élément, si l'ID de profil de la balise associée au nouvel élément correspond à la valeur du membre ImplicitProfileId, il encode la balise sous forme implicite, en omettant l'ID de profil lors du processus.

Par défaut, la propriété ImplicitProfileId est définie sur kProfileIdNotSpecification, ce qui indique au rédacteur de ne pas émettre de balises encodées implicitement. Les applications peuvent définir ImplicitProfileId à tout moment pour activer les balises d'encodage sous forme implicite à partir du point actuel de l'encodage. L'ID de profil à définir dépend généralement du contexte de l'application ou du protocole parlé.

.

Attributs protégés

mBufHandle

uintptr_t mBufHandle

mBufStart

uint8_t * mBufStart

mContainerType

TLVType mContainerType

mLenWritten

uint32_t mLenWritten

mMaxLen

uint32_t mMaxLen

mRemainingLen

uint32_t mRemainingLen

mWritePoint

uint8_t * mWritePoint

Fonctions publiques

CloseContainer

WEAVE_ERROR CloseContainer(
  TLVWriter & containerWriter
)

Complète l'écriture d'un conteneur TLV après un appel à OpenContainer().

La méthode CloseContainer() restaure l'état d'un objet TLVWriter parent après un appel à OpenContainer(). Pour chaque appel à OpenContainer(), les applications doivent effectuer un appel correspondant à CloseContainer(), en transmettant une référence au même rédacteur de conteneur aux deux méthodes.

Lorsque CloseContainer() est renvoyé, les applications peuvent continuer à utiliser le rédacteur parent pour écrire des éléments TLV supplémentaires qui apparaissent après l'élément conteneur. À ce stade, le rédacteur de conteneur fourni doit être considéré comme "désinitialisé". et ne doit pas être utilisée sans réinitialisation.

Détails
Paramètres
[in] containerWriter
Référence à l'objet TLVWriter fournie à la méthode OpenContainer().
Valeurs renvoyées
WEAVE_NO_ERROR
Si la méthode aboutit.
WEAVE_ERROR_INCORRECT_STATE
Si l'état du rédacteur de conteneur fourni est incorrect.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Si un autre rédacteur de conteneur a été ouvert sur le rédacteur de conteneur fourni, mais pas encore fermé.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si l'encodage du conteneur est terminé, vous dépassez la limite du nombre maximal d'octets spécifié lors de l'initialisation du rédacteur.
WEAVE_ERROR_NO_MEMORY
Si une tentative d'allocation d'un tampon de sortie échoue en raison d'un manque de mémoire.
other
Autres erreurs Weave ou spécifiques à la plate-forme renvoyées par les fonctions GetNewBuffer() ou FinalizeBuffer() configurées.

ContinuePutBytes

WEAVE_ERROR ContinuePutBytes(
  const uint8_t *buf,
  uint32_t len
)

Encode une valeur de chaîne d'octets TLV.

Il doit être utilisé avec StartPutBytes.

Détails
Paramètres
[in] buf
Pointeur vers un tampon contenant la chaîne d'octets à encoder.
[in] len
Nombre d'octets à encoder.
Valeurs renvoyées
WEAVE_NO_ERROR
Si la méthode aboutit.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Si un rédacteur de conteneur a été ouvert sur le rédacteur actuel, mais pas encore fermé.
WEAVE_ERROR_INVALID_TLV_TAG
Si la valeur de balise spécifiée est incorrecte ou inappropriée dans le contexte dans lequel la valeur est écrite.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si vous écrivez la valeur, vous dépassez la limite du nombre maximal d'octets spécifié lors de l'initialisation du rédacteur.
WEAVE_ERROR_NO_MEMORY
Si une tentative d'allocation d'un tampon de sortie échoue en raison d'un manque de mémoire.
other
Autres erreurs Weave ou spécifiques à la plate-forme renvoyées par les fonctions GetNewBuffer() ou FinalizeBuffer() configurées.

CopyContainer

WEAVE_ERROR CopyContainer(
  TLVReader & container
)

Il copie un élément de conteneur TLV à partir d'un objet TLVReader.

CopyContainer() encode un nouvel élément de conteneur TLV en copiant un élément de conteneur précodé situé à la position actuelle d'un objet TLVReader. La méthode écrit l'intégralité du nouvel élément de conteneur dans un seul appel, en copiant le type, la balise et les éléments du conteneur à partir de l'encodage source. Lorsque la méthode est renvoyée, l'objet writer peut être utilisé pour écrire des éléments TLV supplémentaires après l'élément conteneur.

Détails
Paramètres
[in] container
Référence à un objet TLVReader identifiant le conteneur TLV précodé à copier.
Valeurs renvoyées
WEAVE_NO_ERROR
Si la méthode aboutit.
WEAVE_ERROR_INCORRECT_STATE
Si le lecteur fourni n'est pas positionné sur un élément de conteneur.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Si un rédacteur de conteneur a été ouvert sur le rédacteur actuel, mais pas encore fermé.
WEAVE_ERROR_TLV_UNDERRUN
Si l'encodage TLV sous-jacent associé au lecteur fourni s'est terminé prématurément.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Si le lecteur fourni a rencontré un type d'élément TLV non valide ou non compatible.
WEAVE_ERROR_INVALID_TLV_TAG
Si le lecteur fourni a détecté une balise TLV dans un contexte non valide, ou si la balise associée au conteneur source est incorrecte ou non valide dans le contexte d'écriture du nouveau conteneur.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si vous écrivez la valeur, vous dépassez la limite du nombre maximal d'octets spécifié lors de l'initialisation du rédacteur.
WEAVE_ERROR_NO_MEMORY
Si une tentative d'allocation d'un tampon de sortie échoue en raison d'un manque de mémoire.
other
Autres erreurs Weave ou spécifiques à la plate-forme renvoyées par les fonctions GetNewBuffer() ou FinalizeBuffer() configurées, ou par la fonction GetNextBuffer() associée à l'objet lecteur.

CopyContainer

WEAVE_ERROR CopyContainer(
  uint64_t tag,
  TLVReader & container
)

Encode un élément de conteneur TLV à partir d'un ensemble d'éléments membres pré-codés.

La méthode CopyContainer() encode un nouvel élément de conteneur TLV (structure, tableau ou chemin d'accès) contenant un ensemble d'éléments membres issus d'un objet TLVReader. Lorsque la méthode est appelée, l'objet lecteur fourni doit être positionné sur un élément de conteneur TLV. Le conteneur nouvellement encodé possède le même type et les mêmes membres que le conteneur d'entrée. La balise du nouveau conteneur est spécifiée en tant que paramètre d'entrée.

Lorsque la méthode est renvoyée, l'objet writer peut être utilisé pour écrire des éléments TLV supplémentaires après l'élément conteneur.

Détails
Paramètres
[in] tag
Balise TLV à encoder avec le conteneur, ou AnonymousTag si le conteneur doit être encodé sans balise. Les valeurs de tag doivent être créées avec l'une des fonctions de définition de balise ProfileTag(), ContextTag() ou CommonTag().
[in] container
Référence à un objet TLVReader identifiant un conteneur TLV précodé dont le type et les membres doivent être copiés.
Valeurs renvoyées
WEAVE_NO_ERROR
Si la méthode aboutit.
WEAVE_ERROR_INCORRECT_STATE
Si le lecteur fourni n'est pas positionné sur un élément de conteneur.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Si un rédacteur de conteneur a été ouvert sur le rédacteur actuel, mais pas encore fermé.
WEAVE_ERROR_TLV_UNDERRUN
Si l'encodage TLV sous-jacent associé au lecteur fourni s'est terminé prématurément.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Si le lecteur fourni a rencontré un type d'élément TLV non valide ou non compatible.
WEAVE_ERROR_INVALID_TLV_TAG
Si le lecteur fourni a détecté une balise TLV dans un contexte non valide, ou si la balise fournie n'est pas valide ou n'est pas appropriée dans le contexte d'écriture du nouveau conteneur.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si vous écrivez la valeur, vous dépassez la limite du nombre maximal d'octets spécifié lors de l'initialisation du rédacteur.
WEAVE_ERROR_NO_MEMORY
Si une tentative d'allocation d'un tampon de sortie échoue en raison d'un manque de mémoire.
other
Autres erreurs Weave ou spécifiques à la plate-forme renvoyées par les fonctions GetNewBuffer() ou FinalizeBuffer() configurées, ou par la fonction GetNextBuffer() associée à l'objet lecteur.

CopyContainer

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

Elle encode un élément de conteneur TLV contenant les éléments membres d'un conteneur précodé.

La méthode CopyContainer() encode un nouvel élément de conteneur TLV (structure, tableau ou chemin d'accès) contenant un ensemble d'éléments membres issus du contenu d'un conteneur précodé fourni. Lorsque la méthode est appelée, les données du tampon d'entrée fourni sont analysées en tant qu'élément de conteneur TLV. Un nouveau conteneur est écrit, avec le même type et les mêmes membres que le conteneur d'entrée. La balise du nouveau conteneur est spécifiée en tant que paramètre d'entrée.

Lorsque la méthode est renvoyée, l'objet writer peut être utilisé pour écrire des éléments TLV supplémentaires après l'élément conteneur.

Détails
Paramètres
[in] tag
Balise TLV à encoder avec le conteneur, ou AnonymousTag si le conteneur doit être encodé sans balise. Les valeurs de tag doivent être créées avec l'une des fonctions de définition de balise ProfileTag(), ContextTag() ou CommonTag().
[in] encodedContainer
Un tampon contenant un conteneur TLV précodé dont le type et les membres doivent être copiés.
[in] encodedContainerLen
Longueur en octets du conteneur précodé.
Valeurs renvoyées
WEAVE_NO_ERROR
Si la méthode aboutit.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Si un rédacteur de conteneur a été ouvert sur le rédacteur actuel, mais pas encore fermé.
WEAVE_ERROR_TLV_UNDERRUN
Si le conteneur encodé s'est arrêté prématurément.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Si le conteneur encodé contient un type d'élément TLV non valide ou non compatible.
WEAVE_ERROR_INVALID_TLV_TAG
Si le conteneur encodé contient une balise TLV dans un contexte non valide, ou si la balise fournie n'est pas valide ou n'est pas appropriée dans le contexte d'écriture du nouveau conteneur.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si vous écrivez la valeur, vous dépassez la limite du nombre maximal d'octets spécifié lors de l'initialisation du rédacteur.
WEAVE_ERROR_NO_MEMORY
Si une tentative d'allocation d'un tampon de sortie échoue en raison d'un manque de mémoire.
other
Autres erreurs Weave ou spécifiques à la plate-forme renvoyées par les fonctions GetNewBuffer() ou FinalizeBuffer() configurées, ou par la fonction GetNextBuffer() associée à l'objet lecteur.

CopyElement

WEAVE_ERROR CopyElement(
  TLVReader & reader
)

Copie un élément TLV d'un objet lecteur dans l'éditeur.

La méthode CopyElement() encode un nouvel élément TLV dont le type, la balise et la valeur sont issus d'un objet TLVReader. Lorsque la méthode est appelée, l'objet lecteur fourni doit être positionné sur l'élément TLV source. Le nouvel élément encodé possède le même type, la même balise et le même contenu que le conteneur d'entrée. Si l'élément fourni est un conteneur TLV (structure, tableau ou chemin d'accès), l'intégralité du contenu du conteneur est copié.

Détails
Paramètres
[in] reader
Référence à un objet TLVReader identifiant un élément TLV précodé qui doit être copié.
Valeurs renvoyées
WEAVE_NO_ERROR
Si la méthode aboutit.
WEAVE_ERROR_INCORRECT_STATE
Si le lecteur fourni n'est pas positionné sur un élément.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Si un rédacteur de conteneur a été ouvert sur le rédacteur actuel, mais pas encore fermé.
WEAVE_ERROR_TLV_UNDERRUN
Si l'encodage TLV sous-jacent associé au lecteur fourni s'est terminé prématurément.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Si le lecteur fourni a rencontré un type d'élément TLV non valide ou non compatible.
WEAVE_ERROR_INVALID_TLV_TAG
Si le lecteur fourni a détecté une balise TLV dans un contexte non valide, ou si la balise fournie n'est pas valide ou n'est pas appropriée dans le contexte d'écriture du nouveau conteneur.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si vous écrivez la valeur, vous dépassez la limite du nombre maximal d'octets spécifié lors de l'initialisation du rédacteur.
WEAVE_ERROR_NO_MEMORY
Si une tentative d'allocation d'un tampon de sortie échoue en raison d'un manque de mémoire.
other
Autres erreurs Weave ou spécifiques à la plate-forme renvoyées par les fonctions GetNewBuffer() ou FinalizeBuffer() configurées, ou par la fonction GetNextBuffer() associée à l'objet lecteur.

CopyElement

WEAVE_ERROR CopyElement(
  uint64_t tag,
  TLVReader & reader
)

EndContainer

WEAVE_ERROR EndContainer(
  TLVType outerContainerType
)

Complète l'encodage d'un élément de conteneur TLV.

La méthode EndContainer() termine l'encodage d'un élément de conteneur TLV et restaure l'état d'un objet TLVWrite après un appel précédent à StartContainer(). Pour chaque appel à StartContainer(), les applications doivent effectuer un appel correspondant à EndContainer(), en transmettant la valeur TLVType renvoyée par l'appel StartContainer(). Lorsque EndContainer() est renvoyé, l'objet "writer" peut être utilisé pour écrire des éléments TLV supplémentaires qui suivent l'élément conteneur.

Détails
Paramètres
[in] outerContainerType
Valeur TLVType renvoyée par la méthode StartContainer().
Valeurs renvoyées
WEAVE_NO_ERROR
Si la méthode aboutit.
WEAVE_ERROR_INCORRECT_STATE
Si aucun appel StartContainer() correspondant n'a été effectué.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Si un rédacteur de conteneur a été ouvert sur le rédacteur actuel, mais pas encore fermé.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si vous écrivez la valeur, vous dépassez la limite du nombre maximal d'octets spécifié lors de l'initialisation du rédacteur.
WEAVE_ERROR_NO_MEMORY
Si une tentative d'allocation d'un tampon de sortie échoue en raison d'un manque de mémoire.
other
Autres erreurs Weave ou spécifiques à la plate-forme renvoyées par les fonctions GetNewBuffer() ou FinalizeBuffer() configurées.

Finaliser

WEAVE_ERROR Finalize(
  void
)

Terminez l'écriture d'un encodage TLV.

La méthode Finalize() termine le processus d'écriture d'un encodage TLV dans le tampon de sortie sous-jacent. Cette méthode doit être appelée par l'application avant d'utiliser le contenu du tampon. Finalize() ne peut être appelé que si aucun rédacteur de conteneur n'est ouvert pour le rédacteur actuel. (voir OpenContainer()).

Détails
Valeurs renvoyées
WEAVE_NO_ERROR
L'encodage a-t-il été finalisé correctement ?
WEAVE_ERROR_TLV_CONTAINER_OPEN
Si un rédacteur de conteneur a été ouvert sur le rédacteur actuel, mais pas encore fermé.
other
Autres erreurs Weave ou spécifiques à la plate-forme renvoyées par la fonction FinalizeBuffer() configurée.

GetContainerType

TLVType GetContainerType(
  void
) const 

Renvoie le type de conteneur dans lequel la fonction TLVWriter écrit actuellement.

La méthode GetContainerType() renvoie le type du conteneur TLV dans lequel TLVWriter écrit actuellement. Si TLVWriter n'écrit pas d'éléments dans un conteneur (c'est-à-dire, s'il écrit au niveau le plus externe d'un encodage), la méthode renvoie kTLVType_NotSpecified.

Détails
Renvoie
TLVType du conteneur actuel, ou kTLVType_NotSuggested si TLVWriter n'écrit pas d'éléments dans un conteneur.

GetLengthWritten

uint32_t GetLengthWritten(
  void
)

Renvoie le nombre total d'octets écrits depuis l'initialisation du rédacteur.

Détails
Renvoie
Nombre total d'octets écrits depuis l'initialisation du rédacteur.

Init

void Init(
  uint8_t *buf,
  uint32_t maxLen
)

Elle initialise un objet TLVWriter à écrire dans un seul tampon de sortie.

Détails
Paramètres
[in] buf
Pointeur vers le tampon dans lequel TLV doit être écrit.
[in] maxLen
Nombre maximal d'octets à écrire dans le tampon de sortie.

Init

void Init(
  PacketBuffer *buf,
  uint32_t maxLen
)

Initialise un objet TLVWriter à écrire dans un seul PacketBuffer.

L'écriture commence immédiatement après le dernier octet de données existantes dans le tampon fourni.

Détails
Paramètres
[in] buf
Pointeur vers un PackageBuffer dans lequel TLV doit être écrit.
[in] maxLen
Nombre maximal d'octets à écrire dans le tampon de sortie.

Init

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

Elle initialise un objet TLVWriter à écrire dans un ou plusieurs PacketBuffers.

L'écriture commence immédiatement après le dernier octet de données existantes dans le tampon spécifié. Si allowDiscontiguousBuffers est défini sur "true", des PacketBuffers supplémentaires seront alloués et enchaînés au tampon fourni afin de prendre en charge la quantité de données écrites. Si le tampon de sortie spécifié est déjà en tête d'une chaîne de tampons, la sortie sera écrite dans les tampons suivants de la chaîne avant l'allocation de nouveaux tampons.

Détails
Paramètres
[in] buf
Pointeur vers un PacketBuffer dans lequel les données TLV doivent être écrites.
[in] maxLen
Nombre maximal d'octets à écrire dans le ou les tampons de sortie.
[in] allowDiscontiguousBuffers
Si la valeur est "true", écrivez les données dans une chaîne de PacketBuffers, en allouant de nouveaux tampons si nécessaire pour stocker les données écrites. Si elle est définie sur "false", l'écriture échouera avec WEAVE_ERROR_BUFFER_TOO_Small si les données écrites dépassent l'espace disponible dans le tampon de sortie initial.

InitMalloced

void InitMalloced(
  uint8_t *& outBuf,
  uint32_t initialBufSize,
  uint32_t maxLen
)

Elle initialise un objet TLVWriter à écrire dans un tampon dynamique.

Détails
Paramètres
[in] buf
Référence à un pointeur qui recevra le tampon alloué.
[in] maxLen
Nombre maximal d'octets à écrire dans le tampon de sortie.
[in] initialBufSize
Nombre initial d'octets devant être alloués au tampon.

OpenContainer

WEAVE_ERROR OpenContainer(
  uint64_t tag,
  TLVType containerType,
  TLVWriter & containerWriter
)

Elle initialise un nouvel objet TLVWriter permettant d'écrire les membres d'un élément de conteneur TLV.

La méthode OpenContainer() permet d'écrire des éléments de conteneur TLV (structure, tableaux ou chemins) dans un encodage. La méthode utilise le type et le tag (le cas échéant) du nouveau conteneur, ainsi qu'une référence à un nouvel objet "writer" (container writer) qui sera initialisé pour écrire les éléments du conteneur. Les applications écrivent les membres du nouveau conteneur à l'aide du rédacteur de conteneur, puis appellent CloseContainer() pour terminer l'encodage du conteneur.

Lorsque le rédacteur de conteneurs est ouvert, les applications ne doivent pas effectuer d'appels sur le rédacteur parent ni modifier son état.

Le rédacteur de conteneurs hérite de diverses propriétés de configuration du rédacteur parent. Les voici :

  • ID de profil implicite (ImplicitProfileId)
  • Pointeur de données d'application (AppData)
  • Pointeurs des fonctions GetNewBuffer et FinalizeBuffer

Détails
Paramètres
[in] tag
Balise TLV à encoder avec le conteneur, ou AnonymousTag si le conteneur doit être encodé sans balise. Les valeurs de tag doivent être créées avec l'une des fonctions de définition de balise ProfileTag(), ContextTag() ou CommonTag().
[in] containerType
Type de conteneur à encoder. Doit être l'un des suivants : kTLVType_Structure, kTLVType_Array ou kTLVType_Path.
[out] containerWriter
Référence à un objet TLVWriter qui sera initialisé pour écrire les membres du nouvel élément de conteneur. Toutes les données associées à l'objet fourni sont écrasées.
Valeurs renvoyées
WEAVE_NO_ERROR
Si la méthode aboutit.
WEAVE_ERROR_WRONG_TLV_TYPE
Si la valeur spécifiée pour containerType est incorrecte.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Si un rédacteur de conteneur a été ouvert sur le rédacteur actuel, mais pas encore fermé.
WEAVE_ERROR_INVALID_TLV_TAG
Si la valeur de balise spécifiée est incorrecte ou inappropriée dans le contexte dans lequel la valeur est écrite.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si vous écrivez la valeur, vous dépassez la limite du nombre maximal d'octets spécifié lors de l'initialisation du rédacteur.
WEAVE_ERROR_NO_MEMORY
Si une tentative d'allocation d'un tampon de sortie échoue en raison d'un manque de mémoire.
other
Autres erreurs Weave ou spécifiques à la plate-forme renvoyées par les fonctions GetNewBuffer() ou FinalizeBuffer() configurées.

Écrire

WEAVE_ERROR Put(
  uint64_t tag,
  int8_t v
)

Encode une valeur entière signée TLV.

Il s'agit d'une fonction de membre surchargée, fournie pour plus de commodité. Elle ne diffère des fonctions ci-dessus que par le ou les arguments qu'elle accepte.

Détails
Paramètres
[in] tag
Balise TLV à encoder avec la valeur, ou AnonymousTag si la valeur doit être encodée sans balise. Les valeurs de tag doivent être créées avec l'une des fonctions de définition de balise ProfileTag(), ContextTag() ou CommonTag().
[in] v
Valeur à encoder.
Valeurs renvoyées
WEAVE_NO_ERROR
Si la méthode aboutit.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Si un rédacteur de conteneur a été ouvert sur le rédacteur actuel, mais pas encore fermé.
WEAVE_ERROR_INVALID_TLV_TAG
Si la valeur de balise spécifiée est incorrecte ou inappropriée dans le contexte dans lequel la valeur est écrite.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si vous écrivez la valeur, vous dépassez la limite du nombre maximal d'octets spécifié lors de l'initialisation du rédacteur.
WEAVE_ERROR_NO_MEMORY
Si une tentative d'allocation d'un tampon de sortie échoue en raison d'un manque de mémoire.
other
Autres erreurs Weave ou spécifiques à la plate-forme renvoyées par les fonctions GetNewBuffer() ou FinalizeBuffer() configurées.

Écrire

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

Encode une valeur entière signée TLV.

Il s'agit d'une fonction de membre surchargée, fournie pour plus de commodité. Elle ne diffère des fonctions ci-dessus que par le ou les arguments qu'elle accepte.

Détails
Paramètres
[in] tag
Balise TLV à encoder avec la valeur, ou AnonymousTag si la valeur doit être encodée sans balise. Les valeurs de tag doivent être créées avec l'une des fonctions de définition de balise ProfileTag(), ContextTag() ou CommonTag().
[in] v
Valeur à encoder.
[in] preserveSize
"True" si la valeur doit être encodée dans le même nombre d'octets que pour le type d'entrée. "False" si la valeur doit être encodée selon le nombre minimal d'octets nécessaires pour représenter la valeur. Remarque: Nous vous recommandons vivement de définir ce paramètre sur "false".
Valeurs renvoyées
WEAVE_NO_ERROR
Si la méthode aboutit.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Si un rédacteur de conteneur a été ouvert sur le rédacteur actuel, mais pas encore fermé.
WEAVE_ERROR_INVALID_TLV_TAG
Si la valeur de balise spécifiée est incorrecte ou inappropriée dans le contexte dans lequel la valeur est écrite.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si vous écrivez la valeur, vous dépassez la limite du nombre maximal d'octets spécifié lors de l'initialisation du rédacteur.
WEAVE_ERROR_NO_MEMORY
Si une tentative d'allocation d'un tampon de sortie échoue en raison d'un manque de mémoire.
other
Autres erreurs Weave ou spécifiques à la plate-forme renvoyées par les fonctions GetNewBuffer() ou FinalizeBuffer() configurées.

Écrire

WEAVE_ERROR Put(
  uint64_t tag,
  int16_t v
)

Écrire

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

Écrire

WEAVE_ERROR Put(
  uint64_t tag,
  int32_t v
)

Écrire

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

Écrire

WEAVE_ERROR Put(
  uint64_t tag,
  int64_t v
)

Écrire

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

Écrire

WEAVE_ERROR Put(
  uint64_t tag,
  uint8_t v
)

Encode une valeur entière non signée TLV.

Il s'agit d'une fonction de membre surchargée, fournie pour plus de commodité. Elle ne diffère des fonctions ci-dessus que par le ou les arguments qu'elle accepte.

Détails
Paramètres
[in] tag
Balise TLV à encoder avec la valeur, ou AnonymousTag si la valeur doit être encodée sans balise. Les valeurs de tag doivent être créées avec l'une des fonctions de définition de balise ProfileTag(), ContextTag() ou CommonTag().
[in] v
Valeur à encoder.
Valeurs renvoyées
WEAVE_NO_ERROR
Si la méthode aboutit.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Si un rédacteur de conteneur a été ouvert sur le rédacteur actuel, mais pas encore fermé.
WEAVE_ERROR_INVALID_TLV_TAG
Si la valeur de balise spécifiée est incorrecte ou inappropriée dans le contexte dans lequel la valeur est écrite.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si vous écrivez la valeur, vous dépassez la limite du nombre maximal d'octets spécifié lors de l'initialisation du rédacteur.
WEAVE_ERROR_NO_MEMORY
Si une tentative d'allocation d'un tampon de sortie échoue en raison d'un manque de mémoire.
other
Autres erreurs Weave ou spécifiques à la plate-forme renvoyées par les fonctions GetNewBuffer() ou FinalizeBuffer() configurées.

Écrire

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

Encode une valeur entière non signée TLV.

Il s'agit d'une fonction de membre surchargée, fournie pour plus de commodité. Elle ne diffère des fonctions ci-dessus que par le ou les arguments qu'elle accepte.

Détails
Paramètres
[in] tag
Balise TLV à encoder avec la valeur, ou AnonymousTag si la valeur doit être encodée sans balise. Les valeurs de tag doivent être créées avec l'une des fonctions de définition de balise ProfileTag(), ContextTag() ou CommonTag().
[in] v
Valeur à encoder.
[in] preserveSize
"True" si la valeur doit être encodée dans le même nombre d'octets que pour le type d'entrée. "False" si la valeur doit être encodée selon le nombre minimal d'octets nécessaires pour représenter la valeur. Remarque: Nous vous recommandons vivement de définir ce paramètre sur "false".
Valeurs renvoyées
WEAVE_NO_ERROR
Si la méthode aboutit.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Si un rédacteur de conteneur a été ouvert sur le rédacteur actuel, mais pas encore fermé.
WEAVE_ERROR_INVALID_TLV_TAG
Si la valeur de balise spécifiée est incorrecte ou inappropriée dans le contexte dans lequel la valeur est écrite.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si vous écrivez la valeur, vous dépassez la limite du nombre maximal d'octets spécifié lors de l'initialisation du rédacteur.
WEAVE_ERROR_NO_MEMORY
Si une tentative d'allocation d'un tampon de sortie échoue en raison d'un manque de mémoire.
other
Autres erreurs Weave ou spécifiques à la plate-forme renvoyées par les fonctions GetNewBuffer() ou FinalizeBuffer() configurées.

Écrire

WEAVE_ERROR Put(
  uint64_t tag,
  uint16_t v
)

Écrire

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

Écrire

WEAVE_ERROR Put(
  uint64_t tag,
  uint32_t v
)

Écrire

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

Écrire

WEAVE_ERROR Put(
  uint64_t tag,
  uint64_t v
)

É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
)

Encode une valeur à virgule flottante TLV.

Il s'agit d'une fonction de membre surchargée, fournie pour plus de commodité. Elle ne diffère des fonctions ci-dessus que par le ou les arguments qu'elle accepte.

Détails
Paramètres
[in] tag
Balise TLV à encoder avec la valeur, ou AnonymousTag si la valeur doit être encodée sans balise. Les valeurs de tag doivent être créées avec l'une des fonctions de définition de balise ProfileTag(), ContextTag() ou CommonTag().
[in] v
Valeur à encoder.
Valeurs renvoyées
WEAVE_NO_ERROR
Si la méthode aboutit.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Si un rédacteur de conteneur a été ouvert sur le rédacteur actuel, mais pas encore fermé.
WEAVE_ERROR_INVALID_TLV_TAG
Si la valeur de balise spécifiée est incorrecte ou inappropriée dans le contexte dans lequel la valeur est écrite.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si vous écrivez la valeur, vous dépassez la limite du nombre maximal d'octets spécifié lors de l'initialisation du rédacteur.
WEAVE_ERROR_NO_MEMORY
Si une tentative d'allocation d'un tampon de sortie échoue en raison d'un manque de mémoire.
other
Autres erreurs Weave ou spécifiques à la plate-forme renvoyées par les fonctions GetNewBuffer() ou FinalizeBuffer() configurées.

PutBoolean

WEAVE_ERROR PutBoolean(
  uint64_t tag,
  bool v
)

Encode une valeur booléenne TLV.

Détails
Paramètres
[in] tag
Balise TLV à encoder avec la valeur, ou AnonymousTag si la valeur doit être encodée sans balise. Les valeurs de tag doivent être créées avec l'une des fonctions de définition de balise ProfileTag(), ContextTag() ou CommonTag().
[in] v
Valeur à encoder.
Valeurs renvoyées
WEAVE_NO_ERROR
Si la méthode aboutit.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Si un rédacteur de conteneur a été ouvert sur le rédacteur actuel, mais pas encore fermé.
WEAVE_ERROR_INVALID_TLV_TAG
Si la valeur de balise spécifiée est incorrecte ou inappropriée dans le contexte dans lequel la valeur est écrite.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si vous écrivez la valeur, vous dépassez la limite du nombre maximal d'octets spécifié lors de l'initialisation du rédacteur.
WEAVE_ERROR_NO_MEMORY
Si une tentative d'allocation d'un tampon de sortie échoue en raison d'un manque de mémoire.
other
Autres erreurs Weave ou spécifiques à la plate-forme renvoyées par les fonctions GetNewBuffer() ou FinalizeBuffer() configurées.

PutBytes

WEAVE_ERROR PutBytes(
  uint64_t tag,
  const uint8_t *buf,
  uint32_t len
)

Encode une valeur de chaîne d'octets TLV.

Détails
Paramètres
[in] tag
Balise TLV à encoder avec la valeur, ou AnonymousTag si la valeur doit être encodée sans balise. Les valeurs de tag doivent être créées avec l'une des fonctions de définition de balise ProfileTag(), ContextTag() ou CommonTag().
[in] buf
Pointeur vers un tampon contenant la chaîne d'octets à encoder.
[in] len
Nombre d'octets à encoder.
Valeurs renvoyées
WEAVE_NO_ERROR
Si la méthode aboutit.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Si un rédacteur de conteneur a été ouvert sur le rédacteur actuel, mais pas encore fermé.
WEAVE_ERROR_INVALID_TLV_TAG
Si la valeur de balise spécifiée est incorrecte ou inappropriée dans le contexte dans lequel la valeur est écrite.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si vous écrivez la valeur, vous dépassez la limite du nombre maximal d'octets spécifié lors de l'initialisation du rédacteur.
WEAVE_ERROR_NO_MEMORY
Si une tentative d'allocation d'un tampon de sortie échoue en raison d'un manque de mémoire.
other
Autres erreurs Weave ou spécifiques à la plate-forme renvoyées par les fonctions GetNewBuffer() ou FinalizeBuffer() configurées.

PutNull

WEAVE_ERROR PutNull(
  uint64_t tag
)

Encode une valeur nulle TLV.

Détails
Paramètres
[in] tag
Balise TLV à encoder avec la valeur, ou AnonymousTag si la valeur doit être encodée sans balise. Les valeurs de tag doivent être créées avec l'une des fonctions de définition de balise ProfileTag(), ContextTag() ou CommonTag().
Valeurs renvoyées
WEAVE_NO_ERROR
Si la méthode aboutit.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Si un rédacteur de conteneur a été ouvert sur le rédacteur actuel, mais pas encore fermé.
WEAVE_ERROR_INVALID_TLV_TAG
Si la valeur de balise spécifiée est incorrecte ou inappropriée dans le contexte dans lequel la valeur est écrite.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si vous écrivez la valeur, vous dépassez la limite du nombre maximal d'octets spécifié lors de l'initialisation du rédacteur.
WEAVE_ERROR_NO_MEMORY
Si une tentative d'allocation d'un tampon de sortie échoue en raison d'un manque de mémoire.
other
Autres erreurs Weave ou spécifiques à la plate-forme renvoyées par les fonctions GetNewBuffer() ou FinalizeBuffer() configurées.

PutPreEncodedContainer

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

Encode un élément de conteneur TLV à partir d'un ensemble d'éléments membres pré-codés.

La méthode PutPreEncodedContainer() encode un nouvel élément de conteneur TLV (structure, tableau ou chemin) contenant un ensemble d'éléments membres issus d'un tampon précodé. Le tampon d'entrée doit contenir zéro ou plusieurs éléments TLV encodés en entier, avec des balises conformes aux règles associées au type de conteneur spécifié (par exemple, les membres de la structure doivent avoir des balises, contrairement aux membres du tableau).

La méthode encode l'intégralité de l'élément conteneur en un seul appel. Lorsque la fonction PutPreEncodedContainer() est renvoyée, l'objet writer peut être utilisé pour écrire des éléments TLV supplémentaires après l'élément conteneur.

Détails
Paramètres
[in] tag
Balise TLV à encoder avec le conteneur, ou AnonymousTag si le conteneur doit être encodé sans balise. Les valeurs de tag doivent être créées avec l'une des fonctions de définition de balise ProfileTag(), ContextTag() ou CommonTag().
[in] containerType
Type de conteneur à encoder. Doit être l'un des suivants : kTLVType_Structure, kTLVType_Array ou kTLVType_Path.
[in] data
Pointeur vers un tampon contenant zéro ou plusieurs éléments TLV encodés qui deviendront membres du nouveau conteneur.
[in] dataLen
Nombre d'octets dans le tampon data.
Valeurs renvoyées
WEAVE_NO_ERROR
Si la méthode aboutit.
WEAVE_ERROR_WRONG_TLV_TYPE
Si la valeur spécifiée pour containerType est incorrecte.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Si un rédacteur de conteneur a été ouvert sur le rédacteur actuel, mais pas encore fermé.
WEAVE_ERROR_INVALID_TLV_TAG
Si la valeur de balise spécifiée est incorrecte ou inappropriée dans le contexte dans lequel la valeur est écrite.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si vous écrivez la valeur, vous dépassez la limite du nombre maximal d'octets spécifié lors de l'initialisation du rédacteur.
WEAVE_ERROR_NO_MEMORY
Si une tentative d'allocation d'un tampon de sortie échoue en raison d'un manque de mémoire.
other
Autres erreurs Weave ou spécifiques à la plate-forme renvoyées par les fonctions GetNewBuffer() ou FinalizeBuffer() configurées.

PutString

WEAVE_ERROR PutString(
  uint64_t tag,
  const char *buf
)

Encode une valeur de chaîne UTF8 TLV.

Détails
Paramètres
[in] tag
Balise TLV à encoder avec la valeur, ou AnonymousTag si la valeur doit être encodée sans balise. Les valeurs de tag doivent être créées avec l'une des fonctions de définition de balise ProfileTag(), ContextTag() ou CommonTag().
[in] buf
Pointeur vers la chaîne UTF-8 se terminant par une valeur nulle à encoder.
Valeurs renvoyées
WEAVE_NO_ERROR
Si la méthode aboutit.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Si un rédacteur de conteneur a été ouvert sur le rédacteur actuel, mais pas encore fermé.
WEAVE_ERROR_INVALID_TLV_TAG
Si la valeur de balise spécifiée est incorrecte ou inappropriée dans le contexte dans lequel la valeur est écrite.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si vous écrivez la valeur, vous dépassez la limite du nombre maximal d'octets spécifié lors de l'initialisation du rédacteur.
WEAVE_ERROR_NO_MEMORY
Si une tentative d'allocation d'un tampon de sortie échoue en raison d'un manque de mémoire.
other
Autres erreurs Weave ou spécifiques à la plate-forme renvoyées par les fonctions GetNewBuffer() ou FinalizeBuffer() configurées.

PutString

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

Encode une valeur de chaîne UTF8 TLV.

Détails
Paramètres
[in] tag
Balise TLV à encoder avec la valeur, ou AnonymousTag si la valeur doit être encodée sans balise. Les valeurs de tag doivent être créées avec l'une des fonctions de définition de balise ProfileTag(), ContextTag() ou CommonTag().
[in] buf
Pointeur vers la chaîne UTF-8 à encoder.
[in] len
Longueur (en octets) de la chaîne à encoder.
Valeurs renvoyées
WEAVE_NO_ERROR
Si la méthode aboutit.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Si un rédacteur de conteneur a été ouvert sur le rédacteur actuel, mais pas encore fermé.
WEAVE_ERROR_INVALID_TLV_TAG
Si la valeur de balise spécifiée est incorrecte ou inappropriée dans le contexte dans lequel la valeur est écrite.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si vous écrivez la valeur, vous dépassez la limite du nombre maximal d'octets spécifié lors de l'initialisation du rédacteur.
WEAVE_ERROR_NO_MEMORY
Si une tentative d'allocation d'un tampon de sortie échoue en raison d'un manque de mémoire.
other
Autres erreurs Weave ou spécifiques à la plate-forme renvoyées par les fonctions GetNewBuffer() ou FinalizeBuffer() configurées.

PutStringF

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

Encodez la sortie de chaîne formatée conformément au format de l'élément TLV.

PutStringF est l'équivalent d'un sprintf où la sortie est stockée dans un élément TLV plutôt que dans un tampon de caractères. Lorsque la fonctionnalité printf étendue est disponible, la fonction peut générer la chaîne de résultat dans un espace de stockage sous-jacent discontinu. L'implémentation prend en charge les améliorations suivantes pour Printf:

La plate-forme fournit un vcbprintf basé sur le rappel, qui permet d'appeler un rappel personnalisé à la place de putchar.

La plate-forme fournit une variante de vsnprintf appelée vsnprintf_ex, qui se comporte exactement comme vsnprintf, sauf qu'elle permet d'omettre les n premiers caractères de la sortie.

Notez que si la fonction basée sur le rappel est peut-être la plus simple et utilise le moins de code, la variété de fonctions vsprintf_ex consomme moins de pile.

Si aucune des options ci-dessus n'est disponible, mais que la plate-forme fournit malloc, la fonction attribuera un tampon temporaire pour stocker la sortie. Lorsque la plate-forme n'apporte aucune amélioration à la famille printf ni au malloc, la sortie est tronquée pour tenir à l'état continu dans l'espace de stockage TLV actuel.

Détails
Paramètres
[in] tag
Balise TLV à encoder avec la valeur, ou AnonymousTag si la valeur doit être encodée sans balise. Les valeurs de tag doivent être créées avec l'une des fonctions de définition de balise ProfileTag(), ContextTag() ou CommonTag().
[in] fmt
Chaîne de format utilisée pour mettre en forme la liste d'arguments. Suit la même syntaxe et les mêmes règles que la chaîne de mise en forme pour la famille de fonctions printf.
[in] ...
Liste d'arguments à formater dans la valeur de sortie en fonction de fmt.
Valeurs renvoyées
WEAVE_NO_ERROR
Si la méthode aboutit.
other
Si les appels sous-jacents aux méthodes TLVWriter WriteElementHead ou GetNewBuffer échouent, leur erreur est immédiatement transférée vers la pile d'appel.

StartContainer

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

Commence à encoder un nouvel élément de conteneur TLV.

La méthode StartContainer() permet d'écrire des éléments de conteneur TLV (structure, tableaux ou chemins) dans un encodage. La méthode utilise le type et le tag (le cas échéant) du nouveau conteneur, ainsi qu'une référence à une valeur TLVType qui sera utilisée pour enregistrer le contexte actuel de l'élément writer lorsqu'il est utilisé pour écrire le conteneur.

Lorsque la méthode StartContainer() est renvoyée, l'application doit utiliser l'objet TLVWriter actuel pour écrire les éléments du conteneur. Une fois l'opération terminée, l'application doit appeler la méthode EndContainer() pour terminer l'encodage du conteneur.

Détails
Paramètres
[in] tag
Balise TLV à encoder avec le conteneur, ou AnonymousTag si le conteneur doit être encodé sans balise. Les valeurs de tag doivent être créées avec l'une des fonctions de définition de balise ProfileTag(), ContextTag() ou CommonTag().
[in] containerType
Type de conteneur à encoder. Doit être l'un des suivants : kTLVType_Structure, kTLVType_Array ou kTLVType_Path.
[out] outerContainerType
Référence à une valeur TLVType qui reçoit le contexte de l'auteur.
Valeurs renvoyées
WEAVE_NO_ERROR
Si la méthode aboutit.
WEAVE_ERROR_WRONG_TLV_TYPE
Si la valeur spécifiée pour containerType est incorrecte.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Si un rédacteur de conteneur a été ouvert sur le rédacteur actuel, mais pas encore fermé.
WEAVE_ERROR_INVALID_TLV_TAG
Si la valeur de balise spécifiée est incorrecte ou inappropriée dans le contexte dans lequel la valeur est écrite.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si vous écrivez la valeur, vous dépassez la limite du nombre maximal d'octets spécifié lors de l'initialisation du rédacteur.
WEAVE_ERROR_NO_MEMORY
Si une tentative d'allocation d'un tampon de sortie échoue en raison d'un manque de mémoire.
other
Autres erreurs Weave ou spécifiques à la plate-forme renvoyées par les fonctions GetNewBuffer() ou FinalizeBuffer() configurées.

StartPutBytes

WEAVE_ERROR StartPutBytes(
  uint64_t tag,
  uint32_t totalLen
)

Encode une chaîne d'octets TLV en plusieurs fragments.

Il doit être utilisé avec ContinuePutBytes.

Détails
Paramètres
[in] tag
Balise TLV à encoder avec la valeur, ou AnonymousTag si la valeur doit être encodée sans balise. Les valeurs de tag doivent être créées avec l'une des fonctions de définition de balise ProfileTag(), ContextTag() ou CommonTag().
[in] totalLen
Nombre total d'octets à encoder.
Valeurs renvoyées
WEAVE_NO_ERROR
Si la méthode aboutit.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Si un rédacteur de conteneur a été ouvert sur le rédacteur actuel, mais pas encore fermé.
WEAVE_ERROR_INVALID_TLV_TAG
Si la valeur de balise spécifiée est incorrecte ou inappropriée dans le contexte dans lequel la valeur est écrite.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si vous écrivez la valeur, vous dépassez la limite du nombre maximal d'octets spécifié lors de l'initialisation du rédacteur.
WEAVE_ERROR_NO_MEMORY
Si une tentative d'allocation d'un tampon de sortie échoue en raison d'un manque de mémoire.
other
Autres erreurs Weave ou spécifiques à la plate-forme renvoyées par les fonctions GetNewBuffer() ou FinalizeBuffer() configurées.

VPutStringF

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

Encodez la sortie de chaîne formatée conformément au format de l'élément TLV.

PutStringF est l'équivalent d'un sprintf où la sortie est stockée dans un élément TLV plutôt que dans un tampon de caractères. Lorsque la fonctionnalité printf étendue est disponible, la fonction peut générer la chaîne de résultat dans un espace de stockage sous-jacent discontinu. L'implémentation prend en charge les améliorations suivantes pour Printf:

La plate-forme fournit un vcbprintf basé sur le rappel, qui permet d'appeler un rappel personnalisé à la place de putchar.

La plate-forme fournit une variante de vsnprintf appelée vsnprintf_ex, qui se comporte exactement comme vsnprintf, sauf qu'elle permet d'omettre les n premiers caractères de la sortie.

Notez que si la fonction basée sur le rappel est peut-être la plus simple et utilise le moins de code, la variété de fonctions vsprintf_ex consomme moins de pile.

Si aucune des options ci-dessus n'est disponible, mais que la plate-forme fournit malloc, la fonction attribuera un tampon temporaire pour stocker la sortie. Lorsque la plate-forme n'apporte aucune amélioration à la famille printf ni au malloc, la sortie est tronquée pour tenir à l'état continu dans l'espace de stockage TLV actuel.

Détails
Paramètres
[in] tag
Balise TLV à encoder avec la valeur, ou AnonymousTag si la valeur doit être encodée sans balise. Les valeurs de tag doivent être créées avec l'une des fonctions de définition de balise ProfileTag(), ContextTag() ou CommonTag().
[in] fmt
Chaîne de format utilisée pour mettre en forme la liste d'arguments. Suit la même syntaxe et les mêmes règles que la chaîne de mise en forme pour la famille de fonctions printf.
[in] ap
Liste d'arguments à formater dans la valeur de sortie en fonction de fmt.
Valeurs renvoyées
WEAVE_NO_ERROR
Si la méthode aboutit.
other
Si les appels sous-jacents aux méthodes TLVWriter WriteElementHead ou GetNewBuffer échouent, leur erreur est immédiatement transférée vers la pile d'appel.

Fonctions statiques publiques

FinalizePacketBuffer

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

Implémentation d'une fonction FinalizeBuffer TLVWriter permettant d'écrire dans une chaîne de PacketBuffers.

La fonction FinalizePacketBuffer() effectue la finalisation nécessaire lorsque vous utilisez TLVWriter pour écrire dans une chaîne de PacketBuffers. La fonction est conçue pour être utilisée conjointement avec la fonction GetNewPacketBuffer().

Consultez la définition du type FinalizeBufferFunct pour en savoir plus sur l'API de la fonction FinalizePacketBuffer().

GetNewBuffer_Malloced

WEAVE_ERROR GetNewBuffer_Malloced(
  TLVWriter & writer,
  uintptr_t & bufHandle,
  uint8_t *& bufStart,
  uint32_t & bufLen
)

Implémentation d'une fonction GetNewBuffer TLVWriter pour écrire dans un tampon dynamique.

La fonction GetNewBuffer_Malloced() fournit un nouvel espace de sortie à un TLVWriter en doublant la taille du tampon dynamique sous-jacent, si nécessaire pour stocker l'encodage. La fonction est conçue pour être attribuée au pointeur de fonction GetNewBuffer TLVWriter.

Consultez la définition du type GetNewBufferFunct pour en savoir plus sur l'API de la fonction GetNewBuffer_Malloced().

GetNewPacketBuffer

WEAVE_ERROR GetNewPacketBuffer(
  TLVWriter & writer,
  uintptr_t & bufHandle,
  uint8_t *& bufStart,
  uint32_t & bufLen
)

Implémentation d'une fonction GetNewBuffer TLVWriter pour écrire dans une chaîne de PacketBuffers.

La fonction GetNewPacketBuffer() fournit un nouvel espace de sortie à un TLVWriter en allouant une chaîne d'un ou plusieurs PacketBuffers selon les besoins pour stocker l'encodage. La fonction est conçue pour être attribuée au pointeur de fonction GetNewBuffer TLVWriter.

Notez que lorsque vous utilisez GetNewPacketBuffer avec TLVWriter, la fonction FinalizePacketBuffer() correspondante (ou un équivalent) doit également être utilisée pour finaliser la chaîne de tampon.

Consultez la définition du type GetNewBufferFunct pour en savoir plus sur l'API de la fonction GetNewPacketBuffer().

Fonctions protégées

IsCloseContainerReserved

bool IsCloseContainerReserved(
  void
) const 

Déterminez si le conteneur doit réserver de l'espace pour le symbole CloseContainer au point de démarrage ou d'ouverture du conteneur.

IsContainerOpen

bool IsContainerOpen(
  void
) const 

SetCloseContainerReserved

void SetCloseContainerReserved(
  bool aCloseContainerReserved
)

Indiquez si le conteneur doit réserver de l'espace pour le symbole CloseContainer au début ou à l'ouverture du conteneur.

SetContainerOpen

void SetContainerOpen(
  bool aContainerOpen
)

WriteData

WEAVE_ERROR WriteData(
  const uint8_t *p,
  uint32_t len
)

WriteElementHead

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

WriteElementWithData

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