нл:: Переплетение:: ТЛВ:: TLVWriter

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

Предоставляет эффективный кодировщик памяти для записи данных в формате Weave TLV .

Краткое содержание

TLVWriter реализует потоковый кодер только для прямого обмена данными Weave TLV . Приложения записывают данные в кодировку, вызывая один из методов записи Put() , передавая при необходимости связанные теги и информацию о значениях. Аналогичным образом приложения могут кодировать типы контейнеров TLV (структуры, массивы или пути), вызывая методы записи OpenContainer() или EnterContainer().

Объект TLVWriter может записывать данные непосредственно в фиксированный выходной буфер или в цепочку из одного или нескольких объектов PacketBuffer. Кроме того, приложения могут предоставлять свои собственные функции GetNewBuffer и FinalizeBuffer для направления вывода в произвольное место назначения, например сокет или очередь событий.

Наследование

Прямые известные подклассы: nl::Weave::TLV::CircularTLVWriter

Защищенные типы

@72 {
kEndOfContainerMarkerSize = 1
}
перечисление

Публичные типы

FinalizeBufferFunct )(TLVWriter &writer, uintptr_t bufHandle, uint8_t *bufStart, uint32_t bufLen) WEAVE_ERROR(*
Функция, используемая для завершения вывода объекта TLVWriter .
GetNewBufferFunct )(TLVWriter &writer, uintptr_t &bufHandle, uint8_t *&bufStart, uint32_t &bufLen) WEAVE_ERROR(*
Функция, которая предоставляет новое выходное буферное пространство TLVWriter .

Публичные атрибуты

AppData
void *
Поле указателя, которое можно использовать для данных, специфичных для приложения.
FinalizeBuffer
Указатель на функцию, которая будет вызвана после завершения работы TLVWriter .
GetNewBuffer
Указатель на функцию, которая предоставит новое выходное буферное пространство TLVWriter .
ImplicitProfileId
uint32_t
Идентификатор профиля тегов, которые следует закодировать в неявной форме.

Защищенные атрибуты

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

Общественные функции

CloseContainer ( TLVWriter & containerWriter)
Завершает запись TLV- контейнера после вызова OpenContainer() .
ContinuePutBytes (const uint8_t *buf, uint32_t len)
Кодирует значение строки байтов TLV .
CopyContainer ( TLVReader & container)
Копирует элемент контейнера TLV из объекта TLVReader .
CopyContainer (uint64_t tag, TLVReader & container)
Кодирует элемент контейнера TLV из предварительно закодированного набора элементов-членов.
CopyContainer (uint64_t tag, const uint8_t *encodedContainer, uint16_t encodedContainerLen)
Кодирует элемент контейнера TLV , который содержит элементы-члены из предварительно закодированного контейнера.
CopyElement ( TLVReader & reader)
Копирует элемент TLV из объекта чтения в модуль записи.
CopyElement (uint64_t tag, TLVReader & reader)
EndContainer ( TLVType outerContainerType)
Завершает кодирование элемента контейнера TLV .
Finalize (void)
Завершите написание TLV -кодировки.
GetContainerType (void) const
Возвращает тип контейнера, в котором в данный момент пишет TLVWriter .
GetLengthWritten (void)
uint32_t
Возвращает общее количество байтов, записанных с момента инициализации средства записи.
Init (uint8_t *buf, uint32_t maxLen)
void
Инициализирует объект TLVWriter для записи в один выходной буфер.
Init ( PacketBuffer *buf, uint32_t maxLen)
void
Инициализирует объект TLVWriter для записи в один PacketBuffer.
Init ( PacketBuffer *buf, uint32_t maxLen, bool allowDiscontiguousBuffers)
void
Инициализирует объект TLVWriter для записи в один или несколько PacketBuffers.
InitMalloced (uint8_t *& outBuf, uint32_t initialBufSize, uint32_t maxLen)
void
Инициализирует объект TLVWriter для записи в динамический буфер.
OpenContainer (uint64_t tag, TLVType containerType, TLVWriter & containerWriter)
Инициализирует новый объект TLVWriter для записи членов элемента контейнера TLV .
Put (uint64_t tag, int8_t v)
Кодирует целое число со знаком TLV .
Put (uint64_t tag, int8_t v, bool preserveSize)
Кодирует целое число со знаком 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)
Кодирует целое число без знака TLV .
Put (uint64_t tag, uint8_t v, bool preserveSize)
Кодирует целое число без знака 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)
Кодирует значение TLV с плавающей запятой.
PutBoolean (uint64_t tag, bool v)
Кодирует логическое значение TLV .
PutBytes (uint64_t tag, const uint8_t *buf, uint32_t len)
Кодирует значение строки байтов TLV .
PutNull (uint64_t tag)
Кодирует нулевое значение TLV .
PutPreEncodedContainer (uint64_t tag, TLVType containerType, const uint8_t *data, uint32_t dataLen)
Кодирует элемент контейнера TLV из предварительно закодированного набора элементов-членов.
PutString (uint64_t tag, const char *buf)
Кодирует строковое значение TLV UTF8.
PutString (uint64_t tag, const char *buf, uint32_t len)
Кодирует строковое значение TLV UTF8.
PutStringF (uint64_t tag, const char *fmt, ...)
Закодируйте выходные данные строки, отформатированные в соответствии с форматом элемента TLV .
StartContainer (uint64_t tag, TLVType containerType, TLVType & outerContainerType)
Начинает кодировать новый элемент контейнера TLV .
StartPutBytes (uint64_t tag, uint32_t totalLen)
Кодирует строку байтов TLV в несколько фрагментов.
VPutStringF (uint64_t tag, const char *fmt, va_list ap)
Закодируйте выходные данные строки, отформатированные в соответствии с форматом элемента TLV .

Публичные статические функции

FinalizePacketBuffer ( TLVWriter & writer, uintptr_t bufHandle, uint8_t *bufStart, uint32_t dataLen)
Реализация функции TLVWriter FinalizeBuffer для записи в цепочку PacketBuffers.
GetNewBuffer_Malloced ( TLVWriter & writer, uintptr_t & bufHandle, uint8_t *& bufStart, uint32_t & bufLen)
Реализация функции TLVWriter GetNewBuffer для записи в динамический буфер.
GetNewPacketBuffer ( TLVWriter & writer, uintptr_t & bufHandle, uint8_t *& bufStart, uint32_t & bufLen)
Реализация функции TLVWriter GetNewBuffer для записи в цепочку PacketBuffers.

Защищенные функции

IsCloseContainerReserved (void) const
bool
Определите, должен ли контейнер резервировать место для символа CloseContainer в момент запуска/открытия контейнера.
IsContainerOpen (void) const
bool
SetCloseContainerReserved (bool aCloseContainerReserved)
void
Установите, должен ли контейнер резервировать место для символа CloseContainer в момент запуска/открытия контейнера.
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)

Защищенные типы

@72

 @72

Публичные типы

FinalizeBufferFunct

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

Функция, используемая для завершения вывода объекта TLVWriter .

