nl::Weave::TLV::TLVReader

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

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

สรุป

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

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

เมื่อเครื่องอ่านสิ้นสุดการเข้ารหัส TLV หรือองค์ประกอบสุดท้ายในคอนเทนเนอร์ เครื่องจะส่งสัญญาณให้แอปพลิเคชันโดยแสดงข้อผิดพลาด WEAVE_END_OF_TLV จากเมธอด Next() เครื่องอ่านจะยังคงแสดงผล WEAVE_END_OF_TLV จนกว่าจะเริ่มต้นอีกครั้ง หรือมีการออกจากคอนเทนเนอร์ปัจจุบัน (ผ่าน CloseContainer() / ExitContainer())

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

การสืบทอด

คลาสย่อยที่รู้จักโดยตรง:
  nl::Weave::Profiles::DataManagement_Current::CircularEventReader
  nl::Weave::TLV::CircularTLVReader

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

GetNextBufferFunct)(TLVReader &reader, uintptr_t &bufHandle, const uint8_t *&bufStart, uint32_t &bufLen) ข้อผิดพลาด WEAVE_(*
ฟังก์ชันที่ใช้เรียกข้อมูล TLV เพิ่มเติมที่จะแยกวิเคราะห์ได้

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

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

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

mBufEnd
const uint8_t *
mBufHandle
uintptr_t
mContainerType
mControlByte
uint16_t
mElemLenOrVal
uint64_t
mElemTag
uint64_t
mLenRead
uint32_t
mMaxLen
uint32_t
mReadPoint
const uint8_t *

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

CloseContainer(TLVReader & containerReader)
อ่านคอนเทนเนอร์ TLV ให้เสร็จสมบูรณ์หลังจากการเรียก OpenContainer()
DupBytes(uint8_t *& buf, uint32_t & dataLen)
จัดสรรและแสดงผลบัฟเฟอร์ที่มีค่าของไบต์ปัจจุบันหรือสตริง UTF8
DupString(char *& buf)
จัดสรรและแสดงผลบัฟเฟอร์ที่มีค่าสิ้นสุดของไบต์ปัจจุบันหรือสตริง UTF8
EnterContainer(TLVType & outerContainerType)
เตรียมออบเจ็กต์ TLVReader สำหรับการอ่านสมาชิกขององค์ประกอบคอนเทนเนอร์ TLV
ExitContainer(TLVType outerContainerType)
อ่านค่าคอนเทนเนอร์ TLV ให้เสร็จสมบูรณ์ และเตรียมออบเจ็กต์ TLVReader เพื่ออ่านองค์ประกอบต่อจากคอนเทนเนอร์
Get(bool & v)
รับค่าขององค์ประกอบปัจจุบันเป็นประเภทบูลีน
Get(int8_t & v)
รับค่าขององค์ประกอบปัจจุบันเป็นจำนวนเต็มแบบมีเครื่องหมาย 8 บิต
Get(int16_t & v)
รับค่าขององค์ประกอบปัจจุบันเป็นจำนวนเต็มที่มีเครื่องหมาย 16 บิต
Get(int32_t & v)
รับค่าขององค์ประกอบปัจจุบันเป็นจำนวนเต็มแบบมีเครื่องหมาย 32 บิต
Get(int64_t & v)
รับค่าขององค์ประกอบปัจจุบันเป็นจำนวนเต็มแบบมีเครื่องหมาย 64 บิต
Get(uint8_t & v)
รับค่าขององค์ประกอบปัจจุบันเป็นจำนวนเต็มที่ไม่มีเครื่องหมาย 8 บิต
Get(uint16_t & v)
รับค่าขององค์ประกอบปัจจุบันเป็นจำนวนเต็ม 16 บิตที่ไม่มีเครื่องหมาย
Get(uint32_t & v)
รับค่าขององค์ประกอบปัจจุบันเป็นจำนวนเต็ม 32 บิตที่ไม่มีเครื่องหมาย
Get(uint64_t & v)
รับค่าขององค์ประกอบปัจจุบันเป็นจำนวนเต็มที่ไม่มีเครื่องหมาย 64 บิต
Get(float & v)
Get(double & v)
รับค่าขององค์ประกอบปัจจุบันเป็นจำนวนจุดลอยตัวความเที่ยงตรงสองเท่า
GetBufHandle(void) const
uintptr_t
GetBytes(uint8_t *buf, uint32_t bufSize)
รับค่าของไบต์ปัจจุบันหรือองค์ประกอบสตริง UTF8
GetContainerType(void) const
แสดงผลประเภทของคอนเทนเนอร์ที่ TLVReader กำลังอ่านอยู่
GetControlByte(void) const
uint16_t
แสดงผลไบต์ควบคุมที่เชื่อมโยงกับองค์ประกอบ TLV ปัจจุบัน
GetDataPtr(const uint8_t *& data)
รับตัวชี้ไปยังไบต์ที่เข้ารหัสเริ่มต้นขององค์ประกอบสตริง TLV หรือ UTF8
GetLength(void) const
uint32_t
แสดงผลความยาวของข้อมูลที่เชื่อมโยงกับองค์ประกอบ TLV ปัจจุบัน
GetLengthRead(void) const
uint32_t
แสดงผลจำนวนไบต์ทั้งหมดที่อ่านตั้งแต่เริ่มการอ่าน
GetReadPoint(void) const
const uint8_t *
รับจุดในบัฟเฟอร์อินพุตเบื้องหลังซึ่งตรงกับตำแหน่งปัจจุบันของผู้อ่าน
GetRemainingLength(void) const
uint32_t
แสดงผลจำนวนไบต์ทั้งหมดที่อ่านได้จนกว่าจะถึงความยาวการอ่านสูงสุด
GetString(char *buf, uint32_t bufSize)
รับค่าของไบต์ปัจจุบันหรือองค์ประกอบสตริง UTF8 เป็นสตริงที่สิ้นสุดด้วยค่าว่าง
GetTag(void) const
uint64_t
แสดงผลแท็กที่เชื่อมโยงกับองค์ประกอบ TLV ปัจจุบัน
GetType(void) const
แสดงผลประเภทองค์ประกอบ TLV ปัจจุบัน
Init(const TLVReader & aReader)
void
เริ่มต้นออบเจ็กต์ TLVReader จากออบเจ็กต์ TLVReader อื่น
Init(const uint8_t *data, uint32_t dataLen)
void
เริ่มต้นออบเจ็กต์ TLVReader ให้อ่านจากบัฟเฟอร์อินพุตเดียว
Init(PacketBuffer *buf, uint32_t maxLen)
void
เริ่มต้นออบเจ็กต์ TLVReader เพื่ออ่านจาก PacketBuffer รายการเดียว
Init(PacketBuffer *buf, uint32_t maxLen, bool allowDiscontiguousBuffers)
void
เริ่มต้นออบเจ็กต์ TLVReader เพื่ออ่านจาก PacketBuffers อย่างน้อย 1 รายการ
Next(void)
เลื่อนออบเจ็กต์ TLVReader ไปยังองค์ประกอบ TLV ถัดไปที่จะอ่าน
Next(TLVType expectedType, uint64_t expectedTag)
เลื่อนออบเจ็กต์ TLVReader ไปยังองค์ประกอบ TLV ถัดไปที่จะอ่าน เพื่อยืนยันประเภทและแท็กขององค์ประกอบใหม่
OpenContainer(TLVReader & containerReader)
เริ่มต้นออบเจ็กต์ TLVReader ใหม่สำหรับการอ่านสมาชิกขององค์ประกอบคอนเทนเนอร์ TLV
Skip(void)
เลื่อนออบเจ็กต์ TLVReader ไปข้างหน้าต่อจากองค์ประกอบ TLV ปัจจุบัน
VerifyEndOfContainer(void)
ยืนยันว่าออบเจ็กต์ TVLReader อยู่ที่ส่วนท้ายของคอนเทนเนอร์ TLV

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

ClearElementState(void)
void
ล้างสถานะของ TLVReader
ElementType(void) const
TLVElementType
นี่เป็นเมธอดส่วนตัวที่แสดง TLVElementType จาก mControlByte
EnsureData(WEAVE_ERROR noDataErr)
GetElementHeadLength(uint8_t & elemHeadBytes) const
วิธีนี้เป็นวิธีส่วนตัวที่ใช้ในการคำนวณความยาวของส่วนหัวองค์ประกอบ TLV
IsContainerOpen(void) const
bool
ReadData(uint8_t *buf, uint32_t len)
ReadElement(void)
ReadTag(TLVTagControl tagControl, const uint8_t *& p)
uint64_t
SetContainerOpen(bool aContainerOpen)
void
SkipData(void)
ข้ามข้อมูลใดๆ ที่มีอยู่ใน TLV ปัจจุบันด้วยการอ่านโดยไม่มีบัฟเฟอร์ปลายทาง
SkipToEndOfContainer(void)
VerifyElement(void)

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

FailGetNextBuffer(TLVReader & reader, uintptr_t & bufHandle, const uint8_t *& bufStart, uint32_t & bufLen)
GetNextPacketBuffer(TLVReader & reader, uintptr_t & bufHandle, const uint8_t *& bufStart, uint32_t & bufLen)

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

GetNextBufferFunct

WEAVE_ERROR(* GetNextBufferFunct)(TLVReader &reader, uintptr_t &bufHandle, const uint8_t *&bufStart, uint32_t &bufLen)

ฟังก์ชันที่ใช้เรียกข้อมูล TLV เพิ่มเติมที่จะแยกวิเคราะห์ได้

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

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

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

AppData

void * AppData

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

GetNextBuffer

GetNextBufferFunct GetNextBuffer

ตัวชี้ไปยังฟังก์ชันที่จะสร้างข้อมูลอินพุตสำหรับออบเจ็กต์ TLVReader

หากตั้งค่าเป็น NULL (ค่าเริ่มต้น) ผู้อ่านจะถือว่าไม่มีอินพุตเพิ่มเติม

แอปพลิเคชันสามารถตั้งค่า GetNextBuffer ได้ทุกเมื่อ แต่โดยทั่วไปจะตั้งค่าไว้เมื่อเครื่องอ่านเริ่มทำงาน

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

ImplicitProfileId

uint32_t ImplicitProfileId

รหัสโปรไฟล์ที่จะใช้สำหรับแท็กโปรไฟล์ที่เข้ารหัสในรูปแบบโดยนัย

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

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

หากพบแท็กที่เข้ารหัสแบบโดยนัยในขณะที่ตั้งค่า ImplicitProfileId เป็น kProfileIdNotSpecified ผู้อ่านจะส่งกลับข้อผิดพลาด WEAVE_ERROR_UNKNOWN_IMPLICIT_TLV_TAG

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

mBufEnd

const uint8_t * mBufEnd

mBufHandle

uintptr_t mBufHandle

mContainerType

TLVType mContainerType

mControlByte

uint16_t mControlByte

mElemLenOrVal

uint64_t mElemLenOrVal

mElemTag

uint64_t mElemTag

mLenRead

uint32_t mLenRead

mMaxLen

uint32_t mMaxLen

mReadPoint

const uint8_t * mReadPoint

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

CloseContainer

WEAVE_ERROR CloseContainer(
  TLVReader & containerReader
)

อ่านคอนเทนเนอร์ TLV ให้เสร็จสมบูรณ์หลังจากการเรียก OpenContainer()

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

เมื่อ CloseContainer() แสดงผล โปรแกรมอ่านระดับบนสุดจะอยู่ก่อนองค์ประกอบแรกที่อยู่หลังคอนเทนเนอร์ จากจุดนี้ แอปพลิเคชันสามารถใช้เมธอด Next() เพื่อเลื่อนผ่านองค์ประกอบที่เหลืออยู่ทั้งหมด

แอปพลิเคชันสามารถเรียกใช้ "ปิด CloseContainer() บนโปรแกรมอ่านระดับบนสุดได้ทุกเมื่อ ไม่ว่าจะมีการอ่านองค์ประกอบทั้งหมดในคอนเทนเนอร์ที่สำคัญหรือไม่ก็ตาม หลังจากเรียก CloseContainer() แล้ว แอปพลิเคชันควรพิจารณาว่าโปรแกรมอ่านคอนเทนเนอร์ "de-initialized" และต้องไม่ใช้งานเพิ่มอีก

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

DupBytes

WEAVE_ERROR DupBytes(
  uint8_t *& buf,
  uint32_t & dataLen
)

จัดสรรและแสดงผลบัฟเฟอร์ที่มีค่าของไบต์ปัจจุบันหรือสตริง UTF8

วิธีนี้จะสร้างบัฟเฟอร์สำหรับและส่งสำเนาของข้อมูลที่เชื่อมโยงกับองค์ประกอบสตริงแบบไบต์หรือ UTF-8 ที่ตำแหน่งปัจจุบัน หน่วยความจำสำหรับบัฟเฟอร์จะได้รับมากับ Malloc() และผู้โทรควรเพิ่มพื้นที่ว่างด้วย (free()) เมื่อไม่จำเป็นต้องใช้อีกต่อไป

รายละเอียด
พารามิเตอร์
[out] buf
การอ้างอิงไปยังตัวชี้ที่ระบบจะกำหนดบัฟเฟอร์ที่จัดสรรฮีปขนาด dataLen ไบต์เมื่อสำเร็จ
[out] dataLen
การอ้างอิงพื้นที่เก็บข้อมูลสำหรับขนาดเป็นไบต์จาก buf สำเร็จ
ผลลัพธ์
WEAVE_NO_ERROR
หากวิธีการสำเร็จ
WEAVE_ERROR_WRONG_TLV_TYPE
หากองค์ประกอบปัจจุบันไม่ใช่สตริง TLV หรือสตริง UTF8 หรือเครื่องอ่านไม่ได้วางอยู่บนองค์ประกอบ
WEAVE_ERROR_NO_MEMORY
หากจัดสรรหน่วยความจำสำหรับบัฟเฟอร์เอาต์พุตไม่ได้
WEAVE_ERROR_TLV_UNDERRUN
กรณีที่การเข้ารหัส TLV ที่เกี่ยวข้องสิ้นสุดก่อนกำหนด
WEAVE_ERROR_UNSUPPORTED_WEAVE_FEATURE
หากแพลตฟอร์มเป้าหมายไม่รองรับ Malloc() และfree()
other
รหัสข้อผิดพลาดอื่นๆ ของ Weave หรือแพลตฟอร์มที่แสดงผลโดยฟังก์ชัน GetNextBuffer() ที่กำหนดค่าไว้ จะทำได้เฉพาะเมื่อ GetNextBuffer ไม่ใช่ค่าว่าง

DupString

WEAVE_ERROR DupString(
  char *& buf
)

จัดสรรและแสดงผลบัฟเฟอร์ที่มีค่าสิ้นสุดของไบต์ปัจจุบันหรือสตริง UTF8

วิธีนี้จะสร้างบัฟเฟอร์สำหรับและข้อมูลที่เชื่อมโยงกับไบต์ข้อมูลที่เชื่อมโยงกับองค์ประกอบสตริง UTF-8 ที่ตำแหน่งปัจจุบัน และแสดงผลสำเนาข้อมูลที่มีการยุติสถานะ Null หน่วยความจำสำหรับบัฟเฟอร์จะได้รับมากับ Malloc() และผู้โทรควรเพิ่มพื้นที่ว่างด้วย (free()) เมื่อไม่จำเป็นต้องใช้อีกต่อไป

รายละเอียด
พารามิเตอร์
[out] buf
การอ้างอิงไปยังตัวชี้ซึ่งระบบจะกำหนดบัฟเฟอร์ที่จัดสรรฮีปเมื่อสำเร็จ
ผลลัพธ์
WEAVE_NO_ERROR
หากวิธีการสำเร็จ
WEAVE_ERROR_WRONG_TLV_TYPE
หากองค์ประกอบปัจจุบันไม่ใช่สตริง TLV หรือสตริง UTF8 หรือเครื่องอ่านไม่ได้วางอยู่บนองค์ประกอบ
WEAVE_ERROR_NO_MEMORY
หากจัดสรรหน่วยความจำสำหรับบัฟเฟอร์เอาต์พุตไม่ได้
WEAVE_ERROR_TLV_UNDERRUN
กรณีที่การเข้ารหัส TLV ที่เกี่ยวข้องสิ้นสุดก่อนกำหนด
WEAVE_ERROR_UNSUPPORTED_WEAVE_FEATURE
หากแพลตฟอร์มเป้าหมายไม่รองรับ Malloc() และfree()
other
รหัสข้อผิดพลาดอื่นๆ ของ Weave หรือแพลตฟอร์มที่แสดงผลโดยฟังก์ชัน GetNextBuffer() ที่กำหนดค่าไว้ จะทำได้เฉพาะเมื่อ GetNextBuffer ไม่ใช่ค่าว่าง

EnterContainer

WEAVE_ERROR EnterContainer(
  TLVType & outerContainerType
)

เตรียมออบเจ็กต์ TLVReader สำหรับการอ่านสมาชิกขององค์ประกอบคอนเทนเนอร์ TLV

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

เมื่อมีการเรียก EnterContainer() ออบเจ็กต์ TLVReader จะต้องอยู่ในตำแหน่งบนองค์ประกอบคอนเทนเนอร์ที่จะอ่าน เมธอดนี้เป็นอาร์กิวเมนต์ที่ใช้อ้างอิงค่า TLVType ซึ่งจะใช้เพื่อบันทึกบริบทของผู้อ่านขณะอ่านคอนเทนเนอร์

เมื่อเมธอด EnterContainer() แสดงผล ระบบจะวางตำแหน่งผู้อ่านไว้ก่อนสมาชิกคนแรกของคอนเทนเนอร์ทันที การเรียก Next() ซ้ำๆ จะกรอไปข้างหน้าให้ผู้อ่านผ่านสมาชิกของคอลเล็กชันจนกว่าจะถึงชื่อที่สิ้นสุด ซึ่งผู้อ่านจะส่งกลับ WEAVE_END_OF_TLV

เมื่อแอปพลิเคชันอ่านคอนเทนเนอร์เสร็จแล้ว แอปจะยังอ่านองค์ประกอบต่อจากคอนเทนเนอร์ได้โดยเรียกใช้เมธอด ExitContainer()

รายละเอียด
พารามิเตอร์
[out] outerContainerType
การอ้างอิงค่า TLVType ที่จะได้รับบริบทของผู้อ่าน
ผลลัพธ์
WEAVE_NO_ERROR
หากวิธีการสำเร็จ
WEAVE_ERROR_INCORRECT_STATE
หากองค์ประกอบปัจจุบันไม่ได้วางไว้ในองค์ประกอบคอนเทนเนอร์

ExitContainer

WEAVE_ERROR ExitContainer(
  TLVType outerContainerType
)

อ่านค่าคอนเทนเนอร์ TLV ให้เสร็จสมบูรณ์ และเตรียมออบเจ็กต์ TLVReader เพื่ออ่านองค์ประกอบต่อจากคอนเทนเนอร์

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

เมื่อ ExitContainer() แสดงผล เครื่องอ่านจะมีตำแหน่งอยู่ก่อนองค์ประกอบแรกที่อยู่หลังคอนเทนเนอร์ จากจุดนี้ แอปพลิเคชันสามารถใช้เมธอด Next() เพื่อเลื่อนผ่านองค์ประกอบที่เหลืออยู่ทั้งหมด

เมื่อมีการเรียก EnterContainer() แล้ว แอปพลิเคชันจะเรียกใช้ ExitContainer() บนเครื่องอ่านได้ทุกเมื่อ ไม่ว่าจะมีการอ่านองค์ประกอบทั้งหมดในคอนเทนเนอร์ที่สำคัญหรือไม่ก็ตาม

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

ดาวน์โหลด

WEAVE_ERROR Get(
  bool & v
)

รับค่าขององค์ประกอบปัจจุบันเป็นประเภทบูลีน

รายละเอียด
พารามิเตอร์
[out] v
รับค่าที่เชื่อมโยงกับองค์ประกอบ TLV ปัจจุบัน
ผลลัพธ์
WEAVE_NO_ERROR
หากวิธีการสำเร็จ
WEAVE_ERROR_WRONG_TLV_TYPE
หากองค์ประกอบปัจจุบันไม่ใช่ประเภทบูลีน TLV หรือเครื่องอ่านไม่ได้วางอยู่บนองค์ประกอบ

ดาวน์โหลด

WEAVE_ERROR Get(
  int8_t & v
)

รับค่าขององค์ประกอบปัจจุบันเป็นจำนวนเต็มแบบมีเครื่องหมาย 8 บิต

ถ้าค่าจำนวนเต็มที่เข้ารหัสมากกว่าประเภทข้อมูลเอาต์พุต ระบบจะตัดค่าผลลัพธ์

รายละเอียด
พารามิเตอร์
[out] v
รับค่าที่เชื่อมโยงกับองค์ประกอบ TLV ปัจจุบัน
ผลลัพธ์
WEAVE_NO_ERROR
หากวิธีการสำเร็จ
WEAVE_ERROR_WRONG_TLV_TYPE
หากองค์ประกอบปัจจุบันไม่ใช่จำนวนเต็มประเภท TLV (มีการรับรองหรือไม่ลงนาม) หรือผู้อ่านไม่ได้อยู่ในองค์ประกอบ

ดาวน์โหลด

WEAVE_ERROR Get(
  int16_t & v
)

รับค่าขององค์ประกอบปัจจุบันเป็นจำนวนเต็มที่มีเครื่องหมาย 16 บิต

ถ้าค่าจำนวนเต็มที่เข้ารหัสมากกว่าประเภทข้อมูลเอาต์พุต ระบบจะตัดค่าผลลัพธ์

รายละเอียด
พารามิเตอร์
[out] v
รับค่าที่เชื่อมโยงกับองค์ประกอบ TLV ปัจจุบัน
ผลลัพธ์
WEAVE_NO_ERROR
หากวิธีการสำเร็จ
WEAVE_ERROR_WRONG_TLV_TYPE
หากองค์ประกอบปัจจุบันไม่ใช่จำนวนเต็มประเภท TLV (มีการรับรองหรือไม่ลงนาม) หรือผู้อ่านไม่ได้อยู่ในองค์ประกอบ

ดาวน์โหลด

WEAVE_ERROR Get(
  int32_t & v
)

รับค่าขององค์ประกอบปัจจุบันเป็นจำนวนเต็มแบบมีเครื่องหมาย 32 บิต

ถ้าค่าจำนวนเต็มที่เข้ารหัสมากกว่าประเภทข้อมูลเอาต์พุต ระบบจะตัดค่าผลลัพธ์

รายละเอียด
พารามิเตอร์
[out] v
รับค่าที่เชื่อมโยงกับองค์ประกอบ TLV ปัจจุบัน
ผลลัพธ์
WEAVE_NO_ERROR
หากวิธีการสำเร็จ
WEAVE_ERROR_WRONG_TLV_TYPE
หากองค์ประกอบปัจจุบันไม่ใช่จำนวนเต็มประเภท TLV (มีการรับรองหรือไม่ลงนาม) หรือผู้อ่านไม่ได้อยู่ในองค์ประกอบ

ดาวน์โหลด

WEAVE_ERROR Get(
  int64_t & v
)

รับค่าขององค์ประกอบปัจจุบันเป็นจำนวนเต็มแบบมีเครื่องหมาย 64 บิต

ถ้าค่าจำนวนเต็มที่เข้ารหัสมากกว่าประเภทข้อมูลเอาต์พุต ระบบจะตัดค่าผลลัพธ์

รายละเอียด
พารามิเตอร์
[out] v
รับค่าที่เชื่อมโยงกับองค์ประกอบ TLV ปัจจุบัน
ผลลัพธ์
WEAVE_NO_ERROR
หากวิธีการสำเร็จ
WEAVE_ERROR_WRONG_TLV_TYPE
หากองค์ประกอบปัจจุบันไม่ใช่จำนวนเต็มประเภท TLV (มีการรับรองหรือไม่ลงนาม) หรือผู้อ่านไม่ได้อยู่ในองค์ประกอบ

ดาวน์โหลด

WEAVE_ERROR Get(
  uint8_t & v
)

รับค่าขององค์ประกอบปัจจุบันเป็นจำนวนเต็มที่ไม่มีเครื่องหมาย 8 บิต

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

รายละเอียด
พารามิเตอร์
[out] v
รับค่าที่เชื่อมโยงกับองค์ประกอบ TLV ปัจจุบัน
ผลลัพธ์
WEAVE_NO_ERROR
หากวิธีการสำเร็จ
WEAVE_ERROR_WRONG_TLV_TYPE
หากองค์ประกอบปัจจุบันไม่ใช่จำนวนเต็มประเภท TLV (มีการรับรองหรือไม่ลงนาม) หรือผู้อ่านไม่ได้อยู่ในองค์ประกอบ

ดาวน์โหลด

WEAVE_ERROR Get(
  uint16_t & v
)

รับค่าขององค์ประกอบปัจจุบันเป็นจำนวนเต็ม 16 บิตที่ไม่มีเครื่องหมาย

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

รายละเอียด
พารามิเตอร์
[out] v
รับค่าที่เชื่อมโยงกับองค์ประกอบ TLV ปัจจุบัน
ผลลัพธ์
WEAVE_NO_ERROR
หากวิธีการสำเร็จ
WEAVE_ERROR_WRONG_TLV_TYPE
หากองค์ประกอบปัจจุบันไม่ใช่จำนวนเต็มประเภท TLV (มีการรับรองหรือไม่ลงนาม) หรือผู้อ่านไม่ได้อยู่ในองค์ประกอบ

ดาวน์โหลด

WEAVE_ERROR Get(
  uint32_t & v
)

รับค่าขององค์ประกอบปัจจุบันเป็นจำนวนเต็ม 32 บิตที่ไม่มีเครื่องหมาย

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

รายละเอียด
พารามิเตอร์
[out] v
รับค่าที่เชื่อมโยงกับองค์ประกอบ TLV ปัจจุบัน
ผลลัพธ์
WEAVE_NO_ERROR
หากวิธีการสำเร็จ
WEAVE_ERROR_WRONG_TLV_TYPE
หากองค์ประกอบปัจจุบันไม่ใช่จำนวนเต็มประเภท TLV (มีการรับรองหรือไม่ลงนาม) หรือผู้อ่านไม่ได้อยู่ในองค์ประกอบ

ดาวน์โหลด

WEAVE_ERROR Get(
  uint64_t & v
)

รับค่าขององค์ประกอบปัจจุบันเป็นจำนวนเต็มที่ไม่มีเครื่องหมาย 64 บิต

หากค่าจำนวนเต็มที่เข้ารหัสเป็นค่าลบ ระบบจะแปลงค่าเป็นแบบไม่ลงนาม

รายละเอียด
พารามิเตอร์
[out] v
รับค่าที่เชื่อมโยงกับองค์ประกอบ TLV ปัจจุบัน
ผลลัพธ์
WEAVE_NO_ERROR
หากวิธีการสำเร็จ
WEAVE_ERROR_WRONG_TLV_TYPE
หากองค์ประกอบปัจจุบันไม่ใช่จำนวนเต็มประเภท TLV (มีการรับรองหรือไม่ลงนาม) หรือผู้อ่านไม่ได้อยู่ในองค์ประกอบ

ดาวน์โหลด

WEAVE_ERROR Get(
  float & v
)

ดาวน์โหลด

WEAVE_ERROR Get(
  double & v
)

รับค่าขององค์ประกอบปัจจุบันเป็นจำนวนจุดลอยตัวความเที่ยงตรงสองเท่า

รายละเอียด
พารามิเตอร์
[out] v
รับค่าที่เชื่อมโยงกับองค์ประกอบ TLV ปัจจุบัน
ผลลัพธ์
WEAVE_NO_ERROR
หากวิธีการสำเร็จ
WEAVE_ERROR_WRONG_TLV_TYPE
หากองค์ประกอบปัจจุบันไม่ใช่ประเภทจุดลอยตัว TLV หรือเครื่องอ่านไม่ได้วางอยู่บนองค์ประกอบ

GetBufHandle

uintptr_t GetBufHandle(
  void
) const 

GetBytes

WEAVE_ERROR GetBytes(
  uint8_t *buf,
  uint32_t bufSize
)

รับค่าของไบต์ปัจจุบันหรือองค์ประกอบสตริง UTF8

หากต้องการหาขนาดบัฟเฟอร์ของอินพุตที่จำเป็น ให้เรียกใช้เมธอด GetLength() ก่อนที่จะเรียกใช้ GetBytes()

รายละเอียด
พารามิเตอร์
[in] buf
ตัวชี้ไปยังบัฟเฟอร์เพื่อรับข้อมูลสตริง
[in] bufSize
ขนาดในหน่วยไบต์ของบัฟเฟอร์ที่ buf ชี้ไป
ผลลัพธ์
WEAVE_NO_ERROR
หากวิธีการสำเร็จ
WEAVE_ERROR_WRONG_TLV_TYPE
หากองค์ประกอบปัจจุบันไม่ใช่สตริง TLV หรือสตริง UTF8 หรือเครื่องอ่านไม่ได้วางอยู่บนองค์ประกอบ
WEAVE_ERROR_BUFFER_TOO_SMALL
หากบัฟเฟอร์ที่ระบุมีขนาดเล็กเกินกว่าที่จะเก็บข้อมูลที่เชื่อมโยงกับองค์ประกอบปัจจุบันได้
WEAVE_ERROR_TLV_UNDERRUN
กรณีที่การเข้ารหัส TLV ที่เกี่ยวข้องสิ้นสุดก่อนกำหนด
other
รหัสข้อผิดพลาดอื่นๆ ของ Weave หรือแพลตฟอร์มที่แสดงผลโดยฟังก์ชัน GetNextBuffer() ที่กำหนดค่าไว้ จะทำได้เฉพาะเมื่อ GetNextBuffer ไม่ใช่ค่าว่าง

GetContainerType

TLVType GetContainerType(
  void
) const 

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

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

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

GetControlByte

uint16_t GetControlByte(
  void
) const 

แสดงผลไบต์ควบคุมที่เชื่อมโยงกับองค์ประกอบ TLV ปัจจุบัน

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

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

GetDataPtr

WEAVE_ERROR GetDataPtr(
  const uint8_t *& data
)

รับตัวชี้ไปยังไบต์ที่เข้ารหัสเริ่มต้นขององค์ประกอบสตริง TLV หรือ UTF8

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

รายละเอียด
พารามิเตอร์
[out] data
การอ้างอิงไปยังตัวชี้ Const ที่จะได้รับตัวชี้ไปยังข้อมูลสตริงที่สำคัญ
ผลลัพธ์
WEAVE_NO_ERROR
หากวิธีการสำเร็จ
WEAVE_ERROR_WRONG_TLV_TYPE
หากองค์ประกอบปัจจุบันไม่ใช่สตริง TLV หรือสตริง UTF8 หรือเครื่องอ่านไม่ได้วางอยู่บนองค์ประกอบ
WEAVE_ERROR_TLV_UNDERRUN
หากการเข้ารหัส TLV ที่สำคัญสิ้นสุดลงก่อนกำหนดหรือค่าขององค์ประกอบสตริงปัจจุบันไม่ได้อยู่ในบัฟเฟอร์ที่ต่อเนื่องกันเดี่ยว
other
รหัสข้อผิดพลาดอื่นๆ ของ Weave หรือแพลตฟอร์มที่แสดงผลโดยฟังก์ชัน GetNextBuffer() ที่กำหนดค่าไว้ ใช้ได้เฉพาะเมื่อ GetNextBuffer ไม่ใช่ค่าว่าง

GetLength

uint32_t GetLength(
  void
) const 

แสดงผลความยาวของข้อมูลที่เชื่อมโยงกับองค์ประกอบ TLV ปัจจุบัน

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

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

GetLengthRead

uint32_t GetLengthRead(
  void
) const 

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

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

GetReadPoint

const uint8_t * GetReadPoint(
  void
) const 

รับจุดในบัฟเฟอร์อินพุตเบื้องหลังซึ่งตรงกับตำแหน่งปัจจุบันของผู้อ่าน

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

GetRemainingLength

uint32_t GetRemainingLength(
  void
) const 

แสดงผลจำนวนไบต์ทั้งหมดที่อ่านได้จนกว่าจะถึงความยาวการอ่านสูงสุด

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

GetString

WEAVE_ERROR GetString(
  char *buf,
  uint32_t bufSize
)

รับค่าของไบต์ปัจจุบันหรือองค์ประกอบสตริง UTF8 เป็นสตริงที่สิ้นสุดด้วยค่าว่าง

หากต้องการหาขนาดบัฟเฟอร์ของอินพุตที่จำเป็น ให้เรียกใช้เมธอด GetLength() ก่อนที่จะเรียกใช้ GetBytes() บัฟเฟอร์อินพุตควรมีขนาดใหญ่กว่าความยาวของสตริงอย่างน้อย 1 ไบต์เพื่อรองรับอักขระ Null

รายละเอียด
พารามิเตอร์
[in] buf
ตัวชี้ไปยังบัฟเฟอร์เพื่อรับข้อมูลสตริงไบต์
[in] bufSize
ขนาดในหน่วยไบต์ของบัฟเฟอร์ที่ buf ชี้ไป
ผลลัพธ์
WEAVE_NO_ERROR
หากวิธีการสำเร็จ
WEAVE_ERROR_WRONG_TLV_TYPE
หากองค์ประกอบปัจจุบันไม่ใช่สตริง TLV หรือสตริง UTF8 หรือเครื่องอ่านไม่ได้วางอยู่บนองค์ประกอบ
WEAVE_ERROR_BUFFER_TOO_SMALL
หากบัฟเฟอร์ที่ระบุมีขนาดเล็กเกินกว่าที่จะเก็บข้อมูลที่เชื่อมโยงกับองค์ประกอบปัจจุบันได้
WEAVE_ERROR_TLV_UNDERRUN
กรณีที่การเข้ารหัส TLV ที่เกี่ยวข้องสิ้นสุดก่อนกำหนด
other
รหัสข้อผิดพลาดอื่นๆ ของ Weave หรือแพลตฟอร์มที่แสดงผลโดยฟังก์ชัน GetNextBuffer() ที่กำหนดค่าไว้ จะทำได้เฉพาะเมื่อ GetNextBuffer ไม่ใช่ค่าว่าง

GetTag

uint64_t GetTag(
  void
) const 

แสดงผลแท็กที่เชื่อมโยงกับองค์ประกอบ TLV ปัจจุบัน

ค่าที่ GetTag() แสดงผลสามารถใช้ร่วมกับฟังก์ชันยูทิลิตีแท็ก (IsProfileTag(), IsContextTag(), ProfileIdFromTag() ฯลฯ) เพื่อระบุประเภทของแท็กและแยกค่าช่องแท็กต่างๆ

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

GetType

TLVType GetType(
  void
) const 

แสดงผลประเภทองค์ประกอบ TLV ปัจจุบัน

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

Init

void Init(
  const TLVReader & aReader
)

เริ่มต้นออบเจ็กต์ TLVReader จากออบเจ็กต์ TLVReader อื่น

รายละเอียด
พารามิเตอร์
[in] aReader
การอ้างอิงแบบอ่านอย่างเดียวไปยัง TLVReader เพื่อเริ่มต้นใช้งาน

Init

void Init(
  const uint8_t *data,
  uint32_t dataLen
)

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

รายละเอียด
พารามิเตอร์
[in] data
ตัวชี้ไปยังบัฟเฟอร์ที่มีข้อมูล TLV ที่จะแยกวิเคราะห์
[in] dataLen
ความยาวของข้อมูล TLV ที่จะแยกวิเคราะห์

Init

void Init(
  PacketBuffer *buf,
  uint32_t maxLen
)

เริ่มต้นออบเจ็กต์ TLVReader เพื่ออ่านจาก PacketBuffer รายการเดียว

การแยกวิเคราะห์จะเริ่มที่ตำแหน่งเริ่มต้นของบัฟเฟอร์ (buf->DataStart()) และต่อเนื่องไปจนสิ้นสุดข้อมูลในบัฟเฟอร์ (ตามที่ระบุด้วย buf->Datalen()) หรือแยกวิเคราะห์ไบต์ maxLen

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

Init

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

เริ่มต้นออบเจ็กต์ TLVReader เพื่ออ่านจาก PacketBuffers อย่างน้อย 1 รายการ

การแยกวิเคราะห์จะเริ่มที่ตำแหน่งเริ่มต้นของบัฟเฟอร์เริ่มต้น (buf->DataStart()) หาก AllowDiscontiguousBuffers เป็น "จริง" ผู้อ่านจะเลื่อนไปตามเชนของบัฟเฟอร์ที่ลิงก์โดยตัวชี้ Next() การแยกวิเคราะห์จะดำเนินต่อไปจนกว่าจะใช้ข้อมูลทั้งหมดในห่วงโซ่บัฟเฟอร์ (ตามที่แสดงด้วย buf->Datalen()) หรือแยกวิเคราะห์ไบต์สูงสุดแล้ว

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

ถัดไป

WEAVE_ERROR Next(
  void
)

เลื่อนออบเจ็กต์ TLVReader ไปยังองค์ประกอบ TLV ถัดไปที่จะอ่าน

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

เนื่องจาก Next() จะบังคับการเคลื่อนที่ของผู้อ่านไปยังบริบทการปิดกั้นปัจจุบัน การเรียกใช้ Next() เมื่อวางตำแหน่งผู้อ่านบนองค์ประกอบของคอนเทนเนอร์จะเลื่อนไปยังคอนเทนเนอร์เหนือคอนเทนเนอร์ โดยข้ามองค์ประกอบสมาชิก (และสมาชิกของคอนเทนเนอร์ที่ฝังอยู่) จนกว่าจะถึงองค์ประกอบแรกหลังคอนเทนเนอร์

เมื่อไม่มีองค์ประกอบเพิ่มเติมภายในบริบทของการควบคุมที่เฉพาะเจาะจง เมธอด Next() จะแสดงผลข้อผิดพลาด WEAVE_END_OF_TLV และตำแหน่งของผู้อ่านจะไม่เปลี่ยนแปลง

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

ถัดไป

WEAVE_ERROR Next(
  TLVType expectedType,
  uint64_t expectedTag
)

เลื่อนออบเจ็กต์ TLVReader ไปยังองค์ประกอบ TLV ถัดไปที่จะอ่าน เพื่อยืนยันประเภทและแท็กขององค์ประกอบใหม่

เมธอด Next(TLVType expectedType, uint64_texpectedTag) เป็นเมธอดอำนวยความสะดวกที่มีลักษณะการทำงานเหมือนกับ Next() แต่จะยืนยันว่าประเภทและแท็กขององค์ประกอบ TLV ใหม่ตรงกับอาร์กิวเมนต์ที่ให้มา

รายละเอียด
พารามิเตอร์
[in] expectedType
ประเภทข้อมูลที่คาดไว้สำหรับองค์ประกอบถัดไป
[in] expectedTag
แท็กที่คาดไว้สำหรับองค์ประกอบถัดไป
ผลลัพธ์
WEAVE_NO_ERROR
วางตำแหน่งผู้อ่านในองค์ประกอบใหม่ได้สำเร็จหรือไม่
WEAVE_END_OF_TLV
หากไม่มีองค์ประกอบอื่นๆ ที่พร้อมให้คุณใช้งาน
WEAVE_ERROR_WRONG_TLV_TYPE
หากประเภทขององค์ประกอบใหม่ไม่ตรงกับค่าของอาร์กิวเมนต์ expectedType
WEAVE_ERROR_UNEXPECTED_TLV_ELEMENT
หากแท็กที่เชื่อมโยงกับองค์ประกอบใหม่ไม่ตรงกับค่าของอาร์กิวเมนต์ expectedTag
WEAVE_ERROR_TLV_UNDERRUN
กรณีที่การเข้ารหัส TLV ที่เกี่ยวข้องสิ้นสุดก่อนกำหนด
WEAVE_ERROR_INVALID_TLV_ELEMENT
หากเครื่องอ่านพบประเภทองค์ประกอบ TLV ที่ไม่ถูกต้องหรือไม่รองรับ
WEAVE_ERROR_INVALID_TLV_TAG
หากผู้อ่านพบแท็ก TLV ในบริบทที่ไม่ถูกต้อง
other
รหัสข้อผิดพลาดอื่นๆ ของ Weave หรือแพลตฟอร์มที่แสดงผลโดยฟังก์ชัน GetNextBuffer() ที่กำหนดค่าไว้ จะทำได้เฉพาะเมื่อ GetNextBuffer ไม่ใช่ค่าว่าง

OpenContainer

WEAVE_ERROR OpenContainer(
  TLVReader & containerReader
)

เริ่มต้นออบเจ็กต์ TLVReader ใหม่สำหรับการอ่านสมาชิกขององค์ประกอบคอนเทนเนอร์ TLV

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

เมื่อเมธอด OpenContainer() แสดงผล เครื่องอ่านคอนเทนเนอร์จะมีตำแหน่งอยู่ก่อนสมาชิกรายแรกของคอนเทนเนอร์ทันที การเรียกใช้ Next() บนเครื่องอ่านคอนเทนเนอร์จะเลื่อนผ่านสมาชิกของคอลเล็กชันไปจนสิ้นสุด ซึ่งจุดนั้นโปรแกรมอ่านจะส่งกลับ WEAVE_END_OF_TLV

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

Container Reader จะรับคุณสมบัติการกำหนดค่าต่างๆ จากโปรแกรมอ่านระดับบนสุด ได้แก่

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

รายละเอียด
พารามิเตอร์
[out] containerReader
การอ้างอิงไปยังออบเจ็กต์ TLVReader ที่จะเริ่มขึ้นสำหรับการอ่านสมาชิกขององค์ประกอบคอนเทนเนอร์ปัจจุบัน ข้อมูลที่เกี่ยวข้องกับออบเจ็กต์ที่ระบุจะถูกเขียนทับ
ผลลัพธ์
WEAVE_NO_ERROR
หากวิธีการสำเร็จ
WEAVE_ERROR_INCORRECT_STATE
หากองค์ประกอบปัจจุบันไม่ได้วางไว้ในองค์ประกอบคอนเทนเนอร์

ข้าม

WEAVE_ERROR Skip(
  void
)

เลื่อนออบเจ็กต์ TLVReader ไปข้างหน้าต่อจากองค์ประกอบ TLV ปัจจุบัน

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

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

VerifyEndOfContainer

WEAVE_ERROR VerifyEndOfContainer(
  void
)

ยืนยันว่าออบเจ็กต์ TVLReader อยู่ที่ส่วนท้ายของคอนเทนเนอร์ TLV

เมธอด VerifyEndOfContainer() จะยืนยันว่าไม่มีองค์ประกอบ TLV เพิ่มเติมให้อ่านในคอนเทนเนอร์ TLV ปัจจุบัน นี่คือวิธีที่สะดวกซึ่งเทียบเท่ากับการเรียกใช้ Next() และการตรวจสอบค่าที่ส่งกลับเป็น WEAVE_END_OF_TLV

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

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

ClearElementState

void ClearElementState(
  void
)

ล้างสถานะของ TLVReader

วิธีนี้ใช้เพื่อจัดตำแหน่งเครื่องอ่านก่อน TLV แรกระหว่าง TLV หรือหลัง TLV สุดท้าย

ElementType

TLVElementType ElementType(
  void
) const 

นี่เป็นเมธอดส่วนตัวที่แสดง TLVElementType จาก mControlByte

EnsureData

WEAVE_ERROR EnsureData(
  WEAVE_ERROR noDataErr
)

GetElementHeadLength

WEAVE_ERROR GetElementHeadLength(
  uint8_t & elemHeadBytes
) const 

วิธีนี้เป็นวิธีส่วนตัวที่ใช้ในการคำนวณความยาวของส่วนหัวองค์ประกอบ TLV

IsContainerOpen

bool IsContainerOpen(
  void
) const 

ReadData

WEAVE_ERROR ReadData(
  uint8_t *buf,
  uint32_t len
)

ReadElement

WEAVE_ERROR ReadElement(
  void
)

ReadTag

uint64_t ReadTag(
  TLVTagControl tagControl,
  const uint8_t *& p
)

SetContainerOpen

void SetContainerOpen(
  bool aContainerOpen
)

SkipData

WEAVE_ERROR SkipData(
  void
)

ข้ามข้อมูลใดๆ ที่มีอยู่ใน TLV ปัจจุบันด้วยการอ่านโดยไม่มีบัฟเฟอร์ปลายทาง

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

SkipToEndOfContainer

WEAVE_ERROR SkipToEndOfContainer(
  void
)

VerifyElement

WEAVE_ERROR VerifyElement(
  void
)

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

FailGetNextBuffer

WEAVE_ERROR FailGetNextBuffer(
  TLVReader & reader,
  uintptr_t & bufHandle,
  const uint8_t *& bufStart,
  uint32_t & bufLen
)

GetNextPacketBuffer

WEAVE_ERROR GetNextPacketBuffer(
  TLVReader & reader,
  uintptr_t & bufHandle,
  const uint8_t *& bufStart,
  uint32_t & bufLen
)