nl::Weave::TLV::TLVWriter

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

energooszczędny koder do zapisywania danych w formacie Weave TLV.

Podsumowanie

Komponent TLVWriter wdraża koder strumieniowy działający tylko do przodu dla danych TLV Weave. Aplikacje zapisują dane w kodowaniu, wywołując jedną z metod Put() autora, przekazując w razie potrzeby informacje o powiązanych tagach i wartościach. Podobnie aplikacje mogą kodować typy kontenerów TLV (struktury, tablice lub ścieżki), wywołując metody OpenContainer() lub EnterContainer() zapisującego.

Obiekt TLVWriter może zapisywać dane bezpośrednio w stałym buforze wyjściowym lub w łańcuchu zawierającym co najmniej 1 obiekt PacketBuffer. Poza tym aplikacje mogą dostarczać własne funkcje GetNewBuffer i FinalizeBuffer, aby kierować dane wyjściowe do dowolnego miejsca docelowego, na przykład 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 wyjściowego do obiektu 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 sfinalizowaniu obiektu TLVWriter.
GetNewBuffer
Wskaźnik do funkcji, która będzie dostarczać nową przestrzeń buforową do obiektu TLVWriter.
ImplicitProfileId
uint32_t
Identyfikator profilu tagów, które powinny być zakodowane w postaci 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 pisanie 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 z wstępnie zakodowanego zestawu elementów składowych.
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 zapisu.
CopyElement(uint64_t tag, TLVReader & reader)
EndContainer(TLVType outerContainerType)
Kończy kodowanie elementu kontenera TLV.
Finalize(void)
Zakończ pisanie kodowania TLV.
GetContainerType(void) const
Zwraca typ kontenera, w którym obecnie zapisuje dane za pomocą obiektu TLVWriter.
GetLengthWritten(void)
uint32_t
Zwraca łączną liczbę bajtów zapisanych od momentu zainicjowania zapisu.
Init(uint8_t *buf, uint32_t maxLen)
void
Inicjuje obiekt TLVWriter do zapisania w pojedynczym buforze wyjściowym.
Init(PacketBuffer *buf, uint32_t maxLen)
void
Inicjuje obiekt TLVWriter, który ma być zapisany w pojedynczym pakiecie PacketBuffer.
Init(PacketBuffer *buf, uint32_t maxLen, bool allowDiscontiguousBuffers)
void
Inicjuje obiekt TLVWriter, który ma być zapisany w co najmniej 1 bufecie PacketBuffer.
InitMalloced(uint8_t *& outBuf, uint32_t initialBufSize, uint32_t maxLen)
void
Inicjuje obiekt TLVWriter do zapisania w buforze dynamicznym.
OpenContainer(uint64_t tag, TLVType containerType, TLVWriter & containerWriter)
Inicjuje nowy obiekt TLVWriter do zapisywania elementów kontenera TLV.
Put(uint64_t tag, int8_t v)
Koduje liczbę całkowitą ze znakiem TLV.
Put(uint64_t tag, int8_t v, bool preserveSize)
Koduje liczbę 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 nieoznaczoną liczbę całkowitą TLV.
Put(uint64_t tag, uint8_t v, bool preserveSize)
Koduje nieoznaczoną liczbę całkowitą 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 z wstępnie zakodowanego zestawu elementów składowych.
PutString(uint64_t tag, const char *buf)
Koduje wartość ciągu znaków TLV w formacie UTF8.
PutString(uint64_t tag, const char *buf, uint32_t len)
Koduje wartość ciągu znaków TLV w formacie UTF8.
PutStringF(uint64_t tag, const char *fmt, ...)
Zakoduj dane wyjściowe ciągu znaków sformatowane zgodnie z formatem określonym w elemencie TLV.
StartContainer(uint64_t tag, TLVType containerType, TLVType & outerContainerType)
Rozpoczyna kodowanie nowego elementu kontenera TLV.
StartPutBytes(uint64_t tag, uint32_t totalLen)
Koduje ciąg bajtowy TLV w wielu fragmentach.
VPutStringF(uint64_t tag, const char *fmt, va_list ap)
Zakoduj dane wyjściowe ciągu znaków sformatowane zgodnie z formatem określonym w elemencie TLV.

Publiczne funkcje statyczne

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

Funkcje chronione

IsCloseContainerReserved(void) const
bool
Ustal, czy kontener powinien zarezerwować miejsce na symbol Zamknij kontener na etapie jego uruchamiania lub otwierania.
IsContainerOpen(void) const
bool
SetCloseContainerReserved(bool aCloseContainerReserved)
void
Określ, czy kontener ma rezerwować miejsce na symbol Zamknij kontener na etapie jego uruchamiania lub otwierania.
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() obiektu TLVWriter. Oczekuje się, że funkcja przeprowadzi wszystkie niezbędne oczyszczenia lub finalizacje związane z użyciem danych wyjściowych obiektu zapisującego. Może to być na przykład zarejestrowanie ostatecznej długości kodowania lub zamknięcie deskryptora pliku.

Szczegóły
Parametry
[in] writer
Odwołanie do obiektu TLVWriter w trakcie finalizacji.
[in,out] bufHandle
Wartość kontekstu uintptr_t, która została ustawiona przez poprzednie wywołania funkcji GetNewBuffer.
[in,out] bufStart
Wskaźnik na początku bieżącego (i ostatniego) bufora wyjściowego.
[in,out] bufLen
Liczba bajtów w buforcie wskazywana przez wartość bufStart.
Zwracane wartości
WEAVE_NO_ERROR
Jeśli finalizacja zakończyła się powodzeniem.
other
Inne kody błędów Weave lub platformy wskazujące, ż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 wyjściowego do obiektu TLVWriter.