Функции этого типа вызываются при вызове метода Finalize() класса TLVWriter . Ожидается, что функция выполнит любую необходимую очистку или завершение, связанную с использованием выходных данных объекта записи. Примеры этого включают такие вещи, как запись окончательной длины кодирования или закрытие дескриптора файла.

Подробности
Параметры
[in] writer
Ссылка на объект TLVWriter , который завершается.
[in,out] bufHandle
Значение контекста uintptr_t, заданное предыдущими вызовами функции GetNewBuffer .
[in,out] bufStart
Указатель на начало текущего (и последнего) выходного буфера.
[in,out] bufLen
Количество байтов, содержащихся в буфере, на который указывает bufStart .
Возвращаемые значения
WEAVE_NO_ERROR
Если финализация прошла успешно.
other
Другие коды ошибок Weave или конкретной платформы, указывающие на то, что во время финализации произошла ошибка.

GetNewBufferFunct

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

Функция, которая предоставляет новое выходное буферное пространство TLVWriter .

Функции этого типа используются для подготовки нового буферного пространства для записи TLVWriter . Ожидается, что при вызове функция вернет указатель на ячейку памяти, куда должны быть записаны новые данные, а также соответствующую максимальную длину. Функция может предоставить пространство для записи либо путем выделения нового буфера для хранения данных, либо путем очистки ранее записанных данных из существующего буфера.

Подробности
Параметры
[in] writer
Ссылка на объект TLVWriter , запрашивающий новое буферное пространство.
[in,out] bufHandle
Ссылка на значение uintptr_t, которое функция может использовать для хранения данных контекста между вызовами. Это значение инициализируется значением 0 перед первым вызовом.
[in,out] bufStart
Ссылка на указатель данных. При входе в функцию bufStart указывает на начало текущего выходного буфера. Ожидается, что при выходе bufStart укажет на начало нового выходного буфера. Новое значение указателя может быть таким же, как предыдущее значение (например, если функция скопировала существующие данные в другое место), или оно может указывать на совершенно новое место.
[in,out] bufLen
Ссылка на беззнаковое целое число. При входе в функцию bufLen содержит количество байтов неиспользуемого пространства в текущем буфере. Ожидается, что при выходе bufLen будет содержать максимальное количество байтов, которые можно записать в новый выходной буфер.
Возвращаемые значения
WEAVE_NO_ERROR
Если функция смогла предоставить больше буферного пространства для записывающего устройства.
other
Другие коды ошибок Weave или конкретной платформы, указывающие на то, что произошла ошибка, не позволяющая функции создать дополнительное буферное пространство.

Публичные атрибуты

Данные приложения

void * AppData

Поле указателя, которое можно использовать для данных, специфичных для приложения.

Финализироватьбуфер

FinalizeBufferFunct FinalizeBuffer

Указатель на функцию, которая будет вызвана после завершения работы TLVWriter .

Объект TLVWriter будет вызывать функцию FinalizeBuffer при каждом вызове его метода Finalize() . Приложения могут установить указатель функции в любой момент до вызова Finalize() . По умолчанию указатель установлен в NULL, что приводит к тому, что метод Finalize() отказывается от вызова функции.

Дополнительную информацию о реализации функции FinalizeBuffer см. в определении типа FinalizeBufferFunct.

GetNewBuffer

GetNewBufferFunct GetNewBuffer

Указатель на функцию, которая предоставит новое выходное буферное пространство TLVWriter .

Объект TLVWriter будет вызывать функцию GetNewBuffer всякий раз, когда будет предпринята попытка записать данные, размер которых превышает размер текущего выходного буфера. Если установлено значение NULL (значение по умолчанию), средство записи вернет WEAVE_ERROR_NO_MEMORY, если выходные данные переполняют текущий буфер.

GetNewBuffer может быть установлен приложением в любое время, но обычно он устанавливается при инициализации средства записи.

Дополнительную информацию о реализации функции GetNewBuffer см. в определении типа GetNewBufferFunct.

Неявныйпрофилеид

uint32_t ImplicitProfileId

Идентификатор профиля тегов, которые следует закодировать в неявной форме.

Когда средству записи предлагается закодировать новый элемент, если идентификатор профиля тега, связанного с новым элементом, соответствует значению члена ImplicitProfileId , средство записи закодирует тег в неявной форме, опуская при этом идентификатор профиля.

По умолчанию для свойства ImplicitProfileId установлено значение kProfileIdNotSpecified, что указывает средству записи не создавать неявно закодированные теги. Приложения могут установить ImplicitProfileId в любое время, чтобы включить теги кодирования в неявной форме, начиная с текущей точки кодирования. Соответствующий идентификатор профиля, который нужно установить, обычно зависит от контекста используемого приложения или протокола.

Защищенные атрибуты

мбуфхандле

uintptr_t mBufHandle

мбуфстарт

uint8_t * mBufStart

мконтейнертипе

TLVType mContainerType

mLenWritten

uint32_t mLenWritten

мМаксЛен

uint32_t mMaxLen

mRemainingLen

uint32_t mRemainingLen

mWritePoint

uint8_t * mWritePoint

Общественные функции

ЗакрытьКонтейнер

WEAVE_ERROR CloseContainer(
  TLVWriter & containerWriter
)

Завершает запись TLV- контейнера после вызова OpenContainer() .

Метод CloseContainer() восстанавливает состояние родительского объекта TLVWriter после вызова OpenContainer() . Для каждого вызова OpenContainer() приложения должны выполнить соответствующий вызов CloseContainer() , передав ссылку на один и тот же модуль записи контейнера в оба метода.

Когда CloseContainer() завершает работу, приложения могут продолжать использовать родительский модуль записи для записи дополнительных элементов TLV , которые появляются после элемента контейнера. На этом этапе предоставленный модуль записи контейнера следует считать «деинициализированным» и его нельзя использовать без повторной инициализации.

Подробности
Параметры
[in] containerWriter
Ссылка на объект TLVWriter , переданный методу OpenContainer() .
Возвращаемые значения
WEAVE_NO_ERROR
Если метод удался.
WEAVE_ERROR_INCORRECT_STATE
Если предоставленный модуль записи контейнера находится в неправильном состоянии.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Если другой модуль записи контейнеров был открыт в предоставленном модуле записи контейнеров и еще не закрыт.
WEAVE_ERROR_BUFFER_TOO_SMALL
Если завершение кодирования контейнера превысит ограничение на максимальное количество байтов, указанное при инициализации модуля записи.
WEAVE_ERROR_NO_MEMORY
Если попытка выделить выходной буфер не удалась из-за нехватки памяти.
other
Другие ошибки Weave или специфичные для платформы ошибки, возвращаемые настроенными функциями GetNewBuffer() или FinalizeBuffer() .

ПродолжитьPutBytes

WEAVE_ERROR ContinuePutBytes(
  const uint8_t *buf,
  uint32_t len
)

Кодирует значение строки байтов TLV .

Это следует использовать с StartPutBytes.

