nl::Weave::TLV::TLVWriter

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

Weave TLV 형식으로 데이터를 쓰기 위한 메모리 효율적인 인코더를 제공합니다.

요약

TLVWriter는 Weave TLV 데이터를 위한 정방향 전용 스트림 스타일 인코더를 구현합니다. 애플리케이션은 작성기의 Put() 메서드 중 하나를 호출하고 필요에 따라 연결된 태그 및 값 정보를 전달하여 인코딩에 데이터를 씁니다. 마찬가지로 애플리케이션은 작성자의 OpenContainer() 또는 EnterContainer() 메서드를 호출하여 TLV 컨테이너 유형(구조, 배열 또는 경로)을 인코딩할 수 있습니다.

TLVWriter 객체는 데이터를 고정 출력 버퍼 또는 하나 이상의 PacketBuffer 객체 체인에 직접 쓸 수 있습니다. 또한 애플리케이션은 자체 GetNewBufferFinalizeBuffer 함수를 제공하여 소켓 또는 이벤트 큐와 같은 임의의 대상으로 출력을 전달할 수 있습니다.

상속

직접 알려진 서브클래스: nl::Weave::TLV::CircularTLVWriter

보호된 유형

@72{
  kEndOfContainerMarkerSize = 1
}
enum

공개 유형

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
암시적 형식으로 인코딩되어야 하는 태그의 프로필 ID입니다.

보호된 속성

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

공개 함수

CloseContainer(TLVWriter & containerWriter)
OpenContainer() 호출 후 TLV 컨테이너 작성을 완료합니다.
ContinuePutBytes(const uint8_t *buf, uint32_t len)
TLV 바이트 문자열 값을 인코딩합니다.
CopyContainer(TLVReader & container)
TLVReader 객체에서 TLV 컨테이너 요소를 복사합니다.
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
단일 PacketBuffer에 작성하도록 TLVWriter 객체를 초기화합니다.
Init(PacketBuffer *buf, uint32_t maxLen, bool allowDiscontiguousBuffers)
void
하나 이상의 PacketBuffer에 작성하도록 TLVWriter 객체를 초기화합니다.
InitMalloced(uint8_t *& outBuf, uint32_t initialBufSize, uint32_t maxLen)
void
동적 버퍼에 쓰도록 TLVWriter 객체를 초기화합니다.
OpenContainer(uint64_t tag, TLVType containerType, TLVWriter & containerWriter)
TLV 컨테이너 요소의 멤버를 작성하기 위한 새 TLVWriter 객체를 초기화합니다.
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 null 값을 인코딩합니다.
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)
PacketBuffer 체인에 쓰기 위한 TLVWriter FinalizeBuffer 함수의 구현입니다.
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)
PacketBuffer 체인에 쓰기 위한 TLVWriter GetNewBuffer 함수의 구현입니다.

보호된 함수

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 객체의 출력을 마무리하는 데 사용되는 함수입니다.

이 유형의 함수는 TLVWriterFinalize() 메서드가 호출될 때 호출됩니다. 함수는 작성기 객체의 출력 소비와 관련하여 필요한 정리 또는 마무리 작업을 수행해야 합니다. 인코딩의 최종 길이를 기록하거나 파일 설명자를 닫는 작업을 예로 들 수 있습니다.

