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

nl::Weave::TLV::TLVWriter

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

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

สรุป

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

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

การสืบทอด

คลาสย่อยที่เป็นที่รู้จักโดยตรง: nl::Weave::TLV::CircularTLVWriter

ประเภทที่ป้องกัน

@72{
  kEndOfContainerMarkerSize = 1
}
enum

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

FinalizeBufferFunct)(TLVWriter &writer, uintptr_t bufHandle, uint8_t *bufStart, uint32_t bufLen) ข้อผิดพลาด(*
ฟังก์ชันที่ใช้เพื่อสรุปเอาต์พุตจากออบเจ็กต์ TLVWriter
GetNewBufferFunct)(TLVWriter &writer, uintptr_t &bufHandle, uint8_t *&bufStart, uint32_t &bufLen) ข้อผิดพลาด(*
ฟังก์ชันที่ให้พื้นที่บัฟเฟอร์เอาต์พุตใหม่ไปยัง 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)
การใช้ฟังก์ชัน GetTBuffer ของ TLVWriter สําหรับการเขียนไปยังบัฟเฟอร์แบบไดนามิก
GetNewPacketBuffer(TLVWriter & writer, uintptr_t & bufHandle, uint8_t *& bufStart, uint32_t & bufLen)
การใช้ฟังก์ชัน GetTBuffer ของ 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

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

สุดท้าย BufferFunct

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

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

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

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

รับฟีดบัฟเฟอร์ใหม่

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

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

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

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

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

ข้อมูลแอป

void * AppData

ช่องตัวชี้ที่สามารถใช้สําหรับข้อมูลเฉพาะแอปพลิเคชัน

ขั้นตอนสุดท้าย

FinalizeBufferFunct FinalizeBuffer

ตัวชี้ไปยังฟังก์ชันที่จะเรียกใช้เมื่อ TLVWriter ได้รับการสรุปผล

ออบเจ็กต์ TLVWriter จะเรียกใช้ฟังก์ชัน FinalizeBuffer เมื่อมีการเรียกเมธอด Finalize() แอปพลิเคชันจะตั้งค่าตัวชี้ฟังก์ชันได้ทุกเมื่อก่อนเรียกใช้ Finalize() โดยค่าเริ่มต้น ตัวชี้จะตั้งค่าเป็น NULL ซึ่งจะทําให้เมธอด Finalize() ไม่สนใจการเรียกใช้ฟังก์ชันนั้น

ดูคําจํากัดความประเภท FinalizeBufferFunct เพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับการติดตั้งใช้งานฟังก์ชัน FinalizeBuffer

ดาวน์โหลด GetNewBuffer

GetNewBufferFunct GetNewBuffer

ตัวชี้ไปยังฟังก์ชันที่จะจัดสรรพื้นที่บัฟเฟอร์เอาต์พุตใหม่ให้กับ TLVWriter

ออบเจ็กต์ TLVWriter จะเรียกใช้ฟังก์ชัน GetNewBuffer ทุกครั้งที่มีการพยายามเขียนข้อมูลที่เกินขนาดบัฟเฟอร์ของเอาต์พุตปัจจุบัน หากตั้งค่าเป็น NULL (ค่าเริ่มต้น) ผู้เขียนจะส่งคืน WEhave_ERROR_NO_MEMORY หากข้อมูลเอาต์พุตเกินบัฟเฟอร์ปัจจุบัน

แอปพลิเคชันอาจได้รับการตั้งค่า GetNewBuffer ได้ทุกเมื่อ แต่โดยทั่วไปจะมีการตั้งค่าให้เมื่อผู้เขียนเริ่มต้น

ดูคําจํากัดความประเภท GetNewBufferFunct เพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับการติดตั้งใช้งานฟังก์ชัน GetNewBuffer

รหัสโปรไฟล์โดยนัย

uint32_t ImplicitProfileId

รหัสโปรไฟล์ของแท็กที่ควรเข้ารหัสในรูปแบบโดยนัย

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

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

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

แฮนเดิล mBuf

uintptr_t mBufHandle

mBufStart

uint8_t * mBufStart

ประเภทคอนเทนเนอร์

TLVType mContainerType

mLenWritten

uint32_t mLenWritten

ยาวสุด

uint32_t mMaxLen

mRemainingLen

uint32_t mRemainingLen