Подробности
Параметры
[in] buf
Указатель на буфер, содержащий строку байтов, которую нужно закодировать.
[in] len
Количество байтов, которые необходимо закодировать.
Возвращаемые значения
WEAVE_NO_ERROR
Если метод удался.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Если модуль записи контейнера был открыт в текущем модуле записи и еще не закрыт.
WEAVE_ERROR_INVALID_TLV_TAG
Если указанное значение тега недопустимо или неуместно в контексте, в котором записывается значение.
WEAVE_ERROR_BUFFER_TOO_SMALL
Если запись значения превысит ограничение на максимальное количество байтов, указанное при инициализации средства записи.
WEAVE_ERROR_NO_MEMORY
Если попытка выделить выходной буфер не удалась из-за нехватки памяти.
other
Другие ошибки Weave или специфичные для платформы ошибки, возвращаемые настроенными функциями GetNewBuffer() или FinalizeBuffer() .

Копиконтейнер

WEAVE_ERROR CopyContainer(
  TLVReader & container
)

Копирует элемент контейнера TLV из объекта TLVReader .

CopyContainer() кодирует новый элемент контейнера TLV , копируя предварительно закодированный элемент контейнера, расположенный в текущей позиции объекта TLVReader . Метод записывает весь новый элемент контейнера за один вызов, копируя тип, тег и элементы контейнера из исходной кодировки. Когда метод возвращает значение, объект записи можно использовать для записи дополнительных элементов TLV , следующих за элементом контейнера.

Подробности
Параметры
[in] container
Ссылка на объект TLVReader , идентифицирующий предварительно закодированный контейнер TLV , который необходимо скопировать.
Возвращаемые значения
WEAVE_NO_ERROR
Если метод удался.
WEAVE_ERROR_INCORRECT_STATE
Если поставляемое устройство чтения не расположено на элементе контейнера.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Если модуль записи контейнера был открыт в текущем модуле записи и еще не закрыт.
WEAVE_ERROR_TLV_UNDERRUN
Если базовое кодирование TLV , связанное с предоставленным устройством чтения, закончилось преждевременно.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Если предоставленное средство чтения обнаружило недопустимый или неподдерживаемый тип элемента TLV .
WEAVE_ERROR_INVALID_TLV_TAG
Если предоставленное средство чтения обнаружило тег TLV в недопустимом контексте или если тег, связанный с исходным контейнером, недействителен или неуместен в контексте, в котором записывается новый контейнер.
WEAVE_ERROR_BUFFER_TOO_SMALL
Если запись значения превысит ограничение на максимальное количество байтов, указанное при инициализации средства записи.
WEAVE_ERROR_NO_MEMORY
Если попытка выделить выходной буфер не удалась из-за нехватки памяти.
other
Другие ошибки Weave или специфичные для платформы ошибки, возвращаемые настроенными функциями GetNewBuffer() или FinalizeBuffer() или функцией GetNextBuffer(), связанной с объектом чтения.

Копиконтейнер

WEAVE_ERROR CopyContainer(
  uint64_t tag,
  TLVReader & container
)

Кодирует элемент контейнера TLV из предварительно закодированного набора элементов-членов.

Метод CopyContainer() кодирует новый элемент контейнера TLV (структуру, массив или путь), содержащий набор элементов-членов, взятых из объекта TLVReader . При вызове метода ожидается, что предоставленный объект чтения будет помещен в элемент контейнера TLV . Вновь закодированный контейнер будет иметь тот же тип и элементы, что и входной контейнер. Тег нового контейнера указывается как входной параметр.

Когда метод возвращает значение, объект записи можно использовать для записи дополнительных элементов TLV , следующих за элементом контейнера.

Подробности
Параметры
[in] tag
Тег TLV , который должен быть закодирован с помощью контейнера, или AnonymousTag , если контейнер должен быть закодирован без тега. Значения тегов должны быть созданы с помощью одной из функций определения тегов ProfileTag() , ContextTag() или CommonTag() .
[in] container
Ссылка на объект TLVReader , идентифицирующий предварительно закодированный контейнер TLV , тип и члены которого необходимо скопировать.
Возвращаемые значения
WEAVE_NO_ERROR
Если метод удался.
WEAVE_ERROR_INCORRECT_STATE
Если поставляемое устройство чтения не расположено на элементе контейнера.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Если модуль записи контейнера был открыт в текущем модуле записи и еще не закрыт.
WEAVE_ERROR_TLV_UNDERRUN
Если базовое кодирование TLV , связанное с предоставленным устройством чтения, закончилось преждевременно.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Если предоставленное средство чтения обнаружило недопустимый или неподдерживаемый тип элемента TLV .
WEAVE_ERROR_INVALID_TLV_TAG
Если предоставленный читатель обнаружил тег TLV в недопустимом контексте или если предоставленный тег недействителен или неуместен в контексте, в котором записывается новый контейнер.
WEAVE_ERROR_BUFFER_TOO_SMALL
Если запись значения превысит ограничение на максимальное количество байтов, указанное при инициализации средства записи.
WEAVE_ERROR_NO_MEMORY
Если попытка выделить выходной буфер не удалась из-за нехватки памяти.
other
Другие ошибки Weave или специфичные для платформы ошибки, возвращаемые настроенными функциями GetNewBuffer() или FinalizeBuffer() или функцией GetNextBuffer(), связанной с объектом чтения.

Копиконтейнер

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

Кодирует элемент контейнера TLV , который содержит элементы-члены из предварительно закодированного контейнера.

Метод CopyContainer() кодирует новый элемент контейнера TLV (структуру, массив или путь), содержащий набор элементов-членов, взятых из содержимого предоставленного предварительно закодированного контейнера. При вызове метода данные в предоставленном входном буфере анализируются как элемент контейнера TLV , и записывается новый контейнер, имеющий тот же тип и элементы, что и входной контейнер. Тег нового контейнера указывается как входной параметр.

Когда метод возвращает значение, объект записи можно использовать для записи дополнительных элементов TLV , следующих за элементом контейнера.

Подробности
Параметры
[in] tag
Тег TLV , который должен быть закодирован с помощью контейнера, или AnonymousTag , если контейнер должен быть закодирован без тега. Значения тегов должны быть созданы с помощью одной из функций определения тегов ProfileTag() , ContextTag() или CommonTag() .
[in] encodedContainer
Буфер, содержащий предварительно закодированный контейнер TLV , тип и члены которого необходимо скопировать.
[in] encodedContainerLen
Длина предварительно закодированного контейнера в байтах.
Возвращаемые значения
WEAVE_NO_ERROR
Если метод удался.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Если модуль записи контейнера был открыт в текущем модуле записи и еще не закрыт.
WEAVE_ERROR_TLV_UNDERRUN
Если закодированный контейнер завершился преждевременно.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Если закодированный контейнер содержал недопустимый или неподдерживаемый тип элемента TLV .
WEAVE_ERROR_INVALID_TLV_TAG
Если закодированный контейнер содержал тег TLV в недопустимом контексте или если предоставленный тег недействителен или неуместен в контексте, в котором записывается новый контейнер.
WEAVE_ERROR_BUFFER_TOO_SMALL
Если запись значения превысит ограничение на максимальное количество байтов, указанное при инициализации средства записи.
WEAVE_ERROR_NO_MEMORY
Если попытка выделить выходной буфер не удалась из-за нехватки памяти.
other
Другие ошибки Weave или специфичные для платформы ошибки, возвращаемые настроенными функциями GetNewBuffer() или FinalizeBuffer() или функцией GetNextBuffer(), связанной с объектом чтения.