Funkcje tego typu służą do przygotowywania nowej przestrzeni bufora dla obiektu TLVWriter, w którym może zapisywać zapis. Po wywołaniu funkcja powinna zwrócić wskaźnik do lokalizacji w pamięci, w której powinny zostać zapisane nowe dane, wraz z powiązaną maksymalną długością. Funkcja może udostępniać miejsce do zapisu, przydzielając nowy bufor do przechowywania danych lub usuwając dane zapisane wcześniej z istniejącego bufora.

Szczegóły
Parametry
[in] writer
Odwołanie do obiektu TLVWriter, które żą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 z wartością 0 przed pierwszym wywołaniem.
[in,out] bufStart
Odwołanie do wskaźnika danych. Po wejściu do funkcji bufStart wskazuje początek bieżącego bufora danych wyjściowych. Przy wyjściu parametr bufStart powinien wskazywać początek nowego bufora wyjściowego. Nowa wartość wskaźnika może być taka sama jak poprzednia (np. jeśli funkcja skopiowała istniejące dane w innym miejscu) lub może wskazywać zupełnie nową lokalizację.
[in,out] bufLen
Odwołanie do nieoznaczonej liczby całkowitej. Przy wejściu do funkcji bufLen zawiera liczbę bajtów używanego miejsca w bieżącym buforze. Przy wyjściu parametr bufLen powinien zawierać maksymalną liczbę bajtów, które można zapisać w nowym buforze danych wyjściowych.
Zwracane wartości
WEAVE_NO_ERROR
Czy funkcja mogła zapewnić zapisującym więcej miejsca na bufor.
other
Inne kody błędów Weave lub platformy wskazujące, że wystąpił błąd, który uniemożliwia funkcji utworzenie dodatkowego miejsca bufora.

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 sfinalizowaniu obiektu TLVWriter.

Obiekt TLVWriter wywołuje funkcję FinalizeBuffer za każdym razem, gdy wywołana jest jej metoda Finalize(). Aplikacje mogą ustawiać wskaźnik funkcji w dowolnym punkcie przed wywołaniem funkcji Finalize(). Domyślnie wskaźnik jest ustawiony na wartość NULL, co powoduje, że metoda Finalize() pomija wywołanie funkcji.

Więcej informacji o implementowaniu funkcji FinalizeBufferFunct znajdziesz w definicji typu FinalizeBufferFunct.

GetNewBuffer

GetNewBufferFunct GetNewBuffer

Wskaźnik do funkcji, która będzie dostarczać nową przestrzeń buforową do obiektu TLVWriter.

Obiekt TLVWriter wywołuje funkcję GetNewBuffer za każdym razem, gdy zostanie podjęta próba zapisania danych przekraczających rozmiar bieżącego bufora danych wyjściowych. Jeśli jest ustawiona na NULL (wartość domyślna), zapisujący zwraca kod WEAVE_ERROR_NO_MEMORY, jeśli dane wyjściowe przekraczają bieżący bufor.

Metoda GetNewBuffer można ustawić przez aplikację w dowolnym momencie, ale zwykle jest ustawiana po zainicjowaniu zapisu.

Więcej informacji na temat wdrażania funkcji GetNewBuffer znajdziesz w definicji typu GetNewBufferFunct.

ImplicitProfileId

uint32_t ImplicitProfileId

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

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

Domyślnie właściwość ImplicitProfileId ma wartość kProfileIdNotSpecified, co oznacza, że zapisujący nie wysyła tam tagów niejawnie zaszyfrowanych. Aplikacje mogą w dowolnym momencie skonfigurować ustawienie ImplicitProfileId, aby włączyć tagi kodujące w formie niejawnej, począwszy od bieżącego punktu kodowania. Odpowiedni identyfikator profilu, który należy ustawić, zwykle zależy od kontekstu aplikacji lub 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 pisanie kontenera TLV po wywołaniu funkcji OpenContainer().

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

Po zwróceniu metody CloseContainer() aplikacje mogą nadal używać nadrzędnego zapisującego do zapisywania dodatkowych elementów TLV, które pojawiają się po elemencie kontenera. W tym momencie dostarczonego zapisującego kontener powinien być uważany za „deinicjowany” i nie można go używać bez ponownego inicjowania.

Szczegóły
Parametry
[in] containerWriter
Odwołanie do obiektu TLVWriter podanego w metodzie OpenContainer().
Zwracane wartości
WEAVE_NO_ERROR
Jeśli to się uda,
WEAVE_ERROR_INCORRECT_STATE
Jeśli dostarczony zapisujący kontener jest w niepoprawnym stanie.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Jeśli w dostarczonym czytniku kontenerów został otwarty inny zapisujący kontener, który nie został jeszcze zamknięty.
WEAVE_ERROR_BUFFER_TOO_SMALL
Jeśli zakończenie kodowania kontenera spowodowałoby przekroczenie limitu maksymalnej liczby bajtów określonej podczas zainicjowania zapisującego.
WEAVE_ERROR_NO_MEMORY
Próba przydziału 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.

