nl::Weave::TLV::TLVWriter

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

มีโปรแกรมเปลี่ยนไฟล์ที่มีประสิทธิภาพด้านหน่วยความจำสำหรับการเขียนข้อมูลในรูปแบบ Weave TLV

สรุป

TLVWriter ใช้โปรแกรมเปลี่ยนไฟล์แบบไปข้างหน้าเท่านั้นสำหรับข้อมูล TLV ของ Weave แอปพลิเคชันจะเขียนข้อมูลลงในการเข้ารหัสโดยเรียกใช้เมธอด Put() ของผู้เขียนวิธีหนึ่ง ส่งผ่านข้อมูลแท็กและค่าที่เกี่ยวข้องตามที่จำเป็น ในทำนองเดียวกัน แอปพลิเคชันสามารถเข้ารหัสประเภทคอนเทนเนอร์ TLV (โครงสร้าง อาร์เรย์ หรือเส้นทาง) โดยเรียกใช้เมธอด OpenContainer() หรือ EnterContainer() ของผู้เขียน

ออบเจ็กต์ TLVWriter เขียนข้อมูลไปยังบัฟเฟอร์เอาต์พุตแบบคงที่ได้โดยตรง หรือเขียนไปยังเชนของออบเจ็กต์ PacketBuffer อย่างน้อย 1 รายการได้ นอกจากนี้ แอปพลิเคชันยังสามารถจัดหาฟังก์ชัน GetNewBuffer และ FinalizeBuffer ของตนเองเพื่อนำเอาต์พุตไปยังปลายทางที่กำหนดเอง เช่น ซ็อกเก็ตหรือคิวกิจกรรม

การสืบทอด

คลาสย่อยที่รู้จักโดยตรง: 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
รหัสโปรไฟล์ของแท็กที่ควรเข้ารหัสในรูปแบบโดยนัย

แอตทริบิวต์ที่ได้รับการปกป้อง

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 จากออบเจ็กต์ Reader ลงในผู้เขียน
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 อย่างน้อย 1 รายการ
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)
เข้ารหัสค่า Null TLV
PutPreEncodedContainer(uint64_t tag, TLVType containerType, const uint8_t *data, uint32_t dataLen)
เข้ารหัสองค์ประกอบคอนเทนเนอร์ TLV จากชุดองค์ประกอบสมาชิกที่เข้ารหัสล่วงหน้า
PutString(uint64_t tag, const char *buf)
เข้ารหัสค่าสตริง UTF8 TLV
PutString(uint64_t tag, const char *buf, uint32_t len)
เข้ารหัสค่าสตริง UTF8 TLV
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)
การใช้งานฟังก์ชัน GetNewBuffer TLVWriter สำหรับการเขียนไปยังบัฟเฟอร์แบบไดนามิก
GetNewPacketBuffer(TLVWriter & writer, uintptr_t & bufHandle, uint8_t *& bufStart, uint32_t & bufLen)
การใช้ฟังก์ชัน GetNewBuffer ของ TLVWriter สำหรับการเขียนในเชนของ PacketBuffers

ฟังก์ชันที่มีการป้องกัน

IsCloseContainerReserved(void) const
bool
กำหนดว่าคอนเทนเนอร์ควรสงวนพื้นที่สำหรับสัญลักษณ์ CloseContainer เมื่อเริ่มต้น / เปิดคอนเทนเนอร์หรือไม่
IsContainerOpen(void) const
bool
SetCloseContainerReserved(bool aCloseContainerReserved)
void
กำหนดว่าคอนเทนเนอร์ควรสงวนพื้นที่สำหรับสัญลักษณ์ CloseContainer ที่จุดเริ่มต้น / เปิดคอนเทนเนอร์หรือไม่
SetContainerOpen(bool aContainerOpen)
void
WriteData(const uint8_t *p, uint32_t len)
WriteElementHead(TLVElementType elemType, uint64_t tag, uint64_t lenOrVal)
WriteElementWithData(TLVType type, uint64_t tag, const uint8_t *data, uint32_t dataLen)

ประเภทที่ได้รับการป้องกัน

@72

 @72

ประเภทสาธารณะ

FinalizeBufferFunct

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

ฟังก์ชันที่ใช้เพื่อสรุปเอาต์พุตจากออบเจ็กต์ TLVWriter