КопироватьЭлемент

WEAVE_ERROR CopyElement(
  TLVReader & reader
)

Копирует элемент TLV из объекта чтения в модуль записи.

Метод CopyElement() кодирует новый элемент TLV , тип, тег и значение которого берутся из объекта TLVReader . При вызове метода ожидается, что предоставленный объект чтения будет расположен в исходном элементе TLV . Вновь закодированный элемент будет иметь тот же тип, тег и содержимое, что и входной контейнер. Если предоставленный элемент является контейнером TLV (структура, массив или путь), будет скопировано все содержимое контейнера.

Подробности
Параметры
[in] reader
Ссылка на объект TLVReader , идентифицирующий предварительно закодированный элемент TLV , который следует скопировать.
Возвращаемые значения
WEAVE_NO_ERROR
Если метод удался.
WEAVE_ERROR_INCORRECT_STATE
Если поставляемый считыватель не расположен на элементе.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Если модуль записи контейнера был открыт в текущем модуле записи и еще не закрыт.
WEAVE_ERROR_TLV_UNDERRUN
Если базовое кодирование TLV , связанное с предоставленным устройством чтения, закончилось преждевременно.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Если предоставленное средство чтения обнаружило недопустимый или неподдерживаемый тип элемента TLV .
WEAVE_ERROR_INVALID_TLV_TAG
Если предоставленный читатель обнаружил тег TLV в недопустимом контексте или если предоставленный тег недействителен или неуместен в контексте, в котором записывается новый контейнер.
WEAVE_ERROR_BUFFER_TOO_SMALL
Если запись значения превысит ограничение на максимальное количество байтов, указанное при инициализации средства записи.
WEAVE_ERROR_NO_MEMORY
Если попытка выделить выходной буфер не удалась из-за нехватки памяти.
other
Другие ошибки Weave или специфичные для платформы ошибки, возвращаемые настроенными функциями GetNewBuffer() или FinalizeBuffer() или функцией GetNextBuffer(), связанной с объектом чтения.

КопироватьЭлемент

WEAVE_ERROR CopyElement(
  uint64_t tag,
  TLVReader & reader
)

КонечныйКонтейнер

WEAVE_ERROR EndContainer(
  TLVType outerContainerType
)

Завершает кодирование элемента контейнера TLV .

Метод EndContainer() завершает кодирование элемента контейнера TLV и восстанавливает состояние объекта TLVWrite после предыдущего вызова StartContainer() . Для каждого вызова StartContainer() приложения должны выполнить соответствующий вызов EndContainer() , передав значение TLVType, возвращаемое вызовом StartContainer() . Когда EndContainer() возвращает управление, объект записи можно использовать для записи дополнительных элементов TLV , следующих за элементом контейнера.

Подробности
Параметры
[in] outerContainerType
Значение TLVType, возвращенное методом StartContainer() .
Возвращаемые значения
WEAVE_NO_ERROR
Если метод удался.
WEAVE_ERROR_INCORRECT_STATE
Если соответствующий вызов StartContainer() не был выполнен.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Если модуль записи контейнера был открыт в текущем модуле записи и еще не закрыт.
WEAVE_ERROR_BUFFER_TOO_SMALL
Если запись значения превысит ограничение на максимальное количество байтов, указанное при инициализации средства записи.
WEAVE_ERROR_NO_MEMORY
Если попытка выделить выходной буфер не удалась из-за нехватки памяти.
other
Другие ошибки Weave или специфичные для платформы ошибки, возвращаемые настроенными функциями GetNewBuffer() или FinalizeBuffer() .

Завершить

WEAVE_ERROR Finalize(
  void
)

Завершите написание TLV -кодировки.

Метод Finalize() завершает процесс записи кодировки TLV в базовый выходной буфер. Этот метод должен быть вызван приложением до того, как оно будет использовать содержимое буфера. Finalize() можно вызвать только в том случае, если для текущего записывающего устройства нет открытых модулей записи контейнеров. (См. OpenContainer() ).

Подробности
Возвращаемые значения
WEAVE_NO_ERROR
Если кодирование завершилось успешно.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Если модуль записи контейнера был открыт в текущем модуле записи и еще не закрыт.
other
Другие ошибки Weave или специфичные для платформы ошибки, возвращаемые настроенной функцией FinalizeBuffer() .

GetContainerType

TLVType GetContainerType(
  void
) const 

Возвращает тип контейнера, в котором в данный момент пишет TLVWriter .

Метод GetContainerType() возвращает тип TLV- контейнера, в котором в данный момент пишет TLVWriter . Если TLVWriter не записывает элементы внутри контейнера (т. е. если записывает на самом внешнем уровне кодировки), метод возвращает kTLVType_NotSpecified.

Подробности
Возврат
TLVType текущего контейнера или kTLVType_NotSpecified, если TLVWriter не записывает элементы внутри контейнера.

GetLengthWritten

uint32_t GetLengthWritten(
  void
)

Возвращает общее количество байтов, записанных с момента инициализации средства записи.

Подробности
Возврат
Общее количество байтов, записанных с момента инициализации средства записи.

В этом

void Init(
  uint8_t *buf,
  uint32_t maxLen
)

Инициализирует объект TLVWriter для записи в один выходной буфер.

Подробности
Параметры
[in] buf
Указатель на буфер, в который следует записать TLV .
[in] maxLen
Максимальное количество байт, которое должно быть записано в выходной буфер.

В этом

void Init(
  PacketBuffer *buf,
  uint32_t maxLen
)

Инициализирует объект TLVWriter для записи в один PacketBuffer.

Запись начинается сразу после последнего байта существующих данных в предоставленном буфере.

Подробности
Параметры
[in] buf
Указатель на PacketBuffer, в который следует записать TLV .
[in] maxLen
Максимальное количество байт, которое должно быть записано в выходной буфер.

В этом

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

Инициализирует объект TLVWriter для записи в один или несколько PacketBuffers.

Запись начинается сразу после последнего байта существующих данных в указанном буфере. Если allowDiscontiguousBuffers имеет значение true, дополнительные PacketBuffers будут выделены и привязаны к предоставленному буферу по мере необходимости, чтобы вместить объем записанных данных. Если указанный выходной буфер уже является главой цепочки буферов, выходные данные будут записаны в последующие буферы в цепочке до того, как будут выделены какие-либо новые буферы.

Подробности
Параметры
[in] buf
Указатель на PacketBuffer, в который должны быть записаны данные TLV .
[in] maxLen
Максимальное количество байтов, которое должно быть записано в выходной буфер(ы).
[in] allowDiscontiguousBuffers
Если это правда, записывайте данные в цепочку PacketBuffers, выделяя новые буферы по мере необходимости для хранения записанных данных. Если значение равно false, запись завершится с ошибкой WEAVE_ERROR_BUFFER_TOO_SMALL, если записанные данные превысят пространство, доступное в исходном выходном буфере.

