nl::Weave::TLV::TLVReader

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

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

Tóm tắt

TLVReader triển khai 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ư con trỏ có thể dùng để lặp lại chuỗi phần tử TLV và diễn giải nội dung của các phần tử đó. Khi được định vị 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 loại và thẻ của phần tử hiện tại, cũng như để trích xuất bất kỳ giá trị liên quan nào. Phương thức Next() của trình đọc đượ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 phần tử TLV. Khi được khởi chạy lần đầu, TLVReader sẽ được đặt ngay trước phần tử đầu tiên của bộ 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 gặp một phần tử vùng chứa có cấu trúc, bạn có thể sử dụng một mảng hoặc đường dẫn, phương thức OpenContainer() hoặc EnterContainer() đều có thể dùng để lặp lại nội dung của vùng chứa.

Khi trình đọc đến cuối 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 ứ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 khởi chạy lại hoặc thoát khỏi vùng chứa hiện tại (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ừ vùng đệm đầu vào cố định hoặc từ một chuỗi gồm một hoặc nhiều Gói đệm. 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ư ổ cắm hoặc cổng nối tiếp.

Tính kế thừa

Lớp 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(*
Hàm có thể dùng để truy xuất dữ liệu TLV bổ sung để phân tích cú pháp.

Thuộc tính công khai

AppData
void *
Một trường con trỏ có thể dùng cho dữ liệu dành riêng cho ứng dụng.
GetNextBuffer
Con trỏ đến một hàm sẽ tạo dữ liệu đầu vào cho đối tượng TLVReader.
ImplicitProfileId
uint32_t
Mã hồ sơ được sử dụng cho 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 khi 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 byte hoặc chuỗi UTF8 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 byte hoặc chuỗi 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 quá trình đọ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)
Nhận giá trị của phần tử hiện tại dưới dạng kiểu boolean.
Get(int8_t & v)
Nhận giá trị của phần tử hiện tại dưới dạng số nguyên 8 bit đã ký.
Get(int16_t & v)
Nhận giá trị của phần tử hiện tại dưới dạng số nguyên 16 bit đã ký.
Get(int32_t & v)
Nhận giá trị của phần tử hiện tại dưới dạng số nguyên 32 bit đã ký.
Get(int64_t & v)
Nhận giá trị của phần tử hiện tại dưới dạng số nguyên 64 bit đã ký.
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)
Nhận 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)
Nhận 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)
Nhận giá trị của phần tử hiện tại dưới dạng số thực có độ chính xác gấp đôi.
GetBufHandle(void) const
uintptr_t
GetBytes(uint8_t *buf, uint32_t bufSize)
Nhận giá trị của byte hiện tại hoặc thành phần chuỗi UTF8.
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 được mã hoá ban đầu của một byte TLV hoặc thành phần chuỗi UTF8.
GetLength(void) const
uint32_t
Trả về độ dài của 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 chạy.
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)
Nhận giá trị của byte hiện tại hoặc thành phần chuỗi UTF8 dưới dạng chuỗi 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 của phần tử TLV hiện tại.
Init(const TLVReader & aReader)
void
Khởi động đố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 sang phần tử TLV tiếp theo cần đọc.
Next(TLVType expectedType, uint64_t expectedTag)
Chuyển đối tượng TLVReader sang phần tử TLV tiếp theo cần đọc, xác nhận loại và thẻ của phần tử mới.
OpenContainer(TLVReader & containerReader)
Khởi động 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.
Skip(void)
Chuyển đối tượng TLVReader đến ngay sau phần tử 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 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)

Hàm có thể dùng để truy xuất dữ liệu TLV bổ sung để phân tích cú pháp.

Các hàm thuộc loại này được 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 ra dữ liệu bổ sung để trình đọc phân tích cú pháp hoặc báo hiệu cho người đọc rằng không còn dữ liệu nào.