ระบบจะเรียกใช้ฟังก์ชันประเภทนี้เมื่อมีการเรียกใช้เมธอด Finalize() ของ TLVWriter คาดว่าฟังก์ชันนี้จะทําการล้างข้อมูลหรือการสรุปที่จําเป็นใดๆ ที่เกี่ยวข้องกับการใช้เอาต์พุตของออบเจ็กต์ผู้เขียน ตัวอย่างของกรณีนี้ก็เช่น การบันทึกความยาวสุดท้ายของการเข้ารหัส หรือการปิดข้อบ่งชี้ไฟล์

รายละเอียด
พารามิเตอร์
[in] writer
การอ้างอิงไปยังออบเจ็กต์ TLVWriter ที่กำลังได้รับการสรุป
[in,out] bufHandle
ค่าบริบท uintptr_t ที่ตั้งค่าโดยการเรียกฟังก์ชัน GetNewBuffer ครั้งก่อน
[in,out] bufStart
ตัวชี้ไปยังจุดเริ่มต้นของบัฟเฟอร์เอาต์พุตปัจจุบัน (และสุดท้าย)
[in,out] bufLen
จำนวนไบต์ที่อยู่ในบัฟเฟอร์ที่ชี้ไป bufStart
แสดงผลค่า
WEAVE_NO_ERROR
สรุปสําเร็จหรือไม่
other
รหัสข้อผิดพลาด Weave อื่นๆ หรือรหัสข้อผิดพลาดเฉพาะแพลตฟอร์มที่ระบุว่าเกิดข้อผิดพลาดขึ้นระหว่างการสรุป

GetNewBufferFunct

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

ฟังก์ชันที่เพิ่มพื้นที่บัฟเฟอร์เอาต์พุตใหม่ให้กับ TLVWriter

ฟังก์ชันประเภทนี้ใช้ในการเตรียมพื้นที่บัฟเฟอร์ใหม่เพื่อให้ TLVWriter เขียนข้อมูล เมื่อเรียกใช้ ฟังก์ชันจะต้องส่งคืนตัวชี้ไปยังตำแหน่งหน่วยความจำที่ควรเขียนข้อมูลใหม่ พร้อมกับความยาวสูงสุดที่เกี่ยวข้อง ฟังก์ชันนี้สามารถจัดสรรพื้นที่ในการเขียนโดยการจัดสรรบัฟเฟอร์ใหม่เพื่อใช้เก็บข้อมูล หรือโดยการล้างข้อมูลที่เขียนไว้ก่อนหน้านี้ออกจากบัฟเฟอร์ที่มีอยู่

รายละเอียด
พารามิเตอร์
[in] writer
การอ้างอิงไปยังออบเจ็กต์ TLVWriter ที่ขอพื้นที่บัฟเฟอร์ใหม่
[in,out] bufHandle
การอ้างอิงค่า uintptr_t ที่ฟังก์ชันสามารถใช้เพื่อจัดเก็บข้อมูลบริบทระหว่างการเรียก ค่านี้จะเริ่มต้นเป็น 0 ก่อนการเรียกใช้ครั้งแรก
[in,out] bufStart
การอ้างอิงไปยังตัวชี้ข้อมูล เมื่อเข้าสู่ฟังก์ชัน bufStart จะชี้จุดเริ่มต้นของบัฟเฟอร์เอาต์พุตปัจจุบัน เมื่อออก คาดไว้ว่า bufStart จะชี้ไปยังจุดเริ่มต้นของบัฟเฟอร์เอาต์พุตใหม่ ค่าตัวชี้ใหม่อาจเหมือนกับค่าก่อนหน้า (เช่น หากฟังก์ชันคัดลอกข้อมูลที่มีอยู่ที่อื่น) หรืออาจชี้ไปที่ตําแหน่งใหม่ทั้งหมดก็ได้
[in,out] bufLen
การอ้างอิงไปยังจำนวนเต็มที่ไม่มีเครื่องหมาย เมื่อเข้าสู่ฟังก์ชัน bufLen จะมีจำนวนไบต์ของพื้นที่ unused ในบัฟเฟอร์ปัจจุบัน เมื่อออก คาดว่า bufLen จะมีจำนวนไบต์สูงสุดที่เขียนไปยังบัฟเฟอร์เอาต์พุตใหม่ได้
แสดงผลค่า
WEAVE_NO_ERROR
หากฟังก์ชันสามารถเพิ่มพื้นที่บัฟเฟอร์สำหรับผู้เขียน
other
รหัสข้อผิดพลาด Weave หรือรหัสข้อผิดพลาดเฉพาะแพลตฟอร์มอื่นๆ ที่ระบุว่าเกิดข้อผิดพลาดขึ้นที่ขัดขวางฟังก์ชันไม่ให้สร้างพื้นที่บัฟเฟอร์เพิ่มเติม