InitMalloced

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

Инициализирует объект TLVWriter для записи в динамический буфер.

Подробности
Параметры
[in] buf
Ссылка на указатель, который получит выделенный буфер.
[in] maxLen
Максимальное количество байт, которое должно быть записано в выходной буфер.
[in] initialBufSize
Начальное количество байтов, которое должно быть выделено в буфер.

ОпенКонтейнер

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

Инициализирует новый объект TLVWriter для записи членов элемента контейнера TLV .

Метод OpenContainer() используется для записи элементов контейнера TLV (структуры, массивов или путей) в кодировку. Метод принимает тип и тег (если есть) нового контейнера, а также ссылку на новый объект записи ( контейнер-писатель ), который будет инициализирован с целью записи элементов контейнера. Приложения записывают элементы нового контейнера с помощью средства записи контейнера, а затем вызывают CloseContainer() для завершения кодирования контейнера.

Пока модуль записи контейнера открыт, приложения не должны выполнять вызовы или иным образом изменять состояние родительского модуля записи.

Модуль записи контейнера наследует различные свойства конфигурации от родительского модуля записи. Это:

  • Неявный идентификатор профиля (ImplicitProfileId).
  • Указатель данных приложения (AppData)
  • Указатели на функции GetNewBuffer и FinalizeBuffer.

Подробности
Параметры
[in] tag
Тег TLV , который должен быть закодирован с помощью контейнера, или AnonymousTag , если контейнер должен быть закодирован без тега. Значения тегов должны быть созданы с помощью одной из функций определения тегов ProfileTag() , ContextTag() или CommonTag() .
[in] containerType
Тип контейнера для кодирования. Должен быть одним из kTLVType_Structure , kTLVType_Array или kTLVType_Path .
[out] containerWriter
Ссылка на объект TLVWriter , который будет инициализирован для записи членов нового элемента контейнера. Любые данные, связанные с предоставленным объектом, перезаписываются.
Возвращаемые значения
WEAVE_NO_ERROR
Если метод удался.
WEAVE_ERROR_WRONG_TLV_TYPE
Если значение, указанное дляContainerType, неверно.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Если модуль записи контейнера был открыт в текущем модуле записи и еще не закрыт.
WEAVE_ERROR_INVALID_TLV_TAG
Если указанное значение тега недопустимо или неуместно в контексте, в котором записывается значение.
WEAVE_ERROR_BUFFER_TOO_SMALL
Если запись значения превысит ограничение на максимальное количество байтов, указанное при инициализации средства записи.
WEAVE_ERROR_NO_MEMORY
Если попытка выделить выходной буфер не удалась из-за нехватки памяти.
other
Другие ошибки Weave или специфичные для платформы ошибки, возвращаемые настроенными функциями GetNewBuffer() или FinalizeBuffer() .

Помещать

WEAVE_ERROR Put(
  uint64_t tag,
  int8_t v
)

Кодирует целое число со знаком TLV .

Это перегруженная функция, предоставленная для удобства. Она отличается от приведенной выше функции только тем, какие аргументы она принимает.

Подробности
Параметры
[in] tag
Тег TLV , который должен быть закодирован со значением, или AnonymousTag , если значение должно быть закодировано без тега. Значения тегов должны быть созданы с помощью одной из функций определения тегов ProfileTag() , ContextTag() или CommonTag() .
[in] v
Значение, которое необходимо закодировать.
Возвращаемые значения
WEAVE_NO_ERROR
Если метод удался.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Если модуль записи контейнера был открыт в текущем модуле записи и еще не закрыт.
WEAVE_ERROR_INVALID_TLV_TAG
Если указанное значение тега недопустимо или неуместно в контексте, в котором записывается значение.
WEAVE_ERROR_BUFFER_TOO_SMALL
Если запись значения превысит ограничение на максимальное количество байтов, указанное при инициализации средства записи.
WEAVE_ERROR_NO_MEMORY
Если попытка выделить выходной буфер не удалась из-за нехватки памяти.
other
Другие ошибки Weave или специфичные для платформы ошибки, возвращаемые настроенными функциями GetNewBuffer() или FinalizeBuffer() .

Помещать

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

Кодирует целое число со знаком TLV .

Это перегруженная функция, предоставленная для удобства. Она отличается от приведенной выше функции только тем, какие аргументы она принимает.

Подробности
Параметры
[in] tag
Тег TLV , который должен быть закодирован со значением, или AnonymousTag , если значение должно быть закодировано без тега. Значения тегов должны быть созданы с помощью одной из функций определения тегов ProfileTag() , ContextTag() или CommonTag() .
[in] v
Значение, которое необходимо закодировать.
[in] preserveSize
Истинно, если значение должно быть закодировано тем же количеством байтов, что и входной тип. Значение false, если значение должно быть закодировано в минимальное количество байтов, необходимое для представления значения. Примечание. Приложениям настоятельно рекомендуется устанавливать для этого параметра значение false.
Возвращаемые значения
WEAVE_NO_ERROR
Если метод удался.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Если модуль записи контейнера был открыт в текущем модуле записи и еще не закрыт.
WEAVE_ERROR_INVALID_TLV_TAG
Если указанное значение тега недопустимо или неуместно в контексте, в котором записывается значение.
WEAVE_ERROR_BUFFER_TOO_SMALL
Если запись значения превысит ограничение на максимальное количество байтов, указанное при инициализации средства записи.
WEAVE_ERROR_NO_MEMORY
Если попытка выделить выходной буфер не удалась из-за нехватки памяти.
other
Другие ошибки Weave или специфичные для платформы ошибки, возвращаемые настроенными функциями GetNewBuffer() или FinalizeBuffer() .

Помещать

WEAVE_ERROR Put(
  uint64_t tag,
  int16_t v
)

Помещать

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

Помещать

WEAVE_ERROR Put(
  uint64_t tag,
  int32_t v
)

Помещать

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

Помещать

WEAVE_ERROR Put(
  uint64_t tag,
  int64_t v
)

Помещать

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

Помещать

WEAVE_ERROR Put(
  uint64_t tag,
  uint8_t v
)

Кодирует целое число без знака TLV .

Это перегруженная функция, предоставленная для удобства. Она отличается от приведенной выше функции только тем, какие аргументы она принимает.

Подробности
Параметры
[in] tag
Тег TLV , который должен быть закодирован со значением, или AnonymousTag , если значение должно быть закодировано без тега. Значения тегов должны быть созданы с помощью одной из функций определения тегов ProfileTag() , ContextTag() или CommonTag() .
[in] v
Значение, которое необходимо закодировать.
Возвращаемые значения
WEAVE_NO_ERROR
Если метод удался.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Если модуль записи контейнера был открыт в текущем модуле записи и еще не закрыт.
WEAVE_ERROR_INVALID_TLV_TAG
Если указанное значение тега недопустимо или неуместно в контексте, в котором записывается значение.
WEAVE_ERROR_BUFFER_TOO_SMALL
Если запись значения превысит ограничение на максимальное количество байтов, указанное при инициализации средства записи.
WEAVE_ERROR_NO_MEMORY
Если попытка выделить выходной буфер не удалась из-за нехватки памяти.
other
Другие ошибки Weave или специфичные для платформы ошибки, возвращаемые настроенными функциями GetNewBuffer() или FinalizeBuffer() .

