nl:: Weave:: TLV:: TLVReader
#include <src/lib/core/WeaveTLV.h>
Menyediakan parser yang hemat memori untuk data yang dienkode dalam format TLV Weave.
Ringkasan
TLVReader mengimplementasikan parser “gaya tarik” khusus maju untuk data TLV Weave. Objek TLVReader beroperasi sebagai kursor yang dapat digunakan untuk melakukan iterasi pada urutan elemen TLV dan menafsirkan kontennya. Jika diposisikan pada elemen, aplikasi dapat melakukan panggilan ke metode Get() pembaca untuk mengkueri jenis dan tag elemen saat ini, dan untuk mengekstrak nilai terkait. Metode Next() pembaca digunakan untuk melanjutkan dari satu elemen ke elemen.
Objek TLVReader selalu diposisikan sebelum, pada, atau setelah elemen TLV. Saat pertama kali diinisialisasi, TLVReader diposisikan tepat sebelum elemen pertama encoding. Untuk mulai membaca, aplikasi harus melakukan panggilan awal ke metode Next() untuk memosisikan pembaca pada elemen pertama. Saat elemen penampung ditemukan, baik struktur, array, maupun jalur, metode OpenContainer() atau EnterContainer() dapat digunakan untuk melakukan iterasi melalui konten penampung.
Saat pembaca mencapai akhir encoding TLV, atau elemen terakhir dalam container, pembaca akan memberi sinyal ke aplikasi dengan menampilkan error WEAVE_END_OF_TLV dari metode Next(). Pembaca akan terus menampilkan WEAVE_END_OF_TLV hingga diinisialisasi ulang, atau penampung saat ini dikeluarkan (melalui CloseContainer() / ExitContainer()).
Objek TLVReader dapat mengurai data secara langsung dari buffer input tetap, atau dari rantai satu atau beberapa PacketBuffer. Selain itu, aplikasi dapat menyediakan fungsi GetNextBuffer
untuk memberikan data feed ke pembaca dari sumber arbitrer, misalnya soket atau porta serial.
Inheritance
Subclass yang Dikenal Langsung:nl::Weave::Profiles::DataManagement_Current::CircularEventReader
nl::Weave::TLV::CircularTLVReader
Jenis publik |
|
---|---|
GetNextBufferFunct)(TLVReader &reader, uintptr_t &bufHandle, const uint8_t *&bufStart, uint32_t &bufLen)
|
WEAVE_ERROR(* Fungsi yang dapat digunakan untuk mengambil data TLV tambahan untuk diurai. |
Atribut publik |
|
---|---|
AppData
|
void *
Bidang pointer yang dapat digunakan untuk data khusus aplikasi.
|
GetNextBuffer
|
Pointer ke fungsi yang akan menghasilkan data input untuk objek TLVReader.
|
ImplicitProfileId
|
uint32_t
ID profil yang akan digunakan untuk tag profil yang dienkode dalam bentuk implisit.
|
Atribut yang dilindungi |
|
---|---|
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 *
|
Fungsi publik |
|
---|---|
CloseContainer(TLVReader & containerReader)
|
Menyelesaikan pembacaan container TLV setelah panggilan ke OpenContainer().
|
DupBytes(uint8_t *& buf, uint32_t & dataLen)
|
Mengalokasikan dan menampilkan buffer yang berisi nilai byte atau string UTF8 saat ini.
|
DupString(char *& buf)
|
Mengalokasikan dan menampilkan buffer yang berisi nilai dihentikan null dari byte atau string UTF8 saat ini.
|
EnterContainer(TLVType & outerContainerType)
|
|
ExitContainer(TLVType outerContainerType)
|
|
Get(bool & v)
|
Mendapatkan nilai elemen saat ini sebagai jenis bool.
|
Get(int8_t & v)
|
Mendapatkan nilai elemen saat ini sebagai bilangan bulat dengan tanda tangan 8-bit.
|
Get(int16_t & v)
|
Mendapatkan nilai elemen saat ini sebagai bilangan bulat 16-bit yang ditandatangani.
|
Get(int32_t & v)
|
Mendapatkan nilai elemen saat ini sebagai bilangan bulat yang ditandatangani 32-bit.
|
Get(int64_t & v)
|
Mendapatkan nilai elemen saat ini sebagai bilangan bulat yang ditandatangani 64-bit.
|
Get(uint8_t & v)
|
Mendapatkan nilai elemen saat ini sebagai bilangan bulat tanpa tanda tangan 8-bit.
|
Get(uint16_t & v)
|
Mendapatkan nilai elemen saat ini sebagai bilangan bulat tanpa tanda tangan 16-bit.
|
Get(uint32_t & v)
|
Mendapatkan nilai elemen saat ini sebagai bilangan bulat tanpa tanda tangan 32-bit.
|
Get(uint64_t & v)
|
Mendapatkan nilai elemen saat ini sebagai bilangan bulat tanpa tanda tangan 64-bit.
|
Get(float & v)
|
|
Get(double & v)
|
Mendapatkan nilai elemen saat ini sebagai bilangan floating point presisi ganda.
|
GetBufHandle(void) const
|
uintptr_t
|
GetBytes(uint8_t *buf, uint32_t bufSize)
|
Dapatkan nilai elemen string UTF8 atau byte saat ini.
|
GetContainerType(void) const
|
Menampilkan jenis container tempat TLVReader saat ini dibaca.
|
GetControlByte(void) const
|
uint16_t
Menampilkan byte kontrol yang terkait dengan elemen TLV saat ini.
|
GetDataPtr(const uint8_t *& data)
|
Mendapatkan pointer ke byte yang dienkode awal dari byte TLV atau elemen string UTF8.
|
GetLength(void) const
|
uint32_t
Menampilkan panjang data yang terkait dengan elemen TLV saat ini.
|
GetLengthRead(void) const
|
uint32_t
Menampilkan jumlah total byte yang dibaca sejak pembaca diinisialisasi.
|
GetReadPoint(void) const
|
const uint8_t *
Mendapatkan titik di buffer input yang mendasarinya yang sesuai dengan posisi pembaca saat ini.
|
GetRemainingLength(void) const
|
uint32_t
Menampilkan jumlah total byte yang dapat dibaca hingga panjang baca maksimum tercapai.
|
GetString(char *buf, uint32_t bufSize)
|
Mendapatkan nilai elemen string UTF8 atau byte saat ini sebagai string null yang dihentikan.
|
GetTag(void) const
|
uint64_t
Menampilkan tag yang terkait dengan elemen TLV saat ini.
|
GetType(void) const
|
Menampilkan jenis elemen TLV saat ini.
|
Init(const TLVReader & aReader)
|
void
|
Init(const uint8_t *data, uint32_t dataLen)
|
void
Melakukan inisialisasi objek TLVReader untuk membaca dari buffer input tunggal.
|
Init(PacketBuffer *buf, uint32_t maxLen)
|
void
Melakukan inisialisasi objek TLVReader untuk membaca dari satu PacketBuffer.
|
Init(PacketBuffer *buf, uint32_t maxLen, bool allowDiscontiguousBuffers)
|
void
Melakukan inisialisasi objek TLVReader untuk membaca dari satu atau beberapa PacketBuffer.
|
Next(void)
|
|
Next(TLVType expectedType, uint64_t expectedTag)
|
|
OpenContainer(TLVReader & containerReader)
|
|
Skip(void)
|
|
VerifyEndOfContainer(void)
|
Memverifikasi bahwa objek TVLReader berada di akhir container TLV.
|
Fungsi yang dilindungi |
|
---|---|
ClearElementState(void)
|
void
Hapus status TLVReader.
|
ElementType(void) const
|
TLVElementType
Ini adalah metode pribadi yang menampilkan TLVElementType dari mControlByte.
|
EnsureData(WEAVE_ERROR noDataErr)
|
|
GetElementHeadLength(uint8_t & elemHeadBytes) const
|
Ini adalah metode pribadi yang digunakan untuk menghitung panjang kepala elemen 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)
|
Lewati data apa pun yang terdapat dalam TLV saat ini dengan membacanya tanpa buffer tujuan.
|
SkipToEndOfContainer(void)
|
|
VerifyElement(void)
|
Fungsi statis yang dilindungi |
|
---|---|
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)
|
Jenis publik
GetNextBufferFunct
WEAVE_ERROR(* GetNextBufferFunct)(TLVReader &reader, uintptr_t &bufHandle, const uint8_t *&bufStart, uint32_t &bufLen)
Fungsi yang dapat digunakan untuk mengambil data TLV tambahan untuk diurai.
Fungsi jenis ini digunakan untuk memasukkan data input ke TLVReader. Saat dipanggil, fungsi tersebut diharapkan menghasilkan data tambahan bagi pembaca untuk mengurai atau memberi sinyal kepada pembaca bahwa tidak ada lagi data yang tersedia.
Detail | |||||||||
---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||
Nilai yang Ditampilkan |
|
Atribut publik
AppData
void * AppData
Bidang pointer yang dapat digunakan untuk data khusus aplikasi.
GetNextBuffer
GetNextBufferFunct GetNextBuffer
Pointer ke fungsi yang akan menghasilkan data input untuk objek TLVReader.
Jika disetel ke NULL (nilai default), pembaca akan berasumsi bahwa tidak ada data input lebih lanjut yang tersedia.
GetNextBuffer dapat disetel oleh aplikasi kapan saja, tetapi biasanya disetel saat pembaca diinisialisasi.
Lihat definisi jenis GetNextBufferFunct untuk informasi tambahan tentang cara menerapkan fungsi GetNextBuffer.
ImplicitProfileId
uint32_t ImplicitProfileId
ID profil yang akan digunakan untuk tag profil yang dienkode dalam bentuk implisit.
Saat pembaca menemukan tag khusus profil yang telah dienkode dalam bentuk implisit, pembaca akan menggunakan nilai properti ImplicitProfileId
sebagai ID profil yang diasumsikan untuk tag tersebut.
Secara default, properti ImplicitProfileId
ditetapkan ke kProfileIdNotSpecified. Saat mendekode TLV yang berisi tag yang dienkode secara implisit, aplikasi harus menetapkan ImplicitProfileId
sebelum membaca elemen TLV yang memiliki tag tersebut. ID profil yang sesuai biasanya bergantung pada konteks aplikasi atau protokol yang diucapkan.
Jika ditemukan tag yang dienkode secara implisit saat ImplicitProfileId
ditetapkan ke kProfileIdNotSpecified, pembaca akan menampilkan error WEAVE_ERROR_UNKNOWN_IMPLICIT_TLV_TAG.
Atribut yang dilindungi
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
Fungsi publik
CloseContainer
WEAVE_ERROR CloseContainer( TLVReader & containerReader )
Menyelesaikan pembacaan container TLV setelah panggilan ke OpenContainer().
Metode CloseContainer() memulihkan status objek TLVReader induk setelah panggilan ke OpenContainer(). Untuk setiap panggilan ke OpenContainer(), aplikasi harus melakukan panggilan yang sesuai ke CloseContainer(), dengan meneruskan referensi ke pembaca container yang sama ke kedua metode.
Saat CloseContainer() ditampilkan, pembaca induk diposisikan tepat sebelum elemen pertama yang mengikuti penampung. Dari titik ini aplikasi dapat menggunakan metode Next() untuk maju melalui elemen yang tersisa.
Aplikasi dapat memanggil CloseContainer() tutup pada pembaca induk kapan saja, terlepas dari apakah semua elemen dalam penampung pokok telah dibaca atau tidak. Setelah CloseContainer() dipanggil, aplikasi harus menganggap pembaca container sebagai 'diinisialisasi' dan tidak boleh menggunakannya lebih lanjut tanpa melakukan inisialisasi ulang.
Detail | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||||||
Nilai yang Ditampilkan |
|
DupBytes
WEAVE_ERROR DupBytes( uint8_t *& buf, uint32_t & dataLen )
Mengalokasikan dan menampilkan buffer yang berisi nilai byte atau string UTF8 saat ini.
Metode ini membuat buffer dan menampilkan salinan data yang terkait dengan elemen string byte atau UTF-8 pada posisi saat ini. Memori untuk buffer diperoleh dengan malloc() dan harus dibebaskan dengan free() oleh pemanggil jika tidak diperlukan lagi.
Detail | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||||||
Nilai yang Ditampilkan |
|
DupString
WEAVE_ERROR DupString( char *& buf )
Mengalokasikan dan menampilkan buffer yang berisi nilai dihentikan null dari byte atau string UTF8 saat ini.
Metode ini membuat buffer dan menampilkan salinan data yang dihentikan null yang terkait dengan elemen string byte atau UTF-8 pada posisi saat ini. Memori untuk buffer diperoleh dengan malloc() dan harus dibebaskan dengan free() oleh pemanggil jika tidak diperlukan lagi.
Detail | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||||||
Nilai yang Ditampilkan |
|
EnterContainer
WEAVE_ERROR EnterContainer( TLVType & outerContainerType )
Menyiapkan objek TLVReader untuk membaca anggota elemen container TLV.
Metode EnterContainer() menyiapkan objek TLVReader saat ini untuk mulai membaca elemen anggota penampung TLV (struktur, array, atau jalur). Untuk setiap panggilan ke aplikasi EnterContainer(), Anda harus melakukan panggilan yang sesuai ke ExitContainer().
Saat EnterContainer() dipanggil, objek TLVReader harus diposisikan pada elemen container agar dapat dibaca. Metode ini mengambil referensi ke nilai TLVType sebagai argumen yang akan digunakan untuk menyimpan konteks pembaca saat membaca container.
Saat metode EnterContainer() ditampilkan, pembaca diposisikan tepat sebelum anggota pertama penampung. Memanggil Next() berulang kali akan memajukan pembaca melalui anggota koleksi hingga akhir tercapai, lalu pembaca akan menampilkan WEAVE_END_OF_TLV.
Setelah selesai membaca penampung, aplikasi dapat terus membaca elemen setelah penampung dengan memanggil metode ExitContainer().
Detail | |||||
---|---|---|---|---|---|
Parameter |
|
||||
Nilai yang Ditampilkan |
|
ExitContainer
WEAVE_ERROR ExitContainer( TLVType outerContainerType )
Menyelesaikan pembacaan container TLV dan menyiapkan objek TLVReader untuk membaca elemen setelah container.
Metode ExitContainer() memulihkan status objek TLVReader setelah panggilan ke EnterContainer(). Untuk setiap panggilan ke EnterContainer(), aplikasi harus melakukan panggilan yang sesuai ke ExitContainer(), dengan meneruskan nilai konteks yang ditampilkan oleh metode EnterContainer().
Saat ExitContainer() ditampilkan, pembaca diposisikan tepat sebelum elemen pertama yang mengikuti penampung. Dari titik ini aplikasi dapat menggunakan metode Next() untuk maju melalui elemen yang tersisa.
Setelah EnterContainer() dipanggil, aplikasi dapat memanggil ExitContainer() pada pembaca kapan saja, terlepas dari apakah semua elemen dalam penampung pokok telah dibaca atau tidak.
Detail | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||||||
Nilai yang Ditampilkan |
|
Dapatkan
WEAVE_ERROR Get( bool & v )
Mendapatkan nilai elemen saat ini sebagai jenis bool.
Detail | |||||
---|---|---|---|---|---|
Parameter |
|
||||
Nilai yang Ditampilkan |
|
Dapatkan
WEAVE_ERROR Get( int8_t & v )
Mendapatkan nilai elemen saat ini sebagai bilangan bulat dengan tanda tangan 8-bit.
Jika nilai bilangan bulat yang dienkode lebih besar dari jenis data output, nilai yang dihasilkan akan dipotong.
Detail | |||||
---|---|---|---|---|---|
Parameter |
|
||||
Nilai yang Ditampilkan |
|
Dapatkan
WEAVE_ERROR Get( int16_t & v )
Mendapatkan nilai elemen saat ini sebagai bilangan bulat 16-bit yang ditandatangani.
Jika nilai bilangan bulat yang dienkode lebih besar dari jenis data output, nilai yang dihasilkan akan dipotong.
Detail | |||||
---|---|---|---|---|---|
Parameter |
|
||||
Nilai yang Ditampilkan |
|
Dapatkan
WEAVE_ERROR Get( int32_t & v )
Mendapatkan nilai elemen saat ini sebagai bilangan bulat yang ditandatangani 32-bit.
Jika nilai bilangan bulat yang dienkode lebih besar dari jenis data output, nilai yang dihasilkan akan dipotong.
Detail | |||||
---|---|---|---|---|---|
Parameter |
|
||||
Nilai yang Ditampilkan |
|
Dapatkan
WEAVE_ERROR Get( int64_t & v )
Mendapatkan nilai elemen saat ini sebagai bilangan bulat yang ditandatangani 64-bit.
Jika nilai bilangan bulat yang dienkode lebih besar dari jenis data output, nilai yang dihasilkan akan dipotong.
Detail | |||||
---|---|---|---|---|---|
Parameter |
|
||||
Nilai yang Ditampilkan |
|
Dapatkan
WEAVE_ERROR Get( uint8_t & v )
Mendapatkan nilai elemen saat ini sebagai bilangan bulat tanpa tanda tangan 8-bit.
Jika nilai bilangan bulat yang dienkode lebih besar dari jenis data output, nilai yang dihasilkan akan dipotong. Demikian pula, jika nilai bilangan bulat yang dienkode adalah negatif, nilai tersebut akan dikonversi menjadi tanpa label.
Detail | |||||
---|---|---|---|---|---|
Parameter |
|
||||
Nilai yang Ditampilkan |
|
Dapatkan
WEAVE_ERROR Get( uint16_t & v )
Mendapatkan nilai elemen saat ini sebagai bilangan bulat tanpa tanda tangan 16-bit.
Jika nilai bilangan bulat yang dienkode lebih besar dari jenis data output, nilai yang dihasilkan akan dipotong. Demikian pula, jika nilai bilangan bulat yang dienkode adalah negatif, nilai tersebut akan dikonversi menjadi tanpa label.
Detail | |||||
---|---|---|---|---|---|
Parameter |
|
||||
Nilai yang Ditampilkan |
|
Dapatkan
WEAVE_ERROR Get( uint32_t & v )
Mendapatkan nilai elemen saat ini sebagai bilangan bulat tanpa tanda tangan 32-bit.
Jika nilai bilangan bulat yang dienkode lebih besar dari jenis data output, nilai yang dihasilkan akan dipotong. Demikian pula, jika nilai bilangan bulat yang dienkode adalah negatif, nilai tersebut akan dikonversi menjadi tanpa label.
Detail | |||||
---|---|---|---|---|---|
Parameter |
|
||||
Nilai yang Ditampilkan |
|
Dapatkan
WEAVE_ERROR Get( uint64_t & v )
Mendapatkan nilai elemen saat ini sebagai bilangan bulat tanpa tanda tangan 64-bit.
Jika nilai bilangan bulat yang dienkode tersebut negatif, nilai tersebut akan dikonversi menjadi tanpa label.
Detail | |||||
---|---|---|---|---|---|
Parameter |
|
||||
Nilai yang Ditampilkan |
|
Dapatkan
WEAVE_ERROR Get( float & v )
Dapatkan
WEAVE_ERROR Get( double & v )
Mendapatkan nilai elemen saat ini sebagai bilangan floating point presisi ganda.
Detail | |||||
---|---|---|---|---|---|
Parameter |
|
||||
Nilai yang Ditampilkan |
|
GetBufHandle
uintptr_t GetBufHandle( void ) const
GetBytes
WEAVE_ERROR GetBytes( uint8_t *buf, uint32_t bufSize )
Dapatkan nilai elemen string UTF8 atau byte saat ini.
Untuk menentukan ukuran buffer input yang diperlukan, panggil metode GetLength() sebelum memanggil GetBytes().
Detail | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||||
Nilai yang Ditampilkan |
|
GetContainerType
TLVType GetContainerType( void ) const
Menampilkan jenis container tempat TLVReader saat ini dibaca.
Metode GetContainerType() menampilkan jenis container TLV yang sedang dibaca oleh TLVReader. Jika TLVReader diposisikan di tingkat terluar dari encoding TLV (yaitu sebelum, pada, atau setelah elemen TLV terluar), metode ini akan menampilkan kTLVType_NotSpecified.
Detail | |
---|---|
Hasil |
TLVType dari container saat ini, atau kTLVType_NotSpecified jika TLVReader tidak diposisikan dalam container.
|
GetControlByte
uint16_t GetControlByte( void ) const
Menampilkan byte kontrol yang terkait dengan elemen TLV saat ini.
Idealnya, tidak ada yang perlu mengetahui tentang byte kontrol dan hanya implementasi internal TLV yang boleh memiliki akses ke byte kontrol tersebut. Namun, meskipun demikian, memiliki akses ke byte kontrol sangat membantu untuk keperluan proses debug oleh TLVDebugUtilitas (yang mencoba mendekode byte kontrol tag saat cukup mencetak konten buffer TLV).
Detail | |
---|---|
Hasil |
Bilangan bulat tanpa label yang berisi byte kontrol yang terkait dengan elemen TLV saat ini. kTLVControlByte_NotSpecified ditampilkan jika pembaca tidak diposisikan pada elemen.
|
GetDataPtr
WEAVE_ERROR GetDataPtr( const uint8_t *& data )
Mendapatkan pointer ke byte yang dienkode awal dari byte TLV atau elemen string UTF8.
Metode ini menampilkan pointer langsung nilai string yang dienkode dalam buffer input yang mendasarinya. Agar berhasil, metode ini mengharuskan keseluruhan nilai string ada dalam satu buffer. Jika tidak, metode akan menampilkan WEAVE_ERROR_TLV_UNDERRUN. Hal ini membuat metode penggunaan terbatas saat membaca data dari beberapa buffer yang terputus.
Detail | |||||||||
---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||
Nilai yang Ditampilkan |
|
GetLength
uint32_t GetLength( void ) const
Menampilkan panjang data yang terkait dengan elemen TLV saat ini.
Panjang data hanya berlaku untuk elemen jenis string UTF8 atau string byte. Untuk string UTF8, nilai yang ditampilkan adalah jumlah byte dalam string, bukan jumlah karakter.
Detail | |
---|---|
Hasil |
Panjang data (dalam byte) yang terkait dengan elemen TLV saat ini, atau 0 jika elemen saat ini bukan string byte atau string UTF8, atau jika pembaca tidak diposisikan pada elemen.
|
GetLengthRead
uint32_t GetLengthRead( void ) const
Menampilkan jumlah total byte yang dibaca sejak pembaca diinisialisasi.
Detail | |
---|---|
Hasil |
Jumlah total byte yang dibaca sejak pembaca diinisialisasi.
|
GetReadPoint
const uint8_t * GetReadPoint( void ) const
Mendapatkan titik di buffer input yang mendasarinya yang sesuai dengan posisi pembaca saat ini.
Detail | |
---|---|
Hasil |
Pointer ke buffer input yang mendasarinya dan sesuai dengan posisi pembaca saat ini.
|
GetRemainingLength
uint32_t GetRemainingLength( void ) const
Menampilkan jumlah total byte yang dapat dibaca hingga panjang baca maksimum tercapai.
Detail | |
---|---|
Hasil |
Jumlah total byte yang dapat dibaca hingga panjang baca maksimum tercapai.
|
GetString
WEAVE_ERROR GetString( char *buf, uint32_t bufSize )
Mendapatkan nilai elemen string UTF8 atau byte saat ini sebagai string null yang dihentikan.
Untuk menentukan ukuran buffer input yang diperlukan, panggil metode GetLength() sebelum memanggil GetBytes(). Buffer input setidaknya harus satu byte lebih besar dari panjang string untuk mengakomodasi karakter null.
Detail | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||||
Nilai yang Ditampilkan |
|
GetTag
uint64_t GetTag( void ) const
Menampilkan tag yang terkait dengan elemen TLV saat ini.
Nilai yang ditampilkan oleh GetTag() dapat digunakan dengan fungsi utilitas tag (IsProfileTag(), IsContextTag(), ProfileIdFromTag(), dll.) untuk menentukan jenis tag dan untuk mengekstrak berbagai nilai kolom tag.
Detail | |
---|---|
Hasil |
Bilangan bulat tanpa label yang berisi informasi tentang tag yang terkait dengan elemen TLV saat ini.
|
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 )
Melakukan inisialisasi objek TLVReader untuk membaca dari satu PacketBuffer.
Penguraian dimulai pada posisi awal buffer (buf->DataStart()) dan berlanjut hingga akhir data dalam buffer (seperti yang dilambangkan oleh buf->Datalen()), atau byte maxLen telah diurai.
Detail | |||||
---|---|---|---|---|---|
Parameter |
|
Init
void Init( PacketBuffer *buf, uint32_t maxLen, bool allowDiscontiguousBuffers )
Melakukan inisialisasi objek TLVReader untuk membaca dari satu atau beberapa PacketBuffer.
Penguraian dimulai pada posisi awal buffer awal (buf->DataStart()). Jika allowDiscontiguousBuffers bernilai benar, pembaca akan maju melalui rantai buffer yang ditautkan oleh pointer Next(). Penguraian berlanjut hingga semua data dalam rantai buffer dikonsumsi (seperti yang dilambangkan dengan buf->Datalen()), atau byte maxLen telah diuraikan.
Detail | |||||||
---|---|---|---|---|---|---|---|
Parameter |
|
Berikutnya
WEAVE_ERROR Next( void )
Memajukan objek TLVReader ke elemen TLV berikutnya yang akan dibaca.
Metode Next() memosisikan objek pembaca pada elemen berikutnya dalam encoding TLV yang berada dalam konteks pembatasan yang sama. Secara khusus, jika pembaca diposisikan di tingkat terluar encoding TLV, memanggil Next() akan memajukan pembaca ke elemen teratas berikutnya. Jika pembaca diposisikan dalam elemen penampung TLV (struktur, array, atau jalur), memanggil Next() akan memajukan pembaca ke elemen anggota penampung berikutnya.
Karena Next() membatasi gerakan pembaca ke konteks pembatasan saat ini, memanggil Next() saat pembaca diposisikan pada elemen penampung akan memajukan ke atas penampung, melewati elemen anggotanya (dan anggota penampung bertingkat) hingga mencapai elemen pertama setelah penampung.
Jika tidak ada elemen lebih lanjut dalam konteks pembatasan tertentu, metode Next() akan menampilkan error WEAVE_END_OF_TLV dan posisi pembaca tidak akan berubah.
Detail | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Nilai yang Ditampilkan |
|
Berikutnya
WEAVE_ERROR Next( TLVType expectedType, uint64_t expectedTag )
Memajukan objek TLVReader ke elemen TLV berikutnya yang akan dibaca, dengan menyatakan jenis dan tag elemen baru.
Metode Next(TLVType expectedType, uint64_t expectedTag) adalah metode praktis yang memiliki perilaku yang sama dengan Next(), tetapi juga memverifikasi bahwa jenis dan tag elemen TLV baru cocok dengan argumen yang diberikan.
Detail | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||||||||||
Nilai yang Ditampilkan |
|
OpenContainer
WEAVE_ERROR OpenContainer( TLVReader & containerReader )
Melakukan inisialisasi objek TLVReader baru untuk membaca anggota elemen container TLV.
Metode OpenContainer() menginisialisasi objek TLVReader baru untuk membaca elemen anggota container TLV (struktur, array, atau jalur). Saat OpenContainer() dipanggil, objek TLVReader saat ini harus diposisikan pada elemen container agar dapat dibaca. Metode ini mengambil referensi ke pembaca baru sebagai argumen tunggal yang akan diinisialisasi untuk membaca container. Pembaca ini dikenal sebagai pembaca penampung, sedangkan pembaca yang memanggil OpenContainer() dikenal sebagai pembaca induk.
Saat metode OpenContainer() ditampilkan, pembaca container diposisikan tepat sebelum anggota pertama container. Memanggil Next() pada pembaca penampung akan melanjutkan ke seluruh anggota koleksi hingga akhir tercapai, lalu pembaca akan menampilkan WEAVE_END_OF_TLV.
Saat pembaca container terbuka, aplikasi tidak boleh melakukan panggilan pada atau mengubah status pembaca induk. Setelah selesai menggunakan pembaca container, aplikasi harus menutupnya dengan memanggil CloseContainer() pada pembaca induk, dengan meneruskan pembaca container sebagai argumen. Aplikasi dapat menutup pembaca penampung kapan saja, dengan atau tanpa membaca semua elemen yang terdapat dalam penampung pokok. Setelah pembaca container ditutup, aplikasi dapat melanjutkan penggunaan pembaca induk.
Pembaca container mewarisi berbagai properti konfigurasi dari pembaca induk. Karakter pengganti ini meliputi:
- ID profil implisit (ImplicitProfileId)
- Pointer data aplikasi (AppData)
- Pointer fungsi GetNextBuffer
Detail | |||||
---|---|---|---|---|---|
Parameter |
|
||||
Nilai yang Ditampilkan |
|
Lewati
WEAVE_ERROR Skip( void )
Memajukan objek TLVReader tepat setelah elemen TLV saat ini.
Metode Skip() memosisikan objek pembaca tepat setelah elemen TLV saat ini, sehingga panggilan selanjutnya ke Next() akan memajukan pembaca ke elemen berikut. Seperti Next(), jika pembaca diposisikan di elemen penampung pada saat panggilan, anggota penampung akan dilewati. Jika pembaca tidak diposisikan pada elemen mana pun, posisinya tidak berubah.
Detail | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Nilai yang Ditampilkan |
|
VerifyEndOfContainer
WEAVE_ERROR VerifyEndOfContainer( void )
Memverifikasi bahwa objek TVLReader berada di akhir container TLV.
Metode VerifyEndOfContainer() memverifikasi bahwa tidak ada elemen TLV lebih lanjut untuk dibaca dalam penampung TLV saat ini. Ini adalah metode praktis yang setara dengan memanggil Next() dan memeriksa nilai hasil WEAVE_END_OF_TLV.
Detail | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Nilai yang Ditampilkan |
|
Fungsi yang dilindungi
ClearElementState
void ClearElementState( void )
ElementType
TLVElementType ElementType( void ) const
Ini adalah metode pribadi yang menampilkan TLVElementType dari mControlByte.
EnsureData
WEAVE_ERROR EnsureData( WEAVE_ERROR noDataErr )
GetElementHeadLength
WEAVE_ERROR GetElementHeadLength( uint8_t & elemHeadBytes ) const
Ini adalah metode pribadi yang digunakan untuk menghitung panjang kepala elemen 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 )
Lewati data apa pun yang terdapat dalam TLV saat ini dengan membacanya tanpa buffer tujuan.
Detail | |||||
---|---|---|---|---|---|
Nilai yang Ditampilkan |
|
SkipToEndOfContainer
WEAVE_ERROR SkipToEndOfContainer( void )
VerifyElement
WEAVE_ERROR VerifyElement( void )
Fungsi statis yang dilindungi
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 )