Tego pola należy 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 to się uda,
WEAVE_ERROR_TLV_CONTAINER_OPEN
Jeśli maszyna zapisu w kontenerach została otwarta w bieżącej instancji zapisującej, ale nie została jeszcze zamknięta.
WEAVE_ERROR_INVALID_TLV_TAG
Jeśli podana wartość tagu jest nieprawidłowa lub nieodpowiednia w kontekście, w którym jest ona zapisywana.
WEAVE_ERROR_BUFFER_TOO_SMALL
Jeśli zapisanie wartości spowodowałoby przekroczenie limitu maksymalnej liczby bajtów określonej podczas zainicjowania zapisu.
WEAVE_ERROR_NO_MEMORY
Próba przydziału 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.

Metoda 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 za pomocą jednego wywołania, kopiując typ, tag i elementy kontenera z kodowania źródłowego. Po zwróceniu metody obiekt zapisujący można użyć do zapisania dodatkowych elementów TLV po elemencie container.

Szczegóły
Parametry
[in] container
Odwołanie do obiektu TLVReader wskazującego wstępnie zakodowany kontener TLV do skopiowania.
Zwracane wartości
WEAVE_NO_ERROR
Jeśli to się uda,
WEAVE_ERROR_INCORRECT_STATE
Jeśli dostarczony czytnik nie jest umieszczony w elemencie kontenera.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Jeśli maszyna zapisu w kontenerach została otwarta w bieżącej instancji zapisującej, ale nie została jeszcze zamknięta.
WEAVE_ERROR_TLV_UNDERRUN
Kodowanie TLV powiązane z dostarczonym czytnikiem zakończyło się przedwcześnie.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Jeśli podany czytnik napotkał nieprawidłowy lub nieobsługiwany typ elementu TLV.
WEAVE_ERROR_INVALID_TLV_TAG
podany czytnik napotkał tag TLV w nieprawidłowym kontekście lub tag powiązany z kontenerem źródłowym jest nieprawidłowy bądź nieodpowiedni w kontekście, w którym został zapisany nowy kontener.
WEAVE_ERROR_BUFFER_TOO_SMALL
Jeśli zapisanie wartości spowodowałoby przekroczenie limitu maksymalnej liczby bajtów określonej podczas zainicjowania zapisu.
WEAVE_ERROR_NO_MEMORY
Próba przydziału bufora wyjściowego nie powiodła się z powodu braku pamięci.
other
Inne błędy tkanki lub błędy platformy zwrócone 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 z wstępnie zakodowanego zestawu elementów składowych.

Metoda CopyContainer() koduje nowy element kontenera TLV (strukturę, tablica lub ścieżkę) zawierający zbiór elementów składowych pobranych z obiektu TLVReader. Po wywołaniu metody dostarczony obiekt czytnika powinien zostać umieszczony w elemencie kontenera TLV. Nowo zakodowany kontener będzie miał ten sam typ i członków co kontener wejściowy. Tag nowego kontenera jest określony jako parametr wejściowy.

Po zwróceniu metody obiekt zapisujący można użyć do zapisania dodatkowych elementów TLV po elemencie container.

Szczegóły
Parametry
[in] tag
Tag TLV do zakodowania wraz z kontenerem lub AnonymousTag, jeśli kontener powinien być zakodowany 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 wskazującego wstępnie zakodowany kontener TLV, którego typ i elementy należy skopiować.
Zwracane wartości
WEAVE_NO_ERROR
Jeśli to się uda,
WEAVE_ERROR_INCORRECT_STATE
Jeśli dostarczony czytnik nie jest umieszczony w elemencie kontenera.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Jeśli maszyna zapisu w kontenerach została otwarta w bieżącej instancji zapisującej, ale nie została jeszcze zamknięta.
WEAVE_ERROR_TLV_UNDERRUN
Kodowanie TLV powiązane z dostarczonym czytnikiem zakończyło się przedwcześnie.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Jeśli podany czytnik napotkał nieprawidłowy lub nieobsługiwany typ elementu TLV.
WEAVE_ERROR_INVALID_TLV_TAG
Jeśli dostarczony czytnik napotkał tag TLV w nieprawidłowym kontekście lub jeśli dostarczony tag jest nieprawidłowy lub nieodpowiedni w kontekście, w którym został zapisany nowy kontener.
WEAVE_ERROR_BUFFER_TOO_SMALL
Jeśli zapisanie wartości spowodowałoby przekroczenie limitu maksymalnej liczby bajtów określonej podczas zainicjowania zapisu.
WEAVE_ERROR_NO_MEMORY
Próba przydziału bufora wyjściowego nie powiodła się z powodu braku pamięci.
other
Inne błędy tkanki lub błędy platformy zwrócone 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 dostarczonym buforze wejściowym są analizowane jako element kontenera TLV i zapisany nowy kontener, który ma ten sam typ i elementy co kontener wejściowy. Tag nowego kontenera jest określony jako parametr wejściowy.

Po zwróceniu metody obiekt zapisujący można użyć do zapisania dodatkowych elementów TLV po elemencie container.

Szczegóły
Parametry
[in] tag
Tag TLV do zakodowania wraz z kontenerem lub AnonymousTag, jeśli kontener powinien być zakodowany 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 należy skopiować.
[in] encodedContainerLen
Długość wstępnie zakodowanego kontenera w bajtach.
Zwracane wartości
WEAVE_NO_ERROR
Jeśli to się uda,
WEAVE_ERROR_TLV_CONTAINER_OPEN
Jeśli maszyna zapisu w kontenerach została otwarta w bieżącej instancji zapisującej, ale nie została jeszcze zamknięta.
WEAVE_ERROR_TLV_UNDERRUN
Jeśli kodowany kontener zakończył się przedwcześnie.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Czy 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 lub jeśli dostarczony tag jest nieprawidłowy lub niewłaściwy w kontekście, w którym został zapisany nowy kontener.
WEAVE_ERROR_BUFFER_TOO_SMALL
Jeśli zapisanie wartości spowodowałoby przekroczenie limitu maksymalnej liczby bajtów określonej podczas zainicjowania zapisu.
WEAVE_ERROR_NO_MEMORY
Próba przydziału bufora wyjściowego nie powiodła się z powodu braku pamięci.
other
Inne błędy tkanki lub błędy platformy zwrócone 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 zapisu.

