nl::Weave::TLV::TLVReader

#include <src/lib/core/WeaveTLV.h>

Cung cấp một trình phân tích cú pháp bộ nhớ hiệu quả cho dữ liệu được mã hoá theo định dạng TLV của Weave.

Tóm tắt

TLVReader triển khai một trình phân tích cú pháp "kiểu kéo" chỉ chuyển tiếp cho dữ liệu TLV của Weave. Đối tượng TLVReader hoạt động như một con trỏ có thể dùng để lặp lại một chuỗi các phần tử TLV và diễn giải nội dung của các phần tử đó. Khi được đặt trên một phần tử, các ứng dụng có thể thực hiện lệnh gọi đến phương thức Get() của trình đọc để truy vấn thẻ và loại phần tử hiện tại, cũng như để trích xuất mọi giá trị có liên quan. Phương thức Next() của trình đọc dùng để chuyển từ phần tử này sang phần tử khác.

Đối tượng TLVReader luôn được đặt ở trước, trên hoặc sau một phần tử TLV. Khi được khởi chạy lần đầu tiên, TLVReader được đặt ngay trước phần tử đầu tiên của quy trình mã hoá. Để bắt đầu đọc, ứng dụng phải thực hiện lệnh gọi ban đầu đến phương thức Next() để định vị trình đọc trên phần tử đầu tiên. Khi một phần tử vùng chứa gặp một cấu trúc, một mảng hoặc đường dẫn, bạn có thể sử dụng phương thức OpenContainer() hoặc EnterContainer() để lặp lại nội dung của vùng chứa.

Khi đến cuối quá trình mã hoá TLV hoặc phần tử cuối cùng trong vùng chứa, trình đọc sẽ báo hiệu cho ứng dụng bằng cách trả về lỗi WEAVE_END_OF_TLV từ phương thức Next(). Người đọc sẽ tiếp tục trả về WEAVE_END_OF_TLV cho đến khi được khởi chạy lại hoặc vùng chứa hiện tại bị thoát (thông qua CloseContainer() / ExitContainer()).

Đối tượng TLVReader có thể phân tích cú pháp dữ liệu trực tiếp từ một vùng đệm đầu vào cố định hoặc từ một chuỗi gồm một hoặc nhiều PacketBuffers. Ngoài ra, các ứng dụng có thể cung cấp hàm GetNextBuffer để cấp dữ liệu cho trình đọc từ một nguồn tuỳ ý, chẳng hạn như một ổ cắm hoặc cổng nối tiếp.

Tính kế thừa

Lớp học con đã biết trực tiếp:
  nl::Weave::Profiles::DataManagement_Current::CircularEventReader
  nl::Weave::TLV::CircularTLVReader

Loại công khai

GetNextBufferFunct)(TLVReader &reader, uintptr_t &bufHandle, const uint8_t *&bufStart, uint32_t &bufLen) WEAVE_ERROR(*
Một hàm có thể dùng để truy xuất thêm dữ liệu TLV cần được phân tích cú pháp.

Các thuộc tính công khai

AppData
void *
Trường con trỏ có thể dùng cho dữ liệu dành riêng cho ứng dụng.
GetNextBuffer
Con trỏ trỏ đến một hàm sẽ tạo dữ liệu đầu vào cho đối tượng TLVReader.
ImplicitProfileId
uint32_t
Id hồ sơ được sử dụng cho các thẻ hồ sơ được mã hoá dưới dạng ngầm ẩn.

Thuộc tính được bảo vệ

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 *

Hàm công khai

CloseContainer(TLVReader & containerReader)
Hoàn tất việc đọc vùng chứa TLV sau lệnh gọi OpenContainer().
DupBytes(uint8_t *& buf, uint32_t & dataLen)
Phân bổ và trả về một vùng đệm chứa giá trị của chuỗi UTF8 hoặc byte hiện tại.
DupString(char *& buf)
Phân bổ và trả về một vùng đệm chứa giá trị kết thúc rỗng của chuỗi byte hoặc UTF8 hiện tại.
EnterContainer(TLVType & outerContainerType)
Chuẩn bị đối tượng TLVReader để đọc các thành phần của phần tử vùng chứa TLV.
ExitContainer(TLVType outerContainerType)
Hoàn tất việc đọc vùng chứa TLV và chuẩn bị đối tượng TLVReader để đọc các phần tử sau vùng chứa.
Get(bool & v)
Lấy giá trị của phần tử hiện tại dưới dạng loại bool.
Get(int8_t & v)
Lấy giá trị của phần tử hiện tại dưới dạng số nguyên 8 bit có dấu.
Get(int16_t & v)
Lấy giá trị của phần tử hiện tại dưới dạng số nguyên 16 bit có dấu.
Get(int32_t & v)
Lấy giá trị của phần tử hiện tại dưới dạng số nguyên 32 bit có dấu.
Get(int64_t & v)
Lấy giá trị của phần tử hiện tại dưới dạng số nguyên 64 bit có dấu.
Get(uint8_t & v)
Lấy giá trị của phần tử hiện tại dưới dạng số nguyên 8 bit chưa ký.
Get(uint16_t & v)
Lấy giá trị của phần tử hiện tại dưới dạng số nguyên 16 bit chưa ký.
Get(uint32_t & v)
Lấy giá trị của phần tử hiện tại dưới dạng số nguyên 32 bit chưa ký.
Get(uint64_t & v)
Lấy giá trị của phần tử hiện tại dưới dạng số nguyên 64 bit chưa ký.
Get(float & v)
Get(double & v)
Lấy giá trị của phần tử hiện tại dưới dạng số có dấu phẩy động có độ chính xác kép.
GetBufHandle(void) const
uintptr_t
GetBytes(uint8_t *buf, uint32_t bufSize)
Lấy giá trị của phần tử chuỗi UTF8 hoặc byte hiện tại.
GetContainerType(void) const
Trả về loại vùng chứa mà TLVReader hiện đang đọc.
GetControlByte(void) const
uint16_t
Trả về byte điều khiển được liên kết với phần tử TLV hiện tại.
GetDataPtr(const uint8_t *& data)
Lấy con trỏ đến byte mã hoá ban đầu của byte TLV hoặc phần tử chuỗi UTF8.
GetLength(void) const
uint32_t
Trả về độ dài dữ liệu được liên kết với phần tử TLV hiện tại.
GetLengthRead(void) const
uint32_t
Trả về tổng số byte đã đọc kể từ khi trình đọc được khởi động.
GetReadPoint(void) const
const uint8_t *
Lấy điểm trong vùng đệm đầu vào cơ bản tương ứng với vị trí hiện tại của trình đọc.
GetRemainingLength(void) const
uint32_t
Trả về tổng số byte có thể đọc cho đến khi đạt đến thời lượng đọc tối đa.
GetString(char *buf, uint32_t bufSize)
Lấy giá trị của phần tử chuỗi UTF8 hoặc byte hiện tại dưới dạng chuỗi có kết thúc rỗng.
GetTag(void) const
uint64_t
Trả về thẻ được liên kết với phần tử TLV hiện tại.
GetType(void) const
Trả về loại phần tử TLV hiện tại.
Init(const TLVReader & aReader)
void
Khởi động một đối tượng TLVReader từ một đối tượng TLVReader khác.
Init(const uint8_t *data, uint32_t dataLen)
void
Khởi động một đối tượng TLVReader để đọc từ một vùng đệm đầu vào.
Init(PacketBuffer *buf, uint32_t maxLen)
void
Khởi động một đối tượng TLVReader để đọc từ một PacketBuffer.
Init(PacketBuffer *buf, uint32_t maxLen, bool allowDiscontiguousBuffers)
void
Khởi động một đối tượng TLVReader để đọc từ một hoặc nhiều PacketBuffers.
Next(void)
Chuyển đối tượng TLVReader lên phần tử TLV tiếp theo để đọc.
Next(TLVType expectedType, uint64_t expectedTag)
Đưa đối tượng TLVReader lên phần tử TLV tiếp theo để đọc, xác nhận loại và thẻ của phần tử mới.
OpenContainer(TLVReader & containerReader)
Khởi chạy một đối tượng TLVReader mới để đọc các thành phần của một phần tử vùng chứa TLV.
Skip(void)
Chuyển đối tượng TLVReader lên ngay sau thành phần TLV hiện tại.
VerifyEndOfContainer(void)
Xác minh rằng đối tượng TVLReader nằm ở cuối vùng chứa TLV.

Hàm được bảo vệ

ClearElementState(void)
void
Xoá trạng thái của TLVReader.
ElementType(void) const
TLVElementType
Đây là một phương thức riêng tư trả về TLVElementType từ mControlByte.
EnsureData(WEAVE_ERROR noDataErr)
GetElementHeadLength(uint8_t & elemHeadBytes) const
Đây là một phương thức riêng tư dùng để tính toán độ dài của phần đầu phần tử 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)
Bỏ qua mọi dữ liệu có trong TLV hiện tại bằng cách đọc qua dữ liệu đó mà không cần vùng đệm đích.
SkipToEndOfContainer(void)
VerifyElement(void)