세부정보
매개변수
[in] writer
완료될 TLVWriter 객체에 대한 참조입니다.
[in,out] bufHandle
이전 GetNewBuffer 함수 호출에서 설정된 uintptr_t 컨텍스트 값입니다.
[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에는 현재 버퍼의 unused 공간 바이트 수가 포함됩니다. 종료 시 bufLen는 새 출력 버퍼에 쓸 수 있는 최대 바이트 수를 포함해야 합니다.
반환 값
WEAVE_NO_ERROR
함수가 작성기에 더 많은 버퍼 공간을 제공할 수 있었는지 여부
other
함수가 추가 버퍼 공간을 생성하지 못하도록 하는 오류가 발생했음을 나타내는 기타 Weave 또는 플랫폼별 오류 코드입니다.

공개 속성

AppData

void * AppData

애플리케이션별 데이터에 사용할 수 있는 포인터 필드입니다.

FinalizeBuffer

FinalizeBufferFunct FinalizeBuffer

TLVWriter가 완료될 때 호출될 함수에 대한 포인터입니다.

TLVWriter 객체는 Finalize() 메서드가 호출될 때마다 FinalizeBuffer 함수를 호출합니다. 애플리케이션은 Finalize()를 호출하기 전에 언제든지 함수 포인터를 설정할 수 있습니다. 기본적으로 포인터는 NULL로 설정되어 있으므로 Finalize() 메서드가 함수를 호출하지 않습니다.

FinalizeBuffer 함수 구현에 관한 추가 정보는 FinalizeBufferFunct 유형 정의를 참고하세요.

GetNewBuffer

GetNewBufferFunct GetNewBuffer

TLVWriter에 새 출력 버퍼 공간을 제공할 함수에 대한 포인터입니다.

TLVWriter 객체는 현재 출력 버퍼의 크기를 초과하는 데이터를 작성하려고 시도할 때마다 GetNewBuffer 함수를 호출합니다. NULL (기본값)로 설정된 경우 출력 데이터가 현재 버퍼를 오버플로하는 경우 작성기는 WEAVE_ERROR_NO_MEMORY를 반환합니다.

GetNewBuffer는 애플리케이션에서 언제든지 설정할 수 있지만 일반적으로 작성기를 초기화할 때 설정됩니다.

GetNewBuffer 함수 구현에 대한 자세한 내용은 GetNewBufferFunct 유형 정의를 참고하세요.

ImplicitProfileId

uint32_t ImplicitProfileId

암시적 형식으로 인코딩되어야 하는 태그의 프로필 ID입니다.

작성자가 새 요소를 인코딩하도록 요청받을 때 새 요소와 연결된 태그의 프로필 ID가 ImplicitProfileId 멤버의 값과 일치하면 작성자는 태그를 암시적 형식으로 인코딩하여 프로세스에서 프로필 ID를 생략합니다.

기본적으로 ImplicitProfileId 속성은 작성자에게 암시적으로 인코딩된 태그를 내보내지 않도록 지시하는 kProfileIdNotSpecified로 설정됩니다. 애플리케이션은 언제든지 ImplicitProfileId를 설정하여 인코딩의 현재 지점에서 암시적 형식으로 인코딩 태그를 사용 설정할 수 있습니다. 설정할 적절한 프로필 ID는 일반적으로 말하는 애플리케이션이나 프로토콜의 컨텍스트에 따라 달라집니다.

보호된 속성

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
)

OpenContainer() 호출 후 TLV 컨테이너 작성을 완료합니다.

CloseContainer() 메서드는 OpenContainer()를 호출한 후 상위 TLVWriter 객체의 상태를 복원합니다. OpenContainer()를 호출할 때마다 애플리케이션은 CloseContainer()를 각각 호출하여 동일한 컨테이너 작성자에 대한 참조를 두 메서드에 모두 전달해야 합니다.

CloseContainer()가 반환되면 애플리케이션은 상위 작성기를 계속 사용하여 컨테이너 요소 뒤에 표시되는 추가 TLV 요소를 작성할 수 있습니다. 이 시점에서 제공된 컨테이너 작성기는 '초기화된' 것으로 간주되어야 하며 다시 초기화하지 않고 사용해서는 안 됩니다.

세부정보
매개변수
[in] containerWriter
OpenContainer() 메서드에 제공된 TLVWriter 객체에 대한 참조입니다.
반환 값
WEAVE_NO_ERROR
메서드가 성공한 경우
WEAVE_ERROR_INCORRECT_STATE
제공된 컨테이너 작성기가 올바른 상태가 아닌 경우
WEAVE_ERROR_TLV_CONTAINER_OPEN
제공된 컨테이너 작성기에서 다른 컨테이너 작성기가 열려 있고 아직 닫히지 않은 경우
WEAVE_ERROR_BUFFER_TOO_SMALL
컨테이너의 인코딩을 완료하면 작성기가 초기화될 때 지정된 최대 바이트 수의 제한을 초과하게 됩니다.
WEAVE_ERROR_NO_MEMORY
메모리 부족으로 인해 출력 버퍼 할당 시도가 실패한 경우
other
구성된 GetNewBuffer() 또는 FinalizeBuffer() 함수에서 반환된 기타 Weave 또는 플랫폼별 오류

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
구성된 GetNewBuffer() 또는 FinalizeBuffer() 함수에서 반환된 기타 Weave 또는 플랫폼별 오류