Metoda CopyElement() koduje nowy element TLV, którego typ, tag i wartość są pobierane z obiektu TLVReader. Po wywołaniu metody dostarczony obiekt odczytującego powinien zostać umieszczony w elemencie źródłowym TLV. Nowo zakodowany element ma ten sam typ, tag i treść co kontener wejściowy. Jeśli podany element to kontener TLV (struktura, tablica lub ścieżka), zostanie skopiowana cała jego zawartość.

Szczegóły
Parametry
[in] reader
Odwołanie do obiektu TLVReader wskazującego wstępnie zakodowany element TLV, który należy skopiować.
Zwracane wartości
WEAVE_NO_ERROR
Jeśli to się uda,
WEAVE_ERROR_INCORRECT_STATE
Jeśli dostarczony czytnik nie jest umieszczony w elemencie.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Jeśli maszyna zapisu w kontenerach została otwarta w bieżącej instancji zapisującej, ale nie została jeszcze zamknięta.
WEAVE_ERROR_TLV_UNDERRUN
Kodowanie TLV powiązane z dostarczonym czytnikiem zakończyło się przedwcześnie.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Jeśli podany czytnik napotkał nieprawidłowy lub nieobsługiwany typ elementu TLV.
WEAVE_ERROR_INVALID_TLV_TAG
Jeśli dostarczony czytnik napotkał tag TLV w nieprawidłowym kontekście lub jeśli dostarczony tag jest nieprawidłowy lub nieodpowiedni w kontekście, w którym został zapisany nowy kontener.
WEAVE_ERROR_BUFFER_TOO_SMALL
Jeśli zapisanie wartości spowodowałoby przekroczenie limitu maksymalnej liczby bajtów określonej podczas zainicjowania zapisu.
WEAVE_ERROR_NO_MEMORY
Próba przydziału bufora wyjściowego nie powiodła się z powodu braku pamięci.
other
Inne błędy tkanki lub błędy platformy zwrócone 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ływać odpowiednie wywołanie funkcji EndContainer(), przekazując wartość TLVType zwracaną przez wywołanie StartContainer(). Po zwróceniu metody EndContainer() obiektu zapisującego można używać do zapisywania dodatkowych elementów TLV następujących po elemencie kontenera.

Szczegóły
Parametry
[in] outerContainerType
Wartość TLVType zwrócona przez metodę StartContainer().
Zwracane wartości
WEAVE_NO_ERROR
Jeśli to się uda,
WEAVE_ERROR_INCORRECT_STATE
Odpowiednie wywołanie StartContainer() nie zostało wykonane.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Jeśli maszyna zapisu w kontenerach została otwarta w bieżącej instancji zapisującej, ale nie została jeszcze zamknięta.
WEAVE_ERROR_BUFFER_TOO_SMALL
Jeśli zapisanie wartości spowodowałoby przekroczenie limitu maksymalnej liczby bajtów określonej podczas zainicjowania zapisu.
WEAVE_ERROR_NO_MEMORY
Próba przydziału 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 pisanie kodowania TLV.

Metoda Finalize() kończy proces zapisywania kodowania TLV w podstawowym buforze danych wyjściowych. Aplikacja musi wywołać metodę przed użyciem zawartości bufora. Funkcję Finalize() można wywołać tylko wtedy, gdy dla bieżącego zapisującego nie są otwarte żadne zapisy kontenerów. (patrz OpenContainer()).

Szczegóły
Zwracane wartości
WEAVE_NO_ERROR
Jeśli kodowanie zostało sfinalizowane.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Jeśli maszyna zapisu w kontenerach została otwarta w bieżącej instancji zapisującej, ale nie została jeszcze zamknięta.
other
Inne błędy Weave lub dotyczące platformy zwrócone przez skonfigurowaną funkcję FinalizeBuffer().

GetContainerType

TLVType GetContainerType(
  void
) const 

Zwraca typ kontenera, w którym obecnie zapisuje dane za pomocą obiektu TLVWriter.

Metoda GetContainerType() zwraca typ kontenera TLV, w którym obecnie zapisuje dane TLVWriter. Jeśli obiekt TLVWriter nie zapisuje elementów w kontenerze (tj. gdy zapisujesz je na najbardziej zewnętrznym poziomie kodowania), metoda zwraca kTLVType_NotSpecified.

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

GetLengthWritten

uint32_t GetLengthWritten(
  void
)

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

Szczegóły
Zwroty
Łączna liczba bajtów zapisanych od momentu zainicjowania zapisu.

Zainicjuj

void Init(
  uint8_t *buf,
  uint32_t maxLen
)

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

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

Zainicjuj

void Init(
  PacketBuffer *buf,
  uint32_t maxLen
)

Inicjuje obiekt TLVWriter, który ma być zapisany w pojedynczym pakiecie PacketBuffer.

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

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

Zainicjuj

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

Inicjuje obiekt TLVWriter, który ma być zapisany w co najmniej 1 bufecie PacketBuffer.