Hàm tĩnh được bảo vệ

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)

Loại công khai

GetNextBufferFunct

WEAVE_ERROR(* GetNextBufferFunct)(TLVReader &reader, uintptr_t &bufHandle, const uint8_t *&bufStart, uint32_t &bufLen)

Một hàm có thể dùng để truy xuất thêm dữ liệu TLV cần được phân tích cú pháp.

Các hàm thuộc loại này dùng để cấp dữ liệu đầu vào cho TLVReader. Khi được gọi, hàm này dự kiến sẽ tạo thêm dữ liệu để trình đọc phân tích cú pháp hoặc báo hiệu cho trình đọc biết rằng không còn dữ liệu nào nữa.

Thông tin chi tiết
Tham số
[in] reader
Tham chiếu đến đối tượng TLVReader đang yêu cầu dữ liệu đầu vào.
[in,out] bufHandle
Tham chiếu đến giá trị uintptr_t mà hàm có thể sử dụng để lưu trữ dữ liệu ngữ cảnh giữa các lệnh gọi. Giá trị này được khởi tạo về 0 trước khi thực hiện lệnh gọi đầu tiên.
[in,out] bufStart
Tham chiếu đến con trỏ dữ liệu. Khi nhập hàm, bufStart trỏ đến một byte vượt quá byte dữ liệu TLV gần đây nhất mà trình đọc sử dụng. Khi thoát, bufStart dự kiến sẽ trỏ đến byte đầu tiên của dữ liệu TLV mới cần được phân tích cú pháp. Giá trị con trỏ mới có thể nằm trong cùng một vùng đệm với dữ liệu được sử dụng trước đó hoặc có thể trỏ đến một vùng đệm hoàn toàn mới.
[out] bufLen
Tham chiếu đến một số nguyên chưa ký mà hàm phải đặt thành số byte dữ liệu TLV đang được trả về. Nếu dữ liệu TLV đầu vào đã đến cuối, thì hàm sẽ đặt giá trị này thành 0.
Giá trị trả về
WEAVE_NO_ERROR
Nếu hàm tạo thành công nhiều dữ liệu TLV hơn hoặc đã đến cuối dữ liệu đầu vào (trong trường hợp này phải đặt bufLen thành 0).
other
Các mã lỗi khác của Weave hoặc dành riêng cho nền tảng cho biết đã xảy ra lỗi khiến hàm không tạo được dữ liệu được yêu cầu.

Các thuộc tính công khai

AppData

void * AppData

Trường con trỏ có thể dùng cho dữ liệu dành riêng cho ứng dụng.

GetNextBuffer

GetNextBufferFunct GetNextBuffer

Con trỏ trỏ đến một hàm sẽ tạo dữ liệu đầu vào cho đối tượng TLVReader.

Nếu bạn đặt thành NULL (giá trị mặc định), thì trình đọc sẽ giả định rằng không có thêm dữ liệu đầu vào nào.

Ứng dụng có thể đặt GetNextBuffer bất cứ lúc nào, nhưng thường được đặt khi trình đọc khởi chạy.

Xem định nghĩa loại GetNextBufferFunct để biết thêm thông tin về cách triển khai hàm GetNextBuffer.

ImplicitProfileId

uint32_t ImplicitProfileId

Id hồ sơ được sử dụng cho các thẻ hồ sơ được mã hoá dưới dạng ngầm ẩn.

Khi gặp một thẻ dành riêng cho hồ sơ đã được mã hoá ở dạng ngầm ẩn, trình đọc sẽ sử dụng giá trị của thuộc tính ImplicitProfileId làm mã nhận dạng hồ sơ giả định cho thẻ.

Theo mặc định, thuộc tính ImplicitProfileId được đặt thành kProfileIdNotspecified. Khi giải mã TLV có chứa các thẻ được mã hoá ngầm, ứng dụng phải đặt ImplicitProfileId trước khi đọc bất kỳ phần tử TLV nào có các thẻ như vậy. Mã hồ sơ phù hợp thường tuỳ thuộc vào ngữ cảnh của ứng dụng hoặc giao thức đang được sử dụng.

Nếu bạn gặp phải thẻ được mã hoá ngầm trong khi ImplicitProfileId được đặt thành kProfileIdNotspecified, thì trình đọc sẽ trả về lỗi WEAVE_ERROR_UNKNOWN_IMPLICIT_TLV_TAG.

Thuộc tính được bảo vệ

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

Hàm công khai