CopyContainer

WEAVE_ERROR CopyContainer(
  TLVReader & container
)

TLVReader 객체에서 TLV 컨테이너 요소를 복사합니다.

CopyContainer()TLVReader 객체의 현재 위치에 있는 사전 인코딩된 컨테이너 요소를 복사하여 새로운 TLV 컨테이너 요소를 인코딩합니다. 이 메서드는 소스 인코딩에서 컨테이너의 유형, 태그, 요소를 복사하여 새 컨테이너 요소 전체를 한 번의 호출로 작성합니다. 메서드가 반환되면 작성자 객체를 사용하여 컨테이너 요소 뒤에 추가 TLV 요소를 작성할 수 있습니다.

세부정보
매개변수
[in] container
복사할 사전 인코딩된 TLV 컨테이너를 식별하는 TLVReader 객체에 대한 참조입니다.
반환 값
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
구성된 GetNewBuffer() 또는 FinalizeBuffer() 함수 또는 리더 객체와 연결된 GetNextBuffer() 함수에서 반환된 기타 Weave 또는 플랫폼별 오류입니다.

CopyContainer

WEAVE_ERROR CopyContainer(
  uint64_t tag,
  TLVReader & container
)

사전 인코딩된 멤버 요소 집합에서 TLV 컨테이너 요소를 인코딩합니다.

CopyContainer() 메서드는 TLVReader 객체에서 가져온 일련의 멤버 요소를 포함하는 새로운 TLV 컨테이너 요소 (구조, 배열 또는 경로)를 인코딩합니다. 메서드가 호출되면 제공된 판독기 객체가 TLV 컨테이너 요소에 배치되어야 합니다. 새로 인코딩된 컨테이너는 입력 컨테이너와 유형과 구성원이 동일합니다. 새 컨테이너의 태그는 입력 매개변수로 지정됩니다.

메서드가 반환되면 작성자 객체를 사용하여 컨테이너 요소 뒤에 추가 TLV 요소를 작성할 수 있습니다.

세부정보
매개변수
[in] tag
컨테이너와 함께 인코딩될 TLV 태그 또는 컨테이너가 태그 없이 인코딩되어야 하는 경우 AnonymousTag입니다. 태그 값은 태그 정의 함수 ProfileTag(), ContextTag() 또는 CommonTag() 중 하나를 사용하여 구성해야 합니다.
[in] container
유형과 구성원을 복사해야 하는 사전 인코딩된 TLV 컨테이너를 식별하는 TLVReader 객체에 대한 참조입니다.
반환 값
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
구성된 GetNewBuffer() 또는 FinalizeBuffer() 함수 또는 리더 객체와 연결된 GetNextBuffer() 함수에서 반환된 기타 Weave 또는 플랫폼별 오류입니다.

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
구성된 GetNewBuffer() 또는 FinalizeBuffer() 함수 또는 리더 객체와 연결된 GetNextBuffer() 함수에서 반환된 기타 Weave 또는 플랫폼별 오류입니다.

CopyElement

WEAVE_ERROR CopyElement(
  TLVReader & reader
)

TLV 요소를 판독기 객체에서 작성기로 복사합니다.

CopyElement() 메서드는 유형, 태그, 값을 TLVReader 객체에서 가져온 새로운 TLV 요소를 인코딩합니다. 메서드가 호출되면 제공된 판독기 객체가 소스 TLV 요소에 배치될 것으로 예상됩니다. 새로 인코딩된 요소는 입력 컨테이너와 동일한 유형, 태그, 콘텐츠를 갖습니다. 제공된 요소가 TLV 컨테이너 (구조, 배열 또는 경로)이면 컨테이너의 전체 콘텐츠가 복사됩니다.

