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)
Menyiapkan objek TLVReader untuk membaca anggota elemen container TLV.
ExitContainer(TLVType outerContainerType)
Menyelesaikan pembacaan container TLV dan menyiapkan objek TLVReader untuk membaca elemen setelah container.
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
Melakukan inisialisasi objek TLVReader dari objek TLVReader lain.
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)
Memajukan objek TLVReader ke elemen TLV berikutnya untuk dibaca.
Next(TLVType expectedType, uint64_t expectedTag)
Memajukan objek TLVReader ke elemen TLV berikutnya yang akan dibaca, yang menyatakan jenis dan tag elemen baru.
OpenContainer(TLVReader & containerReader)
Menginisialisasi objek TLVReader baru untuk membaca anggota elemen container TLV.
Skip(void)
Memajukan objek TLVReader tepat setelah elemen TLV saat ini.
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
[in] reader
Referensi ke objek TLVReader yang meminta data input.
[in,out] bufHandle
Referensi ke nilai uintptr_t yang dapat digunakan fungsi untuk menyimpan data konteks di antara panggilan. Nilai ini diinisialisasi ke 0 sebelum panggilan pertama.
[in,out] bufStart
Referensi ke pointer data. Saat masuk ke fungsi, bufStart mengarah ke satu byte di luar byte data TLV terakhir yang digunakan oleh pembaca. Saat keluar, bufStart diharapkan mengarah ke byte pertama dari data TLV baru yang akan diurai. Nilai pointer baru dapat berada dalam buffer yang sama dengan data yang digunakan sebelumnya, atau dapat menunjuk ke buffer yang sama sekali baru.
[out] bufLen
Referensi ke bilangan bulat yang belum ditandatangani, yang harus disetel fungsi ke jumlah byte data TLV yang ditampilkan. Jika akhir data TLV input telah tercapai, fungsi ini akan menetapkan nilai ini ke 0.
Nilai Pengembalian
WEAVE_NO_ERROR
Jika fungsi berhasil menghasilkan lebih banyak data TLV, atau akhir data input tercapai (dalam hal ini bufLen harus ditetapkan ke 0).
other
Kode error khusus platform atau Weave lain yang menunjukkan bahwa terjadi error yang mencegah fungsi menghasilkan data yang diminta.

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
[in] containerReader
Referensi ke objek TLVReader yang diberikan ke metode OpenContainer().
Nilai Pengembalian
WEAVE_NO_ERROR
Jika metode ini berhasil.
WEAVE_ERROR_INCORRECT_STATE
Jika OpenContainer() belum dipanggil pada pembaca, atau jika pembaca penampung tidak cocok dengan yang diteruskan ke metode OpenContainer().
WEAVE_ERROR_TLV_UNDERRUN
Jika encoding TLV yang mendasarinya berakhir sebelum waktunya.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Apakah pembaca menemukan jenis elemen TLV yang tidak valid atau tidak didukung.
WEAVE_ERROR_INVALID_TLV_TAG
Apakah pembaca menemukan tag TLV dalam konteks yang tidak valid.
other
Kode error platform atau Weave lain yang ditampilkan oleh fungsi GetNextBuffer() yang dikonfigurasi. Hanya memungkinkan jika GetNextBuffer adalah non-NULL.

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
[out] buf
Referensi ke pointer tempat buffering yang dialokasikan dengan heap dataLen byte akan ditetapkan saat berhasil.
[out] dataLen
Referensi ke penyimpanan untuk ukuran, dalam byte, buf saat berhasil.
Nilai Pengembalian
WEAVE_NO_ERROR
Jika metode ini berhasil.
WEAVE_ERROR_WRONG_TLV_TYPE
Jika elemen saat ini bukan byte TLV atau string UTF8, atau pembaca tidak diposisikan pada elemen.
WEAVE_ERROR_NO_MEMORY
Jika memori tidak dapat dialokasikan untuk buffering output.
WEAVE_ERROR_TLV_UNDERRUN
Jika encoding TLV yang mendasarinya berakhir sebelum waktunya.
WEAVE_ERROR_UNSUPPORTED_WEAVE_FEATURE
Jika platform target tidak mendukung malloc() dan free().
other
Kode error platform atau Weave lain yang ditampilkan oleh fungsi GetNextBuffer() yang dikonfigurasi. Hanya memungkinkan jika GetNextBuffer adalah non-NULL.

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
[out] buf
Referensi ke pointer tempat buffering yang dialokasikan heap akan ditetapkan saat berhasil.
Nilai Pengembalian
WEAVE_NO_ERROR
Jika metode ini berhasil.
WEAVE_ERROR_WRONG_TLV_TYPE
Jika elemen saat ini bukan byte TLV atau string UTF8, atau pembaca tidak diposisikan pada elemen.
WEAVE_ERROR_NO_MEMORY
Jika memori tidak dapat dialokasikan untuk buffering output.
WEAVE_ERROR_TLV_UNDERRUN
Jika encoding TLV yang mendasarinya berakhir sebelum waktunya.
WEAVE_ERROR_UNSUPPORTED_WEAVE_FEATURE
Jika platform target tidak mendukung malloc() dan free().
other
Kode error platform atau Weave lain yang ditampilkan oleh fungsi GetNextBuffer() yang dikonfigurasi. Hanya memungkinkan jika GetNextBuffer adalah non-NULL.

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
[out] outerContainerType
Referensi ke nilai TLVType yang akan menerima konteks pembaca.
Nilai Pengembalian
WEAVE_NO_ERROR
Jika metode ini berhasil.
WEAVE_ERROR_INCORRECT_STATE
Jika elemen saat ini tidak diposisikan pada elemen container.

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
[in] outerContainerType
Nilai TLVType yang ditampilkan oleh metode EnterContainer().
Nilai Pengembalian
WEAVE_NO_ERROR
Jika metode ini berhasil.
WEAVE_ERROR_INCORRECT_STATE
Jika OpenContainer() belum dipanggil pada pembaca, atau jika pembaca penampung tidak cocok dengan yang diteruskan ke metode OpenContainer().
WEAVE_ERROR_TLV_UNDERRUN
Jika encoding TLV yang mendasarinya berakhir sebelum waktunya.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Apakah pembaca menemukan jenis elemen TLV yang tidak valid atau tidak didukung.
WEAVE_ERROR_INVALID_TLV_TAG
Apakah pembaca menemukan tag TLV dalam konteks yang tidak valid.
other
Kode error platform atau Weave lain yang ditampilkan oleh fungsi GetNextBuffer() yang dikonfigurasi. Hanya memungkinkan jika GetNextBuffer adalah non-NULL.