CloseContainer

WEAVE_ERROR CloseContainer(
  TLVReader & containerReader
)

Hoàn tất việc đọc vùng chứa TLV sau lệnh gọi OpenContainer().

Phương thức CloseContainer() sẽ khôi phục trạng thái của đối tượng TLVReader gốc sau khi gọi OpenContainer(). Đối với mỗi lệnh gọi đến ứng dụng OpenContainer(), phải thực hiện lệnh gọi tương ứng đến CloseContainer(), chuyển tham chiếu đến cùng một trình đọc vùng chứa cho cả hai phương pháp.

Khi CloseContainer() trả về, trình đọc gốc được đặt ngay trước phần tử đầu tiên theo sau vùng chứa. Từ thời điểm này, ứng dụng có thể dùng phương thức Next() để chuyển qua mọi phần tử còn lại.

Các ứng dụng có thể gọi nút đóng CloseContainer() trên trình đọc gốc bất kỳ lúc nào, bất kể liệu tất cả phần tử trong vùng chứa cơ bản đã được đọc hay chưa. Sau khi gọi CloseContainer(), ứng dụng phải coi trình đọc vùng chứa "đã huỷ khởi chạy" và không được sử dụng thêm khi chưa khởi chạy lại đối tượng.

Thông tin chi tiết
Tham số
[in] containerReader
Tệp tham chiếu đến đối tượng TLVReader đã được cung cấp cho phương thức OpenContainer().
Giá trị trả về
WEAVE_NO_ERROR
Nếu phương thức này thành công.
WEAVE_ERROR_INCORRECT_STATE
Nếu trình đọc chưa gọi OpenContainer() hoặc nếu trình đọc vùng chứa không khớp với phương thức được chuyển vào phương thức OpenContainer().
WEAVE_ERROR_TLV_UNDERRUN
Nếu quá trình mã hoá TLV cơ bản đã kết thúc sớm.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Nếu người đọc gặp phải loại phần tử TLV không hợp lệ hoặc không được hỗ trợ.
WEAVE_ERROR_INVALID_TLV_TAG
Nếu người đọc gặp thẻ TLV trong bối cảnh không hợp lệ.
other
Các mã lỗi nền tảng hoặc Weave khác do hàm GetNextBuffer() đã định cấu hình trả về. Chỉ có thể thực hiện khi GetNextBuffer không phải là giá trị NULL.

DupBytes

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

Phân bổ và trả về một vùng đệm chứa giá trị của chuỗi UTF8 hoặc byte hiện tại.

Phương thức này tạo vùng đệm và trả về bản sao dữ liệu liên kết với phần tử chuỗi byte hoặc UTF-8 ở vị trí hiện tại. Bộ nhớ cho vùng đệm được lấy bằng Malloc() và sẽ được phương thức gọi giải phóng bằng free() khi không còn cần đến.

Thông tin chi tiết
Tham số
[out] buf
Tham chiếu đến một con trỏ mà vùng đệm phân bổ vùng nhớ khối xếp dataLen byte sẽ được gán khi thành công.
[out] dataLen
Tham chiếu đến bộ nhớ cho kích thước (tính bằng byte) của buf khi thành công.
Giá trị trả về
WEAVE_NO_ERROR
Nếu phương thức này thành công.
WEAVE_ERROR_WRONG_TLV_TYPE
Nếu phần tử hiện tại không phải là byte TLV hay chuỗi UTF8, hoặc trình đọc không được định vị trên một phần tử.
WEAVE_ERROR_NO_MEMORY
Nếu không thể phân bổ bộ nhớ cho vùng đệm đầu ra.
WEAVE_ERROR_TLV_UNDERRUN
Nếu quá trình mã hoá TLV cơ bản đã kết thúc sớm.
WEAVE_ERROR_UNSUPPORTED_WEAVE_FEATURE
Nếu nền tảng mục tiêu không hỗ trợ malloc() và free().
other
Các mã lỗi nền tảng hoặc Weave khác do hàm GetNextBuffer() đã định cấu hình trả về. Chỉ có thể thực hiện khi GetNextBuffer không phải là giá trị NULL.

DupString

WEAVE_ERROR DupString(
  char *& buf
)

Phân bổ và trả về một vùng đệm chứa giá trị kết thúc rỗng của chuỗi byte hoặc UTF8 hiện tại.

Phương thức này tạo vùng đệm và trả về bản sao dữ liệu kết thúc rỗng được liên kết với phần tử chuỗi byte hoặc UTF-8 ở vị trí hiện tại. Bộ nhớ cho vùng đệm được lấy bằng Malloc() và sẽ được phương thức gọi giải phóng bằng free() khi không còn cần đến.

Thông tin chi tiết
Tham số
[out] buf
Tham chiếu đến một con trỏ mà vùng đệm phân bổ vùng nhớ khối xếp sẽ được chỉ định khi thành công.
Giá trị trả về
WEAVE_NO_ERROR
Nếu phương thức này thành công.
WEAVE_ERROR_WRONG_TLV_TYPE
Nếu phần tử hiện tại không phải là byte TLV hay chuỗi UTF8, hoặc trình đọc không được định vị trên một phần tử.
WEAVE_ERROR_NO_MEMORY
Nếu không thể phân bổ bộ nhớ cho vùng đệm đầu ra.
WEAVE_ERROR_TLV_UNDERRUN
Nếu quá trình mã hoá TLV cơ bản đã kết thúc sớm.
WEAVE_ERROR_UNSUPPORTED_WEAVE_FEATURE
Nếu nền tảng mục tiêu không hỗ trợ malloc() và free().
other
Các mã lỗi nền tảng hoặc Weave khác do hàm GetNextBuffer() đã định cấu hình trả về. Chỉ có thể thực hiện khi GetNextBuffer không phải là giá trị NULL.

EnterContainer

WEAVE_ERROR EnterContainer(
  TLVType & outerContainerType
)

Chuẩn bị đối tượng TLVReader để đọc các thành phần của phần tử vùng chứa TLV.

Phương thức EnterContainer() chuẩn bị đối tượng TLVReader hiện tại để bắt đầu đọc các thành phần thành phần của vùng chứa TLV (cấu trúc, mảng hoặc đường dẫn). Đối với mỗi lệnh gọi đến ứng dụng EnterContainer(), phải thực hiện lệnh gọi tương ứng đến ExitContainer().

Khi gọi EnterContainer(), đối tượng TLVReader phải được đặt trên phần tử vùng chứa để được đọc. Phương thức này lấy làm một đối số và tham chiếu đến giá trị TLVType. Giá trị này sẽ được dùng để lưu ngữ cảnh của trình đọc trong khi đọc vùng chứa.