Помещать

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

Кодирует целое число без знака TLV .

Это перегруженная функция, предоставленная для удобства. Она отличается от приведенной выше функции только тем, какие аргументы она принимает.

Подробности
Параметры
[in] tag
Тег TLV , который должен быть закодирован со значением, или AnonymousTag , если значение должно быть закодировано без тега. Значения тегов должны быть созданы с помощью одной из функций определения тегов ProfileTag() , ContextTag() или CommonTag() .
[in] v
Значение, которое необходимо закодировать.
[in] preserveSize
Истинно, если значение должно быть закодировано тем же количеством байтов, что и входной тип. Значение false, если значение должно быть закодировано в минимальное количество байтов, необходимое для представления значения. Примечание. Приложениям настоятельно рекомендуется устанавливать для этого параметра значение false.
Возвращаемые значения
WEAVE_NO_ERROR
Если метод удался.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Если модуль записи контейнера был открыт в текущем модуле записи и еще не закрыт.
WEAVE_ERROR_INVALID_TLV_TAG
Если указанное значение тега недопустимо или неуместно в контексте, в котором записывается значение.
WEAVE_ERROR_BUFFER_TOO_SMALL
Если запись значения превысит ограничение на максимальное количество байтов, указанное при инициализации средства записи.
WEAVE_ERROR_NO_MEMORY
Если попытка выделить выходной буфер не удалась из-за нехватки памяти.
other
Другие ошибки Weave или специфичные для платформы ошибки, возвращаемые настроенными функциями GetNewBuffer() или FinalizeBuffer() .

Помещать

WEAVE_ERROR Put(
  uint64_t tag,
  uint16_t v
)

Помещать

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

Помещать

WEAVE_ERROR Put(
  uint64_t tag,
  uint32_t v
)

Помещать

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

Помещать

WEAVE_ERROR Put(
  uint64_t tag,
  uint64_t v
)

Помещать

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

Помещать

WEAVE_ERROR Put(
  uint64_t tag,
  float v
)

Помещать

WEAVE_ERROR Put(
  uint64_t tag,
  double v
)

Кодирует значение TLV с плавающей запятой.

Это перегруженная функция, предоставленная для удобства. Она отличается от приведенной выше функции только тем, какие аргументы она принимает.

Подробности
Параметры
[in] tag
Тег TLV , который должен быть закодирован со значением, или AnonymousTag , если значение должно быть закодировано без тега. Значения тегов должны быть созданы с помощью одной из функций определения тегов ProfileTag() , ContextTag() или CommonTag() .
[in] v
Значение, которое необходимо закодировать.
Возвращаемые значения
WEAVE_NO_ERROR
Если метод удался.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Если модуль записи контейнера был открыт в текущем модуле записи и еще не закрыт.
WEAVE_ERROR_INVALID_TLV_TAG
Если указанное значение тега недопустимо или неуместно в контексте, в котором записывается значение.
WEAVE_ERROR_BUFFER_TOO_SMALL
Если запись значения превысит ограничение на максимальное количество байтов, указанное при инициализации средства записи.
WEAVE_ERROR_NO_MEMORY
Если попытка выделить выходной буфер не удалась из-за нехватки памяти.
other
Другие ошибки Weave или специфичные для платформы ошибки, возвращаемые настроенными функциями GetNewBuffer() или FinalizeBuffer() .

Поставитьлогическое значение

WEAVE_ERROR PutBoolean(
  uint64_t tag,
  bool v
)

Кодирует логическое значение TLV .

Подробности
Параметры
[in] tag
Тег TLV , который должен быть закодирован со значением, или AnonymousTag , если значение должно быть закодировано без тега. Значения тегов должны быть созданы с помощью одной из функций определения тегов ProfileTag() , ContextTag() или CommonTag() .
[in] v
Значение, которое необходимо закодировать.
Возвращаемые значения
WEAVE_NO_ERROR
Если метод удался.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Если модуль записи контейнера был открыт в текущем модуле записи и еще не закрыт.
WEAVE_ERROR_INVALID_TLV_TAG
Если указанное значение тега недопустимо или неуместно в контексте, в котором записывается значение.
WEAVE_ERROR_BUFFER_TOO_SMALL
Если запись значения превысит ограничение на максимальное количество байтов, указанное при инициализации средства записи.
WEAVE_ERROR_NO_MEMORY
Если попытка выделить выходной буфер не удалась из-за нехватки памяти.
other
Другие ошибки Weave или специфичные для платформы ошибки, возвращаемые настроенными функциями GetNewBuffer() или FinalizeBuffer() .

PutBytes

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

Кодирует значение строки байтов TLV .

Подробности
Параметры
[in] tag
Тег TLV , который должен быть закодирован со значением, или AnonymousTag , если значение должно быть закодировано без тега. Значения тегов должны быть созданы с помощью одной из функций определения тегов ProfileTag() , ContextTag() или CommonTag() .
[in] buf
Указатель на буфер, содержащий строку байтов, которую нужно закодировать.
[in] len
Количество байтов, которые необходимо закодировать.
Возвращаемые значения
WEAVE_NO_ERROR
Если метод удался.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Если модуль записи контейнера был открыт в текущем модуле записи и еще не закрыт.
WEAVE_ERROR_INVALID_TLV_TAG
Если указанное значение тега недопустимо или неуместно в контексте, в котором записывается значение.
WEAVE_ERROR_BUFFER_TOO_SMALL
Если запись значения превысит ограничение на максимальное количество байтов, указанное при инициализации средства записи.
WEAVE_ERROR_NO_MEMORY
Если попытка выделить выходной буфер не удалась из-за нехватки памяти.
other
Другие ошибки Weave или специфичные для платформы ошибки, возвращаемые настроенными функциями GetNewBuffer() или FinalizeBuffer() .

PutNull

WEAVE_ERROR PutNull(
  uint64_t tag
)

Кодирует нулевое значение TLV .

Подробности
Параметры
[in] tag
Тег TLV , который должен быть закодирован со значением, или AnonymousTag , если значение должно быть закодировано без тега. Значения тегов должны быть созданы с помощью одной из функций определения тегов ProfileTag() , ContextTag() или CommonTag() .
Возвращаемые значения
WEAVE_NO_ERROR
Если метод удался.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Если писатель -контейнер был открыт на нынешнем писателе и еще не закрыт.
WEAVE_ERROR_INVALID_TLV_TAG
Если указанное значение тега является недействительным или неуместным в контексте, в котором написано значение.
WEAVE_ERROR_BUFFER_TOO_SMALL
Если написание значения превысит предел максимального количества байтов, указанных при инициализировании автора.
WEAVE_ERROR_NO_MEMORY
Если попытка выделить выходной буфер не удалась из -за отсутствия памяти.
other
Другие ошибки для плетения или специфичных для платформы, возвращаемые функциями getNewBuffer () или infintizebuffer () .