Thông tin chi tiết
Các 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 một giá trị uintptr_t mà hàm có thể 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 là 0 trước lệnh gọi đầu tiên.
[in,out] bufStart
Tham chiếu đến con trỏ dữ liệu. Khi truy cập vào hàm, bufStart trỏ đến một byte ngoài byte dữ liệu TLV cuối cùng mà trình đọc sử dụng. Khi thoát, bufStart sẽ trỏ đến byte đầu tiên của dữ liệu TLV mới đượ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 được trả về. Nếu đã đạt đến điểm cuối của dữ liệu TLV đầu vào, hàm phải đặt giá trị này thành 0.
Giá trị trả về
WEAVE_NO_ERROR
Nếu hàm tạo thêm thành công dữ liệu TLV hoặc đã đạt đến điểm cuối của 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 riêng của Weave hoặc nền tảng khác 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.

Thuộc tính công khai

AppData

void * AppData

Một 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ỏ đế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òn 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 đượ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

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

Khi người đọc gặp một thẻ dành riêng cho hồ sơ đã được mã hoá ở dạng ngầm ẩn, thẻ này sẽ sử dụng giá trị của thuộc tính ImplicitProfileId làm mã 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 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ó thẻ như vậy. Id cấu hình thích hợp thường phụ thuộc vào ngữ cảnh của ứng dụng hoặc giao thức được nói.

Nếu gặp phải một 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 khi gọi OpenContainer().

Phương thức CloseContainer() khôi phục trạng thái của đối tượng TLVReader chính sau lệnh gọi đến 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 thức.

Khi CloseContainer() trả về, trình đọc mẹ sẽ đượ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() để di chuyển qua mọi phần tử còn lại.

Ứng dụng có thể gọi CloseContainer() trên trình đọc gố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. Sau khi gọi CloseContainer(), ứng dụng sẽ xem như trình đọc vùng chứa đã "huỷ khởi chạy" và không được sử dụng thêm nữa khi chưa khởi chạy lại.

Thông tin chi tiết
Các tham số
[in] containerReader
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 thành công.
WEAVE_ERROR_INCORRECT_STATE
Nếu OpenContainer() chưa được gọi trên trình đọc, hoặc nếu trình đọc vùng chứa không khớp với trình đọc được chuyển đến 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 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 thấy một thẻ TLV trong ngữ cảnh không hợp lệ.
other
Các mã lỗi nền tảng hoặc lỗi Weave khác do hàm GetNextBuffer() đã định cấu hình trả về. Chỉ có thể xảy ra 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 byte hoặc chuỗi 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 được liên kết với thành phần chuỗi byte hoặc UTF-8 tại vị trí hiện tại. Bộ nhớ cho vùng đệm được lấy bằng Malloc() và nên đượ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
Các 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 gồm 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 thành công.
WEAVE_ERROR_WRONG_TLV_TYPE
Nếu phần tử hiện tại không phải là một 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
Trường hợp 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 đích không hỗ trợ malloc() và free().
other
Các mã lỗi nền tảng hoặc lỗi Weave khác do hàm GetNextBuffer() đã định cấu hình trả về. Chỉ có thể xảy ra 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 byte hoặc chuỗi UTF8 hiện tại.

Phương thức này tạo vùng đệm và trả về một bản sao đã kết thúc rỗng của dữ liệu được liên kết với phần tử chuỗi byte hoặc UTF-8 tại vị trí hiện tại. Bộ nhớ cho vùng đệm được lấy bằng Malloc() và nên đượ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
Các tham số
[out] buf
Giá trị tham chiếu đến một con trỏ mà vùng đệm phân bổ vùng nhớ khối xếp sẽ được gán khi thành công.
Giá trị trả về
WEAVE_NO_ERROR
Nếu phương thức thành công.
WEAVE_ERROR_WRONG_TLV_TYPE
Nếu phần tử hiện tại không phải là một 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
Trường hợp 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 đích không hỗ trợ malloc() và free().
other
Các mã lỗi nền tảng hoặc lỗi Weave khác do hàm GetNextBuffer() đã định cấu hình trả về. Chỉ có thể xảy ra 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 phần tử 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() đều phải thực hiện lệnh gọi tương ứng đến ExitContainer().

Khi EnterContainer() được gọi, thì đối tượng TLVReader phải được đặt trên phần tử vùng chứa cần đọc. Phương thức này lấy đối số tham chiếu đến một giá trị TLVType 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ề, trình đọc sẽ được đặt ngay trước thành phần đầu tiên của vùng chứa. Việc liên tục gọi Next() sẽ chuyển trình đọc thông qua các thành viên của tập hợp cho đến khi đến cuối. Sau đó, trình đọc sẽ trả về WEAVE_END_OF_TLV.