Khi phương thức EnterContainer() trả về, người đọc được đặt ngay trước thành phần đầu tiên của vùng chứa. Việc gọi Next() liên tục sẽ chuyển trình đọc qua các thành phần của tập hợp cho đến khi đạt đến điểm cuối. Tại thời điểm đó, trình đọc sẽ trả về giá trị WEAVE_END_OF_TLV.

Sau khi đọc xong một vùng chứa, ứng dụng có thể tiếp tục đọc các phần tử sau vùng chứa bằng cách gọi phương thức ExitContainer().

Thông tin chi tiết
Tham số
[out] outerContainerType
Tham chiếu đến giá trị TLVType sẽ nhận ngữ cảnh của trình đọc.
Giá trị trả về
WEAVE_NO_ERROR
Nếu phương thức này thành công.
WEAVE_ERROR_INCORRECT_STATE
Nếu phần tử hiện tại không được định vị trên phần tử vùng chứa.

ExitContainer

WEAVE_ERROR ExitContainer(
  TLVType outerContainerType
)

Hoàn tất việc đọc vùng chứa TLV và chuẩn bị đối tượng TLVReader để đọc các phần tử sau vùng chứa.

Phương thức ExitContainer() sẽ khôi phục trạng thái của đối tượng TLVReader sau lệnh gọi đến EnterContainer(). Đối với mỗi lệnh gọi đến ứng dụng EnterContainer(), phải thực hiện lệnh gọi tương ứng đến ExitContainer(), chuyển giá trị ngữ cảnh được trả về bằng phương thức EnterContainer().

Khi ExitContainer() trả về, người đọc được đặt ngay trước phần tử đầu tiên theo sau vùng chứa. Từ thời điểm này, ứng dụng có thể dùng phương thức Next() để chuyển qua mọi phần tử còn lại.

Sau khi gọi EnterContainer(), các ứng dụng có thể gọi ExitContainer() trên trình đọc tại bất kỳ thời điểm nào, bất kể tất cả các phần tử trong vùng chứa cơ bản đã được đọc hay chưa.

Thông tin chi tiết
Tham số
[in] outerContainerType
Giá trị TLVType mà phương thức EnterContainer() trả về.
Giá trị trả về
WEAVE_NO_ERROR
Nếu phương thức này thành công.
WEAVE_ERROR_INCORRECT_STATE
Nếu trình đọc chưa gọi OpenContainer() hoặc nếu trình đọc vùng chứa không khớp với phương thức được chuyển vào phương thức OpenContainer().
WEAVE_ERROR_TLV_UNDERRUN
Nếu quá trình mã hoá TLV cơ bản đã kết thúc sớm.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Nếu người đọc gặp phải loại phần tử TLV không hợp lệ hoặc không được hỗ trợ.
WEAVE_ERROR_INVALID_TLV_TAG
Nếu người đọc gặp thẻ TLV trong bối cảnh không hợp lệ.
other
Các mã lỗi nền tảng hoặc Weave khác do hàm GetNextBuffer() đã định cấu hình trả về. Chỉ có thể thực hiện khi GetNextBuffer không phải là giá trị NULL.

Get

WEAVE_ERROR Get(
  bool & v
)

Lấy giá trị của phần tử hiện tại dưới dạng loại bool.

Thông tin chi tiết
Tham số
[out] v
Nhận giá trị được liên kết với phần tử TLV hiện tại.
Giá trị trả về
WEAVE_NO_ERROR
Nếu phương thức này thành công.
WEAVE_ERROR_WRONG_TLV_TYPE
Nếu phần tử hiện tại không phải là loại boolean TLV hoặc trình đọc không được định vị trên một phần tử.

Get

WEAVE_ERROR Get(
  int8_t & v
)

Lấy giá trị của phần tử hiện tại dưới dạng số nguyên 8 bit có dấu.

Nếu giá trị số nguyên được mã hoá lớn hơn loại dữ liệu đầu ra, thì giá trị thu được sẽ bị cắt bớt.

Thông tin chi tiết
Tham số
[out] v
Nhận giá trị được liên kết với phần tử TLV hiện tại.
Giá trị trả về
WEAVE_NO_ERROR
Nếu phương thức này thành công.
WEAVE_ERROR_WRONG_TLV_TYPE
Nếu phần tử hiện tại không phải là kiểu số nguyên TLV (đã ký hoặc chưa ký) hoặc trình đọc không được định vị trên một phần tử.

Get

WEAVE_ERROR Get(
  int16_t & v
)

Lấy giá trị của phần tử hiện tại dưới dạng số nguyên 16 bit có dấu.

Nếu giá trị số nguyên được mã hoá lớn hơn loại dữ liệu đầu ra, thì giá trị thu được sẽ bị cắt bớt.

Thông tin chi tiết
Tham số
[out] v
Nhận giá trị được liên kết với phần tử TLV hiện tại.
Giá trị trả về
WEAVE_NO_ERROR
Nếu phương thức này thành công.
WEAVE_ERROR_WRONG_TLV_TYPE
Nếu phần tử hiện tại không phải là kiểu số nguyên TLV (đã ký hoặc chưa ký) hoặc trình đọc không được định vị trên một phần tử.

Get

WEAVE_ERROR Get(
  int32_t & v
)

Lấy giá trị của phần tử hiện tại dưới dạng số nguyên 32 bit có dấu.

Nếu giá trị số nguyên được mã hoá lớn hơn loại dữ liệu đầu ra, thì giá trị thu được sẽ bị cắt bớt.

Thông tin chi tiết
Tham số
[out] v
Nhận giá trị được liên kết với phần tử TLV hiện tại.
Giá trị trả về
WEAVE_NO_ERROR
Nếu phương thức này thành công.
WEAVE_ERROR_WRONG_TLV_TYPE
Nếu phần tử hiện tại không phải là kiểu số nguyên TLV (đã ký hoặc chưa ký) hoặc trình đọc không được định vị trên một phần tử.

Get

WEAVE_ERROR Get(
  int64_t & v
)

Lấy giá trị của phần tử hiện tại dưới dạng số nguyên 64 bit có dấu.

Nếu giá trị số nguyên được mã hoá lớn hơn loại dữ liệu đầu ra, thì giá trị thu được sẽ bị cắt bớt.

Thông tin chi tiết
Tham số
[out] v
Nhận giá trị được liên kết với phần tử TLV hiện tại.
Giá trị trả về
WEAVE_NO_ERROR
Nếu phương thức này thành công.
WEAVE_ERROR_WRONG_TLV_TYPE
Nếu phần tử hiện tại không phải là kiểu số nguyên TLV (đã ký hoặc chưa ký) hoặc trình đọc không được định vị trên một phần tử.

Get

WEAVE_ERROR Get(
  uint8_t & v
)

Lấy giá trị của phần tử hiện tại dưới dạng số nguyên 8 bit chưa ký.

