nl:: Weave:: TLV:: TLVReader
#include <src/lib/core/WeaveTLV.h>
Udostępnia działający w pamięci parser danych zakodowanych w formacie TLV Weave.
Podsumowanie
TLVReader wdraża tylko do przodu parser „pull-style” dla danych Weave TLV. Obiekt TLVReader działa jako kursor, którego można używać do iteracji sekwencji elementów TLV i interpretowania ich zawartości. Po umieszczeniu na elemencie aplikacje mogą wywoływać metody czytnika Get(), aby przesłać zapytanie o typ i tag bieżącego elementu oraz wyodrębnić powiązaną z nim wartość. Metoda Next() czytnika służy do przechodzenia od elementu do elementu.
Obiekt TLVReader jest zawsze umieszczony przed elementem TLV, po nim lub po nim. Po zainicjowaniu pierwszy moduł TLVReader jest umieszczany bezpośrednio przed pierwszym elementem kodowania. Aby rozpocząć odczytywanie, aplikacja musi wywołać metodę Next() w celu umieszczenia czytnika na pierwszym elemencie. Gdy element kontenera występuje w postaci struktury, tablicy lub ścieżki, do iteracji zawartości kontenera można użyć metod OpenContainer() lub EnterContainer().
Gdy czytnik dotrze do końca kodowania TLV lub do ostatniego elementu w kontenerze, zasygnalizuje aplikację, zwracając błąd WEAVE_END_OF_TLV za pomocą metody Next(). Czytnik będzie nadal zwracać wartość WEAVE_END_OF_TLV do czasu jego ponownego zainicjowania lub zamknięcia bieżącego kontenera (przez CloseContainer() / ExitContainer()).
Obiekt TLVReader może analizować dane bezpośrednio ze stałego bufora wejściowego lub z łańcucha co najmniej jednego obiektu PacketBuffer. Dodatkowo aplikacje mogą dostarczać funkcję GetNextBuffer
do przekazywania danych do czytnika z dowolnego źródła, np. gniazda elektrycznego lub portu szeregowego.
Dziedziczenie
Bezpośrednie znane podklasy:nl::Weave::Profiles::DataManagement_Current::CircularEventReader
nl::Weave::TLV::CircularTLVReader
Typy publiczne |
|
---|---|
GetNextBufferFunct)(TLVReader &reader, uintptr_t &bufHandle, const uint8_t *&bufStart, uint32_t &bufLen)
|
WEAVE_ERROR(* Funkcja umożliwiająca pobieranie dodatkowych danych TLV do przeanalizowania. |
Atrybuty publiczne |
|
---|---|
AppData
|
void *
Pole wskaźnika, którego można używać w przypadku danych specyficznych dla aplikacji.
|
GetNextBuffer
|
Wskaźnik do funkcji, która będzie generować dane wejściowe dla obiektu TLVReader.
|
ImplicitProfileId
|
uint32_t
Identyfikator profilu używany w tagach profili zakodowanych w formie niejawnej.
|
Atrybuty chronione |
|
---|---|
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 *
|
Funkcje publiczne |
|
---|---|
CloseContainer(TLVReader & containerReader)
|
Kończy odczyt kontenera TLV po wywołaniu funkcji OpenContainer().
|
DupBytes(uint8_t *& buf, uint32_t & dataLen)
|
Przydziela i zwraca bufor zawierający wartość bieżącego bajtu lub ciągu UTF8.
|
DupString(char *& buf)
|
Przydziela i zwraca bufor zawierający wartość bieżącego bajtu lub ciągu UTF8 z zakończeniem null.
|
EnterContainer(TLVType & outerContainerType)
|
|
ExitContainer(TLVType outerContainerType)
|
|
Get(bool & v)
|
Pobierz wartość bieżącego elementu jako typ logiczny.
|
Get(int8_t & v)
|
Pobierz wartość bieżącego elementu jako 8-bitową liczbę całkowitą ze znakiem.
|
Get(int16_t & v)
|
Pobierz wartość bieżącego elementu jako 16-bitową liczbę całkowitą ze znakiem.
|
Get(int32_t & v)
|
Pobierz wartość bieżącego elementu jako 32-bitową liczbę całkowitą ze znakiem.
|
Get(int64_t & v)
|
Pobierz wartość bieżącego elementu jako 64-bitową liczbę całkowitą ze znakiem.
|
Get(uint8_t & v)
|
Pobierz wartość bieżącego elementu jako 8-bitową nieoznaczoną liczbę całkowitą.
|
Get(uint16_t & v)
|
Pobierz wartość bieżącego elementu jako 16-bitową nieoznaczoną liczbę całkowitą.
|
Get(uint32_t & v)
|
Pobierz wartość bieżącego elementu jako 32-bitową nieoznaczoną liczbę całkowitą.
|
Get(uint64_t & v)
|
Pobierz wartość bieżącego elementu jako 64-bitową nieoznaczoną liczbę całkowitą.
|
Get(float & v)
|
|
Get(double & v)
|
Pobierz wartość bieżącego elementu jako liczbę zmiennoprzecinkową o podwójnej precyzji.
|
GetBufHandle(void) const
|
uintptr_t
|
GetBytes(uint8_t *buf, uint32_t bufSize)
|
Pobierz wartość bieżącego bajta lub elementu ciągu UTF8.
|
GetContainerType(void) const
|
Zwraca typ kontenera, w którym obecnie odczytuje TLVReader.
|
GetControlByte(void) const
|
uint16_t
Zwraca bajt kontrolny powiązany z bieżącym elementem TLV.
|
GetDataPtr(const uint8_t *& data)
|
Znajdź wskaźnik do początkowo zakodowanego bajtu bajtu TLV lub elementu ciągu UTF8.
|
GetLength(void) const
|
uint32_t
Zwraca długość danych powiązanych z bieżącym elementem TLV.
|
GetLengthRead(void) const
|
uint32_t
Zwraca łączną liczbę bajtów odczytanych od czasu zainicjowania czytnika.
|
GetReadPoint(void) const
|
const uint8_t *
Pobiera punkt w bazowym buforze danych wejściowych, który odpowiada bieżącej pozycji czytelnika.
|
GetRemainingLength(void) const
|
uint32_t
Zwraca łączną liczbę bajtów, które mogą być odczytywane do momentu osiągnięcia maksymalnej długości odczytu.
|
GetString(char *buf, uint32_t bufSize)
|
Pobierz wartość bieżącego bajta lub elementu ciągu UTF8 jako ciąg znaków zakończony wartością null.
|
GetTag(void) const
|
uint64_t
Zwraca tag powiązany z bieżącym elementem TLV.
|
GetType(void) const
|
Zwraca typ bieżącego elementu TLV.
|
Init(const TLVReader & aReader)
|
void
|
Init(const uint8_t *data, uint32_t dataLen)
|
void
Inicjuje obiekt TLVReader do odczytu z jednego bufora wejściowego.
|
Init(PacketBuffer *buf, uint32_t maxLen)
|
void
Inicjuje obiekt TLVReader do odczytu z pojedynczego obiektu PacketBuffer.
|
Init(PacketBuffer *buf, uint32_t maxLen, bool allowDiscontiguousBuffers)
|
void
Inicjuje obiekt TLVReader w celu odczytu z co najmniej jednego obiektu PacketBuffer.
|
Next(void)
|
|
Next(TLVType expectedType, uint64_t expectedTag)
|
|
OpenContainer(TLVReader & containerReader)
|
|
Skip(void)
|
|
VerifyEndOfContainer(void)
|
Sprawdza, czy obiekt TVLReader znajduje się na końcu kontenera TLV.
|
Funkcje chronione |
|
---|---|
ClearElementState(void)
|
void
Wyczyść stan TLVReader.
|
ElementType(void) const
|
TLVElementType
To jest metoda prywatna, która zwraca wartość TLVElementType z mControlByte.
|
EnsureData(WEAVE_ERROR noDataErr)
|
|
GetElementHeadLength(uint8_t & elemHeadBytes) const
|
Jest to prywatna metoda obliczania długości nagłówka elementu 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)
|
Pomiń wszystkie dane w bieżącym TLV, odczytując je bez bufora docelowego.
|
SkipToEndOfContainer(void)
|
|
VerifyElement(void)
|
Chronione funkcje statyczne |
|
---|---|
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)
|
Typy publiczne
GetNextBufferFunct
WEAVE_ERROR(* GetNextBufferFunct)(TLVReader &reader, uintptr_t &bufHandle, const uint8_t *&bufStart, uint32_t &bufLen)
Funkcja umożliwiająca pobieranie dodatkowych danych TLV do przeanalizowania.
Funkcje tego typu służą do przekazywania danych wejściowych do TLVReader. Po wywołaniu funkcja powinna wygenerować dodatkowe dane, które czytelnik może przeanalizować lub zasygnalizować, że nie ma więcej danych.
Szczegóły | |||||||||
---|---|---|---|---|---|---|---|---|---|
Parametry |
|
||||||||
Zwracane wartości |
|
Atrybuty publiczne
AppData
void * AppData
Pole wskaźnika, którego można używać w przypadku danych specyficznych dla aplikacji.
GetNextBuffer
GetNextBufferFunct GetNextBuffer
Wskaźnik do funkcji, która będzie generować dane wejściowe dla obiektu TLVReader.
Jeśli ustawiona jest wartość NULL (wartość domyślna), czytelnik zakłada, że nie są dostępne żadne dalsze dane wejściowe.
Aplikacja GetNextBuffer może ustawić w dowolnym momencie, ale zwykle jest ustawiana podczas inicjowania czytnika.
Dodatkowe informacje o implementowaniu funkcji GetNextBuffer znajdziesz w definicji typu GetNextBufferFunct.
ImplicitProfileId
uint32_t ImplicitProfileId
Identyfikator profilu używany w tagach profili zakodowanych w formie niejawnej.
Gdy czytelnik napotyka tag profilu, który został zakodowany w formie niejawnej, jako domniemanego identyfikatora profilu dla tagu wykorzystuje wartość właściwości ImplicitProfileId
.
Domyślnie właściwość ImplicitProfileId
ma wartość kProfileIdNotSpecified. Podczas dekodowania TLV zawierającego domyślnie zakodowane tagi aplikacje muszą ustawić ImplicitProfileId
przed odczytaniem elementów TLV zawierających takie tagi. Odpowiedni identyfikator profilu zależy zwykle od kontekstu aplikacji lub używanego protokołu.
Jeśli zostanie napotkany niejawnie zakodowany tag, gdy zasada ImplicitProfileId
ma wartość kProfileIdNotSpecified, czytnik zwróci błąd WEAVE_ERROR_UNKNOWN_IMPLICIT_TLV_TAG.
Atrybuty chronione
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
Funkcje publiczne
CloseContainer
WEAVE_ERROR CloseContainer( TLVReader & containerReader )
Kończy odczyt kontenera TLV po wywołaniu funkcji OpenContainer().
Metoda CloseContainer() przywraca stan nadrzędnego obiektu TLVReader po wywołaniu funkcji OpenContainer(). Każde wywołanie aplikacji OpenContainer() musi wywołać funkcję CloseContainer(), przekazując odniesienie do tego samego czytnika kontenera do obu metod.
Gdy funkcja CloseContainer() jest zwracana, czytnik nadrzędny jest umieszczany bezpośrednio przed pierwszym elementem, który następuje po kontenerze. Od tego momentu aplikacja może używać metody Next() do przechodzenia między pozostałymi elementami.
Aplikacje mogą wywoływać metodę zamykania CloseContainer() na czytniku nadrzędnym w dowolnym momencie, niezależnie od tego, czy wszystkie elementy w kontenerze zostały przeczytane. Po wywołaniu funkcji CloseContainer() aplikacja powinna uznać czytnik kontenerów za „de-initialized” i nie można jej dalej używać bez ponownego zainicjowania.
Szczegóły | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parametry |
|
||||||||||||
Zwracane wartości |
|
DupBytes
WEAVE_ERROR DupBytes( uint8_t *& buf, uint32_t & dataLen )
Przydziela i zwraca bufor zawierający wartość bieżącego bajtu lub ciągu UTF8.
Ta metoda tworzy bufor i zwraca kopię danych powiązanych z bajtem lub ciągiem znaków UTF-8 w bieżącej pozycji. Pamięć bufora jest uzyskiwana za pomocą metody Malloc() i powinna być zwolniona za pomocą funkcji free() przez wywołanie metody, gdy nie jest już potrzebna.
Szczegóły | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parametry |
|
||||||||||||
Zwracane wartości |
|
DupString
WEAVE_ERROR DupString( char *& buf )
Przydziela i zwraca bufor zawierający wartość bieżącego bajtu lub ciągu UTF8 z zakończeniem null.
Ta metoda tworzy bufor i zwraca kopię danych powiązaną z bajtem lub ciągiem znaków UTF-8 w bieżącej pozycji i zwraca ją w bieżącej pozycji. Pamięć bufora jest uzyskiwana za pomocą metody Malloc() i powinna być zwolniona za pomocą funkcji free() przez wywołanie metody, gdy nie jest już potrzebna.
Szczegóły | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parametry |
|
||||||||||||
Zwracane wartości |
|
EnterContainer
WEAVE_ERROR EnterContainer( TLVType & outerContainerType )
Przygotowuje obiekt TLVReader do odczytu elementów kontenera TLV.
Metoda EnterContainer() przygotowuje bieżący obiekt TLVReader tak, aby rozpoczął odczyt elementów składowych kontenera TLV (struktury, tablicy lub ścieżki). Każde wywołanie funkcji EnterContainer() musi wywołać odpowiednie wywołanie ExitContainer().
Jeśli wywoływana jest metoda EnterContainer(), obiekt TLVReader musi być umieszczony na elemencie kontenera, który ma być odczytywany. Ta metoda przyjmuje jako argument odwołanie do wartości TLVType, która będzie używana do zapisywania kontekstu czytnika podczas odczytu kontenera.
Po powrocie metody EnterContainer() czytnik jest umieszczany bezpośrednio przed pierwszym elementem kontenera. Powtarzające się wywoływanie funkcji Next() przenosi czytelnika do kolejnych elementów kolekcji aż do osiągnięcia końca, po którym czytelnik zwróci wartość WEAVE_END_OF_TLV.
Gdy aplikacja zakończy odczyt kontenera, może kontynuować odczytywanie elementów znajdujących się za nim, wywołując metodę ExitContainer().
Szczegóły | |||||
---|---|---|---|---|---|
Parametry |
|
||||
Zwracane wartości |
|
ExitContainer
WEAVE_ERROR ExitContainer( TLVType outerContainerType )
Wykonuje odczyt kontenera TLV i przygotowuje obiekt TLVReader, aby odczytywać elementy za kontenerem.
Metoda ExitContainer() przywraca stan obiektu TLVReader po wywołaniu funkcji EnterContainer(). Każde wywołanie aplikacji EnterContainer() musi wywołać odpowiednie wywołanie ExitContainer(), przekazując wartość kontekstu zwrócona przez metodę EnterContainer().
Gdy zwracana jest metoda ExitContainer(), czytnik jest umieszczany bezpośrednio przed pierwszym elementem, który następuje po kontenerze. Od tego momentu aplikacja może używać metody Next() do przechodzenia między pozostałymi elementami.
Po wywołaniu funkcji EnterContainer() aplikacje mogą wywołać na czytniku funkcję ExitContainer() w dowolnym momencie, niezależnie od tego, czy wszystkie elementy w kontenerze bazowym zostały odczytane.
Szczegóły | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parametry |
|
||||||||||||
Zwracane wartości |
|
Pobierz
WEAVE_ERROR Get( bool & v )
Pobierz wartość bieżącego elementu jako typ logiczny.
Szczegóły | |||||
---|---|---|---|---|---|
Parametry |
|
||||
Zwracane wartości |
|
Pobierz
WEAVE_ERROR Get( int8_t & v )
Pobierz wartość bieżącego elementu jako 8-bitową liczbę całkowitą ze znakiem.
Jeśli zakodowana wartość całkowita jest większa niż typ danych wyjściowych, wynikowa wartość zostanie obcięta.
Szczegóły | |||||
---|---|---|---|---|---|
Parametry |
|
||||
Zwracane wartości |
|
Pobierz
WEAVE_ERROR Get( int16_t & v )
Pobierz wartość bieżącego elementu jako 16-bitową liczbę całkowitą ze znakiem.
Jeśli zakodowana wartość całkowita jest większa niż typ danych wyjściowych, wynikowa wartość zostanie obcięta.
Szczegóły | |||||
---|---|---|---|---|---|
Parametry |
|
||||
Zwracane wartości |
|
Pobierz
WEAVE_ERROR Get( int32_t & v )
Pobierz wartość bieżącego elementu jako 32-bitową liczbę całkowitą ze znakiem.
Jeśli zakodowana wartość całkowita jest większa niż typ danych wyjściowych, wynikowa wartość zostanie obcięta.
Szczegóły | |||||
---|---|---|---|---|---|
Parametry |
|
||||
Zwracane wartości |
|
Pobierz
WEAVE_ERROR Get( int64_t & v )
Pobierz wartość bieżącego elementu jako 64-bitową liczbę całkowitą ze znakiem.
Jeśli zakodowana wartość całkowita jest większa niż typ danych wyjściowych, wynikowa wartość zostanie obcięta.
Szczegóły | |||||
---|---|---|---|---|---|
Parametry |
|
||||
Zwracane wartości |
|
Pobierz
WEAVE_ERROR Get( uint8_t & v )
Pobierz wartość bieżącego elementu jako 8-bitową nieoznaczoną liczbę całkowitą.
Jeśli zakodowana wartość całkowita jest większa niż typ danych wyjściowych, wynikowa wartość zostanie obcięta. Podobnie, jeśli zakodowana liczba całkowita jest ujemna, zostanie przekonwertowana na wartość bez znaku.
Szczegóły | |||||
---|---|---|---|---|---|
Parametry |
|
||||
Zwracane wartości |
|
Pobierz
WEAVE_ERROR Get( uint16_t & v )
Pobierz wartość bieżącego elementu jako 16-bitową nieoznaczoną liczbę całkowitą.
Jeśli zakodowana wartość całkowita jest większa niż typ danych wyjściowych, wynikowa wartość zostanie obcięta. Podobnie, jeśli zakodowana liczba całkowita jest ujemna, zostanie przekonwertowana na wartość bez znaku.
Szczegóły | |||||
---|---|---|---|---|---|
Parametry |
|
||||
Zwracane wartości |
|
Pobierz
WEAVE_ERROR Get( uint32_t & v )
Pobierz wartość bieżącego elementu jako 32-bitową nieoznaczoną liczbę całkowitą.
Jeśli zakodowana wartość całkowita jest większa niż typ danych wyjściowych, wynikowa wartość zostanie obcięta. Podobnie, jeśli zakodowana liczba całkowita jest ujemna, zostanie przekonwertowana na wartość bez znaku.
Szczegóły | |||||
---|---|---|---|---|---|
Parametry |
|
||||
Zwracane wartości |
|
Pobierz
WEAVE_ERROR Get( uint64_t & v )
Pobierz wartość bieżącego elementu jako 64-bitową nieoznaczoną liczbę całkowitą.
Jeśli zakodowana liczba całkowita jest ujemna, zostanie przekonwertowana na wartość bez znaku.
Szczegóły | |||||
---|---|---|---|---|---|
Parametry |
|
||||
Zwracane wartości |
|
Pobierz
WEAVE_ERROR Get( float & v )
Pobierz
WEAVE_ERROR Get( double & v )
Pobierz wartość bieżącego elementu jako liczbę zmiennoprzecinkową o podwójnej precyzji.
Szczegóły | |||||
---|---|---|---|---|---|
Parametry |
|
||||
Zwracane wartości |
|
GetBufHandle
uintptr_t GetBufHandle( void ) const
GetBytes
WEAVE_ERROR GetBytes( uint8_t *buf, uint32_t bufSize )
Pobierz wartość bieżącego bajta lub elementu ciągu UTF8.
Aby określić wymagany rozmiar bufora wejściowego, przed wywołaniem funkcji GetBytes() wywołaj metodę GetLength().
Szczegóły | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Parametry |
|
||||||||||
Zwracane wartości |
|
GetContainerType
TLVType GetContainerType( void ) const
Zwraca typ kontenera, w którym obecnie odczytuje TLVReader.
Metoda GetContainerType() zwraca typ kontenera TLV, w którym odczytuje obiekt TLVReader. Jeśli TLVReader znajduje się na najbardziej zewnętrznym poziomie kodowania TLV (tzn. przed, w dniu lub za zewnętrznym elementem TLV), metoda zwróci wartość kTLVType_NotOkreślified.
Szczegóły | |
---|---|
Zwroty |
Wartość TLVType bieżącego kontenera lub kTLVType_NotSpecified, jeśli obiekt TLVReader nie znajduje się w kontenerze.
|
GetControlByte
uint16_t GetControlByte( void ) const
Zwraca bajt kontrolny powiązany z bieżącym elementem TLV.
W idealnej sytuacji nikt nigdy nie musi wiedzieć o bajcie kontrolnym i powinno mieć do niego dostęp tylko wewnętrzna implementacja TLV. Dostęp do bajtu kontrolnego może jednak pomagać w debugowaniu w narzędziach TLVDebugTools (które próbują zdekodować bajt kontrolny tagu podczas drukowania zawartości bufora TLV).
Szczegóły | |
---|---|
Zwroty |
Nieoznaczona liczba całkowita zawierająca bajt kontrolny powiązany z bieżącym elementem TLV. Wartość kTLVControlByte_NotSpecified jest zwracana, jeśli czytnik nie jest umieszczony na elemencie.
|
GetDataPtr
WEAVE_ERROR GetDataPtr( const uint8_t *& data )
Znajdź wskaźnik do początkowo zakodowanego bajtu bajtu TLV lub elementu ciągu UTF8.
Ta metoda zwraca bezpośredni wskaźnik zakodowaną wartość ciągu w bazowym buforze danych wejściowych. Aby ta metoda się udała, cała wartość ciągu musi znajdować się w jednym buforze. W przeciwnym razie zwraca wartość WEAVE_ERROR_TLV_UNDERRUN. Dzięki temu ta metoda może mieć ograniczone zastosowanie przy odczytywaniu danych z wielu nieprzylegających buforów.
Szczegóły | |||||||||
---|---|---|---|---|---|---|---|---|---|
Parametry |
|
||||||||
Zwracane wartości |
|
GetLength
uint32_t GetLength( void ) const
Zwraca długość danych powiązanych z bieżącym elementem TLV.
Długość danych dotyczy tylko elementów typu UTF8 lub ciągu bajtów. W przypadku ciągów UTF8 zwracaną wartością jest liczba bajtów w ciągu znaków, a nie liczby znaków.
Szczegóły | |
---|---|
Zwroty |
Długość (w bajtach) danych powiązanych z bieżącym elementem TLV lub wartość 0, jeśli bieżący element nie jest ciągiem UTF8 ani ciągiem bajtów w formacie UTF-8 albo jeśli czytnik nie jest umieszczony na elemencie.
|
GetLengthRead
uint32_t GetLengthRead( void ) const
Zwraca łączną liczbę bajtów odczytanych od czasu zainicjowania czytnika.
Szczegóły | |
---|---|
Zwroty |
Łączna liczba bajtów odczytanych od czasu zainicjowania czytnika.
|
GetReadPoint
const uint8_t * GetReadPoint( void ) const
Pobiera punkt w bazowym buforze danych wejściowych, który odpowiada bieżącej pozycji czytelnika.
Szczegóły | |
---|---|
Zwroty |
wskaźnik do bazowego bufora wejściowego, który odpowiada bieżącemu położeniu czytelnika;
|
GetRemainingLength
uint32_t GetRemainingLength( void ) const
Zwraca łączną liczbę bajtów, które mogą być odczytywane do momentu osiągnięcia maksymalnej długości odczytu.
Szczegóły | |
---|---|
Zwroty |
Łączna liczba bajtów, które można odczytać do momentu osiągnięcia maksymalnej długości odczytu.
|
GetString
WEAVE_ERROR GetString( char *buf, uint32_t bufSize )
Pobierz wartość bieżącego bajta lub elementu ciągu UTF8 jako ciąg znaków zakończony wartością null.
Aby określić wymagany rozmiar bufora wejściowego, przed wywołaniem funkcji GetBytes() wywołaj metodę GetLength(). Aby można było zmieścić znak null, bufor wejściowy powinien być o co najmniej 1 bajt większy od długości ciągu znaków.
Szczegóły | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Parametry |
|
||||||||||
Zwracane wartości |
|
GetTag
uint64_t GetTag( void ) const
Zwraca tag powiązany z bieżącym elementem TLV.
Wartości zwracanej przez funkcję GetTag() można używać z funkcjami narzędzia do tagów (IsProfileTag(), IsContextTag(), ProfileIdFromTag() itp.) do określenia typu tagu i wyodrębniania różnych wartości pól tagu.
Szczegóły | |
---|---|
Zwroty |
Nieoznaczona liczba całkowita zawierająca informacje o tagu powiązanym z bieżącym elementem TLV.
|
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 )
Inicjuje obiekt TLVReader do odczytu z pojedynczego obiektu PacketBuffer.
Analiza rozpoczyna się od pozycji początkowej bufora (buf->DataStart()) i trwa aż do końca danych w buforze (co oznacza buf->Datalen()) lub do przeanalizowania bajtów maxLen.
Szczegóły | |||||
---|---|---|---|---|---|
Parametry |
|
Init
void Init( PacketBuffer *buf, uint32_t maxLen, bool allowDiscontiguousBuffers )
Inicjuje obiekt TLVReader w celu odczytu z co najmniej jednego obiektu PacketBuffer.
Analiza rozpoczyna się od pozycji początkowej bufora (buf->DataStart()). Jeśli parametr allowDiscontiguousBuffers ma wartość prawda, czytelnik przechodzi przez łańcuch buforów połączonych wskaźnikami Next(). Analiza jest kontynuowana, dopóki nie zostaną wykorzystane wszystkie dane w łańcuchu bufora (oznaczone jako buf->Datalen()) lub dopóki nie zostaną przeanalizowane bajty maxLen.
Szczegóły | |||||||
---|---|---|---|---|---|---|---|
Parametry |
|
Dalej
WEAVE_ERROR Next( void )
Przewija obiekt TLVReader do następnego elementu TLV do odczytu.
Metoda Next() umieszcza obiekt czytnika w następnym elemencie w kodowaniu TLV, który znajduje się w tym samym kontekście ograniczenia. W szczególności jeśli czytnik znajduje się na najbardziej zewnętrznym poziomie kodowania TLV, wywołanie funkcji Next() spowoduje przeniesienie go do następnego elementu znajdującego się u góry góry. Jeśli czytnik znajduje się w elemencie kontenera TLV (strukturze, tablicy lub ścieżce), wywołanie funkcji Next() przeniesie go do następnego elementu kontenera.
Funkcja Next() ogranicza ruch czytnika do bieżącego kontekstu zawartości, dlatego wywołanie funkcji Next(), gdy czytelnik znajduje się w elemencie kontenera, przechodzi nad kontenerem, pomijając jego elementy składowe (oraz elementy wszystkich zagnieżdżonych kontenerów), aż dotrze do pierwszego elementu po kontenerze.
Gdy w konkretnym kontekście zawartości nie ma innych elementów, metoda Next() zwraca błąd WEAVE_END_OF_TLV, a położenie czytnika pozostanie niezmienione.
Szczegóły | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Zwracane wartości |
|
Dalej
WEAVE_ERROR Next( TLVType expectedType, uint64_t expectedTag )
Przewija obiekt TLVReader do następnego elementu TLV, który ma zostać odczytany, potwierdzając typ i tag nowego elementu.
Metoda Next(TLVTypeexpectedType, uint64_texpectedTag) jest metodą udogodnienia, która działa tak samo jak funkcja Next(), ale sprawdza też, czy typ i tag nowego elementu TLV są zgodne z podanymi argumentami.
Szczegóły | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parametry |
|
||||||||||||||||
Zwracane wartości |
|
OpenContainer
WEAVE_ERROR OpenContainer( TLVReader & containerReader )
Inicjuje nowy obiekt TLVReader do odczytu elementów kontenera TLV.
Metoda OpenContainer() inicjuje nowy obiekt TLVReader do odczytu elementów składowych kontenera TLV (struktury, tablicy lub ścieżki). Po wywołaniu funkcji OpenContainer() bieżący obiekt TLVReader musi zostać umieszczony w elemencie kontenera, który ma być odczytywany. Jako jedynym argumentem tej metody jest odwołanie do nowego czytnika, który zostanie zainicjowany w celu odczytu kontenera. Ten czytnik jest nazywany czytnikiem kontenerów, a czytnik, w przypadku którego wywoływana jest funkcja OpenContainer(), nazywany czytnikiem nadrzędnym.
Po powrocie metody OpenContainer() czytnik kontenerów jest umieszczany bezpośrednio przed pierwszym elementem kontenera. Wywołanie Next() na czytniku kontenera będzie przechodzić przez elementy zbioru aż do osiągnięcia wartości końcowej, po której czytelnik zwróci wartość WEAVE_END_OF_TLV.
Gdy czytnik kontenerów jest otwarty, aplikacje nie mogą wywoływać ani w inny sposób zmieniać stanu czytnika nadrzędnego. Gdy aplikacja skończy korzystać z czytnika kontenerów, musi ją zamknąć, wywołując na czytniku nadrzędnym wywołanie CloseContainer(), przekazując czytnik kontenerów jako argument. Aplikacje mogą zamknąć czytnik kontenerów w dowolnym momencie, nawet bez odczytu wszystkich elementów w bazowym kontenerze. Po zamknięciu czytnika kontenerów aplikacje mogą dalej z niego korzystać.
Czytnik kontenerów dziedziczy różne właściwości konfiguracji z czytnika nadrzędnego. Dostępne symbole:
- Niejawny identyfikator profilu (ImplicitProfileId)
- wskaźnik danych aplikacji (AppData)
- Wskaźnik funkcji GetNextBuffer
Szczegóły | |||||
---|---|---|---|---|---|
Parametry |
|
||||
Zwracane wartości |
|
Pomiń
WEAVE_ERROR Skip( void )
Przesuwa obiekt TLVReader na bieżący element TLV.
Metoda Skip() umieszcza obiekt czytnika bezpośrednio po bieżącym elemencie TLV, tak aby kolejne wywołanie funkcji Next() skierowało czytelnika do kolejnego elementu. Podobnie jak w przypadku funkcji Next(), jeśli w momencie wywołania czytelnik zostanie umieszczony na elemencie kontenera, elementy kontenera zostaną pominięte. Jeśli czytnik nie jest umieszczony na żadnym elemencie, jego położenie pozostaje niezmienione.
Szczegóły | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Zwracane wartości |
|
VerifyEndOfContainer
WEAVE_ERROR VerifyEndOfContainer( void )
Sprawdza, czy obiekt TVLReader znajduje się na końcu kontenera TLV.
Metoda VerifyEndOfContainer() sprawdza, czy w bieżącym kontenerze TLV nie ma dalszych elementów TLV do odczytu. Jest to wygodna metoda, która odpowiada wywołaniu funkcji Next() i sprawdzaniu zwracanej wartości WEAVE_END_OF_TLV.
Szczegóły | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Zwracane wartości |
|
Funkcje chronione
ClearElementState
void ClearElementState( void )
ElementType
TLVElementType ElementType( void ) const
To jest metoda prywatna, która zwraca TLVElementType z mControlByte.
EnsureData
WEAVE_ERROR EnsureData( WEAVE_ERROR noDataErr )
GetElementHeadLength
WEAVE_ERROR GetElementHeadLength( uint8_t & elemHeadBytes ) const
Jest to prywatna metoda obliczania długości nagłówka elementu 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 )
Pomiń wszystkie dane w bieżącym TLV, odczytując je bez bufora docelowego.
Szczegóły | |||||
---|---|---|---|---|---|
Zwracane wartości |
|
SkipToEndOfContainer
WEAVE_ERROR SkipToEndOfContainer( void )
VerifyElement
WEAVE_ERROR VerifyElement( void )
Chronione funkcje statyczne
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 )