Putpreencodcontainer

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

Кодирует элемент контейнера TLV из предварительно кодируемого набора элементов элементов.

Метод PutpreeNcodeDcontainer () кодирует новый элемент контейнера TLV (структура, массив или путь), содержащий набор элементов элементов, взятых из предварительно кодируемого буфера. Ожидается, что входной буфер будет содержать нулевые или более полнокодированные элементы TLV , с метками, которые соответствуют правилам, связанным с указанным типом контейнера (например, элементы структуры должны иметь теги, в то время как элементы массива не должны).

Метод кодирует весь элемент контейнера одним вызовом. Когда возврат putpreencodcontainer () , объект писателя может использоваться для написания дополнительных элементов TLV после элемента контейнера.

Подробности
Параметры
[in] tag
Тег TLV , кодируемый с контейнером, или AnonymousTag , если контейнер должен быть кодирован без тега. Значения тега должны быть построены с одной из функций определения тега ProfileTag () , ContextTag () или Comportag () .
[in] containerType
Тип контейнера для кодирования. Должен быть один из kTLVType_Structure , kTLVType_Array или kTLVType_Path .
[in] data
Указатель на буфер, содержащий ноль более кодируемых элементов TLV , которые станут членами нового контейнера.
[in] dataLen
Количество байтов в буфере data .
Возвращаемые значения
WEAVE_NO_ERROR
Если метод преуспел.
WEAVE_ERROR_WRONG_TLV_TYPE
Если значение, указанное для контейнера, неверно.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Если писатель -контейнер был открыт на нынешнем писателе и еще не закрыт.
WEAVE_ERROR_INVALID_TLV_TAG
Если указанное значение тега является недействительным или неуместным в контексте, в котором написано значение.
WEAVE_ERROR_BUFFER_TOO_SMALL
Если написание значения превысит предел максимального количества байтов, указанных при инициализировании автора.
WEAVE_ERROR_NO_MEMORY
Если попытка выделить выходной буфер не удалась из -за отсутствия памяти.
other
Другие ошибки для плетения или специфичных для платформы, возвращаемые функциями getNewBuffer () или infintizebuffer () .

Путешество

WEAVE_ERROR PutString(
  uint64_t tag,
  const char *buf
)

Кодирует значение строкового значения TLV UTF8.

Подробности
Параметры
[in] tag
TLV -тег должен быть закодирован со значением, или AnonymousTag , если значение должно быть закодировано без тега. Значения тега должны быть построены с одной из функций определения тега ProfileTag () , ContextTag () или Comportag () .
[in] buf
Указатель на строку UTF-8 с нулевым выпуском для кодировки.
Возвращаемые значения
WEAVE_NO_ERROR
Если метод преуспел.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Если писатель -контейнер был открыт на нынешнем писателе и еще не закрыт.
WEAVE_ERROR_INVALID_TLV_TAG
Если указанное значение тега является недействительным или неуместным в контексте, в котором написано значение.
WEAVE_ERROR_BUFFER_TOO_SMALL
Если написание значения превысит предел максимального количества байтов, указанных при инициализировании автора.
WEAVE_ERROR_NO_MEMORY
Если попытка выделить выходной буфер не удалась из -за отсутствия памяти.
other
Другие ошибки для плетения или специфичных для платформы, возвращаемые функциями getNewBuffer () или infintizebuffer () .

Путешество

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

Кодирует значение строкового значения TLV UTF8.

Подробности
Параметры
[in] tag
TLV -тег должен быть закодирован со значением, или AnonymousTag , если значение должно быть закодировано без тега. Значения тега должны быть построены с одной из функций определения тега ProfileTag () , ContextTag () или Comportag () .
[in] buf
Указатель на строку UTF-8 для кодировки.
[in] len
Длина (в байтах) строки для кодировки.
Возвращаемые значения
WEAVE_NO_ERROR
Если метод преуспел.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Если писатель -контейнер был открыт на нынешнем писателе и еще не закрыт.
WEAVE_ERROR_INVALID_TLV_TAG
Если указанное значение тега является недействительным или неуместным в контексте, в котором написано значение.
WEAVE_ERROR_BUFFER_TOO_SMALL
Если написание значения превысит предел максимального количества байтов, указанных при инициализировании автора.
WEAVE_ERROR_NO_MEMORY
Если попытка выделить выходной буфер не удалась из -за отсутствия памяти.
other
Другие ошибки для плетения или специфичных для платформы, возвращаемые функциями getNewBuffer () или infintizebuffer () .

Putstringf

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

Кодируйте вывод строки, отформатированный в соответствии с форматом в элементе TLV .

PutStringf является аналогом Sprintf, где выход хранится в элементе TLV , в отличие от буфера символов. Когда доступна расширенная функциональность printf, функция способна вывести строку результата в прерывистое базовое хранилище. Реализация поддерживает следующие улучшения Printf:

Платформа поставляет vcbprintf на основе обратного вызова, который предоставляет возможность вызывать пользовательский обратный вызов вместо PUTCHAR.

Платформа обеспечивает вариант vsnprintf под названием vsnprintf_ex , который ведет себя точно так же, как VSNPRINTF, за исключением того, что у нее есть положения о пропуске первых n -символов вывода.

Обратите внимание, что хотя функция на основе обратного вызова может быть самой простой и использовать наименьшее количество кода, разнообразие функций vsprintf_ex будет потреблять меньше стека.

Если ни одно из вышеперечисленных не доступно, но платформа предоставляет malloc , функция выделяет временный буфер для удержания вывода. Когда платформа не поставляет ни улучшения семейству печати, ни Malloc, выход усекается таким образом, что она вписывается в непрерывное состояние в текущем хранилище TLV

Подробности
Параметры
[in] tag
TLV -тег должен быть закодирован со значением, или AnonymousTag , если значение должно быть закодировано без тега. Значения тега должны быть построены с одной из функций определения тега ProfileTag () , ContextTag () или Comportag () .
[in] fmt
Строка формата, используемая для форматирования списка аргументов. Следует тому же синтаксису и правилам, что и строка формата для семейства функций printf .
[in] ...
Список аргументов, которые будут отформатированы в выходном значении в соответствии с FMT.
Возвращаемые значения
WEAVE_NO_ERROR
Если метод преуспел.
other
Если базовые вызовы TLVWriter Methods WriteElementHead или GetNewBuffer не удались, их ошибка немедленно пересылает стек вызовов.

StartContainer

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

Начинает кодировать новый элемент контейнера TLV .

Метод startContainer () используется для написания элементов контейнера TLV (структура, массивы или пути) в кодирование. Метод принимает тип и тег (если таковой имеется) нового контейнера, а также ссылку на значение tlvtype, которое будет использоваться для сохранения текущего контекста автора, когда он используется для написания контейнера.