세부정보
매개변수
[in] reader
복사해야 하는 사전 인코딩된 TLV 요소를 식별하는 TLVReader 객체에 대한 참조입니다.
반환 값
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
구성된 GetNewBuffer() 또는 FinalizeBuffer() 함수 또는 리더 객체와 연결된 GetNextBuffer() 함수에서 반환된 기타 Weave 또는 플랫폼별 오류입니다.

CopyElement

WEAVE_ERROR CopyElement(
  uint64_t tag,
  TLVReader & reader
)

EndContainer

WEAVE_ERROR EndContainer(
  TLVType outerContainerType
)

TLV 컨테이너 요소의 인코딩을 완료합니다.

EndContainer() 메서드는 TLV 컨테이너 요소의 인코딩을 완료하고 이전에 StartContainer()를 호출한 후 TLVWrite 객체의 상태를 복원합니다. StartContainer()를 호출할 때마다 애플리케이션은 EndContainer()를 적절히 호출하여 StartContainer() 호출에서 반환된 TLVType 값을 전달해야 합니다. EndContainer()가 반환되면 작성자 객체를 사용하여 컨테이너 요소 다음에 오는 추가 TLV 요소를 작성할 수 있습니다.

세부정보
매개변수
[in] outerContainerType
StartContainer() 메서드에서 반환된 TLVType 값입니다.
반환 값
WEAVE_NO_ERROR
메서드가 성공한 경우
WEAVE_ERROR_INCORRECT_STATE
해당하는 StartContainer() 호출이 이루어지지 않은 경우
WEAVE_ERROR_TLV_CONTAINER_OPEN
컨테이너 작성기가 현재 작성기에서 열렸지만 아직 닫히지 않은 경우
WEAVE_ERROR_BUFFER_TOO_SMALL
값을 쓰면 작성기가 초기화될 때 지정된 최대 바이트 수의 제한을 초과하는 경우.
WEAVE_ERROR_NO_MEMORY
메모리 부족으로 인해 출력 버퍼 할당 시도가 실패한 경우
other
구성된 GetNewBuffer() 또는 FinalizeBuffer() 함수에서 반환된 기타 Weave 또는 플랫폼별 오류

완료

WEAVE_ERROR Finalize(
  void
)

TLV 인코딩 작성을 완료합니다.

Finalize() 메서드는 TLV 인코딩을 기본 출력 버퍼에 작성하는 프로세스를 완료합니다. 이 메서드는 버퍼의 내용을 사용하기 전에 애플리케이션에 의해 호출되어야 합니다. Finalize()는 현재 작성자에 열려 있는 컨테이너 작성자가 없는 경우에만 호출할 수 있습니다. (OpenContainer() 참조)

세부정보
반환 값
WEAVE_NO_ERROR
인코딩이 성공적으로 완료되었는지 여부
WEAVE_ERROR_TLV_CONTAINER_OPEN
컨테이너 작성기가 현재 작성기에서 열렸지만 아직 닫히지 않은 경우
other
구성된 FinalizeBuffer() 함수에서 반환된 기타 Weave 또는 플랫폼별 오류

GetContainerType

TLVType GetContainerType(
  void
) const 

TLVWriter가 현재 쓰고 있는 컨테이너의 유형을 반환합니다.

GetContainerType() 메서드는 TLVWriter가 현재 쓰고 있는 TLV 컨테이너의 유형을 반환합니다. TLVWriter가 컨테이너 내의 요소를 쓰지 않는 경우 (즉, 인코딩의 가장 바깥쪽 수준에서 작성하는 경우) 메서드는 kTLVType_NotSpecified를 반환합니다.

세부정보
반환
현재 컨테이너의 TLVType이거나 TLVWriter가 컨테이너 내의 요소를 쓰지 않는 경우에는 kTLVType_NotSpecified입니다.

GetLengthWritten

uint32_t GetLengthWritten(
  void
)

작성기가 초기화된 이후 쓴 총 바이트 수를 반환합니다.

세부정보
반환
작성자가 초기화된 이후의 총 쓰기 바이트 수입니다.

Init

void Init(
  uint8_t *buf,
  uint32_t maxLen
)

단일 출력 버퍼에 쓰도록 TLVWriter 객체를 초기화합니다.

세부정보
매개변수
[in] buf
TLV가 작성되어야 하는 버퍼에 대한 포인터입니다.
[in] maxLen
출력 버퍼에 써야 하는 최대 바이트 수입니다.