mmPoint

uint8_t * mWritePoint

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

ปิดคอนเทนเนอร์

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() ที่กําหนดค่าไว้

พัตตาไบท์

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() ที่กําหนดค่าไว้

คัดลอกคอนเทนเนอร์

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() ที่เชื่อมโยงกับออบเจ็กต์ผู้อ่าน

คัดลอกคอนเทนเนอร์

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() ที่เชื่อมโยงกับออบเจ็กต์ผู้อ่าน

คัดลอกคอนเทนเนอร์

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() ที่เชื่อมโยงกับออบเจ็กต์ผู้อ่าน

องค์ประกอบที่คัดลอก

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() ที่เชื่อมโยงกับออบเจ็กต์ผู้อ่าน

องค์ประกอบที่คัดลอก

WEAVE_ERROR CopyElement(
  uint64_t tag,
  TLVReader & reader
)

ที่เก็บขนาดใหญ่

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() ที่กําหนดค่าไว้

ประเภท GetContainer

TLVType GetContainerType(
  void
) const 

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

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

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

ความสูงในการเขียน

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 เพื่อจัดสรรบัฟเฟอร์ใหม่ตามที่จําเป็นสําหรับการจัดเก็บข้อมูลที่เขียน หากเป็น False การเขียนจะล้มเหลวด้วย WEhave_ERROR_BUFFER_TOO_small หากข้อมูลที่เขียนเกินพื้นที่ที่อยู่ในบัฟเฟอร์เอาต์พุตเริ่มต้น

InitMalloced

void InitMalloced(
  uint8_t *& outBuf,
  uint32_t initialBufSize,
  uint32_t maxLen
)

เริ่มต้นออบเจ็กต์ TLVWriter เพื่อเขียนไปยังบัฟเฟอร์แบบไดนามิก

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

คอนเทนเนอร์เปิด

WEAVE_ERROR OpenContainer(
  uint64_t tag,
  TLVType containerType,
  TLVWriter & containerWriter
)

เริ่มต้นออบเจ็กต์ TLVWriter ใหม่เพื่อเขียนสมาชิกขององค์ประกอบคอนเทนเนอร์ TLV

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

ขณะที่ผู้เขียนคอนเทนเนอร์เปิดอยู่ แอปพลิเคชันต้องไม่เรียกใช้หรือเปลี่ยนสถานะของผู้เขียนหลัก

ผู้เขียนคอนเทนเนอร์จะนําคุณสมบัติการกําหนดค่าต่างๆ มาจากผู้เขียนระดับบนสุด ได้แก่

  • รหัสโปรไฟล์โดยนัย (ImplicitProfileId)
  • ตัวระบุข้อมูลแอปพลิเคชัน (AppData)
  • ตัวชี้ฟังก์ชัน GetNewBuffer และ FinalizeBuffer

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

ใส่

WEAVE_ERROR Put(
  uint64_t tag,
  int8_t v
)

เข้ารหัสค่าที่เป็นจํานวนเต็มของ TLV

ฟังก์ชันการทํางานนี้เน้นภาระงานมากเกินไปเพื่อมอบความสะดวกสบาย ซึ่งแตกต่างจากฟังก์ชันด้านบนเฉพาะอาร์กิวเมนต์ที่ยอมรับ

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

ใส่

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

เข้ารหัสค่าที่เป็นจํานวนเต็มของ TLV

ฟังก์ชันการทํางานนี้เน้นภาระงานมากเกินไปเพื่อมอบความสะดวกสบาย ซึ่งแตกต่างจากฟังก์ชันด้านบนเฉพาะอาร์กิวเมนต์ที่ยอมรับ

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

ใส่

WEAVE_ERROR Put(
  uint64_t tag,
  int16_t v
)

ใส่

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

ใส่

WEAVE_ERROR Put(
  uint64_t tag,
  int32_t v
)

ใส่

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

ใส่

WEAVE_ERROR Put(
  uint64_t tag,
  int64_t v
)

ใส่

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

ใส่

WEAVE_ERROR Put(
  uint64_t tag,
  uint8_t v
)

เข้ารหัสค่าจํานวนเต็มที่ไม่มีเครื่องหมาย TLV

ฟังก์ชันการทํางานนี้เน้นภาระงานมากเกินไปเพื่อมอบความสะดวกสบาย ซึ่งแตกต่างจากฟังก์ชันด้านบนเฉพาะอาร์กิวเมนต์ที่ยอมรับ

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

