nl::Weave::TLV::TLVWriter

#include <src/lib/core/WeaveTLV.h>

Udostępnia mało pamięci kodera do zapisu danych w formacie Weave TLV.

Podsumowanie

TLVWriter implementuje koder w stylu strumieniowym przeznaczony tylko do przekazywania dalej dla danych Weave TLV. Aplikacje zapisują dane w kodowaniu, wywołując jedną z metod Put() zapisującego, przekazując w razie potrzeby powiązane informacje o tagach i wartości. Podobnie aplikacje mogą kodować typy kontenerów TLV (struktury, tablice lub ścieżki) przez wywołanie metod OpenContainer() lub EnterContainer() zapisującego.

Obiekt TLVWriter może zapisywać dane bezpośrednio w stałym buforze wyjściowym lub w łańcuchu co najmniej jednego obiektu PacketBuffer. Dodatkowo aplikacje mogą dostarczać własne funkcje GetNewBuffer i FinalizeBuffer, aby kierować dane wyjściowe do dowolnego miejsca docelowego, np. gniazda lub kolejki zdarzeń.

Dziedziczenie

Bezpośrednie znane podklasy: nl::Weave::TLV::CircularTLVWriter

Typy chronione

@72{
  kEndOfContainerMarkerSize = 1
}
enum | typ wyliczeniowy

Typy publiczne