แอตทริบิวต์สาธารณะ

AppData

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() ที่สอดคล้องกัน โดยส่งผ่านการอ้างอิงไปยังผู้เขียนคอนเทนเนอร์เดียวกันไปยังทั้ง 2 เมธอด

เมื่อ 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 จากออบเจ็กต์ Reader ลงในผู้เขียน

เมธอด CopyElement() เข้ารหัสองค์ประกอบ TLV ใหม่ที่มีการนำประเภท แท็ก และค่ามาจากออบเจ็กต์ TLVReader เมื่อมีการเรียกใช้เมธอด ออบเจ็กต์ Reader ที่ให้ไว้ควรจะอยู่ในตำแหน่งองค์ประกอบ 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 อย่างน้อย 1 รายการ

การเขียนจะเริ่มขึ้นทันทีหลังจากไบต์สุดท้ายของข้อมูลที่มีอยู่ในบัฟเฟอร์ที่ระบุ หาก allowDiscontiguousBuffers เป็นจริง ระบบจะจัดสรร PacketBuffers เพิ่มเติมและเชนไปยังบัฟเฟอร์ที่ให้ไว้ตามความจำเป็นเพื่อรองรับจำนวนข้อมูลที่เขียน หากบัฟเฟอร์เอาต์พุตที่ระบุเป็นส่วนหัวของเชนบัฟเฟอร์อยู่แล้ว ระบบจะเขียนเอาต์พุตไปยังบัฟเฟอร์ที่ตามมาในเชนก่อนที่จะมีการจัดสรรบัฟเฟอร์ใหม่

รายละเอียด
พารามิเตอร์
[in] buf
ตัวชี้ไปยัง PacketBuffer ที่ควรเขียนข้อมูล TLV
[in] maxLen
จำนวนไบต์สูงสุดที่ควรเขียนไปยังบัฟเฟอร์เอาต์พุต
[in] allowDiscontiguousBuffers
หากเป็นจริง ให้เขียนข้อมูลไปยังเชนของ PacketBuffers โดยจัดสรรบัฟเฟอร์ใหม่ตามที่จำเป็นเพื่อจัดเก็บข้อมูลที่เขียน หากเป็น "เท็จ" การเขียนจะล้มเหลวโดยมี 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
เป็นจริงหากค่าควรเข้ารหัสด้วยจำนวนไบต์เท่ากับที่ประเภทอินพุต "เท็จ" หากค่าควรเข้ารหัสเป็นจำนวนไบต์ขั้นต่ำที่จำเป็นในการแสดงถึงค่า หมายเหตุ: ขอแนะนำให้แอปพลิเคชันตั้งค่าพารามิเตอร์นี้เป็น "เท็จ"
แสดงผลค่า
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
เป็นจริงหากค่าควรเข้ารหัสด้วยจำนวนไบต์เท่ากับที่ประเภทอินพุต "เท็จ" หากค่าควรเข้ารหัสเป็นจำนวนไบต์ขั้นต่ำที่จำเป็นในการแสดงถึงค่า หมายเหตุ: ขอแนะนำให้แอปพลิเคชันตั้งค่าพารามิเตอร์นี้เป็น "เท็จ"
แสดงผลค่า
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
ตัวชี้ไปยังบัฟเฟอร์ที่มีสตริงไบต์ที่จะเข้ารหัส
[in] len
จำนวนไบต์ที่จะเข้ารหัส
แสดงผลค่า
WEAVE_NO_ERROR
วิธีการนี้สำเร็จหรือไม่
WEAVE_ERROR_TLV_CONTAINER_OPEN
หากผู้เขียนคอนเทนเนอร์เปิดอยู่ในผู้เขียนปัจจุบันและยังไม่ได้ปิด
WEAVE_ERROR_INVALID_TLV_TAG
หากค่าแท็กที่ระบุไม่ถูกต้องหรือไม่เหมาะสมในบริบทที่มีการเขียนค่า
WEAVE_ERROR_BUFFER_TOO_SMALL
หากการเขียนค่านี้ จะทำให้เกินขีดจำกัดจำนวนไบต์สูงสุดที่ระบุเมื่อเริ่มต้นผู้เขียน
WEAVE_ERROR_NO_MEMORY
หากพยายามจัดสรรบัฟเฟอร์เอาต์พุตไม่สำเร็จเนื่องจากหน่วยความจำไม่พอ
other
ข้อผิดพลาด Weave หรือข้อผิดพลาดเฉพาะแพลตฟอร์มอื่นๆ ที่แสดงผลโดยฟังก์ชัน GetNewBuffer() หรือ FinalizeBuffer() ที่กำหนดค่าไว้

