nl::Weave::TLV::TLVWriter

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

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

สรุป

TLVWriter ใช้โปรแกรมเปลี่ยนไฟล์แบบสตรีมแบบส่งต่อเท่านั้นสำหรับข้อมูล Weave TLV แอปพลิเคชันจะเขียนข้อมูลเป็นการเข้ารหัสด้วยการเรียกใช้เมธอด 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_(*
ฟังก์ชันที่ใช้ในการสรุปเอาต์พุตจากออบเจ็กต์ TLVWriter
GetNewBufferFunct)(TLVWriter &writer, uintptr_t &bufHandle, uint8_t *&bufStart, uint32_t &bufLen) ข้อผิดพลาด WEAVE_(*
ฟังก์ชันที่ให้พื้นที่บัฟเฟอร์เอาต์พุตใหม่แก่ TLVWriter

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

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

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

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

ฟังก์ชันสาธารณะ

CloseContainer(TLVWriter & containerWriter)
เขียนคอนเทนเนอร์ TLV ให้เสร็จสิ้นหลังจากเรียก OpenContainer()
ContinuePutBytes(const uint8_t *buf, uint32_t len)
เข้ารหัสค่าสตริงไบต์ TLV
CopyContainer(TLVReader & container)
คัดลอกองค์ประกอบคอนเทนเนอร์ TLV จากออบเจ็กต์ TLVReader
CopyContainer(uint64_t tag, TLVReader & container)
เข้ารหัสองค์ประกอบคอนเทนเนอร์ TLV จากชุดองค์ประกอบสมาชิกที่เข้ารหัสล่วงหน้า
CopyContainer(uint64_t tag, const uint8_t *encodedContainer, uint16_t encodedContainerLen)
เข้ารหัสองค์ประกอบคอนเทนเนอร์ TLV ที่มีองค์ประกอบสมาชิกจากคอนเทนเนอร์ที่เข้ารหัสไว้ล่วงหน้า
CopyElement(TLVReader & reader)
คัดลอกองค์ประกอบ TLV จากออบเจ็กต์ผู้อ่านไปยังผู้เขียน
CopyElement(uint64_t tag, TLVReader & reader)
EndContainer(TLVType outerContainerType)
เข้ารหัสองค์ประกอบคอนเทนเนอร์ TLV ให้เสร็จสมบูรณ์
Finalize(void)
เขียนการเข้ารหัส TLV ให้เสร็จสิ้น
GetContainerType(void) const
แสดงผลประเภทของคอนเทนเนอร์ที่ TLVWriter กำลังเขียนอยู่
GetLengthWritten(void)
uint32_t
แสดงผลจำนวนไบต์ที่เขียนแล้วทั้งหมดตั้งแต่เริ่มเขียน
Init(uint8_t *buf, uint32_t maxLen)
void
เริ่มต้นออบเจ็กต์ TLVWriter เพื่อเขียนลงในบัฟเฟอร์เอาต์พุตเดียว
Init(PacketBuffer *buf, uint32_t maxLen)
void
เริ่มต้นออบเจ็กต์ TLVWriter เพื่อเขียนลงใน PacketBuffer รายการเดียว
Init(PacketBuffer *buf, uint32_t maxLen, bool allowDiscontiguousBuffers)
void
เริ่มต้นออบเจ็กต์ TLVWriter เพื่อเขียนลงใน PacketBuffers อย่างน้อย 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 จะมีจำนวนไบต์ของพื้นที่ที่ไม่ได้ใช้ในบัฟเฟอร์ปัจจุบัน เมื่อออก คาดว่า 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 จากออบเจ็กต์ผู้อ่านไปยังผู้เขียน

เมธอด CopyElement() จะเข้ารหัสองค์ประกอบ TLV ใหม่ โดยนำประเภท แท็ก และค่ามาจากออบเจ็กต์ TLVReader เมื่อมีการเรียกเมธอด ออบเจ็กต์ผู้อ่านที่ให้มาจะต้องอยู่ในองค์ประกอบ TLV ต้นทาง องค์ประกอบที่เข้ารหัสใหม่จะมีประเภท แท็ก และเนื้อหาเหมือนกับคอนเทนเนอร์อินพุต หากองค์ประกอบที่ระบุเป็นคอนเทนเนอร์ TLV (โครงสร้าง อาร์เรย์ หรือเส้นทาง) ระบบจะคัดลอกเนื้อหาทั้งหมดของคอนเทนเนอร์

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

CopyElement

WEAVE_ERROR CopyElement(
  uint64_t tag,
  TLVReader & reader
)

EndContainer

WEAVE_ERROR EndContainer(
  TLVType outerContainerType
)

เข้ารหัสองค์ประกอบคอนเทนเนอร์ TLV ให้เสร็จสมบูรณ์

เมธอด EndContainer() จะเข้ารหัสองค์ประกอบคอนเทนเนอร์ TLV และคืนค่าสถานะของออบเจ็กต์ TLVWrite หลังจากการเรียกใช้ StartContainer() ก่อนหน้านี้แล้ว สำหรับการเรียกแอปพลิเคชัน StartContainer() ทุกครั้งจะต้องเรียกใช้ EndContainer() ที่สอดคล้องกัน โดยส่งค่า TLVType ที่แสดงผลโดยการเรียก StartContainer() เมื่อ EndContainer() แสดงผล ออบเจ็กต์ผู้เขียนสามารถใช้เขียนองค์ประกอบ TLV เพิ่มเติมที่อยู่ต่อจากองค์ประกอบคอนเทนเนอร์

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

สรุป

WEAVE_ERROR Finalize(
  void
)

เขียนการเข้ารหัส TLV ให้เสร็จสิ้น

เมธอด Finalize() จะเขียนการเข้ารหัส TLV ลงในบัฟเฟอร์เอาต์พุตเบื้องหลังให้เสร็จเรียบร้อย แอปพลิเคชันต้องเรียกใช้เมธอดนี้ก่อนที่จะใช้เนื้อหาของบัฟเฟอร์ จะเรียก Finalize() ได้เฉพาะในกรณีที่ไม่มีผู้เขียนคอนเทนเนอร์ที่เปิดสำหรับผู้เขียนปัจจุบัน (ดู OpenContainer())

รายละเอียด
ผลลัพธ์
WEAVE_NO_ERROR
หากการเข้ารหัสเสร็จสมบูรณ์
WEAVE_ERROR_TLV_CONTAINER_OPEN
หากมีการเปิดการเขียนคอนเทนเนอร์ในผู้เขียนปัจจุบันและยังไม่ได้ปิด
other
ข้อผิดพลาดอื่นๆ ของ Weave หรือเฉพาะแพลตฟอร์มซึ่งแสดงผลโดยฟังก์ชัน FinalizeBuffer() ที่กำหนดค่าไว้

GetContainerType

TLVType GetContainerType(
  void
) const 

แสดงผลประเภทของคอนเทนเนอร์ที่ TLVWriter กำลังเขียนอยู่

เมธอด GetContainerType() จะแสดงประเภทของคอนเทนเนอร์ TLV ที่ TLVWriter กำลังเขียนอยู่ หาก TLVWriter ไม่ได้เขียนองค์ประกอบภายในคอนเทนเนอร์ (เช่น หากเขียนที่ระดับด้านนอกของการเข้ารหัส) เมธอดจะแสดง kTLVType_NotSpecified

รายละเอียด
การคืนสินค้า
TLVType ของคอนเทนเนอร์ปัจจุบัน หรือ kTLVType_NotSpecified หาก TLVWriter ไม่ได้เขียนองค์ประกอบภายในคอนเทนเนอร์

GetLengthWritten

uint32_t GetLengthWritten(
  void
)

แสดงผลจำนวนไบต์ที่เขียนแล้วทั้งหมดตั้งแต่เริ่มเขียน

รายละเอียด
การคืนสินค้า
จำนวนไบต์ทั้งหมดที่เขียนตั้งแต่เริ่มเขียน

Init

void Init(
  uint8_t *buf,
  uint32_t maxLen
)

เริ่มต้นออบเจ็กต์ TLVWriter เพื่อเขียนลงในบัฟเฟอร์เอาต์พุตเดียว

รายละเอียด
พารามิเตอร์
[in] buf
ตัวชี้ไปยังบัฟเฟอร์ที่ควรจะเขียน TLV
[in] maxLen
จำนวนไบต์สูงสุดที่ควรเขียนลงในบัฟเฟอร์เอาต์พุต

Init

void Init(
  PacketBuffer *buf,
  uint32_t maxLen
)

เริ่มต้นออบเจ็กต์ TLVWriter เพื่อเขียนลงใน PacketBuffer รายการเดียว

การเขียนจะเริ่มขึ้นทันทีหลังจากไบต์สุดท้ายของข้อมูลที่มีอยู่ในบัฟเฟอร์ที่ให้มา

รายละเอียด
พารามิเตอร์
[in] buf
ตัวชี้ไปยัง PacketBuffer ที่ควรมีการเขียน TLV
[in] maxLen
จำนวนไบต์สูงสุดที่ควรเขียนลงในบัฟเฟอร์เอาต์พุต

Init

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 ที่มีการสิ้นสุดเป็นค่าว่างที่จะเข้ารหัส
ผลลัพธ์
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 ต่อไปนี้

แพลตฟอร์มจะมี vcbprintf แบบ Callback ที่ให้ความสามารถในการเรียก Callback ที่กําหนดเองแทน Putchar

แพลตฟอร์มมี vsnprintf ที่เป็นตัวแปรชื่อ vsnprintf_ex ซึ่งมีลักษณะการทำงานเหมือน vsnprintf ทุกประการ เพียงแต่มีการจัดสรรการละเว้นอักขระ n ตัวแรกของเอาต์พุต

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

หากไม่มีทั้ง 2 ตัวเลือกข้างต้น แต่แพลตฟอร์มมี malloc ฟังก์ชันจะจัดสรรบัฟเฟอร์ชั่วคราวเพื่อเก็บเอาต์พุต เมื่อแพลตฟอร์มไม่ได้เพิ่มประสิทธิภาพให้กับตระกูลพิมพ์หรือ 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

รายละเอียด
พารามิเตอร์
[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 ต่อไปนี้

แพลตฟอร์มจะมี vcbprintf แบบ Callback ที่ให้ความสามารถในการเรียก Callback ที่กําหนดเองแทน Putchar

แพลตฟอร์มมี vsnprintf ที่เป็นตัวแปรชื่อ vsnprintf_ex ซึ่งมีลักษณะการทำงานเหมือน vsnprintf ทุกประการ เพียงแต่มีการจัดสรรการละเว้นอักขระ n ตัวแรกของเอาต์พุต

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

หากไม่มีทั้ง 2 ตัวเลือกข้างต้น แต่แพลตฟอร์มมี malloc ฟังก์ชันจะจัดสรรบัฟเฟอร์ชั่วคราวเพื่อเก็บเอาต์พุต เมื่อแพลตฟอร์มไม่ได้เพิ่มประสิทธิภาพให้กับตระกูลพิมพ์หรือ 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()

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

GetNewBuffer_Malloced

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

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

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

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

GetNewPacketBuffer

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

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

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

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

ดูข้อมูลเพิ่มเติมเกี่ยวกับ API ของฟังก์ชัน GetNewPacketBuffer() ได้ในคำจำกัดความของประเภท 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
)