Sau khi đọc xong 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
Các tham số
[out] outerContainerType
Tham chiếu đến một 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 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 quá trình đọ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() 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 mà phương thức EnterContainer() trả về.

Khi ExitContainer() trả về, trình đọc sẽ được đặt ngay trước phần tử đầu tiên sau vùng chứa. Từ thời điểm này, ứng dụng có thể dùng phương thức Next() để di 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
Các tham số
[in] outerContainerType
Giá trị TLVType được phương thức EnterContainer() trả về.
Giá trị trả về
WEAVE_NO_ERROR
Nếu phương thức thành công.
WEAVE_ERROR_INCORRECT_STATE
Nếu OpenContainer() chưa được gọi trên trình đọc, hoặc nếu trình đọc vùng chứa không khớp với trình đọc được chuyển đến 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 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 thấy một thẻ TLV trong ngữ cảnh không hợp lệ.
other
Các mã lỗi nền tảng hoặc lỗi Weave khác do hàm GetNextBuffer() đã định cấu hình trả về. Chỉ có thể xảy ra khi GetNextBuffer không phải là giá trị NULL.

Get

WEAVE_ERROR Get(
  bool & v
)

Nhận giá trị của phần tử hiện tại dưới dạng kiểu boolean.

Thông tin chi tiết
Các tham số
[out] v
Nhận giá trị 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 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 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
)

Nhận giá trị của phần tử hiện tại dưới dạng số nguyên 8 bit đã 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ị kết quả sẽ bị cắt bớt.

Thông tin chi tiết
Các tham số
[out] v
Nhận giá trị 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 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 có dấu) hoặc trình đọc không được định vị trên phần tử.

Get

WEAVE_ERROR Get(
  int16_t & v
)

Nhận giá trị của phần tử hiện tại dưới dạng số nguyên 16 bit đã 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ị kết quả sẽ bị cắt bớt.

Thông tin chi tiết
Các tham số
[out] v
Nhận giá trị 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 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 có dấu) hoặc trình đọc không được định vị trên phần tử.

Get

WEAVE_ERROR Get(
  int32_t & v
)

Nhận giá trị của phần tử hiện tại dưới dạng số nguyên 32 bit đã 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ị kết quả sẽ bị cắt bớt.

Thông tin chi tiết
Các tham số
[out] v
Nhận giá trị 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 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 có dấu) hoặc trình đọc không được định vị trên phần tử.

Get

WEAVE_ERROR Get(
  int64_t & v
)

Nhận giá trị của phần tử hiện tại dưới dạng số nguyên 64 bit đã 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ị kết quả sẽ bị cắt bớt.

Thông tin chi tiết
Các tham số
[out] v
Nhận giá trị 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 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 có dấu) hoặc trình đọc không được định vị trên 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ị kết quả 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 chưa có dấu.

Thông tin chi tiết
Các tham số
[out] v
Nhận giá trị 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 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 có dấu) hoặc trình đọc không được định vị trên 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ị kết quả 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 chưa có dấu.

Thông tin chi tiết
Các tham số
[out] v
Nhận giá trị 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 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 có dấu) hoặc trình đọc không được định vị trên phần tử.

Get

WEAVE_ERROR Get(
  uint32_t & v
)

Nhận 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ị kết quả 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 chưa có dấu.

Thông tin chi tiết
Các tham số
[out] v
Nhận giá trị 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 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 có dấu) hoặc trình đọc không được định vị trên phần tử.

Get

WEAVE_ERROR Get(
  uint64_t & v
)

Nhận 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ị này sẽ được chuyển đổi thành chưa có chữ ký.

Thông tin chi tiết
Các tham số
[out] v
Nhận giá trị 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 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 có dấu) hoặc trình đọc không được định vị trên phần tử.

Get

WEAVE_ERROR Get(
  float & v
)

Get

WEAVE_ERROR Get(
  double & v
)

Nhận giá trị của phần tử hiện tại dưới dạng số thực có độ chính xác gấp đôi.