PutNull

WEAVE_ERROR PutNull(
  uint64_t tag
)

เข้ารหัสค่า Null TLV

รายละเอียด
พารามิเตอร์
[in] tag
ต้องเข้ารหัสแท็ก TLV ด้วยค่า หรือ AnonymousTag หากค่าควรเข้ารหัสโดยไม่มีแท็ก ควรสร้างค่าแท็กด้วยฟังก์ชันคำจำกัดความแท็กอย่างใดอย่างหนึ่ง ProfileTag(), ContextTag() หรือ CommonTag()
แสดงผลค่า
WEAVE_NO_ERROR
วิธีการนี้สำเร็จหรือไม่
WEAVE_ERROR_TLV_CONTAINER_OPEN
หากผู้เขียนคอนเทนเนอร์เปิดอยู่ในผู้เขียนปัจจุบันและยังไม่ได้ปิด
WEAVE_ERROR_INVALID_TLV_TAG
หากค่าแท็กที่ระบุไม่ถูกต้องหรือไม่เหมาะสมในบริบทที่มีการเขียนค่า
WEAVE_ERROR_BUFFER_TOO_SMALL
หากการเขียนค่านี้ จะทำให้เกินขีดจำกัดจำนวนไบต์สูงสุดที่ระบุเมื่อเริ่มต้นผู้เขียน
WEAVE_ERROR_NO_MEMORY
หากพยายามจัดสรรบัฟเฟอร์เอาต์พุตไม่สำเร็จเนื่องจากหน่วยความจำไม่พอ
other
ข้อผิดพลาด Weave หรือข้อผิดพลาดเฉพาะแพลตฟอร์มอื่นๆ ที่แสดงผลโดยฟังก์ชัน GetNewBuffer() หรือ FinalizeBuffer() ที่กำหนดค่าไว้

PutPreEncodedContainer

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

เข้ารหัสองค์ประกอบคอนเทนเนอร์ TLV จากชุดองค์ประกอบสมาชิกที่เข้ารหัสล่วงหน้า

เมธอด PutPreEncodedContainer() เข้ารหัสองค์ประกอบคอนเทนเนอร์ TLV ใหม่ (โครงสร้าง อาร์เรย์ หรือเส้นทาง) ที่มีชุดองค์ประกอบสมาชิกที่มาจากบัฟเฟอร์ที่เข้ารหัสล่วงหน้า บัฟเฟอร์อินพุตต้องมีองค์ประกอบ TLV ที่เข้ารหัสแบบเต็มรูปแบบอย่างน้อย 0 รายการ โดยมีแท็กที่สอดคล้องกับกฎที่เชื่อมโยงกับประเภทคอนเทนเนอร์ที่ระบุ (เช่น สมาชิกในโครงสร้างต้องมีแท็ก ในขณะที่สมาชิกของอาร์เรย์ต้องไม่มี)

เมธอดมีการเข้ารหัสองค์ประกอบทั้งหมดของคอนเทนเนอร์ในการเรียกครั้งเดียว เมื่อแสดงผล 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
ข้อผิดพลาด Weave หรือข้อผิดพลาดเฉพาะแพลตฟอร์มอื่นๆ ที่แสดงผลโดยฟังก์ชัน GetNewBuffer() หรือ FinalizeBuffer() ที่กำหนดค่าไว้

PutString

WEAVE_ERROR PutString(
  uint64_t tag,
  const char *buf
)

เข้ารหัสค่าสตริง UTF8 TLV

