nl:: Weave:: TLV:: TLVWriter
#include <src/lib/core/WeaveTLV.h>
Cung cấp một bộ mã hoá hiệu quả về bộ nhớ để ghi dữ liệu ở định dạng TLV của Weave.
Tóm tắt
TLVWriter triển khai một bộ mã hoá theo kiểu phát trực tiếp, chỉ chuyển tiếp cho dữ liệu TLV của Weave. Ứng dụng ghi dữ liệu vào một phương thức mã hoá bằng cách gọi một trong các phương thức Put() của người ghi, truyền thông tin giá trị và thẻ được liên kết nếu cần. Tương tự, các ứng dụng tương tự có thể mã hoá các loại vùng chứa TLV (cấu trúc, mảng hoặc đường dẫn) bằng cách gọi phương thức OpenContainer() hoặc EnterContainer() của người viết.
Đối tượng TLVWriter có thể ghi dữ liệu trực tiếp vào vùng đệm đầu ra cố định hoặc vào một chuỗi gồm một hoặc nhiều đối tượng PacketBuffer. Ngoài ra, các ứng dụng có thể cung cấp hàm GetNewBuffer
và FinalizeBuffer
riêng để chuyển hướng đầu ra đến một đích đến tuỳ ý, ví dụ: một ổ cắm hoặc hàng đợi sự kiện.
Tính kế thừa
Lớp học con đã biết trực tiếp: nl::Weave::TLV::CircularTLVWriter
Kiểu được bảo vệ |
|
---|---|
@72{
|
enum |
Loại công khai |
|
---|---|
FinalizeBufferFunct)(TLVWriter &writer, uintptr_t bufHandle, uint8_t *bufStart, uint32_t bufLen)
|
WEAVE_ERROR(* Một hàm dùng để hoàn tất đầu ra từ đối tượng TLVWriter. |
GetNewBufferFunct)(TLVWriter &writer, uintptr_t &bufHandle, uint8_t *&bufStart, uint32_t &bufLen)
|
WEAVE_ERROR(* Một hàm cung cấp không gian vùng đệm đầu ra mới cho TLVWriter. |
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.
|
FinalizeBuffer
|
Con trỏ trỏ đến một hàm sẽ được gọi khi hoàn tất TLVWriter.
|
GetNewBuffer
|
Con trỏ trỏ đến một hàm sẽ cung cấp không gian vùng đệm đầu ra mới cho TLVWriter.
|
ImplicitProfileId
|
uint32_t
Mã hồ sơ của các thẻ được mã hoá ở dạng ngầm ẩn.
|
Thuộc tính được bảo vệ |
|
---|---|
mBufHandle
|
uintptr_t
|
mBufStart
|
uint8_t *
|
mContainerType
|
|
mLenWritten
|
uint32_t
|
mMaxLen
|
uint32_t
|
mRemainingLen
|
uint32_t
|
mWritePoint
|
uint8_t *
|
Hàm công khai |
|
---|---|
CloseContainer(TLVWriter & containerWriter)
|
Hoàn tất việc viết vùng chứa TLV sau khi thực hiện lệnh gọi đến OpenContainer().
|
ContinuePutBytes(const uint8_t *buf, uint32_t len)
|
Mã hoá giá trị chuỗi byte TLV.
|
CopyContainer(TLVReader & container)
|
|
CopyContainer(uint64_t tag, TLVReader & container)
|
Mã hoá phần tử vùng chứa TLV từ một tập hợp các phần tử thành phần được mã hoá trước.
|
CopyContainer(uint64_t tag, const uint8_t *encodedContainer, uint16_t encodedContainerLen)
|
Mã hoá một phần tử vùng chứa TLV chứa các phần tử thành phần từ một vùng chứa được mã hoá trước.
|
CopyElement(TLVReader & reader)
|
Sao chép phần tử TLV từ một đối tượng trình đọc vào tác giả.
|
CopyElement(uint64_t tag, TLVReader & reader)
|
|
EndContainer(TLVType outerContainerType)
|
Hoàn tất quá trình mã hoá phần tử vùng chứa TLV.
|
Finalize(void)
|
Hoàn tất việc viết bộ mã hoá TLV.
|
GetContainerType(void) const
|
Trả về loại vùng chứa mà TLVWriter hiện đang viết.
|
GetLengthWritten(void)
|
uint32_t
Trả về tổng số byte đã ghi kể từ khi trình ghi được khởi tạo.
|
Init(uint8_t *buf, uint32_t maxLen)
|
void
Khởi động một đối tượng TLVWriter để ghi vào một vùng đệm đầu ra duy nhất.
|
Init(PacketBuffer *buf, uint32_t maxLen)
|
void
Khởi động một đối tượng TLVWriter để ghi vào một PacketBuffer.
|
Init(PacketBuffer *buf, uint32_t maxLen, bool allowDiscontiguousBuffers)
|
void
Khởi động một đối tượng TLVWriter để ghi vào một hoặc nhiều PacketBuffers.
|
InitMalloced(uint8_t *& outBuf, uint32_t initialBufSize, uint32_t maxLen)
|
void
Khởi động một đối tượng TLVWriter để ghi vào vùng đệm động.
|
OpenContainer(uint64_t tag, TLVType containerType, TLVWriter & containerWriter)
|
|
Put(uint64_t tag, int8_t v)
|
Mã hoá giá trị số nguyên có dấu TLV.
|
Put(uint64_t tag, int8_t v, bool preserveSize)
|
Mã hoá giá trị số nguyên có dấu TLV.
|
Put(uint64_t tag, int16_t v)
|
|
Put(uint64_t tag, int16_t v, bool preserveSize)
|
|
Put(uint64_t tag, int32_t v)
|
|
Put(uint64_t tag, int32_t v, bool preserveSize)
|
|
Put(uint64_t tag, int64_t v)
|
|
Put(uint64_t tag, int64_t v, bool preserveSize)
|
|
Put(uint64_t tag, uint8_t v)
|
Mã hoá giá trị số nguyên chưa ký TLV.
|
Put(uint64_t tag, uint8_t v, bool preserveSize)
|
Mã hoá giá trị số nguyên chưa ký TLV.
|
Put(uint64_t tag, uint16_t v)
|
|
Put(uint64_t tag, uint16_t v, bool preserveSize)
|
|
Put(uint64_t tag, uint32_t v)
|
|
Put(uint64_t tag, uint32_t v, bool preserveSize)
|
|
Put(uint64_t tag, uint64_t v)
|
|
Put(uint64_t tag, uint64_t v, bool preserveSize)
|
|
Put(uint64_t tag, float v)
|
|
Put(uint64_t tag, double v)
|
Mã hoá giá trị dấu phẩy động TLV.
|
PutBoolean(uint64_t tag, bool v)
|
Mã hoá giá trị boolean TLV.
|
PutBytes(uint64_t tag, const uint8_t *buf, uint32_t len)
|
Mã hoá giá trị chuỗi byte TLV.
|
PutNull(uint64_t tag)
|
Mã hoá giá trị rỗng TLV.
|
PutPreEncodedContainer(uint64_t tag, TLVType containerType, const uint8_t *data, uint32_t dataLen)
|
Mã hoá phần tử vùng chứa TLV từ một tập hợp các phần tử thành phần được mã hoá trước.
|
PutString(uint64_t tag, const char *buf)
|
Mã hoá giá trị chuỗi UTF8 TLV.
|
PutString(uint64_t tag, const char *buf, uint32_t len)
|
Mã hoá giá trị chuỗi UTF8 TLV.
|
PutStringF(uint64_t tag, const char *fmt, ...)
|
Mã hoá đầu ra chuỗi được định dạng theo định dạng trong phần tử TLV.
|
StartContainer(uint64_t tag, TLVType containerType, TLVType & outerContainerType)
|
Bắt đầu mã hoá một phần tử vùng chứa TLV mới.
|
StartPutBytes(uint64_t tag, uint32_t totalLen)
|
Mã hoá một chuỗi byte TLV trong nhiều đoạn.
|
VPutStringF(uint64_t tag, const char *fmt, va_list ap)
|
Mã hoá đầu ra chuỗi được định dạng theo định dạng trong phần tử TLV.
|
Hàm tĩnh công khai |
|
---|---|
FinalizePacketBuffer(TLVWriter & writer, uintptr_t bufHandle, uint8_t *bufStart, uint32_t dataLen)
|
Hoạt động triển khai hàm FinalizeBuffer TLVWriter để ghi vào một chuỗi PacketBuffers.
|
GetNewBuffer_Malloced(TLVWriter & writer, uintptr_t & bufHandle, uint8_t *& bufStart, uint32_t & bufLen)
|
Hoạt động triển khai hàm GetNewBuffer TLVWriter để ghi vào bộ đệm động.
|
GetNewPacketBuffer(TLVWriter & writer, uintptr_t & bufHandle, uint8_t *& bufStart, uint32_t & bufLen)
|
Hoạt động triển khai hàm GetNewBuffer TLVWriter để ghi vào chuỗi PacketBuffers.
|
Hàm được bảo vệ |
|
---|---|
IsCloseContainerReserved(void) const
|
bool
Xác định xem vùng chứa có nên đặt trước khoảng trống cho biểu tượng CloseContainer tại thời điểm bắt đầu / mở vùng chứa hay không.
|
IsContainerOpen(void) const
|
bool
|
SetCloseContainerReserved(bool aCloseContainerReserved)
|
void
Đặt xem vùng chứa có nên đặt trước khoảng trống cho biểu tượng CloseContainer tại thời điểm bắt đầu / mở vùng chứa hay không.
|
SetContainerOpen(bool aContainerOpen)
|
void
|
WriteData(const uint8_t *p, uint32_t len)
|
|
WriteElementHead(TLVElementType elemType, uint64_t tag, uint64_t lenOrVal)
|
|
WriteElementWithData(TLVType type, uint64_t tag, const uint8_t *data, uint32_t dataLen)
|
Kiểu được bảo vệ
@72
@72
Loại công khai
FinalizeBufferFunct
WEAVE_ERROR(* FinalizeBufferFunct)(TLVWriter &writer, uintptr_t bufHandle, uint8_t *bufStart, uint32_t bufLen)
Một hàm dùng để hoàn tất đầu ra từ đối tượng TLVWriter.
Các hàm thuộc loại này được gọi khi phương thức Finalize() của TLVWriter được gọi. Hàm này được dự kiến sẽ thực hiện mọi thao tác dọn dẹp hoặc hoàn tất cần thiết liên quan đến việc sử dụng đầu ra của đối tượng writer. Có thể kể đến một số ví dụ như ghi lại độ dài cuối cùng của quá trình mã hoá hoặc đóng chỉ số mô tả tệp.
Chi tiết | |||||||||
---|---|---|---|---|---|---|---|---|---|
Tham số |
|
||||||||
Giá trị trả về |
|
GetNewBufferFunct
WEAVE_ERROR(* GetNewBufferFunct)(TLVWriter &writer, uintptr_t &bufHandle, uint8_t *&bufStart, uint32_t &bufLen)
Một hàm cung cấp không gian vùng đệm đầu ra mới cho TLVWriter.
Các hàm thuộc loại này được dùng để chuẩn bị không gian vùng đệm mới để TLVWriter ghi vào. Khi được gọi, hàm dự kiến sẽ trả về một con trỏ đến một vị trí bộ nhớ nơi dữ liệu mới sẽ được ghi, cùng với độ dài tối đa tương ứng. Hàm này có thể cung cấp không gian ghi bằng cách phân bổ một bộ đệm mới để lưu giữ dữ liệu hoặc xoá dữ liệu đã ghi trước đó khỏi bộ đệm hiện có.
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.
FinalizeBuffer
FinalizeBufferFunct FinalizeBuffer
Con trỏ trỏ đến một hàm sẽ được gọi khi hoàn tất TLVWriter.
Đối tượng TLVWriter sẽ gọi hàm FinalizeBuffer bất cứ khi nào phương thức Finalize() của đối tượng này được gọi. Các ứng dụng có thể đặt con trỏ hàm bất cứ lúc nào trước khi gọi Finalize(). Theo mặc định, con trỏ được đặt thành NULL, khiến phương thức Finalize() bỏ qua việc gọi hàm.
Xem định nghĩa loại FinalizeBufferFunct để biết thêm thông tin về cách triển khai hàm FinalizeBuffer.
GetNewBuffer
GetNewBufferFunct GetNewBuffer
Con trỏ trỏ đến một hàm sẽ cung cấp không gian vùng đệm đầu ra mới cho TLVWriter.
Đối tượng TLVWriter sẽ gọi hàm GetNewBuffer bất cứ khi nào cố gắng ghi dữ liệu vượt quá kích thước của bộ đệm đầu ra hiện tại. Nếu bạn đặt thành NULL (giá trị mặc định), thì trình ghi sẽ trả về giá trị WEAVE_ERROR_NO_MEMORY nếu dữ liệu đầu ra tràn vào vùng đệm hiện tại.
Ứng dụng có thể đặt GetNewBuffer bất cứ lúc nào, nhưng thường được đặt khi trình ghi được khởi tạo.
Xem định nghĩa loại GetNewBufferFunct để biết thêm thông tin về cách triển khai hàm GetNewBuffer.
ImplicitProfileId
uint32_t ImplicitProfileId
Mã hồ sơ của các thẻ được mã hoá ở dạng ngầm ẩn.
Khi được yêu cầu mã hoá một phần tử mới, nếu mã hồ sơ của thẻ được liên kết với phần tử mới khớp với giá trị của thành phần ImplicitProfileId
, thì trình ghi sẽ mã hoá thẻ ở dạng ngầm ẩn, bỏ qua mã nhận dạng hồ sơ trong quy trình này.
Theo mặc định, thuộc tính ImplicitProfileId
được đặt thành kProfileIdNotDetails, để chỉ dẫn người ghi không phát hành các thẻ được mã hoá ngầm. Các ứng dụng có thể đặt ImplicitProfileId
bất cứ lúc nào để bật các thẻ mã hoá ở dạng ngầm ẩn bắt đầu tại thời điểm hiện tại trong quá trình mã hoá. Id cấu hình thích hợp để đặt thường phụ thuộc vào ngữ cảnh của ứng dụng hoặc giao thức được sử dụng.
Thuộc tính được bảo vệ
mBufHandle
uintptr_t mBufHandle
mBufStart
uint8_t * mBufStart
mContainerType
TLVType mContainerType
mLenWritten
uint32_t mLenWritten
mMaxLen
uint32_t mMaxLen
mRemainingLen
uint32_t mRemainingLen
mWritePoint
uint8_t * mWritePoint
Hàm công khai
CloseContainer
WEAVE_ERROR CloseContainer( TLVWriter & containerWriter )
Hoàn tất việc viết vùng chứa TLV sau khi thực hiện lệnh gọi đến OpenContainer().
Phương thức CloseContainer() sẽ khôi phục trạng thái của đối tượng TLVWriter 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 người viết vùng chứa cho cả hai phương pháp.
Khi CloseContainer() trả về, các ứng dụng có thể tiếp tục sử dụng trình viết gốc để viết các phần tử TLV bổ sung xuất hiện sau phần tử vùng chứa. Tại thời điểm này, trình ghi vùng chứa đã cung cấp phải được coi là "đã huỷ khởi tạo" và không được sử dụng khi chưa khởi chạy lại.
Chi tiết | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Tham số |
|
||||||||||||
Giá trị trả về |
|
ContinuePutBytes
WEAVE_ERROR ContinuePutBytes( const uint8_t *buf, uint32_t len )
Mã hoá giá trị chuỗi byte TLV.
Bạn nên sử dụng thuộc tính này với StartPutBytes.
Chi tiết | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Tham số |
|
||||||||||||
Giá trị trả về |
|
CopyContainer
WEAVE_ERROR CopyContainer( TLVReader & container )
Sao chép một phần tử vùng chứa TLV từ đối tượng TLVReader.
CopyContainer() mã hoá một phần tử vùng chứa TLV mới bằng cách sao chép phần tử vùng chứa được mã hoá trước nằm ở vị trí hiện tại của đối tượng TLVReader. Phương thức này sẽ ghi toàn bộ phần tử vùng chứa mới trong một lệnh gọi, sao chép loại vùng chứa, thẻ và các phần tử từ phương thức mã hoá nguồn. Khi phương thức này trả về, đối tượng trình ghi có thể được dùng để viết các phần tử TLV bổ sung theo sau phần tử vùng chứa.
Chi tiết | |||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Tham số |
|
||||||||||||||||||
Giá trị trả về |
|
CopyContainer
WEAVE_ERROR CopyContainer( uint64_t tag, TLVReader & container )
Mã hoá phần tử vùng chứa TLV từ một tập hợp các phần tử thành phần được mã hoá trước.
Phương thức CopyContainer() mã hoá một phần tử vùng chứa TLV mới (cấu trúc, mảng hoặc đường dẫn) chứa một tập hợp các phần tử thành phần được lấy từ đối tượng TLVReader. Khi phương thức này được gọi, đối tượng trình đọc đã cung cấp dự kiến sẽ được định vị trên phần tử vùng chứa TLV. Vùng chứa được mã hoá mới sẽ có cùng loại và các thành phần với vùng chứa đầu vào. Thẻ cho vùng chứa mới được chỉ định làm thông số đầu vào.
Khi phương thức này trả về, đối tượng trình ghi có thể được dùng để viết các phần tử TLV bổ sung theo sau phần tử vùng chứa.
Chi tiết | |||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Tham số |
|
||||||||||||||||||
Giá trị trả về |
|
CopyContainer
WEAVE_ERROR CopyContainer( uint64_t tag, const uint8_t *encodedContainer, uint16_t encodedContainerLen )
Mã hoá một phần tử vùng chứa TLV chứa các phần tử thành phần từ một vùng chứa được mã hoá trước.
Phương thức CopyContainer() mã hóa phần tử vùng chứa TLV mới (cấu trúc, mảng hoặc đường dẫn) chứa tập hợp các phần tử thành phần được lấy từ nội dung của vùng chứa mã hóa trước đã cung cấp. Khi phương thức được gọi, dữ liệu trong vùng đệm đầu vào đã cung cấp sẽ được phân tích cú pháp dưới dạng phần tử vùng chứa TLV. Một vùng chứa mới được ghi có cùng kiểu và thành phần với vùng chứa đầu vào. Thẻ cho vùng chứa mới được chỉ định làm thông số đầu vào.
Khi phương thức này trả về, đối tượng trình ghi có thể được dùng để viết các phần tử TLV bổ sung theo sau phần tử vùng chứa.
Chi tiết | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Tham số |
|
||||||||||||||||
Giá trị trả về |
|
CopyElement
WEAVE_ERROR CopyElement( TLVReader & reader )
Sao chép phần tử TLV từ một đối tượng trình đọc vào tác giả.
Phương thức CopyElement() mã hóa một phần tử TLV mới có loại, thẻ và giá trị được lấy từ đối tượng TLVReader. Khi phương thức này được gọi, đối tượng trình đọc đã cung cấp dự kiến sẽ được định vị trên phần tử TLV nguồn. Phần tử mới được mã hoá sẽ có cùng loại, thẻ và nội dung với vùng chứa đầu vào. Nếu phần tử được cung cấp là vùng chứa TLV (cấu trúc, mảng hoặc đường dẫn), thì toàn bộ nội dung của vùng chứa sẽ được sao chép.
Chi tiết | |||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Tham số |
|
||||||||||||||||||
Giá trị trả về |
|
CopyElement
WEAVE_ERROR CopyElement( uint64_t tag, TLVReader & reader )
EndContainer
WEAVE_ERROR EndContainer( TLVType outerContainerType )
Hoàn tất quá trình mã hoá phần tử vùng chứa TLV.
Phương thức EndContainer() hoàn tất việc mã hoá phần tử vùng chứa TLV và khôi phục trạng thái của đối tượng TLVWrite sau lệnh gọi trước đó đến StartContainer(). Đối với mỗi lệnh gọi đến ứng dụng StartContainer(), phải thực hiện lệnh gọi tương ứng đến EndContainer(), chuyển giá trị TLVType được lệnh gọi StartContainer() trả về. Khi EndContainer() trả về, đối tượng writer có thể được dùng để viết các phần tử TLV bổ sung theo sau phần tử vùng chứa.
Chi tiết | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Tham số |
|
||||||||||||
Giá trị trả về |
|
Hoàn tất
WEAVE_ERROR Finalize( void )
Hoàn tất việc viết bộ mã hoá TLV.
Phương thức Finalize() hoàn tất quá trình ghi chế độ mã hoá TLV vào vùng đệm đầu ra cơ bản. Ứng dụng phải gọi phương thức này trước khi dùng nội dung của vùng đệm. Chỉ có thể gọi Finalize() khi không có trình ghi vùng chứa nào cho tác giả hiện tại. (Xem OpenContainer()
).
Chi tiết | |||||||
---|---|---|---|---|---|---|---|
Giá trị trả về |
|
GetContainerType
TLVType GetContainerType( void ) const
Trả về loại vùng chứa mà TLVWriter hiện đang viết.
Phương thức GetContainerType() trả về loại vùng chứa TLV mà TLVWriter hiện đang viết. Nếu TLVWriter không ghi các phần tử trong vùng chứa (tức là nếu viết ở cấp ngoài cùng của bộ mã hoá), thì phương thức này sẽ trả về kTLVType_Notspecified.
Chi tiết | |
---|---|
Trả về |
TLVType của vùng chứa hiện tại hoặc kTLVType_Not specified nếu TLVWriter không ghi các phần tử trong một vùng chứa.
|
GetLengthWritten
uint32_t GetLengthWritten( void )
Trả về tổng số byte đã ghi kể từ khi trình ghi được khởi tạo.
Chi tiết | |
---|---|
Trả về |
Tổng số byte đã ghi kể từ khi trình ghi được khởi tạo.
|
Init
void Init( uint8_t *buf, uint32_t maxLen )
Init
void Init( PacketBuffer *buf, uint32_t maxLen )
Khởi động một đối tượng TLVWriter để ghi vào một PacketBuffer.
Quá trình ghi bắt đầu ngay sau byte cuối cùng của dữ liệu hiện có trong vùng đệm đã cung cấp.
Chi tiết | |||||
---|---|---|---|---|---|
Tham số |
|
Init
void Init( PacketBuffer *buf, uint32_t maxLen, bool allowDiscontiguousBuffers )
Khởi động một đối tượng TLVWriter để ghi vào một hoặc nhiều PacketBuffers.
Quá trình ghi bắt đầu ngay sau byte cuối cùng của dữ liệu hiện có trong vùng đệm được chỉ định. Nếu giá trị allowDiscontiguousBuffers
là true, thì các PacketBuffers bổ sung sẽ được phân bổ và liên kết với bộ đệm đã cung cấp khi cần thiết để đáp ứng lượng dữ liệu đã ghi. Nếu vùng đệm đầu ra được chỉ định đã là phần đầu của chuỗi vùng đệm, thì đầu ra sẽ được ghi vào các vùng đệm tiếp theo trong chuỗi trước khi phân bổ bất kỳ vùng đệm mới nào.
Chi tiết | |||||||
---|---|---|---|---|---|---|---|
Tham số |
|
InitMalloced
void InitMalloced( uint8_t *& outBuf, uint32_t initialBufSize, uint32_t maxLen )
Khởi động một đối tượng TLVWriter để ghi vào vùng đệm động.
Chi tiết | |||||||
---|---|---|---|---|---|---|---|
Tham số |
|
OpenContainer
WEAVE_ERROR OpenContainer( uint64_t tag, TLVType containerType, TLVWriter & containerWriter )
Khởi chạy một đối tượng TLVWriter mới để ghi các thành phần của một phần tử vùng chứa TLV.
Phương thức OpenContainer() được dùng để ghi các phần tử vùng chứa TLV (cấu trúc, mảng hoặc đường dẫn) vào mã hoá. Phương thức này sẽ lấy loại và thẻ (nếu có) của vùng chứa mới, đồng thời tham chiếu đến một đối tượng trình ghi mới (trình viết của vùng chứa) sẽ được khởi tạo cho mục đích viết các thành phần của vùng chứa. Các ứng dụng ghi thành viên của vùng chứa mới bằng cách sử dụng trình ghi vùng chứa và sau đó gọi CloseContainer() để hoàn tất mã hóa vùng chứa.
Khi trình ghi 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 ghi mẹ.
Trình ghi vùng chứa kế thừa nhiều thuộc tính cấu hình từ trình ghi mẹ. Đó là:
- Mã hồ sơ ngầm ẩn (ImplicitProfileId)
- Con trỏ dữ liệu ứng dụng (AppData)
- Con trỏ hàm GetNewBuffer và FinalizeBuffer
Chi tiết | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Tham số |
|
||||||||||||||
Giá trị trả về |
|
Đặt
WEAVE_ERROR Put( uint64_t tag, int8_t v )
Mã hoá giá trị số nguyên có dấu TLV.
Đây là một hàm thành phần nạp chồng, được cung cấp để thuận tiện. Hàm này chỉ khác với hàm trên ở(các) đối số mà hàm chấp nhận.
Chi tiết | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Tham số |
|
||||||||||||
Giá trị trả về |
|
Đặt
WEAVE_ERROR Put( uint64_t tag, int8_t v, bool preserveSize )
Mã hoá giá trị số nguyên có dấu TLV.
Đây là một hàm thành phần nạp chồng, được cung cấp để thuận tiện. Hàm này chỉ khác với hàm trên ở(các) đối số mà hàm chấp nhận.
Chi tiết | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Tham số |
|
||||||||||||
Giá trị trả về |
|
Đặt
WEAVE_ERROR Put( uint64_t tag, int16_t v )
Đặt
WEAVE_ERROR Put( uint64_t tag, int16_t v, bool preserveSize )
Đặt
WEAVE_ERROR Put( uint64_t tag, int32_t v )
Đặt
WEAVE_ERROR Put( uint64_t tag, int32_t v, bool preserveSize )
Đặt
WEAVE_ERROR Put( uint64_t tag, int64_t v )
Đặt
WEAVE_ERROR Put( uint64_t tag, int64_t v, bool preserveSize )
Đặt
WEAVE_ERROR Put( uint64_t tag, uint8_t v )
Mã hoá giá trị số nguyên chưa ký TLV.
Đây là một hàm thành phần nạp chồng, được cung cấp để thuận tiện. Hàm này chỉ khác với hàm trên ở(các) đối số mà hàm chấp nhận.
Chi tiết | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Tham số |
|
||||||||||||
Giá trị trả về |
|
Đặt
WEAVE_ERROR Put( uint64_t tag, uint8_t v, bool preserveSize )
Mã hoá giá trị số nguyên chưa ký TLV.
Đây là một hàm thành phần nạp chồng, được cung cấp để thuận tiện. Hàm này chỉ khác với hàm trên ở(các) đối số mà hàm chấp nhận.
Chi tiết | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Tham số |
|
||||||||||||
Giá trị trả về |
|
Đặt
WEAVE_ERROR Put( uint64_t tag, uint16_t v )
Đặt
WEAVE_ERROR Put( uint64_t tag, uint16_t v, bool preserveSize )
Đặt
WEAVE_ERROR Put( uint64_t tag, uint32_t v )
Đặt
WEAVE_ERROR Put( uint64_t tag, uint32_t v, bool preserveSize )
Đặt
WEAVE_ERROR Put( uint64_t tag, uint64_t v )
Đặ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 )
Mã hoá giá trị dấu phẩy động TLV.
Đây là một hàm thành phần nạp chồng, được cung cấp để thuận tiện. Hàm này chỉ khác với hàm trên ở(các) đối số mà hàm chấp nhận.
Chi tiết | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Tham số |
|
||||||||||||
Giá trị trả về |
|
PutBoolean
WEAVE_ERROR PutBoolean( uint64_t tag, bool v )
Mã hoá giá trị boolean TLV.
Chi tiết | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Tham số |
|
||||||||||||
Giá trị trả về |
|
PutBytes
WEAVE_ERROR PutBytes( uint64_t tag, const uint8_t *buf, uint32_t len )
Mã hoá giá trị chuỗi byte TLV.
Chi tiết | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Tham số |
|
||||||||||||
Giá trị trả về |
|
PutNull
WEAVE_ERROR PutNull( uint64_t tag )
Mã hoá giá trị rỗng TLV.
Chi tiết | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Tham số |
|
||||||||||||
Giá trị trả về |
|
PutPreEncodedContainer
WEAVE_ERROR PutPreEncodedContainer( uint64_t tag, TLVType containerType, const uint8_t *data, uint32_t dataLen )
Mã hoá phần tử vùng chứa TLV từ một tập hợp các phần tử thành phần được mã hoá trước.
Phương thức PutPreEncodedContainer() sẽ mã hoá một phần tử vùng chứa TLV mới (cấu trúc, mảng hoặc đường dẫn) chứa một tập hợp các phần tử con được lấy từ vùng đệm mã hoá trước. Vùng đệm đầu vào dự kiến sẽ chứa không hoặc nhiều phần tử TLV được mã hoá đầy đủ, với các thẻ tuân thủ các quy tắc liên kết với loại vùng chứa được chỉ định (ví dụ: thành phần cấu trúc phải có thẻ, trong khi các thành phần mảng thì không).
Phương thức này mã hoá toàn bộ phần tử vùng chứa trong một lệnh gọi. Khi PutPreEncodedContainer() trả về, đối tượng writer có thể được dùng để viết các phần tử TLV bổ sung theo sau phần tử vùng chứa.
Chi tiết | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Tham số |
|
||||||||||||||
Giá trị trả về |
|
PutString
WEAVE_ERROR PutString( uint64_t tag, const char *buf )
Mã hoá giá trị chuỗi UTF8 TLV.
Chi tiết | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Tham số |
|
||||||||||||
Giá trị trả về |
|
PutString
WEAVE_ERROR PutString( uint64_t tag, const char *buf, uint32_t len )
Mã hoá giá trị chuỗi UTF8 TLV.
Chi tiết | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Tham số |
|
||||||||||||
Giá trị trả về |
|
PutStringF
WEAVE_ERROR PutStringF( uint64_t tag, const char *fmt, ... )
Mã hoá đầu ra chuỗi được định dạng theo định dạng trong phần tử TLV.
PutStringF là một dạng tương tự của sprintf, trong đó đầu ra được lưu trữ trong phần tử TLV thay vì vùng đệm ký tự. Khi chức năng printf mở rộng được cung cấp, hàm này có thể xuất chuỗi kết quả vào bộ nhớ cơ bản không liên tục. Quá trình triển khai hỗ trợ các tính năng nâng cao cho printf sau đây:
Nền tảng này cung cấp vcbprintf
dựa trên lệnh gọi lại, cho phép gọi một lệnh gọi lại tuỳ chỉnh thay cho putchar.
Nền tảng này cung cấp một biến thể của vsnprintf
có tên là vsnprintf_ex
, hoạt động giống hệt như vsnprintf, ngoại trừ việc có các điều khoản để bỏ qua n
ký tự đầu ra của kết quả.
Lưu ý rằng mặc dù hàm dựa trên lệnh gọi lại có thể là đơn giản nhất và sử dụng ít mã nhất, nhưng sự đa dạng của các hàm vsprintf_ex
sẽ tốn ít ngăn xếp hơn.
Nếu không có lựa chọn nào nêu trên, nhưng nền tảng cung cấp malloc
thì hàm sẽ phân bổ vùng đệm tạm thời để lưu giữ đầu ra. Khi nền tảng không cung cấp tính năng nâng cao cho nhóm printf cũng như malloc, kết quả sẽ bị cắt bớt để phù hợp với trạng thái liên tục trong bộ nhớ TLV hiện tại
Chi tiết | |||||||
---|---|---|---|---|---|---|---|
Tham số |
|
||||||
Giá trị trả về |
|
StartContainer
WEAVE_ERROR StartContainer( uint64_t tag, TLVType containerType, TLVType & outerContainerType )
Bắt đầu mã hoá một phần tử vùng chứa TLV mới.
Phương thức StartContainer() được dùng để ghi các phần tử vùng chứa TLV (cấu trúc, mảng hoặc đường dẫn) vào mã hoá. Phương thức này sẽ lấy loại và thẻ (nếu có) của vùng chứa mới, đồng thời tham chiếu đến giá trị TLVType sẽ được dùng để lưu ngữ cảnh hiện tại của tác giả trong khi đang được dùng để viết vùng chứa.
Sau khi phương thức StartContainer() trả về, ứng dụng sẽ sử dụng đối tượng TLVWriter hiện tại để ghi các phần tử của vùng chứa. Khi hoàn tất, ứng dụng phải gọi phương thức EndContainer() để hoàn tất mã hoá vùng chứa.
Chi tiết | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Tham số |
|
||||||||||||||
Giá trị trả về |
|
StartPutBytes
WEAVE_ERROR StartPutBytes( uint64_t tag, uint32_t totalLen )
Mã hoá một chuỗi byte TLV trong nhiều đoạn.
Bạn nên dùng phương thức này với ContinuePutBytes.
Chi tiết | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Tham số |
|
||||||||||||
Giá trị trả về |
|
VPutStringF
WEAVE_ERROR VPutStringF( uint64_t tag, const char *fmt, va_list ap )
Mã hoá đầu ra chuỗi được định dạng theo định dạng trong phần tử TLV.
PutStringF là một dạng tương tự của sprintf, trong đó đầu ra được lưu trữ trong phần tử TLV thay vì vùng đệm ký tự. Khi chức năng printf mở rộng được cung cấp, hàm này có thể xuất chuỗi kết quả vào bộ nhớ cơ bản không liên tục. Quá trình triển khai hỗ trợ các tính năng nâng cao cho printf sau đây:
Nền tảng này cung cấp vcbprintf
dựa trên lệnh gọi lại, cho phép gọi một lệnh gọi lại tuỳ chỉnh thay cho putchar.
Nền tảng này cung cấp một biến thể của vsnprintf
có tên là vsnprintf_ex
, hoạt động giống hệt như vsnprintf, ngoại trừ việc có các điều khoản để bỏ qua n
ký tự đầu ra của kết quả.
Lưu ý rằng mặc dù hàm dựa trên lệnh gọi lại có thể là đơn giản nhất và sử dụng ít mã nhất, nhưng sự đa dạng của các hàm vsprintf_ex
sẽ tốn ít ngăn xếp hơn.
Nếu không có lựa chọn nào nêu trên, nhưng nền tảng cung cấp malloc
thì hàm sẽ phân bổ vùng đệm tạm thời để lưu giữ đầu ra. Khi nền tảng không cung cấp tính năng nâng cao cho nhóm printf cũng như malloc, kết quả sẽ bị cắt bớt để phù hợp với trạng thái liên tục trong bộ nhớ TLV hiện tại
Chi tiết | |||||||
---|---|---|---|---|---|---|---|
Tham số |
|
||||||
Giá trị trả về |
|
Hàm tĩnh công khai
FinalizePacketBuffer
WEAVE_ERROR FinalizePacketBuffer( TLVWriter & writer, uintptr_t bufHandle, uint8_t *bufStart, uint32_t dataLen )
Hoạt động triển khai hàm FinalizeBuffer TLVWriter để ghi vào một chuỗi PacketBuffers.
Hàm FinalizePacketBuffer() thực hiện bước hoàn tất cần thiết cần thiết khi sử dụng TLVWriter để ghi vào chuỗi PacketBuffers. Hàm này được thiết kế để dùng cùng với hàm GetNewPacketBuffer().
Xem định nghĩa loại FinalizeBufferFunct để biết thêm thông tin về API của hàm FinalizePacketBuffer().
GetNewBuffer_Malloced
WEAVE_ERROR GetNewBuffer_Malloced( TLVWriter & writer, uintptr_t & bufHandle, uint8_t *& bufStart, uint32_t & bufLen )
Hoạt động triển khai hàm GetNewBuffer TLVWriter để ghi vào bộ đệm động.
Hàm GetNewBuffer_Malloced() cung cấp không gian đầu ra mới cho TLVWriter bằng cách tăng gấp đôi kích thước của bộ đệm động cơ bản khi cần để lưu trữ bộ mã hoá. Hàm này được thiết kế để gán cho con trỏ hàm GetNewBuffer TLVWriter.
Xem định nghĩa loại GetNewBufferFunct để biết thêm thông tin về API của hàm GetNewBuffer_Malloced().
GetNewPacketBuffer
WEAVE_ERROR GetNewPacketBuffer( TLVWriter & writer, uintptr_t & bufHandle, uint8_t *& bufStart, uint32_t & bufLen )
Hoạt động triển khai hàm GetNewBuffer TLVWriter để ghi vào chuỗi PacketBuffers.
Hàm GetNewPacketBuffer() cung cấp không gian đầu ra mới cho TLVWriter bằng cách phân bổ một chuỗi gồm một hoặc nhiều PacketBuffers cần thiết để lưu trữ bộ mã hoá. Hàm này được thiết kế để gán cho con trỏ hàm GetNewBuffer TLVWriter.
Lưu ý rằng khi sử dụng GetNewPacketBuffer với TLVWriter, bạn cũng nên sử dụng hàm FinalizePacketBuffer() tương ứng (hoặc một hàm tương đương) để hoàn tất chuỗi bộ đệm.
Xem định nghĩa loại GetNewBufferFunct để biết thêm thông tin về API của hàm GetNewPacketBuffer().
Hàm được bảo vệ
IsCloseContainerReserved
bool IsCloseContainerReserved( void ) const
Xác định xem vùng chứa có nên đặt trước khoảng trống cho biểu tượng CloseContainer tại thời điểm bắt đầu / mở vùng chứa hay không.
IsContainerOpen
bool IsContainerOpen( void ) const
SetCloseContainerReserved
void SetCloseContainerReserved( bool aCloseContainerReserved )
Đặt xem vùng chứa có nên đặt trước khoảng trống cho biểu tượng CloseContainer tại thời điểm bắt đầu / mở vùng chứa hay không.
SetContainerOpen
void SetContainerOpen( bool aContainerOpen )
WriteData
WEAVE_ERROR WriteData( const uint8_t *p, uint32_t len )
WriteElementHead
WEAVE_ERROR WriteElementHead( TLVElementType elemType, uint64_t tag, uint64_t lenOrVal )
WriteElementWithData
WEAVE_ERROR WriteElementWithData( TLVType type, uint64_t tag, const uint8_t *data, uint32_t dataLen )