ใส่

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

เข้ารหัสค่าจํานวนเต็มที่ไม่มีเครื่องหมาย TLV

ฟังก์ชันการทํางานนี้เน้นภาระงานมากเกินไปเพื่อมอบความสะดวกสบาย ซึ่งแตกต่างจากฟังก์ชันด้านบนเฉพาะอาร์กิวเมนต์ที่ยอมรับ

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

ปูนบูลีน

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() ที่กําหนดค่าไว้

ปูนนัล

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() ที่กําหนดค่าไว้

ใส่ PrePreEncodeContainer

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

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

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

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

ใส่สตริง

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() ที่กําหนดค่าไว้

ใส่สตริง

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() ที่กําหนดค่าไว้

สตริง ตัวอย่างเช่น

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

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

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

แพลตฟอร์มมี vcbprintf ตามโค้ดเรียกกลับที่ช่วยให้สามารถเรียกโค้ดเรียกกลับที่กําหนดเองแทนข้อความนี่คือ

แพลตฟอร์มนี้มีตัวแปร vsnprintf ชื่อว่า vsnprintf_ex ซึ่งมีลักษณะการทํางานเหมือนกับnnprintf ทุกประการ ยกเว้นในกรณีที่มีการละเว้นอักขระ n ตัวแรกของเอาต์พุต

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

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

รายละเอียด
พารามิเตอร์
[in] tag
แท็ก TLV ควรเข้ารหัสด้วยค่า หรือ AnonymousTag หากควรเข้ารหัสค่าโดยไม่มีแท็ก ควรสร้างค่าแท็กโดยใช้ฟังก์ชันการกําหนดแท็ก ProfileTag(), ContextTag() หรือ CommonTag()
[in] fmt
สตริงรูปแบบที่ใช้ในการจัดรูปแบบรายการอาร์กิวเมนต์ เป็นไปตามไวยากรณ์และกฎเดียวกันกับสตริงรูปแบบสําหรับกลุ่มฟังก์ชัน printf
[in] ...
รายการอาร์กิวเมนต์ที่ต้องจัดรูปแบบในค่าเอาต์พุตตาม fmt
แสดงผลค่า
WEAVE_NO_ERROR
หากวิธีการประสบความสําเร็จ
other
หากการเรียกที่สําคัญไปยังเมธอด TLVWriter WriteElementHead หรือ GetNewBuffer ไม่สําเร็จ ระบบจะส่งต่อข้อผิดพลาดให้กับสแต็กการเรียกใช้ทันที

เริ่มที่คอนเทนเนอร์

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() ที่กําหนดค่าไว้

แบบสายรัด

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

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

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

แพลตฟอร์มมี vcbprintf ตามโค้ดเรียกกลับที่ช่วยให้สามารถเรียกโค้ดเรียกกลับที่กําหนดเองแทนข้อความนี่คือ

แพลตฟอร์มนี้มีตัวแปร vsnprintf ชื่อว่า vsnprintf_ex ซึ่งมีลักษณะการทํางานเหมือนกับnnprintf ทุกประการ ยกเว้นในกรณีที่มีการละเว้นอักขระ n ตัวแรกของเอาต์พุต

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

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

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

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

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

GetNewPacketBuffer

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

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

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

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

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

ฟังก์ชันที่ได้รับการคุ้มครอง

IsContainContainer ที่จองไว้

bool IsCloseContainerReserved(
  void
) const 

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

IsContainerOpen

bool IsContainerOpen(
  void
) const 

ปิดการตั้งค่าคอนเทนเนอร์

void SetCloseContainerReserved(
  bool aCloseContainerReserved
)

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

SetContainerOpen

void SetContainerOpen(
  bool aContainerOpen
)

เขียนข้อมูล

WEAVE_ERROR WriteData(
  const uint8_t *p,
  uint32_t len
)

เขียนองค์ประกอบ

WEAVE_ERROR WriteElementHead(
  TLVElementType elemType,
  uint64_t tag,
  uint64_t lenOrVal
)

เขียนองค์ประกอบข้อมูล

WEAVE_ERROR WriteElementWithData(
  TLVType type,
  uint64_t tag,
  const uint8_t *data,
  uint32_t dataLen
)