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에는 현재 버퍼의 미사용 공간 바이트 수가 포함됩니다. 종료 시 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 또는 플랫폼별 오류

Put

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 또는 플랫폼별 오류

Put

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 또는 플랫폼별 오류

Put

WEAVE_ERROR Put(
  uint64_t tag,
  int16_t v
)

Put

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

Put

WEAVE_ERROR Put(
  uint64_t tag,
  int32_t v
)

Put

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

Put

WEAVE_ERROR Put(
  uint64_t tag,
  int64_t v
)

Put

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

Put

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 또는 플랫폼별 오류

Put

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 또는 플랫폼별 오류

Put

WEAVE_ERROR Put(
  uint64_t tag,
  uint16_t v
)

Put

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

Put

WEAVE_ERROR Put(
  uint64_t tag,
  uint32_t v
)

Put

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

Put

WEAVE_ERROR Put(
  uint64_t tag,
  uint64_t v
)

Put

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

Put

WEAVE_ERROR Put(
  uint64_t tag,
  float v
)

Put

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는 문자 버퍼가 아닌 TLV 요소에 출력이 저장되는 sprintf의 아날로그입니다. 확장된 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] ...
fmt.
반환 값
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는 문자 버퍼가 아닌 TLV 요소에 출력이 저장되는 sprintf의 아날로그입니다. 확장된 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
fmt.
반환 값
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 함수 포인터에 할당되도록 설계되었습니다.

GetNewPacketBuffer를 TLVWriter와 함께 사용할 때는 해당하는 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
)