Nếu giá trị số nguyên được mã hoá lớn hơn loại dữ liệu đầu ra, thì giá trị thu được sẽ bị cắt bớt. Tương tự, nếu giá trị số nguyên được mã hoá là số âm, thì giá trị đó sẽ được chuyển đổi thành không dấu.

Thông tin chi tiết
Tham số
[out] v
Nhận giá trị được liên kết với phần tử TLV hiện tại.
Giá trị trả về
WEAVE_NO_ERROR
Nếu phương thức này thành công.
WEAVE_ERROR_WRONG_TLV_TYPE
Nếu phần tử hiện tại không phải là kiểu số nguyên TLV (đã ký hoặc chưa ký) hoặc trình đọc không được định vị trên một phần tử.

Get

WEAVE_ERROR Get(
  uint16_t & v
)

Lấy giá trị của phần tử hiện tại dưới dạng số nguyên 16 bit chưa ký.

Nếu giá trị số nguyên được mã hoá lớn hơn loại dữ liệu đầu ra, thì giá trị thu được sẽ bị cắt bớt. Tương tự, nếu giá trị số nguyên được mã hoá là số âm, thì giá trị đó sẽ được chuyển đổi thành không dấu.

Thông tin chi tiết
Tham số
[out] v
Nhận giá trị được liên kết với phần tử TLV hiện tại.
Giá trị trả về
WEAVE_NO_ERROR
Nếu phương thức này thành công.
WEAVE_ERROR_WRONG_TLV_TYPE
Nếu phần tử hiện tại không phải là kiểu số nguyên TLV (đã ký hoặc chưa ký) hoặc trình đọc không được định vị trên một phần tử.

Get

WEAVE_ERROR Get(
  uint32_t & v
)

Lấy giá trị của phần tử hiện tại dưới dạng số nguyên 32 bit chưa ký.

Nếu giá trị số nguyên được mã hoá lớn hơn loại dữ liệu đầu ra, thì giá trị thu được sẽ bị cắt bớt. Tương tự, nếu giá trị số nguyên được mã hoá là số âm, thì giá trị đó sẽ được chuyển đổi thành không dấu.

Thông tin chi tiết
Tham số
[out] v
Nhận giá trị được liên kết với phần tử TLV hiện tại.
Giá trị trả về
WEAVE_NO_ERROR
Nếu phương thức này thành công.
WEAVE_ERROR_WRONG_TLV_TYPE
Nếu phần tử hiện tại không phải là kiểu số nguyên TLV (đã ký hoặc chưa ký) hoặc trình đọc không được định vị trên một phần tử.

Get

WEAVE_ERROR Get(
  uint64_t & v
)

Lấy giá trị của phần tử hiện tại dưới dạng số nguyên 64 bit chưa ký.

Nếu giá trị số nguyên được mã hoá là số âm, thì giá trị đó sẽ được chuyển đổi thành không có chữ ký.

Thông tin chi tiết
Tham số
[out] v
Nhận giá trị được liên kết với phần tử TLV hiện tại.
Giá trị trả về
WEAVE_NO_ERROR
Nếu phương thức này thành công.
WEAVE_ERROR_WRONG_TLV_TYPE
Nếu phần tử hiện tại không phải là kiểu số nguyên TLV (đã ký hoặc chưa ký) hoặc trình đọc không được định vị trên một phần tử.

Get

WEAVE_ERROR Get(
  float & v
)

Get

WEAVE_ERROR Get(
  double & v
)

Lấy giá trị của phần tử hiện tại dưới dạng số có dấu phẩy động có độ chính xác kép.

Thông tin chi tiết
Tham số
[out] v
Nhận giá trị được liên kết với phần tử TLV hiện tại.
Giá trị trả về
WEAVE_NO_ERROR
Nếu phương thức này thành công.
WEAVE_ERROR_WRONG_TLV_TYPE
Nếu phần tử hiện tại không phải là loại dấu phẩy động TLV hoặc trình đọc không được định vị trên một phần tử.

GetBufHandle

uintptr_t GetBufHandle(
  void
) const 

GetBytes

WEAVE_ERROR GetBytes(
  uint8_t *buf,
  uint32_t bufSize
)

Lấy giá trị của phần tử chuỗi UTF8 hoặc byte hiện tại.

Để xác định dung lượng bộ nhớ đệm đầu vào cần thiết, hãy gọi phương thức GetLength() trước khi gọi GetBytes().

Thông tin chi tiết
Tham số
[in] buf
Con trỏ trỏ đến vùng đệm để nhận dữ liệu chuỗi.
[in] bufSize
Kích thước tính bằng byte của vùng đệm do buf trỏ đến.
Giá trị trả về
WEAVE_NO_ERROR
Nếu phương thức này thành công.
WEAVE_ERROR_WRONG_TLV_TYPE
Nếu phần tử hiện tại không phải là byte TLV hay chuỗi UTF8, hoặc trình đọc không được định vị trên một phần tử.
WEAVE_ERROR_BUFFER_TOO_SMALL
Nếu vùng đệm đã cung cấp quá nhỏ nên không thể chứa dữ liệu liên kết với phần tử hiện tại.
WEAVE_ERROR_TLV_UNDERRUN
Nếu quá trình mã hoá TLV cơ bản đã kết thúc sớm.
other
Các mã lỗi nền tảng hoặc Weave khác do hàm GetNextBuffer() đã định cấu hình trả về. Chỉ có thể thực hiện khi GetNextBuffer không phải là giá trị NULL.

GetContainerType

TLVType GetContainerType(
  void
) const 

Trả về loại vùng chứa mà TLVReader hiện đang đọc.

Phương thức GetContainerType() trả về loại vùng chứa TLVTLVReader đang đọc. Nếu TLVReader được đặt ở cấp ngoài cùng của chế độ mã hoá TLV (tức là trước, trên hoặc sau phần tử TLV ngoài cùng), thì phương thức này sẽ trả về kTLVType_Notspecified.

Thông tin chi tiết
Trả về
TLVType của vùng chứa hiện tại hoặc kTLVType_Notspecified nếu TLVReader không được định vị trong vùng chứa.

GetControlByte

uint16_t GetControlByte(
  void
) const 

Trả về byte điều khiển được liên kết với phần tử TLV hiện tại.

Lý tưởng nhất là không ai cần biết về byte điều khiển và chỉ cần triển khai nội bộ TLV mới có quyền truy cập vào byte đó. Tuy nhiên, việc có quyền truy cập vào byte điều khiển sẽ rất hữu ích cho mục đích gỡ lỗi bằng TLVGỡ lỗiTLV (cố gắng giải mã byte kiểm soát thẻ khi in đẹp nội dung vùng đệm TLV).