รายละเอียด
พารามิเตอร์
[in] tag
ต้องเข้ารหัสแท็ก TLV ด้วยค่า หรือ AnonymousTag หากค่าควรเข้ารหัสโดยไม่มีแท็ก ควรสร้างค่าแท็กด้วยฟังก์ชันคำจำกัดความแท็กอย่างใดอย่างหนึ่ง ProfileTag(), ContextTag() หรือ CommonTag()
[in] buf
ตัวชี้ไปยังสตริง UTF-8 ที่มีการยุติค่า Null ที่จะเข้ารหัส
แสดงผลค่า
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() ที่กำหนดค่าไว้

PutString

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

เข้ารหัสค่าสตริง UTF8 TLV

รายละเอียด
พารามิเตอร์
[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
ข้อผิดพลาด Weave หรือข้อผิดพลาดเฉพาะแพลตฟอร์มอื่นๆ ที่แสดงผลโดยฟังก์ชัน GetNewBuffer() หรือ FinalizeBuffer() ที่กำหนดค่าไว้

PutStringF

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

เข้ารหัสเอาต์พุตสตริงที่จัดรูปแบบตามรูปแบบในองค์ประกอบ TLV

PutStringF คือแอนะล็อกของ sprintf ซึ่งเอาต์พุตจะจัดเก็บในองค์ประกอบ TLV แทนที่จะเป็นบัฟเฟอร์อักขระ เมื่อมีฟังก์ชัน Printf แบบขยายได้ ฟังก์ชันดังกล่าวจะสามารถแสดงผลสตริงผลลัพธ์ในพื้นที่เก็บข้อมูลพื้นฐานที่ไม่ต่อเนื่อง การใช้งานรองรับการเพิ่มประสิทธิภาพ Printf ต่อไปนี้

แพลตฟอร์มนี้จะมี vcbprintf แบบ Callback ซึ่งให้ความสามารถในการเรียก Callback ที่กำหนดเองแทน Put Char ได้

แพลตฟอร์มนี้ให้ตัวแปร vsnprintf ที่เรียกว่า vsnprintf_ex ซึ่งทำงานเหมือนกับ vsnprintf ทุกประการยกเว้นว่าจะมีบทบัญญัติสำหรับการละเว้นอักขระ n ตัวแรกของเอาต์พุต

โปรดทราบว่าแม้ฟังก์ชันที่ใช้โค้ดเรียกกลับอาจเรียบง่ายที่สุดและใช้รหัสน้อยที่สุด แต่ฟังก์ชัน vsprintf_ex ที่หลากหลายจะใช้สแต็กน้อยกว่า

หากไม่มีทั้ง 2 อย่างข้างต้น แต่แพลตฟอร์มมี 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
ข้อผิดพลาด Weave หรือข้อผิดพลาดเฉพาะแพลตฟอร์มอื่นๆ ที่แสดงผลโดยฟังก์ชัน GetNewBuffer() หรือ FinalizeBuffer() ที่กำหนดค่าไว้

StartPutBytes

WEAVE_ERROR StartPutBytes(
  uint64_t tag,
  uint32_t totalLen
)

เข้ารหัสสตริงไบต์ TLV แบบหลายรายการ

ควรใช้ ContinuePutBytes กับ 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
ข้อผิดพลาด Weave หรือข้อผิดพลาดเฉพาะแพลตฟอร์มอื่นๆ ที่แสดงผลโดยฟังก์ชัน GetNewBuffer() หรือ FinalizeBuffer() ที่กำหนดค่าไว้

VPutStringF

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

เข้ารหัสเอาต์พุตสตริงที่จัดรูปแบบตามรูปแบบในองค์ประกอบ TLV

PutStringF คือแอนะล็อกของ sprintf ซึ่งเอาต์พุตจะจัดเก็บในองค์ประกอบ TLV แทนที่จะเป็นบัฟเฟอร์อักขระ เมื่อมีฟังก์ชัน Printf แบบขยายได้ ฟังก์ชันดังกล่าวจะสามารถแสดงผลสตริงผลลัพธ์ในพื้นที่เก็บข้อมูลพื้นฐานที่ไม่ต่อเนื่อง การใช้งานรองรับการเพิ่มประสิทธิภาพ Printf ต่อไปนี้

แพลตฟอร์มนี้จะมี vcbprintf แบบ Callback ซึ่งให้ความสามารถในการเรียก Callback ที่กำหนดเองแทน Put Char ได้

แพลตฟอร์มนี้ให้ตัวแปร vsnprintf ที่เรียกว่า vsnprintf_ex ซึ่งทำงานเหมือนกับ vsnprintf ทุกประการยกเว้นว่าจะมีบทบัญญัติสำหรับการละเว้นอักขระ n ตัวแรกของเอาต์พุต

โปรดทราบว่าแม้ฟังก์ชันที่ใช้โค้ดเรียกกลับอาจเรียบง่ายที่สุดและใช้รหัสน้อยที่สุด แต่ฟังก์ชัน vsprintf_ex ที่หลากหลายจะใช้สแต็กน้อยกว่า

หากไม่มีทั้ง 2 อย่างข้างต้น แต่แพลตฟอร์มมี 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
)

