DeviceProfile actúa como un gestor para las capacidades del hardware del dispositivo y las características del software del sistema. Algunos ejemplos de perfiles son el tipo de dispsoitivo, su nombre, el sistema operativo instalado y la versión del mismo.
Este subsistema ofrece un acceso rápido a los perfiles tanto del dispositivo local como de los remotos, sirviendo como base para iniciar operaciones distribuidas. Sus capacidades principales incluyen:
- Consulta, inserción y eliminación de perfiles del dispositivo local.
- Consulta de perfiles de dispositivos remotos.
- Sincronización de perfiles entre dispositivos.
- Suscirpción a notificaciones sobre cambios en perfiles remotos.
Arquitectura del Sistema
El módulo de DeviceProfile se compone de varios componentes que interactúan entre sí para gestionar la información del perfil de manera eficiente y segura.
Estructura de Directorios
El código principal de DeviceProfile se organiza de la siguiente manera:
├── interfaces
│ └── inner_kits
│ └── perfil_dispositivo_distribuido // Interfaz inner_kit
├── ohos.build
├── declaracion_sa // Archivos de declaración del SA
│ ├── 6001.xml
│ └── BUILD.gn
└── servicios
└── perfil_dispositivo_distribuido
├── BUILD.gn
├── incluir
│ ├── autoridad // Cabeceras para verificación de permisos
│ ├── sensor_contenido // Cabeceras para recolección de datos CS
│ ├── almacenamiento_bd // Cabeceras para operaciones de base de datos
│ ├── gestor_dispositivos // Cabeceras para gestión de dispositivos
│ └── gestor_suscripciones // Cabeceras para gestión de suscripciones
├── src
│ ├── autoridad // Implementación de verificación de permisos
│ ├── sensor_contenido // Implementación de recolección de datos CS
│ ├── almacenamiento_bd // Implementación de operaciones de base de datos
│ ├── gestor_dispositivos // Implementación de gestión de dispositivos
│ └── gestor_suscripciones // Implementación de gestión de suscripciones
└── pruebas // Casos de prueba
Restricciones
- Los dispositivos en la red deben estar en la misma red local.
- Antes de la formación de la red, es necesario completar el emparejamiento de los dispositivos. Los detalles del proceso de emparejamiento se explican en el subsistema de seguridad.
Uso
Consulta de Información del Perfil
Parámetros de ObtenerPerfilDispositivo:
| Nombre | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| idDispositivo | std::string | Sí | Consulta el perfil de un dispositivo específico. Un valor vacío consulta el dispositivo local. |
| idServicio | std::string | Sí | El ID del servicio a consultar (identificador del registro de datos). |
| perfil | PerfilCaracteristicoServicio | Sí | Valor de retorno. |
// Declarar el valor de retorno
PerfilCaracteristicoServicio perfilObtenido;
// Ejecutar la interfaz ObtenerPerfilDispositivo
ClientePerfilDispositivoDistribuido::ObtenerInstancia().ObtenerPerfilDispositivo(idDispositivo, idServicio, perfilObtenido);
std::string datosJson = perfilObtenido.ObtenerJsonPerfilCaracteristico();
resultado.append("datosJson:" + datosJson + "\n");
Inserción de Información del Perfil
Parámetros de InsertarPerfilDispositivo:
| Nombre | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| perfil | PerfilCaracteristicoServicio | Sí | La información del perfil a insertar. |
// Declarar y completar los datos a insertar
PerfilCaracteristicoServicio perfilNuevo;
perfilNuevo.EstablecerIdServicio(idServicio);
perfilNuevo.EstablecerTipoServicio(tipoServicio);
nlohmann::json objetoJson;
objetoJson["versionPrueba"] = "3.0.0";
objetoJson["nivelApiPrueba"] = NIVEL_API;
perfilNuevo.EstablecerJsonPerfilCaracteristico(objetoJson.dump());
// Ejecutar la interfaz InsertarPerfilDispositivo
ClientePerfilDispositivoDistribuido::ObtenerInstancia().InsertarPerfilDispositivo(perfilNuevo);
Eliminación de Información del Perfil
Parámetros de EliminarPerfilDispositivo:
| Nombre | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| idServicio | std::string | Sí | Elimina el registro asociado a un ID de servicio específico. |
// Definir el ID del servicio a eliminar
std::string idServicioEliminar = "servicio_prueba";
// Ejecutar EliminarPerfilDispositivo
ClientePerfilDispositivoDistribuido::ObtenerInstancia().EliminarPerfilDispositivo(idServicioEliminar);
Sincronización de Información del Perfil
Parámetros de SincronizarPerfilDispositivo:
| Nombre | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| opcionesSincronizacion | OpcionesSincronizacion | Sí | Especifica el alcance y el modo de sincronización. |
| devolucionSinc | ICallbackEventoPerfil | Sí | Devolución de llamada para el resultado de la sincronización. |
// Definir el modo y alcance de sincronización
OpcionesSincronizacion opSinc;
opSinc.EstablecerModoSincronizacion((OHOS::DistributedKv::ModoSincronizacion)atoi(modo.c_str()));
for (const auto& idDisp : idsDispositivos) {
opSinc.AgregarDispositivo(idDisp);
}
// Ejecutar la interfaz de sincronización
ClientePerfilDispositivoDistribuido::ObtenerInstancia().SincronizarPerfilDispositivo(opSinc,
std::make_shared<callbackeventoperfil>());
</callbackeventoperfil>
Suscripción a Eventos del Perfil (sincronización, cambios)
Parámetros de SuscribirseAEventosPerfil:
| Nombre | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| infosSuscripcion | InfoSuscripcion | Sí | Especifica el tipo de evento a suscribir. |
| devolucionEvento | ICallbackEventoPerfil | Sí | Devolución de llamada para los eventos suscritos. |
| eventosFallidos | EventoPerfil | Sí | Eventos en los que falló la suscripción. |
auto callbackSuscripcion = std::make_shared<callbackeventoperfil>();
std::list<InfoSuscripcion> listaSuscripciones;
InformacionExtra infoExtra;
infoExtra["idDispositivo"] = idDispositivo;
infoExtra["idsServicios"] = idsServicios;
// Suscribirse al evento EVENTO_PERFIL_CAMBIADO
InfoSuscripcion info1;
info1.eventoPerfil = EventoPerfil::EVENTO_PERFIL_CAMBIADO;
infoExtra.infoExtra = std::move(infoExtra);
listaSuscripciones.emplace_back(info1);
// Suscribirse al evento EVENTO_SINCRONIZACION_COMPLETADA
InfoSuscripcion info2;
info2.eventoPerfil = EventoPerfil::EVENTO_SINCRONIZACION_COMPLETADA;
info2.infoExtra = std::move(infoExtra);
listaSuscripciones.emplace_back(info2);
std::list<EventoPerfil> eventosFallidos;
// Ejecutar la interfaz de suscripción
ClientePerfilDispositivoDistribuido::ObtenerInstancia().SuscribirseAEventosPerfil(listaSuscripciones, callbackSuscripcion, eventosFallidos);
sleep(TIEMPO_ESPERA_SUSCRIPCION);
std::list<EventoPerfil> listaEventosPerfil;
listaEventosPerfil.emplace_back(EventoPerfil::EVENTO_PERFIL_CAMBIADO);
eventosFallidos.clear();
// Cancelar la suscripción
ClientePerfilDispositivoDistribuido::ObtenerInstancia().CancelarSuscripcionEventosPerfil(listaEventosPerfil, callbackSuscripcion, eventosFallidos);
</callbackeventoperfil>
Repositorios Relacionados
Subsistema DeviceProfile
gestor_info_dispositivo