Thông tin chi tiết
Trả về
Một số nguyên chưa ký có chứa byte điều khiển liên kết với phần tử TLV hiện tại. kTLVControlByte_Notspecified được trả về nếu trình đọc không được định vị trên một phần tử.

GetDataPtr

WEAVE_ERROR GetDataPtr(
  const uint8_t *& data
)

Lấy con trỏ đến byte mã hoá ban đầu của byte TLV hoặc phần tử chuỗi UTF8.

Phương thức này trả về một con trỏ trực tiếp giá trị chuỗi được mã hoá trong vùng đệm đầu vào cơ bản. Để thành công, phương thức này yêu cầu phải có toàn bộ giá trị chuỗi trong một vùng đệm duy nhất. Nếu không, phương thức này sẽ trả về WEAVE_ERROR_TLV_UNDERRUN. Điều này khiến phương thức này sử dụng hạn chế khi đọc dữ liệu từ nhiều vùng đệm không liền kề.

Thông tin chi tiết
Tham số
[out] data
Tham chiếu đến con trỏ const sẽ nhận con trỏ đến dữ liệu chuỗi cơ bản.
Giá trị trả về
WEAVE_NO_ERROR
Nếu phương thức này thành công.
WEAVE_ERROR_WRONG_TLV_TYPE
Nếu phần tử hiện tại không phải là byte TLV hay chuỗi UTF8, hoặc trình đọc không được định vị trên một phần tử.
WEAVE_ERROR_TLV_UNDERRUN
Nếu quá trình mã hoá TLV cơ bản kết thúc sớm hoặc giá trị của phần tử chuỗi hiện tại không có trong một vùng đệm liền kề.
other
Các mã lỗi nền tảng hoặc Weave khác do hàm GetNextBuffer() đã định cấu hình trả về. Chỉ có thể thực hiện khi GetNextBuffer không phải là giá trị NULL.

GetLength

uint32_t GetLength(
  void
) const 

Trả về độ dài dữ liệu được liên kết với phần tử TLV hiện tại.

Độ dài dữ liệu chỉ áp dụng cho các phần tử thuộc loại chuỗi UTF8 hoặc chuỗi byte. Đối với các chuỗi UTF8, giá trị được trả về là số byte trong chuỗi chứ không phải số ký tự.

Thông tin chi tiết
Trả về
Độ dài (tính bằng byte) của dữ liệu được liên kết với phần tử TLV hiện tại hoặc 0 nếu phần tử hiện tại không phải là chuỗi UTF8 hay chuỗi byte hoặc nếu trình đọc không được định vị trên một phần tử.

GetLengthRead

uint32_t GetLengthRead(
  void
) const 

Trả về tổng số byte đã đọc kể từ khi trình đọc được khởi động.

Thông tin chi tiết
Trả về
Tổng số byte đã đọc kể từ khi trình đọc được khởi động.

GetReadPoint

const uint8_t * GetReadPoint(
  void
) const 

Lấy điểm trong vùng đệm đầu vào cơ bản tương ứng với vị trí hiện tại của trình đọc.

Thông tin chi tiết
Trả về
Một con trỏ vào vùng đệm đầu vào cơ bản tương ứng với vị trí hiện tại của trình đọc.

GetRemainingLength

uint32_t GetRemainingLength(
  void
) const 

Trả về tổng số byte có thể đọc cho đến khi đạt đến thời lượng đọc tối đa.

Thông tin chi tiết
Trả về
Tổng số byte có thể đọc cho đến khi đạt đến thời lượng đọc tối đa.

GetString

WEAVE_ERROR GetString(
  char *buf,
  uint32_t bufSize
)

Lấy giá trị của phần tử chuỗi UTF8 hoặc byte hiện tại dưới dạng chuỗi có kết thúc rỗng.

Để xác định dung lượng bộ nhớ đệm đầu vào cần thiết, hãy gọi phương thức GetLength() trước khi gọi GetBytes(). Vùng đệm đầu vào phải lớn hơn độ dài chuỗi ít nhất 1 byte để chứa ký tự rỗng.

Thông tin chi tiết
Tham số
[in] buf
Con trỏ trỏ đến vùng đệm để nhận dữ liệu chuỗi byte.
[in] bufSize
Kích thước tính bằng byte của vùng đệm do buf trỏ đến.
Giá trị trả về
WEAVE_NO_ERROR
Nếu phương thức này thành công.
WEAVE_ERROR_WRONG_TLV_TYPE
Nếu phần tử hiện tại không phải là byte TLV hay chuỗi UTF8, hoặc trình đọc không được định vị trên một phần tử.
WEAVE_ERROR_BUFFER_TOO_SMALL
Nếu vùng đệm đã cung cấp quá nhỏ nên không thể chứa dữ liệu liên kết với phần tử hiện tại.
WEAVE_ERROR_TLV_UNDERRUN
Nếu quá trình mã hoá TLV cơ bản đã kết thúc sớm.
other
Các mã lỗi nền tảng hoặc Weave khác do hàm GetNextBuffer() đã định cấu hình trả về. Chỉ có thể thực hiện khi GetNextBuffer không phải là giá trị NULL.

GetTag

uint64_t GetTag(
  void
) const 

Trả về thẻ được liên kết với phần tử TLV hiện tại.

Bạn có thể sử dụng giá trị do GetTag() trả về với các hàm hiệu dụng thẻ (IsProfileTag(), IsContextTag(), ProfileIdFromTag(), v.v.) để xác định loại thẻ và trích xuất nhiều giá trị của trường thẻ.

Thông tin chi tiết
Trả về
Một số nguyên chưa ký có chứa thông tin về thẻ được liên kết với phần tử TLV hiện tại.

GetType

TLVType GetType(
  void
) const 

Trả về loại phần tử TLV hiện tại.

Thông tin chi tiết
Trả về
Một giá trị TLVType mô tả kiểu dữ liệu của phần tử TLV hiện tại. Nếu trình đọc không được định vị trên phần tử TLV, thì giá trị trả về sẽ là kTLVType_Notspecified.

Init

void Init(
  const TLVReader & aReader
)

Khởi động một đối tượng TLVReader từ một đối tượng TLVReader khác.

Thông tin chi tiết
Tham số
[in] aReader
Tham chiếu chỉ đọc đến TLVReader để khởi tạo giá trị này.

Init

void Init(
  const uint8_t *data,
  uint32_t dataLen
)

Khởi động một đối tượng TLVReader để đọc từ một vùng đệm đầu vào.

Thông tin chi tiết
Tham số
[in] data
Con trỏ trỏ đến vùng đệm chứa dữ liệu TLV cần được phân tích cú pháp.
[in] dataLen
Độ dài của dữ liệu TLV cần được phân tích cú pháp.

Init

void Init(
  PacketBuffer *buf,
  uint32_t maxLen
)

Khởi động một đối tượng TLVReader để đọc từ một PacketBuffer.