Thông tin chi tiết
Các tham số
[out] v
Nhận giá trị 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 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 phần tử.

GetBufHandle

uintptr_t GetBufHandle(
  void
) const 

GetBytes

WEAVE_ERROR GetBytes(
  uint8_t *buf,
  uint32_t bufSize
)

Nhận giá trị của byte hiện tại hoặc thành phần chuỗi UTF8.

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

Thông tin chi tiết
Các tham số
[in] buf
Con 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 thành công.
WEAVE_ERROR_WRONG_TLV_TYPE
Nếu phần tử hiện tại không phải là một 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 được 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 lỗi Weave khác do hàm GetNextBuffer() đã định cấu hình trả về. Chỉ có thể xảy ra 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() sẽ trả về loại vùng chứa TLVTLVReader đang đọc. Nếu TLVReader được định vị ở cấp ngoài cùng của bộ mã hoá TLV (tức là trước, trên hoặc sau phần tử TLV ngoài cùng), 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ó cách triển khai TLV nội bộ 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 của Tiện íchgỡ lỗiTLV (cố gắng giải mã byte điều khiển thẻ khi in nội dung bộ đệm TLV).

Thông tin chi tiết
Trả về
Một số nguyên chưa ký chứa byte điều khiển được 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 được mã hoá ban đầu của một byte TLV hoặc thành phần chuỗi UTF8.

Phương thức này trả về một con trỏ trực tiếp giá trị chuỗi đã mã hoá trong vùng đệm nhập cơ bản. Để thành công, phương thức này yêu cầu toàn bộ giá trị chuỗi phải có 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 pháp này bị hạn chế sử dụng khi đọc dữ liệu từ nhiều vùng đệm không liên tục.

Thông tin chi tiết
Các tham số
[out] data
Tham chiếu đến một con trỏ const sẽ nhận con trỏ tới dữ liệu chuỗi cơ bản.
Giá trị trả về
WEAVE_NO_ERROR
Nếu phương thức thành công.
WEAVE_ERROR_WRONG_TLV_TYPE
Nếu phần tử hiện tại không phải là một 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 lỗi Weave khác do hàm GetNextBuffer() đã định cấu hình trả về. Chỉ có thể xảy ra khi GetNextBuffer không phải là giá trị NULL.

GetLength

uint32_t GetLength(
  void
) const 

Trả về độ dài của 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 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 byte hoặc chuỗi UTF8, 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 chạy.

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

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ề
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
)

Nhận giá trị của byte hiện tại hoặc thành phần chuỗi UTF8 dưới dạng chuỗi kết thúc rỗng.

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

Thông tin chi tiết
Các tham số
[in] buf
Con 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 thành công.
WEAVE_ERROR_WRONG_TLV_TYPE
Nếu phần tử hiện tại không phải là một 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 được 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 lỗi Weave khác do hàm GetNextBuffer() đã định cấu hình trả về. Chỉ có thể xảy ra 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 số 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ý 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 của phần tử TLV hiện tại.

Thông tin chi tiết
Trả về
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.

Bắt đầu

void Init(
  const TLVReader & aReader
)

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

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

Bắt đầu

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
Các tham số
[in] data
Con 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 phân tích cú pháp.