การใช้งานฟังก์ชัน TLVWriter FinalizeBuffer สำหรับการเขียนเชนของ PacketBuffers

ฟังก์ชัน FinalizePacketBuffer() จะทำการสรุปที่จําเป็นเมื่อใช้ TLVWriter เพื่อเขียนไปยังเชนของ PacketBuffers ฟังก์ชันนี้ออกแบบมาให้ใช้ร่วมกับฟังก์ชัน GetNewPacketBuffer()

ดูคำจำกัดความประเภท FinalizeBufferFunct สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ API ของฟังก์ชัน FinalizePacketBuffer()

GetNewBuffer_Malloced

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

การใช้งานฟังก์ชัน GetNewBuffer TLVWriter สำหรับการเขียนไปยังบัฟเฟอร์แบบไดนามิก

ฟังก์ชัน GetNewBuffer_Malloced() จะเพิ่มพื้นที่เอาต์พุตใหม่ให้กับ TLVWriter โดยเพิ่มขนาดบัฟเฟอร์แบบไดนามิกที่สำคัญเป็น 2 เท่าตามความจำเป็นในการจัดเก็บการเข้ารหัส ฟังก์ชันนี้ออกแบบมาให้กำหนดให้กับตัวชี้ฟังก์ชัน GetNewBuffer ของ TLVWriter

ดูคำจำกัดความประเภท GetNewBufferFunct สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ API ของฟังก์ชัน GetNewBuffer_Malloced()

GetNewPacketBuffer

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

การใช้ฟังก์ชัน GetNewBuffer ของ TLVWriter สำหรับการเขียนในเชนของ PacketBuffers

ฟังก์ชัน GetNewPacketBuffer() ใส่พื้นที่เอาต์พุตใหม่ให้กับ TLVWriter โดยจัดสรรเชนของ PacketBuffers อย่างน้อย 1 รายการตามความจำเป็นเพื่อจัดเก็บการเข้ารหัส ฟังก์ชันนี้ออกแบบมาให้กำหนดให้กับตัวชี้ฟังก์ชัน GetNewBuffer ของ TLVWriter

โปรดทราบว่าเมื่อใช้ GetNewPacketBuffer กับ TLVWriter คุณควรใช้ฟังก์ชัน FinalizePacketBuffer() ที่เกี่ยวข้อง (หรือเทียบเท่า) เพื่อสร้างบัฟเฟอร์เชนให้เสร็จสมบูรณ์ด้วย

ดูคำจำกัดความประเภท GetNewBufferFunct สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ API ของฟังก์ชัน GetNewPacketBuffer()

ฟังก์ชันที่มีการป้องกัน

IsCloseContainerReserved

bool IsCloseContainerReserved(
  void
) const 

กำหนดว่าคอนเทนเนอร์ควรสงวนพื้นที่สำหรับสัญลักษณ์ CloseContainer เมื่อเริ่มต้น / เปิดคอนเทนเนอร์หรือไม่

IsContainerOpen

bool IsContainerOpen(
  void
) const 

SetCloseContainerReserved

void SetCloseContainerReserved(
  bool aCloseContainerReserved
)

กำหนดว่าคอนเทนเนอร์ควรสงวนพื้นที่สำหรับสัญลักษณ์ CloseContainer ที่จุดเริ่มต้น / เปิดคอนเทนเนอร์หรือไม่

SetContainerOpen

void SetContainerOpen(
  bool aContainerOpen
)

WriteData

WEAVE_ERROR WriteData(
  const uint8_t *p,
  uint32_t len
)

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
)