Google is committed to advancing racial equity for Black communities. See how.
Эта страница переведена с помощью Cloud Translation API.
Switch to English

nl :: Плетение :: TLV :: 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 .

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

Подробности
Параметры
[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

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

FinalizeBuffer

FinalizeBufferFunct FinalizeBuffer

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

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

См. Определение типа FinalizeBufferFunct для получения дополнительной информации о реализации функции FinalizeBuffer.

GetNewBuffer

GetNewBufferFunct GetNewBuffer

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

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

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

См. Определение типа GetNewBufferFunct для получения дополнительной информации о реализации функции GetNewBuffer.

ImplicitProfileId

uint32_t ImplicitProfileId

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

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

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

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

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

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

CloseContainer

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 () .

ContinuePutBytes

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 () .

CopyContainer

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 (), связанной с объектом чтения.

CopyContainer

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 (), связанной с объектом чтения.

CopyContainer

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 (), связанной с объектом чтения.

CopyElement

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 (), связанной с объектом чтения.

CopyElement

WEAVE_ERROR CopyElement(
  uint64_t tag,
  TLVReader & reader
)

EndContainer

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
Если true, записывать данные в цепочку 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
Начальное количество байтов, которое должно быть выделено для буфера.

OpenContainer

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 () .

PutBoolean

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
A pointer to a buffer containing the bytes string to be encoded.
[in] len
The number of bytes to be encoded.
Возвращаемые значения
WEAVE_NO_ERROR
If the method succeeded.
WEAVE_ERROR_TLV_CONTAINER_OPEN
If a container writer has been opened on the current writer and not yet closed.
WEAVE_ERROR_INVALID_TLV_TAG
If the specified tag value is invalid or inappropriate in the context in which the value is being written.
WEAVE_ERROR_BUFFER_TOO_SMALL
If writing the value would exceed the limit on the maximum number of bytes specified when the writer was initialized.
WEAVE_ERROR_NO_MEMORY
If an attempt to allocate an output buffer failed due to lack of memory.
other
Other Weave or platform-specific errors returned by the configured GetNewBuffer() or FinalizeBuffer() functions.

PutNull

WEAVE_ERROR PutNull(
  uint64_t tag
)

Encodes a TLV null value.

Подробности
Параметры
[in] tag
The TLV tag to be encoded with the value, or AnonymousTag if the value should be encoded without a tag. Tag values should be constructed with one of the tag definition functions ProfileTag() , ContextTag() or CommonTag() .
Возвращаемые значения
WEAVE_NO_ERROR
If the method succeeded.
WEAVE_ERROR_TLV_CONTAINER_OPEN
If a container writer has been opened on the current writer and not yet closed.
WEAVE_ERROR_INVALID_TLV_TAG
If the specified tag value is invalid or inappropriate in the context in which the value is being written.
WEAVE_ERROR_BUFFER_TOO_SMALL
If writing the value would exceed the limit on the maximum number of bytes specified when the writer was initialized.
WEAVE_ERROR_NO_MEMORY
If an attempt to allocate an output buffer failed due to lack of memory.
other
Other Weave or platform-specific errors returned by the configured GetNewBuffer() or FinalizeBuffer() functions.

PutPreEncodedContainer

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

Encodes a TLV container element from a pre-encoded set of member elements.

The PutPreEncodedContainer() method encodes a new TLV container element (a structure, array or path) containing a set of member elements taken from a pre-encoded buffer. The input buffer is expected to contain zero or more full-encoded TLV elements, with tags that conform to the rules associated with the specified container type (eg structure members must have tags, while array members must not).

The method encodes the entirety of the container element in one call. When PutPreEncodedContainer() returns, the writer object can be used to write additional TLV elements following the container element.

Подробности
Параметры
[in] tag
The TLV tag to be encoded with the container, or AnonymousTag if the container should be encoded without a tag. Tag values should be constructed with one of the tag definition functions ProfileTag() , ContextTag() or CommonTag() .
[in] containerType
The type of container to encode. Must be one of kTLVType_Structure , kTLVType_Array or kTLVType_Path .
[in] data
A pointer to a buffer containing zero of more encoded TLV elements that will become the members of the new container.
[in] dataLen
The number of bytes in the data buffer.
Возвращаемые значения
WEAVE_NO_ERROR
If the method succeeded.
WEAVE_ERROR_WRONG_TLV_TYPE
If the value specified for containerType is incorrect.
WEAVE_ERROR_TLV_CONTAINER_OPEN
If a container writer has been opened on the current writer and not yet closed.
WEAVE_ERROR_INVALID_TLV_TAG
If the specified tag value is invalid or inappropriate in the context in which the value is being written.
WEAVE_ERROR_BUFFER_TOO_SMALL
If writing the value would exceed the limit on the maximum number of bytes specified when the writer was initialized.
WEAVE_ERROR_NO_MEMORY
If an attempt to allocate an output buffer failed due to lack of memory.
other
Other Weave or platform-specific errors returned by the configured GetNewBuffer() or FinalizeBuffer() functions.

PutString

WEAVE_ERROR PutString(
  uint64_t tag,
  const char *buf
)

Encodes a TLV UTF8 string value.

Подробности
Параметры
[in] tag
The TLV tag to be encoded with the value, or AnonymousTag if the value should be encoded without a tag. Tag values should be constructed with one of the tag definition functions ProfileTag() , ContextTag() or CommonTag() .
[in] buf
A pointer to the null-terminated UTF-8 string to be encoded.
Возвращаемые значения
WEAVE_NO_ERROR
If the method succeeded.
WEAVE_ERROR_TLV_CONTAINER_OPEN
If a container writer has been opened on the current writer and not yet closed.
WEAVE_ERROR_INVALID_TLV_TAG
If the specified tag value is invalid or inappropriate in the context in which the value is being written.
WEAVE_ERROR_BUFFER_TOO_SMALL
If writing the value would exceed the limit on the maximum number of bytes specified when the writer was initialized.
WEAVE_ERROR_NO_MEMORY
If an attempt to allocate an output buffer failed due to lack of memory.
other
Other Weave or platform-specific errors returned by the configured GetNewBuffer() or FinalizeBuffer() functions.

PutString

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

Encodes a TLV UTF8 string value.

Подробности
Параметры
[in] tag
The TLV tag to be encoded with the value, or AnonymousTag if the value should be encoded without a tag. Tag values should be constructed with one of the tag definition functions ProfileTag() , ContextTag() or CommonTag() .
[in] buf
A pointer to the UTF-8 string to be encoded.
[in] len
The length (in bytes) of the string to be encoded.
Возвращаемые значения
WEAVE_NO_ERROR
If the method succeeded.
WEAVE_ERROR_TLV_CONTAINER_OPEN
If a container writer has been opened on the current writer and not yet closed.
WEAVE_ERROR_INVALID_TLV_TAG
If the specified tag value is invalid or inappropriate in the context in which the value is being written.
WEAVE_ERROR_BUFFER_TOO_SMALL
If writing the value would exceed the limit on the maximum number of bytes specified when the writer was initialized.
WEAVE_ERROR_NO_MEMORY
If an attempt to allocate an output buffer failed due to lack of memory.
other
Other Weave or platform-specific errors returned by the configured GetNewBuffer() or FinalizeBuffer() functions.

PutStringF

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

Encode the string output formatted according to the format in the TLV element.

PutStringF is an analog of a sprintf where the output is stored in a TLV element as opposed to a character buffer. When extended printf functionality is available, the function is able to output the result string into a discontinuous underlying storage. The implementation supports the following printf enhancements:

The platform supplies a callback-based vcbprintf that provides the ability to call a custom callback in place of putchar.

The platform supplies a variant of vsnprintf called vsnprintf_ex , that behaves exactly like vsnprintf except it has provisions for omitting the first n characters of the output.

Note that while the callback-based function may be the simplest and use the least amount of code, the vsprintf_ex variety of functions will consume less stack.

If neither of the above is available, but platform provides malloc the function will allocate a temporary buffer to hold the output. When the platform supplies neither enhancement to the printf family nor malloc, the output is truncated such that it fits in the continuous state in the current TLV storage

Подробности
Параметры
[in] tag
The TLV tag to be encoded with the value, or AnonymousTag if the value should be encoded without a tag. Tag values should be constructed with one of the tag definition functions ProfileTag() , ContextTag() or CommonTag() .
[in] fmt
The format string used to format the argument list. Follows the same syntax and rules as the format string for printf family of functions.
[in] ...
A list of arguments to be formatted in the output value according to fmt.
Возвращаемые значения
WEAVE_NO_ERROR
If the method succeeded.
other
If underlying calls toTLVWriter methods WriteElementHead or GetNewBuffer failed, their error is immediately forwarded up the call stack.

StartContainer

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

Begins encoding a new TLV container element.

The StartContainer() method is used to write TLV container elements (structure, arrays or paths) to an encoding. The method takes the type and tag (if any) of the new container, and a reference to a TLVType value which will be used to save the current context of the writer while it is being used to write the container.

Once the StartContainer() method returns, the application should use the currentTLVWriter object to write the elements of the container. When finish, the application must call the EndContainer() method to finish the encoding of the container.

Подробности
Параметры
[in] tag
The TLV tag to be encoded with the container, or AnonymousTag if the container should be encoded without a tag. Tag values should be constructed with one of the tag definition functions ProfileTag() , ContextTag() or CommonTag() .
[in] containerType
The type of container to encode. Must be one of kTLVType_Structure , kTLVType_Array or kTLVType_Path .
[out] outerContainerType
A reference to a TLVType value that will receive the context of the writer.
Возвращаемые значения
WEAVE_NO_ERROR
If the method succeeded.
WEAVE_ERROR_WRONG_TLV_TYPE
If the value specified for containerType is incorrect.
WEAVE_ERROR_TLV_CONTAINER_OPEN
If a container writer has been opened on the current writer and not yet closed.
WEAVE_ERROR_INVALID_TLV_TAG
If the specified tag value is invalid or inappropriate in the context in which the value is being written.
WEAVE_ERROR_BUFFER_TOO_SMALL
If writing the value would exceed the limit on the maximum number of bytes specified when the writer was initialized.
WEAVE_ERROR_NO_MEMORY
If an attempt to allocate an output buffer failed due to lack of memory.
other
Other Weave or platform-specific errors returned by the configured GetNewBuffer() or FinalizeBuffer() functions.

StartPutBytes

WEAVE_ERROR StartPutBytes(
  uint64_t tag,
  uint32_t totalLen
)

Encodes a TLV byte string in multiple chunks.

This should be used with ContinuePutBytes.

Подробности
Параметры
[in] tag
The TLV tag to be encoded with the value, or AnonymousTag if the value should be encoded without a tag. Tag values should be constructed with one of the tag definition functions ProfileTag() , ContextTag() or CommonTag() .
[in] totalLen
The total number of bytes to be encoded.
Возвращаемые значения
WEAVE_NO_ERROR
If the method succeeded.
WEAVE_ERROR_TLV_CONTAINER_OPEN
If a container writer has been opened on the current writer and not yet closed.
WEAVE_ERROR_INVALID_TLV_TAG
If the specified tag value is invalid or inappropriate in the context in which the value is being written.
WEAVE_ERROR_BUFFER_TOO_SMALL
If writing the value would exceed the limit on the maximum number of bytes specified when the writer was initialized.
WEAVE_ERROR_NO_MEMORY
If an attempt to allocate an output buffer failed due to lack of memory.
other
Other Weave or platform-specific errors returned by the configured GetNewBuffer() or FinalizeBuffer() functions.

VPutStringF

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

Encode the string output formatted according to the format in the TLV element.

PutStringF is an analog of a sprintf where the output is stored in a TLV element as opposed to a character buffer. When extended printf functionality is available, the function is able to output the result string into a discontinuous underlying storage. The implementation supports the following printf enhancements:

The platform supplies a callback-based vcbprintf that provides the ability to call a custom callback in place of putchar.

The platform supplies a variant of vsnprintf called vsnprintf_ex , that behaves exactly like vsnprintf except it has provisions for omitting the first n characters of the output.

Note that while the callback-based function may be the simplest and use the least amount of code, the vsprintf_ex variety of functions will consume less stack.

If neither of the above is available, but platform provides malloc the function will allocate a temporary buffer to hold the output. When the platform supplies neither enhancement to the printf family nor malloc, the output is truncated such that it fits in the continuous state in the current TLV storage

Подробности
Параметры
[in] tag
The TLV tag to be encoded with the value, or AnonymousTag if the value should be encoded without a tag. Tag values should be constructed with one of the tag definition functions ProfileTag() , ContextTag() or CommonTag() .
[in] fmt
The format string used to format the argument list. Follows the same syntax and rules as the format string for printf family of functions.
[in] ap
A list of arguments to be formatted in the output value according to fmt.
Возвращаемые значения
WEAVE_NO_ERROR
If the method succeeded.
other
If underlying calls toTLVWriter methods WriteElementHead or GetNewBuffer failed, their error is immediately forwarded up the call stack.

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

FinalizePacketBuffer

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

An implementation of aTLVWriter FinalizeBuffer function for writing to a chain of PacketBuffers.

The FinalizePacketBuffer() function performs the necessary finalization required when using aTLVWriter to write to a chain of PacketBuffers. The function is designed to be used in conjunction with the GetNewPacketBuffer() function.

See the FinalizeBufferFunct type definition for additional information on the API of the FinalizePacketBuffer() function.

GetNewBuffer_Malloced

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

An implementation of aTLVWriter GetNewBuffer function for writing to a dynamic buffer.

The GetNewBuffer_Malloced() function supplies new output space to aTLVWriter by doubling the size of the underlying dynamic buffer as needed to store the encoding. The function is designed to be assigned to theTLVWriter GetNewBuffer function pointer.

See the GetNewBufferFunct type definition for additional information on the API of the GetNewBuffer_Malloced() function.

GetNewPacketBuffer

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

An implementation of aTLVWriter GetNewBuffer function for writing to a chain of PacketBuffers.

The GetNewPacketBuffer() function supplies new output space to aTLVWriter by allocating a chain of one or more PacketBuffers as needed to store the encoding. The function is designed to be assigned to theTLVWriter GetNewBuffer function pointer.

Note that when using the GetNewPacketBuffer with aTLVWriter , the corresponding FinalizePacketBuffer() function (or an equivalent) should also be used to finalize the buffer chain.

See the GetNewBufferFunct type definition for additional information on the API of the GetNewPacketBuffer() function.

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

IsCloseContainerReserved

bool IsCloseContainerReserved(
  void
) const 

Determine whether the container should reserve space for the CloseContainer symbol at the point of starting / opening the container.

IsContainerOpen

bool IsContainerOpen(
  void
) const 

SetCloseContainerReserved

void SetCloseContainerReserved(
  bool aCloseContainerReserved
)

Set whether the container should reserve the space for the CloseContainer symbol at the point of starting / opening the container.

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
)