Init

void Init(
  PacketBuffer *buf,
  uint32_t maxLen
)

단일 PacketBuffer에 작성하도록 TLVWriter 객체를 초기화합니다.

제공된 버퍼에 있는 기존 데이터의 마지막 바이트 직후에 쓰기가 시작됩니다.

세부정보
매개변수
[in] buf
TLV가 작성되어야 하는 PacketBuffer에 대한 포인터입니다.
[in] maxLen
출력 버퍼에 써야 하는 최대 바이트 수입니다.

Init

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

하나 이상의 PacketBuffer에 작성하도록 TLVWriter 객체를 초기화합니다.

지정된 버퍼에 있는 기존 데이터의 마지막 바이트 바로 다음에 쓰기가 시작됩니다. allowDiscontiguousBuffers가 true인 경우 작성된 데이터의 양을 수용할 수 있도록 필요에 따라 추가 PacketBuffer가 할당되고 제공된 버퍼에 연결됩니다. 지정된 출력 버퍼가 이미 버퍼 체인의 헤드인 경우 새 버퍼가 할당되기 전에 체인의 후속 버퍼에 출력이 작성됩니다.

세부정보
매개변수
[in] buf
TLV 데이터를 작성해야 하는 PacketBuffer에 대한 포인터입니다.
[in] maxLen
출력 버퍼에 써야 하는 최대 바이트 수입니다.
[in] allowDiscontiguousBuffers
true인 경우 PacketBuffer 체인에 데이터를 써서 작성된 데이터를 저장하는 데 필요한 새 버퍼를 할당합니다. 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
)

TLV 컨테이너 요소의 멤버를 작성하기 위한 새 TLVWriter 객체를 초기화합니다.

OpenContainer() 메서드는 TLV 컨테이너 요소 (구조, 배열 또는 경로)를 인코딩에 작성하는 데 사용됩니다. 이 메서드는 새 컨테이너의 유형과 태그 (있는 경우)와 컨테이너의 요소를 쓰기 위해 초기화될 새 작성자 객체 (컨테이너 작성기)에 대한 참조를 가져옵니다. 애플리케이션은 컨테이너 작성기를 사용하여 새 컨테이너의 멤버를 작성한 다음 CloseContainer()를 호출하여 컨테이너 인코딩을 완료합니다.

컨테이너 작성기가 열려 있는 동안에는 애플리케이션이 상위 작성기를 호출하거나 상태를 변경해서는 안 됩니다.

