En Google, luchamos por la equidad racial de la comunidad negra. Más información

nl :: Tejido:: Perfiles: DataManagement_Current

Este espacio de nombres incluye todas las interfaces dentro de Weave para el perfil Weave Data Management (WDM) que actualmente son compatibles con el uso de producción.

Resumen

Enumeraciones

@100 {
kTag_Region = 1,
kTag_Message = 2
}
enumeración
Etiquetas para kNestDebug_StringLogEntryEvent.
@101 {
kTag_Token = 1,
kTag_Args = 2
}
enumeración
Etiquetas para kNestDebug_TokenizedLogEntryEvent.
@102 enumeración
Etiquetas para eventos persistentes.
@104 enumeración
Los tipos de mensajes del perfil WDM.
@105 enumeración
Códigos de estado específicos de WDM.
@147 enumeración
@95 {
kTag_CurrentImportance = 1,
kTag_ImportanceExpiration ,
kTag_MinimumLogUploadInterval ,
kTag_MaximumLogUploadInterval ,
kTag_LoggingDestination ,
kTag_TraitLoggingImportance
}
enumeración
Registro de etiquetas Configuración.
@96 {
kTag_SupportedLogTransports = 1,
kTag_SupportsStreaming = 2,
kTag_SupportsNonVolatileStorage = 3,
kTag_SupportsPerTraitVerbosity = 4,
kTag_LoggingVolume = 5,
kTag_LogBufferingCapacity = 6
}
enumeración
Etiquetas para capacidades de registro.
@97 {
kTag_EventSource = 1,
kTag_EventImportance = 2,
kTag_EventID = 3,
kTag_RelatedEventImportance = 10,
kTag_RelatedEventID = 11,
kTag_EventUTCTimestamp = 12,
kTag_EventSystemTimestamp = 13,
kTag_EventResourceID = 14,
kTag_EventTraitProfileID = 15,
kTag_EventTraitInstanceID = 16,
kTag_EventType = 17,
kTag_EventDeltaUTCTime = 30,
kTag_EventDeltaSystemTime = 31,
kTag_EventData = 50,
kTag_ExternalEventStructure = 99
}
enumeración
Etiquetas para metadatos de eventos.
@98 enumeración
Definiciones de perfil para el rasgo de depuración.
@99 {
kNestDebug_StringLogEntryEvent = 1,
kNestDebug_TokenizedLogEntryEvent = 2,
kNestDebug_TokenizedHeaderEntryEvent = 3
}
enumeración
Tipos de eventos para el rasgo Nest Debug.
CommandFlags {
kCommandFlag_MustBeVersionValid = 0x0001,
kCommandFlag_InitiationTimeValid = 0x0002,
kCommandFlag_ActionTimeValid = 0x0004,
kCommandFlag_ExpiryTimeValid = 0x0008,
kCommandFlag_IsOneWay = 0x0010
}
enumeración
ImportanceType {
ProductionCritical = 1,
Production ,
Info ,
Debug
}
enumeración
La importancia de la entrada del registro.
LoggingManagementStates {
kLoggingManagementState_Idle = 1,
kLoggingManagementState_InProgress = 2,
kLoggingManagementState_Holdoff = 3,
kLoggingManagementState_Shutdown = 4
}
enumeración
TimestampType enumeración
La validez y el tipo de marca de tiempo incluidos en EventOptions .

Typedefs