Zapisywanie rozpoczyna się natychmiast po ostatnim bajcie danych istniejących w określonym buforze. Jeśli zasada allowDiscontiguousBuffers ma wartość prawda, dodatkowe bufory pakietów zostaną przydzielone i połączone z dostarczonym buforem w zależności od potrzeb w celu obsługi ilości zapisanych danych. Jeśli podany bufor wyjściowy jest już nagłówkiem łańcucha buforów, dane wyjściowe są zapisywane w kolejnych buforach w łańcuchu przed przydzieleniem nowych buforów.

Szczegóły
Parametry
[in] buf
Wskaźnik do PacketBuffer, w którym powinny być zapisywane dane TLV.
[in] maxLen
Maksymalna liczba bajtów, które powinny być zapisane w buforach danych wyjściowych.
[in] allowDiscontiguousBuffers
Jeśli ma wartość prawda, zapisuj dane w łańcuchu buforów pakietów, przydzielając w razie potrzeby nowe bufory do przechowywania zapisanych danych. Jeśli ma wartość false (fałsz), zapis spowoduje błąd WEAVE_ERROR_BUFFER_TOO_SMALL, jeśli zapisane dane przekroczą miejsce dostępne w początkowym buforze danych wyjściowych.

InitMalloced

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

Inicjuje obiekt TLVWriter do zapisania w buforze dynamicznym.

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 do zapisywania elementów kontenera TLV.

Metoda OpenContainer() służy do zapisywania elementów kontenera TLV (struktur, tablic lub ścieżek) w kodowaniu. Metoda pobiera 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 zapisywania elementów kontenera. Aplikacje zapisują elementy nowego kontenera za pomocą zapisu w kontenerze, a następnie wywołują metodę CloseContainer(), aby zakończyć kodowanie kontenera.

Gdy skrypt zapisu kontenera jest otwarty, aplikacje nie mogą wykonywać wywołań ani w inny sposób zmieniać stanu nadrzędnego zapisującego.

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

  • Identyfikator profilu domyślnego (ImplicitProfileId)
  • Wskaźnik danych aplikacji (AppData)
  • Wskaźniki funkcji GetNewBuffer i FinalizeBuffer

Szczegóły
Parametry
[in] tag
Tag TLV do zakodowania wraz z kontenerem lub AnonymousTag, jeśli kontener powinien być zakodowany 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óre zostanie zainicjowane w celu zapisywania członków nowego elementu kontenera. Wszystkie dane powiązane z podanym obiektem zostaną zastąpione.
Zwracane wartości
WEAVE_NO_ERROR
Jeśli to się uda,
WEAVE_ERROR_WRONG_TLV_TYPE
Jeśli wartość określona dla containerType jest nieprawidłowa.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Jeśli maszyna zapisu w kontenerach została otwarta w bieżącej instancji zapisującej, ale nie została jeszcze zamknięta.
WEAVE_ERROR_INVALID_TLV_TAG
Jeśli podana wartość tagu jest nieprawidłowa lub nieodpowiednia w kontekście, w którym jest ona zapisywana.
WEAVE_ERROR_BUFFER_TOO_SMALL
Jeśli zapisanie wartości spowodowałoby przekroczenie limitu maksymalnej liczby bajtów określonej podczas zainicjowania zapisu.
WEAVE_ERROR_NO_MEMORY
Próba przydziału 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 liczbę całkowitą ze znakiem TLV.

Jest to przeciążona funkcja subskrybenta, udostępniona dla wygody. Różni się ona od funkcji powyżej jedynie argumentami, które akceptuje.

Szczegóły
Parametry
[in] tag
Tag TLV zakodowany 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 to się uda,
WEAVE_ERROR_TLV_CONTAINER_OPEN
Jeśli maszyna zapisu w kontenerach została otwarta w bieżącej instancji zapisującej, ale nie została jeszcze zamknięta.
WEAVE_ERROR_INVALID_TLV_TAG
Jeśli podana wartość tagu jest nieprawidłowa lub nieodpowiednia w kontekście, w którym jest ona zapisywana.
WEAVE_ERROR_BUFFER_TOO_SMALL
Jeśli zapisanie wartości spowodowałoby przekroczenie limitu maksymalnej liczby bajtów określonej podczas zainicjowania zapisu.
WEAVE_ERROR_NO_MEMORY
Próba przydziału 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 liczbę całkowitą ze znakiem TLV.

Jest to przeciążona funkcja subskrybenta, udostępniona dla wygody. Różni się ona od funkcji powyżej jedynie argumentami, które akceptuje.

Szczegóły
Parametry
[in] tag
Tag TLV zakodowany 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ść false, jeśli wartość powinna być zakodowana w minimalnej liczbie bajtów niezbędnej do jej reprezentowania. Uwaga: zdecydowanie zalecamy ustawienie tego parametru na false (fałsz).
Zwracane wartości
WEAVE_NO_ERROR
Jeśli to się uda,
WEAVE_ERROR_TLV_CONTAINER_OPEN
Jeśli maszyna zapisu w kontenerach została otwarta w bieżącej instancji zapisującej, ale nie została jeszcze zamknięta.
WEAVE_ERROR_INVALID_TLV_TAG
Jeśli podana wartość tagu jest nieprawidłowa lub nieodpowiednia w kontekście, w którym jest ona zapisywana.
WEAVE_ERROR_BUFFER_TOO_SMALL
Jeśli zapisanie wartości spowodowałoby przekroczenie limitu maksymalnej liczby bajtów określonej podczas zainicjowania zapisu.
WEAVE_ERROR_NO_MEMORY
Próba przydziału 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 nieoznaczoną liczbę całkowitą TLV.

