nl:: Menenun:: TLV:: Pembaca TLV
#include <src/lib/core/WeaveTLV.h>
Menyediakan parser yang hemat memori untuk data yang dienkode dalam format TLV Weave.
Ringkasan
TLVReader menerapkan 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. 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, sebelum, atau setelah elemen TLV. Saat pertama kali diinisialisasi, TLVReader akan diposisikan tepat sebelum elemen pertama encoding. Untuk mulai membaca, aplikasi harus melakukan panggilan awal ke metode Next() untuk memosisikan pembaca pada elemen pertama. Jika terdapat struktur penampung, array atau 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 menandakan 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 lebih PacketBuffers. Selain itu, aplikasi dapat menyediakan fungsi GetNextBuffer
untuk memberikan 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 diuraikan. |
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 buffer yang berisi nilai byte saat ini atau string UTF8.
|
DupString(char *& buf)
|
Alokasikan dan tampilkan buffer yang berisi nilai yang dihapus dari byte saat ini atau string UTF8.
|
EnterContainer(TLVType & outerContainerType)
|
|
ExitContainer(TLVType outerContainerType)
|
|
Get(bool & v)
|
Mendapatkan nilai elemen saat ini sebagai jenis boolean.
|
Get(int8_t & v)
|
Dapatkan nilai elemen saat ini sebagai bilangan bulat 8-bit yang telah ditandai.
|
Get(int16_t & v)
|
Dapatkan nilai elemen saat ini sebagai bilangan bulat 16-bit yang telah ditandai.
|
Get(int32_t & v)
|
Dapatkan nilai elemen saat ini sebagai bilangan bulat 32-bit yang telah ditandai.
|
Get(int64_t & v)
|
Dapatkan nilai elemen saat ini sebagai bilangan bulat 64-bit yang telah ditandai.
|
Get(uint8_t & v)
|
Mendapatkan nilai elemen saat ini sebagai bilangan bulat 8-bit tanpa tanda tangan.
|
Get(uint16_t & v)
|
Mendapatkan nilai elemen saat ini sebagai bilangan bulat 16-bit tanpa tanda tangan.
|
Get(uint32_t & v)
|
Mendapatkan nilai elemen saat ini sebagai bilangan bulat 32-bit tanpa tanda tangan.
|
Get(uint64_t & v)
|
Mendapatkan nilai elemen saat ini sebagai bilangan bulat 64-bit tanpa tanda tangan.
|
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 elemen string UTF8 atau byte saat ini.
|
GetContainerType(void) const
|
Menampilkan jenis penampung tempat TLVReader sedang membaca.
|
GetControlByte(void) const
|
uint16_t
Menampilkan byte kontrol yang terkait dengan elemen TLV saat ini.
|
GetDataPtr(const uint8_t *& data)
|
Dapatkan pointer ke byte awal yang dienkode 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 pokok 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 elemen string UTF-1 atau byte saat ini sebagai string dengan akhiran 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 buffer input tunggal.
|
Init(PacketBuffer *buf, uint32_t maxLen)
|
void
Menginisialisasi objek TLVReader untuk dibaca 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
Menghapus 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 dimuat dalam TLV saat ini dengan membacanya tanpa buffering 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 diuraikan.
Fungsi jenis ini digunakan untuk memberikan feed data input ke TLVReader. Saat dipanggil, fungsi ini 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
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 menganggap tidak ada data input lebih lanjut yang tersedia.
GetNextBuffer bisa disetel oleh aplikasi kapan saja, namun biasanya disetel saat pembaca diinisialisasi.
Lihat definisi jenis GetNextBufferFunct untuk informasi tambahan tentang implementasi fungsi GetNextBuffer.
IDProfil Implisit
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 tag yang dienkode secara implisit ditemui saat ImplicitProfileId
ditetapkan ke kProfileIdNotSpecified, pembaca akan mengembalikan 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
TutupPenampung
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 aplikasi OpenContainer() harus melakukan panggilan yang sesuai ke CloseContainer(), dengan meneruskan referensi ke pembaca penampung yang sama ke kedua metode.
Saat CloseContainer() kembali, pembaca induk diposisikan tepat sebelum elemen pertama yang mengikuti penampung. Pada tahap ini, aplikasi dapat menggunakan metode Next() untuk melanjutkan ke elemen lainnya.
Aplikasi dapat memanggil tutup CloseContainer() pada pembaca induk kapan saja, terlepas dari apakah semua elemen dalam penampung yang mendasarinya telah dibaca. Setelah CloseContainer() dipanggil, aplikasi harus mempertimbangkan pembaca penampung 'de-inisialisasi' dan tidak boleh menggunakannya lebih lanjut tanpa melakukan inisialisasi ulang.
Detail | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||||||
Nilai yang Ditampilkan |
|
DpByte
WEAVE_ERROR DupBytes( uint8_t *& buf, uint32_t & dataLen )
Mengalokasikan dan menampilkan buffer yang berisi nilai byte saat ini atau string UTF8.
Metode ini membuat buffering untuk 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 lagi diperlukan.
Detail | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||||||
Nilai yang Ditampilkan |
|
Musik DupString
WEAVE_ERROR DupString( char *& buf )
Alokasikan dan tampilkan buffer yang berisi nilai yang dihapus dari byte saat ini atau string UTF8.
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 lagi diperlukan.
Detail | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||||||
Nilai yang Ditampilkan |
|
EnterContainer
WEAVE_ERROR EnterContainer( TLVType & outerContainerType )
Mempersiapkan objek TLVReader untuk membaca anggota elemen penampung TLV.
Metode EnterContainer() mempersiapkan objek TLVReader saat ini untuk mulai membaca elemen anggota penampung TLV (struktur, array, atau jalur). Untuk setiap panggilan ke aplikasi EnterContainer() harus melakukan panggilan yang sesuai ke ExitContainer().
Saat EnterContainer() dipanggil, objek TLVReader harus diposisikan pada elemen container agar dapat dibaca. Metode ini mengambil argumen sebagai referensi ke nilai TLVType yang akan digunakan untuk menyimpan konteks pembaca saat membaca penampung.
Saat metode EnterContainer() kembali, pembaca langsung diposisikan sebelum anggota pertama penampung. Memanggil Next() berulang kali akan memajukan pembaca melalui anggota koleksi hingga akhir tercapai, sehingga pembaca akan menampilkan WEAVE_END_OF_TLV.
Setelah aplikasi selesai membaca penampung, aplikasi dapat terus membaca elemen setelah penampung dengan memanggil metode ExitContainer().
Detail | |||||
---|---|---|---|---|---|
Parameter |
|
||||
Nilai yang Ditampilkan |
|
Keluar dari Container
WEAVE_ERROR ExitContainer( TLVType outerContainerType )
Menyelesaikan pembacaan penampung TLV dan menyiapkan objek TLVReader untuk membaca elemen setelah penampung.
Metode ExitContainer() memulihkan status objek TLVReader setelah panggilan ke EnterContainer(). Untuk setiap panggilan ke aplikasi EnterContainer() harus melakukan panggilan yang sesuai ke ExitContainer(), dengan meneruskan nilai konteks yang dikembalikan oleh metode EnterContainer().
Saat ExitContainer() kembali, pembaca diposisikan tepat sebelum elemen pertama yang mengikuti penampung. Pada tahap ini, aplikasi dapat menggunakan metode Next() untuk melanjutkan ke elemen lainnya.
Setelah EnterContainer() dipanggil, aplikasi dapat memanggil ExitContainer() pada pembaca kapan saja, terlepas dari apakah semua elemen dalam penampung yang mendasarinya telah dibaca.
Detail | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||||||
Nilai yang Ditampilkan |
|
Dapatkan
WEAVE_ERROR Get( bool & v )
Mendapatkan nilai elemen saat ini sebagai jenis boolean.
Detail | |||||
---|---|---|---|---|---|
Parameter |
|
||||
Nilai yang Ditampilkan |
|
Dapatkan
WEAVE_ERROR Get( int8_t & v )
Dapatkan nilai elemen saat ini sebagai bilangan bulat 8-bit yang telah ditandai.
Jika nilai bilangan bulat yang dienkode lebih besar dari jenis data output, nilai yang dihasilkan akan terpotong.
Detail | |||||
---|---|---|---|---|---|
Parameter |
|
||||
Nilai yang Ditampilkan |
|
Dapatkan
WEAVE_ERROR Get( int16_t & v )
Dapatkan nilai elemen saat ini sebagai bilangan bulat 16-bit yang telah ditandai.
Jika nilai bilangan bulat yang dienkode lebih besar dari jenis data output, nilai yang dihasilkan akan terpotong.
Detail | |||||
---|---|---|---|---|---|
Parameter |
|
||||
Nilai yang Ditampilkan |
|
Dapatkan
WEAVE_ERROR Get( int32_t & v )
Dapatkan nilai elemen saat ini sebagai bilangan bulat 32-bit yang telah ditandai.
Jika nilai bilangan bulat yang dienkode lebih besar dari jenis data output, nilai yang dihasilkan akan terpotong.
Detail | |||||
---|---|---|---|---|---|
Parameter |
|
||||
Nilai yang Ditampilkan |
|
Dapatkan
WEAVE_ERROR Get( int64_t & v )
Dapatkan nilai elemen saat ini sebagai bilangan bulat 64-bit yang telah ditandai.
Jika nilai bilangan bulat yang dienkode lebih besar dari jenis data output, nilai yang dihasilkan akan terpotong.
Detail | |||||
---|---|---|---|---|---|
Parameter |
|
||||
Nilai yang Ditampilkan |
|
Dapatkan
WEAVE_ERROR Get( uint8_t & v )
Mendapatkan nilai elemen saat ini sebagai bilangan bulat 8-bit tanpa tanda tangan.
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 akan dikonversi menjadi tidak ditandatangani.
Detail | |||||
---|---|---|---|---|---|
Parameter |
|
||||
Nilai yang Ditampilkan |
|
Dapatkan
WEAVE_ERROR Get( uint16_t & v )
Mendapatkan nilai elemen saat ini sebagai bilangan bulat 16-bit tanpa tanda tangan.
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 akan dikonversi menjadi tidak ditandatangani.
Detail | |||||
---|---|---|---|---|---|
Parameter |
|
||||
Nilai yang Ditampilkan |
|
Dapatkan
WEAVE_ERROR Get( uint32_t & v )
Mendapatkan nilai elemen saat ini sebagai bilangan bulat 32-bit tanpa tanda tangan.
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 akan dikonversi menjadi tidak ditandatangani.
Detail | |||||
---|---|---|---|---|---|
Parameter |
|
||||
Nilai yang Ditampilkan |
|
Dapatkan
WEAVE_ERROR Get( uint64_t & v )
Mendapatkan nilai elemen saat ini sebagai bilangan bulat 64-bit tanpa tanda tangan.
Jika nilai bilangan bulat yang dienkode negatif, nilai akan dikonversi ke tidak ditandatangani.
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 )
Mendapatkan 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 penampung tempat TLVReader sedang membaca.
Metode GetContainerType() menampilkan jenis penampung TLV tempat pembacaan TLVReader. Jika TLVReader diposisikan pada level paling luar dari encoding TLV (yaitu sebelum, pada atau setelah elemen TLV terluar), metode ini akan menampilkan kTLVType_NotSpecified.
Detail | |
---|---|
Hasil |
TLVType untuk 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 dapat mengaksesnya. Namun, memiliki akses ke byte kontrol sangat berguna untuk tujuan proses debug oleh TLVDebugUtilities (yang mencoba mendekode byte kontrol tag saat mencetak konten buffer TLV) secara efektif.
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 )
Dapatkan pointer ke byte awal yang dienkode dari byte TLV atau elemen string UTF8.
Metode ini menampilkan pointer langsung untuk nilai string yang dienkode dalam buffer input yang mendasarinya. Agar berhasil, metode ini mengharuskan keseluruhan nilai string ada dalam buffer tunggal. Jika tidak, metode ini akan menampilkan WEAVE_ERROR_TLV_UnderRUN. Ini membuat metode penggunaan terbatas saat membaca data dari beberapa buffer yang tidak berurutan.
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 UTF8 atau string 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 buffer input pokok yang sesuai dengan posisi pembaca saat ini.
Detail | |
---|---|
Hasil |
Pointer ke buffer input yang mendasarinya 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 elemen string UTF-1 atau byte saat ini sebagai string dengan akhiran null.
Untuk menentukan ukuran buffer input yang diperlukan, panggil metode GetLength() sebelum memanggil GetBytes(). Buffering input harus setidaknya satu byte lebih panjang dari panjang string untuk mengakomodasi karakter null.
Detail | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||||
Nilai yang Ditampilkan |
|
Mendapatkan Tag
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 tanda tangan 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 )
Menginisialisasi objek TLVReader untuk dibaca dari satu PacketBuffer.
Penguraian dimulai pada posisi awal buffer (buf->DataStart()) dan berlanjut hingga akhir data dalam buffer (seperti yang ditunjukkan oleh buf->Datalen()), atau byte maksLen telah diurai.
Detail | |||||
---|---|---|---|---|---|
Parameter |
|
Init
void Init( PacketBuffer *buf, uint32_t maxLen, bool allowDiscontiguousBuffers )
Menginisialisasi objek TLVReader untuk membaca dari satu atau beberapa PacketBuffers.
Penguraian dimulai pada posisi awal buffer awal (buf->DataStart()). Jika allowDiscontiguousBuffers benar, pembaca akan maju melalui rantai buffer yang ditautkan oleh pointer Next() mereka. Penguraian berlanjut hingga semua data dalam rantai buffering telah digunakan (seperti yang dilambangkan dengan buf->Datalen()), atau byte maxLen telah diurai.
Detail | |||||||
---|---|---|---|---|---|---|---|
Parameter |
|
Berikutnya
WEAVE_ERROR Next( void )
Meneruskan objek TLVReader ke elemen TLV berikutnya yang akan dibaca.
Metode Next() memosisikan objek pembaca pada elemen berikutnya dalam encoding TLV yang berada dalam konteks containment yang sama. Khususnya, jika pembaca diposisikan pada tingkat terluar dari encoding TLV, memanggil Next() akan memajukan pembaca ke elemen paling atas 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 penampung saat ini, memanggil Next() saat pembaca diposisikan pada elemen penampung akan maju melalui penampung, melewati elemen anggotanya (dan anggota penampung bertingkat) hingga mencapai elemen pertama setelah penampung.
Jika tidak ada elemen lebih lanjut dalam konteks penahanan 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 sehingga menegaskan jenis dan tag elemen baru.
Metode Next(TLVTypeExpectType, uint64_tExpectTag) adalah metode praktis yang memiliki perilaku yang sama seperti Next(), tetapi juga memverifikasi bahwa jenis dan tag elemen TLV baru cocok dengan argumen yang diberikan.
Detail | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||||||||||
Nilai yang Ditampilkan |
|
Penampung Terbuka
WEAVE_ERROR OpenContainer( TLVReader & containerReader )
Menginisialisasi objek TLVReader baru untuk membaca anggota elemen container TLV.
Metode OpenContainer() melakukan inisialisasi 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 menggunakan argumen tunggalnya sebagai referensi ke pembaca baru yang akan diinisialisasi untuk membaca penampung. Pembaca ini dikenal sebagai pembaca penampung sedangkan pembaca tempat OpenContainer() dipanggil dikenal sebagai pembaca induk.
Saat metode OpenContainer() kembali, pembaca penampung diposisikan tepat sebelum anggota pertama penampung. Memanggil Next() pada pembaca container akan maju melalui anggota koleksi hingga akhir tercapai, dan pada saat itu pembaca akan menampilkan WEAVE_END_OF_TLV.
Saat penampung pembaca terbuka, aplikasi tidak boleh melakukan panggilan atau mengubah status pembaca induk. Setelah aplikasi selesai menggunakan pembaca penampung, aplikasi harus menutupnya dengan memanggil CloseContainer() pada pembaca induk, meneruskan pembaca penampung sebagai argumen. Aplikasi dapat menutup pembaca penampung kapan saja, dengan atau tanpa membaca semua elemen yang ada dalam penampung yang mendasarinya. Setelah penampung pembaca ditutup, aplikasi dapat melanjutkan penggunaan pembaca induk.
Pembaca penampung mewarisi berbagai properti konfigurasi dari pembaca induk. Karakter pengganti ini meliputi:
- ID profil implisit (implProfileIdId)
- 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 berikutnya ke Next() akan memajukan pembaca ke elemen berikut. 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 yang Ditampilkan |
|
VerifikasiEndOfContainer
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 sama dengan memanggil Next() dan memeriksa nilai yang ditampilkan WEAVE_END_OF_TLV.
Detail | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Nilai yang Ditampilkan |
|
Fungsi yang dilindungi
ClearElement
void ClearElementState( void )
JenisElemen
TLVElementType ElementType( void ) const
Ini adalah metode pribadi yang menampilkan TLVElementType dari mControlByte.
PastikanData
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
BacaData
WEAVE_ERROR ReadData( uint8_t *buf, uint32_t len )
Elemen Baca
WEAVE_ERROR ReadElement( void )
ReadTag
uint64_t ReadTag( TLVTagControl tagControl, const uint8_t *& p )
SetContainerOpen
void SetContainerOpen( bool aContainerOpen )
LewatiData
WEAVE_ERROR SkipData( void )
Lewati data apa pun yang dimuat dalam TLV saat ini dengan membacanya tanpa buffering tujuan.
Detail | |||||
---|---|---|---|---|---|
Nilai yang Ditampilkan |
|
SkipToEndOfContainer
WEAVE_ERROR SkipToEndOfContainer( void )
VerifikasiElemen
WEAVE_ERROR VerifyElement( void )
Fungsi statis yang dilindungi
BufferGetNextBuffer Gagal
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 )