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_ERROR(*)
ฟังก์ชันที่ใช้เพื่อดึงข้อมูล 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() แล้ว แอปพลิเคชันควรพิจารณาว่าโปรแกรมอ่านคอนเทนเนอร์ "ไม่ได้เริ่มต้น" แล้ว และต้องไม่ใช้คอนเทนเนอร์นี้อีกโดยไม่ได้เริ่มต้นอีกครั้ง

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

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 ไม่ใช่ NULL

DupString

WEAVE_ERROR DupString(
  char *& buf
)

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

วิธีนี้จะสร้างบัฟเฟอร์และส่งคืนสำเนาข้อมูลที่มีการยุติเป็น Null ซึ่งเชื่อมโยงกับองค์ประกอบสตริงแบบไบต์หรือ UTF-8 ที่ตำแหน่งปัจจุบัน หน่วยความจำสำหรับบัฟเฟอร์จะได้รับด้วย 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 ไม่ใช่ NULL

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() บนเครื่องอ่าน หรือหากผู้อ่านคอนเทนเนอร์ไม่ตรงกับ URL ที่ส่งไปยังเมธอด OpenContainer()
WEAVE_ERROR_TLV_UNDERRUN
หากการเข้ารหัส TLV ที่เกี่ยวข้องสิ้นสุดลงก่อนกำหนด
WEAVE_ERROR_INVALID_TLV_ELEMENT
หากเครื่องอ่านพบประเภทองค์ประกอบ TLV ที่ไม่ถูกต้องหรือไม่รองรับ
WEAVE_ERROR_INVALID_TLV_TAG
ในกรณีที่เครื่องอ่านพบแท็ก TLV ในบริบทที่ไม่ถูกต้อง
other
รหัสข้อผิดพลาดอื่นๆ ของ Weave หรือแพลตฟอร์มที่ส่งกลับมาจากฟังก์ชัน GetNextBuffer() ที่กำหนดค่าไว้ เป็นไปได้เฉพาะเมื่อ GetNextBuffer ไม่ใช่ NULL

ดาวน์โหลด

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 ไม่ใช่ NULL

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 ไม่ใช่ NULL

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 ไม่ใช่ NULL

GetTag

uint64_t GetTag(
  void
) const 

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

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

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

GetType

TLVType GetType(
  void
) const 

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

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

เริ่มต้น

void Init(
  const TLVReader & aReader
)

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

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

เริ่มต้น

void Init(
  const uint8_t *data,
  uint32_t dataLen
)

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

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

เริ่มต้น

void Init(
  PacketBuffer *buf,
  uint32_t maxLen
)

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

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

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

เริ่มต้น

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

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

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

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

ถัดไป

WEAVE_ERROR Next(
  void
)

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

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

ถัดไป

WEAVE_ERROR Next(
  TLVType expectedType,
  uint64_t expectedTag
)

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

เมธอด Next(TLVTypeรอการอนุมัติTag, uint64_tlatestTag) เป็นวิธีอำนวยความสะดวกที่มีลักษณะการทำงานเหมือนกับ 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 ไม่ใช่ NULL

OpenContainer

WEAVE_ERROR OpenContainer(
  TLVReader & containerReader
)

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

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

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

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

โปรแกรมอ่านคอนเทนเนอร์จะรับค่าพร็อพเพอร์ตี้การกำหนดค่าต่างๆ จากผู้อ่านหลัก ได้แก่

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

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

ข้าม

WEAVE_ERROR Skip(
  void
)

เลื่อนออบเจ็กต์ TLVReader ให้อยู่ต่อจากองค์ประกอบ TLV ปัจจุบันทันที

เมธอด Skip() จะวางออบเจ็กต์เครื่องอ่านหลังองค์ประกอบ 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 ไม่ใช่ NULL

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 ไม่ใช่ NULL

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

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 ไม่ใช่ NULL

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
)