Jest to przeciążona funkcja subskrybenta, udostępniona dla wygody. Różni się ona od funkcji powyżej jedynie argumentami, które akceptuje.

Szczegóły
Parametry
[in] tag
Tag TLV zakodowany 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 to się uda,
WEAVE_ERROR_TLV_CONTAINER_OPEN
Jeśli maszyna zapisu w kontenerach została otwarta w bieżącej instancji zapisującej, ale nie została jeszcze zamknięta.
WEAVE_ERROR_INVALID_TLV_TAG
Jeśli podana wartość tagu jest nieprawidłowa lub nieodpowiednia w kontekście, w którym jest ona zapisywana.
WEAVE_ERROR_BUFFER_TOO_SMALL
Jeśli zapisanie wartości spowodowałoby przekroczenie limitu maksymalnej liczby bajtów określonej podczas zainicjowania zapisu.
WEAVE_ERROR_NO_MEMORY
Próba przydziału 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 nieoznaczoną liczbę całkowitą TLV.

Jest to przeciążona funkcja subskrybenta, udostępniona dla wygody. Różni się ona od funkcji powyżej jedynie argumentami, które akceptuje.

Szczegóły
Parametry
[in] tag
Tag TLV zakodowany 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ść false, jeśli wartość powinna być zakodowana w minimalnej liczbie bajtów niezbędnej do jej reprezentowania. Uwaga: zdecydowanie zalecamy ustawienie tego parametru na false (fałsz).
Zwracane wartości
WEAVE_NO_ERROR
Jeśli to się uda,
WEAVE_ERROR_TLV_CONTAINER_OPEN
Jeśli maszyna zapisu w kontenerach została otwarta w bieżącej instancji zapisującej, ale nie została jeszcze zamknięta.
WEAVE_ERROR_INVALID_TLV_TAG
Jeśli podana wartość tagu jest nieprawidłowa lub nieodpowiednia w kontekście, w którym jest ona zapisywana.
WEAVE_ERROR_BUFFER_TOO_SMALL
Jeśli zapisanie wartości spowodowałoby przekroczenie limitu maksymalnej liczby bajtów określonej podczas zainicjowania zapisu.
WEAVE_ERROR_NO_MEMORY
Próba przydziału 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 subskrybenta, udostępniona dla wygody. Różni się ona od funkcji powyżej jedynie argumentami, które akceptuje.

Szczegóły
Parametry
[in] tag
Tag TLV zakodowany 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 to się uda,
WEAVE_ERROR_TLV_CONTAINER_OPEN
Jeśli maszyna zapisu w kontenerach została otwarta w bieżącej instancji zapisującej, ale nie została jeszcze zamknięta.
WEAVE_ERROR_INVALID_TLV_TAG
Jeśli podana wartość tagu jest nieprawidłowa lub nieodpowiednia w kontekście, w którym jest ona zapisywana.
WEAVE_ERROR_BUFFER_TOO_SMALL
Jeśli zapisanie wartości spowodowałoby przekroczenie limitu maksymalnej liczby bajtów określonej podczas zainicjowania zapisu.
WEAVE_ERROR_NO_MEMORY
Próba przydziału 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 zakodowany 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 to się uda,
WEAVE_ERROR_TLV_CONTAINER_OPEN
Jeśli maszyna zapisu w kontenerach została otwarta w bieżącej instancji zapisującej, ale nie została jeszcze zamknięta.
WEAVE_ERROR_INVALID_TLV_TAG
Jeśli podana wartość tagu jest nieprawidłowa lub nieodpowiednia w kontekście, w którym jest ona zapisywana.
WEAVE_ERROR_BUFFER_TOO_SMALL
Jeśli zapisanie wartości spowodowałoby przekroczenie limitu maksymalnej liczby bajtów określonej podczas zainicjowania zapisu.
WEAVE_ERROR_NO_MEMORY
Próba przydziału 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 zakodowany 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 to się uda,
WEAVE_ERROR_TLV_CONTAINER_OPEN
Jeśli maszyna zapisu w kontenerach została otwarta w bieżącej instancji zapisującej, ale nie została jeszcze zamknięta.
WEAVE_ERROR_INVALID_TLV_TAG
Jeśli podana wartość tagu jest nieprawidłowa lub nieodpowiednia w kontekście, w którym jest ona zapisywana.
WEAVE_ERROR_BUFFER_TOO_SMALL
Jeśli zapisanie wartości spowodowałoby przekroczenie limitu maksymalnej liczby bajtów określonej podczas zainicjowania zapisu.
WEAVE_ERROR_NO_MEMORY
Próba przydziału 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 zakodowany 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 to się uda,
WEAVE_ERROR_TLV_CONTAINER_OPEN
Jeśli maszyna zapisu w kontenerach została otwarta w bieżącej instancji zapisującej, ale nie została jeszcze zamknięta.
WEAVE_ERROR_INVALID_TLV_TAG
Jeśli podana wartość tagu jest nieprawidłowa lub nieodpowiednia w kontekście, w którym jest ona zapisywana.
WEAVE_ERROR_BUFFER_TOO_SMALL
Jeśli zapisanie wartości spowodowałoby przekroczenie limitu maksymalnej liczby bajtów określonej podczas zainicjowania zapisu.
WEAVE_ERROR_NO_MEMORY
Próba przydziału 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 z wstępnie zakodowanego zestawu elementów składowych.

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 powiązanymi z określonym typem kontenera (np. elementy struktury muszą mieć tagi, a elementy tablicy – nie).