Dapatkan

WEAVE_ERROR Get(
  bool & v
)

Mendapatkan nilai elemen saat ini sebagai jenis bool.

Detail
Parameter
[out] v
Menerima nilai yang terkait dengan elemen TLV saat ini.
Nilai Pengembalian
WEAVE_NO_ERROR
Jika metode ini berhasil.
WEAVE_ERROR_WRONG_TLV_TYPE
Jika elemen saat ini bukan jenis boolean TLV, atau pembaca tidak diposisikan pada elemen.

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
[out] v
Menerima nilai yang terkait dengan elemen TLV saat ini.
Nilai Pengembalian
WEAVE_NO_ERROR
Jika metode ini berhasil.
WEAVE_ERROR_WRONG_TLV_TYPE
Jika elemen saat ini bukan jenis integer TLV (ditandatangani atau tidak ditandatangani), atau pembaca tidak diposisikan pada elemen.

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
[out] v
Menerima nilai yang terkait dengan elemen TLV saat ini.
Nilai Pengembalian
WEAVE_NO_ERROR
Jika metode ini berhasil.
WEAVE_ERROR_WRONG_TLV_TYPE
Jika elemen saat ini bukan jenis integer TLV (ditandatangani atau tidak ditandatangani), atau pembaca tidak diposisikan pada elemen.

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
[out] v
Menerima nilai yang terkait dengan elemen TLV saat ini.
Nilai Pengembalian
WEAVE_NO_ERROR
Jika metode ini berhasil.
WEAVE_ERROR_WRONG_TLV_TYPE
Jika elemen saat ini bukan jenis integer TLV (ditandatangani atau tidak ditandatangani), atau pembaca tidak diposisikan pada elemen.

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
[out] v
Menerima nilai yang terkait dengan elemen TLV saat ini.
Nilai Pengembalian
WEAVE_NO_ERROR
Jika metode ini berhasil.
WEAVE_ERROR_WRONG_TLV_TYPE
Jika elemen saat ini bukan jenis integer TLV (ditandatangani atau tidak ditandatangani), atau pembaca tidak diposisikan pada elemen.

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
[out] v
Menerima nilai yang terkait dengan elemen TLV saat ini.
Nilai Pengembalian
WEAVE_NO_ERROR
Jika metode ini berhasil.
WEAVE_ERROR_WRONG_TLV_TYPE
Jika elemen saat ini bukan jenis integer TLV (ditandatangani atau tidak ditandatangani), atau pembaca tidak diposisikan pada elemen.

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
[out] v
Menerima nilai yang terkait dengan elemen TLV saat ini.
Nilai Pengembalian
WEAVE_NO_ERROR
Jika metode ini berhasil.
WEAVE_ERROR_WRONG_TLV_TYPE
Jika elemen saat ini bukan jenis integer TLV (ditandatangani atau tidak ditandatangani), atau pembaca tidak diposisikan pada elemen.

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
[out] v
Menerima nilai yang terkait dengan elemen TLV saat ini.
Nilai Pengembalian
WEAVE_NO_ERROR
Jika metode ini berhasil.
WEAVE_ERROR_WRONG_TLV_TYPE
Jika elemen saat ini bukan jenis integer TLV (ditandatangani atau tidak ditandatangani), atau pembaca tidak diposisikan pada elemen.

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
[out] v
Menerima nilai yang terkait dengan elemen TLV saat ini.
Nilai Pengembalian
WEAVE_NO_ERROR
Jika metode ini berhasil.
WEAVE_ERROR_WRONG_TLV_TYPE
Jika elemen saat ini bukan jenis integer TLV (ditandatangani atau tidak ditandatangani), atau pembaca tidak diposisikan pada elemen.

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
[out] v
Menerima nilai yang terkait dengan elemen TLV saat ini.
Nilai Pengembalian
WEAVE_NO_ERROR
Jika metode ini berhasil.
WEAVE_ERROR_WRONG_TLV_TYPE
Jika elemen saat ini bukan jenis floating point TLV, atau pembaca tidak diposisikan pada elemen.

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
[in] buf
Pointer ke buffer untuk menerima data string.
[in] bufSize
Ukuran dalam byte buffer yang ditunjuk oleh buf.
Nilai Pengembalian
WEAVE_NO_ERROR
Jika metode ini berhasil.
WEAVE_ERROR_WRONG_TLV_TYPE
Jika elemen saat ini bukan byte TLV atau string UTF8, atau pembaca tidak diposisikan pada elemen.
WEAVE_ERROR_BUFFER_TOO_SMALL
Jika buffer yang disediakan terlalu kecil untuk menyimpan data yang terkait dengan elemen saat ini.
WEAVE_ERROR_TLV_UNDERRUN
Jika encoding TLV yang mendasarinya berakhir sebelum waktunya.
other
Kode error platform atau Weave lain yang ditampilkan oleh fungsi GetNextBuffer() yang dikonfigurasi. Hanya memungkinkan jika GetNextBuffer adalah non-NULL.

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
[out] data
Referensi ke const pointer yang akan menerima pointer ke data string yang mendasarinya.
Nilai Pengembalian
WEAVE_NO_ERROR
Jika metode ini berhasil.
WEAVE_ERROR_WRONG_TLV_TYPE
Jika elemen saat ini bukan byte TLV atau string UTF8, atau pembaca tidak diposisikan pada elemen.
WEAVE_ERROR_TLV_UNDERRUN
Jika encoding TLV yang mendasarinya berakhir sebelum waktunya atau nilai elemen string saat ini tidak terdapat dalam satu buffering yang berdekatan.
other
Kode error platform atau Weave lain yang ditampilkan oleh fungsi GetNextBuffer() yang dikonfigurasi. Hanya memungkinkan jika GetNextBuffer adalah non-NULL.

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
[in] buf
Pointer ke buffer untuk menerima data string byte.
[in] bufSize
Ukuran dalam byte buffer yang ditunjuk oleh buf.
Nilai Pengembalian
WEAVE_NO_ERROR
Jika metode ini berhasil.
WEAVE_ERROR_WRONG_TLV_TYPE
Jika elemen saat ini bukan byte TLV atau string UTF8, atau pembaca tidak diposisikan pada elemen.
WEAVE_ERROR_BUFFER_TOO_SMALL
Jika buffer yang disediakan terlalu kecil untuk menyimpan data yang terkait dengan elemen saat ini.
WEAVE_ERROR_TLV_UNDERRUN
Jika encoding TLV yang mendasarinya berakhir sebelum waktunya.
other
Kode error platform atau Weave lain yang ditampilkan oleh fungsi GetNextBuffer() yang dikonfigurasi. Hanya memungkinkan jika GetNextBuffer adalah non-NULL.

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 

