Subsistema DeviceProfile de OpenHarmony

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 Consulta el perfil de un dispositivo específico. Un valor vacío consulta el dispositivo local.
idServicio std::string El ID del servicio a consultar (identificador del registro de datos).
perfil PerfilCaracteristicoServicio 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 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 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 Especifica el alcance y el modo de sincronización.
devolucionSinc ICallbackEventoPerfil 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 Especifica el tipo de evento a suscribir.
devolucionEvento ICallbackEventoPerfil Devolución de llamada para los eventos suscritos.
eventosFallidos EventoPerfil 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

Etiquetas: OpenHarmony DeviceProfile Sistemas Distribuidos C++ HarmonyOS

Publicado el 6-4 02:23