CommandFlags typedef
DataVersion typedef
uint64_t
EventProcessor typedef
void *
EventWriterFunct )(nl::Weave::TLV::TLVWriter &ioWriter, uint8_t inDataTag, void *appData) typedef
Una función que proporciona el elemento eventData para el subsistema de registro de eventos.
FetchExternalEventsFunct )(EventLoadOutContext *aContext) typedef
Un prototipo de función para devoluciones de llamada de plataforma que obtienen datos de eventos.
GenericTraitSinkCatalog typedef
GenericTraitSourceCatalog typedef
ImportanceType typedef
La importancia de la entrada del registro.
IteratorCallback )(void *aTraitInstance, TraitDataHandle aHandle, void *aContext) typedef
void(*
Iterador de control de rasgo.
LoggingBufferHandler )(void *inAppState, PacketBuffer *inBuffer) typedef
NotifyExternalEventsDeliveredFunct )(ExternalEvents *inEv, event_id_t inLastDeliveredEventID, uint64_t inRecipientNodeID) typedef
void(*
Un prototipo de función para una devolución de llamada que se invoca cuando se entregan eventos externos al suscriptor remoto.
NotifyExternalEventsEvictedFunct )(ExternalEvents *inEv) typedef
void(*
Un prototipo de función para una devolución de llamada que se invoca cuando los eventos externos se expulsan de los búferes.
PropertyDictionaryKey typedef
uint16_t
PropertyPathHandle typedef
uint32_t
Un PropertyPathHandle es un hash numérico único de 32 bits de una ruta WDM relativa a la raíz de una instancia de rasgo.
PropertySchemaHandle typedef
uint16_t
SchemaVersion typedef
uint16_t
SingleResourceSinkTraitCatalog typedef
SingleResourceSourceTraitCatalog typedef
TimestampType typedef
La validez y el tipo de marca de tiempo incluidos en EventOptions .
TraitDataHandle typedef
uint16_t
duration_t nl :: Weave :: Profiles :: DataManagement_Current :: duration_t
uint32_t
Tipo utilizado para describir la duración, en milisegundos.
event_id_t nl :: Weave :: Perfiles :: DataManagement_Current :: event_id_t
uint32_t
El tipo de ID de evento.
timestamp_t nl :: Weave :: Profiles :: DataManagement_Current :: timestamp_t
uint32_t
Tipo utilizado para describir la marca de tiempo en milisegundos.
utc_timestamp_t nl :: Weave :: Profiles :: DataManagement_Current :: utc_timestamp_t
uint64_t
Tipo utilizado para describir la marca de tiempo UTC en milisegundos.

Variables

sInstance
sLogFileName = "topazlog"[]
char

Funciones

BdxErrorHandler (nl::Weave::Profiles::BulkDataTransfer::BDXTransfer *aXfer, WEAVE_ERROR aErrorCode)
void
BdxGetBlockHandler (nl::Weave::Profiles::BulkDataTransfer::BDXTransfer *aXfer, uint64_t *aLength, uint8_t **aDataBlock, bool *aIsLastBlock)
void
BdxRejectHandler (nl::Weave::Profiles::BulkDataTransfer::BDXTransfer *aXfer, nl::Weave::Profiles::StatusReporting::StatusReport *aReport)
void
BdxSendAcceptHandler (nl::Weave::Profiles::BulkDataTransfer::BDXTransfer *aXfer, nl::Weave::Profiles::BulkDataTransfer::SendAccept *aSendAcceptMsg)
BdxXferDoneHandler (nl::Weave::Profiles::BulkDataTransfer::BDXTransfer *aXfer)
void
BdxXferErrorHandler (nl::Weave::Profiles::BulkDataTransfer::BDXTransfer *aXfer, nl::Weave::Profiles::StatusReporting::StatusReport *aXferError)
void
CreatePropertyPathHandle (PropertySchemaHandle aPropertyPathSchemaId, PropertyDictionaryKey aPropertyPathDictionaryKey)
EventWriterTLVCopy (TLVWriter & ioWriter, uint8_t inDataTag, void *appData)
Una función auxiliar que traduce un elemento eventdata ya serializado al búfer de eventos.
GetPropertyDictionaryKey ( PropertyPathHandle aHandle)
PropertyDictionaryKey
GetPropertySchemaHandle ( PropertyPathHandle aHandle)
PropertySchemaHandle
IsNullPropertyPathHandle ( PropertyPathHandle aHandle)
bool
IsRootPropertyPathHandle ( PropertyPathHandle aHandle)
bool
IsVersionNewer (const DataVersion & aVersion, const DataVersion & aReference)
bool
Esta es una implementación optimizada del algoritmo para comparar versiones.
IsVersionNewerOrEqual (const DataVersion & aVersion, const DataVersion & aReference)
bool
Locate (TraitDataHandle aTraitDataHandle, const TraitCatalogBase < TraitDataSink > *aDataSinkCatalog)
Función de utilidad que encuentra un TraitUpdatableDataSink en un TraitDataSink catálogo.
LogEvent (const EventSchema & inSchema,nl::Weave::TLV::TLVReader & inData)
Registre un evento desde un formulario previamente serializado.
LogEvent (const EventSchema & inSchema,nl::Weave::TLV::TLVReader & inData, const EventOptions *inOptions)
Registre un evento desde un formulario previamente serializado, con opciones adicionales.
LogEvent (const EventSchema & inSchema, EventWriterFunct inEventWriter, void *inAppData)
Registre un evento a través de una devolución de llamada.
LogEvent (const EventSchema & inSchema, EventWriterFunct inEventWriter, void *inAppData, const EventOptions *inOptions)
Registre un evento a través de una devolución de llamada, con opciones.
LogFreeform ( ImportanceType inImportance, const char *inFormat, ...)
LogFreeform emite una cadena de formato libre al flujo de eventos predeterminado.
LookForElementWithTag (constnl::Weave::TLV::TLVReader & aSrcReader, const uint64_t aTagInApiForm,nl::Weave::TLV::TLVReader *apDstReader)
PlainTextWriter (TLVWriter & ioWriter, uint8_t inDataTag, void *appData)
Una función auxiliar para emitir un texto de forma libre como evento de depuración.
PlainTextWriter (::nl::Weave::TLV::TLVWriter & ioWriter, uint8_t inDataTag, void *appData)
Una función auxiliar para emitir un texto de forma libre como evento de depuración.
operator!= (const ResourceIdentifier & lhs, const ResourceIdentifier & rhs)
bool
operator== (const ResourceIdentifier & lhs, const ResourceIdentifier & rhs)
bool

Clases

nl :: Armadura :: Perfiles :: :: DataManagement_Current AlwaysAcceptDataElementAccessControlDelegate
nl :: Armadura :: Perfiles :: :: DataManagement_Current BuilderBase

Clase base para codificadores de mensajes WDM.

nl :: Armadura :: Perfiles :: :: DataManagement_Current CircularEventReader

Un TLVReader respaldado por CircularEventBuffer .

nl :: Armadura :: Perfiles :: :: Comando DataManagement_Current
nl :: Armadura :: Perfiles :: :: DataManagement_Current CommandSender
nl :: Armadura :: Perfiles :: :: DataManagement_Current GenericTraitCatalogImpl

Una armadura proporcionado aplicación de la TraitCatalogBase interfaz para una colección de instancias de datos de rasgos que se refieren todos al mismo recurso.

nl :: Armadura :: Perfiles :: :: DataManagement_Current IDataElementAccessControlDelegate

Interfaz que debe implementar un procesador de elementos de datos en una NotifyRequest.

nl :: Armadura :: Perfiles :: :: DataManagement_Current IDirtyPathCut
nl :: Armadura :: Perfiles :: :: DataManagement_Current IPathFilter
nl :: Armadura :: Perfiles :: :: DataManagement_Current IWeavePublisherLock

Interfaz que la aplicación implementará para serializar el acceso a las estructuras de datos clave de WDM.

nl :: Armadura :: Perfiles :: :: DataManagement_Current IWeaveWDMMutex

Interfaz de un objeto mutex.

nl :: Armadura :: Perfiles :: :: DataManagement_Current ListBuilderBase

Clase base para codificadores de mensajes WDM, especializados en TLV elementos de la matriz como Listas de Datos y Listas de versión.

nl :: Armadura :: Perfiles :: :: DataManagement_Current ListParserBase

Clase base para programas de análisis de mensajes WDM, especializados en TLV elementos de la matriz como Listas de Datos y Listas de versión.

nl :: Armadura :: Perfiles :: :: DataManagement_Current LogBDXUpload
nl :: Armadura :: Perfiles :: :: DataManagement_Current LoggingConfiguration

LoggingConfiguration encapsula el componente configurable de la armadura del evento de registro de subsistema.

nl :: Armadura :: Perfiles :: :: DataManagement_Current LoggingManagement

Una clase para administrar los registros de eventos en memoria.

nl :: Armadura :: Perfiles :: :: DataManagement_Current NotificationEngine
nl :: Armadura :: Perfiles :: :: DataManagement_Current ParserBase

Clase base para analizadores de mensajes WDM.

nl :: Armadura :: Perfiles :: :: DataManagement_Current ResourceIdentifier

Una estructura que encapsula el ID de un recurso.

nl :: Armadura :: Perfiles :: :: DataManagement_Current SingleResourceTraitCatalog
nl :: Armadura :: Perfiles :: :: DataManagement_Current SubscriptionClient
nl :: Armadura :: Perfiles :: :: DataManagement_Current SubscriptionEngine

Este es un singleton que aloja todas las suscripciones de WDM Next, tanto del lado del cliente como del editor.

nl :: Armadura :: Perfiles :: :: DataManagement_Current SubscriptionHandler
nl :: Armadura :: Perfiles :: :: DataManagement_Current TraitCatalogBase
nl :: Armadura :: Perfiles :: :: DataManagement_Current TraitDataSink
nl :: Armadura :: Perfiles :: :: DataManagement_Current TraitDataSource
nl :: Armadura :: Perfiles :: :: DataManagement_Current TraitSchemaEngine

El motor de esquema toma la información del esquema asociada con un rasgo particular y proporciona facilidades para analizar y traducir eso en una forma utilizable por la maquinaria WDM.

nl :: Armadura :: Perfiles :: :: DataManagement_Current TraitUpdatableDataSink
nl :: Armadura :: Perfiles :: :: DataManagement_Current UpdateClient
nl :: Armadura :: Perfiles :: :: DataManagement_Current UpdateDictionaryDirtyPathCut

Clase de utilidad para volver a poner el diccionario en la cola pendiente cuando se procesa la ruta de la propiedad que tiene el hijo del diccionario.

nl :: Armadura :: Perfiles :: :: DataManagement_Current UpdateDirtyPathFilter

Clase de utilidad para filtrar la ruta al manejar la notificación.

nl :: Armadura :: Perfiles :: :: DataManagement_Current UpdateEncoder

Este objeto codifica WDM UpdateRequest y PartialUpdateRequest cargas útiles.

nl :: Armadura :: Perfiles :: :: DataManagement_Current ViewClient

Estructuras

nl :: Armadura :: Perfiles :: :: DataManagement_Current CircularEventBuffer

Memoria de eventos internos, construido alrededor del nl :: Armadura :: :: TLV WeaveCircularTLVBuffer .

nl :: Armadura :: Perfiles :: :: DataManagement_Current ConstSchemaVersionRange
nl :: Armadura :: Perfiles :: :: DataManagement_Current CopyAndAdjustDeltaTimeContext

Estructura interna para atravesar la lista de eventos.

nl :: Armadura :: Perfiles :: :: DataManagement_Current DebugLogContext
nl :: Armadura :: Perfiles :: :: DataManagement_Current DetailedRootSection

La estructura que proporciona una resolución completa de la instancia del rasgo.

nl :: Armadura :: Perfiles :: :: DataManagement_Current EventEnvelopeContext

Estructura interna para atravesar eventos.

nl :: Armadura :: Perfiles :: :: DataManagement_Current EventLoadOutContext

Estructura para copiar listas de eventos en la salida.

nl :: Armadura :: Perfiles :: :: DataManagement_Current EventOptions

La estructura que proporciona opciones para los diferentes campos de eventos.

nl :: Armadura :: Perfiles :: :: DataManagement_Current EventSchema

La estructura que define un esquema para los metadatos de eventos.

nl :: Armadura :: Perfiles :: :: DataManagement_Current ExternalEvents

Estructura para rastrear eventos almacenados en la plataforma.

nl :: Armadura :: Perfiles :: :: DataManagement_Current LogStorageResources

Una clase auxiliar que se utiliza para inicializar la gestión de registros.

nl :: Armadura :: Perfiles :: :: DataManagement_Current ReclaimEventCtx
nl :: Armadura :: Perfiles :: :: DataManagement_Current SchemaVersionRange
nl :: Armadura :: Perfiles :: :: DataManagement_Current TraitPath
nl :: Armadura :: Perfiles :: :: DataManagement_Current TraitPathStore
nl :: Armadura :: Perfiles :: :: DataManagement_Current VersionedTraitPath

Sindicatos

nl :: Armadura :: Perfiles :: DataManagement_Current :: Timestamp

La unión que proporciona un sistema de conjunto de aplicaciones o marca de tiempo UTC.

Espacios de nombres

nl :: Armadura :: Perfiles :: :: DataManagement_Current BaseMessageWithSubscribeId
nl :: Armadura :: Perfiles :: :: DataManagement_Current CustomCommand

WDM personalizada Comando definición.

nl :: Armadura :: Perfiles :: :: DataManagement_Current CustomCommandResponse

WDM personalizada Comando definición de respuesta.

nl :: Armadura :: Perfiles :: :: DataManagement_Current DataElement

Definición del elemento de datos WDM.

nl :: Armadura :: Perfiles :: :: DataManagement_Current DataList
nl :: Armadura :: Perfiles :: :: Evento DataManagement_Current
nl :: Armadura :: Perfiles :: :: DataManagement_Current EventList
nl :: Armadura :: Perfiles :: :: DataManagement_Current NotificationRequest
nl :: Armadura :: Perfiles :: :: Ruta DataManagement_Current

WDM Ruta definición.

nl :: Armadura :: Perfiles :: :: DataManagement_Current pathlist

WDM Ruta Definición de la lista.

nl :: Armadura :: Perfiles :: :: Plataforma DataManagement_Current
nl :: Armadura :: Perfiles :: :: DataManagement_Current RejectionRecord
nl :: Armadura :: Perfiles :: :: DataManagement_Current RejectionRecordList
nl :: Armadura :: Perfiles :: :: DataManagement_Current StatusElement

Definición del elemento de estado de WDM.

nl :: Armadura :: Perfiles :: :: DataManagement_Current StatusList
nl :: Armadura :: Perfiles :: :: DataManagement_Current SubscribeCancelRequest
nl :: Armadura :: Perfiles :: :: DataManagement_Current SubscribeConfirmRequest
nl :: Armadura :: Perfiles :: :: DataManagement_Current SubscribeRequest
nl :: Armadura :: Perfiles :: :: DataManagement_Current SubscribeResponse
nl :: Armadura :: Perfiles :: :: DataManagement_Current UpdateRequest

Definición de solicitud de actualización de WDM.

nl :: Armadura :: Perfiles :: :: DataManagement_Current UpdateResponse
nl :: Armadura :: Perfiles :: :: DataManagement_Current VersionList
nl :: Armadura :: Perfiles :: :: DataManagement_Current ViewRequest
nl :: Armadura :: Perfiles :: :: DataManagement_Current ViewResponse

Enumeraciones

@ 100

 @100

Etiquetas para kNestDebug_StringLogEntryEvent.

Propiedades
kTag_Message

Una cadena que contiene el mensaje de depuración real.

kTag_Region

Un sin firmar de 32 bits que indica la región de registro, es decir, el módulo al que pertenece el mensaje de registro.

@ 101

 @101

Etiquetas para kNestDebug_TokenizedLogEntryEvent.

Propiedades
kTag_Args

Una matriz de argumentos que se enviarán junto con el mensaje del token.

kTag_Token

Un valor sin firmar de 32 bits correspondiente al token.

@ 102

 @102

Etiquetas para eventos persistentes.

@ 104

 @104

Los tipos de mensajes del perfil WDM.

Estos valores se indican en la especificación de gestión de datos.

@ 105

 @105

Códigos de estado específicos de WDM.

@ 147

 @147

@ 95

 @95

Registro de etiquetas Configuración.

Propiedades
kTag_CurrentImportance

Importancia actual del registro, el valor es de tipo ImportanceType.

kTag_ImportanceExpiration

Hora, en segundos UTC, cuando la configuración de registro elevada actual vuelve a los valores predeterminados.

kTag_LoggingDestination

Una URL que indica el destino de la carga del registro.

kTag_MaximumLogUploadInterval

Duración máxima, en segundos, entre los intentos de carga de registros activados automáticamente.

kTag_MinimumLogUploadInterval

Duración mínima, en segundos, entre los intentos de carga de registros activados automáticamente.

kTag_TraitLoggingImportance

Una matriz opcional que asigna selectivamente los perfiles elegidos a los niveles de registro más altos.

Cada elemento de la matriz toma una forma (perfil, ruta, importancia del registro) para elevar selectivamente el registro de un subconjunto del sistema. La prioridad de registro de perfil elevado solo es importante cuando la prioridad de registro excede la de currentImportance y está sujeta al mismo tiempo de caducidad que currentImportance.

@ 96

 @96

Etiquetas para capacidades de registro.

Propiedades
kTag_LogBufferingCapacity

Un entero sin signo de 32 bits que describe la capacidad de almacenamiento en búfer del registro en kB.

kTag_LoggingVolume

Un entero sin signo de 32 bits que describe el volumen de registro esperado en kB / día.

kTag_SupportedLogTransports

Una variedad de mecanismos de transporte de registros admitidos.

kTag_SupportsNonVolatileStorage

Un valor booleano que indica si el dispositivo admite el almacenamiento de registros no volátil.

kTag_SupportsPerTraitVerbosity

Un valor booleano que indica si el dispositivo admite configuraciones de verbosidad por rasgo.

kTag_SupportsStreaming

Un valor booleano que indica si el dispositivo admite la transmisión de registros.

@ 97

 @97

Etiquetas para metadatos de eventos.

Para conocer la semántica completa de los valores de las etiquetas, consulte la Especificación de diseño de eventos.

Propiedades
kTag_EventData

Opcional. Datos del evento en sí. Si está vacío, por defecto es una estructura vacía.

kTag_EventDeltaSystemTime

Etiqueta interna WDM, diferencia horaria del evento anterior en la codificación.

kTag_EventDeltaUTCTime

Etiqueta interna WDM, diferencia horaria del evento anterior en la codificación.

kTag_EventID

Número de secuencia del evento, expresado como una cantidad sin firmar de 64 bits.

Debe ser secuencial, los saltos en la secuencia indican brechas de eventos.

kTag_EventImportance

Importancia del evento.

kTag_EventResourceID

Opcional.

El valor es el ID del recurso al que pertenece el evento. Cuando se omite, el valor es el mismo que el valor de kTag_EventSource

kTag_EventSource

NodeID del dispositivo que generó el evento.

kTag_EventSystemTimestamp

Opcional. Sistema de marca de tiempo del evento en milisegundos.

kTag_EventTraitInstanceID

Opcional, la instancia del rasgo que generó el evento.

kTag_EventTraitProfileID

Obligatorio. Entero sin signo de 32 bits que es igual al ProfileID del rasgo.

kTag_EventType

Obligatorio. Entero de 16 bits sin signo que es igual al wdl.event.id para este tipo de evento.

kTag_EventUTCTimestamp

Opcional. UTC Marca de tiempo del evento en milisegundos.

kTag_ExternalEventStructure

Etiqueta interna para eventos externos. Nunca se transmite a través del cable, nunca debe usarse fuera de la biblioteca Weave.

kTag_RelatedEventID

Opcional.

ID de un evento con el que está relacionado este evento. Si se omite, el valor es igual al valor de kTag_EventID.

kTag_RelatedEventImportance

Opcional.

Importancia del evento relacionado. Si se omite, el valor es igual al valor de kTag_EventImportance.

@ 98

 @98

Definiciones de perfil para el rasgo de depuración.

@ 99

 @99

Tipos de eventos para el rasgo Nest Debug.

Propiedades
kNestDebug_StringLogEntryEvent

Un evento para el mensaje de depuración de cadenas de forma libre.

kNestDebug_TokenizedHeaderEntryEvent

Un evento para transmitir la información del encabezado tokenizada.

kNestDebug_TokenizedLogEntryEvent

Un evento para el mensaje de depuración tokenizado.

CommandFlags

 CommandFlags
Propiedades
kCommandFlag_ActionTimeValid

Establecer cuándo es válido el tiempo de acción.

kCommandFlag_ExpiryTimeValid

Establecer cuándo es válido el tiempo de caducidad.

kCommandFlag_InitiationTimeValid

Establecer cuándo es válida la hora de inicio.

kCommandFlag_IsOneWay

Se establece cuando el comando es unidireccional.

kCommandFlag_MustBeVersionValid

Establecer cuándo el campo de la versión es válido.

ImportanceType

 ImportanceType

La importancia de la entrada del registro.

La importancia se utiliza como una forma de filtrar eventos antes de que realmente se emitan en el registro. Una vez que el evento está en el registro, no tomamos más disposiciones para eliminarlo del registro. El nivel de importancia sirve para priorizar el almacenamiento de eventos. Si se agrega un evento de gran importancia a un búfer completo, los eventos se eliminan en orden de importancia (y antigüedad) para acomodarlo. Como tal, los niveles de importancia solo tienen un valor relativo. Si un sistema usa solo un nivel de importancia, los eventos se eliminan solo en orden de antigüedad, como un búfer de anillo.

Propiedades
Debug

La importancia de la depuración indica las entradas de registro de interés para los desarrolladores del sistema y se utiliza principalmente en la fase de desarrollo.

Los registros de importancia de la depuración no se tienen en cuenta en los presupuestos de ancho de banda o energía de los dispositivos restringidos; como resultado, deben usarse solo durante un período de tiempo limitado en los sistemas de producción.

Info

La importancia de la información denota entradas de registro que brindan información adicional y diagnósticos del sistema en ejecución.

El nivel de registro de información puede usarse durante un período prolongado de tiempo en un sistema de producción, o puede usarse como el nivel de registro predeterminado en una prueba de campo. En los dispositivos restringidos, las entradas registradas con el nivel de información deben contabilizarse en el presupuesto de ancho de banda y memoria, pero no en el presupuesto de energía.

Production

La importancia de la producción denota las entradas de registro que se utilizan en el seguimiento y mantenimiento continuos del ecosistema Nest.

En dispositivos restringidos, las entradas registradas con importancia de producción deben contabilizarse en el presupuesto de energía y memoria, ya que se espera que siempre se registren y descarguen del dispositivo.

ProductionCritical

Producción La importancia crítica denota eventos cuya pérdida afectaría directamente las características de cara al cliente.

Las aplicaciones pueden utilizar la pérdida de eventos críticos de producción para indicar una falla del sistema. En dispositivos restringidos, las entradas registradas con importancia crítica de producción deben tenerse en cuenta en el presupuesto de energía y memoria, ya que se espera que siempre se registren y descarguen del dispositivo.

LoggingManagementStates

 LoggingManagementStates
Propiedades
kLoggingManagementState_Holdoff

Se completó la descarga de registro; no reiniciamos el registro hasta que expira el tiempo de espera.

kLoggingManagementState_Idle

No hay descarga de registros en curso, la descarga de registros puede comenzar sin restricciones.

kLoggingManagementState_InProgress

Descarga de registro en curso.

kLoggingManagementState_Shutdown

No es capaz de realizar ninguna operación de registro.

TimestampType

 TimestampType

La validez y el tipo de marca de tiempo incluidos en EventOptions .

Typedefs

CommandFlags

enum nl::Weave::Profiles::DataManagement_Current::CommandFlags CommandFlags

DataVersion

uint64_t DataVersion

Procesador de eventos

void * EventProcessor

EventWriterFunct

WEAVE_ERROR(* EventWriterFunct)(nl::Weave::TLV::TLVWriter &ioWriter, uint8_t inDataTag, void *appData)

Una función que proporciona el elemento eventData para el subsistema de registro de eventos.

Se espera que las funciones de este tipo proporcionen el elemento eventData para el subsistema de registro de eventos. Las funciones de este tipo se llaman después de que el subsistema de eventos haya generado todos los metadatos de eventos requeridos. La función se llama con unnl :: Weave :: TLV :: TLVWriter objeto en el que se emitirá un solo TLV elemento etiquetada kTag_EventData; el valor de ese elemento DEBE ser una estructura que contenga los datos del evento. Los datos del evento en sí deben estructurarse mediante etiquetas de contexto.

Detalles
Parámetros
[in,out] ioWriter
Una referencia a lanl :: Weave :: TLV :: TLVWriter objeto a ser utilizado para la serialización de datos de eventos.
[in] inDataTag
Una etiqueta de contexto para el TLV estamos escribiendo.
[in] appData
Un puntero a un contexto específico de la aplicación.
Valores devueltos
WEAVE_NO_ERROR
Sobre el éxito.
other
Un error apropiado que indica a la persona que llama que no se pudo completar la serialización de los datos del evento. Los errores de las llamadas al ioWriter deben propagarse sin reasignar. Si la función devuelve algún tipo de error, la generación del evento se cancela y el evento no se escribe en el registro.
Ver también:
PlainTextWriter
EventWriterTLVCopy

FetchExternalEventsFunct

WEAVE_ERROR(* FetchExternalEventsFunct)(EventLoadOutContext *aContext)

Un prototipo de función para devoluciones de llamada de plataforma que obtienen datos de eventos.

Al igual que en FetchEventsSince, esta función de captación devuelve todos los eventos de EventLoadOutContext.mStartingEventID través ExternalEvents.mLastEventID .

El puntero de contexto es de tipo FetchExternalEventsContext. Esto incluye la EventLoadOutContext , con algunas variables de ayuda para el formato del TLV . También incluye un puntero a los ExternalEvents estructura creadas en el registro de la devolución de llamada. Esto especifica el rango de ID de evento para la devolución de llamada.

Al volver de la función, EventLoadOutContext.mCurrentEventID debe reflejar el primer identificador de evento que no se ha escrito correctamente en el TLV de amortiguamiento. La plataforma debe escribir el encabezado de eventos y datos a la TLV escritor en el formato correcto, especificado por el protocolo EventLogging. La plataforma también debe mantener la singularidad de los eventos y las marcas de tiempo.

Todos TLV errores se deben propagar a niveles más altos. Por ejemplo, quedarse sin espacio en el búfer activará un mensaje enviado, seguido de otra llamada a la devolución de llamada con el ID de evento que quede.

Detalles
Valores devueltos
WEAVE_ERROR_NO_MEMORY
Si no hay espacio para escribir eventos.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si no hay espacio para escribir eventos.
WEAVE_NO_ERROR
Sobre el éxito.
WEAVE_END_OF_TLV
Sobre el éxito.

GenéricoRetratoFregaderoCatálogo

GenericTraitCatalogImpl< TraitDataSink > GenericTraitSinkCatalog

GenericTraitSourceCatalog

GenericTraitCatalogImpl< TraitDataSource > GenericTraitSourceCatalog

ImportanceType

enum nl::Weave::Profiles::DataManagement_Current::ImportanceType ImportanceType

La importancia de la entrada del registro.

La importancia se utiliza como una forma de filtrar eventos antes de que realmente se emitan en el registro. Una vez que el evento está en el registro, no tomamos más disposiciones para eliminarlo del registro. El nivel de importancia sirve para priorizar el almacenamiento de eventos. Si se agrega un evento de gran importancia a un búfer completo, los eventos se eliminan en orden de importancia (y antigüedad) para acomodarlo. Como tal, los niveles de importancia solo tienen un valor relativo. Si un sistema usa solo un nivel de importancia, los eventos se eliminan solo en orden de antigüedad, como un búfer de anillo.

IteratorCallback

void(* IteratorCallback)(void *aTraitInstance, TraitDataHandle aHandle, void *aContext)

Iterador de control de rasgo.

LoggingBufferHandler

WEAVE_ERROR(* LoggingBufferHandler)(void *inAppState, PacketBuffer *inBuffer)

NotifyExternalEventsDeliveredFunct

void(* NotifyExternalEventsDeliveredFunct)(ExternalEvents *inEv, event_id_t inLastDeliveredEventID, uint64_t inRecipientNodeID)

Un prototipo de función para una devolución de llamada que se invoca cuando se entregan eventos externos al suscriptor remoto.

Cuando los eventos externos se envían a un suscriptor remoto, el motor proporcionará una notificación al proveedor de eventos externos. La devolución de llamada contiene el evento del último ID que se entregó y el ID del suscriptor que recibió el evento.

Detalles
Parámetros
[in] inEv
Objeto de eventos externos correspondiente a eventos entregados
[in] inLastDeliveredEventID
ID del último evento entregado al suscriptor.
[in] inRecipientNodeID
ID de nodo de tejido del destinatario

NotifyExternalEventsEvictedFunct

void(* NotifyExternalEventsEvictedFunct)(ExternalEvents *inEv)

Un prototipo de función para una devolución de llamada que se invoca cuando los eventos externos se expulsan de los búferes.

Cuando el objeto de eventos externos se desaloja del búfer de mensajes salientes, el motor proporcionará una notificación al proveedor de eventos externos. La devolución de llamada contiene el evento externo que se va a desalojar.

Detalles
Parámetros
[in] inEv
Objeto de eventos externos a desalojar

PropertyDictionaryKey

uint16_t PropertyDictionaryKey

PropertyPathHandle

uint32_t PropertyPathHandle

Un PropertyPathHandle es un hash numérico único de 32 bits de una ruta WDM relativa a la raíz de una instancia de rasgo.

Tiene dos partes:

  • Un número inferior de 16 bits que se asigna a la parte estática del esquema.
  • Cuando los 16 bits inferiores se refieren a una ruta dentro de un elemento del diccionario, hay un número superior de 16 bits que representa la clave del diccionario asociada con ese elemento. Si los 16 bits inferiores se refieren a un elemento que no es del diccionario, los 16 bits superiores deben ser 0.

Algunas caracteristicas:

  • Cada rasgo tiene su propio espacio de manejo de ruta de propiedad.
  • Cada ruta de acceso secundaria WDM única tendrá un PropertyPathHandle igualmente único.
  • PropertyPathHandles se genera automáticamente (hecho a mano por ahora) por un compilador de rasgos de IDL y se representa como una lista de enumeradores en el archivo de encabezado del rasgo correspondiente.
  • Con esta construcción, la lógica de la aplicación nunca tiene que lidiar con las rutas WDM directamente. Más bien, sus interacciones con WDM se llevan a cabo exclusivamente a través de estos identificadores.
  • Hay dos valores reservados para los identificadores de ruta que tienen un significado específico:
    • 0 indica un identificador 'NULL'
    • 1 indica un identificador que apunta a la raíz de la instancia del rasgo.

PropertySchemaHandle

uint16_t PropertySchemaHandle

SchemaVersion

uint16_t SchemaVersion

SingleResourceSinkTraitCatalog

SingleResourceTraitCatalog< TraitDataSink > SingleResourceSinkTraitCatalog

SingleResourceSourceTraitCatalog

SingleResourceTraitCatalog< TraitDataSource > SingleResourceSourceTraitCatalog

TimestampType

enum nl::Weave::Profiles::DataManagement_Current::TimestampType TimestampType

La validez y el tipo de marca de tiempo incluidos en EventOptions .

TraitDataHandle

uint16_t TraitDataHandle

duración_t

uint32_t duration_t

Tipo utilizado para describir la duración, en milisegundos.

event_id_t

uint32_t event_id_t

El tipo de ID de evento.

timestamp_t

uint32_t timestamp_t

Tipo utilizado para describir la marca de tiempo en milisegundos.

utc_timestamp_t

uint64_t utc_timestamp_t

Tipo utilizado para describir la marca de tiempo UTC en milisegundos.

Variables

sInstance

LoggingManagement sInstance

sLogFileName

char sLogFileName[] = "topazlog"

Funciones

BdxErrorHandler

void BdxErrorHandler(
  nl::Weave::Profiles::BulkDataTransfer::BDXTransfer *aXfer,
  WEAVE_ERROR aErrorCode
)

BdxGetBlockHandler

void BdxGetBlockHandler(
  nl::Weave::Profiles::BulkDataTransfer::BDXTransfer *aXfer,
  uint64_t *aLength,
  uint8_t **aDataBlock,
  bool *aIsLastBlock
)

BdxRejectHandler

void BdxRejectHandler(
  nl::Weave::Profiles::BulkDataTransfer::BDXTransfer *aXfer,
  nl::Weave::Profiles::StatusReporting::StatusReport *aReport
)

BdxSendAcceptHandler

WEAVE_ERROR BdxSendAcceptHandler(
  nl::Weave::Profiles::BulkDataTransfer::BDXTransfer *aXfer,
  nl::Weave::Profiles::BulkDataTransfer::SendAccept *aSendAcceptMsg
)

BdxXferDoneHandler

void BdxXferDoneHandler(
  nl::Weave::Profiles::BulkDataTransfer::BDXTransfer *aXfer
)

BdxXferErrorHandler

void BdxXferErrorHandler(
  nl::Weave::Profiles::BulkDataTransfer::BDXTransfer *aXfer,
  nl::Weave::Profiles::StatusReporting::StatusReport *aXferError
)

CreatePropertyPathHandle

PropertyPathHandle CreatePropertyPathHandle(
  PropertySchemaHandle aPropertyPathSchemaId,
  PropertyDictionaryKey aPropertyPathDictionaryKey
)

EventWriterTLVCopy

WEAVE_ERROR EventWriterTLVCopy(
  TLVWriter & ioWriter,
  uint8_t inDataTag,
  void *appData
)

Una función auxiliar que traduce un elemento eventdata ya serializado al búfer de eventos.

Detalles
Parámetros
[in,out] ioWriter
El escritor que se utilizará para escribir el evento.
[in] inDataTag
Una etiqueta de contexto para el TLV estamos copiando. No se usa aquí, pero es requerido por typedef para EventWriterFunct.
[in] appData
Un puntero al TLVReader que contiene datos de eventos serializados.
Valores devueltos
WEAVE_NO_ERROR
Sobre el éxito.
other
Otros errores que pueden ser devueltos por ioWriter.

GetPropertyDictionaryKey

PropertyDictionaryKey GetPropertyDictionaryKey(
  PropertyPathHandle aHandle
)

GetPropertySchemaHandle

PropertySchemaHandle GetPropertySchemaHandle(
  PropertyPathHandle aHandle
)

IsNullPropertyPathHandle

bool IsNullPropertyPathHandle(
  PropertyPathHandle aHandle
)

IsRootPropertyPathHandle

bool IsRootPropertyPathHandle(
  PropertyPathHandle aHandle
)

IsVersionNewer

bool IsVersionNewer(
  const DataVersion & aVersion,
  const DataVersion & aReference
)

Esta es una implementación optimizada del algoritmo para comparar versiones.

Del lado del cliente, una versión recibida del servicio es siempre la más reciente.

IsVersionNewerOrEqual

bool IsVersionNewerOrEqual(
  const DataVersion & aVersion,
  const DataVersion & aReference
)

Localizar

TraitUpdatableDataSink * Locate(
  TraitDataHandle aTraitDataHandle,
  const TraitCatalogBase< TraitDataSink > *aDataSinkCatalog
)

Función de utilidad que encuentra un TraitUpdatableDataSink en un TraitDataSink catálogo.

Detalles
Parámetros
[in] aTraitDataHandle
Asa del fregadero para buscar.
[in] aDataSinkCatalog
Catálogo para buscar.
Devoluciones
Un puntero a la TraitUpdatableDataSink ; NULL si el mango no existe o que apunta a un no actualizable TraitDataSink .

LogEvent

event_id_t LogEvent(
  const EventSchema & inSchema,
  nl::Weave::TLV::TLVReader & inData
)

Registre un evento desde un formulario previamente serializado.

La función registra un evento representado como unnl :: Weave :: TLV :: TLVReader . Esto implica que la representación de datos de eventos ya se serializa en el almacenamiento subyacente a lanl :: Armadura :: :: TLV TLVReader . Lanl :: Armadura :: :: TLV TLVReader se espera que contenga al menos un elemento de datos, ese elemento debe ser una estructura. El primer elemento leído del lector se trata como datos de eventos y se almacena en el registro de eventos. Los datos del evento DEBEN contener etiquetas de contexto para ser interpretadas dentro del esquema identificado por inProfileID e inEventType. Se ignorará la etiqueta del primer elemento; el sistema de registro de eventos lo reemplazará con la etiqueta eventData.

El evento se registra si su inImportance supera el umbral de registro especificado en el LoggingConfiguration . Si la importancia del evento no cumple con el umbral actual, se cae y la función devuelve un 0 como el identificador de evento resultante.

Esta variante de la invocación especifica implícitamente todas las opciones de eventos predeterminadas:

  • el evento tiene una marca de tiempo con la hora actual en el momento de la llamada,
  • el evento está marcado como relacionado con el dispositivo que está realizando la llamada,
  • el evento es independiente, no está relacionado con ningún otro evento,
  • el evento está marcado como no urgente,

Detalles
Parámetros
[in] inSchema
Esquema de definición de importancia, el ID del perfil y el tipo de estructura de este evento.
[in] inData
El TLV lector que contiene los datos de eventos como el primer elemento.
Devoluciones
event_id_t El ID del evento si el evento se escribió en el registro, 0 en caso contrario.

LogEvent

event_id_t LogEvent(
  const EventSchema & inSchema,
  nl::Weave::TLV::TLVReader & inData,
  const EventOptions *inOptions
)

Registre un evento desde un formulario previamente serializado, con opciones adicionales.

La función registra un evento representado como unnl :: Weave :: TLV :: TLVReader . Esto implica que la representación de datos de eventos ya se serializa en el almacenamiento subyacente a lanl :: Armadura :: :: TLV TLVReader . Lanl :: Armadura :: :: TLV TLVReader se espera que contenga al menos un elemento de datos, ese elemento debe ser una estructura. El primer elemento leído del lector se trata como datos de eventos y se almacena en el registro de eventos. Los datos del evento DEBEN contener etiquetas de contexto para ser interpretadas dentro del esquema identificado por inProfileID e inEventType. Se ignorará la etiqueta del primer elemento; el sistema de registro de eventos lo reemplazará con la etiqueta eventData.

El evento se registra si su inImportance supera el umbral de registro especificado en el LoggingConfiguration . Si la importancia del evento no cumple con el umbral actual, se cae y la función devuelve un 0 como el identificador de evento resultante.

Esta variante de la invocación permite que la persona que llama para establecer cualquier combinación de EventOptions :

  • marca de tiempo, cuando 0 por defecto es la hora actual en el punto de la llamada,
  • sección "raíz" del origen del evento (origen del evento e ID de rasgo); si es NULL, toma el dispositivo actual de forma predeterminada. el evento está marcado como relacionado con el dispositivo que está haciendo la llamada,
  • un ID de evento relacionado para agrupar ID de eventos; cuando el ID de evento relacionado es 0, el evento se marca como no relacionado con ningún otro evento,
  • urgencia; por defecto no urgente.

Detalles
Parámetros
[in] inSchema
Esquema de definición de importancia, el ID del perfil y el tipo de estructura de este evento.
[in] inData
El TLV lector que contiene los datos de eventos como el primer elemento. No debe ser nulo
[in] inOptions
Las opciones para los metadatos del evento. Puede ser NULO.
Devoluciones
event_id_t El ID del evento si el evento se escribió en el registro, 0 en caso contrario.

LogEvent

event_id_t LogEvent(
  const EventSchema & inSchema,
  EventWriterFunct inEventWriter,
  void *inAppData
)

Registre un evento a través de una devolución de llamada.

La función registra un evento representado como un EventWriterFunct y una aplicación específica appData contexto. La función escribe los metadatos evento y llama a la inEventWriter con unnl :: Armadura :: :: TLV TLVWriter referencia y inAppData contexto para que el código de usuario puede emitir los datos de eventos directamente en el registro de eventos. Esta forma de registro de eventos minimiza el consumo de memoria, ya que los datos de eventos se serializan directamente en el búfer de destino. Los datos de eventos deben contener las etiquetas de contexto para ser interpretados dentro del esquema identificado por inProfileID y inEventType . Se ignorará la etiqueta del primer elemento; el sistema de registro de eventos lo reemplazará con la etiqueta eventData.

El evento se registra si su inImportance supera el umbral de registro especificado en el LoggingConfiguration . Si la importancia del evento no cumple con el umbral actual, se cae y la función devuelve un 0 como el identificador de evento resultante.

Esta variante de la invocación especifica implícitamente todas las opciones de eventos predeterminadas:

  • el evento tiene una marca de tiempo con la hora actual en el momento de la llamada,
  • el evento está marcado como relacionado con el dispositivo que está realizando la llamada,
  • el evento es independiente, no está relacionado con ningún otro evento,
  • el evento está marcado como no urgente,

Detalles
Parámetros
[in] inSchema
Esquema de definición de importancia, el ID del perfil y el tipo de estructura de este evento.
[in] inEventWriter
La devolución de llamada para invocar para serializar realmente los datos del evento.
[in] inAppData
Contexto de la aplicación para la devolución de llamada.
Devoluciones
event_id_t El ID del evento si el evento se escribió en el registro, 0 en caso contrario.

LogEvent

event_id_t LogEvent(
  const EventSchema & inSchema,
  EventWriterFunct inEventWriter,
  void *inAppData,
  const EventOptions *inOptions
)

Registre un evento a través de una devolución de llamada, con opciones.

La función registra un evento representado como un EventWriterFunct y una aplicación específica appData contexto. La función escribe los metadatos evento y llama a la inEventWriter con unnl :: Armadura :: :: TLV TLVWriter referencia y inAppData contexto para que el código de usuario puede emitir los datos de eventos directamente en el registro de eventos. Esta forma de registro de eventos minimiza el consumo de memoria, ya que los datos de eventos se serializan directamente en el búfer de destino. Los datos de eventos deben contener las etiquetas de contexto para ser interpretados dentro del esquema identificado por inProfileID y inEventType . Se ignorará la etiqueta del primer elemento; el sistema de registro de eventos lo reemplazará con la etiqueta eventData.

El evento se registra si su inImportance supera el umbral de registro especificado en el LoggingConfiguration . Si la importancia del evento no cumple con el umbral actual, se cae y la función devuelve un 0 como el identificador de evento resultante.

Esta variante de la invocación permite que la persona que llama para establecer cualquier combinación de EventOptions :

  • marca de tiempo, cuando 0 por defecto es la hora actual en el punto de la llamada,
  • sección "raíz" del origen del evento (origen del evento e ID de rasgo); si es NULL, toma el dispositivo actual de forma predeterminada. el evento está marcado como relacionado con el dispositivo que está realizando la llamada,
  • un ID de evento relacionado para agrupar ID de eventos; cuando el ID de evento relacionado es 0, el evento se marca como no relacionado con ningún otro evento,
  • urgencia; por defecto no urgente.

Detalles
Parámetros
[in] inSchema
Esquema de definición de importancia, el ID del perfil y el tipo de estructura de este evento.
[in] inEventWriter
La devolución de llamada para invocar para serializar realmente los datos del evento.
[in] inAppData
Contexto de la aplicación para la devolución de llamada.
[in] inOptions
Las opciones para los metadatos del evento. Puede ser NULO.
Devoluciones
event_id_t El ID del evento si el evento se escribió en el registro, 0 en caso contrario.

Iniciar sesión

event_id_t LogFreeform(
  ImportanceType inImportance,
  const char *inFormat,
  ...
)

LogFreeform emite una cadena de forma libre al flujo de eventos predeterminado.

La cadena se encapsulará en una estructura de eventos de depuración, estructuralmente idéntica a otras cadenas registradas. El ID de perfil evento será la de un evento Nest depuración y, el tipo de evento será kNestDebug_StringLogEntryEvent .

Detalles
Parámetros
[in] inImportance
Importancia de la entrada del registro; si la importancia cae por debajo de la importancia actual, el evento no se registra realmente
[in] inFormat
printf cadena de formato según norma, seguido de argumentos para ser formateado
Devoluciones
event_id_t El ID del evento si el evento se escribió en el registro, 0 en caso contrario.

LookForElementWithTag

WEAVE_ERROR LookForElementWithTag(
  const nl::Weave::TLV::TLVReader & aSrcReader,
  const uint64_t aTagInApiForm,
  nl::Weave::TLV::TLVReader *apDstReader
)

PlainTextWriter

WEAVE_ERROR PlainTextWriter(
  TLVWriter & ioWriter,
  uint8_t inDataTag,
  void *appData
)

Una función auxiliar para emitir un texto de forma libre como evento de depuración.

El evento de depuración es una estructura con un logregion y un texto de forma libre.

Detalles
Parámetros
[in,out] ioWriter
El escritor que se utilizará para escribir el evento.
[in] appData
Un puntero a la DebugLogContext , una estructura que tiene un formato de cadena, argumentos, y una región de registro
[in] inDataTag
Una etiqueta de contexto para el TLV estamos escribiendo. No se usa aquí, pero es requerido por typedef para EventWriterFunct.
Valores devueltos
WEAVE_NO_ERROR
Sobre el éxito.
other
Otros errores que pueden devolverse desde ioWriter.

PlainTextWriter

WEAVE_ERROR PlainTextWriter(
  ::nl::Weave::TLV::TLVWriter & ioWriter,
  uint8_t inDataTag,
  void *appData
)

Una función auxiliar para emitir un texto de forma libre como evento de depuración.

El evento de depuración es una estructura con un logregion y un texto de forma libre.

Detalles
Parámetros
[in,out] ioWriter
El escritor que se utilizará para escribir el evento.
[in] inDataTag
La etiqueta a emitir
[in] appData
Un puntero a la DebugLogContext , una estructura que tiene un formato de cadena, argumentos, y una región de registro
Valores devueltos
WEAVE_NO_ERROR
Sobre el éxito.
other
Otros errores que pueden devolverse desde ioWriter.

operador! =

bool operator!=(
  const ResourceIdentifier & lhs,
  const ResourceIdentifier & rhs
)

operador ==

bool operator==(
  const ResourceIdentifier & lhs,
  const ResourceIdentifier & rhs
)