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)
|
|
ExitContainer(TLVType outerContainerType)
|
|
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
|
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)
|
|
Next(TLVType expectedType, uint64_t expectedTag)
|
|
OpenContainer(TLVReader & containerReader)
|
|
Skip(void)
|
|
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ố |
|
||||||||
Giá trị trả về |
|
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ố |
|
||||||||||||
Giá trị trả về |
|
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ố |
|
||||||||||||
Giá trị trả về |
|
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ố |
|
||||||||||||
Giá trị trả về |
|
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ố |
|
||||
Giá trị trả về |
|
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ố |
|
||||||||||||
Giá trị trả về |
|
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ố |
|
||||
Giá trị trả về |
|
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ố |
|
||||
Giá trị trả về |
|
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ố |
|
||||
Giá trị trả về |
|
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ố |
|
||||
Giá trị trả về |
|
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ố |
|
||||
Giá trị trả về |
|
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ố |
|
||||
Giá trị trả về |
|
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ố |
|
||||
Giá trị trả về |
|
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ố |
|
||||
Giá trị trả về |
|
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ố |
|
||||
Giá trị trả về |
|
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ố |
|
||||
Giá trị trả về |
|
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ố |
|
||||||||||
Giá trị trả về |
|
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 TLV mà TLVReader đ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ố |
|
||||||||
Giá trị trả về |
|
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ố |
|
||||||||||
Giá trị trả về |
|
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
Bắt đầu
void Init( const TLVReader & aReader )
Bắt đầu
void Init( const uint8_t *data, uint32_t dataLen )
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ố |
|
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ố |
|
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.
Vì 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ề |
|
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ố |
|
||||||||||||||||
Giá trị trả về |
|
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ố |
|
||||
Giá trị trả về |
|
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ề |
|
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ề |
|
Hàm được bảo vệ
ClearElementState
void ClearElementState( void )
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ề |
|
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 )