Quá trình phân tích cú pháp bắt đầu tại vị trí bắt đầu của vùng đệm (buf->DataStart()) và tiếp tục cho đến khi kết thúc dữ liệu trong vùng đệm (như được biểu thị bằng buf->Datalen()) hoặc các byte maxLen đã được phân tích cú pháp.

Thông tin chi tiết
Tham số
[in] buf
Con trỏ trỏ đến PacketBuffer chứa dữ liệu TLV cần được phân tích cú pháp.
[in] maxLen
Số byte tối đa để phân tích cú pháp. Giá trị mặc định là lượng dữ liệu trong vùng đệm đầu vào.

Init

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

Khởi động một đối tượng TLVReader để đọc từ một hoặc nhiều PacketBuffers.

Quá trình phân tích cú pháp bắt đầu tại vị trí bắt đầu của vùng đệm ban đầu (buf->DataStart()). Nếu allowDiscontiguousBuffers là true, thì trình đọc sẽ chuyển qua chuỗi vùng đệm được liên kết bằng con trỏ Next(). Quá trình phân tích cú pháp sẽ tiếp tục cho đến khi sử dụng hết tất cả dữ liệu trong chuỗi vùng đệm (như biểu thị bằng buf->Datalen()) hoặc các byte maxLen đã được phân tích cú pháp.

Thông tin chi tiết
Tham số
[in] buf
Con trỏ trỏ đến PacketBuffer chứa dữ liệu TLV cần được phân tích cú pháp.
[in] maxLen
Số byte tối đa để phân tích cú pháp. Giá trị mặc định là tổng lượng dữ liệu trong chuỗi vùng đệm đầu vào.
[in] allowDiscontiguousBuffers
Nếu đúng, chuyển đến vùng đệm tiếp theo trong chuỗi sau khi tất cả dữ liệu trong vùng đệm hiện tại được sử dụng. Nếu sai, hãy ngừng phân tích cú pháp ở cuối vùng đệm ban đầu.

Tiếp theo

WEAVE_ERROR Next(
  void
)

Chuyển đối tượng TLVReader lên phần tử TLV tiếp theo để đọc.

Phương thức Next() định vị đối tượng trình đọc trên phần tử tiếp theo trong phương thức mã hoá TLV nằm trong cùng ngữ cảnh chứa. Cụ thể, nếu trình đọc được đặt ở cấp ngoài cùng của bộ mã hoá TLV, thì lệnh gọi Next() sẽ chuyển trình đọc đến phần tử tiếp theo ở trên cùng. Nếu trình đọc được đặt trong phần tử vùng chứa TLV (cấu trúc, mảng hoặc đường dẫn), thì lệnh gọi Next() sẽ chuyển trình đọc đến phần tử thành phần tiếp theo của vùng chứa.

Next() ràng buộc chuyển động của người đọc trong ngữ cảnh chứa hiện tại, nên việc gọi Next() khi trình đọc được định vị trên phần tử vùng chứa sẽ di chuyển qua vùng chứa, bỏ qua các phần tử thành phần của vùng chứa (và các thành phần của bất kỳ vùng chứa lồng nhau nào) cho đến khi đến phần tử đầu tiên sau vùng chứa.

Khi không còn phần tử nào khác trong một ngữ cảnh chứa cụ thể, phương thức Next() sẽ trả về lỗi WEAVE_END_OF_TLV và vị trí của trình đọc sẽ không thay đổi.

Thông tin chi tiết
Giá trị trả về
WEAVE_NO_ERROR
Nếu trình đọc được đặt thành công trên một phần tử mới.
WEAVE_END_OF_TLV
Nếu không có thêm phần tử nào.
WEAVE_ERROR_TLV_UNDERRUN
Nếu quá trình mã hoá TLV cơ bản đã kết thúc sớm.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Nếu người đọc gặp phải loại phần tử TLV không hợp lệ hoặc không được hỗ trợ.
WEAVE_ERROR_INVALID_TLV_TAG
Nếu người đọc gặp thẻ TLV trong bối cảnh không hợp lệ.
WEAVE_ERROR_UNKNOWN_IMPLICIT_TLV_TAG
Nếu người đọc gặp phải một thẻ TLV được mã hoá ngầm mà không xác định được mã hồ sơ tương ứng.
other
Các mã lỗi nền tảng hoặc Weave khác do hàm GetNextBuffer() đã định cấu hình trả về. Chỉ có thể thực hiện khi GetNextBuffer không phải là giá trị NULL.

Tiếp theo

WEAVE_ERROR Next(
  TLVType expectedType,
  uint64_t expectedTag
)

Đưa đối tượng TLVReader lên phần tử TLV tiếp theo để đọc, xác nhận loại và thẻ của phần tử mới.

Phương thức Next(TLVType dự kiếnType, uint64_texpectedTag) là một phương thức tiện lợi có hành vi giống như Next(), nhưng cũng xác minh rằng kiểu và thẻ của phần tử TLV mới khớp với các đối số đã cung cấp.

Thông tin chi tiết
Tham số
[in] expectedType
Loại dữ liệu dự kiến cho phần tử tiếp theo.
[in] expectedTag
Thẻ dự kiến cho phần tử tiếp theo.
Giá trị trả về
WEAVE_NO_ERROR
Nếu trình đọc được đặt thành công trên một phần tử mới.
WEAVE_END_OF_TLV
Nếu không có thêm phần tử nào.
WEAVE_ERROR_WRONG_TLV_TYPE
Nếu loại của phần tử mới không khớp với giá trị của đối số expectedType.
WEAVE_ERROR_UNEXPECTED_TLV_ELEMENT
Nếu thẻ liên kết với phần tử mới không khớp với giá trị của đối số expectedTag.
WEAVE_ERROR_TLV_UNDERRUN
Nếu quá trình mã hoá TLV cơ bản đã kết thúc sớm.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Nếu người đọc gặp phải loại phần tử TLV không hợp lệ hoặc không được hỗ trợ.
WEAVE_ERROR_INVALID_TLV_TAG
Nếu người đọc gặp thẻ TLV trong bối cảnh không hợp lệ.
other
Các mã lỗi nền tảng hoặc Weave khác do hàm GetNextBuffer() đã định cấu hình trả về. Chỉ có thể thực hiện khi GetNextBuffer không phải là giá trị NULL.

OpenContainer

WEAVE_ERROR OpenContainer(
  TLVReader & containerReader
)

Khởi chạy một đối tượng TLVReader mới để đọc các thành phần của phần tử vùng chứa TLV.