Как только метод startContainer () возвращается, приложение должно использовать текущий объект TLVWriter для написания элементов контейнера. При завершении приложение должно вызвать метод EndContainer () , чтобы завершить кодирование контейнера.

Подробности
Параметры
[in] tag
Тег TLV , кодируемый с контейнером, или AnonymousTag , если контейнер должен быть кодирован без тега. Значения тега должны быть построены с одной из функций определения тега ProfileTag () , ContextTag () или Comportag () .
[in] containerType
Тип контейнера для кодирования. Должен быть один из kTLVType_Structure , kTLVType_Array или kTLVType_Path .
[out] outerContainerType
Ссылка на значение tlvtype, которое получит контекст писателя.
Возвращаемые значения
WEAVE_NO_ERROR
Если метод преуспел.
WEAVE_ERROR_WRONG_TLV_TYPE
Если значение, указанное для контейнера, неверно.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Если писатель -контейнер был открыт на нынешнем писателе и еще не закрыт.
WEAVE_ERROR_INVALID_TLV_TAG
Если указанное значение тега является недействительным или неуместным в контексте, в котором написано значение.
WEAVE_ERROR_BUFFER_TOO_SMALL
Если написание значения превысит предел максимального количества байтов, указанных при инициализировании автора.
WEAVE_ERROR_NO_MEMORY
Если попытка выделить выходной буфер не удалась из -за отсутствия памяти.
other
Другие ошибки для плетения или специфичных для платформы, возвращаемые функциями getNewBuffer () или infintizebuffer () .

StartputBytes

WEAVE_ERROR StartPutBytes(
  uint64_t tag,
  uint32_t totalLen
)

Кодирует байтовую строку TLV в нескольких кусках.

Это должно использоваться с ContinuePutbytes.

Подробности
Параметры
[in] tag
TLV -тег должен быть закодирован со значением, или AnonymousTag , если значение должно быть закодировано без тега. Значения тега должны быть построены с одной из функций определения тега ProfileTag () , ContextTag () или Comportag () .
[in] totalLen
Общее количество байтов для кодирования.
Возвращаемые значения
WEAVE_NO_ERROR
Если метод преуспел.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Если писатель -контейнер был открыт на нынешнем писателе и еще не закрыт.
WEAVE_ERROR_INVALID_TLV_TAG
Если указанное значение тега является недействительным или неуместным в контексте, в котором написано значение.
WEAVE_ERROR_BUFFER_TOO_SMALL
Если написание значения превысит предел максимального количества байтов, указанных при инициализировании автора.
WEAVE_ERROR_NO_MEMORY
Если попытка выделить выходной буфер не удалась из -за отсутствия памяти.
other
Другие ошибки для плетения или специфичных для платформы, возвращаемые функциями getNewBuffer () или infintizebuffer () .

VputStringf

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

Кодируйте вывод строки, отформатированный в соответствии с форматом в элементе TLV .

PutStringf является аналогом Sprintf, где выход хранится в элементе TLV , в отличие от буфера символов. Когда доступна расширенная функциональность printf, функция способна вывести строку результата в прерывистое базовое хранилище. Реализация поддерживает следующие улучшения Printf:

Платформа поставляет vcbprintf на основе обратного вызова, который предоставляет возможность вызывать пользовательский обратный вызов вместо PUTCHAR.

Платформа обеспечивает вариант vsnprintf под названием vsnprintf_ex , который ведет себя точно так же, как VSNPRINTF, за исключением того, что у нее есть положения о пропуске первых n -символов вывода.

Обратите внимание, что хотя функция на основе обратного вызова может быть самой простой и использовать наименьшее количество кода, разнообразие функций vsprintf_ex будет потреблять меньше стека.

Если ни одно из вышеперечисленных не доступно, но платформа предоставляет malloc , функция выделяет временный буфер для удержания вывода. Когда платформа не поставляет ни улучшения семейству печати, ни Malloc, выход усекается таким образом, что она вписывается в непрерывное состояние в текущем хранилище TLV

Подробности
Параметры
[in] tag
TLV -тег должен быть закодирован со значением, или AnonymousTag , если значение должно быть закодировано без тега. Значения тега должны быть построены с одной из функций определения тега ProfileTag () , ContextTag () или Comportag () .
[in] fmt
Строка формата, используемая для форматирования списка аргументов. Следует тому же синтаксису и правилам, что и строка формата для семейства функций printf .
[in] ap
Список аргументов, которые будут отформатированы в выходном значении в соответствии с FMT.
Возвращаемые значения
WEAVE_NO_ERROR
Если метод преуспел.
other
Если базовые вызовы TLVWriter Methods WriteElementHead или GetNewBuffer не удались, их ошибка немедленно пересылает стек вызовов.

Публичные статические функции

Finalizepacketbuffer

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

Реализация функции TLVWriter завершает функцию Buffer для записи в цепочку пакетов.

Функция FinalizePacketBuffer () выполняет необходимую завершение, необходимую при использовании TLVWriter для записи в цепочку пакетов. Функция предназначена для использования в сочетании с функцией getNewPacketBuffer () .

См. Определение типа FinalizeBufferFunct для получения дополнительной информации об API функции FinalizePacketBuffer () .

GetNewBuffer_Malloced

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

Реализация функции TLVWriter GetNewBuffer для написания в динамический буфер.

Функция getNewbuffer_malloced () поставляет новое выходное пространство для TLVWriter , удвоив размер базового динамического буфера по мере необходимости для хранения кодирования. Функция предназначена для назначения указателю функции TLVWriter GetNewBuffer.

См. Определение типа GetNewBufferFunct для получения дополнительной информации об API функции getNewbuffer_malloced () .

GetNewPacketBuffer

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

Реализация функции TLVWriter GetNewBuffer для написания цепочки пакетов.

Функция getNewPacketBuffer () предоставляет новое выходное пространство для TLVWriter , выделяя цепочку из одного или нескольких упаковок, по мере необходимости для хранения кодировки. Функция предназначена для назначения указателю функции TLVWriter GetNewBuffer.

Обратите внимание, что при использовании getNewpacketBuffer с TLVWriter , соответствующая функция FinalizePacketBuffer () (или эквивалент) также должна использоваться для завершения цепочки буфера.

См. Определение типа GetNewBufferFunct для получения дополнительной информации об API функции getNewPacketBuffer () .

Защищенные функции

IsclosecontainerReserved

bool IsCloseContainerReserved(
  void
) const 

Определите, должен ли контейнер зарезервировать пространство для символа CloseContainer в точке запуска / открытия контейнера.

IscontaineRopen

bool IsContainerOpen(
  void
) const 

SetCloseContainErreserved

void SetCloseContainerReserved(
  bool aCloseContainerReserved
)

Установите, должен ли контейнер зарезервировать пространство для символа CloseContainer в точке запуска / открытия контейнера.

SetContaineroPen

void SetContainerOpen(
  bool aContainerOpen
)

Writedata

WEAVE_ERROR WriteData(
  const uint8_t *p,
  uint32_t len
)

Writelementhead

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

Writelementwithdata

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