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 “pull-style” khusus maju untuk data TLV Weave. Objek TLVReader beroperasi sebagai kursor yang dapat digunakan untuk melakukan iterasi urutan elemen TLV dan menafsirkan kontennya. Saat diposisikan pada elemen, aplikasi dapat melakukan panggilan ke metode Get() pembaca untuk mengkueri jenis dan tag elemen saat ini, serta untuk mengekstrak nilai terkait. Metode Next() pembaca digunakan untuk melanjutkan dari 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 penampung, 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 buffering input tetap, atau dari rantai satu atau beberapa PacketBuffers. Selain itu, aplikasi dapat menyediakan fungsi GetNextBuffer
untuk memasukkan data ke pembaca dari sumber arbitrer, misalnya soket atau port serial.
Inheritance
Subclass Langsung yang Diketahui: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 *
Kolom 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 penampung TLV setelah panggilan ke OpenContainer().
|
DupBytes(uint8_t *& buf, uint32_t & dataLen)
|
Mengalokasikan dan menampilkan buffering yang berisi nilai byte saat ini atau string UTF8.
|
DupString(char *& buf)
|
Mengalokasikan dan menampilkan buffering yang berisi nilai yang dihentikan null dari byte saat ini atau string UTF8.
|
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 8-bit yang ditandatangani.
|
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 32-bit yang ditandai.
|
Get(int64_t & v)
|
Mendapatkan nilai elemen saat ini sebagai bilangan bulat 64-bit yang ditandai.
|
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)
|
Mendapatkan nilai byte saat ini atau elemen string UTF8.
|
GetContainerType(void) const
|
Menampilkan jenis container tempat TLVReader sedang membaca.
|
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 buffering input dasar 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)
|
Dapatkan nilai byte saat ini atau elemen string UTF8 sebagai string yang dihentikan null.
|
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
Menginisialisasi objek TLVReader untuk membaca dari buffering input tunggal.
|
Init(PacketBuffer *buf, uint32_t maxLen)
|
void
Menginisialisasi objek TLVReader untuk membaca dari satu PacketBuffer.
|
Init(PacketBuffer *buf, uint32_t maxLen, bool allowDiscontiguousBuffers)
|
void
Menginisialisasi objek TLVReader untuk membaca dari satu atau beberapa PacketBuffers.
|
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 head 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 tahu pembaca bahwa tidak ada lagi data yang tersedia.
Detail | |||||||||
---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||
Nilai Pengembalian |
|
Atribut publik
AppData
void * AppData
Kolom pointer yang dapat digunakan untuk data khusus aplikasi.
GetNextBuffer
GetNextBufferFunct GetNextBuffer
Pointer ke fungsi yang akan menghasilkan data input untuk objek TLVReader.
Jika ditetapkan ke NULL (nilai default), pembaca akan berasumsi bahwa tidak tersedia data input lebih lanjut.
GetNextBuffer dapat disetel oleh aplikasi kapan saja, tetapi biasanya disetel saat pembaca diinisialisasi.
Lihat definisi jenis GetNextBufferFunct untuk informasi tambahan tentang cara mengimplementasikan 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 apa pun yang memiliki tag tersebut. ID profil yang sesuai biasanya bergantung pada konteks aplikasi atau protokol yang diucapkan.
Jika tag yang dienkode secara implisit ditemukan 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 penampung 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 tersebut.
Saat CloseContainer() ditampilkan, pembaca induk diposisikan tepat sebelum elemen pertama yang mengikuti penampung. Dari sini, aplikasi dapat menggunakan metode Next() untuk melanjutkan ke elemen yang tersisa.
Aplikasi dapat memanggil tutup CloseContainer() pada pembaca induk kapan saja, terlepas dari apakah semua elemen dalam penampung dasar telah dibaca. Setelah CloseContainer() dipanggil, aplikasi harus menganggap pembaca container telah 'diinisialisasi' dan tidak boleh menggunakannya lebih lanjut tanpa melakukan inisialisasi ulang.
Detail | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||||||
Nilai Pengembalian |
|
DupBytes
WEAVE_ERROR DupBytes( uint8_t *& buf, uint32_t & dataLen )
Mengalokasikan dan menampilkan buffering yang berisi nilai byte saat ini atau string UTF8.
Metode ini membuat buffer dan menampilkan salinan data yang terkait dengan byte atau elemen string UTF-8 di posisi saat ini. Memori untuk buffer diperoleh dengan malloc() dan harus dibebaskan dengan free() oleh pemanggil jika tidak diperlukan lagi.
Detail | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||||||
Nilai Pengembalian |
|
DupString
WEAVE_ERROR DupString( char *& buf )
Mengalokasikan dan menampilkan buffering yang berisi nilai yang dihentikan null dari byte saat ini atau string UTF8.
Metode ini membuat buffering untuk dan menampilkan salinan data yang diakhiri dengan null yang terkait dengan byte atau elemen string UTF-8 di posisi saat ini. Memori untuk buffer diperoleh dengan malloc() dan harus dibebaskan dengan free() oleh pemanggil jika tidak diperlukan lagi.
Detail | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||||||
Nilai Pengembalian |
|
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 EnterContainer(), aplikasi harus melakukan panggilan yang sesuai ke ExitContainer().
Saat EnterContainer() dipanggil, objek TLVReader harus diposisikan pada elemen container agar dapat dibaca. Metode ini mengambil referensi sebagai argumen ke nilai TLVType yang akan digunakan untuk menyimpan konteks pembaca saat pembaca membaca container.
Saat metode EnterContainer() ditampilkan, pembaca diposisikan tepat sebelum anggota pertama penampung. Berulang kali memanggil Next() akan memajukan pembaca ke seluruh anggota koleksi hingga akhir, yang pada saat itu pembaca akan menampilkan WEAVE_END_OF_TLV.
Setelah selesai membaca container, aplikasi dapat melanjutkan membaca elemen setelah container dengan memanggil metode ExitContainer().
Detail | |||||
---|---|---|---|---|---|
Parameter |
|
||||
Nilai Pengembalian |
|
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() kembali, pembaca diposisikan tepat sebelum elemen pertama yang mengikuti penampung. Dari sini, aplikasi dapat menggunakan metode Next() untuk melanjutkan ke 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 belum.
Detail | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||||||
Nilai Pengembalian |
|
Dapatkan
WEAVE_ERROR Get( bool & v )
Mendapatkan nilai elemen saat ini sebagai jenis bool.
Detail | |||||
---|---|---|---|---|---|
Parameter |
|
||||
Nilai Pengembalian |
|
Dapatkan
WEAVE_ERROR Get( int8_t & v )
Mendapatkan nilai elemen saat ini sebagai bilangan bulat 8-bit yang ditandatangani.
Jika nilai bilangan bulat yang dienkode lebih besar dari jenis data output, nilai yang dihasilkan akan terpotong.
Detail | |||||
---|---|---|---|---|---|
Parameter |
|
||||
Nilai Pengembalian |
|
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 terpotong.
Detail | |||||
---|---|---|---|---|---|
Parameter |
|
||||
Nilai Pengembalian |
|
Dapatkan
WEAVE_ERROR Get( int32_t & v )
Mendapatkan nilai elemen saat ini sebagai bilangan bulat 32-bit yang ditandai.
Jika nilai bilangan bulat yang dienkode lebih besar dari jenis data output, nilai yang dihasilkan akan terpotong.
Detail | |||||
---|---|---|---|---|---|
Parameter |
|
||||
Nilai Pengembalian |
|
Dapatkan
WEAVE_ERROR Get( int64_t & v )
Mendapatkan nilai elemen saat ini sebagai bilangan bulat 64-bit yang ditandai.
Jika nilai bilangan bulat yang dienkode lebih besar dari jenis data output, nilai yang dihasilkan akan terpotong.
Detail | |||||
---|---|---|---|---|---|
Parameter |
|
||||
Nilai Pengembalian |
|
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 terpotong. Demikian pula, jika nilai bilangan bulat yang dienkode negatif, nilai tersebut akan dikonversi menjadi tidak bertanda tangan.
Detail | |||||
---|---|---|---|---|---|
Parameter |
|
||||
Nilai Pengembalian |
|
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 terpotong. Demikian pula, jika nilai bilangan bulat yang dienkode negatif, nilai tersebut akan dikonversi menjadi tidak bertanda tangan.
Detail | |||||
---|---|---|---|---|---|
Parameter |
|
||||
Nilai Pengembalian |
|
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 terpotong. Demikian pula, jika nilai bilangan bulat yang dienkode negatif, nilai tersebut akan dikonversi menjadi tidak bertanda tangan.
Detail | |||||
---|---|---|---|---|---|
Parameter |
|
||||
Nilai Pengembalian |
|
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 negatif, nilai akan dikonversi menjadi tidak ditandatangani.
Detail | |||||
---|---|---|---|---|---|
Parameter |
|
||||
Nilai Pengembalian |
|
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 Pengembalian |
|
GetBufHandle
uintptr_t GetBufHandle( void ) const
GetBytes
WEAVE_ERROR GetBytes( uint8_t *buf, uint32_t bufSize )
Mendapatkan nilai byte saat ini atau elemen string UTF8.
Untuk menentukan ukuran buffer input yang diperlukan, panggil metode GetLength() sebelum memanggil GetBytes().
Detail | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||||
Nilai Pengembalian |
|
GetContainerType
TLVType GetContainerType( void ) const
Menampilkan jenis container tempat TLVReader sedang membaca.
Metode GetContainerType() menampilkan jenis container TLV tempat TLVReader membaca. Jika TLVReader diposisikan di tingkat terluar encoding TLV (yaitu sebelum, pada, atau setelah elemen TLV terluar), metode ini akan menampilkan kTLVType_NotSpecified.
Detail | |
---|---|
Hasil |
TLVType penampung 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 byte kontrol dan hanya implementasi internal TLV yang boleh mengakses byte. 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 tanda tangan 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 buffering input yang mendasarinya. Agar berhasil, metode ini mengharuskan keseluruhan nilai string ada dalam satu buffering. Jika tidak, metode ini akan menampilkan WEAVE_ERROR_TLV_UNDERRUN. Hal ini membuat metode ini menjadi terbatas saat membaca data dari beberapa buffer yang terpisah.
Detail | |||||||||
---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||
Nilai Pengembalian |
|
GetLength
uint32_t GetLength( void ) const
Menampilkan panjang data yang terkait dengan elemen TLV saat ini.
Panjang data hanya berlaku untuk elemen string UTF8 atau string byte. Untuk string UTF8, nilai yang dikembalikan adalah jumlah byte dalam string, bukan jumlah karakter.
Detail | |
---|---|
Hasil |
Panjang (dalam byte) data yang terkait dengan elemen TLV saat ini, atau 0 jika elemen saat ini bukan string UTF8 atau byte, 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 buffering input dasar yang sesuai dengan posisi pembaca saat ini.
Detail | |
---|---|
Hasil |
Pointer ke buffering input dasar yang 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 |
Total jumlah byte yang dapat dibaca hingga panjang baca maksimum tercapai.
|
GetString
WEAVE_ERROR GetString( char *buf, uint32_t bufSize )
Dapatkan nilai byte saat ini atau elemen string UTF8 sebagai string yang dihentikan null.
Untuk menentukan ukuran buffer input yang diperlukan, panggil metode GetLength() sebelum memanggil GetBytes(). Buffer input harus berukuran minimal satu byte lebih besar dari panjang string untuk mengakomodasi karakter null.
Detail | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||||
Nilai Pengembalian |
|
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 mengekstrak berbagai nilai kolom tag.
Detail | |
---|---|
Hasil |
Bilangan bulat tanpa tanda tangan yang berisi informasi tentang tag yang terkait dengan elemen TLV saat ini.
|
GetType
TLVType GetType( void ) const
Inisiasi
void Init( const TLVReader & aReader )
Inisiasi
void Init( const uint8_t *data, uint32_t dataLen )
Inisiasi
void Init( PacketBuffer *buf, uint32_t maxLen )
Menginisialisasi objek TLVReader untuk membaca dari satu PacketBuffer.
Penguraian dimulai pada posisi awal buffer (buf->DataStart()) dan berlanjut hingga akhir data dalam buffer (seperti yang ditandai dengan buf->Datalen()), atau byte maxLen telah diurai.
Detail | |||||
---|---|---|---|---|---|
Parameter |
|
Inisiasi
void Init( PacketBuffer *buf, uint32_t maxLen, bool allowDiscontiguousBuffers )
Menginisialisasi objek TLVReader untuk membaca dari satu atau beberapa PacketBuffers.
Penguraian dimulai di posisi awal buffer awal (buf->DataStart()). Jika allowDiscontiguousBuffers bernilai true, pembaca akan bergerak maju melalui rantai buffer yang ditautkan oleh pointer Next(). Penguraian berlanjut hingga semua data dalam rantai buffer telah digunakan (seperti yang ditandai dengan buf->Datalen()), atau byte maxLen telah diurai.
Detail | |||||||
---|---|---|---|---|---|---|---|
Parameter |
|
Berikutnya
WEAVE_ERROR Next( void )
Memajukan objek TLVReader ke elemen TLV berikutnya untuk dibaca.
Metode Next() memosisikan objek pembaca pada elemen berikutnya dalam encoding TLV yang berada dalam konteks containment yang sama. Khususnya, jika pembaca diposisikan di tingkat terluar encoding TLV, memanggil Next() akan memajukan pembaca ke elemen berikutnya yang paling atas. 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 containment saat ini, memanggil Next() saat pembaca diposisikan pada elemen container akan bergerak maju melalui 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 Pengembalian |
|
Berikutnya
WEAVE_ERROR Next( TLVType expectedType, uint64_t expectedTag )
Memajukan objek TLVReader ke elemen TLV berikutnya yang akan dibaca, yang menyatakan jenis dan tag elemen baru.
Metode Next(TLVType ekspektasiType, uint64_tExpectedTag) 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 Pengembalian |
|
OpenContainer
WEAVE_ERROR OpenContainer( TLVReader & containerReader )
Menginisialisasi 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 yang akan dibaca. Metode ini menggunakan referensi ke satu-satunya argumen ke pembaca baru yang akan diinisialisasi untuk membaca container. Pembaca ini dikenal sebagai pembaca penampung, sedangkan pembaca yang memanggil OpenContainer() disebut sebagai pembaca induk.
Saat metode OpenContainer() ditampilkan, pembaca penampung diposisikan tepat sebelum anggota pertama penampung. Memanggil Next() pada pembaca container akan memajukan seluruh anggota koleksi hingga akhir, yang pada saat itu 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, sehingga meneruskan pembaca container sebagai argumen. Aplikasi dapat menutup pembaca container kapan saja, dengan atau tanpa membaca semua elemen yang terdapat dalam penampung dasarnya. Setelah pembaca container ditutup, aplikasi dapat melanjutkan penggunaan pembaca induk.
Pembaca container mewarisi berbagai properti konfigurasi dari pembaca induk. Di antaranya:
- ID profil implisit (ImplicitProfileId)
- Pointer data aplikasi (data)
- Pointer fungsi GetNextBuffer
Detail | |||||
---|---|---|---|---|---|
Parameter |
|
||||
Nilai Pengembalian |
|
Lewati
WEAVE_ERROR Skip( void )
Memajukan objek TLVReader tepat setelah elemen TLV saat ini.
Metode Skip() menempatkan objek pembaca tepat setelah elemen TLV saat ini, sehingga panggilan berikutnya ke Next() akan memajukan pembaca ke elemen berikutnya. Seperti Next(), jika pembaca diposisikan pada elemen penampung pada saat panggilan, anggota penampung akan dilewati. Jika pembaca tidak diposisikan pada elemen apa pun, posisinya tetap tidak berubah.
Detail | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Nilai Pengembalian |
|
VerifyEndOfContainer
WEAVE_ERROR VerifyEndOfContainer( void )
Memverifikasi bahwa objek TVLReader berada di akhir container TLV.
Metode VerifyEndOfContainer() memverifikasi bahwa tidak ada elemen TLV lagi yang harus dibaca dalam penampung TLV saat ini. Ini adalah metode praktis yang setara dengan memanggil Next() dan memeriksa nilai return WEAVE_END_OF_TLV.
Detail | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Nilai Pengembalian |
|
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 head 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 Pengembalian |
|
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 )