컨테이너 작성자는 상위 작성기에서 다양한 구성 속성을 상속합니다. 다음과 같습니다.

  • 암시적 프로필 ID (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
구성된 GetNewBuffer() 또는 FinalizeBuffer() 함수에서 반환된 기타 Weave 또는 플랫폼별 오류

데이터 기반의

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
구성된 GetNewBuffer() 또는 FinalizeBuffer() 함수에서 반환된 기타 Weave 또는 플랫폼별 오류

데이터 기반의

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

TLV 부호 있는 정수 값을 인코딩합니다.

이는 편의를 위해 제공되는 오버로드된 멤버 함수입니다. 위의 함수와는 허용되는 인수만 다릅니다.

세부정보
매개변수
[in] tag
값으로 인코딩될 TLV 태그이거나 값을 태그 없이 인코딩해야 하는 경우 AnonymousTag입니다. 태그 값은 태그 정의 함수 ProfileTag(), ContextTag() 또는 CommonTag() 중 하나를 사용하여 구성해야 합니다.
[in] v
인코딩할 값입니다.
[in] preserveSize
값을 입력 유형과 동일한 바이트 수로 인코딩해야 하는 경우 true입니다. 값을 표현하는 데 필요한 최소 바이트 수로 값을 인코딩해야 하는 경우 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
구성된 GetNewBuffer() 또는 FinalizeBuffer() 함수에서 반환된 기타 Weave 또는 플랫폼별 오류

데이터 기반의

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
구성된 GetNewBuffer() 또는 FinalizeBuffer() 함수에서 반환된 기타 Weave 또는 플랫폼별 오류

데이터 기반의

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

TLV의 부호 없는 정수 값을 인코딩합니다.

이는 편의를 위해 제공되는 오버로드된 멤버 함수입니다. 위의 함수와는 허용되는 인수만 다릅니다.

세부정보
매개변수
[in] tag
값으로 인코딩될 TLV 태그이거나 값을 태그 없이 인코딩해야 하는 경우 AnonymousTag입니다. 태그 값은 태그 정의 함수 ProfileTag(), ContextTag() 또는 CommonTag() 중 하나를 사용하여 구성해야 합니다.
[in] v
인코딩할 값입니다.
[in] preserveSize
값을 입력 유형과 동일한 바이트 수로 인코딩해야 하는 경우 true입니다. 값을 표현하는 데 필요한 최소 바이트 수로 값을 인코딩해야 하는 경우 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
구성된 GetNewBuffer() 또는 FinalizeBuffer() 함수에서 반환된 기타 Weave 또는 플랫폼별 오류

데이터 기반의

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
구성된 GetNewBuffer() 또는 FinalizeBuffer() 함수에서 반환된 기타 Weave 또는 플랫폼별 오류

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
구성된 GetNewBuffer() 또는 FinalizeBuffer() 함수에서 반환된 기타 Weave 또는 플랫폼별 오류

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
구성된 GetNewBuffer() 또는 FinalizeBuffer() 함수에서 반환된 기타 Weave 또는 플랫폼별 오류

PutNull

WEAVE_ERROR PutNull(
  uint64_t tag
)

TLV null 값을 인코딩합니다.

세부정보
매개변수
[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() 또는 FinalizeBuffer() 함수에서 반환된 기타 Weave 또는 플랫폼별 오류

PutPreEncodedContainer

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

사전 인코딩된 멤버 요소 집합에서 TLV 컨테이너 요소를 인코딩합니다.

PutPreEncodedContainer() 메서드는 사전 인코딩된 버퍼에서 가져온 멤버 요소의 집합을 포함하는 새로운 TLV 컨테이너 요소 (구조, 배열 또는 경로)를 인코딩합니다. 입력 버퍼에는 지정된 컨테이너 유형과 관련된 규칙을 준수하는 태그가 있는 0개 이상의 전체 인코딩된 TLV 요소가 포함되어야 합니다 (예: 구조 멤버에는 태그가 있어야 하고 배열 멤버에는 태그가 없어야 함).

이 메서드는 한 번의 호출로 컨테이너 요소 전체를 인코딩합니다. PutPreEncodedContainer()가 반환되면 작성자 객체를 사용하여 컨테이너 요소 뒤에 추가 TLV 요소를 작성할 수 있습니다.

세부정보
매개변수
[in] tag
컨테이너와 함께 인코딩될 TLV 태그 또는 컨테이너가 태그 없이 인코딩되어야 하는 경우 AnonymousTag입니다. 태그 값은 태그 정의 함수 ProfileTag(), ContextTag() 또는 CommonTag() 중 하나를 사용하여 구성해야 합니다.
[in] containerType
인코딩할 컨테이너의 유형입니다. kTLVType_Structure, kTLVType_Array 또는 kTLVType_Path 중 하나여야 합니다.
[in] data
새 컨테이너의 멤버가 될 인코딩된 TLV 요소가 0개 이상 포함된 버퍼에 대한 포인터입니다.
[in] dataLen
data 버퍼의 바이트 수입니다.
반환 값
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
구성된 GetNewBuffer() 또는 FinalizeBuffer() 함수에서 반환된 기타 Weave 또는 플랫폼별 오류

PutString

WEAVE_ERROR PutString(
  uint64_t tag,
  const char *buf
)

TLV UTF8 문자열 값을 인코딩합니다.

세부정보
매개변수
[in] tag
값으로 인코딩될 TLV 태그이거나 값을 태그 없이 인코딩해야 하는 경우 AnonymousTag입니다. 태그 값은 태그 정의 함수 ProfileTag(), ContextTag() 또는 CommonTag() 중 하나를 사용하여 구성해야 합니다.
[in] buf
인코딩할 null로 끝나는 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() 또는 FinalizeBuffer() 함수에서 반환된 기타 Weave 또는 플랫폼별 오류

PutString

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

TLV UTF8 문자열 값을 인코딩합니다.

세부정보
매개변수
[in] tag
값으로 인코딩될 TLV 태그이거나 값을 태그 없이 인코딩해야 하는 경우 AnonymousTag입니다. 태그 값은 태그 정의 함수 ProfileTag(), ContextTag() 또는 CommonTag() 중 하나를 사용하여 구성해야 합니다.
[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() 또는 FinalizeBuffer() 함수에서 반환된 기타 Weave 또는 플랫폼별 오류

PutStringF

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

TLV 요소의 형식에 따라 형식이 지정된 문자열 출력을 인코딩합니다.

PutStringF는 sprintf의 아날로그로, 여기서 출력이 문자 버퍼가 아닌 TLV 요소에 저장됩니다. 확장된 printf 기능을 사용할 수 있는 경우 이 함수는 결과 문자열을 불연속적인 기본 저장소로 출력할 수 있습니다. 구현은 다음과 같은 printf 개선사항을 지원합니다.

플랫폼은 putchar 대신 맞춤 콜백을 호출하는 기능을 제공하는 콜백 기반 vcbprintf를 제공합니다.

플랫폼은 vsnprintf_ex라는 vsnprintf의 변형을 제공합니다. 이 변형은 출력의 처음 n 문자를 생략하기 위한 프로비저닝이 있다는 점을 제외하고 vsnprintf와 동일하게 작동합니다.

콜백 기반 함수가 가장 간단하고 적은 양의 코드를 사용하지만 vsprintf_ex 다양한 함수는 스택을 더 적게 소비합니다.

위의 두 가지 유형 중 어느 것도 사용할 수 없지만 플랫폼에서 malloc를 제공하는 경우 함수는 출력을 저장할 임시 버퍼를 할당합니다. 플랫폼이 printf 계열이나 malloc에 향상 기능을 제공하지 않으면 현재 TLV 저장소의 연속 상태에 맞도록 출력이 잘립니다.

세부정보
매개변수
[in] tag
값으로 인코딩될 TLV 태그이거나 값을 태그 없이 인코딩해야 하는 경우 AnonymousTag입니다. 태그 값은 태그 정의 함수 ProfileTag(), ContextTag() 또는 CommonTag() 중 하나를 사용하여 구성해야 합니다.
[in] fmt
인수 목록의 형식을 지정하는 데 사용되는 형식 문자열입니다. printf 함수 계열의 형식 문자열과 동일한 문법 및 규칙을 따릅니다.
[in] ...
{}에 따라 출력 값으로 서식을 지정할 인수 목록입니다.
반환 값
WEAVE_NO_ERROR
메서드가 성공한 경우
other
TLVWriter 메서드 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() 또는 CommonTag() 중 하나를 사용하여 구성해야 합니다.
[in] containerType
인코딩할 컨테이너의 유형입니다. kTLVType_Structure, kTLVType_Array 또는 kTLVType_Path 중 하나여야 합니다.
[out] outerContainerType
작성자의 컨텍스트를 수신하는 TLVType 값에 대한 참조입니다.
반환 값
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
구성된 GetNewBuffer() 또는 FinalizeBuffer() 함수에서 반환된 기타 Weave 또는 플랫폼별 오류

StartPutBytes

WEAVE_ERROR StartPutBytes(
  uint64_t tag,
  uint32_t totalLen
)

TLV 바이트 문자열을 여러 청크로 인코딩합니다.

ContinuePutBytes와 함께 사용해야 합니다.

세부정보
매개변수
[in] tag
값으로 인코딩될 TLV 태그이거나 값을 태그 없이 인코딩해야 하는 경우 AnonymousTag입니다. 태그 값은 태그 정의 함수 ProfileTag(), ContextTag() 또는 CommonTag() 중 하나를 사용하여 구성해야 합니다.
[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() 또는 FinalizeBuffer() 함수에서 반환된 기타 Weave 또는 플랫폼별 오류

VPutStringF

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

TLV 요소의 형식에 따라 형식이 지정된 문자열 출력을 인코딩합니다.

PutStringF는 sprintf의 아날로그로, 여기서 출력이 문자 버퍼가 아닌 TLV 요소에 저장됩니다. 확장된 printf 기능을 사용할 수 있는 경우 이 함수는 결과 문자열을 불연속적인 기본 저장소로 출력할 수 있습니다. 구현은 다음과 같은 printf 개선사항을 지원합니다.

플랫폼은 putchar 대신 맞춤 콜백을 호출하는 기능을 제공하는 콜백 기반 vcbprintf를 제공합니다.

플랫폼은 vsnprintf_ex라는 vsnprintf의 변형을 제공합니다. 이 변형은 출력의 처음 n 문자를 생략하기 위한 프로비저닝이 있다는 점을 제외하고 vsnprintf와 동일하게 작동합니다.

콜백 기반 함수가 가장 간단하고 적은 양의 코드를 사용하지만 vsprintf_ex 다양한 함수는 스택을 더 적게 소비합니다.

위의 두 가지 유형 중 어느 것도 사용할 수 없지만 플랫폼에서 malloc를 제공하는 경우 함수는 출력을 저장할 임시 버퍼를 할당합니다. 플랫폼이 printf 계열이나 malloc에 향상 기능을 제공하지 않으면 현재 TLV 저장소의 연속 상태에 맞도록 출력이 잘립니다.

세부정보
매개변수
[in] tag
값으로 인코딩될 TLV 태그이거나 값을 태그 없이 인코딩해야 하는 경우 AnonymousTag입니다. 태그 값은 태그 정의 함수 ProfileTag(), ContextTag() 또는 CommonTag() 중 하나를 사용하여 구성해야 합니다.
[in] fmt
인수 목록의 형식을 지정하는 데 사용되는 형식 문자열입니다. printf 함수 계열의 형식 문자열과 동일한 문법 및 규칙을 따릅니다.
[in] ap
{}에 따라 출력 값으로 서식을 지정할 인수 목록입니다.
반환 값
WEAVE_NO_ERROR
메서드가 성공한 경우
other
TLVWriter 메서드 WriteElementHead 또는 GetNewBuffer의 기본 호출이 실패하면 오류가 즉시 호출 스택 위로 전달됩니다.

공개 정적 함수

FinalizePacketBuffer

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

PacketBuffer 체인에 쓰기 위한 TLVWriter FinalizeBuffer 함수의 구현입니다.

FinalizePacketBuffer() 함수는 TLVWriter를 사용하여 PacketBuffer 체인에 쓰는 데 필요한 필수 마무리를 수행합니다. 이 함수는 GetNewPacketBuffer() 함수와 함께 사용하도록 설계되었습니다.

FinalizePacketBuffer() 함수의 API에 대한 자세한 내용은 FinalizeBufferFunct 유형 정의를 참조하세요.

GetNewBuffer_Malloced

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

동적 버퍼에 쓰기 위한 TLVWriter GetNewBuffer 함수의 구현입니다.

GetNewBuffer_Malloced() 함수는 인코딩을 저장하는 데 필요한 만큼 기본 동적 버퍼의 크기를 두 배로 늘려 TLVWriter에 새 출력 공간을 제공합니다. 이 함수는 TLVWriter GetNewBuffer 함수 포인터에 할당되도록 설계되었습니다.

GetNewBuffer_Malloced() 함수의 API에 관한 자세한 내용은 GetNewBufferFunct 유형 정의를 참고하세요.

GetNewPacketBuffer

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

PacketBuffer 체인에 쓰기 위한 TLVWriter GetNewBuffer 함수의 구현입니다.

GetNewPacketBuffer() 함수는 인코딩을 저장하는 데 필요한 경우 하나 이상의 PacketBuffer 체인을 할당하여 TLVWriter에 새 출력 공간을 제공합니다. 이 함수는 TLVWriter GetNewBuffer 함수 포인터에 할당되도록 설계되었습니다.

TLVWriter와 함께 GetNewPacketBuffer를 사용하는 경우 해당하는 FinalizePacketBuffer() 함수 (또는 이에 상응하는 함수)도 버퍼 체인을 마무리하는 데 사용해야 합니다.

GetNewPacketBuffer() 함수의 API에 관한 자세한 내용은 GetNewBufferFunct 유형 정의를 참조하세요.

보호된 함수

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
)

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
)