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)
เตรียมออบเจ็กต์ 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)
รับค่าขององค์ประกอบปัจจุบันเป็นตัวเลขทศนิยมทศนิยมที่มีความแม่นยํา 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
เริ่มต้นออบเจ็กต์ 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)

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

รับ NextBufferFunct

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 หรือแพลตฟอร์มที่บ่งบอกว่ามีข้อผิดพลาดเกิดขึ้นเพื่อป้องกันไม่ให้ฟังก์ชันสร้างข้อมูลที่ขอ

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

ข้อมูลแอป

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() แล้ว แอปพลิเคชันควรพิจารณาให้โปรแกรมอ่านคอนเทนเนอร์เริ่มทํางานแล้ว

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

ไบต์ข้อมูล

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

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

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

รายละเอียด
พารามิเตอร์
[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

สตริงซ้ําซ้อน

WEAVE_ERROR DupString(
  char *& buf
)

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

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

รายละเอียด
พารามิเตอร์
[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

คอนเทนเนอร์คอนเทนเนอร์

WEAVE_ERROR EnterContainer(
  TLVType & outerContainerType
)

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

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

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

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

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

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

ออกจากคอนเทนเนอร์

WEAVE_ERROR ExitContainer(
  TLVType outerContainerType
)

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

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

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

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

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

รับค่าขององค์ประกอบปัจจุบันเป็นตัวเลขทศนิยมทศนิยมที่มีความแม่นยํา 2 เท่า

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

แฮนเดิลการรับข้อมูล

uintptr_t GetBufHandle(
  void
) const 

ไบต์

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

ประเภท 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 วิธีนี้เป็นแนวทางการใช้งานที่มีจํากัดเมื่ออ่านข้อมูลจากบัฟเฟอร์ที่ไม่ต่อเนื่องกันหลายรายการ

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

ปรับความยาวได้

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

รายละเอียด
พารามิเตอร์
[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

รับแท็ก

uint64_t GetTag(
  void
) const 

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

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

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

ประเภท Get

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()) หาก allowDiscontigriesBuffers เป็นจริง ผู้อ่านจะเลื่อนผ่านกลุ่มของบัฟเฟอร์ที่ลิงก์โดยตัวชี้ Next() การแยกวิเคราะห์จะดําเนินไปจนกว่าข้อมูลทั้งหมดในเชนบัฟเฟอร์จะมีการใช้งาน (ตามที่แสดงโดย buf->Datalen()) หรือได้รับการแยกวิเคราะห์ไบต์ maxLen

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

ถัดไป

WEAVE_ERROR Next(
  void
)

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

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

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

เมื่อไม่มีองค์ประกอบเพิ่มเติมภายในบริบทการควบคุมนั้นๆ เมธอด Next() จะแสดงข้อผิดพลาด WEhave_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ตามที่คาดไว้Type, uint64_tตามที่คาดไว้Tag) คือวิธีการที่ใช้ลักษณะการทํางานเดียวกันกับ 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 (Structured Data, Array หรือ path) เมื่อมีการเรียก OpenContainer() ออบเจ็กต์ TLVReader ปัจจุบันต้องอยู่ในตําแหน่งบนองค์ประกอบคอนเทนเนอร์จึงจะอ่านได้ วิธีการนี้เป็นเพียงการอ้างอิงถึงผู้อ่านใหม่เท่านั้น ซึ่งจะเริ่มต้นเพื่ออ่านคอนเทนเนอร์ โปรแกรมอ่านนี้รู้จักกันในชื่อโปรแกรมอ่านคอนเทนเนอร์ ส่วนโปรแกรมอ่านที่เรียก OpenContainer() จะเรียกว่าโปรแกรมอ่านหลัก

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

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

โปรแกรมอ่านคอนเทนเนอร์จะรับช่วงคุณสมบัติของการกําหนดค่าต่างๆ จากเครื่องอ่านระดับบนสุด ได้แก่

  • รหัสโปรไฟล์โดยนัย (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

ยืนยัน EnderContainer

WEAVE_ERROR VerifyEndOfContainer(
  void
)

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

เมธอด VerifyEndOfContainer() จะยืนยันว่าไม่มีเอลิเมนต์ TLV ที่จะอ่านในคอนเทนเนอร์ TLV ปัจจุบันอีกต่อไป นี่คือวิธีใหม่ที่เทียบเท่ากับการเรียกใช้ Next() และตรวจหาค่าการคืนสินค้า WEhave_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

ฟังก์ชันที่ได้รับการปกป้อง

ล้างองค์ประกอบองค์ประกอบ

void ClearElementState(
  void
)

ล้างสถานะ TLVReader

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

ประเภทองค์ประกอบ

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

ข้ามไปที่คอนเทนเนอร์

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
)