nl:: Weave:: TLV:: TLVReader
#include <src/lib/core/WeaveTLV.h>
จัดเตรียมโปรแกรมแยกวิเคราะห์ที่มีประสิทธิภาพของหน่วยความจําสําหรับข้อมูลที่เข้ารหัสในรูปแบบ Weave TLV
สรุป
TLVReader ใช้โปรแกรมแยกวิเคราะห์ “แบบพุล” แบบส่งต่อเท่านั้นสําหรับข้อมูล TLV ของ Weave ออบเจ็กต์ TLVReader ทํางานเป็นเคอร์เซอร์ที่ใช้สําหรับทําซ้ําองค์ประกอบ TLV ในลําดับและตีความเนื้อหาได้ เมื่อวางในองค์ประกอบ แอปพลิเคชันจะเรียกใช้เมธอด Get() ของผู้อ่านเพื่อค้นหาประเภทและแท็กขององค์ประกอบปัจจุบัน และเพื่อดึงค่าที่เกี่ยวข้องได้ เมธอด Next() ของผู้อ่านจะใช้เพื่อเลื่อนระดับจากเอลิเมนต์หนึ่งไปยังเอลิเมนต์อื่นๆ
ออบเจ็กต์ TLVReader จะอยู่ที่ตําแหน่งก่อน ใน หรือหลังองค์ประกอบ TLV เสมอ เมื่อเริ่มต้นเป็นครั้งแรก ระบบจะวาง TLVReader ไว้หน้าองค์ประกอบแรกของการเข้ารหัส เพื่อเริ่มอ่าน แอปพลิเคชันต้องเรียกเมธอด Next() ครั้งแรกเพื่อกําหนดตําแหน่งผู้อ่านในองค์ประกอบแรก เมื่อพบองค์ประกอบคอนเทนเนอร์ คุณจะใช้อาร์เรย์หรือเส้นทางเมธอด OpenContainer() หรือ EnterContainer() เพื่อทําซ้ําผ่านเนื้อหาของคอนเทนเนอร์ได้
เมื่อผู้อ่านไปถึงจุดสิ้นสุดของการเข้ารหัส TLV หรือองค์ประกอบสุดท้ายในคอนเทนเนอร์ จะส่งสัญญาณแอปพลิเคชันโดยการส่งคืนข้อผิดพลาด WEhave_END_OF_TLV จากเมธอด Next() ผู้อ่านจะส่งคืน WEhave_END_OF_TLV ต่อไปจนกว่าจะเริ่มต้นอีกครั้ง หรือออกจากคอนเทนเนอร์ปัจจุบัน (ผ่าน CloseContainer() / ExitContainer())
ออบเจ็กต์ TLVReader สามารถแยกวิเคราะห์ข้อมูลจากบัฟเฟอร์อินพุตแบบคงที่ได้โดยตรงจากเชนของ PacketBuffer อย่างน้อย 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)
|
WEWE_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)
|
จัดสรรและแสดงผลบัฟเฟอร์ที่มีค่าสิ้นสุด Null ของสตริงไบต์หรือ 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)
|
รับค่าขององค์ประกอบปัจจุบันเป็นตัวเลขทศนิยมทศนิยมที่มีความแม่นยํา 2 เท่า
|
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)
|
ประเภทสาธารณะ
รับ NextBufferFunct
WEAVE_ERROR(* GetNextBufferFunct)(TLVReader &reader, uintptr_t &bufHandle, const uint8_t *&bufStart, uint32_t &bufLen)
ฟังก์ชันที่ใช้เพื่อดึงข้อมูล TLV เพิ่มเติมที่จะแยกวิเคราะห์ได้
ฟังก์ชันประเภทนี้ใช้เพื่อป้อนข้อมูลอินพุตไปยัง TLVReader เมื่อเรียกใช้ ฟังก์ชันนี้จะต้องให้ข้อมูลเพิ่มเติมสําหรับผู้อ่านเพื่อแยกวิเคราะห์หรือส่งสัญญาณแจ้งผู้อ่านว่าไม่มีข้อมูลเพิ่มเติมอีกแล้ว
รายละเอียด | |||||||||
---|---|---|---|---|---|---|---|---|---|
พารามิเตอร์ |
|
||||||||
มูลค่าการคืนสินค้า |
|
แอตทริบิวต์สาธารณะ
ข้อมูลแอป
void * AppData
ช่องตัวชี้ที่สามารถใช้กับข้อมูลเฉพาะแอปพลิเคชัน
ดาวน์โหลด NextBuffer
GetNextBufferFunct GetNextBuffer
ตัวชี้ไปยังฟังก์ชันที่จะสร้างข้อมูลอินพุตสําหรับออบเจ็กต์ TLVReader
หากตั้งค่าเป็น "ค่าว่าง" (ค่าเริ่มต้น) ผู้อ่านจะเข้าใจว่าไม่มีข้อมูลอินพุตเพิ่มเติมอีก
แอปพลิเคชันจะตั้งค่า NextNextBuffer ได้ทุกเมื่อ แต่โดยทั่วไปมักจะกําหนดไว้เมื่อผู้อ่านเริ่มต้น
ดูข้อมูลเพิ่มเติมเกี่ยวกับการใช้งานฟังก์ชัน GetNextBuffer ได้ในคําจํากัดความของประเภท GetNextBufferFunct
รหัสโปรไฟล์โดยนัย
uint32_t ImplicitProfileId
รหัสโปรไฟล์ที่จะใช้สําหรับแท็กโปรไฟล์ที่เข้ารหัสในรูปแบบโดยนัย
เมื่อผู้อ่านพบแท็กเฉพาะโปรไฟล์ที่เข้ารหัสในรูปแบบโดยนัย ก็จะใช้ค่าของพร็อพเพอร์ตี้ ImplicitProfileId
เป็นรหัสโปรไฟล์ที่สมมติสําหรับแท็ก
ระบบจะตั้งค่าพร็อพเพอร์ตี้ ImplicitProfileId
เป็น kProfileIdNotSpecified โดยค่าเริ่มต้น เมื่อถอดรหัส TLV ที่มีแท็กที่เข้ารหัสแบบโดยนัย แอปพลิเคชันต้องตั้งค่า ImplicitProfileId
ก่อนที่จะอ่านองค์ประกอบ TLV ที่มีแท็กดังกล่าว โดยปกติแล้วรหัสโปรไฟล์ที่เหมาะสมจะขึ้นอยู่กับบริบทของแอปพลิเคชันหรือโปรโตคอลที่กําลังพูด
หากพบแท็กที่เข้ารหัสโดยนัยขณะที่ตั้งค่า ImplicitProfileId
เป็น kProfileIdNotSpecified ผู้อ่านจะแสดงข้อผิดพลาด WEhave_ERROR_UNKNOWN_IMPLICIT_TLV_TAG
แอตทริบิวต์ที่มีการป้องกัน
mBufEnd
const uint8_t * mBufEnd
แฮนเดิลของ mBuf
uintptr_t mBufHandle
ประเภท mContainer
TLVType mContainerType
mControlByte
uint16_t mControlByte
mElemLenOrVal
uint64_t mElemLenOrVal
แท็ก Elm
uint64_t mElemTag
mLenRead
uint32_t mLenRead
mMaxLen
uint32_t mMaxLen
mReadPoint
const uint8_t * mReadPoint
ฟังก์ชันสาธารณะ
ปิดคอนเทนเนอร์
WEAVE_ERROR CloseContainer( TLVReader & containerReader )
อ่านคอนเทนเนอร์ TLV ให้เสร็จสิ้นหลังจากเรียกใช้ OpenContainer()
เมธอด CloseContainer() จะกู้คืนสถานะของออบเจ็กต์ TLVReader ระดับบนสุดหลังจากมีการเรียกใช้ OpenContainer() การเรียกแอปพลิเคชัน OpenContainer() ทุกครั้งจะต้องมีการเรียกที่สอดคล้องกันไปยัง CloseContainer() เพื่อส่งการอ้างอิงไปยังโปรแกรมอ่านคอนเทนเนอร์เดียวกันไปยังทั้ง 2 วิธี
เมื่อ CloseContainer() แสดงผล ระบบจะวางตําแหน่งผู้อ่านระดับบนสุดไว้หน้าองค์ประกอบแรกที่อยู่หลังคอนเทนเนอร์ จากจุดนี้ แอปพลิเคชันสามารถใช้เมธอด Next() เพื่อเลื่อนไปยังองค์ประกอบที่เหลือได้
แอปพลิเคชันสามารถเรียกใช้การปิด CloseContainer() บนเครื่องอ่านระดับบนสุดได้ทุกเมื่อ ไม่ว่าระบบจะอ่านองค์ประกอบทั้งหมดในคอนเทนเนอร์ที่เกี่ยวข้องแล้วก็ตาม หลังจากเรียก CloseContainer() แล้ว แอปพลิเคชันควรพิจารณาให้โปรแกรมอ่านคอนเทนเนอร์เริ่มทํางานแล้ว
รายละเอียด | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
พารามิเตอร์ |
|
||||||||||||
มูลค่าการคืนสินค้า |
|
ไบต์ข้อมูล
WEAVE_ERROR DupBytes( uint8_t *& buf, uint32_t & dataLen )
จัดสรรและแสดงผลบัฟเฟอร์ที่มีค่าของสตริงปัจจุบันหรือสตริง UTF8
วิธีนี้จะสร้างบัฟเฟอร์สําหรับ และส่งคืนสําเนาข้อมูลที่เชื่อมโยงกับองค์ประกอบสตริงแบบ UTF หรือ UTF-8 ที่ตําแหน่งปัจจุบัน หน่วยความจําสําหรับบัฟเฟอร์จะได้รับด้วย Malloc() และควรมีการเพิ่มพื้นที่ว่างด้วยฟรี() โดยผู้โทรเมื่อไม่จําเป็นต้องใช้อีกต่อไป
รายละเอียด | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
พารามิเตอร์ |
|
||||||||||||
มูลค่าการคืนสินค้า |
|
สตริงซ้ําซ้อน
WEAVE_ERROR DupString( char *& buf )
จัดสรรและแสดงผลบัฟเฟอร์ที่มีค่าสิ้นสุด Null ของสตริงไบต์หรือ UTF8 ปัจจุบัน
วิธีนี้จะสร้างบัฟเฟอร์สําหรับ และส่งคืนสําเนาที่สิ้นสุดค่าว่างของข้อมูลที่เชื่อมโยงกับองค์ประกอบสตริงแบบไบต์หรือ UTF-8 ที่ตําแหน่งปัจจุบัน หน่วยความจําสําหรับบัฟเฟอร์จะได้รับด้วย Malloc() และควรมีการเพิ่มพื้นที่ว่างด้วยฟรี() โดยผู้โทรเมื่อไม่จําเป็นต้องใช้อีกต่อไป
รายละเอียด | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
พารามิเตอร์ |
|
||||||||||||
มูลค่าการคืนสินค้า |
|
คอนเทนเนอร์คอนเทนเนอร์
WEAVE_ERROR EnterContainer( TLVType & outerContainerType )
เตรียมออบเจ็กต์ TLVReader สําหรับอ่านสมาชิกขององค์ประกอบคอนเทนเนอร์ TLV
เมธอด EnterContainer() จะเตรียมออบเจ็กต์ TLVReader ปัจจุบันเพื่อเริ่มอ่านองค์ประกอบสมาชิกของคอนเทนเนอร์ TLV (โครงสร้าง อาร์เรย์ หรือเส้นทาง) สําหรับการเรียกแอปพลิเคชัน EnterContainer() ทุกครั้งต้องเรียกใช้ ExitContainer() ที่เกี่ยวข้อง
เมื่อมีการเรียก EnterContainer() อ็อบเจ็กต์ TLVReader ต้องอยู่บนองค์ประกอบคอนเทนเนอร์ที่จะอ่าน เมธอดจะใช้เป็นอาร์กิวเมนต์อ้างอิงค่า TLVType ซึ่งจะใช้เพื่อบันทึกบริบทของผู้อ่านขณะอ่านคอนเทนเนอร์
เมื่อเมธอด EnterContainer() แสดงผล ผู้อ่านจะวางตําแหน่งทันทีก่อนสมาชิกคนแรกของคอนเทนเนอร์ การเรียกใช้ Next() ซ้ําจะส่งต่อผู้อ่านผ่านสมาชิกของคอลเล็กชันจนกว่าจะถึงตอนจบ ซึ่งผู้อ่านจะส่งคืน WEhave_END_OF_TLV
เมื่อแอปพลิเคชันอ่านคอนเทนเนอร์เสร็จแล้ว ก็จะอ่านองค์ประกอบที่อยู่หลังคอนเทนเนอร์ได้ต่อไปโดยเรียกเมธอด 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 )
รับค่าขององค์ประกอบปัจจุบันเป็นตัวเลขทศนิยมทศนิยมที่มีความแม่นยํา 2 เท่า
รายละเอียด | |||||
---|---|---|---|---|---|
พารามิเตอร์ |
|
||||
มูลค่าการคืนสินค้า |
|
แฮนเดิลการรับข้อมูล
uintptr_t GetBufHandle( void ) const
ไบต์
WEAVE_ERROR GetBytes( uint8_t *buf, uint32_t bufSize )
รับค่าขององค์ประกอบสตริงไบต์หรือ UTF8 ปัจจุบัน
หากต้องการระบุขนาดบัฟเฟอร์ที่ต้องป้อน ให้เรียกเมธอด GetLength() ก่อนโทร GetBytes()
รายละเอียด | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
พารามิเตอร์ |
|
||||||||||
มูลค่าการคืนสินค้า |
|
ประเภท GetContainer
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 ปัจจุบัน kTLVControlByte_NotSpecified จะแสดงผลหากผู้อ่านไม่ได้วางตําแหน่งในองค์ประกอบ
|
GetDataPtr
WEAVE_ERROR GetDataPtr( const uint8_t *& data )
รับตัวชี้ไปยังไบต์ที่เข้ารหัสเริ่มต้นขององค์ประกอบสตริง TLV ไบต์หรือ UTF8
เมธอดนี้จะแสดงค่าสตริงที่เข้ารหัสแบบชี้โดยตรงภายในบัฟเฟอร์อินพุตที่สําคัญ หากต้องการประสบความสําเร็จ เมธอดจําเป็นต้องให้ค่าของสตริงทั้งหมดแสดงอยู่ในบัฟเฟอร์เดียว ไม่เช่นนั้น เมธอดจะส่งคืน WEhave_ERROR_TLV_UNDERRUN วิธีนี้เป็นแนวทางการใช้งานที่มีจํากัดเมื่ออ่านข้อมูลจากบัฟเฟอร์ที่ไม่ต่อเนื่องกันหลายรายการ
รายละเอียด | |||||||||
---|---|---|---|---|---|---|---|---|---|
พารามิเตอร์ |
|
||||||||
มูลค่าการคืนสินค้า |
|
ปรับความยาวได้
uint32_t GetLength( void ) const
แสดงผลความยาวของข้อมูลที่เชื่อมโยงกับองค์ประกอบ TLV ปัจจุบัน
ความยาวข้อมูลจะใช้กับองค์ประกอบของประเภทสตริง UTF8 หรือสตริงไบต์เท่านั้น สําหรับสตริง UTF8 ค่าที่แสดงผลคือจํานวนไบต์ในสตริง ไม่ใช่จํานวนอักขระ
รายละเอียด | |
---|---|
การคืนสินค้า |
ความยาว (หน่วยเป็นไบต์) ของข้อมูลที่เชื่อมโยงกับองค์ประกอบ TLV ปัจจุบัน หรือ 0 หากองค์ประกอบปัจจุบันไม่ใช่สตริง UTF8 หรือสตริงไบต์ หรือตัวอ่านไม่อยู่บนองค์ประกอบ
|
อ่านความยาว
uint32_t GetLengthRead( void ) const
แสดงจํานวนไบต์ทั้งหมดที่อ่านตั้งแต่เริ่มต้นผู้อ่าน
รายละเอียด | |
---|---|
การคืนสินค้า |
จํานวนไบต์ทั้งหมดที่อ่านตั้งแต่เริ่มต้นผู้อ่าน
|
รับ ReadPoint
const uint8_t * GetReadPoint( void ) const
รับคะแนนในบัฟเฟอร์อินพุตที่สําคัญซึ่งตรงกับตําแหน่งปัจจุบันของผู้อ่าน
รายละเอียด | |
---|---|
การคืนสินค้า |
ตัวชี้ไปยังบัฟเฟอร์อินพุตพื้นฐานที่สอดคล้องกับตําแหน่งปัจจุบันของผู้อ่าน
|
ความยาวที่เหลืออยู่
uint32_t GetRemainingLength( void ) const
แสดงจํานวนไบต์ทั้งหมดที่อ่านได้จนกว่าความยาวการอ่านจะถึงขีดจํากัดสูงสุด
รายละเอียด | |
---|---|
การคืนสินค้า |
จํานวนไบต์ทั้งหมดที่อ่านได้จนกว่าความยาวสูงสุดจะอ่านได้
|
สตริงสตริง
WEAVE_ERROR GetString( char *buf, uint32_t bufSize )
รับค่าขององค์ประกอบสตริงปัจจุบันหรือสตริง UTF8 เป็นสตริงที่สิ้นสุดและไม่มีข้อมูล
หากต้องการระบุขนาดบัฟเฟอร์อินพุตที่จําเป็น ให้เรียกใช้เมธอด GetLength() ก่อนที่จะเรียก GetBytes() บัฟเฟอร์การป้อนข้อมูลควรมีขนาดใหญ่กว่าความยาวของสตริงอย่างน้อย 1 ไบต์เพื่อรองรับอักขระ Null
รายละเอียด | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
พารามิเตอร์ |
|
||||||||||
มูลค่าการคืนสินค้า |
|
รับแท็ก
uint64_t GetTag( void ) const
แสดงผลแท็กที่เชื่อมโยงกับองค์ประกอบ TLV ปัจจุบัน
ค่าที่ GetTag() แสดงผลจะใช้กับฟังก์ชันยูทิลิตีของแท็ก (IsProfileTag(), IsContextTag(), ProfileIdFromTag() ฯลฯ) เพื่อระบุประเภทของแท็กและดึงค่าของช่องแท็กต่างๆ
รายละเอียด | |
---|---|
การคืนสินค้า |
จํานวนเต็มที่ไม่มีลายเซ็นที่มีข้อมูลเกี่ยวกับแท็กที่เชื่อมโยงกับองค์ประกอบ TLV ปัจจุบัน
|
ประเภท Get
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()) หาก allowDiscontigriesBuffers เป็นจริง ผู้อ่านจะเลื่อนผ่านกลุ่มของบัฟเฟอร์ที่ลิงก์โดยตัวชี้ Next() การแยกวิเคราะห์จะดําเนินไปจนกว่าข้อมูลทั้งหมดในเชนบัฟเฟอร์จะมีการใช้งาน (ตามที่แสดงโดย buf->Datalen()) หรือได้รับการแยกวิเคราะห์ไบต์ maxLen
รายละเอียด | |||||||
---|---|---|---|---|---|---|---|
พารามิเตอร์ |
|
ถัดไป
WEAVE_ERROR Next( void )
เลื่อนวัตถุ TLVReader ไปยังองค์ประกอบ TLV ถัดไปที่จะอ่าน
เมธอด Next() จะวางออบเจ็กต์ผู้อ่านในองค์ประกอบถัดไปในการเข้ารหัส TLV ซึ่งอยู่ในบริบทการควบคุมเดียวกัน โดยเฉพาะอย่างยิ่งหากตัวผู้อ่านอยู่ในตําแหน่งที่ค่อนข้างสูงของการเข้ารหัส TLV การเรียกใช้ Next() จะพาผู้อ่านไปยังองค์ประกอบด้านบนสุดด้านบนสุด หากวางตําแหน่งผู้อ่านภายในองค์ประกอบคอนเทนเนอร์ TLV (โครงสร้าง อาร์เรย์ หรือเส้นทาง) การเรียกใช้ Next() จะส่งต่อผู้อ่านไปยังองค์ประกอบสมาชิกถัดไปของคอนเทนเนอร์
เนื่องจาก Next() จํากัดการเคลื่อนไหวของผู้อ่านให้มีผลกับบริบทที่มีอยู่ในปัจจุบัน โดยเรียก Next() เมื่อวางตําแหน่งองค์ประกอบบนองค์ประกอบคอนเทนเนอร์ เหนือ องค์ประกอบจะเลื่อนคอนเทนเนอร์ออกจนคอนเทนเนอร์สร้างจนคอนเทนเนอร์ทั้งหมดไปถึงคอนเทนเนอร์จนกระทั่งสมาชิกวางองค์ประกอบจนกระทั่งคอนเทนเนอร์นําไปถึงคอนเทนเนอร์ (คอนเทนเนอร์) จะทริกเกอร์คอนเทนเนอร์จนกระทั่งสมาชิกเลื่อนองค์ประกอบจนกระทั่งคอนเทนเนอร์ไปหลังองค์ประกอบทั้งหมดจนกระทั่งคอนเทนเนอร์เลื่อนไปยังสมาชิก
เมื่อไม่มีองค์ประกอบเพิ่มเติมภายในบริบทการควบคุมนั้นๆ เมธอด Next() จะแสดงข้อผิดพลาด WEhave_END_OF_TLV และตําแหน่งของผู้อ่านจะไม่เปลี่ยนแปลง
รายละเอียด | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
มูลค่าการคืนสินค้า |
|
ถัดไป
WEAVE_ERROR Next( TLVType expectedType, uint64_t expectedTag )
เลื่อนออบเจ็กต์ TLVReader ไปยังองค์ประกอบ TLV ถัดไปที่จะอ่าน โดยยืนยันประเภทและแท็กขององค์ประกอบใหม่
เมธอด Next(TLVTypeตามที่คาดไว้Type, uint64_tตามที่คาดไว้Tag) คือวิธีการที่ใช้ลักษณะการทํางานเดียวกันกับ Next() แต่จะต้องยืนยันว่าประเภทและแท็กขององค์ประกอบ TLV ใหม่ตรงกับอาร์กิวเมนต์ที่ระบุ
รายละเอียด | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
พารามิเตอร์ |
|
||||||||||||||||
มูลค่าการคืนสินค้า |
|
OpenContainer
WEAVE_ERROR OpenContainer( TLVReader & containerReader )
เริ่มต้นออบเจ็กต์ TLVReader ใหม่สําหรับอ่านสมาชิกขององค์ประกอบคอนเทนเนอร์ TLV
เมธอด OpenContainer() จะเริ่มต้นออบเจ็กต์ TLVReader ใหม่สําหรับอ่านองค์ประกอบของสมาชิกของคอนเทนเนอร์ TLV (Structured Data, Array หรือ path) เมื่อมีการเรียก OpenContainer() ออบเจ็กต์ TLVReader ปัจจุบันต้องอยู่ในตําแหน่งบนองค์ประกอบคอนเทนเนอร์จึงจะอ่านได้ วิธีการนี้เป็นเพียงการอ้างอิงถึงผู้อ่านใหม่เท่านั้น ซึ่งจะเริ่มต้นเพื่ออ่านคอนเทนเนอร์ โปรแกรมอ่านนี้รู้จักกันในชื่อโปรแกรมอ่านคอนเทนเนอร์ ส่วนโปรแกรมอ่านที่เรียก OpenContainer() จะเรียกว่าโปรแกรมอ่านหลัก
เมื่อเมธอด OpenContainer() แสดงผล ระบบจะวางตําแหน่งโปรแกรมอ่านคอนเทนเนอร์ไว้หน้าสมาชิกคนแรกของคอนเทนเนอร์ทันที การเรียกใช้ Next() ในโปรแกรมอ่านคอนเทนเนอร์จะเลื่อนผ่านสมาชิกของคอลเล็กชันไปจนจนกว่าจะถึงเวลาสุดท้าย ซึ่งผู้อ่านจะส่งคืน WEhave_END_OF_TLV
ในขณะที่เครื่องอ่านคอนเทนเนอร์เปิดอยู่ แอปพลิเคชันต้องไม่เรียกหรือเปลี่ยนสถานะของผู้อ่านหลัก เมื่อแอปพลิเคชันอ่านโปรแกรมอ่านคอนเทนเนอร์เสร็จแล้ว แอปพลิเคชันจะต้องปิดโปรแกรมโดยเรียก CloseContainer() บนโปรแกรมอ่านหลัก จากนั้นส่งโปรแกรมอ่านคอนเทนเนอร์เป็นอาร์กิวเมนต์ แอปพลิเคชันอาจปิดโปรแกรมอ่านคอนเทนเนอร์ได้ทุกเมื่อ โดยมีหรือไม่มีการอ่านองค์ประกอบทั้งหมดที่มีอยู่ในคอนเทนเนอร์ที่เกี่ยวข้อง หลังจากปิดโปรแกรมอ่านคอนเทนเนอร์แล้ว แอปพลิเคชันอาจยังคงใช้โปรแกรมอ่านระดับบนสุดต่อไป
โปรแกรมอ่านคอนเทนเนอร์จะรับช่วงคุณสมบัติของการกําหนดค่าต่างๆ จากเครื่องอ่านระดับบนสุด ได้แก่
- รหัสโปรไฟล์โดยนัย (ImplicitProfileId)
- ตัวระบุข้อมูลแอปพลิเคชัน (AppData)
- ตัวชี้ฟังก์ชัน GetNextBuffer
รายละเอียด | |||||
---|---|---|---|---|---|
พารามิเตอร์ |
|
||||
มูลค่าการคืนสินค้า |
|
ข้าม
WEAVE_ERROR Skip( void )
เลื่อนไปยังวัตถุ TLVReader โดยให้อยู่หลังองค์ประกอบ TLV ปัจจุบัน
เมธอด Skip() จะวางตําแหน่งออบเจ็กต์ของผู้อ่านทันทีหลังองค์ประกอบ TLV ปัจจุบัน ดังนั้นการเรียกไปยัง Next() ในภายหลังจะส่งต่อผู้อ่านไปยังองค์ประกอบต่อไปนี้ เช่นเดียวกับ Next() หากวางตําแหน่งของผู้อ่านไว้ในองค์ประกอบคอนเทนเนอร์ขณะที่เรียกใช้ ระบบจะข้ามสมาชิกของคอนเทนเนอร์ หากวางตําแหน่งผู้อ่านไว้ในองค์ประกอบใดตําแหน่งหนึ่ง ตําแหน่งจะไม่เปลี่ยนแปลง
รายละเอียด | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
มูลค่าการคืนสินค้า |
|
ยืนยัน EnderContainer
WEAVE_ERROR VerifyEndOfContainer( void )
ยืนยันว่าออบเจ็กต์ TVLReader อยู่ที่ตอนท้ายของคอนเทนเนอร์ TLV
เมธอด VerifyEndOfContainer() จะยืนยันว่าไม่มีเอลิเมนต์ TLV ที่จะอ่านในคอนเทนเนอร์ TLV ปัจจุบันอีกต่อไป นี่คือวิธีใหม่ที่เทียบเท่ากับการเรียกใช้ Next() และตรวจหาค่าการคืนสินค้า WEhave_END_OF_TLV
รายละเอียด | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
มูลค่าการคืนสินค้า |
|
ฟังก์ชันที่ได้รับการปกป้อง
ล้างองค์ประกอบองค์ประกอบ
void ClearElementState( void )
ประเภทองค์ประกอบ
TLVElementType ElementType( void ) const
นี่เป็นเมธอดส่วนตัวที่แสดง TLVElementType จาก mControlByte
ข้อมูล
WEAVE_ERROR EnsureData( WEAVE_ERROR noDataErr )
ความยาวองค์ประกอบขององค์ประกอบ
WEAVE_ERROR GetElementHeadLength( uint8_t & elemHeadBytes ) const
วิธีนี้เป็นวิธีส่วนตัวในการคํานวณความยาวของส่วนหัวขององค์ประกอบ TLV
คอนเทนเนอร์เปิด
bool IsContainerOpen( void ) const
อ่านข้อมูล
WEAVE_ERROR ReadData( uint8_t *buf, uint32_t len )
องค์ประกอบสําหรับอ่าน
WEAVE_ERROR ReadElement( void )
อ่านแท็ก
uint64_t ReadTag( TLVTagControl tagControl, const uint8_t *& p )
เปิด SetContainer
void SetContainerOpen( bool aContainerOpen )
ข้ามข้อมูล
WEAVE_ERROR SkipData( void )
ข้ามข้อมูลที่อยู่ใน TLV ปัจจุบันด้วยการอ่านโดยไม่ใช้บัฟเฟอร์ปลายทาง
รายละเอียด | |||||
---|---|---|---|---|---|
มูลค่าการคืนสินค้า |
|
ข้ามไปที่คอนเทนเนอร์
WEAVE_ERROR SkipToEndOfContainer( void )
ยืนยันองค์ประกอบ
WEAVE_ERROR VerifyElement( void )
ฟังก์ชันแบบคงที่แบบคงที่
ความล้มเหลวในการรับสินค้าครั้งถัดไป
WEAVE_ERROR FailGetNextBuffer( TLVReader & reader, uintptr_t & bufHandle, const uint8_t *& bufStart, uint32_t & bufLen )
รับ GetPacketBuffer
WEAVE_ERROR GetNextPacketBuffer( TLVReader & reader, uintptr_t & bufHandle, const uint8_t *& bufStart, uint32_t & bufLen )