Ta metoda koduje cały element kontenera w jednym wywołaniu. Gdy funkcja PutPreEncodedContainer() zwraca obiekt zapisujący, można za jego pomocą zapisać dodatkowe elementy TLV.

Szczegóły
Parametry
[in] tag
Tag TLV do zakodowania wraz z kontenerem lub AnonymousTag, jeśli kontener powinien być zakodowany 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 zero innych 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 to się uda,
WEAVE_ERROR_WRONG_TLV_TYPE
Jeśli wartość określona dla containerType jest nieprawidłowa.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Jeśli maszyna zapisu w kontenerach została otwarta w bieżącej instancji zapisującej, ale nie została jeszcze zamknięta.
WEAVE_ERROR_INVALID_TLV_TAG
Jeśli podana wartość tagu jest nieprawidłowa lub nieodpowiednia w kontekście, w którym jest ona zapisywana.
WEAVE_ERROR_BUFFER_TOO_SMALL
Jeśli zapisanie wartości spowodowałoby przekroczenie limitu maksymalnej liczby bajtów określonej podczas zainicjowania zapisu.
WEAVE_ERROR_NO_MEMORY
Próba przydziału 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 TLV w formacie UTF8.

Szczegóły
Parametry
[in] tag
Tag TLV zakodowany 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 zakodowania ciągu znaków UTF-8 zakończonego wartością null.
Zwracane wartości
WEAVE_NO_ERROR
Jeśli to się uda,
WEAVE_ERROR_TLV_CONTAINER_OPEN
Jeśli maszyna zapisu w kontenerach została otwarta w bieżącej instancji zapisującej, ale nie została jeszcze zamknięta.
WEAVE_ERROR_INVALID_TLV_TAG
Jeśli podana wartość tagu jest nieprawidłowa lub nieodpowiednia w kontekście, w którym jest ona zapisywana.
WEAVE_ERROR_BUFFER_TOO_SMALL
Jeśli zapisanie wartości spowodowałoby przekroczenie limitu maksymalnej liczby bajtów określonej podczas zainicjowania zapisu.
WEAVE_ERROR_NO_MEMORY
Próba przydziału 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 TLV w formacie UTF8.

Szczegóły
Parametry
[in] tag
Tag TLV zakodowany 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 zakodowania ciągu UTF-8.
[in] len
Długość (w bajtach) ciągu znaków do zakodowania.
Zwracane wartości
WEAVE_NO_ERROR
Jeśli to się uda,
WEAVE_ERROR_TLV_CONTAINER_OPEN
Jeśli maszyna zapisu w kontenerach została otwarta w bieżącej instancji zapisującej, ale nie została jeszcze zamknięta.
WEAVE_ERROR_INVALID_TLV_TAG
Jeśli podana wartość tagu jest nieprawidłowa lub nieodpowiednia w kontekście, w którym jest ona zapisywana.
WEAVE_ERROR_BUFFER_TOO_SMALL
Jeśli zapisanie wartości spowodowałoby przekroczenie limitu maksymalnej liczby bajtów określonej podczas zainicjowania zapisu.
WEAVE_ERROR_NO_MEMORY
Próba przydziału 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 sformatowane zgodnie z formatem określonym w elemencie TLV.

PutStringF to odpowiednik 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, funkcja może przekazywać ciąg wynikowy do nieciągłej pamięci bazowej. Implementacja obsługuje te ulepszenia Printf:

Platforma dostarcza wywołanie zwrotne vcbprintf, które umożliwia wywołanie niestandardowego wywołania zwrotnego w miejscu metody putchar.

Platforma dostarcza wariant vsnprintf o nazwie vsnprintf_ex, który działa dokładnie tak samo jak vsnprintf, ale zawiera zasady pomijania pierwszych n znaków w wynikach.

Pamiętaj, że chociaż funkcja oparta na wywołaniu zwrotnym może być najprostsza i zawierać najmniejszą ilość kodu, różne funkcje vsprintf_ex zajmują mniej stosu.

Jeśli żadna z tych opcji nie jest dostępna, ale platforma udostępnia malloc, funkcja przydzieli tymczasowy bufor do przechowywania danych wyjściowych. Gdy platforma nie dostarcza ulepszeń do rodziny wydruków ani zestawu Malloc, dane wyjściowe są obcinane w taki sposób, aby pasowały do ciągłego stanu pamięci masowej TLV.

Szczegóły
Parametry
[in] tag
Tag TLV zakodowany 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 sformatowania listy argumentów. Obowiązują te same zasady i składnia co w przypadku ciągu formatu w przypadku rodziny funkcji printf.
[in] ...
Lista argumentów, które mają być sformatowane w wartości wyjściowej zgodnie z fmt.
Zwracane wartości
WEAVE_NO_ERROR
Jeśli to się uda,
other
Jeśli podstawowe wywołania metod TLVWriter WriteElementHead lub GetNewBuffer nie powiodły się, błąd jest natychmiast przekazywany do stosu wywołań.

StartContainer

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

Rozpoczyna kodowanie nowego elementu kontenera TLV.

Metoda StartContainer() służy do zapisywania elementów kontenera TLV (struktur, tablic lub ścieżek) w kodowaniu. Metoda pobiera typ i tag (jeśli występuje) nowego kontenera oraz odwołanie do wartości TLVType, która zostanie użyta do zapisania bieżącego kontekstu zapisu w czasie, gdy będzie on używany do zapisu kontenera.

Po zwróceniu metody StartContainer() aplikacja powinna używać bieżącego obiektu TLVWriter, aby zapisywać elementy kontenera. Po zakończeniu aplikacja musi wywołać metodę EndContainer(), aby zakończyć kodowanie kontenera.

