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á kiểu phát trực tiếp chỉ chuyển tiếp cho dữ liệu TLV của Weave. Các ứng dụng ghi dữ liệu vào chế độ mã hoá bằng cách gọi một trong các phương thức Put() của trình ghi, chuyển thẻ liên quan và thông tin giá trị khi cần. 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 một 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 các hàm GetNewBuffer
và FinalizeBuffer
riêng để chuyển đầu ra đến một đích tuỳ ý, chẳng hạn như một ổ cắm hoặc một hàng đợi sự kiện.
Tính kế thừa
Các lớp 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 thiện đầu ra của đố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. |
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.
|
FinalizeBuffer
|
Con trỏ đến một hàm sẽ được gọi khi TLVWriter được hoàn tất.
|
GetNewBuffer
|
Con 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
Id hồ sơ của thẻ phải được mã hoá dưới 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 lệnh gọi OpenContainer().
|
ContinuePutBytes(const uint8_t *buf, uint32_t len)
|
Mã hoá một giá trị chuỗi byte TLV.
|
CopyContainer(TLVReader & container)
|
|
CopyContainer(uint64_t tag, TLVReader & container)
|
Mã hoá một 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 một phần tử TLV từ đối tượng trình đọc vào trình ghi.
|
CopyElement(uint64_t tag, TLVReader & reader)
|
|
EndContainer(TLVType outerContainerType)
|
Hoàn tất quá trình mã hoá một phần tử vùng chứa TLV.
|
Finalize(void)
|
Hoàn tất quá trình viết mã hoá TLV.
|
GetContainerType(void) const
|
Trả về loại vùng chứa mà TLVWriter đang ghi trong đó.
|
GetLengthWritten(void)
|
uint32_t
Trả về tổng số byte đã ghi kể từ khi khởi tạo trình ghi.
|
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.
|
Init(PacketBuffer *buf, uint32_t maxLen)
|
void
Khởi động đố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 đố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á một giá trị số nguyên có dấu TLV.
|
Put(uint64_t tag, int8_t v, bool preserveSize)
|
Mã hoá một 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á một giá trị số nguyên chưa ký TLV.
|
Put(uint64_t tag, uint8_t v, bool preserveSize)
|
Mã hoá một 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á một giá trị dấu phẩy động TLV.
|
PutBoolean(uint64_t tag, bool v)
|
Mã hoá một giá trị boolean TLV.
|
PutBytes(uint64_t tag, const uint8_t *buf, uint32_t len)
|
Mã hoá một giá trị chuỗi byte TLV.
|
PutNull(uint64_t tag)
|
Mã hoá một giá trị rỗng TLV.
|
PutPreEncodedContainer(uint64_t tag, TLVType containerType, const uint8_t *data, uint32_t dataLen)
|
Mã hoá một 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á một giá trị chuỗi UTF8 TLV.
|
PutString(uint64_t tag, const char *buf, uint32_t len)
|
Mã hoá một 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 thành 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)
|
Triển khai hàm TLVWriter FinalizeBuffer để ghi vào một chuỗi PacketBuffers.
|
GetNewBuffer_Malloced(TLVWriter & writer, uintptr_t & bufHandle, uint8_t *& bufStart, uint32_t & bufLen)
|
Triển khai hàm GetNewBuffer của TLVWriter để ghi vào vùng đệm động.
|
GetNewPacketBuffer(TLVWriter & writer, uintptr_t & bufHandle, uint8_t *& bufStart, uint32_t & bufLen)
|
Triển khai hàm GetNewBuffer của TLVWriter để ghi vào một chuỗi PacketBuffers.
|
Hàm được bảo vệ |
|
---|---|
IsCloseContainerReserved(void) const
|
bool
Xác định xem vùng chứa có cần đặt trước không gian 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
Thiết lập xem vùng chứa có nên đặt trước không gian 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 thiện đầu ra của đố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 thiện cần thiết liên quan đến việc tiêu thụ đầu ra của đối tượng trình ghi. Có thể kể đến một số ví dụ như ghi lại độ dài cuối cùng của mã hoá hoặc đóng chỉ số mô tả tệp.
Thông tin chi tiết | |||||||||
---|---|---|---|---|---|---|---|---|---|
Các 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 đệm mới cho TLVWriter để ghi vào. Khi được gọi, hàm dự kiến sẽ trả về một con trỏ tới 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 có thể cung cấp không gian ghi bằng cách phân bổ một vùng đệm mới để lưu giữ dữ liệu hoặc xoá dữ liệu đã ghi trước đó khỏi vùng đệm hiện có.
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.
FinalizeBuffer
FinalizeBufferFunct FinalizeBuffer
Con trỏ đến một hàm sẽ được gọi khi TLVWriter được hoàn tất.
Đối tượng TLVWriter sẽ gọi hàm FinalizeBuffer mỗi khi phương thức Finalize() được gọi. Các ứng dụng có thể đặt con trỏ hàm vào bất kỳ thời điểm 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ỏ đế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 vùng đệm đầu ra hiện tại. Nếu được đặt thành NULL (giá trị mặc định), thì trình ghi sẽ trả về một WEAVE_ERROR_NO_MEMORY nếu dữ liệu đầu ra vượt quá vùng đệm hiện tại.
Ứng dụng có thể thiết lập GetNewBuffer bất cứ lúc nào, nhưng thường được đặt khi trình ghi được khởi chạy.
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
Id hồ sơ của thẻ phải được mã hoá dưới dạng ngầm ẩn.
Khi người ghi đượ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 quá trình này.
Theo mặc định, thuộc tính ImplicitProfileId
được đặt thành kProfileIdNotSpecified hướng dẫn người ghi không phát ra các thẻ được mã hoá ngầm. Ứng dụng có thể đặt ImplicitProfileId
bất kỳ lúc nào để bật các thẻ mã hoá ở dạng ngầm ẩn, bắt đầu từ điểm hiện tại trong mã hoá. Mã cấu hình thích hợp cần đặt thường phụ thuộc vào ngữ cảnh của ứng dụng hoặc giao thức được nói.
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 lệnh gọi OpenContainer().
Phương thức CloseContainer() khôi phục trạng thái của đối tượng TLVWriter mẹ 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 ghi vùng chứa cho cả hai phương thức.
Khi CloseContainer() trả về, ứng dụng có thể tiếp tục sử dụng trình ghi mẹ để ghi thêm các phần tử TLV 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 xem là "huỷ khởi tạo" và không được sử dụng nếu không khởi chạy lại.
Thông tin chi tiết | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Các tham số |
|
||||||||||||
Giá trị trả về |
|
ContinuePutBytes
WEAVE_ERROR ContinuePutBytes( const uint8_t *buf, uint32_t len )
Mã hoá một giá trị chuỗi byte TLV.
Bạn nên sử dụng biến này với StartPutBytes.
Thông tin chi tiết | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Các tham số |
|
||||||||||||
Giá trị trả về |
|
CopyContainer
WEAVE_ERROR CopyContainer( TLVReader & container )
Sao chép phần tử vùng chứa TLV từ đối tượng TLVReader.
CopyContainer() mã hoá thành phần vùng chứa TLV mới bằng cách sao chép thành phần 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, thẻ và các phần tử của vùng chứa từ mã hóa nguồn. Khi phương thức trả về, bạn có thể sử dụng đối tượng trình ghi để viết thêm các phần tử TLV theo sau phần tử vùng chứa.
Thông tin chi tiết | |||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Các tham số |
|
||||||||||||||||||
Giá trị trả về |
|
CopyContainer
WEAVE_ERROR CopyContainer( uint64_t tag, TLVReader & container )
Mã hoá một 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 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 đượ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 mới mã hoá sẽ có cùng loại và thành viên với vùng chứa dữ liệu đầ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 trả về, bạn có thể sử dụng đối tượng trình ghi để viết thêm các phần tử TLV theo sau phần tử vùng chứa.
Thông tin chi tiết | |||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Các 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ã 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 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 được mã hoá trước đã cung cấp. Khi phương thức này đượ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 thành phần vùng chứa TLV. Vùng chứa mới được viết có cùng kiểu 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 trả về, bạn có thể sử dụng đối tượng trình ghi để viết thêm các phần tử TLV theo sau phần tử vùng chứa.
Thông tin chi tiết | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Các tham số |
|
||||||||||||||||
Giá trị trả về |
|
CopyElement
WEAVE_ERROR CopyElement( TLVReader & reader )
Sao chép một phần tử TLV từ đối tượng trình đọc vào trình ghi.
Phương thức CopyElement() mã hoá 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 đượ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 như 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), toàn bộ nội dung của vùng chứa sẽ được sao chép.
Thông tin chi tiết | |||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Các 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á một phần tử vùng chứa TLV.
Phương thức EndContainer() hoàn tất quá trình 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 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.
Thông tin chi tiết | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Các tham số |
|
||||||||||||
Giá trị trả về |
|
Hoàn tất
WEAVE_ERROR Finalize( void )
Hoàn tất quá trình viết mã hoá TLV.
Phương thức Finalize() hoàn tất quá trình ghi 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 sử dụng nội dung trong vùng đệm. Bạn chỉ có thể gọi Finalize() khi không có người viết vùng chứa nào mở cho tác giả hiện tại. (Xem OpenContainer()
).
Thông tin chi tiết | |||||||
---|---|---|---|---|---|---|---|
Giá trị trả về |
|
GetContainerType
TLVType GetContainerType( void ) const
Trả về loại vùng chứa mà TLVWriter đang ghi trong đó.
Phương thức GetContainerType() trả về loại vùng chứa TLV mà TLVWriter hiện đang ghi. Nếu TLVWriter không ghi các phần tử trong một vùng chứa (tức là nếu ghi ở cấp ngoài cùng của một bộ mã hoá), 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 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 khởi tạo trình ghi.
Thông tin chi tiết | |
---|---|
Trả về |
Tổng số byte đã ghi kể từ khi khởi tạo trình ghi.
|
Bắt đầu
void Init( uint8_t *buf, uint32_t maxLen )
Bắt đầu
void Init( PacketBuffer *buf, uint32_t maxLen )
Khởi động đố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 được cung cấ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 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à đúng, các Gói đệm bổ sung sẽ được phân bổ và liên kết với vùng đệm được cung cấp khi cần để đáp ứng lượng dữ liệu được ghi. Nếu vùng đệm đầu ra được chỉ định đã là đầu của chuỗi vùng đệm, thì dữ liệu đầ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.
Thông tin chi tiết | |||||||
---|---|---|---|---|---|---|---|
Các tham số |
|
InitMalloced
void InitMalloced( uint8_t *& outBuf, uint32_t initialBufSize, uint32_t maxLen )
Khởi động đối tượng TLVWriter để ghi vào vùng đệm động.
Thông tin chi tiết | |||||||
---|---|---|---|---|---|---|---|
Các 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 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 lấy loại và thẻ (nếu có) của vùng chứa mới và tham chiếu đến một đối tượng trình ghi mới (trình ghi vùng chứa) sẽ được khởi tạo cho mục đích ghi các phần tử của vùng chứa. Các ứng dụng ghi các thành phầ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ở, ứ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
Thông tin chi tiết | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Các tham số |
|
||||||||||||||
Giá trị trả về |
|
Đặt
WEAVE_ERROR Put( uint64_t tag, int8_t v )
Mã hoá một giá trị số nguyên có dấu TLV.
Đây là 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.
Thông tin chi tiết | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Các tham số |
|
||||||||||||
Giá trị trả về |
|
Đặt
WEAVE_ERROR Put( uint64_t tag, int8_t v, bool preserveSize )
Mã hoá một giá trị số nguyên có dấu TLV.
Đây là 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.
Thông tin chi tiết | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Các 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á một giá trị số nguyên chưa ký TLV.
Đây là 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.
Thông tin chi tiết | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Các tham số |
|
||||||||||||
Giá trị trả về |
|
Đặt
WEAVE_ERROR Put( uint64_t tag, uint8_t v, bool preserveSize )
Mã hoá một giá trị số nguyên chưa ký TLV.
Đây là 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.
Thông tin chi tiết | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Các 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á một giá trị dấu phẩy động TLV.
Đây là 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.
Thông tin chi tiết | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Các tham số |
|
||||||||||||
Giá trị trả về |
|
PutBoolean
WEAVE_ERROR PutBoolean( uint64_t tag, bool v )
Mã hoá một giá trị boolean TLV.
Thông tin chi tiết | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Các tham số |
|
||||||||||||
Giá trị trả về |
|
PutBytes
WEAVE_ERROR PutBytes( uint64_t tag, const uint8_t *buf, uint32_t len )
Mã hoá một giá trị chuỗi byte TLV.
Thông tin chi tiết | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Các tham số |
|
||||||||||||
Giá trị trả về |
|
PutNull
WEAVE_ERROR PutNull( uint64_t tag )
Mã hoá một giá trị rỗng TLV.
Thông tin chi tiết | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Các tham số |
|
||||||||||||
Giá trị trả về |
|
PutPreEncodedContainer
WEAVE_ERROR PutPreEncodedContainer( uint64_t tag, TLVType containerType, const uint8_t *data, uint32_t dataLen )
Mã hoá một 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() 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ừ vùng đệm được mã hoá trước. Bộ đệm đầu vào dự kiến sẽ chứa 0 hoặc nhiều phần tử TLV được mã hoá đầy đủ, với các thẻ tuân thủ quy tắc liên quan đến loại vùng chứa đã 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 trình ghi có thể được sử dụng để viết thêm các phần tử TLV sau phần tử vùng chứa.
Thông tin chi tiết | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Các tham số |
|
||||||||||||||
Giá trị trả về |
|
PutString
WEAVE_ERROR PutString( uint64_t tag, const char *buf )
Mã hoá một giá trị chuỗi UTF8 TLV.
Thông tin chi tiết | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Các tham số |
|
||||||||||||
Giá trị trả về |
|
PutString
WEAVE_ERROR PutString( uint64_t tag, const char *buf, uint32_t len )
Mã hoá một giá trị chuỗi UTF8 TLV.
Thông tin chi tiết | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Các 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 tương tự như sprintf, trong đó dữ liệu đầu ra được lưu trữ trong phần tử TLV trái ngược với vùng đệm ký tự. Khi dùng được chức năng printf mở rộng, hàm này có thể xuất chuỗi kết quả vào một bộ nhớ cơ bản gián đoạn. Việc triển khai hỗ trợ các tính năng nâng cao printf sau đây:
Nền tảng này cung cấp một vcbprintf
dựa trên lệnh gọi lại, cung cấp khả năng 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ư so với Vnprintf, ngoại trừ việc có điều khoản bỏ qua n
ký tự đầu tiên của kết quả.
Xin lưu ý rằng mặc dù hàm dựa trên lệnh gọi lại có thể đơn giản nhất và sử dụng ít mã nhất, nhưng các hàm vsprintf_ex
khác sẽ tốn ít ngăn xếp hơn.
Nếu cả hai tính năng trên đều không có sẵn nhưng nền tảng cung cấp malloc
, hàm sẽ phân bổ một vùng đệm tạm thời để lưu giữ kết quả. 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, đầu ra sẽ bị cắt bớt để vừa với trạng thái liên tục trong bộ nhớ TLV hiện tại
Thông tin chi tiết | |||||||
---|---|---|---|---|---|---|---|
Các 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 và tham chiếu đến giá trị TLVType sẽ được dùng để lưu ngữ cảnh hiện tại của trình ghi 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 việc mã hoá vùng chứa.
Thông tin chi tiết | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Các tham số |
|
||||||||||||||
Giá trị trả về |
|
StartPutBytes
WEAVE_ERROR StartPutBytes( uint64_t tag, uint32_t totalLen )
Mã hoá một chuỗi byte TLV thành nhiều đoạn.
Bạn nên sử dụng phương thức này với ContinuePutBytes.
Thông tin chi tiết | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Các 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 tương tự như sprintf, trong đó dữ liệu đầu ra được lưu trữ trong phần tử TLV trái ngược với vùng đệm ký tự. Khi dùng được chức năng printf mở rộng, hàm này có thể xuất chuỗi kết quả vào một bộ nhớ cơ bản gián đoạn. Việc triển khai hỗ trợ các tính năng nâng cao printf sau đây:
Nền tảng này cung cấp một vcbprintf
dựa trên lệnh gọi lại, cung cấp khả năng 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ư so với Vnprintf, ngoại trừ việc có điều khoản bỏ qua n
ký tự đầu tiên của kết quả.
Xin lưu ý rằng mặc dù hàm dựa trên lệnh gọi lại có thể đơn giản nhất và sử dụng ít mã nhất, nhưng các hàm vsprintf_ex
khác sẽ tốn ít ngăn xếp hơn.
Nếu cả hai tính năng trên đều không có sẵn nhưng nền tảng cung cấp malloc
, hàm sẽ phân bổ một vùng đệm tạm thời để lưu giữ kết quả. 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, đầu ra sẽ bị cắt bớt để vừa với trạng thái liên tục trong bộ nhớ TLV hiện tại
Thông tin chi tiết | |||||||
---|---|---|---|---|---|---|---|
Các 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 )
Triển khai hàm TLVWriter FinalizeBuffer để 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 một chuỗi PacketBuffers. Hàm này được thiết kế để sử 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 )
Triển khai hàm GetNewBuffer của TLVWriter để ghi vào vùng đệ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 vùng đệm động cơ bản khi cần để lưu trữ 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 )
Triển khai hàm GetNewBuffer của TLVWriter để ghi vào một 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ổ chuỗi gồm một hoặc nhiều Gói đệm khi cần để lưu trữ 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 nên dùng hàm FinalizePacketBuffer() tương ứng (hoặc hàm tương đương) để hoàn tất chuỗi vùng đệ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ó cần đặt trước không gian 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 )
Thiết lập xem vùng chứa có nên đặt trước không gian 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 )