Bắt đầu

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 dữ liệu trong vùng đệm kết thúc (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
Các tham số
[in] buf
Con trỏ đến một 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.

Bắt đầu

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.

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à đúng, 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 tất cả dữ liệu trong chuỗi vùng đệm được sử dụng (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
Các tham số
[in] buf
Con trỏ đến một 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, hãy 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 giá trị là false, 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 sang phần tử TLV tiếp theo cần đọc.

Phương thức Next() định vị đối tượng trình đọc trên phần tử tiếp theo trong mã hoá TLV nằm trong cùng ngữ cảnh vùng 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), 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 với ngữ cảnh vùng chứa hiện tại, nên việc gọi Next() khi trình đọc được định vị trên một phần tử vùng chứa sẽ qua vùng chứa, bỏ qua các phần tử thành phần (và các thành phần của bất kỳ vùng chứa lồng nhau nào) cho đến khi tới phần tử đầu tiên sau vùng chứa.

Khi không có thêm phần tử nào trong ngữ cảnh vùng 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
Liệu trình đọc đã được định vị thành công trên một phần tử mới hay chưa.
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 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 thấy một thẻ TLV trong ngữ cảnh không hợp lệ.
WEAVE_ERROR_UNKNOWN_IMPLICIT_TLV_TAG
Nếu người đọc gặp một thẻ TLV được mã hoá ngầm định 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 lỗi Weave khác do hàm GetNextBuffer() đã định cấu hình trả về. Chỉ có thể xảy ra khi GetNextBuffer không phải là giá trị NULL.

Tiếp theo

WEAVE_ERROR Next(
  TLVType expectedType,
  uint64_t expectedTag
)

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

Phương thức Next(TLVType futureType, uint64_t expectTag) là một phương thức tiện lợi có hành vi tương tự như Next(), nhưng cũng xác minh rằng loại 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
Các 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
Liệu trình đọc đã được định vị thành công trên một phần tử mới hay chưa.
WEAVE_END_OF_TLV
Nếu không có thêm phần tử nào.
WEAVE_ERROR_WRONG_TLV_TYPE
Nếu kiểu 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ẻ được 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 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 thấy một thẻ TLV trong ngữ cảnh không hợp lệ.
other
Các mã lỗi nền tảng hoặc lỗi Weave khác do hàm GetNextBuffer() đã định cấu hình trả về. Chỉ có thể xảy ra khi GetNextBuffer không phải là giá trị NULL.

OpenContainer

WEAVE_ERROR OpenContainer(
  TLVReader & containerReader
)

Khởi động 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 tạo đối tượng TLVReader mới để đọc các phần tử thành phần của vùng chứa TLV (cấu trúc, mảng hoặc đường dẫn). Khi OpenContainer() được gọi, đố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 là trình đọc mẹ.

Khi phương thức OpenContainer() trả về, trình đọc vùng chứa sẽ đượ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 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ề WEAVE_END_OF_TLV.

Khi trình đọc vùng chứa đang mở, ứ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 gốc. Sau khi sử dụng xong trình đọc vùng chứa, ứng dụng phải đóng bằng cách gọi CloseContainer() trên trình đọc mẹ, chuyển trình đọc vùng chứa làm đố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 trình đọc vùng chứa đóng, các ứng dụng có thể tiếp tục sử dụng trình đọc chính.

Trình đọc vùng chứa kế thừa nhiều thuộc tính cấu hình từ trình đọc gốc. Đó 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
Các 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 bị ghi đè.
Giá trị trả về
WEAVE_NO_ERROR
Nếu phương thức 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 đến ngay sau phần tử TLV hiện tại.

Phương thức Skip() đặt vị trí đố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ử sau. Giống như Next(), nếu trình đọc được đặt trên một phần tử vùng chứa tại thời điểm gọi, thì các thành phần của vùng chứa sẽ bị bỏ qua. Nếu trình đọc không được đặt trên bất kỳ phần tử nào, thì vị trí của phần tử đó vẫn không thay đổi.

Thông tin chi tiết
Giá trị trả về
WEAVE_NO_ERROR
Liệu trình đọc đã được định vị thành công trên một phần tử mới hay chưa.
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 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 thấy một thẻ TLV trong ngữ cảnh không hợp lệ.
other
Các mã lỗi nền tảng hoặc lỗi Weave khác do hàm GetNextBuffer() đã định cấu hình trả về. Chỉ có thể xảy ra 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 đọ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ề là WEAVE_END_OF_TLV.

Thông tin chi tiết
Giá trị trả về
WEAVE_NO_ERROR
Nếu không có thêm phần tử TLV nào cần đọ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 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 thấy một thẻ TLV trong ngữ cảnh không hợp lệ.
other
Các mã lỗi nền tảng hoặc lỗi Weave khác do hàm GetNextBuffer() đã định cấu hình trả về. Chỉ có thể xảy ra 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 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
Liệu người đọc có được định vị thành công vào cuối dữ liệu hay không.
other
Các mã lỗi nền tảng hoặc lỗi Weave khác do hàm GetNextBuffer() đã định cấu hình trả về. Chỉ có thể xảy ra 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
)