Szczegóły
Parametry
[in] tag
Tag TLV do zakodowania wraz z kontenerem lub AnonymousTag, jeśli kontener powinien być zakodowany 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 to się uda,
WEAVE_ERROR_WRONG_TLV_TYPE
Jeśli wartość określona dla containerType jest nieprawidłowa.
WEAVE_ERROR_TLV_CONTAINER_OPEN
Jeśli maszyna zapisu w kontenerach została otwarta w bieżącej instancji zapisującej, ale nie została jeszcze zamknięta.
WEAVE_ERROR_INVALID_TLV_TAG
Jeśli podana wartość tagu jest nieprawidłowa lub nieodpowiednia w kontekście, w którym jest ona zapisywana.
WEAVE_ERROR_BUFFER_TOO_SMALL
Jeśli zapisanie wartości spowodowałoby przekroczenie limitu maksymalnej liczby bajtów określonej podczas zainicjowania zapisu.
WEAVE_ERROR_NO_MEMORY
Próba przydziału 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 wielu fragmentach.

Tej opcji należy używać z kontynuacją przycisku „ContinuePutBytes”.

Szczegóły
Parametry
[in] tag
Tag TLV zakodowany 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 to się uda,
WEAVE_ERROR_TLV_CONTAINER_OPEN
Jeśli maszyna zapisu w kontenerach została otwarta w bieżącej instancji zapisującej, ale nie została jeszcze zamknięta.
WEAVE_ERROR_INVALID_TLV_TAG
Jeśli podana wartość tagu jest nieprawidłowa lub nieodpowiednia w kontekście, w którym jest ona zapisywana.
WEAVE_ERROR_BUFFER_TOO_SMALL
Jeśli zapisanie wartości spowodowałoby przekroczenie limitu maksymalnej liczby bajtów określonej podczas zainicjowania zapisu.
WEAVE_ERROR_NO_MEMORY
Próba przydziału 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().

Ciąg znaków VPutStringF

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

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

PutStringF to odpowiednik 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, funkcja może przekazywać ciąg wynikowy do nieciągłej pamięci bazowej. Implementacja obsługuje te ulepszenia Printf:

Platforma dostarcza wywołanie zwrotne vcbprintf, które umożliwia wywołanie niestandardowego wywołania zwrotnego w miejscu metody putchar.

Platforma dostarcza wariant vsnprintf o nazwie vsnprintf_ex, który działa dokładnie tak samo jak vsnprintf, ale zawiera zasady pomijania pierwszych n znaków w wynikach.

Pamiętaj, że chociaż funkcja oparta na wywołaniu zwrotnym może być najprostsza i zawierać najmniejszą ilość kodu, różne funkcje vsprintf_ex zajmują mniej stosu.

Jeśli żadna z tych opcji nie jest dostępna, ale platforma udostępnia malloc, funkcja przydzieli tymczasowy bufor do przechowywania danych wyjściowych. Gdy platforma nie dostarcza ulepszeń do rodziny wydruków ani zestawu Malloc, dane wyjściowe są obcinane w taki sposób, aby pasowały do ciągłego stanu pamięci masowej TLV.

Szczegóły
Parametry
[in] tag
Tag TLV zakodowany 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 sformatowania listy argumentów. Obowiązują te same zasady i składnia co w przypadku ciągu formatu w przypadku rodziny funkcji printf.
[in] ap
Lista argumentów, które mają być sformatowane w wartości wyjściowej zgodnie z fmt.
Zwracane wartości
WEAVE_NO_ERROR
Jeśli to się uda,
other
Jeśli podstawowe wywołania metod TLVWriter WriteElementHead lub GetNewBuffer nie powiodły się, błąd jest natychmiast przekazywany do stosu wywołań.

Publiczne funkcje statyczne

FinalizePacketBuffer

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

Implementacja funkcji FinalizeBuffer TLVWriter służąca do zapisu w łańcuchu PacketBuffer.

Funkcja FinalizePacketBuffer() wykonuje niezbędną finalizację, która jest wymagana podczas zapisu w łańcuchu PacketBuffer za pomocą obiektu TLVWriter. Ta funkcja jest przeznaczona do użycia 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 do zapisu w dynamicznym buforze.

Funkcja GetNewBuffer_Malloced() dostarcza nową przestrzeń wyjściową do obiektu TLVWriter, podwajając rozmiar bazowego bufora dynamicznego zgodnie z potrzebą do zapisania kodowania. Funkcja powinna zostać przypisana 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 do zapisu w łańcuchu pakietów PacketBuffer.

Funkcja GetNewPacketBuffer() dostarcza nową przestrzeń wyjściową do obiektu TLVWriter, przypisując łańcuch co najmniej jednego bufora pakietów do przechowywania kodowania. Funkcja powinna zostać przypisana do wskaźnika funkcji TLVWriter GetNewBuffer.

Pamiętaj, że jeśli używasz metody GetNewPacketBuffer z metodą TLVWriter, do finalizacji łańcucha bufora należy też 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 

Ustal, czy kontener powinien zarezerwować miejsce na symbol Zamknij kontener na etapie jego uruchamiania lub otwierania.

IsContainerOpen

bool IsContainerOpen(
  void
) const 

SetCloseContainerReserved

void SetCloseContainerReserved(
  bool aCloseContainerReserved
)

Określ, czy kontener ma rezerwować miejsce na symbol Zamknij kontener na etapie jego uruchamiania lub otwierania.

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
)