Menampilkan jenis elemen TLV saat ini.

Detail
Hasil
Nilai TLVType yang menjelaskan jenis data elemen TLV saat ini. Jika pembaca tidak diposisikan pada elemen TLV, nilai yang ditampilkan akan menjadi kTLVType_NotSpecified.

Inisiasi

void Init(
  const TLVReader & aReader
)

Melakukan inisialisasi objek TLVReader dari objek TLVReader lain.

Detail
Parameter
[in] aReader
Referensi hanya baca ke TLVReader sebagai sumber inisialisasi.

Inisiasi

void Init(
  const uint8_t *data,
  uint32_t dataLen
)

Menginisialisasi objek TLVReader untuk membaca dari buffering input tunggal.

Detail
Parameter
[in] data
Pointer ke buffer yang berisi data TLV yang akan diurai.
[in] dataLen
Panjang data TLV yang akan diurai.

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
[in] buf
Pointer ke PacketBuffer yang berisi data TLV yang akan diurai.
[in] maxLen
Jumlah maksimum byte yang akan diurai. Setelan defaultnya adalah jumlah data dalam buffering input.

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
[in] buf
Pointer ke PacketBuffer yang berisi data TLV yang akan diurai.
[in] maxLen
Jumlah maksimum byte yang akan diurai. Setelan defaultnya adalah jumlah total data dalam rantai buffering input.
[in] allowDiscontiguousBuffers
Jika benar, lanjutkan ke buffering berikutnya dalam rantai setelah semua data dalam buffer saat ini digunakan. Jika nilainya adalah salah, hentikan penguraian di akhir buffering awal.

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
WEAVE_NO_ERROR
Apakah pembaca berhasil diposisikan pada elemen baru.
WEAVE_END_OF_TLV
Jika tidak ada elemen lain yang tersedia.
WEAVE_ERROR_TLV_UNDERRUN
Jika encoding TLV yang mendasarinya berakhir sebelum waktunya.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Apakah pembaca menemukan jenis elemen TLV yang tidak valid atau tidak didukung.
WEAVE_ERROR_INVALID_TLV_TAG
Apakah pembaca menemukan tag TLV dalam konteks yang tidak valid.
WEAVE_ERROR_UNKNOWN_IMPLICIT_TLV_TAG
Jika pembaca menemukan tag TLV yang dienkode secara implisit, ID profil terkait tidak diketahui.
other
Kode error platform atau Weave lain yang ditampilkan oleh fungsi GetNextBuffer() yang dikonfigurasi. Hanya memungkinkan jika GetNextBuffer adalah non-NULL.

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
[in] expectedType
Jenis data yang diharapkan untuk elemen berikutnya.
[in] expectedTag
Tag yang diharapkan untuk elemen berikutnya.
Nilai Pengembalian
WEAVE_NO_ERROR
Apakah pembaca berhasil diposisikan pada elemen baru.
WEAVE_END_OF_TLV
Jika tidak ada elemen lain yang tersedia.
WEAVE_ERROR_WRONG_TLV_TYPE
Jika jenis elemen baru tidak cocok dengan nilai argumen expectedType.
WEAVE_ERROR_UNEXPECTED_TLV_ELEMENT
Jika tag yang terkait dengan elemen baru tidak cocok dengan nilai argumen expectedTag.
WEAVE_ERROR_TLV_UNDERRUN
Jika encoding TLV yang mendasarinya berakhir sebelum waktunya.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Apakah pembaca menemukan jenis elemen TLV yang tidak valid atau tidak didukung.
WEAVE_ERROR_INVALID_TLV_TAG
Apakah pembaca menemukan tag TLV dalam konteks yang tidak valid.
other
Kode error platform atau Weave lain yang ditampilkan oleh fungsi GetNextBuffer() yang dikonfigurasi. Hanya memungkinkan jika GetNextBuffer adalah non-NULL.

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
[out] containerReader
Referensi ke objek TLVReader yang akan diinisialisasi untuk membaca anggota elemen container saat ini. Semua data yang terkait dengan objek yang disediakan akan ditimpa.
Nilai Pengembalian
WEAVE_NO_ERROR
Jika metode ini berhasil.
WEAVE_ERROR_INCORRECT_STATE
Jika elemen saat ini tidak diposisikan pada elemen container.

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
WEAVE_NO_ERROR
Apakah pembaca berhasil diposisikan pada elemen baru.
WEAVE_END_OF_TLV
Jika tidak ada elemen lain yang tersedia.
WEAVE_ERROR_TLV_UNDERRUN
Jika encoding TLV yang mendasarinya berakhir sebelum waktunya.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Apakah pembaca menemukan jenis elemen TLV yang tidak valid atau tidak didukung.
WEAVE_ERROR_INVALID_TLV_TAG
Apakah pembaca menemukan tag TLV dalam konteks yang tidak valid.
other
Kode error platform atau Weave lain yang ditampilkan oleh fungsi GetNextBuffer() yang dikonfigurasi. Hanya memungkinkan jika GetNextBuffer adalah non-NULL.

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
WEAVE_NO_ERROR
Jika tidak ada elemen TLV lagi yang harus dibaca.
WEAVE_ERROR_UNEXPECTED_TLV_ELEMENT
Jika elemen TLV lain ditemukan dalam koleksi.
WEAVE_ERROR_TLV_UNDERRUN
Jika encoding TLV yang mendasarinya berakhir sebelum waktunya.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Apakah pembaca menemukan jenis elemen TLV yang tidak valid atau tidak didukung.
WEAVE_ERROR_INVALID_TLV_TAG
Apakah pembaca menemukan tag TLV dalam konteks yang tidak valid.
other
Kode error platform atau Weave lain yang ditampilkan oleh fungsi GetNextBuffer() yang dikonfigurasi. Hanya memungkinkan jika GetNextBuffer adalah non-NULL.

Fungsi yang dilindungi

ClearElementState

void ClearElementState(
  void
)

Hapus status TLVReader.

Metode ini digunakan untuk memosisikan pembaca sebelum TLV pertama, di antara TLV, atau setelah TLV terakhir.

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
WEAVE_NO_ERROR
Apakah pembaca berhasil diposisikan di akhir data.
other
Kode error platform atau Weave lain yang ditampilkan oleh fungsi GetNextBuffer() yang dikonfigurasi. Hanya memungkinkan jika GetNextBuffer adalah non-NULL.

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
)