FinalizeBufferFunct)(TLVWriter &writer, uintptr_t bufHandle, uint8_t *bufStart, uint32_t bufLen) WEAVE_ERROR(*
Funkcja używana do finalizacji danych wyjściowych z obiektu TLVWriter.
GetNewBufferFunct)(TLVWriter &writer, uintptr_t &bufHandle, uint8_t *&bufStart, uint32_t &bufLen) WEAVE_ERROR(*
Funkcja, która dostarcza nową przestrzeń bufora danych wyjściowych do TLVWriter.

Atrybuty publiczne

AppData
void *
Pole wskaźnika, którego można używać w przypadku danych specyficznych dla aplikacji.
FinalizeBuffer
Wskaźnik do funkcji, która zostanie wywołana po zakończeniu tworzenia parametru TLVWriter.
GetNewBuffer
Wskaźnik do funkcji, która dostarcza nową przestrzeń bufora wyjściowego do TLVWriter.
ImplicitProfileId
uint32_t
Identyfikator profilu tagów, które powinny być zakodowane w formie niejawnej.

Atrybuty chronione

mBufHandle
uintptr_t
mBufStart
uint8_t *
mContainerType
mLenWritten
uint32_t
mMaxLen
uint32_t
mRemainingLen
uint32_t
mWritePoint
uint8_t *

Funkcje publiczne

CloseContainer(TLVWriter & containerWriter)
Kończy zapisywanie kontenera TLV po wywołaniu funkcji OpenContainer().
ContinuePutBytes(const uint8_t *buf, uint32_t len)
Koduje wartość ciągu bajtowego TLV.
CopyContainer(TLVReader & container)
Kopiuje element kontenera TLV z obiektu TLVReader.
CopyContainer(uint64_t tag, TLVReader & container)
Koduje element kontenera TLV ze wstępnie zakodowanego zestawu elementów.
CopyContainer(uint64_t tag, const uint8_t *encodedContainer, uint16_t encodedContainerLen)
Koduje element kontenera TLV, który zawiera elementy składowe ze wstępnie zakodowanego kontenera.
CopyElement(TLVReader & reader)
Kopiuje element TLV z obiektu czytnika do zapisującego.
CopyElement(uint64_t tag, TLVReader & reader)
EndContainer(TLVType outerContainerType)
Kończy kodowanie elementu kontenera TLV.
Finalize(void)
Zakończ kodowanie TLV.
GetContainerType(void) const
Zwraca typ kontenera, w którym obecnie pisze funkcja TLVWriter.
GetLengthWritten(void)
uint32_t
Zwraca łączną liczbę bajtów zapisanych od momentu zainicjowania zapisującego.
Init(uint8_t *buf, uint32_t maxLen)
void
Inicjuje obiekt TLVWriter do zapisu w pojedynczym buforze wyjściowym.
Init(PacketBuffer *buf, uint32_t maxLen)
void
Inicjuje obiekt TLVWriter w celu zapisu w pojedynczym obiekcie PacketBuffer.
Init(PacketBuffer *buf, uint32_t maxLen, bool allowDiscontiguousBuffers)
void
Inicjuje obiekt TLVWriter w celu zapisu w co najmniej jednym obiekcie PacketBuffer.
InitMalloced(uint8_t *& outBuf, uint32_t initialBufSize, uint32_t maxLen)
void
Inicjuje obiekt TLVWriter do zapisu w dynamicznym buforze.
OpenContainer(uint64_t tag, TLVType containerType, TLVWriter & containerWriter)
Inicjuje nowy obiekt TLVWriter służący do zapisywania elementów kontenera TLV.
Put(uint64_t tag, int8_t v)
Koduje wartość całkowitą ze znakiem TLV.
Put(uint64_t tag, int8_t v, bool preserveSize)
Koduje wartość całkowitą ze znakiem TLV.
Put(uint64_t tag, int16_t v)
Put(uint64_t tag, int16_t v, bool preserveSize)
Put(uint64_t tag, int32_t v)
Put(uint64_t tag, int32_t v, bool preserveSize)
Put(uint64_t tag, int64_t v)
Put(uint64_t tag, int64_t v, bool preserveSize)
Put(uint64_t tag, uint8_t v)
Koduje wartość całkowitą bez znaku TLV.
Put(uint64_t tag, uint8_t v, bool preserveSize)
Koduje wartość całkowitą bez znaku TLV.
Put(uint64_t tag, uint16_t v)
Put(uint64_t tag, uint16_t v, bool preserveSize)
Put(uint64_t tag, uint32_t v)
Put(uint64_t tag, uint32_t v, bool preserveSize)
Put(uint64_t tag, uint64_t v)
Put(uint64_t tag, uint64_t v, bool preserveSize)
Put(uint64_t tag, float v)
Put(uint64_t tag, double v)
Koduje wartość zmiennoprzecinkową TLV.
PutBoolean(uint64_t tag, bool v)
Koduje wartość logiczną TLV.
PutBytes(uint64_t tag, const uint8_t *buf, uint32_t len)
Koduje wartość ciągu bajtowego TLV.
PutNull(uint64_t tag)
Koduje pustą wartość TLV.
PutPreEncodedContainer(uint64_t tag, TLVType containerType, const uint8_t *data, uint32_t dataLen)
Koduje element kontenera TLV ze wstępnie zakodowanego zestawu elementów.
PutString(uint64_t tag, const char *buf)
Koduje wartość ciągu znaków UTF8 w TLV.
PutString(uint64_t tag, const char *buf, uint32_t len)
Koduje wartość ciągu znaków UTF8 w TLV.
PutStringF(uint64_t tag, const char *fmt, ...)
Zakoduj dane wyjściowe ciągu znaków w formacie zgodnym z formatem określonym w elemencie TLV.
StartContainer(uint64_t tag, TLVType containerType, TLVType & outerContainerType)
Zaczyna kodować nowy element kontenera TLV.
StartPutBytes(uint64_t tag, uint32_t totalLen)
Koduje ciąg bajtowy TLV w kilku fragmentach.
VPutStringF(uint64_t tag, const char *fmt, va_list ap)
Zakoduj dane wyjściowe ciągu znaków w formacie zgodnym z formatem określonym w elemencie TLV.

Publiczne funkcje statyczne

FinalizePacketBuffer(TLVWriter & writer, uintptr_t bufHandle, uint8_t *bufStart, uint32_t dataLen)
Implementacja funkcji TLVWriter FinalizeBuffer do zapisu w łańcuchu PacketBuffers.
GetNewBuffer_Malloced(TLVWriter & writer, uintptr_t & bufHandle, uint8_t *& bufStart, uint32_t & bufLen)
Implementacja funkcji TLVWriter GetNewBuffer służącej do zapisu w buforze dynamicznym.
GetNewPacketBuffer(TLVWriter & writer, uintptr_t & bufHandle, uint8_t *& bufStart, uint32_t & bufLen)
Implementacja funkcji TLVWriter GetNewBuffer służącej do zapisu w łańcuchu PacketBuffers.

Funkcje chronione

IsCloseContainerReserved(void) const
bool
Określ, czy kontener powinien zarezerwować miejsce na symbol CloseContainer w punkcie uruchamiania / otwierania kontenera.
IsContainerOpen(void) const
bool
SetCloseContainerReserved(bool aCloseContainerReserved)
void
Określ, czy kontener powinien zarezerwować miejsce na symbol CloseContainer w punkcie uruchamiania / otwierania kontenera.
SetContainerOpen(bool aContainerOpen)
void
WriteData(const uint8_t *p, uint32_t len)
WriteElementHead(TLVElementType elemType, uint64_t tag, uint64_t lenOrVal)
WriteElementWithData(TLVType type, uint64_t tag, const uint8_t *data, uint32_t dataLen)

Typy chronione

@72

 @72

Typy publiczne

FinalizeBufferFunct

WEAVE_ERROR(* FinalizeBufferFunct)(TLVWriter &writer, uintptr_t bufHandle, uint8_t *bufStart, uint32_t bufLen)

Funkcja używana do finalizacji danych wyjściowych z obiektu TLVWriter.

Funkcje tego typu są wywoływane po wywołaniu metody Finalize() funkcji TLVWriter. Oczekuje się, że funkcja wyczyści wszystkie niezbędne elementy lub finalizację związane z wykorzystaniem danych wyjściowych obiektu zapisującego. Może to obejmować na przykład zarejestrowanie ostatecznej długości kodowania lub zamknięcie deskryptora pliku.

Szczegóły
Parametry
[in] writer
Odwołanie do obiektu TLVWriter, który jest finalizowany.
[in,out] bufHandle
Wartość kontekstu uintptr_t ustawiona przez poprzednie wywołania funkcji GetNewBuffer.
[in,out] bufStart
Wskaźnik na początku bieżącego (i końcowego) bufora wyjściowego.
[in,out] bufLen
Liczba bajtów w buforze wskazywanym przez atrybut bufStart.
Zwracane wartości
WEAVE_NO_ERROR
Informacja, czy finalizacja się udała.
other
Inne kody błędów Weave lub dotyczące platformy, które wskazują, że podczas finalizacji wystąpił błąd.

GetNewBufferFunct

WEAVE_ERROR(* GetNewBufferFunct)(TLVWriter &writer, uintptr_t &bufHandle, uint8_t *&bufStart, uint32_t &bufLen)

Funkcja, która dostarcza nową przestrzeń bufora danych wyjściowych do TLVWriter.

Funkcje tego typu służą do przygotowywania nowej przestrzeni buforowej w celu zapisu przez TLVWriter. Po wywołaniu funkcja powinna zwrócić wskaźnik do lokalizacji pamięci, w której należy zapisać nowe dane, wraz z powiązaną maksymalną długością. Funkcja może zapewnić miejsce na zapis, przydzielając nowy bufor do przechowywania danych lub usuwając wcześniej zapisane dane z istniejącego bufora.

Szczegóły
Parametry
[in] writer
Odwołanie do obiektu TLVWriter, który żąda nowego miejsca bufora.
[in,out] bufHandle
Odwołanie do wartości uintptr_t, której funkcja może używać do przechowywania danych kontekstowych między wywołaniami. Ta wartość jest inicjowana na 0 przed pierwszym wywołaniem.
[in,out] bufStart
Odwołanie do wskaźnika danych. Przy wejściu do funkcji bufStart wskazuje początek bieżącego bufora wyjściowego. Przy wyjściu element bufStart powinien wskazywać początek nowego bufora wyjściowego. Nowa wartość wskaźnika może być taka sama jak poprzednia wartość (np. jeśli funkcja skopiowała istniejące dane w inne miejsce) lub może wskazywać zupełnie nową lokalizację.
[in,out] bufLen
Odwołanie do nieoznaczonej liczby całkowitej. We wpisie funkcji bufLen zawiera liczbę bajtów nieużywanej przestrzeni w bieżącym buforze. Przy wyjściu plik bufLen powinien zawierać maksymalną liczbę bajtów, które można zapisać w nowym buforze wyjściowym.
Zwracane wartości
WEAVE_NO_ERROR
Czy funkcja była w stanie zapewnić więcej miejsca na bufor dla zapisującego.
other
Inne kody błędów Weave lub dotyczące platformy, które wskazują, że wystąpił błąd, który uniemożliwia funkcji utworzenie dodatkowej przestrzeni buforowej.

Atrybuty publiczne

AppData

void * AppData

Pole wskaźnika, którego można używać w przypadku danych specyficznych dla aplikacji.

FinalizeBuffer

FinalizeBufferFunct FinalizeBuffer

Wskaźnik do funkcji, która zostanie wywołana po zakończeniu tworzenia parametru TLVWriter.

Obiekt TLVWriter będzie wywoływać funkcję FinalizeBuffer przy każdej wywołaniu jego metody Finalize(). Aplikacje mogą ustawić wskaźnik funkcji w dowolnym momencie przed wywołaniem Finalize(). Domyślnie wskaźnik jest ustawiony na NULL, co powoduje, że metoda Finalize() pomija funkcję.

Dodatkowe informacje o implementowaniu funkcji FinalizeBuffer znajdziesz w definicji typu FinalizeBufferFunct.

GetNewBuffer

GetNewBufferFunct GetNewBuffer

Wskaźnik do funkcji, która dostarcza nową przestrzeń bufora wyjściowego do TLVWriter.

Obiekt TLVWriter będzie wywoływać funkcję GetNewBuffer przy każdej próbie zapisu danych, które przekraczają rozmiar bieżącego bufora wyjściowego. Po ustawieniu wartości NULL (wartość domyślna) program zapisujący zwróci błąd WEAVE_ERROR_NO_MEMORY, jeśli dane wyjściowe przekraczają bieżący bufor.

Aplikacja może w dowolnym momencie ustawić wartość GetNewBuffer, ale zwykle jest ona ustawiana podczas inicjowania zapisującego.

Dodatkowe informacje o implementowaniu funkcji GetNewBuffer znajdziesz w definicji typu GetNewBufferFunct.

ImplicitProfileId

uint32_t ImplicitProfileId

Identyfikator profilu tagów, które powinny być zakodowane w formie niejawnej.

Gdy autor zostanie poproszony o zakodowanie nowego elementu, a identyfikator profilu tagu powiązanego z nowym elementem będzie zgodny z wartością elementu ImplicitProfileId, autor zakoduje tag w formie niejawnej, pomijając w procesie identyfikator profilu.

Domyślnie właściwość ImplicitProfileId ma wartość kProfileIdNotSpecified, co instruuje osobę zapisującą, aby nie wysyłała tagów niejawnie zakodowanych. Aplikacje mogą ustawić ImplicitProfileId w dowolnym momencie, aby włączyć kodowanie tagów w formie niejawnej, począwszy od bieżącego momentu kodowania. Odpowiedni identyfikator profilu do ustawienia zależy zwykle od kontekstu aplikacji lub używanego protokołu.

Atrybuty chronione

mBufHandle

uintptr_t mBufHandle

mBufStart

uint8_t * mBufStart

mContainerType

TLVType mContainerType

mLenWritten

uint32_t mLenWritten

mMaxLen

uint32_t mMaxLen

mRemainingLen

uint32_t mRemainingLen

mWritePoint

uint8_t * mWritePoint

Funkcje publiczne

CloseContainer

WEAVE_ERROR CloseContainer(
  TLVWriter & containerWriter
)

Kończy zapisywanie kontenera TLV po wywołaniu funkcji OpenContainer().

Metoda CloseContainer() przywraca stan nadrzędnego obiektu TLVWriter po wywołaniu funkcji OpenContainer(). Każde wywołanie aplikacji OpenContainer() musi wywołać funkcję CloseContainer(), przekazując odniesienie do tego samego zapisującego kontener do obu metod.

Gdy funkcja CloseContainer() zostanie zwrócona, aplikacje mogą nadal używać nadrzędnego zapisującego do zapisywania dodatkowych elementów TLV wyświetlanych po elemencie kontenera. W tym momencie podany skrypt zapisujący kontenera powinien być uznawany za „dezainicjowany” i nie można jej używać bez ponownego inicjowania.

Szczegóły
Parametry
[in] containerWriter
Odwołanie do obiektu TLVWriter, który został udostępniony w metodzie OpenContainer().
Zwracane wartości
WEAVE_NO_ERROR
Jeśli przy użyciu metody się udało:
WEAVE_ERROR_INCORRECT_STATE
Jeśli dostarczony kontener zapisujący nie jest w prawidłowym stanie.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Jeśli inny skrypt zapisujący kontenerów został otwarty na dostarczonym scenariuszu kontenera, ale nie został jeszcze zamknięty.
WEAVE_ERROR_BUFFER_TOO_SMALL
Jeśli ukończenie kodowania kontenera spowodowałoby przekroczenie limitu maksymalnej liczby bajtów określonej podczas inicjowania zapisującego.
WEAVE_ERROR_NO_MEMORY
Próba przydzielenia bufora wyjściowego nie powiodła się z powodu braku pamięci.
other
Inne błędy Weave lub dotyczące platformy zwrócone przez skonfigurowane funkcje GetNewBuffer() lub FinalizeBuffer().

ContinuePutBytes

WEAVE_ERROR ContinuePutBytes(
  const uint8_t *buf,
  uint32_t len
)

Koduje wartość ciągu bajtowego TLV.

Należy go używać w przypadku StartPutBytes.

Szczegóły
Parametry
[in] buf
Wskaźnik do bufora zawierającego ciąg bajtów do zakodowania.
[in] len
Liczba bajtów do zakodowania.
Zwracane wartości
WEAVE_NO_ERROR
Jeśli przy użyciu metody się udało:
WEAVE_ERROR_TLV_CONTAINER_OPEN
Jeśli zapis w kontenerze został otwarty na bieżącym scenariuszu, ale nie został jeszcze zamknięty.
WEAVE_ERROR_INVALID_TLV_TAG
Jeśli podana wartość tagu jest nieprawidłowa lub nieodpowiednia w kontekście, w którym jest zapisywana.
WEAVE_ERROR_BUFFER_TOO_SMALL
Jeśli zapisanie wartości spowodowałoby przekroczenie limitu maksymalnej liczby bajtów określonych podczas inicjowania zapisującego.
WEAVE_ERROR_NO_MEMORY
Próba przydzielenia bufora wyjściowego nie powiodła się z powodu braku pamięci.
other
Inne błędy Weave lub dotyczące platformy zwrócone przez skonfigurowane funkcje GetNewBuffer() lub FinalizeBuffer().

CopyContainer

WEAVE_ERROR CopyContainer(
  TLVReader & container
)

Kopiuje element kontenera TLV z obiektu TLVReader.

Funkcja CopyContainer() koduje nowy element kontenera TLV, kopiując wstępnie zakodowany element kontenera znajdujący się w bieżącej pozycji obiektu TLVReader. Ta metoda zapisuje cały nowy element kontenera w jednym wywołaniu, kopiując typ kontenera, tag i elementy z kodowania źródłowego. Po zwróceniu metody obiekt zapisujący może zostać użyty do zapisania dodatkowych elementów TLV po elemencie kontenera.

Szczegóły
Parametry
[in] container
Odwołanie do obiektu TLVReader identyfikującego wstępnie zakodowany kontener TLV do skopiowania.
Zwracane wartości
WEAVE_NO_ERROR
Jeśli przy użyciu metody się udało:
WEAVE_ERROR_INCORRECT_STATE
Jeśli dostarczony czytnik nie jest umieszczony na elemencie kontenera.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Jeśli zapis w kontenerze został otwarty na bieżącym scenariuszu, ale nie został jeszcze zamknięty.
WEAVE_ERROR_TLV_UNDERRUN
Jeśli bazowe kodowanie TLV powiązane z dołączonym czytnikiem zostało przedwcześnie zakończone.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Jeśli dostarczony czytnik napotkał nieprawidłowy lub nieobsługiwany typ elementu TLV.
WEAVE_ERROR_INVALID_TLV_TAG
Jeśli podany czytnik napotkał tag TLV w nieprawidłowym kontekście albo tag powiązany z kontenerem źródłowym jest nieprawidłowy lub nieodpowiedni w kontekście, w którym jest zapisywany nowy kontener.
WEAVE_ERROR_BUFFER_TOO_SMALL
Jeśli zapisanie wartości spowodowałoby przekroczenie limitu maksymalnej liczby bajtów określonych podczas inicjowania zapisującego.
WEAVE_ERROR_NO_MEMORY
Próba przydzielenia bufora wyjściowego nie powiodła się z powodu braku pamięci.
other
Inne błędy Weave lub typowe dla platformy zwracane przez skonfigurowane funkcje GetNewBuffer() lub FinalizeBuffer() albo przez funkcję GetNextBuffer() powiązaną z obiektem czytnika.

CopyContainer

WEAVE_ERROR CopyContainer(
  uint64_t tag,
  TLVReader & container
)

Koduje element kontenera TLV ze wstępnie zakodowanego zestawu elementów.

Metoda CopyContainer() koduje nowy element kontenera TLV (strukturę, tablica lub ścieżkę) zawierający zbiór elementów składowych pobranych z obiektu TLVReader. Gdy ta metoda jest wywoływana, podany obiekt czytnika powinien być umieszczony w elemencie kontenera TLV. Nowo zakodowany kontener będzie mieć ten sam typ i elementy co kontener wejściowy. Tag nowego kontenera jest określany jako parametr wejściowy.

Po zwróceniu metody obiekt zapisujący może zostać użyty do zapisania dodatkowych elementów TLV po elemencie kontenera.

Szczegóły
Parametry
[in] tag
Tag TLV do kodowania z kontenerem lub AnonymousTag, jeśli kontener powinien być kodowany bez tagu. Wartości tagów należy tworzyć za pomocą jednej z funkcji definicji tagu: ProfileTag(), ContextTag() lub CommonTag().
[in] container
Odwołanie do obiektu TLVReader identyfikującego wstępnie zakodowany kontener TLV, którego typ i elementy mają zostać skopiowane.
Zwracane wartości
WEAVE_NO_ERROR
Jeśli przy użyciu metody się udało:
WEAVE_ERROR_INCORRECT_STATE
Jeśli dostarczony czytnik nie jest umieszczony na elemencie kontenera.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Jeśli zapis w kontenerze został otwarty na bieżącym scenariuszu, ale nie został jeszcze zamknięty.
WEAVE_ERROR_TLV_UNDERRUN
Jeśli bazowe kodowanie TLV powiązane z dołączonym czytnikiem zostało przedwcześnie zakończone.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Jeśli dostarczony czytnik napotkał nieprawidłowy lub nieobsługiwany typ elementu TLV.
WEAVE_ERROR_INVALID_TLV_TAG
jeśli podany czytnik napotkał tag TLV w nieprawidłowym kontekście albo podany tag jest nieprawidłowy lub nieodpowiedni w kontekście, w którym tworzony jest nowy kontener;
WEAVE_ERROR_BUFFER_TOO_SMALL
Jeśli zapisanie wartości spowodowałoby przekroczenie limitu maksymalnej liczby bajtów określonych podczas inicjowania zapisującego.
WEAVE_ERROR_NO_MEMORY
Próba przydzielenia bufora wyjściowego nie powiodła się z powodu braku pamięci.
other
Inne błędy Weave lub typowe dla platformy zwracane przez skonfigurowane funkcje GetNewBuffer() lub FinalizeBuffer() albo przez funkcję GetNextBuffer() powiązaną z obiektem czytnika.

CopyContainer

WEAVE_ERROR CopyContainer(
  uint64_t tag,
  const uint8_t *encodedContainer,
  uint16_t encodedContainerLen
)

Koduje element kontenera TLV, który zawiera elementy składowe ze wstępnie zakodowanego kontenera.

Metoda CopyContainer() koduje nowy element kontenera TLV (strukturę, tablica lub ścieżkę) zawierający zbiór elementów składowych pobranych z zawartości dostarczonego wstępnie zakodowanego kontenera. Po wywołaniu tej metody dane w podanym buforze danych wejściowych są analizowane jako element kontenera TLV i zapisywany jest nowy kontener tego samego typu i tego samego elementu co kontener wejściowy. Tag nowego kontenera jest określany jako parametr wejściowy.

Po zwróceniu metody obiekt zapisujący może zostać użyty do zapisania dodatkowych elementów TLV po elemencie kontenera.

Szczegóły
Parametry
[in] tag
Tag TLV do kodowania z kontenerem lub AnonymousTag, jeśli kontener powinien być kodowany bez tagu. Wartości tagów należy tworzyć za pomocą jednej z funkcji definicji tagu: ProfileTag(), ContextTag() lub CommonTag().
[in] encodedContainer
Bufor zawierający wstępnie zakodowany kontener TLV, którego typ i elementy mają zostać skopiowane.
[in] encodedContainerLen
Długość zakodowanego kontenera (w bajtach).
Zwracane wartości
WEAVE_NO_ERROR
Jeśli przy użyciu metody się udało:
WEAVE_ERROR_TLV_CONTAINER_OPEN
Jeśli zapis w kontenerze został otwarty na bieżącym scenariuszu, ale nie został jeszcze zamknięty.
WEAVE_ERROR_TLV_UNDERRUN
Jeśli zakodowany kontener zakończył działanie przedwcześnie.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Jeśli zakodowany kontener zawiera nieprawidłowy lub nieobsługiwany typ elementu TLV.
WEAVE_ERROR_INVALID_TLV_TAG
Zakodowany kontener zawierał tag TLV w nieprawidłowym kontekście albo podany tag jest nieprawidłowy lub nieodpowiedni w kontekście, w którym jest zapisywany nowy kontener.
WEAVE_ERROR_BUFFER_TOO_SMALL
Jeśli zapisanie wartości spowodowałoby przekroczenie limitu maksymalnej liczby bajtów określonych podczas inicjowania zapisującego.
WEAVE_ERROR_NO_MEMORY
Próba przydzielenia bufora wyjściowego nie powiodła się z powodu braku pamięci.
other
Inne błędy Weave lub typowe dla platformy zwracane przez skonfigurowane funkcje GetNewBuffer() lub FinalizeBuffer() albo przez funkcję GetNextBuffer() powiązaną z obiektem czytnika.

CopyElement

WEAVE_ERROR CopyElement(
  TLVReader & reader
)

Kopiuje element TLV z obiektu czytnika do zapisującego.

Metoda CopyElement() koduje nowy element TLV, którego typ, tag i wartość są pobierane z obiektu TLVReader. Gdy ta metoda jest wywoływana, podany obiekt czytnika powinien zostać umieszczony w źródłowym elemencie TLV. Nowo zakodowany element będzie mieć ten sam typ, tag i treść co kontener wejściowy. Jeśli dostarczony element jest kontenerem TLV (strukturą, tablicą lub ścieżką), skopiowana zostanie cała zawartość kontenera.

Szczegóły
Parametry
[in] reader
Odwołanie do obiektu TLVReader identyfikującego wstępnie zakodowany element TLV, który powinien zostać skopiowany.
Zwracane wartości
WEAVE_NO_ERROR
Jeśli przy użyciu metody się udało:
WEAVE_ERROR_INCORRECT_STATE
Jeśli dostarczony czytnik nie jest umieszczony na elemencie.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Jeśli zapis w kontenerze został otwarty na bieżącym scenariuszu, ale nie został jeszcze zamknięty.
WEAVE_ERROR_TLV_UNDERRUN
Jeśli bazowe kodowanie TLV powiązane z dołączonym czytnikiem zostało przedwcześnie zakończone.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Jeśli dostarczony czytnik napotkał nieprawidłowy lub nieobsługiwany typ elementu TLV.
WEAVE_ERROR_INVALID_TLV_TAG
jeśli podany czytnik napotkał tag TLV w nieprawidłowym kontekście albo podany tag jest nieprawidłowy lub nieodpowiedni w kontekście, w którym tworzony jest nowy kontener;
WEAVE_ERROR_BUFFER_TOO_SMALL
Jeśli zapisanie wartości spowodowałoby przekroczenie limitu maksymalnej liczby bajtów określonych podczas inicjowania zapisującego.
WEAVE_ERROR_NO_MEMORY
Próba przydzielenia bufora wyjściowego nie powiodła się z powodu braku pamięci.
other
Inne błędy Weave lub typowe dla platformy zwracane przez skonfigurowane funkcje GetNewBuffer() lub FinalizeBuffer() albo przez funkcję GetNextBuffer() powiązaną z obiektem czytnika.

CopyElement

WEAVE_ERROR CopyElement(
  uint64_t tag,
  TLVReader & reader
)

EndContainer

WEAVE_ERROR EndContainer(
  TLVType outerContainerType
)

Kończy kodowanie elementu kontenera TLV.

Metoda EndContainer() kończy kodowanie elementu kontenera TLV i przywraca stan obiektu TLVWrite po wcześniejszym wywołaniu funkcji StartContainer(). Każde wywołanie aplikacji StartContainer() musi wywołać odpowiednie wywołanie EndContainer(), przekazując wartość TLVType zwrócona przez wywołanie StartContainer(). Gdy funkcja EndContainer() jest zwracana, obiektu zapisującego można użyć do zapisania dodatkowych elementów TLV, które następują po elemencie kontenera.

Szczegóły
Parametry
[in] outerContainerType
Wartość TLVType zwrócona przez metodę StartContainer().
Zwracane wartości
WEAVE_NO_ERROR
Jeśli przy użyciu metody się udało:
WEAVE_ERROR_INCORRECT_STATE
Jeśli odpowiednie wywołanie StartContainer() nie zostało wykonane.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Jeśli zapis w kontenerze został otwarty na bieżącym scenariuszu, ale nie został jeszcze zamknięty.
WEAVE_ERROR_BUFFER_TOO_SMALL
Jeśli zapisanie wartości spowodowałoby przekroczenie limitu maksymalnej liczby bajtów określonych podczas inicjowania zapisującego.
WEAVE_ERROR_NO_MEMORY
Próba przydzielenia bufora wyjściowego nie powiodła się z powodu braku pamięci.
other
Inne błędy Weave lub dotyczące platformy zwrócone przez skonfigurowane funkcje GetNewBuffer() lub FinalizeBuffer().

Zakończ

WEAVE_ERROR Finalize(
  void
)

Zakończ kodowanie TLV.

Metoda Finalize() kończy proces zapisywania kodowania TLV w podstawowym buforze wyjściowym. Aplikacja musi wywołać tę metodę, zanim użyje zawartości bufora. Metodę Finalize() można wywołać tylko wtedy, gdy dla bieżącego zapisującego nie są otwarte żadne zapisy kontenera. (Patrz: OpenContainer()).

Szczegóły
Zwracane wartości
WEAVE_NO_ERROR
Czy kodowanie zostało sfinalizowane.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Jeśli zapis w kontenerze został otwarty na bieżącym scenariuszu, ale nie został jeszcze zamknięty.
other
Inne błędy Weave lub typowe dla platformy zwrócone przez skonfigurowaną funkcję FinalizeBuffer().

GetContainerType

TLVType GetContainerType(
  void
) const 

Zwraca typ kontenera, w którym obecnie pisze funkcja TLVWriter.

Metoda GetContainerType() zwraca typ kontenera TLV, w którym aktualnie pisze funkcja TLVWriter. Jeśli TLVWriter nie zapisuje elementów w kontenerze (tzn. na najbardziej zewnętrznym poziomie kodowania), metoda zwraca kTLVType_NotOkreślified.

Szczegóły
Zwroty
Wartość TLVType bieżącego kontenera lub kTLVType_NotSpecified, jeśli TLVWriter nie zapisuje elementów w kontenerze.

GetLengthWritten

uint32_t GetLengthWritten(
  void
)

Zwraca łączną liczbę bajtów zapisanych od momentu zainicjowania zapisującego.

Szczegóły
Zwroty
Łączna liczba bajtów zapisanych od zainicjowania zapisującego.

Init

void Init(
  uint8_t *buf,
  uint32_t maxLen
)

Inicjuje obiekt TLVWriter do zapisu w pojedynczym buforze wyjściowym.

Szczegóły
Parametry
[in] buf
Wskaźnik do bufora, w którym ma zostać zapisany parametr TLV.
[in] maxLen
Maksymalna liczba bajtów, które powinny być zapisane w buforze wyjściowym.

Init

void Init(
  PacketBuffer *buf,
  uint32_t maxLen
)

Inicjuje obiekt TLVWriter w celu zapisu w pojedynczym obiekcie PacketBuffer.

Zapisywanie rozpoczyna się natychmiast po ostatnim bajcie istniejących danych w podanym buforze.

Szczegóły
Parametry
[in] buf
Wskaźnik do obiektu PacketBuffer, w którym należy zapisać parametr TLV.
[in] maxLen
Maksymalna liczba bajtów, które powinny być zapisane w buforze wyjściowym.

Init

void Init(
  PacketBuffer *buf,
  uint32_t maxLen,
  bool allowDiscontiguousBuffers
)

Inicjuje obiekt TLVWriter w celu zapisu w co najmniej jednym obiekcie PacketBuffer.

Zapisywanie rozpoczyna się natychmiast po ostatnim bajcie istniejących danych w określonym buforze. Jeśli allowDiscontiguousBuffers ma wartość prawda, dodatkowe bufory PacketBuffer są przydzielane i łączone z podanym buforem odpowiednio do potrzeb w celu obsługi ilości zapisanych danych. Jeśli podany bufor wyjściowy jest już na początku łańcucha buforów, dane wyjściowe będą zapisywane w kolejnych buforach w łańcuchu, zanim zostaną przydzielone nowe bufory.

Szczegóły
Parametry
[in] buf
Wskaźnik do obiektu PacketBuffer, w którym powinny być zapisywane dane TLV.
[in] maxLen
Maksymalna liczba bajtów, które powinny być zapisane w buforach wyjściowych.
[in] allowDiscontiguousBuffers
Jeśli wartość to prawda, zapisz dane w łańcuchu buforów PacketBuffers, przydzielając nowe bufory zgodnie z potrzebami do przechowywania zapisanych danych. Wartość false (fałsz) spowoduje, że zapis WEAVE_ERROR_BUFFER_TOO_SMALL będzie się nie udał, jeśli liczba zapisanych danych przekroczy ilość dostępnego miejsca w początkowym buforze wyjściowym.

InitMalloced

void InitMalloced(
  uint8_t *& outBuf,
  uint32_t initialBufSize,
  uint32_t maxLen
)

Inicjuje obiekt TLVWriter do zapisu w dynamicznym buforze.

Szczegóły
Parametry
[in] buf
Odwołanie do wskaźnika, który otrzyma przydzielony bufor.
[in] maxLen
Maksymalna liczba bajtów, które powinny być zapisane w buforze wyjściowym.
[in] initialBufSize
Początkowa liczba bajtów, które powinny zostać przydzielone do bufora.

OpenContainer

WEAVE_ERROR OpenContainer(
  uint64_t tag,
  TLVType containerType,
  TLVWriter & containerWriter
)

Inicjuje nowy obiekt TLVWriter służący do zapisywania elementów kontenera TLV.

Metoda OpenContainer() służy do zapisywania elementów kontenera TLV (struktury, tablic lub ścieżek) w kodowaniu. Metoda przyjmuje typ i tag (jeśli występuje) nowego kontenera oraz odwołanie do nowego obiektu zapisującego (zapisujący kontener), który zostanie zainicjowany w celu zapisu elementów kontenera. Aplikacje zapisują elementy nowego kontenera za pomocą zapisującego kontener, a potem wywołują funkcję CloseContainer(), aby zakończyć kodowanie kontenera.

Gdy zapis w kontenerze jest otwarty, aplikacje nie mogą wywoływać ani w inny sposób zmieniać stanu zapisującego.

Zapisujący kontener dziedziczy różne właściwości konfiguracji ze zapisującego element nadrzędny. Dostępne symbole:

  • Niejawny identyfikator profilu (ImplicitProfileId)
  • wskaźnik danych aplikacji (AppData)
  • Wskaźniki funkcji GetNewBuffer i FinalizeBuffer

Szczegóły
Parametry
[in] tag
Tag TLV do kodowania z kontenerem lub AnonymousTag, jeśli kontener powinien być kodowany bez tagu. Wartości tagów należy tworzyć za pomocą jednej z funkcji definicji tagu: ProfileTag(), ContextTag() lub CommonTag().
[in] containerType
Typ kontenera do zakodowania. Musi to być wartość kTLVType_Structure, kTLVType_Array lub kTLVType_Path.
[out] containerWriter
Odwołanie do obiektu TLVWriter, który zostanie zainicjowany do zapisywania elementów nowego elementu kontenera. Wszystkie dane powiązane z podanym obiektem zostaną zastąpione.
Zwracane wartości
WEAVE_NO_ERROR
Jeśli przy użyciu metody się udało:
WEAVE_ERROR_WRONG_TLV_TYPE
Jeśli wartość określona dla containerType jest nieprawidłowa.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Jeśli zapis w kontenerze został otwarty na bieżącym scenariuszu, ale nie został jeszcze zamknięty.
WEAVE_ERROR_INVALID_TLV_TAG
Jeśli podana wartość tagu jest nieprawidłowa lub nieodpowiednia w kontekście, w którym jest zapisywana.
WEAVE_ERROR_BUFFER_TOO_SMALL
Jeśli zapisanie wartości spowodowałoby przekroczenie limitu maksymalnej liczby bajtów określonych podczas inicjowania zapisującego.
WEAVE_ERROR_NO_MEMORY
Próba przydzielenia bufora wyjściowego nie powiodła się z powodu braku pamięci.
other
Inne błędy Weave lub dotyczące platformy zwrócone przez skonfigurowane funkcje GetNewBuffer() lub FinalizeBuffer().

Put

WEAVE_ERROR Put(
  uint64_t tag,
  int8_t v
)

Koduje wartość całkowitą ze znakiem TLV.

Jest to przeciążona funkcja członkowska dla wygody. Różni się od powyższej funkcji tylko akceptowanymi argumentami.

Szczegóły
Parametry
[in] tag
Tag TLV do kodowania z wartością lub AnonymousTag, jeśli wartość powinna być zakodowana bez tagu. Wartości tagów należy tworzyć za pomocą jednej z funkcji definicji tagu: ProfileTag(), ContextTag() lub CommonTag().
[in] v
Wartość do zakodowania.
Zwracane wartości
WEAVE_NO_ERROR
Jeśli przy użyciu metody się udało:
WEAVE_ERROR_TLV_CONTAINER_OPEN
Jeśli zapis w kontenerze został otwarty na bieżącym scenariuszu, ale nie został jeszcze zamknięty.
WEAVE_ERROR_INVALID_TLV_TAG
Jeśli podana wartość tagu jest nieprawidłowa lub nieodpowiednia w kontekście, w którym jest zapisywana.
WEAVE_ERROR_BUFFER_TOO_SMALL
Jeśli zapisanie wartości spowodowałoby przekroczenie limitu maksymalnej liczby bajtów określonych podczas inicjowania zapisującego.
WEAVE_ERROR_NO_MEMORY
Próba przydzielenia bufora wyjściowego nie powiodła się z powodu braku pamięci.
other
Inne błędy Weave lub dotyczące platformy zwrócone przez skonfigurowane funkcje GetNewBuffer() lub FinalizeBuffer().

Put

WEAVE_ERROR Put(
  uint64_t tag,
  int8_t v,
  bool preserveSize
)

Koduje wartość całkowitą ze znakiem TLV.

Jest to przeciążona funkcja członkowska dla wygody. Różni się od powyższej funkcji tylko akceptowanymi argumentami.

Szczegóły
Parametry
[in] tag
Tag TLV do kodowania z wartością lub AnonymousTag, jeśli wartość powinna być zakodowana bez tagu. Wartości tagów należy tworzyć za pomocą jednej z funkcji definicji tagu: ProfileTag(), ContextTag() lub CommonTag().
[in] v
Wartość do zakodowania.
[in] preserveSize
Prawda, jeśli wartość powinna być zakodowana z taką samą liczbą bajtów jak w typie danych wejściowych. Wartość Fałsz, jeśli wartość powinna być zakodowana z minimalną liczbą bajtów niezbędnych do jej przedstawienia. Uwaga: zdecydowanie zalecamy aplikacjom ustawienie tego parametru na wartość Fałsz.
Zwracane wartości
WEAVE_NO_ERROR
Jeśli przy użyciu metody się udało:
WEAVE_ERROR_TLV_CONTAINER_OPEN
Jeśli zapis w kontenerze został otwarty na bieżącym scenariuszu, ale nie został jeszcze zamknięty.
WEAVE_ERROR_INVALID_TLV_TAG
Jeśli podana wartość tagu jest nieprawidłowa lub nieodpowiednia w kontekście, w którym jest zapisywana.
WEAVE_ERROR_BUFFER_TOO_SMALL
Jeśli zapisanie wartości spowodowałoby przekroczenie limitu maksymalnej liczby bajtów określonych podczas inicjowania zapisującego.
WEAVE_ERROR_NO_MEMORY
Próba przydzielenia bufora wyjściowego nie powiodła się z powodu braku pamięci.
other
Inne błędy Weave lub dotyczące platformy zwrócone przez skonfigurowane funkcje GetNewBuffer() lub FinalizeBuffer().

Put

WEAVE_ERROR Put(
  uint64_t tag,
  int16_t v
)

Put

WEAVE_ERROR Put(
  uint64_t tag,
  int16_t v,
  bool preserveSize
)

Put

WEAVE_ERROR Put(
  uint64_t tag,
  int32_t v
)

Put

WEAVE_ERROR Put(
  uint64_t tag,
  int32_t v,
  bool preserveSize
)

Put

WEAVE_ERROR Put(
  uint64_t tag,
  int64_t v
)

Put

WEAVE_ERROR Put(
  uint64_t tag,
  int64_t v,
  bool preserveSize
)

Put

WEAVE_ERROR Put(
  uint64_t tag,
  uint8_t v
)

Koduje wartość całkowitą bez znaku TLV.

Jest to przeciążona funkcja członkowska dla wygody. Różni się od powyższej funkcji tylko akceptowanymi argumentami.

Szczegóły
Parametry
[in] tag
Tag TLV do kodowania z wartością lub AnonymousTag, jeśli wartość powinna być zakodowana bez tagu. Wartości tagów należy tworzyć za pomocą jednej z funkcji definicji tagu: ProfileTag(), ContextTag() lub CommonTag().
[in] v
Wartość do zakodowania.
Zwracane wartości
WEAVE_NO_ERROR
Jeśli przy użyciu metody się udało:
WEAVE_ERROR_TLV_CONTAINER_OPEN
Jeśli zapis w kontenerze został otwarty na bieżącym scenariuszu, ale nie został jeszcze zamknięty.
WEAVE_ERROR_INVALID_TLV_TAG
Jeśli podana wartość tagu jest nieprawidłowa lub nieodpowiednia w kontekście, w którym jest zapisywana.
WEAVE_ERROR_BUFFER_TOO_SMALL
Jeśli zapisanie wartości spowodowałoby przekroczenie limitu maksymalnej liczby bajtów określonych podczas inicjowania zapisującego.
WEAVE_ERROR_NO_MEMORY
Próba przydzielenia bufora wyjściowego nie powiodła się z powodu braku pamięci.
other
Inne błędy Weave lub dotyczące platformy zwrócone przez skonfigurowane funkcje GetNewBuffer() lub FinalizeBuffer().

Put

WEAVE_ERROR Put(
  uint64_t tag,
  uint8_t v,
  bool preserveSize
)

Koduje wartość całkowitą bez znaku TLV.

Jest to przeciążona funkcja członkowska dla wygody. Różni się od powyższej funkcji tylko akceptowanymi argumentami.

Szczegóły
Parametry
[in] tag
Tag TLV do kodowania z wartością lub AnonymousTag, jeśli wartość powinna być zakodowana bez tagu. Wartości tagów należy tworzyć za pomocą jednej z funkcji definicji tagu: ProfileTag(), ContextTag() lub CommonTag().
[in] v
Wartość do zakodowania.
[in] preserveSize
Prawda, jeśli wartość powinna być zakodowana z taką samą liczbą bajtów jak w typie danych wejściowych. Wartość Fałsz, jeśli wartość powinna być zakodowana z minimalną liczbą bajtów niezbędnych do jej przedstawienia. Uwaga: zdecydowanie zalecamy aplikacjom ustawienie tego parametru na wartość Fałsz.
Zwracane wartości
WEAVE_NO_ERROR
Jeśli przy użyciu metody się udało:
WEAVE_ERROR_TLV_CONTAINER_OPEN
Jeśli zapis w kontenerze został otwarty na bieżącym scenariuszu, ale nie został jeszcze zamknięty.
WEAVE_ERROR_INVALID_TLV_TAG
Jeśli podana wartość tagu jest nieprawidłowa lub nieodpowiednia w kontekście, w którym jest zapisywana.
WEAVE_ERROR_BUFFER_TOO_SMALL
Jeśli zapisanie wartości spowodowałoby przekroczenie limitu maksymalnej liczby bajtów określonych podczas inicjowania zapisującego.
WEAVE_ERROR_NO_MEMORY
Próba przydzielenia bufora wyjściowego nie powiodła się z powodu braku pamięci.
other
Inne błędy Weave lub dotyczące platformy zwrócone przez skonfigurowane funkcje GetNewBuffer() lub FinalizeBuffer().

Put

WEAVE_ERROR Put(
  uint64_t tag,
  uint16_t v
)

Put

WEAVE_ERROR Put(
  uint64_t tag,
  uint16_t v,
  bool preserveSize
)

Put

WEAVE_ERROR Put(
  uint64_t tag,
  uint32_t v
)

Put

WEAVE_ERROR Put(
  uint64_t tag,
  uint32_t v,
  bool preserveSize
)

Put

WEAVE_ERROR Put(
  uint64_t tag,
  uint64_t v
)

Put

WEAVE_ERROR Put(
  uint64_t tag,
  uint64_t v,
  bool preserveSize
)

Put

WEAVE_ERROR Put(
  uint64_t tag,
  float v
)

Put

WEAVE_ERROR Put(
  uint64_t tag,
  double v
)

Koduje wartość zmiennoprzecinkową TLV.

Jest to przeciążona funkcja członkowska dla wygody. Różni się od powyższej funkcji tylko akceptowanymi argumentami.

Szczegóły
Parametry
[in] tag
Tag TLV do kodowania z wartością lub AnonymousTag, jeśli wartość powinna być zakodowana bez tagu. Wartości tagów należy tworzyć za pomocą jednej z funkcji definicji tagu: ProfileTag(), ContextTag() lub CommonTag().
[in] v
Wartość do zakodowania.
Zwracane wartości
WEAVE_NO_ERROR
Jeśli przy użyciu metody się udało:
WEAVE_ERROR_TLV_CONTAINER_OPEN
Jeśli zapis w kontenerze został otwarty na bieżącym scenariuszu, ale nie został jeszcze zamknięty.
WEAVE_ERROR_INVALID_TLV_TAG
Jeśli podana wartość tagu jest nieprawidłowa lub nieodpowiednia w kontekście, w którym jest zapisywana.
WEAVE_ERROR_BUFFER_TOO_SMALL
Jeśli zapisanie wartości spowodowałoby przekroczenie limitu maksymalnej liczby bajtów określonych podczas inicjowania zapisującego.
WEAVE_ERROR_NO_MEMORY
Próba przydzielenia bufora wyjściowego nie powiodła się z powodu braku pamięci.
other
Inne błędy Weave lub dotyczące platformy zwrócone przez skonfigurowane funkcje GetNewBuffer() lub FinalizeBuffer().

PutBoolean

WEAVE_ERROR PutBoolean(
  uint64_t tag,
  bool v
)

Koduje wartość logiczną TLV.

Szczegóły
Parametry
[in] tag
Tag TLV do kodowania z wartością lub AnonymousTag, jeśli wartość powinna być zakodowana bez tagu. Wartości tagów należy tworzyć za pomocą jednej z funkcji definicji tagu: ProfileTag(), ContextTag() lub CommonTag().
[in] v
Wartość do zakodowania.
Zwracane wartości
WEAVE_NO_ERROR
Jeśli przy użyciu metody się udało:
WEAVE_ERROR_TLV_CONTAINER_OPEN
Jeśli zapis w kontenerze został otwarty na bieżącym scenariuszu, ale nie został jeszcze zamknięty.
WEAVE_ERROR_INVALID_TLV_TAG
Jeśli podana wartość tagu jest nieprawidłowa lub nieodpowiednia w kontekście, w którym jest zapisywana.
WEAVE_ERROR_BUFFER_TOO_SMALL
Jeśli zapisanie wartości spowodowałoby przekroczenie limitu maksymalnej liczby bajtów określonych podczas inicjowania zapisującego.
WEAVE_ERROR_NO_MEMORY
Próba przydzielenia bufora wyjściowego nie powiodła się z powodu braku pamięci.
other
Inne błędy Weave lub dotyczące platformy zwrócone przez skonfigurowane funkcje GetNewBuffer() lub FinalizeBuffer().

PutBytes

WEAVE_ERROR PutBytes(
  uint64_t tag,
  const uint8_t *buf,
  uint32_t len
)

Koduje wartość ciągu bajtowego TLV.

Szczegóły
Parametry
[in] tag
Tag TLV do kodowania z wartością lub AnonymousTag, jeśli wartość powinna być zakodowana bez tagu. Wartości tagów należy tworzyć za pomocą jednej z funkcji definicji tagu: ProfileTag(), ContextTag() lub CommonTag().
[in] buf
Wskaźnik do bufora zawierającego ciąg bajtów do zakodowania.
[in] len
Liczba bajtów do zakodowania.
Zwracane wartości
WEAVE_NO_ERROR
Jeśli przy użyciu metody się udało:
WEAVE_ERROR_TLV_CONTAINER_OPEN
Jeśli zapis w kontenerze został otwarty na bieżącym scenariuszu, ale nie został jeszcze zamknięty.
WEAVE_ERROR_INVALID_TLV_TAG
Jeśli podana wartość tagu jest nieprawidłowa lub nieodpowiednia w kontekście, w którym jest zapisywana.
WEAVE_ERROR_BUFFER_TOO_SMALL
Jeśli zapisanie wartości spowodowałoby przekroczenie limitu maksymalnej liczby bajtów określonych podczas inicjowania zapisującego.
WEAVE_ERROR_NO_MEMORY
Próba przydzielenia bufora wyjściowego nie powiodła się z powodu braku pamięci.
other
Inne błędy Weave lub dotyczące platformy zwrócone przez skonfigurowane funkcje GetNewBuffer() lub FinalizeBuffer().

PutNull

WEAVE_ERROR PutNull(
  uint64_t tag
)

Koduje pustą wartość TLV.

Szczegóły
Parametry
[in] tag
Tag TLV do kodowania z wartością lub AnonymousTag, jeśli wartość powinna być zakodowana bez tagu. Wartości tagów należy tworzyć za pomocą jednej z funkcji definicji tagu: ProfileTag(), ContextTag() lub CommonTag().
Zwracane wartości
WEAVE_NO_ERROR
Jeśli przy użyciu metody się udało:
WEAVE_ERROR_TLV_CONTAINER_OPEN
Jeśli zapis w kontenerze został otwarty na bieżącym scenariuszu, ale nie został jeszcze zamknięty.
WEAVE_ERROR_INVALID_TLV_TAG
Jeśli podana wartość tagu jest nieprawidłowa lub nieodpowiednia w kontekście, w którym jest zapisywana.
WEAVE_ERROR_BUFFER_TOO_SMALL
Jeśli zapisanie wartości spowodowałoby przekroczenie limitu maksymalnej liczby bajtów określonych podczas inicjowania zapisującego.
WEAVE_ERROR_NO_MEMORY
Próba przydzielenia bufora wyjściowego nie powiodła się z powodu braku pamięci.
other
Inne błędy Weave lub dotyczące platformy zwrócone przez skonfigurowane funkcje GetNewBuffer() lub FinalizeBuffer().

PutPreEncodedContainer

WEAVE_ERROR PutPreEncodedContainer(
  uint64_t tag,
  TLVType containerType,
  const uint8_t *data,
  uint32_t dataLen
)

Koduje element kontenera TLV ze wstępnie zakodowanego zestawu elementów.

Metoda PutPreEncodedContainer() koduje nowy element kontenera TLV (strukturę, tablica lub ścieżkę) zawierający zbiór elementów składowych pobranych z wstępnie zakodowanego bufora. Bufor wejściowy powinien zawierać zero lub więcej w pełni zakodowanych elementów TLV z tagami zgodnymi z regułami dotyczącymi określonego typu kontenera (np. elementy struktury muszą mieć tagi, a elementy tablicy nie).

Metoda koduje cały element kontenera w jednym wywołaniu. Gdy zwracana jest metoda PutPreEncodedContainer(), obiekt zapisujący może służyć do zapisywania dodatkowych elementów TLV po elemencie kontenera.

Szczegóły
Parametry
[in] tag
Tag TLV do kodowania z kontenerem lub AnonymousTag, jeśli kontener powinien być kodowany bez tagu. Wartości tagów należy tworzyć za pomocą jednej z funkcji definicji tagu: ProfileTag(), ContextTag() lub CommonTag().
[in] containerType
Typ kontenera do zakodowania. Musi to być wartość kTLVType_Structure, kTLVType_Array lub kTLVType_Path.
[in] data
wskaźnik do bufora zawierającego 0 bardziej zakodowanych elementów TLV, które staną się elementami nowego kontenera.
[in] dataLen
Liczba bajtów w buforze data.
Zwracane wartości
WEAVE_NO_ERROR
Jeśli przy użyciu metody się udało:
WEAVE_ERROR_WRONG_TLV_TYPE
Jeśli wartość określona dla containerType jest nieprawidłowa.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Jeśli zapis w kontenerze został otwarty na bieżącym scenariuszu, ale nie został jeszcze zamknięty.
WEAVE_ERROR_INVALID_TLV_TAG
Jeśli podana wartość tagu jest nieprawidłowa lub nieodpowiednia w kontekście, w którym jest zapisywana.
WEAVE_ERROR_BUFFER_TOO_SMALL
Jeśli zapisanie wartości spowodowałoby przekroczenie limitu maksymalnej liczby bajtów określonych podczas inicjowania zapisującego.
WEAVE_ERROR_NO_MEMORY
Próba przydzielenia bufora wyjściowego nie powiodła się z powodu braku pamięci.
other
Inne błędy Weave lub dotyczące platformy zwrócone przez skonfigurowane funkcje GetNewBuffer() lub FinalizeBuffer().

PutString

WEAVE_ERROR PutString(
  uint64_t tag,
  const char *buf
)

Koduje wartość ciągu znaków UTF8 w TLV.

Szczegóły
Parametry
[in] tag
Tag TLV do kodowania z wartością lub AnonymousTag, jeśli wartość powinna być zakodowana bez tagu. Wartości tagów należy tworzyć za pomocą jednej z funkcji definicji tagu: ProfileTag(), ContextTag() lub CommonTag().
[in] buf
Wskaźnik do ciągu znaków UTF-8 z zakodowanym ciągiem null do zakodowania.
Zwracane wartości
WEAVE_NO_ERROR
Jeśli przy użyciu metody się udało:
WEAVE_ERROR_TLV_CONTAINER_OPEN
Jeśli zapis w kontenerze został otwarty na bieżącym scenariuszu, ale nie został jeszcze zamknięty.
WEAVE_ERROR_INVALID_TLV_TAG
Jeśli podana wartość tagu jest nieprawidłowa lub nieodpowiednia w kontekście, w którym jest zapisywana.
WEAVE_ERROR_BUFFER_TOO_SMALL
Jeśli zapisanie wartości spowodowałoby przekroczenie limitu maksymalnej liczby bajtów określonych podczas inicjowania zapisującego.
WEAVE_ERROR_NO_MEMORY
Próba przydzielenia bufora wyjściowego nie powiodła się z powodu braku pamięci.
other
Inne błędy Weave lub dotyczące platformy zwrócone przez skonfigurowane funkcje GetNewBuffer() lub FinalizeBuffer().

PutString

WEAVE_ERROR PutString(
  uint64_t tag,
  const char *buf,
  uint32_t len
)

Koduje wartość ciągu znaków UTF8 w TLV.

Szczegóły
Parametry
[in] tag
Tag TLV do kodowania z wartością lub AnonymousTag, jeśli wartość powinna być zakodowana bez tagu. Wartości tagów należy tworzyć za pomocą jednej z funkcji definicji tagu: ProfileTag(), ContextTag() lub CommonTag().
[in] buf
Wskaźnik ciągu znaków UTF-8 do kodowania.
[in] len
Długość (w bajtach) ciągu do zakodowania.
Zwracane wartości
WEAVE_NO_ERROR
Jeśli przy użyciu metody się udało:
WEAVE_ERROR_TLV_CONTAINER_OPEN
Jeśli zapis w kontenerze został otwarty na bieżącym scenariuszu, ale nie został jeszcze zamknięty.
WEAVE_ERROR_INVALID_TLV_TAG
Jeśli podana wartość tagu jest nieprawidłowa lub nieodpowiednia w kontekście, w którym jest zapisywana.
WEAVE_ERROR_BUFFER_TOO_SMALL
Jeśli zapisanie wartości spowodowałoby przekroczenie limitu maksymalnej liczby bajtów określonych podczas inicjowania zapisującego.
WEAVE_ERROR_NO_MEMORY
Próba przydzielenia bufora wyjściowego nie powiodła się z powodu braku pamięci.
other
Inne błędy Weave lub dotyczące platformy zwrócone przez skonfigurowane funkcje GetNewBuffer() lub FinalizeBuffer().

PutStringF

WEAVE_ERROR PutStringF(
  uint64_t tag,
  const char *fmt,
  ...
)

Zakoduj dane wyjściowe ciągu znaków w formacie zgodnym z formatem określonym w elemencie TLV.

PutStringF to analog typu sprintf, w którym dane wyjściowe są przechowywane w elemencie TLV, a nie w buforze znaków. Gdy dostępna jest rozszerzona funkcja drukowania, może ona przesłać wynikowy ciąg znaków do nieciągłej pamięci bazowej. Implementacja obsługuje te ulepszenia wydrukuf:

Platforma dostarcza oparte na wywołaniu wywołanie vcbprintf, które umożliwia wywołanie niestandardowego wywołania zwrotnego zamiast putchar.

Platforma udostępnia wariant vsnprintf o nazwie vsnprintf_ex, który działa dokładnie tak samo jak vsnprintf, z tym że zawiera zasady pomijania pierwszych n znaków danych wyjściowych.

Pamiętaj, że chociaż funkcja oparta na wywołaniu zwrotnym jest najprostsza i wymaga najmniejszej ilości kodu, różne funkcje vsprintf_ex zajmują mniej stosu.

Jeśli żadna z powyższych opcji nie jest dostępna, ale platforma udostępnia funkcję malloc, funkcja przydzieli tymczasowy bufor do przechowywania danych wyjściowych. Gdy platforma nie dostarcza ulepszeń do rodziny Printf ani Malloc, dane wyjściowe są obcinane tak, aby mieściły się w stanie ciągłym w bieżącej pamięci TLV

Szczegóły
Parametry
[in] tag
Tag TLV do kodowania z wartością lub AnonymousTag, jeśli wartość powinna być zakodowana bez tagu. Wartości tagów należy tworzyć za pomocą jednej z funkcji definicji tagu: ProfileTag(), ContextTag() lub CommonTag().
[in] fmt
Ciąg formatu używany do formatowania listy argumentów. Stosuje tę samą składnię i reguły co ciąg formatu w przypadku rodziny funkcji printf.
[in] ...
Lista argumentów do sformatowania w wartości wyjściowej zgodnie z funkcją fmt.
Zwracane wartości
WEAVE_NO_ERROR
Jeśli przy użyciu metody się udało:
other
Jeśli nie udało się wykonać podstawowych wywołań metod TLVWriter WriteElementHead lub GetNewBuffer, ich błąd jest natychmiast przekierowywany w górę stosu wywołań.

StartContainer

WEAVE_ERROR StartContainer(
  uint64_t tag,
  TLVType containerType,
  TLVType & outerContainerType
)

Zaczyna kodować nowy element kontenera TLV.

Metoda StartContainer() służy do zapisywania elementów kontenera TLV (struktury, tablic lub ścieżek) w kodowaniu. Metoda przyjmuje typ i tag (jeśli występuje) nowego kontenera, a także odwołanie do wartości TLVType, która zostanie użyta do zapisania bieżącego kontekstu zapisującego, gdy jest on używany do zapisu kontenera.

Po zwróceniu metody StartContainer() aplikacja powinna użyć bieżącego obiektu TLVWriter do zapisywania elementów kontenera. Gdy skończysz, aplikacja musi wywołać metodę EndContainer(), aby dokończyć kodowanie kontenera.

Szczegóły
Parametry
[in] tag
Tag TLV do kodowania z kontenerem lub AnonymousTag, jeśli kontener powinien być kodowany bez tagu. Wartości tagów należy tworzyć za pomocą jednej z funkcji definicji tagu: ProfileTag(), ContextTag() lub CommonTag().
[in] containerType
Typ kontenera do zakodowania. Musi to być wartość kTLVType_Structure, kTLVType_Array lub kTLVType_Path.
[out] outerContainerType
Odwołanie do wartości TLVType, która otrzyma kontekst zapisującego.
Zwracane wartości
WEAVE_NO_ERROR
Jeśli przy użyciu metody się udało:
WEAVE_ERROR_WRONG_TLV_TYPE
Jeśli wartość określona dla containerType jest nieprawidłowa.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Jeśli zapis w kontenerze został otwarty na bieżącym scenariuszu, ale nie został jeszcze zamknięty.
WEAVE_ERROR_INVALID_TLV_TAG
Jeśli podana wartość tagu jest nieprawidłowa lub nieodpowiednia w kontekście, w którym jest zapisywana.
WEAVE_ERROR_BUFFER_TOO_SMALL
Jeśli zapisanie wartości spowodowałoby przekroczenie limitu maksymalnej liczby bajtów określonych podczas inicjowania zapisującego.
WEAVE_ERROR_NO_MEMORY
Próba przydzielenia bufora wyjściowego nie powiodła się z powodu braku pamięci.
other
Inne błędy Weave lub dotyczące platformy zwrócone przez skonfigurowane funkcje GetNewBuffer() lub FinalizeBuffer().

StartPutBytes

WEAVE_ERROR StartPutBytes(
  uint64_t tag,
  uint32_t totalLen
)

Koduje ciąg bajtowy TLV w kilku fragmentach.

Należy go używać z ContinuePutBytes.

Szczegóły
Parametry
[in] tag
Tag TLV do kodowania z wartością lub AnonymousTag, jeśli wartość powinna być zakodowana bez tagu. Wartości tagów należy tworzyć za pomocą jednej z funkcji definicji tagu: ProfileTag(), ContextTag() lub CommonTag().
[in] totalLen
Łączna liczba bajtów do zakodowania.
Zwracane wartości
WEAVE_NO_ERROR
Jeśli przy użyciu metody się udało:
WEAVE_ERROR_TLV_CONTAINER_OPEN
Jeśli zapis w kontenerze został otwarty na bieżącym scenariuszu, ale nie został jeszcze zamknięty.
WEAVE_ERROR_INVALID_TLV_TAG
Jeśli podana wartość tagu jest nieprawidłowa lub nieodpowiednia w kontekście, w którym jest zapisywana.
WEAVE_ERROR_BUFFER_TOO_SMALL
Jeśli zapisanie wartości spowodowałoby przekroczenie limitu maksymalnej liczby bajtów określonych podczas inicjowania zapisującego.
WEAVE_ERROR_NO_MEMORY
Próba przydzielenia bufora wyjściowego nie powiodła się z powodu braku pamięci.
other
Inne błędy Weave lub dotyczące platformy zwrócone przez skonfigurowane funkcje GetNewBuffer() lub FinalizeBuffer().

VPutStringF

WEAVE_ERROR VPutStringF(
  uint64_t tag,
  const char *fmt,
  va_list ap
)

Zakoduj dane wyjściowe ciągu znaków w formacie zgodnym z formatem określonym w elemencie TLV.

PutStringF to analog typu sprintf, w którym dane wyjściowe są przechowywane w elemencie TLV, a nie w buforze znaków. Gdy dostępna jest rozszerzona funkcja drukowania, może ona przesłać wynikowy ciąg znaków do nieciągłej pamięci bazowej. Implementacja obsługuje te ulepszenia wydrukuf:

Platforma dostarcza oparte na wywołaniu wywołanie vcbprintf, które umożliwia wywołanie niestandardowego wywołania zwrotnego zamiast putchar.

Platforma udostępnia wariant vsnprintf o nazwie vsnprintf_ex, który działa dokładnie tak samo jak vsnprintf, z tym że zawiera zasady pomijania pierwszych n znaków danych wyjściowych.

Pamiętaj, że chociaż funkcja oparta na wywołaniu zwrotnym jest najprostsza i wymaga najmniejszej ilości kodu, różne funkcje vsprintf_ex zajmują mniej stosu.

Jeśli żadna z powyższych opcji nie jest dostępna, ale platforma udostępnia funkcję malloc, funkcja przydzieli tymczasowy bufor do przechowywania danych wyjściowych. Gdy platforma nie dostarcza ulepszeń do rodziny Printf ani Malloc, dane wyjściowe są obcinane tak, aby mieściły się w stanie ciągłym w bieżącej pamięci TLV

Szczegóły
Parametry
[in] tag
Tag TLV do kodowania z wartością lub AnonymousTag, jeśli wartość powinna być zakodowana bez tagu. Wartości tagów należy tworzyć za pomocą jednej z funkcji definicji tagu: ProfileTag(), ContextTag() lub CommonTag().
[in] fmt
Ciąg formatu używany do formatowania listy argumentów. Stosuje tę samą składnię i reguły co ciąg formatu w przypadku rodziny funkcji printf.
[in] ap
Lista argumentów do sformatowania w wartości wyjściowej zgodnie z funkcją fmt.
Zwracane wartości
WEAVE_NO_ERROR
Jeśli przy użyciu metody się udało:
other
Jeśli nie udało się wykonać podstawowych wywołań metod TLVWriter WriteElementHead lub GetNewBuffer, ich błąd jest natychmiast przekierowywany w górę stosu wywołań.

Publiczne funkcje statyczne

FinalizePacketBuffer

WEAVE_ERROR FinalizePacketBuffer(
  TLVWriter & writer,
  uintptr_t bufHandle,
  uint8_t *bufStart,
  uint32_t dataLen
)

Implementacja funkcji TLVWriter FinalizeBuffer do zapisu w łańcuchu PacketBuffers.

Funkcja FinalizePacketBuffer() wykonuje niezbędną finalizację, która jest wymagana w przypadku użycia obiektu TLVWriter do zapisu w łańcuchu PacketBuffer. Funkcja jest przeznaczona do używania w połączeniu z funkcją GetNewPacketBuffer().

Więcej informacji o interfejsie API funkcji FinalizePacketBuffer() znajdziesz w definicji typu FinalizeBufferFunct.

GetNewBuffer_Malloced

WEAVE_ERROR GetNewBuffer_Malloced(
  TLVWriter & writer,
  uintptr_t & bufHandle,
  uint8_t *& bufStart,
  uint32_t & bufLen
)

Implementacja funkcji TLVWriter GetNewBuffer służącej do zapisu w buforze dynamicznym.

Funkcja GetNewBuffer_Malloced() dostarcza nową przestrzeń wyjściową do TLVWriter, podwajając rozmiar bazowego bufora dynamicznego odpowiednio do potrzeb przechowywania kodowania. Tę funkcję należy przypisać do wskaźnika funkcji TLVWriter GetNewBuffer.

Więcej informacji o interfejsie API funkcji GetNewBuffer_Malloced() znajdziesz w definicji typu GetNewBufferFunct.

GetNewPacketBuffer

WEAVE_ERROR GetNewPacketBuffer(
  TLVWriter & writer,
  uintptr_t & bufHandle,
  uint8_t *& bufStart,
  uint32_t & bufLen
)

Implementacja funkcji TLVWriter GetNewBuffer służącej do zapisu w łańcuchu PacketBuffers.

Funkcja GetNewPacketBuffer() dostarcza nową przestrzeń wyjściową do TLVWriter, przypisując łańcuch z co najmniej 1 pakietem PacketBuffer (w razie potrzeby) do przechowywania kodowania. Tę funkcję należy przypisać do wskaźnika funkcji TLVWriter GetNewBuffer.

Pamiętaj, że w przypadku użycia funkcji GetNewPacketBuffer z parametrem TLVWriter do zakończenia łańcucha bufora należy użyć odpowiedniej funkcji FinalizePacketBuffer() (lub jej odpowiednika).

Więcej informacji o interfejsie API funkcji GetNewPacketBuffer() znajdziesz w definicji typu GetNewBufferFunct.

Funkcje chronione

IsCloseContainerReserved

bool IsCloseContainerReserved(
  void
) const 

Określ, czy kontener powinien zarezerwować miejsce na symbol CloseContainer w punkcie uruchamiania / otwierania kontenera.

IsContainerOpen

bool IsContainerOpen(
  void
) const 

SetCloseContainerReserved

void SetCloseContainerReserved(
  bool aCloseContainerReserved
)

Określ, czy kontener powinien zarezerwować miejsce na symbol CloseContainer w punkcie uruchamiania / otwierania kontenera.

SetContainerOpen

void SetContainerOpen(
  bool aContainerOpen
)

WriteData

WEAVE_ERROR WriteData(
  const uint8_t *p,
  uint32_t len
)

WriteElementHead

WEAVE_ERROR WriteElementHead(
  TLVElementType elemType,
  uint64_t tag,
  uint64_t lenOrVal
)

WriteElementWithData

WEAVE_ERROR WriteElementWithData(
  TLVType type,
  uint64_t tag,
  const uint8_t *data,
  uint32_t dataLen
)