Phương thức OpenContainer() sẽ khởi chạy đối tượng TLVReader mới để đọc các thành phần thành phần của vùng chứa TLV (cấu trúc, mảng hoặc đường dẫn). Khi gọi OpenContainer(), đối tượng TLVReader hiện tại phải được đặt trên phần tử vùng chứa để được đọc. Phương thức này lấy đối số duy nhất làm đối số tham chiếu đến một trình đọc mới sẽ được khởi tạo để đọc vùng chứa. Trình đọc này được gọi là trình đọc vùng chứa trong khi trình đọc mà OpenContainer() được gọi được gọi là trình đọc mẹ.

Khi phương thức OpenContainer() trả về, trình đọc vùng chứa được đặt ngay trước thành phần đầu tiên của vùng chứa. Việc gọi Next() trên trình đọc vùng chứa sẽ chuyển qua các thành phần của bộ sưu tập cho đến khi đạt đến điểm cuối. Tại thời điểm đó, trình đọc sẽ trả về giá trị WEAVE_END_OF_TLV.

Khi trình đọc vùng chứa đang mở, các ứng dụng không được thực hiện lệnh gọi hoặc thay đổi trạng thái của trình đọc vùng chứa mẹ. Khi đã sử dụng xong trình đọc vùng chứa, ứng dụng phải đóng ứng dụng đó bằng cách gọi CloseContainer() trên trình đọc gốc, chuyển trình đọc vùng chứa dưới dạng đối số. Các ứng dụng có thể đóng trình đọc vùng chứa bất cứ lúc nào, có hoặc không đọc tất cả các phần tử có trong vùng chứa cơ bản. Sau khi đầu đọc vùng chứa đóng, các ứng dụng có thể tiếp tục sử dụng đầu đọc mẹ.

Trình đọc vùng chứa kế thừa nhiều thuộc tính cấu hình từ trình đọc mẹ. Đó là:

  • Mã hồ sơ ngầm ẩn (ImplicitProfileId)
  • Con trỏ dữ liệu ứng dụng (AppData)
  • Con trỏ hàm GetNextBuffer

Thông tin chi tiết
Tham số
[out] containerReader
Tham chiếu đến đối tượng TLVReader sẽ được khởi tạo để đọc các thành phần của phần tử vùng chứa hiện tại. Mọi dữ liệu liên kết với đối tượng đã cung cấp đều sẽ bị ghi đè.
Giá trị trả về
WEAVE_NO_ERROR
Nếu phương thức này thành công.
WEAVE_ERROR_INCORRECT_STATE
Nếu phần tử hiện tại không được định vị trên phần tử vùng chứa.

Bỏ qua

WEAVE_ERROR Skip(
  void
)

Chuyển đối tượng TLVReader lên ngay sau thành phần TLV hiện tại.

Phương thức Skip() định vị đối tượng trình đọc ngay sau phần tử TLV hiện tại, sao cho lệnh gọi tiếp theo đến Next() sẽ chuyển trình đọc đến phần tử tiếp theo. Giống như Next(), nếu trình đọc được định vị trên một phần tử vùng chứa tại thời điểm thực hiện lệnh gọi, thì các thành phần của vùng chứa sẽ bị bỏ qua. Nếu bạn không đặt máy đọc trên bất kỳ phần tử nào, thì vị trí của trình đọc sẽ không thay đổi.

Thông tin chi tiết
Giá trị trả về
WEAVE_NO_ERROR
Nếu trình đọc được đặt thành công trên một phần tử mới.
WEAVE_END_OF_TLV
Nếu không có thêm phần tử nào.
WEAVE_ERROR_TLV_UNDERRUN
Nếu quá trình mã hoá TLV cơ bản đã kết thúc sớm.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Nếu người đọc gặp phải loại phần tử TLV không hợp lệ hoặc không được hỗ trợ.
WEAVE_ERROR_INVALID_TLV_TAG
Nếu người đọc gặp thẻ TLV trong bối cảnh không hợp lệ.
other
Các mã lỗi nền tảng hoặc Weave khác do hàm GetNextBuffer() đã định cấu hình trả về. Chỉ có thể thực hiện khi GetNextBuffer không phải là giá trị NULL.

VerifyEndOfContainer

WEAVE_ERROR VerifyEndOfContainer(
  void
)

Xác minh rằng đối tượng TVLReader nằm ở cuối vùng chứa TLV.

Phương thức VerifyEndOfContainer() xác minh rằng không có thêm phần tử TLV nào để đọc trong vùng chứa TLV hiện tại. Đây là một phương thức tiện lợi tương đương với việc gọi Next() và kiểm tra giá trị trả về của WEAVE_END_OF_TLV.

Thông tin chi tiết
Giá trị trả về
WEAVE_NO_ERROR
Không có phần tử TLV nào để đọc.
WEAVE_ERROR_UNEXPECTED_TLV_ELEMENT
Nếu tìm thấy một phần tử TLV khác trong bộ sưu tập.
WEAVE_ERROR_TLV_UNDERRUN
Nếu quá trình mã hoá TLV cơ bản đã kết thúc sớm.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Nếu người đọc gặp phải loại phần tử TLV không hợp lệ hoặc không được hỗ trợ.
WEAVE_ERROR_INVALID_TLV_TAG
Nếu người đọc gặp thẻ TLV trong bối cảnh không hợp lệ.
other
Các mã lỗi nền tảng hoặc Weave khác do hàm GetNextBuffer() đã định cấu hình trả về. Chỉ có thể thực hiện khi GetNextBuffer không phải là giá trị NULL.

Hàm được bảo vệ

ClearElementState

void ClearElementState(
  void
)

Xoá trạng thái của TLVReader.

Phương thức này dùng để định vị trình đọc trước TLV đầu tiên, giữa các TLV hoặc sau TLV cuối cùng.

ElementType

TLVElementType ElementType(
  void
) const 

Đây là một phương thức riêng tư trả về TLVElementType từ mControlByte.

EnsureData

WEAVE_ERROR EnsureData(
  WEAVE_ERROR noDataErr
)

GetElementHeadLength

WEAVE_ERROR GetElementHeadLength(
  uint8_t & elemHeadBytes
) const 

Đây là một phương thức riêng tư dùng để tính toán độ dài của phần đầu phần tử 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
)

Bỏ qua mọi dữ liệu có trong TLV hiện tại bằng cách đọc qua dữ liệu đó mà không cần vùng đệm đích.

Thông tin chi tiết
Giá trị trả về
WEAVE_NO_ERROR
Nếu trình đọc được định vị thành công ở cuối dữ liệu.
other
Các mã lỗi nền tảng hoặc Weave khác do hàm GetNextBuffer() đã định cấu hình trả về. Chỉ có thể thực hiện khi GetNextBuffer không phải là giá trị NULL.

SkipToEndOfContainer

WEAVE_ERROR SkipToEndOfContainer(
  void
)

VerifyElement

WEAVE_ERROR VerifyElement(
  void
)

Hàm tĩnh được bảo vệ

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
)