nl:: Weave:: TLV:: TLVUpdater
#include <src/lib/core/WeaveTLV.h>
Cung cấp giao diện Reader/Writer hợp nhất để chỉnh sửa/thêm/xoá các phần tử trong bộ mã hoá TLV.
Tóm tắt
TLVUpdater là một tập hợp các đối tượng TLVReader và TLVWriter đồng thời cung cấp các phương thức giao diện để chỉnh sửa/xoá dữ liệu trong một bộ mã hoá cũng như thêm các phần tử mới vào bộ mã hoá TLV. Về cơ bản, đối tượng TLVUpdater hoạt động như 2 con trỏ, một để đọc bộ mã hoá hiện có và một con trỏ để ghi (để sao chép trên dữ liệu hiện có hoặc ghi dữ liệu mới).
Về mặt ngữ nghĩa, đối tượng TLVUpdater hoạt động như một hợp nhất của TLVReader và TLVWriter. Các phương thức TLVUpdater có ý nghĩa tương tự hoặc ít tương tự như các phương thức có tên tương tự trong TLVReader/TLVWriter. Nếu có sự khác biệt về ngữ nghĩa, những khác biệt đó sẽ được ghi lại rõ ràng trong phần nhận xét của hàm trong WeaveTLVUpdater.cpp.
Một lưu ý đặc biệt quan trọng về phương thức PutBytes() và PutString() của TLVUpdater là phương thức này có thể khiến quá trình mã hoá ở trạng thái bị hỏng chỉ với tiêu đề phần tử được ghi khi xảy ra tràn. Các ứng dụng có thể gọi GetRemainingFreeLength() để đảm bảo có khoảng đủ dung lượng trống để ghi mã hoá. Lưu ý rằng GetRemainingFreeLength() chỉ cho bạn biết các byte trống và không có cách nào để ứng dụng biết độ dài của dữ liệu đã mã hóa được ghi. Trong trường hợp bị tràn, cả PutBytes() và PutString() đều sẽ trả về WEAVE_ERROR_BUFFER_TOO_Small cho phương thức gọi.
Ngoài ra, xin lưu ý rằng phương thức Next() bị quá tải để vừa bỏ qua phần tử hiện tại, vừa chuyển trình đọc nội bộ sang phần tử tiếp theo. Vì việc bỏ qua các phần tử đã được mã hoá đòi hỏi phải thay đổi các biến trạng thái không gian trống của trình ghi nội bộ để tính đến không gian được giải phóng mới (được cung cấp bằng cách bỏ qua), ứng dụng dự kiến sẽ gọi Next() trên trình cập nhật sau phương thức Get() có giá trị mà ứng dụng không muốn ghi lại (tương đương với bỏ qua phần tử hiện tại).
Hàm công khai |
|
---|---|
CopyElement(TLVReader & reader)
|
|
CopyElement(uint64_t tag, TLVReader & reader)
|
|
DupBytes(uint8_t *& buf, uint32_t & dataLen)
|
|
DupString(char *& buf)
|
|
EndContainer(TLVType outerContainerType)
|
|
EnterContainer(TLVType & outerContainerType)
|
Chuẩn bị đối tượng TLVUpdater để đọc các phần tử của một vùng chứa.
|
ExitContainer(TLVType outerContainerType)
|
|
Finalize(void)
|
|
Get(bool & v)
|
|
Get(int8_t & v)
|
|
Get(int16_t & v)
|
|
Get(int32_t & v)
|
|
Get(int64_t & v)
|
|
Get(uint8_t & v)
|
|
Get(uint16_t & v)
|
|
Get(uint32_t & v)
|
|
Get(uint64_t & v)
|
|
Get(float & v)
|
|
Get(double & v)
|
|
GetBytes(uint8_t *buf, uint32_t bufSize)
|
|
GetContainerType(void) const
|
|
GetDataPtr(const uint8_t *& data)
|
|
GetImplicitProfileId(void)
|
uint32_t
|
GetLength(void) const
|
uint32_t
|
GetLengthRead(void) const
|
uint32_t
|
GetLengthWritten(void)
|
uint32_t
|
GetReader(TLVReader & containerReader)
|
void
|
GetRemainingFreeLength(void)
|
uint32_t
|
GetRemainingLength(void) const
|
uint32_t
|
GetString(char *buf, uint32_t bufSize)
|
|
GetTag(void) const
|
uint64_t
|
GetType(void) const
|
|
Init(uint8_t *buf, uint32_t dataLen, uint32_t maxLen)
|
Khởi động đối tượng TLVUpdater để chỉnh sửa một vùng đệm đầu vào.
|
Init(TLVReader & aReader, uint32_t freeLen)
|
Khởi động đối tượng TLVUpdater bằng TLVReader.
|
Move(void)
|
|
MoveUntilEnd(void)
|
void
Di chuyển mọi thứ từ điểm đọc hiện tại của TLVUpdater cho đến khi kết thúc bộ đệm TLV đầu vào sang đầu ra.
|
Next(void)
|
Bỏ qua phần tử hiện tại và chuyển đối tượng TLVUpdater sang phần tử tiếp theo trong đầu vào TLV.
|
Put(uint64_t tag, int8_t v)
|
|
Put(uint64_t tag, int16_t v)
|
|
Put(uint64_t tag, int32_t v)
|
|
Put(uint64_t tag, int64_t v)
|
|
Put(uint64_t tag, uint8_t v)
|
|
Put(uint64_t tag, uint16_t v)
|
|
Put(uint64_t tag, uint32_t v)
|
|
Put(uint64_t tag, uint64_t v)
|
|
Put(uint64_t tag, int8_t v, bool preserveSize)
|
|
Put(uint64_t tag, int16_t v, bool preserveSize)
|
|
Put(uint64_t tag, int32_t v, bool preserveSize)
|
|
Put(uint64_t tag, int64_t v, bool preserveSize)
|
|
Put(uint64_t tag, uint8_t v, bool preserveSize)
|
|
Put(uint64_t tag, uint16_t v, bool preserveSize)
|
|
Put(uint64_t tag, uint32_t v, bool preserveSize)
|
|
Put(uint64_t tag, uint64_t v, bool preserveSize)
|
|
Put(uint64_t tag, float v)
|
|
Put(uint64_t tag, double v)
|
|
PutBoolean(uint64_t tag, bool v)
|
|
PutBytes(uint64_t tag, const uint8_t *buf, uint32_t len)
|
|
PutNull(uint64_t tag)
|
|
PutString(uint64_t tag, const char *buf)
|
|
PutString(uint64_t tag, const char *buf, uint32_t len)
|
|
SetImplicitProfileId(uint32_t profileId)
|
void
Đặt mã nhận dạng hồ sơ ngầm ẩn cho đối tượng TLVUpdater.
|
StartContainer(uint64_t tag, TLVType containerType, TLVType & outerContainerType)
|
|
VerifyEndOfContainer(void)
|
Hàm công khai
CopyElement
WEAVE_ERROR CopyElement( TLVReader & reader )
CopyElement
WEAVE_ERROR CopyElement( uint64_t tag, TLVReader & reader )
DupBytes
WEAVE_ERROR DupBytes( uint8_t *& buf, uint32_t & dataLen )
DupString
WEAVE_ERROR DupString( char *& buf )
EndContainer
WEAVE_ERROR EndContainer( TLVType outerContainerType )
EnterContainer
WEAVE_ERROR EnterContainer( TLVType & outerContainerType )
Chuẩn bị đối tượng TLVUpdater để đọc các phần tử của một vùng chứa.
Mã này cũng mã hoá điểm bắt đầu của đối tượng vùng chứa trong TLV đầu ra.
Phương thức EnterContainer() chuẩn bị đối tượng TLVUpdater 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(), trình đọc của TLVUpdater phải được định vị trên phần tử vùng chứa. 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ập nhật trong khi đọc vùng chứa.
Khi phương thức EnterContainer() trả về, trình cập nhật được đặt ngay trước thành phần đầu tiên của vùng chứa. Việc gọi Next() nhiều lần sẽ chuyển trình cập nhật thông qua các thành phần của tập hợp cho đến khi kết thúc, tại thời điểm đó, trình cập nhật sẽ trả về 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 một phần tử vùng chứa TLV và mã hoá phần cuối của phần tử TLV trong TLV đầu ra.
Phương thức ExitContainer() sẽ khôi phục trạng thái của đối tượng TLVUpdater 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ề, trình đọc TLVUpdater được đặt ngay trước phần tử đầu tiên theo sau vùng chứa trong TLV đầu vào. Từ thời điểm này, các ứng dụng có thể gọi 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ập nhật bất kỳ lúc 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. Ngoài ra, xin lưu ý rằng việc gọi ExitContainer() trước khi đọc tất cả các phần tử trong vùng chứa, sẽ dẫn đến việc vùng chứa cập nhật bị cắt bớt trong TLV đầu ra.
Thông tin chi tiết | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Tham số |
|
||||||||||
Giá trị trả về |
|
Hoàn tất
WEAVE_ERROR Finalize( void )
Get
WEAVE_ERROR Get( bool & v )
Get
WEAVE_ERROR Get( int8_t & v )
Get
WEAVE_ERROR Get( int16_t & v )
Get
WEAVE_ERROR Get( int32_t & v )
Get
WEAVE_ERROR Get( int64_t & v )
Get
WEAVE_ERROR Get( uint8_t & v )
Get
WEAVE_ERROR Get( uint16_t & v )
Get
WEAVE_ERROR Get( uint32_t & v )
Get
WEAVE_ERROR Get( uint64_t & v )
Get
WEAVE_ERROR Get( float & v )
Get
WEAVE_ERROR Get( double & v )
GetBytes
WEAVE_ERROR GetBytes( uint8_t *buf, uint32_t bufSize )
GetContainerType
TLVType GetContainerType( void ) const
GetDataPtr
WEAVE_ERROR GetDataPtr( const uint8_t *& data )
GetImplicitProfileId
uint32_t GetImplicitProfileId( void )
GetLength
uint32_t GetLength( void ) const
GetLengthRead
uint32_t GetLengthRead( void ) const
GetLengthWritten
uint32_t GetLengthWritten( void )
GetReader
void GetReader( TLVReader & containerReader )
GetRemainingFreeLength
uint32_t GetRemainingFreeLength( void )
GetRemainingLength
uint32_t GetRemainingLength( void ) const
GetString
WEAVE_ERROR GetString( char *buf, uint32_t bufSize )
GetTag
uint64_t GetTag( void ) const
GetType
TLVType GetType( void ) const
Init
WEAVE_ERROR Init( uint8_t *buf, uint32_t dataLen, uint32_t maxLen )
Khởi động đối tượng TLVUpdater để chỉnh sửa một vùng đệm đầu vào.
Khi gọi phương thức này, dữ liệu TLV trong vùng đệm được chuyển đến cuối vùng đệm và một đối tượng TLVReader riêng tư sẽ được khởi động trên vùng đệm di chuyển này. Đối tượng TLVWriter riêng tư cũng được khởi tạo trên không gian trống hiện có sẵn từ đầu. Các ứng dụng có thể dùng đối tượng TLVUpdater để phân tích cú pháp dữ liệu TLV và sửa đổi/xoá các phần tử hiện có hoặc thêm phần tử mới vào bộ mã hoá.
Thông tin chi tiết | |||||||
---|---|---|---|---|---|---|---|
Tham số |
|
||||||
Giá trị trả về |
|
Init
WEAVE_ERROR Init( TLVReader & aReader, uint32_t freeLen )
Khởi động đối tượng TLVUpdater bằng TLVReader.
Khi gọi phương thức này, dữ liệu TLV trong vùng đệm do TLVReader trỏ đến sẽ được di chuyển từ điểm đọc hiện tại đến cuối vùng đệm. Một đối tượng TLVReader riêng tư mới được khởi tạo để đọc từ vị trí mới này, trong khi một đối tượng TLVWriter riêng tư mới được khởi động để ghi vào không gian đệm đã giải phóng.
Lưu ý rằng nếu TLVReader đã được đặt ở vị trí "on" (bật) một phần tử thì đầu tiên phần tử đó sẽ được sao lưu vào phần đầu của phần tử đó. Ngoài ra, xin lưu ý rằng thao tác sao lưu này hoạt động tốt với các phần tử vùng chứa, tức là nếu TLVReader đã được dùng để gọi EnterContainer(), thì bạn không cần phải sao lưu. Nhưng nếu TLVReader được định vị trên phần tử vùng chứa và EnterContainer() chưa được gọi, thì đối tượng TLVReader sẽ được sao lưu vào phần đầu của tiêu đề vùng chứa.
Đối tượng TLVReader đầu vào sẽ bị huỷ trước khi quay lại và ứng dụng không được sử dụng đối tượng tương tự khi trả về.
Thông tin chi tiết | |||||||
---|---|---|---|---|---|---|---|
Tham số |
|
||||||
Giá trị trả về |
|
Di chuyển
WEAVE_ERROR Move( void )
Sao chép phần tử hiện tại trong dữ liệu đầu vào TLV để xuất TLV.
Phương thức Move() sẽ sao chép phần tử hiện tại nơi đặt trình đọc của TLVUpdater sang trình ghi của TLVUpdater. Ứng dụng sẽ gọi Next() và định vị trình đọc của TLVUpdater trên một phần tử trước khi gọi phương thức này. Giống như phương thức TLVReader::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 gọi, thì tất cả thành phần của vùng chứa sẽ được sao chép. Nếu trình đọc không được đặt trên bất kỳ phần tử nào thì sẽ không có gì thay đổi khi gọi phương thức này.
Thông tin chi tiết | |||||||||
---|---|---|---|---|---|---|---|---|---|
Giá trị trả về |
|
MoveUntilEnd
void MoveUntilEnd( void )
Di chuyển mọi thứ từ điểm đọc hiện tại của TLVUpdater cho đến khi kết thúc bộ đệm TLV đầu vào sang đầu ra.
Phương thức này hỗ trợ việc di chuyển mọi thứ từ điểm đọc hiện tại của TLVUpdater cho đến cuối vùng đệm trình đọc sang trình ghi của TLVUpdater.
Tiếp theo
WEAVE_ERROR Next( void )
Bỏ qua phần tử hiện tại và chuyển đối tượng TLVUpdater sang phần tử tiếp theo trong đầu vào TLV.
Phương thức Next() bỏ qua phần tử hiện tại trong TLV đầu vào và chuyển trình đọc của TLVUpdater sang phần tử tiếp theo 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 lên phần tử tiếp theo ở trên cùng nhất. 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ề |
|
Đặt
WEAVE_ERROR Put( uint64_t tag, int8_t v )
Đặt
WEAVE_ERROR Put( uint64_t tag, int16_t v )
Đặt
WEAVE_ERROR Put( uint64_t tag, int32_t v )
Đặt
WEAVE_ERROR Put( uint64_t tag, int64_t v )
Đặt
WEAVE_ERROR Put( uint64_t tag, uint8_t v )
Đặt
WEAVE_ERROR Put( uint64_t tag, uint16_t v )
Đặt
WEAVE_ERROR Put( uint64_t tag, uint32_t v )
Đặt
WEAVE_ERROR Put( uint64_t tag, uint64_t v )
Đặt
WEAVE_ERROR Put( uint64_t tag, int8_t v, bool preserveSize )
Đặt
WEAVE_ERROR Put( uint64_t tag, int16_t v, bool preserveSize )
Đặt
WEAVE_ERROR Put( uint64_t tag, int32_t v, bool preserveSize )
Đặt
WEAVE_ERROR Put( uint64_t tag, int64_t v, bool preserveSize )
Đặt
WEAVE_ERROR Put( uint64_t tag, uint8_t v, bool preserveSize )
Đặt
WEAVE_ERROR Put( uint64_t tag, uint16_t v, bool preserveSize )
Đặt
WEAVE_ERROR Put( uint64_t tag, uint32_t v, bool preserveSize )
Đặt
WEAVE_ERROR Put( uint64_t tag, uint64_t v, bool preserveSize )
Đặt
WEAVE_ERROR Put( uint64_t tag, float v )
Đặt
WEAVE_ERROR Put( uint64_t tag, double v )
PutBoolean
WEAVE_ERROR PutBoolean( uint64_t tag, bool v )
PutBytes
WEAVE_ERROR PutBytes( uint64_t tag, const uint8_t *buf, uint32_t len )
PutNull
WEAVE_ERROR PutNull( uint64_t tag )
PutString
WEAVE_ERROR PutString( uint64_t tag, const char *buf )
PutString
WEAVE_ERROR PutString( uint64_t tag, const char *buf, uint32_t len )
SetImplicitProfileId
void SetImplicitProfileId( uint32_t profileId )
Đặt mã nhận dạng hồ sơ ngầm ẩn cho đối tượng TLVUpdater.
Phương thức này sẽ đặt mã hồ sơ ngầm ẩn cho đối tượng TLVUpdater. Khi được yêu cầu mã hoá một phần tử mới, nếu mã cấu hình của thẻ liên kết với phần tử mới khớp với giá trị của profileId
, thì trình cập nhật sẽ mã hoá thẻ ở dạng ngầm ẩn, do đó, bỏ qua mã cấu hình trong quá trình này.
Thông tin chi tiết | |||
---|---|---|---|
Tham số |
|
StartContainer
WEAVE_ERROR StartContainer( uint64_t tag, TLVType containerType, TLVType & outerContainerType )