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)
|
|
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() แล้ว แอปพลิเคชันควรพิจารณาว่าโปรแกรมอ่านคอนเทนเนอร์ "de-initialized" และต้องไม่ใช้งานเพิ่มอีก
รายละเอียด | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
พารามิเตอร์ |
|
||||||||||||
ผลลัพธ์ |
|
DupBytes
WEAVE_ERROR DupBytes( uint8_t *& buf, uint32_t & dataLen )
จัดสรรและแสดงผลบัฟเฟอร์ที่มีค่าของไบต์ปัจจุบันหรือสตริง UTF8
วิธีนี้จะสร้างบัฟเฟอร์สำหรับและส่งสำเนาของข้อมูลที่เชื่อมโยงกับองค์ประกอบสตริงแบบไบต์หรือ UTF-8 ที่ตำแหน่งปัจจุบัน หน่วยความจำสำหรับบัฟเฟอร์จะได้รับมากับ Malloc() และผู้โทรควรเพิ่มพื้นที่ว่างด้วย (free()) เมื่อไม่จำเป็นต้องใช้อีกต่อไป
รายละเอียด | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
พารามิเตอร์ |
|
||||||||||||
ผลลัพธ์ |
|
DupString
WEAVE_ERROR DupString( char *& buf )
จัดสรรและแสดงผลบัฟเฟอร์ที่มีค่าสิ้นสุดของไบต์ปัจจุบันหรือสตริง UTF8
วิธีนี้จะสร้างบัฟเฟอร์สำหรับและข้อมูลที่เชื่อมโยงกับไบต์ข้อมูลที่เชื่อมโยงกับองค์ประกอบสตริง UTF-8 ที่ตำแหน่งปัจจุบัน และแสดงผลสำเนาข้อมูลที่มีการยุติสถานะ Null หน่วยความจำสำหรับบัฟเฟอร์จะได้รับมากับ 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
Init
void Init( const TLVReader & aReader )
Init
void Init( const uint8_t *data, uint32_t dataLen )
Init
void Init( PacketBuffer *buf, uint32_t maxLen )
เริ่มต้นออบเจ็กต์ TLVReader เพื่ออ่านจาก PacketBuffer รายการเดียว
การแยกวิเคราะห์จะเริ่มที่ตำแหน่งเริ่มต้นของบัฟเฟอร์ (buf->DataStart()) และต่อเนื่องไปจนสิ้นสุดข้อมูลในบัฟเฟอร์ (ตามที่ระบุด้วย buf->Datalen()) หรือแยกวิเคราะห์ไบต์ maxLen
รายละเอียด | |||||
---|---|---|---|---|---|
พารามิเตอร์ |
|
Init
void Init( PacketBuffer *buf, uint32_t maxLen, bool allowDiscontiguousBuffers )
เริ่มต้นออบเจ็กต์ TLVReader เพื่ออ่านจาก PacketBuffers อย่างน้อย 1 รายการ
การแยกวิเคราะห์จะเริ่มที่ตำแหน่งเริ่มต้นของบัฟเฟอร์เริ่มต้น (buf->DataStart()) หาก AllowDiscontiguousBuffers เป็น "จริง" ผู้อ่านจะเลื่อนไปตามเชนของบัฟเฟอร์ที่ลิงก์โดยตัวชี้ Next() การแยกวิเคราะห์จะดำเนินต่อไปจนกว่าจะใช้ข้อมูลทั้งหมดในห่วงโซ่บัฟเฟอร์ (ตามที่แสดงด้วย buf->Datalen()) หรือแยกวิเคราะห์ไบต์สูงสุดแล้ว
รายละเอียด | |||||||
---|---|---|---|---|---|---|---|
พารามิเตอร์ |
|
ถัดไป
WEAVE_ERROR Next( void )
เลื่อนออบเจ็กต์ TLVReader ไปยังองค์ประกอบ TLV ถัดไปที่จะอ่าน
เมธอด Next() จะวางออบเจ็กต์ผู้อ่านในองค์ประกอบถัดไปในการเข้ารหัส TLV ที่อยู่ในบริบทของการควบคุมเดียวกัน โดยเฉพาะอย่างยิ่ง หากเครื่องอ่านวางอยู่ที่ระดับด้านนอกของการเข้ารหัส TLV การเรียกใช้ Next() จะนำเครื่องอ่านไปยังองค์ประกอบที่อยู่บนสุดซึ่งอยู่ถัดไป หากเครื่องอ่านอยู่ในองค์ประกอบคอนเทนเนอร์ TLV (โครงสร้าง อาร์เรย์ หรือเส้นทาง) การเรียกใช้ Next() จะเลื่อนเครื่องอ่านไปยังองค์ประกอบสมาชิกถัดไปของคอนเทนเนอร์นั้น
เนื่องจาก Next() จะบังคับการเคลื่อนที่ของผู้อ่านไปยังบริบทการปิดกั้นปัจจุบัน การเรียกใช้ Next() เมื่อวางตำแหน่งผู้อ่านบนองค์ประกอบของคอนเทนเนอร์จะเลื่อนไปยังคอนเทนเนอร์เหนือคอนเทนเนอร์ โดยข้ามองค์ประกอบสมาชิก (และสมาชิกของคอนเทนเนอร์ที่ฝังอยู่) จนกว่าจะถึงองค์ประกอบแรกหลังคอนเทนเนอร์
เมื่อไม่มีองค์ประกอบเพิ่มเติมภายในบริบทของการควบคุมที่เฉพาะเจาะจง เมธอด Next() จะแสดงผลข้อผิดพลาด WEAVE_END_OF_TLV และตำแหน่งของผู้อ่านจะไม่เปลี่ยนแปลง
รายละเอียด | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
ผลลัพธ์ |
|
ถัดไป
WEAVE_ERROR Next( TLVType expectedType, uint64_t expectedTag )
เลื่อนออบเจ็กต์ TLVReader ไปยังองค์ประกอบ TLV ถัดไปที่จะอ่าน เพื่อยืนยันประเภทและแท็กขององค์ประกอบใหม่
เมธอด Next(TLVType expectedType, uint64_texpectedTag) เป็นเมธอดอำนวยความสะดวกที่มีลักษณะการทำงานเหมือนกับ Next() แต่จะยืนยันว่าประเภทและแท็กขององค์ประกอบ TLV ใหม่ตรงกับอาร์กิวเมนต์ที่ให้มา
รายละเอียด | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
พารามิเตอร์ |
|
||||||||||||||||
ผลลัพธ์ |
|
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
รายละเอียด | |||||
---|---|---|---|---|---|
พารามิเตอร์ |
|
||||
ผลลัพธ์ |
|
ข้าม
WEAVE_ERROR Skip( void )
เลื่อนออบเจ็กต์ TLVReader ไปข้างหน้าต่อจากองค์ประกอบ TLV ปัจจุบัน
เมธอด ข้าม() จะวางออบเจ็กต์ผู้อ่านหลังองค์ประกอบ 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 )