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)
|
|
ExitContainer(TLVType outerContainerType)
|
|
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
|
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 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ố |
|
||||||||
Giá trị trả về |
|
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ố |
|
||||||||||||
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 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ố |
|
||||||||||||
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 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ố |
|
||||||||||||
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 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ố |
|
||||
Giá trị trả về |
|
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ố |
|
||||||||||||
Giá trị trả về |
|
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ố |
|
||||
Giá trị trả về |
|
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ố |
|
||||
Giá trị trả về |
|
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ố |
|
||||
Giá trị trả về |
|
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ố |
|
||||
Giá trị trả về |
|
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ố |
|
||||
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ị 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ố |
|
||||
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ị 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ố |
|
||||
Giá trị trả về |
|
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ố |
|
||||
Giá trị trả về |
|
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ố |
|
||||
Giá trị trả về |
|
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ố |
|
||||
Giá trị trả về |
|
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ố |
|
||||||||||
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() trả về loại vùng chứa TLV mà TLVReader đ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ố |
|
||||||||
Giá trị trả về |
|
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ố |
|
||||||||||
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 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
Init
void Init( const TLVReader & aReader )
Init
void Init( const uint8_t *data, uint32_t dataLen )
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ố |
|
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ố |
|
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.
Vì 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ề |
|
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ố |
|
||||||||||||||||
Giá trị trả về |
|
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ố |
|
||||
Giá trị trả về |
|
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ề |
|
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ề |
|
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 qua 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 )