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)
|
|
ExitContainer(TLVType outerContainerType)
|
|
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
|
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)
|
|
Next(TLVType expectedType, uint64_t expectedTag)
|
|
OpenContainer(TLVReader & containerReader)
|
|
Skip(void)
|
|
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 เมื่อเรียก ฟังก์ชันจะต้องให้ข้อมูลเพิ่มเติมสำหรับเครื่องอ่านเพื่อแยกวิเคราะห์หรือส่งสัญญาณให้ผู้อ่านทราบว่าไม่มีข้อมูลเพิ่มเติมแล้ว
รายละเอียด | |||||||||
---|---|---|---|---|---|---|---|---|---|
พารามิเตอร์ |
|
||||||||
แสดงผลค่า |
|
แอตทริบิวต์สาธารณะ
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() แล้ว แอปพลิเคชันควรพิจารณาว่าโปรแกรมอ่านคอนเทนเนอร์ "ไม่ได้เริ่มต้น" แล้ว และต้องไม่ใช้คอนเทนเนอร์นี้อีกโดยไม่ได้เริ่มต้นอีกครั้ง
รายละเอียด | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
พารามิเตอร์ |
|
||||||||||||
แสดงผลค่า |
|
DupBytes
WEAVE_ERROR DupBytes( uint8_t *& buf, uint32_t & dataLen )
จัดสรรและแสดงผลบัฟเฟอร์ที่มีค่าของไบต์ปัจจุบันหรือสตริง UTF8
วิธีนี้จะสร้างบัฟเฟอร์และส่งคืนสำเนาของข้อมูลที่เชื่อมโยงกับองค์ประกอบสตริงแบบไบต์หรือ UTF-8 ที่ตำแหน่งปัจจุบัน หน่วยความจำสำหรับบัฟเฟอร์จะได้รับด้วย Malloc() และควรจะว่างด้วยfree() โดยผู้โทรเมื่อไม่จำเป็นอีกต่อไป
รายละเอียด | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
พารามิเตอร์ |
|
||||||||||||
แสดงผลค่า |
|
DupString
WEAVE_ERROR DupString( char *& buf )
จัดสรรและแสดงผลบัฟเฟอร์ที่มีค่าว่าง-สิ้นสุดของไบต์หรือสตริง UTF8 ปัจจุบัน
วิธีนี้จะสร้างบัฟเฟอร์และส่งคืนสำเนาข้อมูลที่มีการยุติเป็น Null ซึ่งเชื่อมโยงกับองค์ประกอบสตริงแบบไบต์หรือ UTF-8 ที่ตำแหน่งปัจจุบัน หน่วยความจำสำหรับบัฟเฟอร์จะได้รับด้วย Malloc() และควรจะว่างด้วยfree() โดยผู้โทรเมื่อไม่จำเป็นอีกต่อไป
รายละเอียด | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
พารามิเตอร์ |
|
||||||||||||
แสดงผลค่า |
|
EnterContainer
WEAVE_ERROR EnterContainer( TLVType & outerContainerType )
เตรียมออบเจ็กต์ TLVReader สำหรับการอ่านสมาชิกขององค์ประกอบคอนเทนเนอร์ TLV
เมธอด EnterContainer() จะเตรียมออบเจ็กต์ TLVReader ปัจจุบันเพื่อเริ่มอ่านองค์ประกอบสมาชิกของคอนเทนเนอร์ TLV (โครงสร้าง อาร์เรย์ หรือเส้นทาง) สำหรับทุกการเรียกแอปพลิเคชัน EnterContainer() ต้องเรียก ExitContainer() ที่สอดคล้องกัน
เมื่อมีการเรียก EnterContainer() ออบเจ็กต์ TLVReader จะต้องอยู่ในองค์ประกอบคอนเทนเนอร์ที่จะอ่าน เมธอดนี้ใช้เป็นอาร์กิวเมนต์การอ้างอิงไปยังค่า TLVType ซึ่งจะใช้เพื่อบันทึกบริบทของผู้อ่านขณะที่อ่านคอนเทนเนอร์
เมื่อเมธอด EnterContainer() กลับมา ระบบจะวางตําแหน่งผู้อ่านทันทีก่อนสมาชิกคนแรกของคอนเทนเนอร์ การเรียก Next() ซ้ำๆ จะทำให้ผู้อ่านเลื่อนผ่านสมาชิกของคอลเล็กชันไปจนกระทั่งถึงจุดสิ้นสุด ซึ่งผู้อ่านจะแสดง WEAVE_END_OF_TLV ในขณะนั้น
เมื่อแอปพลิเคชันอ่านคอนเทนเนอร์เสร็จแล้ว แอปพลิเคชันจะสามารถอ่านองค์ประกอบต่อไปได้หลังจากคอนเทนเนอร์นั้นด้วยการเรียกใช้เมธอด ExitContainer()
รายละเอียด | |||||
---|---|---|---|---|---|
พารามิเตอร์ |
|
||||
แสดงผลค่า |
|
ExitContainer
WEAVE_ERROR ExitContainer( TLVType outerContainerType )
อ่านคอนเทนเนอร์ TLV ให้เสร็จสมบูรณ์และเตรียมออบเจ็กต์ TLVReader เพื่ออ่านองค์ประกอบที่อยู่หลังคอนเทนเนอร์
เมธอด ExitContainer() คืนค่าสถานะของออบเจ็กต์ TLVReader หลังจากเรียกไปยัง EnterContainer() ทุกครั้งที่เรียกแอปพลิเคชัน EnterContainer() ต้องเรียกแอปพลิเคชัน ExitContainer() ที่สอดคล้องกัน โดยส่งผ่านค่าบริบทที่แสดงผลโดยเมธอด EnterContainer()
เมื่อ ExitContainer() กลับมา ระบบจะวางตําแหน่งเครื่องอ่านก่อนองค์ประกอบแรกที่ตามหลังคอนเทนเนอร์ จากจุดนี้ แอปพลิเคชันสามารถใช้เมธอด Next() เพื่อเลื่อนไปยังองค์ประกอบอื่นๆ ที่เหลืออยู่ได้
เมื่อเรียก EnterContainer() แล้ว แอปพลิเคชันจะเรียกใช้ ExitContainer() บนเครื่องอ่านได้ทุกเมื่อ ไม่ว่าองค์ประกอบทั้งหมดในคอนเทนเนอร์สําคัญนั้นได้อ่านแล้วหรือยัง
รายละเอียด | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
พารามิเตอร์ |
|
||||||||||||
แสดงผลค่า |
|
ดาวน์โหลด
WEAVE_ERROR Get( bool & v )
ดาวน์โหลด
WEAVE_ERROR Get( int8_t & v )
รับค่าขององค์ประกอบปัจจุบันเป็นจำนวนเต็มแบบมีเครื่องหมาย 8 บิต
หากค่าจำนวนเต็มที่เข้ารหัสมีขนาดใหญ่กว่าประเภทข้อมูลเอาต์พุต ระบบจะตัดค่าผลลัพธ์
รายละเอียด | |||||
---|---|---|---|---|---|
พารามิเตอร์ |
|
||||
แสดงผลค่า |
|
ดาวน์โหลด
WEAVE_ERROR Get( int16_t & v )
รับค่าขององค์ประกอบปัจจุบันเป็นจำนวนเต็มแบบมีเครื่องหมาย 16 บิต
หากค่าจำนวนเต็มที่เข้ารหัสมีขนาดใหญ่กว่าประเภทข้อมูลเอาต์พุต ระบบจะตัดค่าผลลัพธ์
รายละเอียด | |||||
---|---|---|---|---|---|
พารามิเตอร์ |
|
||||
แสดงผลค่า |
|
ดาวน์โหลด
WEAVE_ERROR Get( int32_t & v )
รับค่าขององค์ประกอบปัจจุบันเป็นจำนวนเต็มแบบมีเครื่องหมาย 32 บิต
หากค่าจำนวนเต็มที่เข้ารหัสมีขนาดใหญ่กว่าประเภทข้อมูลเอาต์พุต ระบบจะตัดค่าผลลัพธ์
รายละเอียด | |||||
---|---|---|---|---|---|
พารามิเตอร์ |
|
||||
แสดงผลค่า |
|
ดาวน์โหลด
WEAVE_ERROR Get( int64_t & v )
รับค่าขององค์ประกอบปัจจุบันเป็นจำนวนเต็มแบบมีเครื่องหมาย 64 บิต
หากค่าจำนวนเต็มที่เข้ารหัสมีขนาดใหญ่กว่าประเภทข้อมูลเอาต์พุต ระบบจะตัดค่าผลลัพธ์
รายละเอียด | |||||
---|---|---|---|---|---|
พารามิเตอร์ |
|
||||
แสดงผลค่า |
|
ดาวน์โหลด
WEAVE_ERROR Get( uint8_t & v )
รับค่าขององค์ประกอบปัจจุบันเป็นจำนวนเต็มที่ไม่มีเครื่องหมาย 8 บิต
หากค่าจำนวนเต็มที่เข้ารหัสมีขนาดใหญ่กว่าประเภทข้อมูลเอาต์พุต ระบบจะตัดค่าผลลัพธ์ ในทำนองเดียวกัน หากค่าจำนวนเต็มที่เข้ารหัสเป็นลบ ระบบจะแปลงค่าเป็นไม่มีเครื่องหมาย
รายละเอียด | |||||
---|---|---|---|---|---|
พารามิเตอร์ |
|
||||
แสดงผลค่า |
|
ดาวน์โหลด
WEAVE_ERROR Get( uint16_t & v )
รับค่าขององค์ประกอบปัจจุบันเป็นจำนวนเต็มที่ไม่มีเครื่องหมาย 16 บิต
หากค่าจำนวนเต็มที่เข้ารหัสมีขนาดใหญ่กว่าประเภทข้อมูลเอาต์พุต ระบบจะตัดค่าผลลัพธ์ ในทำนองเดียวกัน หากค่าจำนวนเต็มที่เข้ารหัสเป็นลบ ระบบจะแปลงค่าเป็นไม่มีเครื่องหมาย
รายละเอียด | |||||
---|---|---|---|---|---|
พารามิเตอร์ |
|
||||
แสดงผลค่า |
|
ดาวน์โหลด
WEAVE_ERROR Get( uint32_t & v )
รับค่าขององค์ประกอบปัจจุบันเป็นจำนวนเต็มที่ไม่มีเครื่องหมาย 32 บิต
หากค่าจำนวนเต็มที่เข้ารหัสมีขนาดใหญ่กว่าประเภทข้อมูลเอาต์พุต ระบบจะตัดค่าผลลัพธ์ ในทำนองเดียวกัน หากค่าจำนวนเต็มที่เข้ารหัสเป็นลบ ระบบจะแปลงค่าเป็นไม่มีเครื่องหมาย
รายละเอียด | |||||
---|---|---|---|---|---|
พารามิเตอร์ |
|
||||
แสดงผลค่า |
|
ดาวน์โหลด
WEAVE_ERROR Get( uint64_t & v )
รับค่าขององค์ประกอบปัจจุบันเป็นจำนวนเต็มที่ไม่มีเครื่องหมาย 64 บิต
หากค่าจำนวนเต็มที่เข้ารหัสเป็นลบ ระบบจะแปลงค่าเป็นไม่มีเครื่องหมาย
รายละเอียด | |||||
---|---|---|---|---|---|
พารามิเตอร์ |
|
||||
แสดงผลค่า |
|
ดาวน์โหลด
WEAVE_ERROR Get( float & v )
ดาวน์โหลด
WEAVE_ERROR Get( double & v )
รับค่าขององค์ประกอบปัจจุบันเป็นจำนวนทศนิยมแบบทศนิยมสองเท่า
รายละเอียด | |||||
---|---|---|---|---|---|
พารามิเตอร์ |
|
||||
แสดงผลค่า |
|
GetBufHandle
uintptr_t GetBufHandle( void ) const
GetBytes
WEAVE_ERROR GetBytes( uint8_t *buf, uint32_t bufSize )
รับค่าขององค์ประกอบสตริงไบต์หรือ UTF8 ปัจจุบัน
หากต้องการระบุขนาดบัฟเฟอร์อินพุตที่จำเป็น ให้เรียกเมธอด GetLength() ก่อนเรียกใช้ GetBytes()
รายละเอียด | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
พารามิเตอร์ |
|
||||||||||
แสดงผลค่า |
|
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 ซึ่งทำให้วิธีใช้งานที่จำกัดเมื่ออ่านข้อมูลจากบัฟเฟอร์ที่ไม่ได้อยู่ติดกันหลายตัว
รายละเอียด | |||||||||
---|---|---|---|---|---|---|---|---|---|
พารามิเตอร์ |
|
||||||||
แสดงผลค่า |
|
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
รายละเอียด | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
พารามิเตอร์ |
|
||||||||||
แสดงผลค่า |
|
GetTag
uint64_t GetTag( void ) const
แสดงผลแท็กที่เชื่อมโยงกับองค์ประกอบ TLV ปัจจุบัน
ค่าที่ GetTag() จะแสดงผลสามารถใช้กับฟังก์ชันยูทิลิตีแท็ก (IsProfileTag(), IsContextTag(), ProfileIdFromTag() เป็นต้น) เพื่อระบุประเภทของแท็ก และเพื่อแยกค่าของช่องแท็กที่หลากหลาย
รายละเอียด | |
---|---|
การส่งคืน |
จำนวนเต็มที่ไม่มีเครื่องหมายซึ่งมีข้อมูลเกี่ยวกับแท็กที่เชื่อมโยงกับองค์ประกอบ TLV ปัจจุบัน
|
GetType
TLVType GetType( void ) const
เริ่มต้น
void Init( const TLVReader & aReader )
เริ่มต้น
void Init( const uint8_t *data, uint32_t dataLen )
เริ่มต้น
void Init( PacketBuffer *buf, uint32_t maxLen )
เริ่มต้นออบเจ็กต์ TLVReader เพื่ออ่านจาก PacketBuffer เดียว
การแยกวิเคราะห์จะเริ่มต้นที่ตำแหน่งเริ่มต้นของบัฟเฟอร์ (buf->DataStart()) และดำเนินการต่อจนกว่าจะสิ้นสุดข้อมูลในบัฟเฟอร์ (ตามที่ระบุด้วย buf->Datalen()) หรือมีการแยกวิเคราะห์ไบต์ maxLen
รายละเอียด | |||||
---|---|---|---|---|---|
พารามิเตอร์ |
|
เริ่มต้น
void Init( PacketBuffer *buf, uint32_t maxLen, bool allowDiscontiguousBuffers )
เริ่มต้นออบเจ็กต์ TLVReader เพื่ออ่านจาก PacketBuffers อย่างน้อย 1 รายการ
การแยกวิเคราะห์จะเริ่มต้นที่ตำแหน่งเริ่มต้นของบัฟเฟอร์เริ่มต้น (buf->DataStart()) หาก AllowDiscontiguousBuffers เป็นจริง เครื่องอ่านจะเลื่อนผ่านเชนบัฟเฟอร์ที่ลิงก์ด้วยตัวชี้ Next() การแยกวิเคราะห์จะดำเนินต่อไปจนกว่าจะใช้ข้อมูลทั้งหมดในห่วงโซ่บัฟเฟอร์ (ตามที่ระบุโดย buf->Datalen()) หรือ ไบต์ maxLen ได้รับการแยกวิเคราะห์แล้ว
รายละเอียด | |||||||
---|---|---|---|---|---|---|---|
พารามิเตอร์ |
|
ถัดไป
WEAVE_ERROR Next( void )
เลื่อนออบเจ็กต์ TLVReader ไปยังองค์ประกอบ TLV ถัดไปที่จะอ่าน
เมธอด Next() จะวางออบเจ็กต์ Reader ในองค์ประกอบถัดไปในการเข้ารหัส TLV ที่อยู่ในบริบทการบรรจุเดียวกัน โดยเฉพาะอย่างยิ่ง หากเครื่องอ่านอยู่ในตำแหน่งด้านนอกสุดของการเข้ารหัส TLV การเรียกใช้ Next() จะเลื่อนผู้อ่านไปยังองค์ประกอบบนสุดถัดไป หากวางเครื่องอ่านภายในองค์ประกอบคอนเทนเนอร์ TLV (โครงสร้าง อาร์เรย์ หรือเส้นทาง) การเรียกใช้ Next() จะเลื่อนผู้อ่านไปยังองค์ประกอบสมาชิกถัดไปของคอนเทนเนอร์
เนื่องจาก Next() จะบังคับการเคลื่อนไหวของผู้อ่านไปยังบริบทการบรรจุปัจจุบัน การเรียกใช้ Next() เมื่อจัดตำแหน่งผู้อ่านบนองค์ประกอบคอนเทนเนอร์จะเลื่อนไปข้างหน้าเหนือคอนเทนเนอร์ โดยจะข้ามองค์ประกอบสมาชิก (และสมาชิกของคอนเทนเนอร์ที่ซ้อนอยู่ทั้งหมด) ไปจนกระทั่งถึงองค์ประกอบแรกหลังคอนเทนเนอร์
เมื่อไม่มีองค์ประกอบเพิ่มเติมภายในบริบทการรวมหนึ่งๆ เมธอด Next() จะแสดงข้อผิดพลาด WEAVE_END_OF_TLV และตำแหน่งเครื่องอ่านจะไม่เปลี่ยนแปลง
รายละเอียด | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
แสดงผลค่า |
|
ถัดไป
WEAVE_ERROR Next( TLVType expectedType, uint64_t expectedTag )
เลื่อนออบเจ็กต์ TLVReader ไปยังเอลิเมนต์ TLV ถัดไปเพื่อให้อ่าน โดยยืนยันประเภทและแท็กขององค์ประกอบใหม่
เมธอด Next(TLVTypeรอการอนุมัติTag, uint64_tlatestTag) เป็นวิธีอำนวยความสะดวกที่มีลักษณะการทำงานเหมือนกับ Next() แต่ขณะเดียวกันก็ยืนยันว่าประเภทและแท็กขององค์ประกอบ TLV ใหม่ตรงกับอาร์กิวเมนต์ที่ระบุ
รายละเอียด | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
พารามิเตอร์ |
|
||||||||||||||||
แสดงผลค่า |
|
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
รายละเอียด | |||||
---|---|---|---|---|---|
พารามิเตอร์ |
|
||||
แสดงผลค่า |
|
ข้าม
WEAVE_ERROR Skip( void )
เลื่อนออบเจ็กต์ TLVReader ให้อยู่ต่อจากองค์ประกอบ TLV ปัจจุบันทันที
เมธอด Skip() จะวางออบเจ็กต์เครื่องอ่านหลังองค์ประกอบ TLV ปัจจุบัน ดังนั้นการเรียกไปยัง Next() ในภายหลังจะเลื่อนผู้อ่านไปยังองค์ประกอบต่อไปนี้ เช่นเดียวกับ Next() หากมีการกำหนดผู้อ่านไว้ที่องค์ประกอบคอนเทนเนอร์ในขณะที่มีการเรียกใช้ ระบบจะข้ามสมาชิกของคอนเทนเนอร์ หากเครื่องอ่านไม่ได้อยู่ในตำแหน่งขององค์ประกอบ ตำแหน่งก็จะไม่เปลี่ยนแปลง
รายละเอียด | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
แสดงผลค่า |
|
VerifyEndOfContainer
WEAVE_ERROR VerifyEndOfContainer( void )
ยืนยันว่าออบเจ็กต์ TVLReader อยู่ที่ส่วนท้ายของคอนเทนเนอร์ TLV
เมธอด VerifyEndOfContainer() จะยืนยันว่าไม่มีองค์ประกอบ TLV เพิ่มเติมให้อ่านในคอนเทนเนอร์ TLV ปัจจุบัน ซึ่งเป็นวิธีการอำนวยความสะดวกที่เทียบเท่ากับการเรียกใช้ Next() และตรวจสอบผลลัพธ์ WEAVE_END_OF_TLV
รายละเอียด | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
แสดงผลค่า |
|
ฟังก์ชันที่มีการป้องกัน
ClearElementState
void ClearElementState( void )
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 ปัจจุบันโดยการอ่านทับโดยไม่มีบัฟเฟอร์ปลายทาง
รายละเอียด | |||||
---|---|---|---|---|---|
แสดงผลค่า |
|
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 )