Universidad de Zaragoza Centro Politécnico Superior Contribuciones en el diseño, implementación e integración de nuevas tecnologías y perfiles médicos recomendados para entornos de e-Salud basados en el estándar ISO/IEEE 11073 Programa de Postgrado en Ingenierías Transversales Ingeniería Biomédica · Mención de Calidad Autor Antonio Aragüés Ruiz Director Dr. Ignacio Martínez Ruiz DICIEMBRE 2010 Agradecimientos A Nacho, mi director de TFM, por su constante apoyo y ayuda durante el desarrollo de este trabajo. Gracias por confiar en mí. A mis compañeros de trabajo y laboratorio: Pilar, Pili, Javi, Chus, Eva y Nelia. Gracias por los buenos momentos que me hacéis pasar cada día y vuestra ayuda constante. A todo el equipo de Healthy Interoperability de la universidad vienesa de ciencias aplicadas Fachhochschule Technikum Wien. En especial a Ferenc y Matthias por su amabilidad y trato durante mi estancia en Viena. A todos los compañeros del Máster. Aunque comencé tarde el curso me sentí integrado desde el primer día. Vanesa, Jose Antonio, Eli, Juan Carlos, Fernando, Eduardo, Chus… y más que olvido. Sois geniales. Y por supuesto a mi familia y amigos. Y especialmente a mis padres, que me dan fuerza cada día, que siempre están ahí. Hitos académicos y de investigación Como resultado de este trabajo se han llevado a consecución los siguientes hitos académicos y de investigación: Dirección de proyectos fin de carrera Análisis, diseño funcional y modelado UML de la Arquitectura Software de una pasarela o Compute Engine (CE) para una plataforma de E-Salud basada en el estándar ISO/IEEE 11073. Autor: Javier Almingol. Fecha: -. Director: Antonio Aragüés Ruiz. Ponente: Ignacio Martínez Ruiz Publicación de los siguientes artículos en congresos, simposios y reuniones científicas: Del Valle P, Aragüés A, Escayola J, Martínez I, and García J, “Propuesta de Diseño de un Entorno Gráfico e-Accesible según la norma ISO 9241 e interoperable según la norma ISO/IEEE 11073 para soluciones de e-Salud” XXVIII Congreso Anual de la Sociedad Española de Ingeniería Biomédica, CASEIB 2010. Aragüés A, Funes P, Carot S, Del Valle P, Trigo J, Escayola J, Muñoz P, Martínez-Espronceda M, Martínez I, García J, “Integración sobre una plataforma Android de las normas de interoperabilidad ISO/IEEE11073 y UNE-EN/ISO13606” XXVIII Congreso Anual de la Sociedad Española de Ingeniería Biomédica, CASEIB 2010. A. Aragüés, J. Almingol, J.D. Trigo, J. Escayola, M. Martínez-Espronceda, I. Martínez, J. García, “Análisis de tecnologías de transporte con perfiles médicos especializados para el estándar ISO/IEEE11073” XXVIII Congreso Anual de la Sociedad Española de Ingeniería Biomédica, CASEIB 2010 P. Muñoz, I. Martínez, A. Muñoz, A. Aragüés, J. Escayola, J. García, “Uso de arquetipos en la adquisición no supervisada de medidas remotas para su incorporación a un servidor de HCE” ” XXVIII Congreso Anual de la Sociedad Española de Ingeniería Biomédica, CASEIB 2010 Resumen El núcleo central del trabajo llevado a cabo en los últimos años en el proyecto upHealth.ES dentro del subgrupo de telemedicina perteneciente al Grupo Consolidado de Tecnologías de las Comunicaciones del Instituto de Investigación en Ingeniería de Aragón (GTC/I3A) ha sido la implementación de una plataforma de e-Salud personal basada en estándares extremo-a-extremo. La arquitectura global está basada en una pasarela (Compute Engine, CE) que concentra la información recogida por los dispositivos médicos (Medical Devices, MDs, y Personal Health Devices, PHDs) conforme al estándar ISO/IEEE 11073 (X73PHD). Este CE se comunica a través de la red externa con un servidor de monitorización que actualiza toda la información en el Historial Clínico Electrónico (HCE) del paciente conforme al estándar UNE-EN/ISO 13606. La versión actual del CE tiene una arquitectura monolítica, basada en C/C++, en la que todo el código se estructura en grupos funcionales muy acoplados, lo que dificulta cualquier modificación, ampliación o adaptación a las evoluciones del propio estándar X73. En este Trabajo Fin de Máster (TFM) se ha realizado un re-diseño completo de la arquitectura software del CE migrándolo a C# y estructurándolo como solución multi-capa para poder explotar las ventajas del paradigma de la programación orientada a objetos y dotarlo en un futuro de nuevas funcionalidades de valor añadido así como implementarlo en diferentes plataformas hardware fijas e inalámbricas/móviles. A partir de este re-diseño e implementación del nuevo framework X73PHD, se ha estudiado el estado del arte de los nuevos perfiles médicos propuestos para las tecnologías de transporte recomendadas desde el grupo especial de trabajo de X73PHD (PHDWG): Bluetooth Health Device Profile (BT HDP), USB Personal Healthcare Device Class (USB PHDC) y ZigBee HealthCare Profile (ZB ZHC). A partir de este estado del arte, se ha propuesto el diseño e implementación del perfil médico BT HDP para su integración con el framework X73PHD y el servidor de HCE con los más recientes dispositivos médicos certificados desde la iniciativa Continua Health Alliance. Además, se ha diseñado la capa de servicios a nivel superior según el paradigma cloud computing para poder plantear un entorno de uso real. Por último, y a partir de este entorno de uso propuesto, se ha realizado la evaluación completa de la nueva plataforma y el impacto de las nuevas tecnologías inalámbricas percibido por los usuarios en el contexto del proyecto WiSo (Wiener Sozialdienste) en colaboración con el grupo Healthy Interoperabilty de la universidad vienesa de ciencias aplicadas Fachhochschule Technikum Wien y coordinado por el Dr. Em y las Dras. Kraus y Haslinger. Esta evaluación, junto con la colaboración con el grupo del Dr. Pedro de las Heras de la Universidad Juan Carlos I para el desarrollo del perfil médico BT HDP en entornos específicos de paciente, han constituido las prácticas médicas asociadas a la TFM. Como líneas futuras, se pretende extender las contribuciones propuestas al resto de perfiles médicos recomendados (USB PHDC y ZHC) para su integración definitiva en la plataforma lo que desembocará en un entorno de comunicación multi-tecnología completamente interoperable conforme a X73PHD. A partir de aquí, habría que estudiar las tendencias en tecnologías inalámbricas de última generación WiFi/WiMax, Ultra Wide Band (UWB) y Long Term Evolution (LTE) y su posible aplicación a escenarios de e-Salud (analizando su adaptación y compatibilidad con el entorno sanitario, su problemática de integración y su influencia en la mejora de la calidad de vida de las personas), lo que constituirá la futura propuesta de tesis doctoral del alumno. Índice 1. Introducción…………………………………………………………………………………………………………………… 2. Estado del arte.………………………………………………………………………………………………….............. 2.1. e-Salud, telemonitorización y estandarización………………………………………………..……….. 2.2. Iniciativas de estandarización e integración en e-Salud..……………………..……………….…. 2.3. Tecnologías de transporte y perfiles médicos.……………………………..………………………….. 3. Análisis, diseño e implementación.……………………………………………………………………………….. 3.1. Plataformas previas.………………………………………………………………………………………………… 3.2. Análisis y diseño. Arquitectura propuesta …………………………..………………………………….. 3.3. Implementación.……………………………………………………………………………………………………… 3.4. Integración de Bluetooth HDP.………………………………………………………………………………… 3.5. Integración de servicios en la nube.………………………………………………………………………… 3.6. Integración con el servidor de HCE………………………………….………………………………………. 3.7. Integración con el nivel de aplicación………………………………………………………………………. 4. Evaluación y resultados……………………..………………………………………………………………………….. 4.1. Evaluación de la implementación…………………………………………………………………………….. 4.2. Proyecto WiSo.………………………………………………………………………………………………………… 5. Conclusiones y líneas futuras…………………………………………………………………………………………. 5.1. Conclusiones.…………………………………………………………………………………………………………… 5.2. Líneas futuras.…………………………………………………………………………………………………………. Pág 1 5 5 8 10 15 15 16 23 25 28 34 36 39 39 42 43 43 44 Acrónimos……………………………………………………………………………………………………………………………. Tabla de figuras……………………………………………………………………………………………………………………. Referencias………………………………………………………………………………………………………………………….. 45 46 47 Anexos I. El estándar ISO/IEEE 11073……………………………………………………………………………………….. II. Plataformas previas. upHealth.ES……………………………………………………………………………… III. Detalles de implementación del framework X73PHD y el perfil médico BT HDP………… 49 55 67 Introducción Los avances en el campo de la Ingeniería Biomédica han dado lugar al desarrollo de equipos de adquisición y medición de parámetros vitales cada vez más precisos y manejables a la vez que accesibles para el paciente y completamente integrados en su vida cotidiana. De la mano de la inteligencia ambiental (Ambient Intelligence, AmI) y el auge del hogar digital, la monitorización de pacientes en modo local (domiciliario) o remoto (hospitalario) se presenta como un importante servicio de supervisión del usuario mediante la incorporación de sistemas formados por uno o varios de estos equipos médicos. Sin embargo, la mayoría de prototipos y soluciones de e-Salud que han venido desarrollándose en los últimos años, aunque válidas, arrastran una cierta heterogeneidad que no las hacen extensibles e integrables con otras aplicaciones similares y en el contexto sanitario global. Para ello, en la actualidad, un aspecto clave a tener en cuenta en estos sistemas es el diseño basado en estándares que definan completamente las reglas con las que los dispositivos médicos se interconectan y comunican dentro de la solución de e-Salud. El estándar internacional asumido para la comunicación interoperable de dispositivos médicos es la familia de normas ISO/IEEE 11073 (X73). X73 abarca los siete niveles de la pila de protocolos y proporciona la versatilidad suficiente para convertir la información en un formato interoperable de manera que pueda ser intercambiada entre un dispositivo de salud personal (agente) y un sistema central de registro (manager). Los datos pueden ser enviados posteriormente a un centro remoto de control o almacenamiento de Historia Clínica Electrónica (HCE), así se permite construir sistemas más completos que constituyan soluciones globales. X73 nace centrado en el Punto de Cuidado (Point of Care, PoC) del paciente para implantación en Unidades de Cuidados Intensivos (UCIs) y evoluciona en los últimos años hacia nuevos casos de uso, tecnologías de interconexión y perfiles médicos orientados a dispositivos de salud personal (Personal Health Devices, PHD). De la misma forma, para lograr niveles óptimos en la calidad asistencial y continuidad de cuidado de un paciente, es necesario incluir a todas las partes implicadas en el seguimiento/control de la enfermedad. Para ello, hay que contemplar también la interoperabilidad en el intercambio de HCE entre sistemas sanitarios a través de la norma internacional UNE-EN/ISO13606. Sin embargo, la existencia de normas médicas no garantiza la correcta implementación de una solución homogénea de e-Salud dado que la integración de las diferentes normas en soluciones extremo a extremo todavía sigue siendo una tarea compleja e intrincada. Este es uno de los principales retos en la investigación de estándares para su posterior implementación, en forma de soluciones reales, en el sistema sanitario. Contexto Este Trabajo Fin de Máster (TFM) se integra en el contexto de diseño e implementación de una plataforma de telemonitorización de pacientes basada en estándares extremo a extremo [1] desarrollada por el grupo de telemedicina de GTC/I3A. La arquitectura de la plataforma (ver Figura 1.1), está basada en una pasarela (Compute Engine, CE) que concentra toda la información recogida por los distintos dispositivos médicos (Medical Devices, MDs). Este CE se comunica a través de la red externa de acceso y transporte, con un servidor de monitorización que gestiona distintos CEs y reúne toda la información proveniente de cada escenario para actualizar la HCE del paciente. Las características de cada elemento que conforma la arquitectura del sistema son: • Medical Devices (MDs). La adquisición de datos médicos sigue un formato propietario. Estos adaptadores crean la especialización para el MD que genera su modelo de información específico y establece una máquina de estados permitiendo a los MDs no compatibles con X73PHD actuar como agentes nativos de una comunicación X73PHD. • Compute Engine (CE). El dispositivo de pasarela está diseñado como un manager nativo X73PHD que recoge toda la información médica proveniente de MDs. La información es almacenada en un fichero de datos que, junto con el perfil de configuración específico (Config Profile), sirve como entrada de datos para el proceso de creación de tramas para un protocolo de armonización entre estándares extremo a extremo (End-to-End Standard Harmonization Protocol, E2ESHP). Este protocolo permite integrar la información adquirida por los MDs en la HCE de forma transparente y posibilita, a partir de una consulta en la base de datos o de modificaciones del Config Profile, administrar y gestionar remotamente los CEs y las especificaciones de cada MD. • Monitoring Server (MS). Está compuesto por dos entidades. La primera actúa como servidor E2ESHP puesto que se encarga de recibir los datos X73PHD, decodificando tramas E2ESHP y extrayendo los datos X73PHD apropiados (clasificando información por usuario asociado) para almacenarlos en la base de datos. El segundo implementa una doble función cliente/servidor UNE-EN/ISO 13606 aceptando peticiones UNE-EN/ISO 13606 de información almacenada en la base de datos, y generando extractos UNE-EN/ISO 13606 siguiendo sus arquetipos. Página | 1 Figura 1.1. Plataforma de telemonitorización basada en estándares extremo a extremo Objetivos La versión actual del CE desarrollado en la plataforma de telemonitorización de pacientes tiene una arquitectura monolítica, basada en C/C++ en la que todo el código se estructura en grupos funcionales muy acoplados, lo que dificulta cualquier modificación, ampliación o adaptación a las evoluciones del propio estándar X73. El objetivo principal de este TFM es proponer un re-diseño completo de la arquitectura software del CE migrándolo a C# y estructurándolo como solución multi-capa para poder explotar las ventajas del paradigma de la programación orientada a objetos. Este re-diseño permitirá dotar en un futuro al CE de nuevas funcionalidades de valor añadido así como implementarlo en nuevas plataformas portables, inalámbricas y móviles integrando ambas normas de interoperabilidad, ISO/IEEE11073 y UNE-EN/ISO 13606, en un entorno open source sobre Linux. A partir de este re-diseño, se desarrollará la implementación completa del nuevo framework sobre X73PHD y se integrarán la interoperabilidad de área extendida (Wide Area Network, WAN) con el servidor de HCE según UNE-EN/ISO 13606 y mediante tecnologías Web Services (WS) a través de lenguaje eXtensible Markup Language (XML). Además, se estudiará el estado del arte de los nuevos perfiles médicos propuestos para las tecnologías de transporte recomendadas desde el grupo especial de trabajo de X73PHD (PHDWG): Bluetooth Health Device Profile (BT HDP), USB Persona Healthcare Device Class (USB PHDC) y ZigBee HealthCare Profile (ZB HCP). A partir de este estado del arte, se propondrá el diseño e implementación del perfil médico BT HDP para su integración con el framework X73PHD y el servidor de HCE con los más recientes dispositivos médicos certificados desde la iniciativa Continua Health Alliance. Además, se diseñará la capa de servicios a nivel superior según el paradigma cloud computing para poder plantear un entorno de uso real que pretende ser una prueba de concepto incorporando servicios de valor añadido como calendario de citas médicas, recordatorio de tareas, mensajes privados o soporte a través de chat apoyándose en los paradigmas del diseño en la nube. Como líneas futuras, se pretende extender las contribuciones propuestas al resto de perfiles médicos recomendados (USB HDCP y ZHC) para su integración definitiva en la plataforma lo que desembocará en un entorno de comunicación multi-tecnología completamente interoperable conforme a X73PHD y UNE-EN/ISO 13606. A partir de aquí, habría que estudiar las tendencias en tecnologías inalámbricas de última generación (WiFi/WiMax, Ultra Wide Band (UWB) y Long Term Evolution (LTE)) y su posible aplicación a escenarios de e-Salud (analizando su adaptación y compatibilidad con el entorno sanitario, su problemática de integración y su influencia en la mejora de la calidad de vida de las personas), lo que constituirá una futura propuesta de tesis doctoral. Prácticas médicas Para la consecución de este TFM se han realizado prácticas médicas en tres ámbitos diferentes: el académico, en colaboración con el grupo Morfeo (proyecto OpenHealth) del Dr. Pedro de las Heras de la Universidad Juan Carlos I para el desarrollo e integración del perfil médico de Bluetooth y con el grupo Healthy Interoperabilty del Dr. Stefan Sauermann de la universidad vienesa de ciencias aplicadas Fachhochschule Technikum Wien (en la que se ha realizado una estancia de investigación de tres meses), para el desarrollo y ejecución de pruebas sobre la nueva plataforma propuesta; el empresarial, en colaboración con Técnicas Competitivas S.A. (TCSA), una empresa canaria que, entre otros productos, ofrece servicios de gestión de HCE en el ámbito de la salud y con la que se participa en la actualidad en el proyecto TSI-020302-2009-89 dentro del Plan Avanza I+D del Ministerio de Industria, Turismo y Comercio; Página | 2 y el sanitario, mediante la colaboración en el proyecto WiSo (Wiener Sozialdienste), en el contexto de la citada estancia, para los servicios sociales de Viena que consiste en la adaptación de hogares y residencias de mayores para que estos puedan ser monitorizados por sus familiares más cercanos ofreciéndoles una mejora en su calidad de vida. En este proyecto se realizaron entrevistas con profesionales médicos para determinar los datos que, además de la propia medida, resultan fundamentales y deben ser asociados a ésta como el dispositivo utilizado o la hora en la que se realizó la medida. Estructura de la memoria Capítulo 1 Este primer capítulo introduce el contexto en el que se desarrolla este TFM y desglosa los objetivos generales y particulares, detallando el contenido de las distintas secciones y apartados del TFM. Capítulo 2 El segundo capítulo desarrolla el Estado del Arte acerca de algunos de los conceptos más importantes de este TFM: eSalud, telemonitorización y estandarización. Presenta las iniciativas existentes en la actualidad en lo referente a estandarización e integración en e-Salud y detalla un análisis exhaustivo de las tecnologías de transporte que han desarrollado un perfil médico para X73PHD. Capítulo 3 En este capítulo se presenta la nueva plataforma desarrollada. Se inicia el capítulo recordando las plataformas previas cuyo trabajo acumulado ha desembocado en la nueva plataforma y se completa analizando detalladamente el diseño, arquitectura, implementación e integración de todos los componentes que conforman la nueva plataforma. Capítulo 4 En el capítulo 4 se plantea la metodología de evaluación de los resultados obtenidos por la nueva plataforma y se describe el proyecto WiSo en el cual se ha desarrollado una parte de las prácticas médicas que propone este TFM. Capítulo 5 Para finalizar el TFM, se presenta en este capítulo las conclusiones obtenidas tras la labor de investigación donde, después de adquirir un conocimiento, se ponen de manifiesto unas pautas a tener en cuenta para el futuro. Por último, se constatan los puntos abiertos que deja este TFM que servirán de líneas futuras a desarrollar en la Tesis Doctoral. Página | 3 Página | 4 Estado del arte 2.1. e-Salud, telemonitorización y estandarización Los sistemas de provisión de servicios sanitarios y de asistencia social son claves en una sociedad europea cada vez más envejecida, con unos ciudadanos que demandan más y mejores servicios incluso en sus desplazamientos, y con unas Administraciones Públicas que requieren mayor eficiencia en la provisión de los mismos. En este contexto, las Tecnologías de la Información y las Comunicaciones (TIC) jugarán un papel fundamental en generar un marco sostenible y en facilitar su desarrollo. Por consiguiente, tanto en España como en la Unión Europea, se suceden diversas iniciativas para establecer un marco de impulso a las acciones relativas a e-Salud y la e-inclusión como medio para conseguir sistemas de salud y de asistencia social capaces de ser proactivos y reaccionar de manera inteligente a las necesidades individuales de los ciudadanos. En este contexto, la telemonitorización de pacientes es uno de los principales campos de aplicación de los servicios de e-Salud, ya que abarca el conjunto de sistemas técnicos y servicios médicos que permite realizar un control a distancia de parámetros y señales biológicas de enfermos que lo necesitan. La telemonitorización de pacientes es una de las prácticas más habituales en telemedicina, puesto que, empleada adecuadamente, permite incrementar la calidad de la atención prestada y aumentar la eficiencia de los servicios, fundamentalmente gracias a que facilita un seguimiento continuado de pacientes crónicos, ancianos, cuidados paliativos o intervenidos quirúrgicamente, sin que éstos ocupen las camas que serían necesarias para su seguimiento in-situ y permite destinarlas a usos más críticos. Además, los pacientes telemonitorizados pueden continuar viviendo en sus propios domicilios con las ventajas que ello conlleva: comodidad, contexto favorable, ausencia de desplazamientos, etc. Incluso, en los últimos años, el espectro de aplicación y casos de uso se ha ampliado a autocontrol de la salud, fitness, control de atletas, etc. Todo ello justifica la elección de la telemonitorización como el campo de aplicación de innovaciones en TIC aplicadas a la e-Salud. Los dispositivos médicos más usados en e-Salud para medir parámetros y señales biológicas suelen ser (ver Figura 2.1): monitores de ECG, medidores de presión arterial y frecuencia cardiaca, básculas digitales, pulsioxímetros, incluso monitorizadores portables para control del ejercicio, fitness, etc. En función del ámbito de aplicación y el caso de uso, pueden ser fijos, inalámbricos, o llevables (wearables), incorporados en prendas de vestir, pulseras, etc. mediante sensores. Estos conjuntos de sensores alrededor del paciente conforman lo que se suele denominar red corporal (Body Area Network, BAN) o red personal (Personal Area Network, PAN). Habitualmente, para seguimiento de pacientes ancianos o de escasa movilidad, estas redes PAN o BAN se completan con detectores de presencia, sensores de movimiento, o dispositivos similares, formando la red domiciliaria (Home Area Network, HAN). En los últimos años, la evolución de los sensores, dispositivos y equipos asociados al paciente ha sido vertiginosa como se pone de manifiesto en siguientes apartados de este trabajo, en los que se analizará esta problemática más en detalle. La evolución de los dispositivos, lleva asociado un cambio en el punto de atención al paciente. Esta última década ha estado marcada por las continuas evoluciones desde los servicios tradicionales de e-Salud centrados en el paciente, hacia el uso de nuevos dispositivos médicos personales o llevables (wearables) que aprovechan las ventajas de las tecnologías wireless. Esta evolución tecnológica, ha venido inducida por el avance en las nuevas tecnologías como USB, Bluetooth o ZigBee, entre otras. Figura 2.1. Dispositivos médicos Esta evolución ha llevado a trasladar el ámbito de aplicación de la soluciones de e-Salud del entorno hospitalario centrado en el punto de cuidado (PoC) hacia el entorno personal del paciente (PHD). Esta transformación implica cambios en el concepto de la comunicación de los datos médicos, de la autonomía, peso, tamaño, etc. de los Página | 5 dispositivos, así como de los procedimientos funcionales globales de la solución. Todo ello hace que la implantación de nuevas soluciones de salud personal requieran de un estudio detallado de los entornos de aplicación, usuarios/pacientes a los que se dirigen y, en definitiva, evaluar los nuevos entornos de uso. Es, por tanto, imprescindible a la hora de diseñar las características específicas de una solución de e-Salud, evaluar sus entornos de uso de manera que quede convenientemente definido el rango de propiedades soportadas por la solución y sus correspondientes dispositivos médicos. Una lista de los casos de uso contemplados para el desarrollo de soluciones de e-Salud personal se proporciona desde el grupo especial de trabajo de X73PHD (PHDWG) destacando los siguientes entornos de uso: Salud y bienestar Fitness cardiovascular y monitorización de actividad Fitness de esfuerzo Gestión de enfermedades de alto riesgo: obesidad e hipertensión Assisted Ambient Living (AAL) Cuidado de pacientes de avanzada edad Diabetes Monitorización de pacientes con problemas cardiacos Sin embargo, algunos de los problemas no resueltos en e-Salud son: La heterogeneidad de sistemas de información sanitarios, que redunda en dificultades de integración de dispositivos médicos. Abundan los formatos propietarios (no publicados) de fabricante, que implican comunicaciones no universales, ni transparentes e incompatibles entre sí. Problemas de reemplazos y actualizaciones de sistemas, con sus correspondientes costes. Errores concretos o nuevas versiones implican modificaciones completas de hardware/software y sustitución del sistema. La necesidad de integrar historia clínica electrónica basada en estándares aceptados. Los estrictos requisitos de seguridad que garanticen la privacidad y confidencialidad del paciente. Además, existen barreras de interoperabilidad en el escenario actual de expansión de servicios de telemonitorización, relacionadas con la interoperabilidad, y que dificultan gravemente la implantación en rutina clínica: No se logra integrar la información de telemonitorización con los sistemas de información sanitaria usados en la rutina clínica, lo que limita la expansión de las soluciones. Se encuentra gran dificultad para que dispositivos de monitorización heterogéneos (de formatos y modelos de comunicación propietarios de fabricante, no universales ni transparentes) convivan en una red homogénea según un funcionamiento plug&play. No se han resuelto los amplios problemas que ocasionan los reemplazos y actualizaciones de los sistemas, con sus correspondientes costes. Estas barreras están muy relacionadas con los diferentes ámbitos de integración identificados en un diseño de e-Salud. En el ámbito local (red BAN/PAN/HAN), conviven dispositivos de monitorización heterogéneos (por ej. báscula, esfigmomanómetro, y pulsioxímetro). En el ámbito global del sistema de telemedicina, los datos médicos del paciente deben ser integrados con su HCE, y accesibles por los profesionales correspondientes. Cualquiera de estas situaciones, implica grandes cambios en el software de la aplicación, no sólo por la diferencia de formatos, sino porque el paradigma de funcionamiento suele resultar muy diferente. Para superar estas barreras y dotar de homogeneidad a las soluciones propuestas, es esencial el uso de estándares internacionales a seguir por fabricantes. Este es un largo proceso que ha venido impulsado en las últimas décadas desde los organismos de normalización y las asociaciones de integración. Estas evoluciones buscan arquitecturas integradas que no sólo posibiliten la interoperabilidad en el punto de cuidado, sino que garanticen portabilidad a otros entornos y casos de uso, faciliten la gestión remota (alarmas, patrones de comportamiento), e incorporen nuevas funcionalidades (plug&play, HotSwap), tecnologías (USB, Bluetooth, ZigBee), y dispositivos (PDAs, SmartPhones, micro-controladores). En este contexto, las principales organizaciones encargadas de la Informática Médica y las TICs para la salud son el Comité Europeo de Normalización (CEN), a través de su Comité Técnico CEN/TC251, como principal organización europea con competencia en este campo y la, Asociación Española de NORmalización (AENOR), mediante su Comité Técnico AEN/CTN139, como el organismo de estándares en España, y espejo del CEN a nivel nacional. Nuestro grupo de investigación pertenece a ambos comités y ha venido participando activamente en el desarrollo y redacción de las normas objeto de este TFM: X73 para interoperabilidad de dispositivos médicos y UNE-EN/ISO 13606, para comunicaciones interoperables de HCE. Página | 6 Sin embargo, el consenso e integración en la utilización de estándares y su implantación a gran escala, es un camino complejo. Por eso, quizá sea más importante el papel que juegan otras asociaciones que no las organizaciones de normalización. Integrating the Healthcare Enterprise (IHE) es una de esas asociaciones: se trata de un organismo formado por fabricantes de todo el mundo (americanos, europeos y asiáticos) cuyo propósito no es elaborar nuevas normas, sino la adopción coordinada de los estándares existentes más adecuados para cada aplicación concreta. En este camino, un hito importante en este proceso se da en junio de 2006 cuando 22 industrias líderes en tecnología y compañías de salud unen sus esfuerzos para formar una alianza abierta y sin ánimo de lucro: Continua Health Alliance. Desde sus inicios, esta alianza ha crecido continuamente hasta alcanzar, en la actualidad, 36 compañías promotoras y otras 32 colaboradoras. Siguiendo su objetivo de “establecer un ecosistema de sistemas de salud personal interoperables para permitir a personas y organizaciones una mejor gestión de su salud y bienestar”, la alianza no busca desarrollar nuevas normas sino consolidar al máximo e integrar las existentes; así como cerrar ciertos debates abiertos sobre middleware, al promover reglas comunes y estándares de interoperabilidad. Continua Health Alliance abarca desde los dispositivos médicos en el entorno del paciente hasta servicios end-to-end definiendo interfaces interoperables. Actualmente, varias tecnologías fijas y móviles están en fase de investigación para estandarizar su conectividad sobre diferentes perfiles médicos propuestos desde el grupo especial de trabajo de X73PHD (PHDWG) y comentados en la introducción: Bluetooth HDP, USB PHDC y ZigBee HCP. Además de los aspectos técnicos, uno de los objetivos claves de Continua Health Alliance es establecer un programa de certificación con su correspondiente logotipo oficial para el etiquetado de los dispositivos. Por último y según los objetivos planteados para este TFM, merece especial consideración la familia de normas X73 y su reciente evolución hacia una versión optimizada y adecuada a estas nuevas tecnologías y dispositivos médicos personales (X73PHD), como muestra la Figura 2.2. Esta evolución optimiza la arquitectura del protocolo, el modelo de comunicaciones agente-manager, define una nueva máquina de estados finita (Finite State Machine, FSM), así como un nuevo modelado del transporte y de nivel físico que conforman la pila de protocolos X73PHD. En este apartado no se busca desarrollar todo el contenido técnico del protocolo X73PHD ya que su estudio requiere de una lectura en profundidad y preferentemente acompañado de una implementación real, por lo que toda la información disponible sobre su estructura y características técnicas se incluye en el Anexo I. Figura 2.2. Evolución de la pila de protocolos de X73PoC a X73PHD Página | 7 2.2. Iniciativas de estandarización e integración en e-Salud Continua Health Alliance [2] nace en junio del 2006 como una coalición de industria abierta sin ánimo de lucro de 22 de las mejores compañías de asistencia sanitaria y tecnología para colaborar en la mejora de la calidad de la asistencia sanitaria personal. Con más de 180 compañías socias en todo el mundo, Continua se dedica a establecer un sistema de soluciones interoperables de soluciones de salud personal con el conocimiento de que la ampliación de esas soluciones en el hogar promueve la independencia, capacita a los individuos y ofrece la oportunidad para una verdadera gestión personalizada de la salud y del bienestar. De acuerdo con su misión “establecer un sistema de soluciones de e-Salud personal interoperable que promueva la independencia y que capacite a las personas y organizaciones a gestionar mejor la salud y el bienestar”, son objetivos de Continua: Desarrollar directrices de diseño que permitan a los proveedores fabricar sensores interoperables, redes en el hogar, plataformas de e-Salud y servicios de salud y bienestar. Establecer un programa de certificación de productos con un logo reconocible para el consumidor, que indique la promesa de interoperabilidad en los productos certificados. Colaborar con las agencias reguladoras gubernamentales para proporcionar métodos para la gestión segura y eficaz de diversas soluciones de proveedores. Trabajar con los líderes del sector de la asistencia sanitaria para desarrollar nuevas maneras de tratar los costes de proporcionar sistemas de e-Salud personal. Es importante resaltar que Continua no es un organismo de estandarización. La alianza ha seleccionado estándares de conectividad y trabaja para identificar y resolver vacíos en algunos organismos estándares de modo que las soluciones de e-Salud personal sean interoperables y colaboren en la gestión sanitaria mejorada. Además, la alianza está redactando directrices sobre cómo utilizar específicamente los estándares para lograr una auténtica interoperabilidad en muchas compañías y en muchos dispositivos. En definitiva, Continua aparece como un mecanismo potenciador de los estándares de interoperabilidad e intentando que éstos se vean reflejados en el mundo real a través de las empresas colaboradoras. Morfeo OpenHealth [3] es un proyecto de investigación para el desarrollo de soluciones de eSalud en entornos móviles. Estas soluciones están basadas en la gestión de dispositivos biomédicos inalámbricos en redes de área corporal BAN bajo estándares IEEE y Open Mobile Terminal Platform. Este proyecto implementa los principales componentes del estándar X7320601 como son el Modelo de Servicio, Modelo de Comunicación y Modelo de Información de Dominio (Domain Information Model, DIM). El objetivo es el de transformar la información en un formato interoperable que permite el intercambio de información y comunicación entre agentes y managers. Hasta ahora, las principales características implementadas son: Soporte para Abstract Syntax Notation One (ASN.1) a través de una versión modificada del framework Binary Notes que contiene: o Librería de codificación y decodificación. Esta librería implementa la reglas de codificación (Encoding Rules, ER) básicas (Basic, BER), de paquete (Packet, PER) y específicas (Distinguished, DER). o BCN Compiler (basado en eXchange Sheet Language, XSL). Compilador ASN.1 el cual es capaz de generar clases Java o C# para un fichero de entrada ASN.1. El código generado tiene anotaciones y atributos que usa el compilador durante la ejecución. Binary Notes permite personalizar los ficheros generados modificando las plantillas XSL originales o creando nuestras propias plantillas. Colas de mensajes. Implementación de colas de mensajes simples y de alto rendimiento. Soporte para Medical Device Encoding Rules (MDER), codificación usada en el intercambio de información X73. o Nuevo codificador y decodificador para MDER. o Tipos de datos ASN.1 Soporte para el Modelo de Comunicación. o Características de las comunicaciones o Máquina de estados del manager Implementación libre de Health Device Profile (HDP) y Multi-Channel Adaptation Protocol (MCAP) para la pila de protocolos BlueZ (para tecnología Bluetooth sobre sistema operativo Linux). Página | 8 A día de hoy, ya se ha conseguido realizar una comunicación satisfactoria entre un pulsioxímetro Nonin, que cumple con X73, y un teléfono móvil Nexus One a través de Bluetooth usando el motor X73-20601 desarrollado por el equipo de Morfeo. La plataforma sobre la que se ha desarrollado este proyecto es Android, un sistema operativo orientado a dispositivos móviles basado en una versión modificada del núcleo Linux. Este sistema fue inicialmente desarrollado por Android Inc., compañía que fue comprada posteriormente por Google, y en la actualidad lo desarrollan los miembros de la Open Handset Alliance (liderada por Google). El impulso de esta plataforma por parte de Google ha hecho que se esté imponiendo como sistema operativo para dispositivos móviles rivalizando fuertemente con iOS, el sistema operativo de Apple. Es importante destacar que este proyecto se distribuye bajo los términos de la licencia GPL versión 3 o posterior. Healthy Interoperability [4] es un conglomerado de investigaciones y actividades de desarrollo en los campos de: e-Salud, interoperabilidad, validación, integración técnica y seguridad de dispositivos médicos e información. El proyecto, desarrollado por la universidad de ciencias aplicadas Technikum de Viena, nace en el año 2008 a partir de un grupo de estudiantes de postgrado en Ingeniería Biomédica. Estos estudiantes iniciaron un proyecto: desarrollar una plataforma software modular para gestionar y visualizar señales biomédicas. El objetivo de este primer proyecto dentro del marco de Healthy Interoperability es construir un software que se capaz de manejar diferentes estándares y formatos de dispositivos biomédicos. El proyecto es apoyado por la agencia austriaca para la promoción de la investigación (Austrian Research Promotion Agency , FFG) dentro del programa "FHPlus in Coin" y por el departamento municipal de la ciudad de Viena número 27, "EU-strategy and economic development" siguiendo las guías "Fachhochschulförderrichtlinie" del año 2005. La finalidad del proyecto es analizar las diferentes propuestas internacionales para la comunicación consistente de datos provenientes de sensores y otros instrumentos a sistemas de información de instalaciones de salud o historial clínico electrónico. Se desarrollarán métodos a partir de los resultados obtenidos por proyectos de investigación internacionales y normas internacionales como X73, HL7, UNE-EN/ISO13606 y otras iniciativas como IHE o Continua Health Alliance. Esta iniciativa es, junto con el proyecto upHealth.ES del subgrupo de telemedicina de GTC/I3A de la Universidad de Zaragoza, una de las primeras que ha comenzado a abordar la problemática extremo a extremo, desde la medida con el dispositivo médico hasta la recepción de la misma en el centro hospitalario. Google Health [5] es un servicio de historial médico personal desarrollado por Google. Este servicio permite a los usuarios introducir información clínica como estados de salud, medicaciones, alergias, resultados de análisis, entre otros. A través de esta información, Google Health proporciona al usuario una historia clínica, información de su estado y posibles interacciones entre medicamentos o alergias. En septiembre del 2010 Google actualizó el servicio dotándolo de nuevas características como monitorización del ejercicio, dieta y parámetros variados como niveles de colesterol, peso o presión arterial. Además, se añadieron gráficas para visualizar y comprender mejor nuestra salud y efectos de nuestros hábitos a diferentes niveles físicos. Microsoft HealthVault [6] es un servicio gratuito que permite que los pacientes almacenen todos los datos relacionados con temas de salud, ofreciéndoles una plataforma de aplicaciones que trabajan con estos datos. En HealthVault, los usuarios pueden permitir a las aplicaciones el acceso a sus datos de salud personal, aunque estas aplicaciones no podrán en ningún momento recopilar datos personales de los usuarios. HealthVault no es solo una plataforma orientada a mejorar los sistemas de salud de los usuarios, sino que para Microsoft también será un negocio ya que lo utilizará como soporte publicitario. Según Microsoft, de momento no existen planes de compartir la información de los usuarios con el National Health Service (NHS), pero asegura que esta nueva plataforma de salud en la nube, será de gran ayuda para el sistema sanitario público. Página | 9 2.3. Tecnologías de transporte y perfiles médicos A continuación se analiza las diferentes tecnologías de transporte que han desarrollado un perfil médico especializado para X73PHD. Actualmente, dichas tecnologías son tres: para comunicaciones cableadas, el perfil USB PHDC y, para comunicaciones inalámbricas, los perfiles Bluetooth HDP y ZigBee HCP. La estructura genérica de la pila de protocolos X73PHD se muestra en la Figura 2.3. Las capas inferiores (1-4 del modelo OSI) corresponden a las diferentes tecnologías de transporte existentes y las capas superiores (5-7 del modelo OSI) dan cabida a las funcionalidades propias de X73PHD (que englobarían el protocolo de comunicación X73-20601 y las especializaciones X73-104zz) y a las de nivel de aplicación fuera del alcance de X73PHD. Application Application Layers Layers (OSI (OSI5-7 5-7Layers) Layers) ISO/IEEE PHD Functionality Non PHD Supporting Functionality Transport Layers (OSI 1-4 Layers) Multiple Transport Technologies Figura 2.3. Pila genérica de protocolos X73PHD USB Personal Health Device Class (USB PHDC) Universal Serial Bus (USB) es una especificación para establecer una comunicación cableada entre un host y toda una gama de dispositivos cliente, por este motivo el sistema USB tiene un diseño asimétrico master-slave. USB 2.0, lanzada en abril de 2000 y estandarizada a finales de 2001 por USB Implementers Forum (USB IF), es la especificación más común en los equipos pudiendo alcanzar velocidades de transferencia de 480 Mbit/s. USB fue la primera tecnología que publicó un perfil compatible con X73PHD, ya que antes los dispositivos de salud USB estaban obligados a implementar métodos propietarios para transmitir información y usar algunas de las clases definidas. Típicamente se empleaba la clase Human Interface Device (HID), definida para ratones y teclados, o bien la clase Vendor Specific, que requería de drivers propietarios específicos para cada dispositivo. De esta necesidad se forma en abril del 2007 el USB Personal Healthcare Working Group que publica el 8 de noviembre del mismo año la clase USB PHDC [7], que sigue vigente a día de hoy sin revisión alguna. El objetivo de una especificación de clase es permitir la interoperabilidad sin fisuras entre el USB host y aquellos dispositivos pertenecientes a la clase, en este caso dispositivos de salud personal (agentes X73PHD). La especificación describe la arquitectura completa, como se detalla en la Figura 2.4 (a), y los descriptores y comandos que un dispositivo de salud y un host deben poder soportar en virtud de intercambiar datos médicos sobre un bus USB. Un descriptor es una estructura de datos que contiene, en una serie de campos, información sobre el dispositivo y sus características. De este modo, el descriptor del dispositivo, por ejemplo, contiene información sobre la clase del dispositivo (por ejemplo, PHDC) así como información sobre el fabricante, número de serie, etc. El estándar USB PHDC define una jerarquía de descriptores que se pueden clasificar en descriptores estándar, de especificación de clase y opcionales. La jerarquía de descriptores USB PHDC se detalla en la Figura 2.4 (b). Página | 10 Personal Health Care Application -104zz Device Specializations Meta-Data -20601 Optimized Exchange Protocol Device Configuration Interface PHDC Class Funtion PHDC Function Extension Endpoint PHDC QOS USB Personal Health Device Class Driver PHDC Meta-Data Endpoint (PHDC Driver) PHDC QOS PHDC Meta-Data Figura 2.4. (a) Pila de protocolos de X73PHD sobre USB PHDC y (b) Jerarquía de descriptores USB PHDC Dentro de la jerarquía, se definen endpoints como una entidad lógica que se encuentra en el dispositivo y con el que el host establece canales lógicos denominados tuberías o pipes. Cada uno de ellos tiene su propio descriptor de calidad de servicio (Quality of Service, PHDC QoS) así como un descriptor opcional de meta-datos (PHDC meta-data). La transmisión de metadatos se realiza mediante el envío de una transacción inicial antes de enviar los datos que proporciona separación entre ambos. Dicha transacción se denomina preámbulo y es una característica opcional por lo que implementarla o no es potestad del fabricante. Sin embargo un host está obligado a soportar siempre ésta característica. Además, USB PHDC define un conjunto de endpoints (tres obligatorios y un cuarto opcional) que implementan los requerimientos de QoS mencionados: Control endpoint: requerido por USB PHDC para la tubería por defecto de control bidireccional. Dichos endpoints están siempre accesibles mientras que los demás sólo lo estarán una vez hayan sido configurados por el host. Bulk Out endpoint: proporciona un camino para las transferencias desde el host al dispositivo. Bulk In endpoint: proporciona un camino para las transferencias desde el dispositivo al host. Interrupt In endpoint (opcional): proporciona un camino hacia el host cuando sea necesario enviar datos de un modo continuo (sólo se usa para el tipo de QoS Low Good). Por último, el procedimiento de comunicación USB PHDC es el siguiente: cuando un dispositivo se conecta al bus USB, el host inicia el proceso de enumeración, lee el descriptor de dispositivo, asigna al dispositivo un número único de 0 a 127 y, si el dispositivo es soportado por el host, se cargan los drivers de comunicación apropiados en función de la clase a la que pertenezca el dispositivo. Bluetooth Health Device Profile (BT HDP) Bluetooth es una especificación para redes inalámbricas de área personal (Wireless PAN, WPAN) que posibilita la transferencia de datos entre dispositivos mediante un enlace de radiofrecuencia en la banda reservada para uso no comercial (2.4-2.5GHz) sin necesidad de licencia siempre que se respete el límite de potencia. La especificación define una pila de protocolos y una serie de perfiles. Los perfiles son guías que indican los procedimientos por los que los dispositivos Bluetooth se comunican entre sí para los diferentes tipos de uso. Existe un amplio abanico de perfiles (perfil de dispositivo de interfaz humana, perfil de telefonía inalámbrica, perfil de puerto serie, etc.). Cada perfil incluye, como mínimo, información sobre las características concretas de la pila Bluetooth utilizada por el perfil, así como las posibles dependencias de otros perfiles y propuestas del formato de nivel de aplicación. Al seguir las directrices proporcionadas por los perfiles los desarrolladores pueden crear aplicaciones compatibles con todos los dispositivos Página | 11 que se ajusten al perfil. Típicamente los dispositivos médicos comerciales con tecnología Bluetooth hacían uso de formatos propietarios no publicados sobre el perfil de puerto serie (Serial Port Profile, SPP). Para resolver estas cuestiones, Bluetooth Special Interest Group (SIG) crea en 2006 un grupo de trabajo (Medical Working Group, MedWG) con objeto de diseñar un perfil específico para dispositivos de salud personal. El resultado de este trabajo fue la publicación en Junio de 2008 del perfil Bluetooth HDP [8] junto con un nuevo protocolo específico Multi-Channel Adaptation Protocol (MCAP). HDP define los requisitos que deben implementar los dispositivos certificados como Bluetooth Healthcare & Fitness. Así, el perfil es dependiente de los protocolos MCAP, Logical Link Control and Adaptation Protocol (L2CAP) y Service Discovery Protocol (SDP) junto con el perfil Device ID (DI) y algunos procesos del perfil Generic Access Profile (GAP). MCAP coordina la creación de un canal de control y uno o más canales de datos. SDP se utiliza para descubrir otros dispositivos Bluetooth y sus servicios a través de un registro que se anuncia a través del perfil DI. El perfil GAP se encarga de procesos comunes a todos los perfiles, tales como autentificación y cifrado. L2CAP se encarga de la multiplexación de todos los protocolos superiores, del control de flujo y QoS, y de la retransmisión, segmentación y re-ensamblado de todos los paquetes. Finalmente, Host Controller Interface (HCI) describe comandos y eventos compatibles con todas las implementaciones hardware de un módulo Bluetooth. A nivel de aplicación, HDP define como obligatorio el uso del X73-20601 como único protocolo para el intercambio de datos entre dispositivos. Además, establece las denominadas Device Data Specializations compatibles con este protocolo. La pila completa de protocolos se muestra en la Figura 2.5. Personal Health Care Application -104zz Device Specializations -20601 Optimized Exchange Protocol Health Device Profile (HDP) GAP MCAP DI SDP L2CAP Host Controller ll Interface f (HCI) ( ) Bluetooth Controller Module ll Figura 2.5. Pila de protocolos de X73PHD sobre Bluetooth HDP En el perfil médico BT HDP los términos agente y manager se sustituyen por source y sink respectivamente, dado que los agentes que captan las medidas fisiológicas son las fuentes de datos y el manager el consumidor de dichos datos. El procedimiento de comunicación se inicia cuando uno de los dos dispositivos (source o sink) establece un canal de control. Este canal sólo se utiliza para tráfico MCAP y ambos dispositivos pueden utilizarlo para coordinar la creación de uno o más canales de datos por el que se intercambia el tráfico X73PHD. Finalmente, uno de los extremos finaliza la conexión; bien cerrando primero los canales de datos y después el canal de control, o cerrando directamente el canal de control que produce el cierre automático de los canales de datos. Página | 12 ZigBee Health Care Profile (ZHC) ZigBee, al igual que Bluetooth, es una tecnología para redes inalámbricas de área personal WPAN. Se trata de un conjunto de protocolos que operan sobre el estándar IEEE 802.15.4, ya que éste sólo define el nivel físico y el control de acceso al medio. Se consigue así una solución completa enfocada a aplicaciones que requieran una baja tasa de transmisión, bajo coste, larga duración de las baterías y cifrado de la información. Al igual que Bluetooth, opera en la banda ISM de 2.4GHz, pudiendo hacerlo también en la de 868MHz en Europa. La tasa de transmisión máxima es de 250kbits/s frente a los 3Mbits/s de Bluetooth, pero el número máximo de nodos en la red es de 65535 frente a los 8 de una piconet Bluetooth. El hardware es un 90% más sencillo y presenta un consumo mucho más reducido logrando autonomías de varios años. ZigBee ha sido, por el momento, la última de las tecnologías de transporte en publicar un perfil de salud que utiliza X73PHD a nivel superior: ZigBee ZHC [9], aprobado por ZigBee Alliance Board of Directors en Marzo de 2010. Este perfil ZHC proporciona una descripción de los dispositivos mediante clusters junto con el esquema de comunicación dentro de la red y los protocolos utilizados. Los clusters contienen un conjunto de atributos que representan el estado del dispositivo junto con los comandos que posibilitan la comunicación. Además, para crear un túnel de datos compatible con X73PHD, se han desarrollado una serie comandos específicos agrupados en la denominada 11073 Protocol Tunnel Cluster Library. La pila completa de protocolos se muestra en la Figura 2.6. Personal Health Care Application -104zz Device Specializations -20601 Optimized Exchange Protocol ZigBee Health Care Profile(ZHC) 11073 Protocol tunnel Cluster ZigBee Cluster Library ZZigBee igBee 2007 ZZigBee igBee 2007 PRO IEEE 802.15.4 Figura 2.6. Pila de protocolos de X73PHD sobre ZHC En el procedimiento de comunicación ZHC se establecen dos túneles o X73PHD tunnels. En uno, el manager actúa de servidor y el agente de cliente mientras que, en el otro, los roles son los recíprocos. Para iniciar la comunicación el manager comprueba si un agente posee un servidor X73PHD establecido. En ese caso, generará una petición de conexión y el agente contestará con una notificación de estado connected a partir de la cual podrán intercambiar tramas X73PHD. La adhesión al perfil permite a los fabricantes obtener la certificación ZigBee que garantiza interoperabilidad con los dispositivos de otros fabricantes. Además el hecho de que todos los perfiles se definan usando clusters de la ZigBee Cluster Library (ZCL) posibilita la reutilización de los clusters usados por varios perfiles. Página | 13 Análisis de X73PHD sobre los perfiles médicos USB, Bluetooth y ZigBee En primer lugar, para la comunicación interoperable entre USB PHDC en las capas inferiores con X73PHD en las capas superiores, se asumen las siguientes suposiciones: Los datos se envían y reciben en tramas X73PHD (Application Protocol Data Units, APDU) no superiores a 63 kBytes. USB PHDC puede enviar y recibir datos de manera opaca. En caso de que se necesite conocimiento sobre los datos enviados, esta información se facilita como metadatos junto con los datos reales. Dado que USB PHDC implementa una conexión cableada, se asume que la seguridad de los datos enviados está garantizada en la capa física. En caso de existir diferentes canales en una misma asociación device/host, la información de QoS para cada uno de los canales se especificará de manera independiente en forma de metadatos. Se usarán los siguientes tipos de calidad de servicio para describir latencia y fiabilidad (cada una con código diferente en el descriptor de QoS): Low Good, Low Medium, Medium Better, Medium Better, High Best y Very High Best. En segundo lugar, las principales ventajas de utilizar BT HDP sobre otros perfiles genéricos que se han estado usando en aplicaciones de e-Salud son las siguientes: • Método inalámbrico estandarizado para descubrir dispositivos mediante la definición de un registro estándar para SDP que contiene campos necesarios para definir un servicio conforme a BT HDP. • Canal de control robusto que requiere del empleo de nuevas capacidades de L2CAP como son: modo de retransmisión mejorado (Enhanced Retransmission Mode, ERTM) y secuencias de comprobación de trama (Frame Check Sequence, FCS). • Configuración flexible e independiente de cada uno de los canales de datos que pueden ser de tipo fiable “reliable” (si utilizan el modo ERTM del protocolo L2CAP) o de tipo “stream” (si utilizan Streaming Mode (SM) del protocolo L2CAP). • Mecanismo de re-conexión optimizado. Permite retener el estado del sistema y elimina pasos redundantes en la re-conexión. Este procedimiento reduce el consumo medio. • Optimización para dispositivos médicos con pocos recursos, ya que posee un conjunto reducido de comandos sencillos. • Autentificación y cifrado. • Sincronización precisa de reloj mediante el empleo de Clock Synchronization Protocol (CSP). No obstante, la implementación de este protocolo es opcional y no está presente en todos los dispositivos. La sincronización conseguida puede llegar a tener precisión de microsegundo. Por último, ZHC presenta algunas particularidades con respecto a los dos perfiles anteriores: • Permite indicar la ubicación en la que se instala un dispositivo mediante una serie de códigos predefinidos (baño, cocina, dormitorio, etc.). • Permite estimar la posición de un dispositivo en función de la señal recibida. • Permite a los fabricantes incluir funcionalidades no estándar mediante clusters específicos. • Permite a los dispositivos enviar voz mediante el empleo del Voice Over ZigBee Cluster. • Dentro de una red ZigBee pueden existir hasta tres tipos de dispositivos: coordinador, router y dispositivo final. El coordinador (ZigBee Coordinator, ZC) controla la red y los caminos que deben seguir los dispositivos para conectarse entre ellos, y debe existir uno por red. El router (ZigBee Router, ZR) interconecta dispositivos separados en la topología de la red. El dispositivo final (ZigBee End Device, ZED) puede comunicarse con su nodo padre (el coordinador o un router), pero no puede transmitir información destinada a otros dispositivos. Este último tipo de nodo puede estar dormido la mayor parte del tiempo aumentando la vida media de sus baterías. Página | 14 Análisis, diseño e implementación 3.1. Plataformas previas Las evoluciones sufridas en los últimos años por los estándares X73 y UNE-EN/ISO13606 y sus implicaciones, tanto en la arquitectura funcional del sistema como en las reglas de diseño del modelo de comunicaciones y sus protocolos, han requerido varias evoluciones de implementación de la plataforma telemática de integración de estándares desarrollada en el proyecto upHealth.ES que se detallan en las siguientes fases (ver Figura 3.1): Fase 1 (plataforma1.0-alfa) [10]. Primera solución end-to-end dividida en dos subsistemas: el subsistema de adquisición que permite la conexión (vía RS-232 e IrDA) entre los dispositivos médicos y un elemento central (gateway) conforme a X73PoC, y el subsistema de almacenamiento que soporta el intercambio de la información médica en un servidor de HCE conforme a ENV13606. Se basó en lenguajes C/C++ y Java, y operaba sobre SO Linux (permitiendo simular la consola Linux en computadoras con SO Windows mediante CYGWIN-POSIX/ GNU.GCC). La arquitectura X73PoC se basó en elementos de servicio (Service Element) ACSE, ROSE y CMISE definidos en librerías ASN1.C (ASNX en X73) mediante sintaxis abstracta (MDDL) y sintaxis de transferencia (MDER, BER, y PER). Fase 2 (plataforma1.5-beta) [11]. Segunda solución end-to-end que mantiene los dos subsistemas, pero evoluciona de X73PoC a X73PHD: independizando la capa de transporte (mediante un handler compatible con TCP/IP sobre USB y Bluetooth), incluyendo envío de datos episódico (al anterior periódico) mediante un sistema de buffers para las PDUs de cada capa de la pila, y optimizando el gateway hacia el concepto de CE sobre una nueva máquina de estados finita. La arquitectura integra tanto X73PoC como X73PHD, manteniendo las estructuras ACSE, ROSE y CMISE, pero flexibilizando la sintaxis MDER/BER/PER. lenguaje Linux Windows ASN.1c ASNX C/C++ Java Windows ASN.1c ASNX C/C++ Java Windows Mobile ASN.1c ASNX C/C++ Java tecnologías diseño desarrollo IrDA RS-232 prototipo PCs consola cygwin IrDA/RS-232 RJ-45 testbed PCs consola Windows USB Bluetooth demo PDAs GUI Windows estándares médicos dispositivos médicos características técnicas puntos abiertos X73PoC – ENV13606 tensiómetro - pulsioxímetro - Entorno fijo - Gateway (fijo) - Diseño ad-hoc (IrDA/RS-232) - MDER/BER/PER - ACSE/ROSE/CMISE - 1ª Implementación end-to-end - SO Windows - Entornos wireless - Funcionalidades Plug-and-Play - Diseño profesional - Interfaz usuario - Inteligencia y gestión remota X73PoC/X73PHD – ENV13606 tensiómetro - pulsioxímetro - Entorno personal - Compute Engine(fijo) - Diseño multiacceso (handler transporte) - MDER/BER/PER - ACSE/ROSE/CMISE - Funcionalidades Plug-and-Play - SO Windows ME - PDA/SmartPhones microcontroladores - Diseño completo - Perfil configuración - Interfaz usuario - Inteligencia y gestión remota plataforma 2.0-release librerías plataforma 1.5-beta sistema operativo plataforma 1.0-alfa versión plataforma Fase 3 (plataforma2.0-release) [12]. Evolución actual que integra los dos subsistemas mediante un nuevo protocolo extremo a extremo, incluye todas las evoluciones tanto de X73PHD como de UNE- EN/ISO 13606, incorpora un nuevo entorno gráfico y, sobre todo, migra la implementación de MDs y CEs hacia dispositivos móviles (PDAs, SmartPhones). La arquitectura completa se basa en X73PHD, se optimiza el código C++/Java sobre Windows, y se implementa la comunicación Bluetooth optimizando las funcionalidades ubicuas (plug-and-play y hot-swap) para permitir su aplicación a soluciones de e-Salud. X73PHD – EN13606 tensiómetro - pulsioxímetro - báscula - Entorno ubicuo - CE mutitarea (móvil) - Diseño interoperable (Máquina Estados) - MDER/XER - SE optimizados - Integración protocolo E2E (ConfigProfile) - Multiplataforma - Microcontroladores - Interfaz usuario multiconfigurable - Inteligencia y gestión remota - Pruebas clínicas - Implantación real Figura 3.1. Esquema de evolución de migraciones de la plataforma telemática de e-Salud Todas estas implementaciones son la base de la actual plataforma upHealth.ES que se describe con mayor detalle en el Anexo II de esta memoria. Página | 15 3.2. Análisis y diseño. Arquitectura propuesta En el anterior apartado se han descrito las diferentes plataformas desarrolladas en el proyecto upHealth.ES, un trabajo que se ha ido realizando desde el año 2005 y que ha atesorado una gran experiencia e influencia en el desarrollo del estándar de interoperabilidad X73. Sin embargo, a lo largo de estos años, se ha producido también un proceso de auto crítica intentando detectar las limitaciones de las soluciones implementadas y, sobre todo, conocer qué líneas de trabajo e investigación se deberían seguir en un futuro. Estos análisis se han realizado a todos los niveles, aunque este documento únicamente se centrará en las líneas estratégicas tomadas a nivel técnico y la decisión final de crear una nueva plataforma de desarrollo. El primero de los pasos fue el análisis de fallos y limitaciones de las anteriores plataformas: Escalabilidad. Definida como la propiedad deseable de un sistema, una red o un proceso, que indica su habilidad para extender el margen de operaciones sin perder calidad, o bien manejar el crecimiento continuo de trabajo de manera fluida, o bien para estar preparado para hacerse más grande sin perder calidad en los servicios ofrecidos. Las anteriores plataformas carecían de esta propiedad: intentar añadir nuevas funcionalidades a cualquiera de ellas requería un proceso muy complicado de modificación del código. Modularidad. Definida como la capacidad que tiene un sistema de ser estudiado, visto o entendido como la unión de varias partes que interactúan entre sí y que trabajan para alcanzar un objetivo común, realizando cada una de ellas una tarea necesaria para la consecución de dicho objetivo. De nuevo, se carecía de esta propiedad. El código se mezclaba de tal forma que era imposible separar la parte donde se realizaban tareas de comunicación y procesado de la información de la parte gráfica. Portabilidad. Definida como la característica que posee un software para ejecutarse en diferentes plataformas. En todas las plataformas desarrolladas el resultado final tenía como objetivo una pareja arquitectura-sistema operativo muy clara, siendo necesario pequeñas y, en muchas ocasiones, grandes modificaciones para usar una solución entre diferentes entornos. Mantenibilidad. Definida como la facilidad con la que un sistema o componente software puede ser modificado para corregir fallos, mejorar su funcionamiento u otros atributos o adaptarse a cambios en el entorno. Ligada con las anteriores características, era imposible corregir un fallo sin tener que rehacer prácticamente todo el código. Robustez. Definida como la capacidad de un software de reaccionar apropiadamente ante condiciones excepcionales. Las plataformas realizaban el trabajo para el que estaban preparadas pero, si se realizaba cualquier cambio en el flujo de trabajo, las aplicaciones podían fallar. Usabilidad. Definida como la capacidad de un software de ser comprendido, aprendido, usado y ser atractivo para el usuario, en condiciones específicas de uso. Es algo que no se tuvo en cuenta en las anteriores plataformas. e-Accesibilidad. Definida como el grado en el que todas las personas pueden utilizar un objeto, visitar un lugar o acceder a un servicio, independientemente de sus capacidades técnicas, cognitivas o físicas. Al igual que la usabilidad, es otro concepto que no se tuvo en cuenta en las anteriores soluciones. No se tenía en cuenta las posibles discapacidades del usuario. Ante la ausencia parcial, y en ocasiones total, de las características descritas en las anteriores plataformas, el siguiente paso era el diseño de una nueva solución que tuviera en cuenta todas estas cualidades del desarrollo de un nuevo software. Para ello, el segundo de los pasos era realizar una adecuada elección del lenguaje de programación. La elección de la plataforma o framework de desarrollo y lenguaje de programación que se utilizan en un proyecto de estas características es un punto crítico que puede afectar a la evolución del software en un futuro. El primer paso en esta elección es decidir si se opta por un lenguaje de alto nivel, como Java o C#, o por uno de bajo nivel, como C++. Elegir un tipo u otro de lenguaje de programación tiene sus ventajas y sus inconvenientes. La elección de C++ supone una serie de ventajas: Los compiladores de C++ generan código nativo con un alto grado de optimización en memoria y velocidad, lo que lo convierte en uno de los lenguajes más eficientes. Es un lenguaje que puede considerarse de nivel intermedio, pudiéndose utilizar tanto para escribir software de bajo nivel, como drivers y componentes de sistemas operativos, como para el desarrollo de aplicaciones. Posibilidad de utilizar la solución en dispositivos embebidos con mínimos cambios, pues la mayoría suelen ser programados en C o C++. Sin embargo, existen una serie de inconvenientes: Portabilidad. Aunque en ocasiones pequeños, casi siempre es necesario realizar cambios en el código cuando se intenta portar una solución de una a otra plataforma. Página | 16 La facilidad de desarrollo cae en picado respecto a lenguajes de más alto nivel como los anteriormente comentados: hay que conocer cómo se realiza la gestión de la memoria, punteros, etc. Aunque es un lenguaje con el que prácticamente puede desarrollarse cualquier tipo de aplicación, no es un lenguaje “moderno” orientado a plataformas web, algo muy importante y necesario para la solución propuesta en un futuro. La comparativa entre los diferentes lenguajes de programación podría suponer páginas o incluso libros enteros, algo que no es objetivo de esta memoria. La plataforma que se pretendía construir no requiere una gran eficiencia y velocidad. Por el contrario, sí que es necesario en un entorno como el académico donde los proyectistas fin de carrera o becarios tienen poca experiencia programando, un lenguaje de programación fácil de entender, intuitivo, moderno, que permita realizar desarrollos de una forma ágil y sencilla. Se pretendía, además, llegar con el mismo código a diferentes arquitecturas sin que sea necesario realizar cambios. Y sobre todo, el futuro de los servicios web que tendrán una gran importancia a la hora de transmitir datos desde el manager a servidores remotos, marca una clara inclinación hacia lenguajes como C# o Java. Sin embargo, no hay que olvidar C++. Este lenguaje de programación, aunque como ya se ha comentado puede considerarse de nivel intermedio, se desmarca un poco de las características deseadas ya descritas. La complejidad del código aumenta, aunque también lo hace la eficiencia. No tiene detrás unas plataformas (o frameworks) de desarrollo tan intuitivos y orientados a la web como C# o Java. Por todo ello, se descarta como lenguaje principal de desarrollo, aunque será necesario en los niveles bajos de la pila de protocolos para implementar ciertas capas de comunicación, como en el caso del perfil médico Bluetooth HDP. La decisión entonces está entre Java o C#. Las similitudes son muchas: orientación a objetos, independencia de la plataforma, sintaxis muy similar, recolector de basura, entre otras. Existen por supuesto diferencias, aunque son muy escasas. Por ejemplo, en C# incluso los tipos básicos (como int) son objetos, lo que lo hace un lenguaje todavía más orientado a objetos. Otra gran diferencia es que C# es un estándar ECMA, mientras que Java no es un lenguaje estándar. Java fue desarrollado por Sun Microsystems en los años 90 y no fue hasta mayo del 2007 cuando Sun liberó la mayor parte de sus tecnologías Java bajo la licencia GNU GPL, de acuerdo con las especificaciones del Java Community Process, de tal forma que prácticamente todo el Java de Sun es ahora software libre (aunque la biblioteca de clases de Sun que se requiere para ejecutar los programas Java aún no lo es). En el caso de Java, se compila el código fuente escrito para generar un código conocido como bytecode. Esta pieza está “a medio camino” entre el código fuente y el código máquina que entiende el dispositivo destino. El bytecode es ejecutado entonces en la máquina virtual (Java Virtual Machine, JVM), un programa escrito en código nativo de la plataforma destino (que es el que entiende su hardware), que interpreta y ejecuta el código. El caso de C# es muy similar al anterior aunque presenta algunas peculiaridades. El Common Language Runtime (CLR) ejecuta una forma de código intermedio (bytecode) llamada Common Intermediate Language (CIL). El CLR actúa como una máquina virtual, encargándose de ejecutar las aplicaciones diseñadas en C#. Es decir, cualquier plataforma para la que exista una versión del CLR podrá ejecutar cualquier aplicación escrita en este lenguaje. Existen versiones del CLR para la mayoría de las versiones de Windows (.NET): Windows 95, Windows 98, Windows ME, Windows NT 4.0, Windows 2000, Windows XP y Windows CE (que puede ser usado en CPUs que no sean de la familia x86). Existen también versiones del CLR para otros sistemas operativos como Linux o Mac OS (Mono). Asimismo, dado que la arquitectura del CLR está totalmente abierta, es posible que en el futuro se diseñen versiones del mismo para otros sistemas operativos. El CLR, y esto es una diferencia muy sustancial respecto a Java, funciona también como integrador de lenguajes. Desde cualquier lenguaje para el que exista un compilador que genere código para la plataforma .NET/Mono es posible utilizar código generado para la misma usando cualquier otro lenguaje tal y como si de código escrito usando el primero se tratase. La integración de lenguajes es tal que es posible escribir una clase en C# que herede de otra escrita en Visual Basic.NET que, a su vez, herede de otra escrita en C++.NET. El CLR ha sido, desde sus primeras versiones más eficiente y funcionalmente completo que la JVM de Java. En la JVM no hay soporte para técnicas tan útiles como los tipos enumerados o el traspaso de parámetros por referencia (especialmente de los tipos de datos primitivos). Esto se paga en velocidad de ejecución y en menor productividad, al tener el programador que tratar con un lenguaje menos expresivo. Por último, destacar que el bytecode de Java muchas veces termina por ser interpretado, en cambio el código intermedio de C# nunca se interpreta, sino que siempre se transforma en eficiente código nativo como se observa en la Figura 3.2. Página | 17 Código Fuente C# Compilador Código CIL (Bytecode) CLR (Compilador JIT) Código Nativo Figura 3.2. Esquema de funcionamiento de C# La decisión de optar por uno u otro lenguaje no es sencilla. Por ello, hay que buscar la diferencia más allá de lo que es el lenguaje de programación. Ambos lenguajes tienen plataformas de desarrollo construidas alrededor de ellos que facilitan la programación ágil de multitud de aplicaciones. Java, por ejemplo, se apoya en las siguientes plataformas: J2SE: Plataforma Java 2, Standard Edition. Kit de desarrollo de software que se utiliza para escribir applets y aplicaciones con el lenguaje de programación Java J2EE: Plataforma Java 2, Enterprise Edition. Plataforma de para desarrollar y ejecutar software de aplicaciones en Java con arquitectura de N niveles distribuida, basándose ampliamente en componentes de software modulares ejecutándose sobre un servidor de aplicaciones J2ME: Plataforma Java 3, Micro Edition. Especificación de un subconjunto de la plataforma Java orientada a proveer una colección certificada de Application Program Interfaces (API) de desarrollo de software para dispositivos con recursos restringidos (PDAs, teléfonos móviles, etc.) El caso de C# es algo más complicado. Al ser un estándar ECMA, no existe una única implementación, sino varias. Las más conocidas son las de Microsoft, conocida como .NET, y Mono, implementación Open Source de .NET: NET. Desarrollada por Microsoft o ASP.NET. Desarrollo web o ADO.NET. Acceso datos o .NET Compact. Desarrollo móvil (Windows Mobile) Mono. Implementación Open Source de .NET o Moonlight. Implementación Open Source de Silverlight. o MonoTouch. Posibilidad de utilizar C# para desarrollar en iPhone previo pago (versión Android en desarrollo). o Incluye además librerías específicas de Mono: Posix, GTK, etc. A la hora de analizar las soluciones que presentan ambos para el desarrollo de aplicaciones gráficas existen muchas alternativas. Para Java: AWT. Librerías básicas de Java para la creación de interfaces gráficos Swing SWT JavaFX. Interfaces gráficos enriquecidos: Web, escritorio o móvil Para C#: WinForms. Formularios Windows GTK#. Desarrollo de interfaces gráficos para Linux Windows Presentation Foundation (WPF). Interfaces gráficos enriquecidos. Web, escritorio o móvil. Incluye Silverlight: subconjunto de WPF para crear aplicaciones estilo Flash y aplicaciones móviles Si se analizan los entornos de desarrollo (Interface Development Environment, IDE), las diferencias tampoco son muy críticas. Para Java, los principales IDEs son Eclipse (ver Figura 3.3) y Netbeans. Para C# existen Visual Studio de Microsoft (ver Figura 3.4), SharpDevelop o MonoDevelop. Página | 18 Figura 3.3. Entorno de desarrollo Eclipse Figura 3.4. Entorno de desarrollo Visual Studio 2008 Como se ha comentado anteriormente, en ocasiones se necesitará usar lenguajes como C++ o C para acceder a características del sistema operativo y construir librerías nativas a las que acceder a través de código. En este punto, el acceso a librerías nativas, C# es mucho más rápido que Java. Este último necesita realizar una transformación de clases y tipos, que se realiza mediante Java Native Interface (JNI) y que no es nada intuitiva. Mientras que el acceso a librerías escritas en C++ o C desde C# es casi inmediato. Y finalmente, se analiza el número de arquitecturas o plataformas a las que se podría llegar con uno u otro lenguaje. Desarrollando la plataforma en Java, se podría usar en sistemas operativos como Windows, Linux o Mac Os. Podría usarse también (quizás con algunos cambios mínimos) en dispositivos Android o móviles J2ME (ver Figura 3.5). Con C# se puede acceder también a Windows, Linux o Mac Os. Con el mismo código se puede llegar a dispositivos Android en un futuro no muy lejano, pues MonoTouch está siendo adaptado a estas plataformas. Además, los dispositivos con Windows Mobile, los Zune (que todavía no han llegado a España) o Windows Phone 7 también serán accesibles. MonoTouch dará la opción de llevar el código a móviles iPhone o la tablet de Apple: el iPad. La Xbox 360 también admite aplicaciones desarrolladas en C#, aunque tendría que analizarse el nivel de acceso a los dispositivos que nos ofrece este dispositivo (ver Figura 3.6). Figura 3.5. Plataformas objetivo de Java Figura 3.6. Plataformas objetivo de C# Con todo lo expuesto, se analizaron los pros y los contras de cada uno de los lenguajes de programación y frameworks de desarrollo y se tomó una decisión: la plataforma presentada en este TFM hace uso de C# como lenguaje de programación y Mono, la implementación libre de C#, como plataforma de desarrollo multiplataforma (Windows/Linux/Mac Os). Además, a este nuevo proyecto se le dio el nombre de uz.Health. Página | 19 Diseño de la nueva arquitectura Al igual que en los procesos de desarrollo de software empresarial donde se realiza una separación de la lógica de negocios de la lógica de diseño, se pretendía construir una arquitectura basada en capas abstractas que definieran y separaran claramente las diferentes funcionalidades de la solución (ver Figura 3.7). Con esta idea, se pretende que la nueva solución, cumpla con las características definidas al comienzo de este capítulo. Esta arquitectura ofrece la posibilidad de crear una o diferentes interfaces de usuario totalmente independientes del núcleo e incluso del lenguaje de programación (con alguna capa de adaptación) lo que permitiría dotar al núcleo de capacidades de actualización automática, sin necesidad de modificar el resto de capas. O incluso proporcionar conexión y desconexión de diferentes tecnologías de transporte sin tener que modificar el núcleo de proceso principal, que en este caso sería X73-20601, aunque se contempla que en un futuro se puedan introducir otros protocolos de comunicación como el antiguo X73PoC, HL7, etc. En la Figura 3.8 se observa el diseño basado en capas de abstracción de la solución. Esta arquitectura presenta tres capas principales: La capa tecnológica, donde se integrarán las tecnologías de transporte como Bluetooth, USB y ZigBee. Esta capa presentará un interfaz homogéneo de comunicación hacia la capa superior a través de canales virtuales que posteriormente se desarrollarán. Existirán casos excepcionales como Bluetooth donde en ocasiones es necesaria la participación del usuario saltando la capa intermedia por ser innecesaria. La capa de comunicaciones que presenta los diferentes protocolos de comunicaciones como pueden ser X73PHD, X73PoC o, en un futuro, otros como HL7 o protocolos propietarios. La capa de usuario donde se encuentra un interfaz gráfico web, o un interfaz gráfico de escritorio, o incluso otros servicios de valor añadido al usuario. Modelo Empresarial Modelo Adaptado Presentación Usuario Negocio Protocolo de comunicaciones Acceso a datos Tecnologías de transporte Base de datos Figura 3.7. Modelo de separación en capas abstractas Figura 3.8. Arquitectura de la solución según diseño basado en capas de abstracción Página | 20 El núcleo central En este tipo de arquitectura es crítico el diseño de la capa central, pues es el bloque que recibe los datos enviados por uno o más sistemas agente y gestiona el proceso de comunicación para asegurar que el intercambio de datos sea de acuerdo al protocolo elegido (en este caso el protocolo de intercambio de datos extendido X73-20601). A continuación, se describe brevemente cómo se diseñó esta capa según la norma X73 pero teniendo presente que el diseño es portable a cualquier otro protocolo de comunicaciones. Todos los protocolos definidos por X73 utilizan sintaxis abstracta para facilitar la especificación de las estructuras de datos sin hacer referencia a una tecnología de implementación concreta. ASN.1, junto con unas reglas de codificación específicas de ASN.1, facilitan el intercambio de estructuras de datos describiendo esas estructuras de una forma que es independiente de la arquitectura de la máquina y el lenguaje de implementación. La norma X73-20601 utiliza reglas de codificación MDER optimizadas para ASN.1. MDER fue elaborada en X73-20101 para minimizar el ancho de banda utilizado en las transferencias de datos médicos personales entre agentes y managers. La ausencia de implementaciones open source de estas reglas de codificación motivó la utilización y modificación de BinaryNotes, un framework ASN.1 para C#. Este framework presentaba las reglas de codificación más comunes como BER, PER o DER, sin embargo MDER no era soportado y tuvo que implementarse un nuevo codificador y decodificador para reglas entre dispositivos médicos. MDER es obligatorio tanto para agente como manager aunque los dispositivos pueden opcionalmente establecer otras reglas de codificación como PER o XER. Este bloque central utiliza las librerías de BinaryNotes para codificar las Applications Protocol Data Unit (APDUs) o tramas de datos, utilizando las reglas de codificación anteriormente descritas además de las reglas MDER implementadas para este proyecto. La Figura 3.9 ilustra los componentes principales de la implementación: El Domain Information Model (DIM) constituye el núcleo principal de esta implementación. Este define un conjunto de clases para modelar agentes según objetos que pueden contener fuentes de datos como señales biológicas, eventos, informes de alertas, etc. Define así mismo su relación y los métodos que un manager puede usar para controlar el comportamiento de un sistema agente. El modelo de servicio define el mecanismo de los servicios de intercambio de datos. Estos servicios están mapeados en mensajes codificados usando ASN.1 que se intercambian agente y manager. Finalmente, el modelo de comunicación se ha implementado a través de una máquina de estados finitos FSM que sincroniza los mensajes intercambiados en las conexiones punto a punto entre manager y agente. Para mantener la independencia con la capa de transporte, se ha desarrollado un modelo abstracto de comunicación basado en canales virtuales. Un canal virtual puede gestionar varios canales simultáneos al mismo tiempo en cada conexión agente-manager. Además, cada uno de esos canales dentro de un canal virtual puede ser de una tecnología diferente, como Bluetooth puerto serie (RFCOMM) o Bluetooth HDP. De esta forma se facilita un interfaz común de comunicación al manager para enviar y recibir PDUs desde o hacia el sistema agente. Para facilitar las tareas de las capas superiores, este núcleo central publica notificaciones sobre eventos internos recibidos desde los agentes además de facilitar un interfaz para controlar el estado de los agentes conectados al manager. Las aplicaciones que usen este núcleo central pueden suscribirse a eventos de la forma tradicional de C# pudiendo obtener notificaciones sobre eventos genéricos en el manager como conexiones o desconexiones de un nuevo agente. En un futuro cercano Otro de los conceptos que se desean aplicar a este diseño en un futuro es el de arquitectura basada en plug-ins, también conocidos como complementos o extensiones. Los plug-ins son módulos que se relacionan con una aplicación para aportarle una función nueva y generalmente muy específica (ver Figura 3.10). Claro ejemplo de este tipo de arquitectura es el navegador web de Mozilla Firefox, al que se le pueden ir añadiendo nuevas funcionalidades como bloqueador de ventanas emergentes, gestor de descargas, mejora de gestión de pestañas, etc. Los complementos permiten además: Que los desarrolladores externos colaboren con la aplicación principal extendiendo sus funciones Reducir el tamaño de la aplicación Separar el código fuente de la aplicación a causa de la incompatibilidad de las licencias de software Página | 21 Sin embargo, también se pueden encontrar una serie de inconvenientes: Necesidad de un mayor control de errores Compromisos de seguridad. Incompatibilidades entre módulos Este concepto de arquitectura es muy complejo, por ello es necesario la abstracción y estudio a fondo de toda la solución. Se debe definir una interfaz de programación de aplicaciones (API) que permita a terceros crear complementos que interactúen con el bloque principal propuesto. La necesidad de crear una API robusta hace que aunque se tenga presente esta orientación a la hora del desarrollo, no se aplique de forma definitiva hasta bien avanzado el desarrollo. User Layer DIM Service Model Communication Model ISO/IEEE 11073-20601 BER DER PER MDER BinaryNotes Framework Virtual Channel HDP Channel TCP Channel RFCOMM Ch. Figura 3.9. Arquitectura propuesta para el manager X73PHD Figura 3.10. Esquema de conexión de módulos o plug-ins externos Página | 22 3.3. Implementación La implementación de la plataforma está pensada como si fuera un cubo de piezas donde cada usuario pueda construir un manager o un agente pieza por pieza dándole un estilo personal si fuera necesario. Todas estas piezas se pueden obtener de la librería principal (que se ha dado denominado UZ_ieee_11073, ver Figura 3.11). Esta librería, desarrollada en C#, contiene todos los objetos necesarios para crear un manager compatible con X73PHD. Esta librería depende únicamente de la librería BinaryNotes y es compatible con la versión 2.0 del framework .NET o superiores. De esta forma, se asegura la total compatibilidad con la plataforma Mono. A continuación, se muestra en Figura 3.11 una imagen de la solución UZ_ieee_11073 en el IDE de desarrollo Visual Studio 2010. Figura 3.11. Solución propuesta UZ_ieee_11073 y lista de dependencias BinaryNotes. Generando los objetos ASN.1 BinaryNotes es un framework ASN.1 completo Open Source para Java y para C# además de un compilador que construye clases Java o C# a partir de un fichero de especificaciones ASN.1. Este framework contiene: Librería de codificación y decodificación. Esta librería implementa las reglas de codificación BER, PER y DER. BNCompiler. Compilador ASN.1 que puede ser ampliado y que es capaz de generar clases Java o C# a partir de un fichero ASN.1 específico de entrada. Se pueden personalizar los ficheros generados cambiando las plantillas XSL o creando plantillas propias. Colas de mensajes. Implementación de colas de mensajes de alto rendimiento basadas en codificación ASN.1 Sin embargo, BinaryNotes, como ya se comentó, no implementa las reglas de codificación MDER empleadas por X73PHD para el intercambio de información. Para ello, ha sido necesario la modificación y creación de algunas clases dentro del código de BinaryNotes. Las modificaciones de la librería se han realizado apoyándose en el documento de la norma ISO/IEEE 11073-20101:2004 donde se define las reglas de codificación MDER y siguiendo el estilo de programación del resto de clases de la librería BinaryNotes. En el documento de la norma se describen también tipos de datos, atributos, objetos, etc. que utiliza el estándar X73PHD para representar datos. Toda esa información descrita en formato ASN.1 debe ser traducida a objetos de C#. Para realizar esta tarea se utiliza el compilador BNCompiler. Los pasos a seguir, así como todos los detalles del código de BinaryNotes, se describen en el Anexo III. Librería UZ_ieee_11073 Con casi 4000 líneas de código, la librería UZ_ieee_11073.dll contiene el grueso de desarrollo de este TFM implementando toda la arquitectura propuesta en el anterior capítulo. El proyecto se ha organizado intentando separar las partes en las que se divide el estándar y todas aquellas clases de apoyo que tienen algo en común. A continuación se describe el contenido y objetos de cada una de las carpetas. Los detalles de cada uno de estos módulos se detallan en Anexo III. Página | 23 Config: Contiene las clases que gestionan la configuración de un dispositivo, como tipo de codificación, versión de protocolo utilizada, etc. Core: Esta carpeta contiene los objetos a más alto nivel de la librería. Los objetos agente y manager se construyen a partir de canales, objetos MDS, etc. Events: El núcleo X73PHD publica eventos para que otras clases u objetos los reciban como nuevas medidas, conexiones y desconexiones de dispositivos. Esta carpeta contiene las clases que se encargan del sistema de eventos de la implementación. Exceptions: No solo pueden generarse eventos sino también excepciones de muchos tipos durante la ejecución del núcleo. En esta carpeta se encuentran los tipos de excepciones utilizadas explícitamente para esta implementación. Gateway: Para comunicar el núcleo X73PHD con el mundo exterior en ocasiones se necesita alguna capa de adaptación, contenida en esta carpeta. Logging: La implementación se ha construido utilizando un sistema de log de errores robusto, flexible y multi-hilo permitiendo generar múltiples tipos de mensajes, ya sea por consola, mensajes remotos, etc. Part_10101: En esta carpeta se contiene en una única clase toda la nomenclatura del estándar. Part_104xx: Los dispositivos médicos se ven como especializaciones de X73PHD. En esta carpeta se contienen todas las especializaciones soportadas por esta implementación. A día de hoy solo se soportan las especializaciones 10408 (termómetro) y 10404 (pulsioxímetro). Sin embargo, gracias a la modularidad de la solución, soportar más especializaciones es tan sencillo como crear una nueva clase similar a estas otras. Part_20601: Esta carpeta contiene el grueso de la implementación, máquina de estados finitos, canales, canales virtuales, tipos de PDUs, etc. Utils: Esta carpeta contiene clases de apoyo al resto de clases para realizar operaciones determinadas u objetos que no tienen una clasificación especial. Se incluye de forma gráfica en la Figura 3.12 un esquema de implementación de la máquina de estados X73PHD: Figura 3.12. Esquema de implementación de la máquina de estados X73PHD Página | 24 3.4. Integración de Bluetooth HDP Uno de los retos más importantes que afronta este TFM es la integración del perfil médico Bluetooth HDP en la nueva plataforma. Los anteriores desarrollos de upHealth.ES hacían uso de TCP/IP o Bluetooth RFCOMM como tecnologías de transporte por debajo de X73PHD. Por primera vez se utiliza el perfil médico Bluetooth HDP como tecnología de transporte construyendo la primera solución totalmente compatible con el estándar X73PHD. Este logro se ha conseguido en colaboración con la Universidad Juan Carlos I (especializada en estos últimos años en desarrollos a bajo nivel de X73PHD) y en el contexto de la primera de las prácticas médicas realizadas en este TFM. El perfil médico Bluetooth HDP en combinación con la especificación X73-20601 facilita un framework robusto y basado en estándares que permite la interoperabilidad completa entre dispositivos de e-Salud sobre Bluetooth. Este nuevo perfil médico Bluetooth HDP ha traído consigo el desarrollo de dos especificaciones en la pila de protocolos específicas para dispositivos médicos como son MCAP y HDP. MCAP permite una conexión robusta incluyendo además soporte para datos en streaming. El perfil Bluetooth HDP permite a los dispositivos agente (conocidos en Bluetooth como source y asociados a tensiómetros, pulsioxímetros, etc.) intercambiar datos con los dispositivos manager (conocidos en Bluetooth como sink y asociados a móviles, portátiles, SmartPhones, Tablet PCs específicos para e-Salud, etc.). A día de hoy únicamente algunas pilas Bluetooth comerciales presentan compatibilidad con el nuevo perfil médico Bluetooth HDP: Jungo BTware [13], diseñada para sistemas empotrados de bajo consumo; Stollmann BlueCode+ [14], diseñada con una arquitectura independiente de la plataforma; Toshiba Bluetooth Stack [15], para Windows y certificada por Continua; y Ethermind Bluetooth Stack [16], desarrollada por la empresa Mindtree para sistemas empotrados y otras arquitecturas. Sin embargo, todas ellas se apartan del camino elegido por el proyecto upHealth.ES pues se tratan de soluciones comerciales, cerradas, que no permiten evolucionar el desarrollo con nuevas funcionalidades en un futuro y se alejan de los paradigmas de diseño que se quieren imponer en la nueva plataforma. Desde la Universidad Juan Carlos I, en el año 2009, se inició el camino para integrar el nuevo perfil médico Bluetooth HDP en la pila oficial BlueZ de Linux [17]. Esta iniciativa tenía como objetivo final la inclusión de HDP/MCAP en el núcleo de Linux y de esta forma ofrecer las nuevas funcionalidades HDP a plataformas como Linux, Android o Meego. En la Figura 3.13 se muestra un diagrama de bloques de la arquitectura BlueZ (en azul se muestran los bloques que no estaban previamente implementados en BlueZ o que necesitaron ajustar parte de su código, como L2CAP): MCAP es un protocolo basado en L2CAP que facilita un mecanismo sencillo para manejar múltiples canales de datos. Este protocolo soporta diferentes configuraciones de canal dependiendo de la aplicación o las necesidades de la transmisión como por ejemplo los modos reliable o streaming. HDP es un perfil que simplifica el uso de MCAP y es el encargado de anunciar a otros dispositivos las características soportadas así como los canales usados por cada perfil. Para estos anuncios hace uso del Service Discovery Application Profile (SDP). De esta forma, los dispositivos pueden encontrar al manager y conectar con él o viceversa, el manager puede iniciar una conexión a un dispositivo. DI especifica un método por el cual dispositivos Bluetooth comparten información que puede ser usada por otro dispositivos para encontrar imágenes o software asociado, como por ejemplo controladores específicos. Toda esta información también se publica en el registro SDP. Health Device Profile (HDP) GAP MCAP DI SDP L2CAP Host Controller Interface (HCI) Bluetooth Module Figura 3.13. Pila de protocolos BlueZ Página | 25 Implementando MCAP La implementación de MCAP se ha realizado totalmente compatible con la especificación de Bluetooth SIG, soportando todas las características obligatorias y algunas de las opcionales, como la re-conexión de canal. Como ya se ha comentado, MCAP requiere los modos de streaming y retransmisión mejorada de L2CAP. Estos modos no existían al comienzo del desarrollo del perfil Bluetooth HDP, se fueron construyendo paralelamente por otros miembros de BlueZ. La arquitectura se diseñó para anunciar mediante callbacks, a las capas superiores, todos los eventos que ocurren durante la ejecución del protocolo. Este diseño permite a la capa HDP recibir todos los eventos en tiempo real de forma eficiente. Destacar que esta implementación de MCAP es multi-hilo por lo que, cuando se abre una sesión de MCAP, se inicializa un nuevo hilo esperando nuevas conexiones. Este hilo controla todas las acciones que forman parte del protocolo como conexión de nuevos canales de datos, desconexiones, re-conexiones, etc. Implementando Bluetooth HDP La implementación de Bluetooth HDP simplifica el uso de MCAP al usuario y registra toda la información necesaria en el registro SDP. Aunque en la primera versión de la implementación se usaban también callbacks para notificar eventos al usuario, la actual se ha re-escrito para adaptarse a las guías de estilo de BlueZ utilizando el sistema de mensajes de sistema DBus. Esta implementación esconde por completo el mecanismo de control de los canales, facilitando un modelo de abstracción basado en un servicio de notificación que notifica nuevos MCAP Communication Links (MCL) tales como nuevos dispositivos remotos. Además, esta implementación gestiona la creación de nuevos canales de datos y controla la correcta configuración de los mismos antes de ser notificados al usuario. DBus Antes de continuar con la integración de Bluetooth HDP en la plataforma, es imprescindible describir qué es DBus y para qué es utilizado. DBus es un protocolo de comunicación entre procesos que emplea mensajes. Ha sido diseñado para que sea ligero y fácilmente utilizado por cualquier programa. La arquitectura de DBus se compone de 2 partes básicas: la librería libdbus, y un daemon que sirve como repetidor de los mensajes. La librería libdbus crea conexiones o canales que conectan dos aplicaciones (ver Figura 3.14). Lo que hace es usar esa única conexión para conectarse al daemon de DBus, que se comporta como un repetidor. De esta forma, todas las aplicaciones que se conecten al daemon podrán contactar entre sí. La información se transmite en forma de mensajes que los hay de dos tipos: métodos y señales. Los métodos sirven para decirle a un objeto que realice una operación. Pueden requerir parámetros o no. Mientras, las señales sirven para notificar un suceso de interés general. DBus es independiente del lenguaje que se use para acceder a él y hace que los objetos sean unas entidades no asociadas a ningún lenguaje concreto. Como un objeto en DBus es una ruta, en DBus los objetos son direccionados a través de una ruta que equivale a su nombre (un programa publica “objetos-rutas” (ObjectPath) a las que se puede acceder) y son equivalentes a las que se emplean en el sistema de ficheros de Linux. Cada aplicación debe tener una ruta única y no es complicado encontrar rutas como “/org/bluez/” ó “/org/freedesktop/DBus”. A cada objeto le corresponden unos métodos. Estos métodos cambiarán el estado del objeto o nos permitirán recabar información sobre él. Si se quiere ver métodos y señales en funcionamiento hay que ejecutar el comando dbus-monitor en una consola de texto y ver cómo se suceden las acciones. Los interfaces son conjuntos de métodos con nombres predefinidos y acciones acordadas que son conceptualmente cercanos. Un interfaz puede contener todo lo necesario para reproducir música o buscar texto. Así, los interfaces pueden tener la misma ruta que los objetos y, para poder diferenciarlos, se llegó al acuerdo de que los objetos tienen rutas con “/” como separador y los interfaces tienen rutas con “.” como separador (por ejemplo, “/org/freedesktop/DBus” es un ruta y “org.freedesktop.DBus” es un interfaz). Página | 26 Un programa que quiera trabajar con DBus debe seguir unos pasos. El primero consiste en conseguir un bus, un canal, para comunicarse con el daemon de DBus. Si el daemon no está ejecutándose esto será imposible. Por tanto, hay que asegurarse de que esté funcionando. Una vez que se tenga el bus se ha de conectar con el objeto. Para ello, se debe usar su ruta. Sin embargo, este objeto no existe realmente: es un objeto DBus. Entonces, ¿cómo se puede trabajar con él desde una aplicación? La solución a este problema consiste en emplear un objeto proxy o intermediario. Su misión consiste en hacer de traductor o embajador del objeto DBus dentro de una sesión del programa. Este proxy es, en realidad, una clase del lenguaje de programación que enmascara los detalles de la interacción con DBus. El proxy se comporta como si fuese el objeto remoto, pero con sintaxis del lenguaje específico por lo que su uso será natural. Todos los detalles de la implementación Bluetooth HDP utilizando DBus se incluyen en el Anexo III. Void CreateApplication() Dict GetProperties() Call remote function CreateApplication() BlueZ uz.Health DBUS Call remote function GetProperties() Bluetooth Gnome Applet Figura 3.14. Ejemplo de conexiones de DBus Página | 27 3.5. Integración de servicios en la nube Recordando la arquitectura de capas que se ha desarrollado para este TFM, en este apartado se analiza la capa superior de usuario. Hasta ahora se ha descrito el núcleo de la plataforma, la capa de comunicaciones y en el anterior apartado se analizó la integración del perfil médico Bluetooth HDP. Para esta última capa, esta plataforma propone una prueba de concepto incluyendo servicios de valor añadido realizando un acercamiento al diseño en la nube. Además, aunque no sea el objetivo prioritario de este TFM, se desarrolló un interfaz gráfico sencillo, que reúne todos estos servicios y ofrece un acceso intuitivo a toda la plataforma de telemonitorización. Pero antes de presentar este desarrollo se necesita entender qué es la nube. La nube. Cloud computing Son muchas las nuevas tendencias tecnológicas que están aparecido en el mercado en los últimos años, algunas de ellas adoptadas de forma masiva y con mucho éxito como por ejemplo las redes sociales o de colaboración. Pero si hubiera que destacar una de ellas, que ya hoy en día está comenzando a influir en el mundo de la empresa y que en un futuro próximo será determinante en la forma de gestionar y hacer negocios, sería el cloud computing. El cloud computing ha dado lugar a varias definiciones diferentes. Una comúnmente aceptada lo explica como un modelo de pago por uso que permite un acceso cómodo y bajo demanda a un conjunto compartido de recursos informáticos configurable, como redes, servidores, almacenamiento, aplicaciones y servicios, que se puede desplegar y utilizar de forma rápida y fácil. El modelo de cloud computing ofrece cuatro tipos generales de servicios: Software como servicio: es el suministro de aplicaciones que se ofrece en una red y no precisa que los usuarios lo instalen en sus propios ordenadores (ver Figura 3.15). Este es, sin duda, el servicio más frecuente en la nube. Infraestructura como servicio: es la disponibilidad de capacidad de almacenamiento, procesamiento y de red que se factura según el consumo (ver Figura 3.16). Plataforma como servicio: se refiere a un entorno de desarrollo y herramientas y servicios asociados que se ofrece a los clientes para crear sus propias aplicaciones (ver Figura 3.17). Proceso como servicio: es la extensión lógica del software como servicio, el suministro total de un proceso, como los efectos a cobrar, en la nube. Figura 3.15. Modelo de cloud computing según un esquema “software como servicio” Página | 28 Figura 3.16. Modelo de cloud computing según un esquema “infraestructura como servicio” Figura 3.17. Modelo de cloud computing según un esquema “plataforma como servicio” Página | 29 En este contexto, es importante destacar qué niveles de valor ofrece el cloud computing: Nivel de utilidad. Menores costes y mayores niveles de servicio a través de recursos informáticos elásticos y modelos de pago por uso. Nivel de transformación de procesos. Mejor integración y colaboración de los procesos de negocio aprovechando los activos comunes en la nube. Nivel de innovación. Nuevos modelos de negocio y ecosistemas a través de vincular, compartir y combinar recursos entre empresas que utilizan los activos escalables del cloud computing. En este caso centrado en e-Salud, un ejemplo de los beneficios que se podrían obtener utilizando cloud computing sería la capacidad para acceder a aplicaciones de gestión de datos y data mining en una plataforma abierta que conecte a las compañías farmacéuticas y otras instituciones dedicadas a la investigación. En definitiva, una mayor disponibilidad de herramientas de colaboración de seguridad, gestión de datos, diagnóstico de datos y análisis. El impacto estimado por el Boston Consulting Group [18] sería de un ahorro de hasta 400 millones de dólares por fármaco y un aumento del 30% en la rapidez de los ensayos. Los beneficios de cloud computing no solo son económicos. En un país como la India en el cual el 72,2% de la población reside en zonas rurales y pueblos, cloud computing puede resolver los problemas de infraestructuras permitiendo que esas zonas con un desarrollo menor puedan disfrutar de servicios de e-Salud sin contar con equipos especializados [19]. Alguna aplicación que tendría cloud computing en estos escenarios sería: Base de datos de registro nacional de doctores. Existen muy pocos doctores y de esta forma sería posibile localizarlos y consultarlos mediante telemedicina. Almacenamiento de imágenes. La interoperabilidad reduciría los costes drásticamente. Análisis farmaceúticos. Utilizando cientos de servidores de alta velocidad en la nube, el análisis llevaría un menor tiempo de procesado. Bio-vigilancia. Localización temprana de enfermedades. Sería más sencillo lanzar programas de salud para areas específicas. Las tendencias englobadas en el concepto de cloud computing se fundamentan en mantener una confianza sobre el proveedor con el que se contratan los servicios. Esta confianza es considerada por diferentes sectores críticos (como el de la salud) como un grave problema, puesto que en ningún momento existe la absoluta certeza de qué sucede con la información, y se asume un riesgo “considerable” al no tener un completo control sobre los datos. El usuario se ve obligado a hacer un acto de fe y depositar su confianza en aquellos proveedores que considera fiables y seguros (empresas ampliamente consolidadas como Microsoft, Google, Amazon, etc.). En definitiva, la pérdida de control de la información es el riesgo principal, pero también existen claros beneficios como la ubicuidad de las soluciones y la posibilidad de trabajar con recursos remotos de forma eficiente. Desde el punto de vista de las aplicaciones móviles, este concepto puede facilitar el desarrollo de aplicaciones multiplataforma, reduciendo los tiempos de desarrollo y aumentando la diversidad. Diseño en la nube Este TFM no pretende diseñar una solución que cumpla todos los paradigmas del diseño en la nube pues es una tarea muy compleja y que requiere de infraestructuras muy potentes y bien distribuidas, únicamente propone una primera aproximación, una aplicación inicial del concepto de la nube a uno de los servicios de telemedicina como es la telemonitorización de pacientes. En este caso, el modelo que mejor se adapta a los intereses del proyecto dentro de los que propone cloud computing es el de “software como servicio” (SaaS, Software as a Service). Este modelo de distribución de software proporciona a los clientes el acceso a aplicaciones a través de internet. El software se suministra como servicio, de manera que el usuario no tiene que preocuparse del mantenimiento de dichas aplicaciones. Para el usuario, este modelo permite optimizar costes y recursos. Para el suministrador (el centro de salud, hospital…), este modelo permite implementar economías de escala optimizando costes. Para ello, este proyecto utiliza Google Apps (ver Figura 3.18) para ofrecer servicios de valor añadido como alertas, calendario de eventos, recordatorio de tareas o mensajería de apoyo. Google Apps es un servicio de aplicaciones en la nube que ofrece multitud de soluciones para usuarios y empresas para tareas como correo electrónico (Gmail), mensajería instantánea (Google Talk), calendario (Calendar), documentos compartidos (Google Docs), gestión de información médica (Google Healht), etc. Algunas de estas aplicaciones se han integrado en la implementación de la plataforma como se presentará más adelante. Página | 30 Figura 3.18. Esquema del servicio de aplicaciones de Google Apps La tenencia natural de las mayores compañías tecnológicas del mundo es mover todas sus soluciones hacia la nube, que todo se encuentre en la web, incluso los datos, y que los usuarios accedan a todos los servicios a través de un navegador web o software similar. Este tipo de solución es, a día de hoy, muy dificil de conseguir en la telemonitorización de pacientes. Así, los pacientes deben utilizar un dispositivo médico para realizar las medidas de las diferentes señales biomédicas. Esta información se comunica a un manager que gestiona la información para enviarla a un centro de salud u otro servicio de telemonitorización. Por lo tanto, esa aplicación o proceso manager debe tener acceso al hardware para poder recibir la información ya sea a través de USB, Bluetooth, ZigBee o cualquier otra tecnología de transporte. Sin embargo, este acceso a bajo nivel no puede conseguirse desde un navegador web de forma estándar para cualquier tipo de dispositivo. Android tiene su propia tecnología implementada en su navegador web para acceder al hardware de los dispositivos. En otras plataformas esto es más complejo. Existen diferentes propuestas de los diferentes navegadores web para conseguir ese tipo de acceso, pero no existe un consenso de todas las partes y tampoco será facil llegar a él pues el acceso al equipo del usuario desde la web siempre ha estado muy controlado. Como una solución totalmente en la nube se presume muy compleja o imposible (al menos a día de hoy), el acercamiento propuesto en este TFM consiste en ofrecer diferentes servicios de valor añadido dejando el proceso de captura de señales biomédicas en manos de la aplicación manager en el equipo o dispositivo del paciente. Antes de describir los servicios de valor añadido que la solución propone, es importante definir el concepto de Config Profile que se ha utilizado en este TFM. Config profile El diseño del Config Profile ha sido un elemento clave en estudios previos [20]. Este archivo contiene toda la información asociada a los procedimientos que deben seguir los pacientes que gestiona un mismo manager CE. En la Figura 3.19 se muestra el concepto del Config Profile en el contexto de la plataforma de telemonitorización. Agentes Manager x73 datos x73 Config Profile Dispositivos Médicos Compute Engine idCE Otra info Red + Datos de paciente Config Profile Servidor de Gestión Base de Datos Datos de paciente Servidor de HCE Figura 3.19. Situación y función del Config Profile en la plataforma de telemonitorización Página | 31 Este elemento Config Profile es generado en el servidor de gestión (Management Server, MS). La información que contiene procede de una base de datos que es completada a partir de dos fuentes de información distintas. Por un lado se obtienen los datos necesarios de la HCE de cada paciente y, por otro lado, se introduce información adicional al caso de uso de cada paciente manualmente. Una vez completa la información que debe contener el Config Profile se genera un archivo XML que es el que se envía a CE para que el proceso de monitorización sea correcto. La información necesaria para rellenar el Config Profile estaría contenida en una base de datos que almacenaría datos como información genérica relativa a dispositivos médicos, registro de los CEs que se están utilizando para llevar a cabo la monitorización de pacientes, información sobre los pacientes que están siendo controlados, médicos o enfermeros que están realizando el seguimiento de pacientes, medidas realizadas, etc. En este TFM se ofrece una nueva perspectiva para el Config Profile ya que, dada la complejidad que requiere el diseño, desarrollo e implementación de un servidor de gestión que ofrezca seguridad y genere un Config Profile de forma eficiente, el objetivo de este TFM es trasladar parte de esa información a la nube (especialmente las tareas a realizar por cada usuario), sirviendo como prueba de concepto para un futuro donde toda la información sea almacenada de forma distribuida. El concepto del anterior Config Profile, así como los detalles técnicos de su implementación y un ejemplo de funcionamiento además del concepto del nuevo Config Profile puede verse en el Anexo III. Flujo de ejecución El nuevo concepto de Config Profile (ver Anexo III) utiliza Google Calendar para presentar eventos y tareas al usuario pero, antes de conocer cómo ayudan al usuario el resto de servicios, es útil conocer el flujo de ejecución de los servicios en nuestra plataforma que se representa gráficamente en la Figura 3.20: Paso 1. Manager à Servidor telemonitorización El usuario introduce su DNI o DNIe. Esta información viaja cifrada al servidor de telemonitorización. Y este le devuelve un Config Profile con información básica. Número de DNI + Clave ó Información del DNIe Config Profile Conf ig Profil e Paso 2. Manager à Google Apps En la información del Config Profile se transporta los datos necesarios para loguearse en los diferentes servicios de Google Apps. Cada servicio devuelve el estado del login de forma separada. Nombre de usuario de Google Apps + Clave Gmail in? Gtalk in? Calendar in? Página | 32 Paso 3. Manager à Se Google Apps Una vez se ha logueado correctamente en los servicios de Google, se procede a obtener la información de cada uno de ellos de forma paralela. Solicita correos de Gmail Correos de usuario Solicita los contactos disponibles para conversación Contactos Solicita tareas y eventos Tareas y eventos Paso 4. Usuario utiliza servicios El usuario puede comenzar a utilizar los servicios: mandar y recibir correos, contactar mediante chat con doctores y otros pacientes o consultar tareas y eventos en su calendario personal Paso 4bis. El doctor utiliza servicios Por otra parte, el doctor puede modificar eventos o tareas a realizar por el usuario que automáticamente se le e mostraran en su dispositivo, o enviar correos o recibir la consulta del paciente Paso 5. Manager à Servidor telemonitorización El usuario decide realizar una tarea de medida del calendario propuesto por su médico o realiza una medida manual no prevista. Envia la información al servidor de telemonitorización. Datos XML (TCP/IP) X73 Confirmación datos recibidos Figura 3.20. Flujo de ejecución de la plataforma Página | 33 3.6. Integración con el servidor de HCE Este TFM presenta el desarrollo de una plataforma de telemonitorización de pacientes sobre sistema operativo Linux y que integra las normas de interoperabilidad X73PHD y UNE-EN/ISO13606. Es una solución estándar y ubicua para entornos de salud personal que utiliza Bluetooth HDP para la comunicación entre los dispositivos médicos y el manager X73PHD. Además, se homogeneíza la comunicación de área extendida (Wide Area Network, WAN) con el servidor de HCE mediante tecnologías Web Services (WS) y comunicación interoperable según XML (ver Figura 3.21). En las secciones anteriores se ha definido y analizado X73PHD como el estándar internacional para interoperabilidad de dispositivos médicos. Este es el primer paso para llegar a una plataforma totalmente interoperable. No obstante, para lograr niveles óptimos en la calidad asistencial y continuidad de cuidado de un paciente, es necesario que las partes implicadas en el seguimiento/control de su enfermedad interactúen también de forma interoperable. El estándar internacional para lograr interoperabilidad de HCE [21] entre sistemas sanitarios es UNE-EN/ISO13606 [22]. Esta norma especifica cómo la información clínica debe ser transmitida basándose en un modelo dual: Modelo de Referencia y Modelo de Arquetipos. Sin embargo, como ya se ha comentado a lo largo de este proyecto, la existencia de normas médicas no garantiza la correcta implementación de una solución homogénea de salud personal dado que la integración de las diferentes normas en soluciones extremo a extremo todavía sigue siendo una tarea compleja e intrincada. Este es uno de los principales retos en la investigación de estándares: su posterior implementación, en forma de soluciones reales, en el sistema sanitario. Algunas contribuciones anteriores han diseñado implementaciones aisladas tanto de una plataforma de monitorización de pacientes basadas en X73 [23] como de un servidor de HCE basado en UNE-EN/ISO13606 [24]. Estos desarrollos previos, si bien han servido como prueba de concepto del correcto funcionamiento de ambas normas, también han constatado una ausencia de interoperabilidad en la comunicación extremo a extremo. Algunas otras iniciativas como IHE y Continua o proyectos como Healthy Interoperability [25] ya han abordado este problema. Sin embargo, hacen uso de mensajes HL7 y no del estándar europeo UNE-EN/ISO13606. Interfaz PAN (Bluetooth) Dispositivos médicos (Agentes X73PHD) Interfaz WAN (XML) Computer Engine (Manager X73PHD) Servidor HCE (ISO/EN13606) Figura 3.21. Esquema conceptual de la plataforma de telemonitorización basada en estándares extremo a extremo Así, X73PHD cubre la comunicación en el interfaz PAN y UNE-EN/ISO13606 define el intercambio interoperable de HCE. Pero, hasta el momento, no se ha definido un estándar específico para el interfaz WAN entre el manager y el servidor de HCE. Sin embargo, se han propuesto algunas iniciativas (lideradas por IHE y Continua Health Alliance) para suplir en parte esta carencia. El Comité Técnico IHE-Patient Care Device (IHE-PCD) ha propuesto el perfil Device to Enterprise Communication (DEC, llamado PCD-01) [26]. Este perfil emplea mensajes HL7 v2.6 para conectar el manager y el servidor HCE. El perfil Subscribe to Patient Data (llamado PCD-02) [27] es una extensión de este perfil que divide este interfaz para filtrar los datos generados en el entorno de e-Salud. Dentro de las directrices de Continua Health Alliance, este interfaz se ha dividido en dos subinterfaces, incluyendo un nuevo elemento dirigido a servicios de back-end. El primer subinterfaz está fuera del alcance de las denominadas guías de diseño (Continua Design Guidelines). Para el segundo subinterfaz, se ha elegido el perfil IHE Cross-Enterprise Document Reliable Interchange (XDR) [28] y, sobre este, el documento HL7 Personal Health Monitoring (PHM) [29]. Página | 34 Estas propuestas de IHE y Continua Health Alliance no implican la definición de nuevos estándares ad-hoc. Al contrario, impulsan algunos perfiles y procedimientos de otros estándares, esencialmente HL7 (IHE-DEC impulsa mensajes HL7 v2.6 y Continua Health Alliance hace uso del perfil HL7-PHM). Debido a que la implementación propuesta está basada en X73PHD y UNE-EN/ISO13606, estos enfoques basados en HL7 no es la opción más adecuada. Además, el detalle y complejidad de HL7 ha llevado al diseño de una arquitectura WS apoyada por propuesta basada en XML. Este documento XML satisface los particulares requerimientos de las implementaciones X73PHD y UNE-EN/ISO13606 previamente detalladas con elevada especificidad para mantener los requisitos de interoperabilidad, seguridad, fiabilidad y privacidad al mismo tiempo que la simplicidad de aplicación. Un ejemplo de este XML se muestra a continuación: <collecter> <idCollecter>12345678</idCollecter> <soc> <deviceInfo> <extraDeviceInfo> <attribute> <id>MDC_ATTR_SYS_ID</id> <value>123456</value> </attribute> <attribute> <id>MDC_ATTR_ID_TYPE</id> <value>MDC_MASS_BODY_ACTUAL</value> </attribute> <attribute> <id>MDC_ATTR_VAL_BATT_CHARGE</id> <value>60</value> </attribute> <attribute> <id>MDC_ATTR_ID_MODEL</id> <value>DeviceManufacturer</value> <value>DeviceModel</value> </attribute> </extraDeviceInfo> </deviceInfo> <measurement> <timeStamp>15/04/2010-18:10:15</timeStamp> <attribute> <id>MDC_ATTR_ID_TYPE</id> <value>MDC_MASS_BODY_ACTUAL</value> </attribute> <attribute> <id>MDC_ATTR_NU_VAL_OBS_SIMP</id> <value>53.5</value> </attribute> <attribute> <id>MDC_ATTR_UNIT_CODE</id> <value>MDC_DIM_KILO_G</value> </attribute> </measurement> <contextInfo> <code/> <value/> </contextInfo> </soc> </collecter> Desde el punto de vista del manager, el XML diseñado tiene en cuenta los datos disponibles que son relevantes para su incorporación en la HCE para algunas especializaciones de dispositivos médicos, manteniendo una nomenclatura homogénea. Desde el punto de vista del servidor de HCE, se incluye la información necesaria para integrar los datos en la arquitectura UNE-EN/ISO13606. El contenido y estructura XML depende del fichero de configuración Config Profile (explicado en la sección anterior), obtenido del servidor de HCE, y configurado en colaboración con especialistas médicos y a partir de análisis previos de casos de uso [30]. Así, como se muestra en el ejemplo, el XML incluye información específica de los pacientes (idCollecter), sus dispositivos asociados (deviceInfo), el procedimiento de medida (timeStamp), y otra información técnica como tipo de dispositivo (mdc_ attr_id_type), modelo (mdc_attr_id_model), niveles de batería (mdc_attr_val_batt_charge), etc. Página | 35 3.7. Integración con el nivel de aplicación Finalmente, la implementación de la plataforma uz.Health se completa con el desarrollo de un interfaz gráfico sencillo, que permite al usuario utilizar todos los componentes y procesos descritos a lo largo del capítulo. Es imprescindible aclarar que este interfaz se ha construido únicamente a modo demostración y se encuentra en fase de mejora y optimización para incluir funcionalidades usabilidad, robustez y e-accesibilidad. El interfaz gráfico ha sido desarrollado en GTK# y Mono y su utilización está orientada a plataformas Linux aunque la portabilidad a entornos Windows es casi inmediata. En el Anexo III se describe con detalle el interfaz gráfico propuesto por este TFM. En la Figura 3.22 se observa la pantalla principal del usuario, conocida como home. En ella se presentan las opciones más habituales para el usuario. A la izquierda aparece la zona de notificaciones donde se avisará al usuario si tiene algún correo electrónico, alguna tarea pendiente o un mensaje de chat. Debajo los botones para poder contactar con el centro de salud, consultar la HCE o realizar una medida manual que no esté planificada. En pestañas se distribuyen los servicios de usuario: tareas y eventos, correo, mensajes instantáneos y los contactos. Figura 3.22. Pantalla principal de la plataforma uz.Health Página | 36 Proceso de medida La pantalla de medida manual propone realizar la medida siguiendo 4 pasos: 1. Seleccionar el tipo de dispositivo 2. Seleccionar el protocolo de comunicaciones del dispositivo 3. Seleccionar la tecnología de transporte usada por el dispositivo 4. En caso de que sea necesario, configurar los parámetros de la tecnología de transporte. A continuación, se muestra un ejemplo de la medida con un pulsioxímetro X73PHD mediante Bluetooth HDP. En este caso se ha seleccionado el adaptador Bluetooth y el dispositivo médico que se va a utilizar (ver Figura 3.23). Finalmente, en la última pantalla se observa el proceso de medida (ver Figura 3.24). A la derecha, a modo de depuración, se ha colocado un analizador de protocolo pudiendo observar los diferentes estados por los que pasa el núcleo de comunicaciones. Una vez realizada la medida, haciendo clic en el botón “Enviar Medida” enviará la medida al servidor de telemonitorización mediante el XML generado siguiendo la descripción del apartado 3.4 de esta memoria. Si se inicia la medida desde la pestaña de “tareas y eventos” se llega directamente a esta pantalla ya que la configuración del dispositivo es obtenida desde la propia tarea. Figura 3.23. Pantalla de configuración de la medida Página | 37 Figura 3.24. Pantalla de resultados de la medida Página | 38 Evaluación y resultados 4.1. Evaluación de la implementación En cualquier proyecto que contenga una parte de implementación, la necesidad de corroborar el correcto comportamiento se convierte en imperiosa. En nuestro caso, tras la implementación se ha realizado un proceso de depuración realizando pruebas tanto de “caja negra” como de “caja blanca” para asegurarnos del correcto comportamiento de la aplicación implementada. La prueba de caja negra trata el software como una caja sin ninguna comprensión del comportamiento interno. Esto ayuda a probar la funcionalidad de acuerdo a una serie de requerimientos [31]. Así, la prueba introduce datos y únicamente ve la salida del objeto testeado. Este nivel de prueba requiere por lo general definir perfectamente los casos de uso que se van a utilizar de tal forma que el probador simplemente verificará la salida o comportamiento para una determinada entrada. La prueba de caja blanca, sin embargo, se da cuando el probador tiene acceso a las estructuras de datos internas, código y algoritmos. Los métodos de prueba de caja blanca incluyen pruebas creadas para satisfacer un criterio de cobertura del código. Por ejemplo, el diseñador de las pruebas puede crear tests para causar que todos los métodos del programa sean ejecutados al menos una vez. Este tipo de métodos puede ser utilizado también para evaluar la integridad de una prueba realizada con métodos de caja negra. Esto permite al equipo de desarrollo examinar partes de un sistema que son raramente probadas y asegura que los puntos más importantes han sido probados. Evaluando el núcleo X73PHD Las primeras pruebas que se realizaron sobre la plataforma fueron para analizar y corroborar el correcto funcionamiento del núcleo X73PHD. Se crearon pruebas unitarias para probar cada uno de los módulos de la solución. También se realizó un test de integración para exponer los defectos en los diferentes interfaces y la interacción entre los diferentes módulos o componentes. Los test de integración van en progresión, comenzando con pequeños grupos de componentes y creciendo hasta probar la integración de todos los componentes funcionando como un sistema completo. Además de los test unitarios, se desarrolló un emulador de agente X73PHD funcionando sobre TCP/IP. Se utilizaron diferentes especializaciones para comprobar el correcto funcionamiento del manager X73PHD: 11073 - 10404 Pulse oximeter 11073 - 10406 Heart rate monitor 11073 - 10407 Blood pressure monitor 11073 - 10408 Thermometer 11073 - 10415 Weighing scale 11073 - 10417 Glucose meter En la Figura 4.1 se muestra una imagen del emulador de agente X73PHD simulando un termómetro X73PHD: Figura 4.1. Emulador de agente X73 funcionando como termómetro Página | 39 Para la evaluación se construyó un manager X73PHD básico en línea de comandos que funciona tanto en Linux como Windows. Inicialmente se inicializa un canal TCP que escucha en el puerto 9999 del equipo las conexiones entrantes que le pueden llegar desde un agente. En este momento, ambos dispositivos se encuentran en estado Unassociated. A partir de aquí, comenzará el envío y recepción de tramas, empezando por una petición de asociación del agente al manager (AssociationRequest). Se pasará entonces al estado de Associating. A continuación, el manager responderá a la petición de asociación con un mensaje del tipo AssociationResponse, en el cuál informará de si la petición ha sido aceptada, rechazada, o si necesita más datos de configuración para aceptarla, algo que ocurrirá siempre que el agente no haya sido registrado previamente en el manager, es decir, que no se hayan asociado en anteriores ocasiones. Para saber cuál ha sido la respuesta del manager, éste envía un código de asociación (AssociateResult), que permitirá distinguir al agente entre los diferentes casos. La petición de asociación puede ser o no aceptada o ser aceptada pero no conocer la configuración del agente, por lo que el agente deberá enviar un ConfigReport con sus parámetros de configuración, pasando al estado Configuring. Una vez enviada la configuración, el agente esperará la confirmación de ésta por parte del manager, que vendrá dada, al igual que ocurría con la petición de asociación, por un código denominado ConfigResponse. Si el manager acepta la configuración del agente y ambos pasarán al estado Operating. Llegados a este punto, ambos dispositivos se encuentran ya asociados y se podrá iniciar la transferencia de las medidas tomadas por el agente. El agente mandará entonces un DataReport que contendrá los datos de la medida (el dato médico y la fecha y la hora) y esperará, al igual que en casos anteriores, a que el manager confirme la recepción de los datos enviado. Finalmente, la comunicación termina a través de una petición de desasociación por parte del agente (AssociationReleaseRequest), y de la consiguiente confirmación del manager (AssociationReleaseResponse). Para ello, el agente únicamente deberá indicar el motivo de la finalización. Todo este proceso de toma de medida se puede observar en la Figura 4.2, la salida por la salida estándar del manager X73PHD. Un reto importante llegado este punto, consiste en comprobar que la plataforma desarrollada es absolutamente compatible con otras plataformas desarrolladas en lenguajes de programación diferentes para asegurar la interoperabilidad de la solución. Paralelamente a este TFM, se desarrolló otra plataforma X73PHD basada en el trabajo de Morfeo openHealth sobre Android. Una prueba importante sería comunicar las dos implementaciones (manager de uz.Health con agente Android, ver Figura 4.3). Esta prueba resultó con un éxito y se muestra un log en Figura 4.3. Figura 4.2. Eventos del proceso de toma de medida Figura 4.3. Salida de depuración del agente X73PHD Android e interfaz gráfico Página | 40 Evaluando la implementación de Bluetooth HDP Una práctica muy común es que las pruebas y evaluación de un software sean realizadas por un equipo o un desarrollador diferente al que ha realizado la implementación. De esta forma se asegura que el equipo probador no tenga vicios adquiridos por el desarrollador y pruebe cosas diferentes. Intentando cumplir estas premisas, durante la redacción de este TFM se realizó una estancia de investigación en Viena en la universidad de ciencias aplicadas Fachhochschule Technikum Wien colaborando con el grupo de investigación Healthy Interoperability. Esta colaboración, además de otras muchas cosas, tenía como objetivo realizar tests cruzados de las plataformas de telemonitorización de ambas universidades. Estas pruebas realizadas se trataron de pruebas de caja blanca entregándole al equipo de Viena la aplicación manager descrita en anteriores capítulos. Para las pruebas se utilizó uno de los pocos dispositivos certificados por Continua, el tensiómetro A&D Medical UA-767PBT-C Blood Pressure Monitor. Se realizaron diferentes pruebas entre los miembros del equipo de Viena obteniendo un alto porcentaje de éxito en la obtención de las medidas. Los errores que se obtuvieron fueron debidos al estado experimental en el que todavía se encuentra la implementación del perfil Bluetooth HDP en la pila BlueZ de Linux. Durante la depuración de estos errores se observó que la fuente de fallo eran los bloqueos (no muy frecuentes) de la capa L2CAP del kernel que esperan resolverse con futuras actualizaciones del kernel de Linux. Como sistema operativo para las pruebas se utilizó Ubuntu 10.10. En la Figura 4.4 se observa la medida obtenida por la aplicación uz.Health y la entregada por el tensiómetro A&D. Figura 4.4. Medida realizada con el tensiómetro A&D Medical UA-767PBT-C Blood Pressure Monitor Página | 41 4.2. Proyecto WiSo La última parte de las prácticas médicas de este TFM se realizó, aprovechando la estancia de investigación, en Viena, en colaboración con el grupo Healthy Interoperabilty (miembro de Continua) de la universidad de ciencias aplicadas Technikum Wien. El proyecto Wiener Sozialdienste (WiSo) [32] se trata de una ambiciosa iniciativa a partir de la cual se pretende crear una red de telemedicina en hogares y residencias de ancianos y enfermos crónicos o con algún tipo de discapacidad. Se trata de una prueba piloto impulsada por los servicios sociales y de asistencia de Viena. A través de este proyecto, el grupo Healthy Interoperabilty distribuye dispositivos de medida como tensiómetros, pesos o pulsioxímetros compatibles con X73. Junto a los dispositivos, se facilita la plataforma de telemedicina desarrollada por este grupo de investigación de Viena y en la que se ha colaborado en las pruebas durante los meses de estancia. Esta plataforma está desarrollada en Java sobre Windows. Aunque el grupo es miembro de Continua y tiene acceso a las librerías de desarrollo oficiales de la alianza, ha preferido utilizar la pila de Bluetooth de Toshiba comentada previamente para compatibilizar su plataforma con los dispositivos médicos que utilizan el perfil médico Bluetooth HDP. En la Figura 4.5 se observa el interfaz gráfico de la plataforma. Su arquitectura basada en plug-ins permite añadir los diferentes módulos, en forma de pestañas, de forma independiente. Además, incorpora características muy interesantes como la seguridad e identificación a través de biometría o la generación de códigos de barras bidimensionales (conocidos como bidis) que identifican a cada persona. En esta prueba piloto no se pretende mejorar la salud o identificar potenciales problemas en las personas analizadas, sino servir como evaluación de la plataforma Healthy Interoperability, así como extender los resultados de la evaluación a la plataforma propuesta en este TFM. Para ello, todos los participantes del proyecto WiSo se comprometen a realizar al menos tres medidas al día para tener un número suficiente de muestras sobre la que realizar pruebas. La seguridad, muy importante en este tipo de pilotos, se asegura mediante transmisiones cifradas y la utilización de pseudónimos en la base de datos en lugar de nombres reales. Aparte de la colaboración para el testeo de la plataforma Healthy Interoperability y en el despliegue de los dispositivos a lo largo de toda la red de telemedicina, la participación en este proyecto sirvió para tener un contacto más directo con la realidad médica de este tipo de iniciativas. La colaboración directa durante estos meses con los doctores Dr. Em, Dra. Kraus y Dra. Haslinger ofrecieron una perspectiva diferente que se aleja mucho de la meramente técnica y que hay que considerar antes de afrontar el despliegue de una red de estas características. De estas colaboraciones se pueden extraer algunas premisas de interés. Por ejemplo, este tipo de pacientes son muy dependientes y es necesaria, en la mayoría de los casos, la presencia de otra persona que les ayude en el proceso de medida. Solo una minoría puede llegar a entender el procedimiento. A día de hoy se desconfía del preprocesado de los datos antes de enviarlos al centro médico. Los doctores prefieren los datos tal como se obtienen sin ningún tipo de análisis previo o interpretación. Además, los interfaces gráficos necesitan de un estudio más profundo para poder ser accesibles a cualquier tipo de discapacidad, ya sea visual, sonora o de otro tipo. En este aspecto el proyecto upHealth.ES ya tiene una línea de investigación focalizada en esta problemática sobre e-Accesibilidad. Figura 4.5. Interfaz gráfico de la plataforma Healthy Interoperability Página | 42 Conclusiones y líneas futuras 5.1. Conclusiones En este TFM se ha abordado desde los inicios de la e-Salud, la necesidad interoperabilidad y el estado del arte de estandarización en varios niveles y en especial en el estándar X73 como propuesta para solucionar dichos problemas de interoperabilidad. Actualmente, la e-Salud ha sido impulsada gracias a multitud de diferentes aplicaciones desarrolladas en grupos de investigación en colaboración con hospitales, proveedores de servicios y empresas fabricantes de dispositivos médicos. Así, el proceso de implantación de estándares se ha acelerado llegando ahora a niveles de próxima ejecución. Los fabricantes de dispositivos médicos y sistemas informatizados para medicina no se han preocupado de la problemática de la estandarización hasta el momento. Los productos iban destinados a un uso concreto: mostrar los datos por el display y no a ser interconectados para almacenar los datos en un HCE o ser gestionados por un CE centralizado. Si el usuario deseaba almacenar los datos en un PC era necesario el uso de un software propietario que gestionara la comunicación con el dispositivo e interpretara los datos. Estas condiciones eran comprensibles dado que las tecnologías de transmisión en conjunto con los sistemas operativos no contemplaban nuevas funcionalidades como plug-and-play, calidad y seguridad necesarias para estos servicios en las conexiones a distancia, o la adopción e integración del HCE como destino final de los datos médicos en los sistemas de e-Salud, que ha sido y es muy lenta. Es ahora cuando las empresas comienzan a aprovechar el hecho de que estos tres factores están resueltos prácticamente y deciden apostar por la interoperabilidad de sus sistemas. Obviamente, seguirán ofreciendo soluciones propietarias que, según ellos, permiten aprovechar el máximo de las prestaciones de sus productos al no tener que depender de otros fabricantes. En este contexto, surgen X73PHD y UNE-EN/ISO13606 en una nueva etapa tecnológica donde los dispositivos son más avanzados, asequibles, llevables, inalámbricos y dan cabida a nuevos servicios. Al mismo tiempo cobran fuerza los conceptos de salud y entrenamiento personal (fitness). Todo esto hace que X73PHD aproveche las posibilidades del momento y ofrezca un protocolo base tan preparado que su implementación al menos no suponga un cambio significativo en los productos de las empresas y permita incluso mejorarlos. Precisamente una de las razones por las cuales se ha alcanzado tal nivel de estabilidad es debido a la colaboración que han ejercido las empresas del sector dentro de PHD Working Group. En este escenario, este TFM ha propuesto una plataforma moderna de telemonitorización, completamente interoperable y basada en estándares, construida a partir de la experiencia previa adquirida, y adaptada a los actuales paradigmas de diseño y las nuevas tecnologías recomendadas por X73PHD. Se ha apostado, además, por la filosofía open source en la que se fomenta la participación de otros desarrolladores, intentando crear una plataforma flexible, robusta y de futuro que atraiga a las entidades relacionadas con e-Salud al uso de estándares. También se ha obtenido una panorámica actual del problema de la interoperabilidad y estandarización, pues se ha tenido la oportunidad de conocer de primera mano la situación real del proceso de normalización que el mundo sanitario está experimentando y los mecanismos que se están siguiendo para derrumbar las barreras que previamente se habían levantado. La posibilidad de la realización de prácticas médicas en ámbitos tan distintos, como lo son el comercial, el médico y el académico, ha permitido comprender la visión tan dispar que se posee en todos ellos de la misma realidad, desde la defensa acérrima del modelo completo hasta la adecuación de la norma a las necesidades específicas en cada ámbito. Por esto, y por muchas otras razones, las conclusiones al trabajo realizado difícilmente pueden ser consideradas más positivas, al menos para el autor y cubren las expectativas y objetivos planteados al comienzo del trabajo. Página | 43 5.2. Líneas futuras Con este TFM se coloca la primera piedra sobre la que girarán los futuros desarrollos relacionados con las tecnologías de transporte y comunicaciones compatibles con X73PHD. Una vez definida una plataforma robusta, modular y multiplataforma, los esfuerzos se centrarán en dos líneas: implementar y adaptar el resto de tecnologías que han desarrollado un perfil médico específico para X73PHD (USB PHDC y ZigBee HC), y estudiar las tendencias en tecnologías inalámbricas de última generación WiFi/WiMax, Ultra Wide Band (UWB) y Long Term Evolution (LTE) así como su posible aplicación a escenarios de e-Salud, lo que constituirá la futura propuesta de tesis doctoral. Respecto a USB PHDC, son todavía escasos los dispositivos reales que existen que sean compatibles con X73PHD y, entre ellos, solo uno que utilice USB PHDC, aunque se esperan más a corto/medio plazo para complementar el ecosistema de PHDs portátiles o móviles. Además, dada la ausencia de una implementación abierta de este perfil, académicamente hablando, resulta interesante el estudio, desarrollo e integración de esta tecnología en la plataforma desarrollada. A diferencia de BlueZ, que se dirige específicamente a entornos Linux, la base sobre la que podría implementarse el perfil USB PHDC está disponible para varias plataformas e incluso varios lenguajes mediante la librería libusb. Esta librería open-source está disponible para Linux, Mac OS y Windows. Además, paralelamente se ha ido desarrollando la librería libusbdotnet, que presenta las mismas características que la original, pero que está desarrollada en C#, permitiendo una integración directa en la plataforma propuesta. El futuro de la tecnología ZigBee es quizás el más incierto. Todavía no existe ningún dispositivo real que utilice esta tecnología inalámbrica y no existen indicios de posibles lanzamientos cercanos. Continua y los fabricantes han optado por Bluetooth como tecnología inalámbrica. Las razones responden a la gran penetración que tiene en la actualidad Bluetooth en el mercado de consumo. ZigBee, sin embargo, sitúa su nicho de mercado en entornos domiciliarios, por lo que su futuro parece ligado al de la domótica. Además, académicamente es muy interesante pues supone grandes retos de investigación y desarrollo no solo en la parte software sino en la parte hardware. Por otra parte, además de las citadas tres tecnologías que han desarrollado un perfil médico específico en sus arquitecturas de protocolos, existen multitud de escenarios donde estas tecnologías encuentran limitaciones y carencias. Por ello, es necesario explorar nuevas tecnologías que sean capaces de resolver no solo estos problemas, sino introducir nuevas características y mejoras en la telemonitorización de pacientes. Algunas de estas tecnologías se encuentran en fase experimental, otras prácticamente están en su fase de nacimiento y otras no dejan de ser una amalgama de ideas teóricas que necesitan fundirse en una tecnología futura. Previamente al estudio de esas tecnologías, es importante comenzar con un profundo estudio y análisis de todos los escenarios y casos de uso posibles que nos podemos encontrar entre los recomendados por los organismos internacionales: salud y bienestar, seguimiento y autocontrol de la propia enfermedad, enfermedades crónicas y teleasistencia domiciliaria para la tercera edad. IPv6 over LoW Power wireless Area Networks (6LowPAN), ANT+, Wireless USB (WUSB), IntraBody Communications (IBC) o Ultra Wide Band (UWB) son algunas de las tecnologías inalámbricas más innovadoras que se presentan en el panorama internacional y que presentan características y funcionalidades específicas que sería interesante analizar en cada uno de los escenarios. La ausencia de un perfil médico específico para estas tecnologías supone el principal reto para una futura tesis doctoral, analizar y proponer una nueva arquitectura de protocolos para cada una de esas tecnologías para hacerlas compatibles con el estándar X73PHD. Página | 44 Acrónimos AAL AmI ACSE APDU API ASN.1 BAN BER CE CIL CLR CMISE CSP DEC DER DIM E2ESHP ER ERTM FC FSM GAP HAN HCE HCI HDP HID HL7 IBC IDE IHE JNI JVM L2CAP LTE MCAP MedWG MD MDER MS PAN PCD PER PHD PHDC PHM PoC QoS ROSE SaaS SDP SIG Assisted Ambient Livin Ambient Intelligence Association Control Service Element Application Protocol Data Unit Application Program Interfaces Abstract Syntax Notation One Body Area Network Basic Encoding Rules Compute Engine Common Intermediate Language Common Language Runtime Common Management Information Service Element Clock Synchronization Protocol Device to Enterprise Communication Distinguished Encoding Rules Domain Information Model End-to-End Standard Harmonization Protocol Encoding Rules Enhanced Retransmission Mode Frame Check Sequence Finite State Machine Generic Access Profile Home Area Network Historial Clínico electrónico Host Controller Interface Health Device Profile Human Interface Device Health Level Seven IntraBody Communications Interface Development Environment Integrating the Healthcare Enterprise JAva Native Interface Java Virtual Machine Logical Link Control and Adaptation Protocol Long Term Evolution Multi-Channel Adaptation Protocol Medical Working Group Medical Device Medical Device Encoding Rules Monitoring Server Personal Area Network Patient Care Device Packet Encoding Rules Personal Health Devices Personal Healthcare Device Class Personal Health Monitoring Point of care Quality of Service Remote operations service element protocol Software as a Service Service Discovery Protocol Special Interest Group SM SPP TIC UCI UWB WAN WG WPAN WPF WS WUSB XER XDR XML XSL ZC ZCL ZED ZHC ZR 6LowPan Streaming Moder Serial Port Profile Tecnologías de la Información y las Comunicaciones Unidad de Cuidados Intensivos Ultra Wide Band Wide Area Network Working Group Wireless PAN Windows Presentation Foundation Web Services Wireless USB XML Encoding Rules Cross-Enterprise Document Reliable Interchange Extensible Markup Language eXchange Sheet Language ZigBee Coordinator ZigBee Cluster Library ZigBee End Device ZigBee HealtCare Profile ZigBee Router IPv6 over LoW Power wireless Area Networks Página | 45 Tabla de figuras Capítulo 1 Figura 1.1. Plataforma de telemonitorización basada en estándares extremo a extremo. Página 2 Capítulo 2 Figura 2.1. Dispositivos médicos. Página 5 Figura 2.2. Evolución de la pila de protocolos de X73PoC a X73PHD. Página 7 Figura 2.3. Pila genérica de protocolos X73PHD. Página 10 Figura 2.4. (a) Pila de protocolos de X73PHD sobre USB PHDC y (b) Jerarquía de descriptores USB PHDC. Página 11 Figura 2.5. Pila de protocolos de X73PHD sobre Bluetooth HDP. Página 12 Figura 2.6. Pila de protocolos de X73PHD sobre ZHC. Página 13 Capítulo 3 Figura 3.1. Esquema de evolución de migraciones de la plataforma telemática de e-Salud. Página 15 Figura 3.2. Esquema de funcionamiento de C#. Página 18 Figura 3.3. Entorno de desarrollo Eclipse. Página 19 Figura 3.4. Entorno de desarrollo Visual Studio 2008. Página 19 Figura 3.5. Plataformas objetivo de Java. Página 19 Figura 3.6. Plataformas objetivo de C#. Página 19 Figura 3.7. Modelo de separación de capas abstractas. Página 20 Figura 3.8. Arquitectura de la solución según diseño basado en capas de abstracción. Página 20 Figura 3.9. Arquitectura propuesta para el manager X73PHD. Página 22 Figura 3.10. Esquema de conexión de módulos o plug-ins externos. Página 22 Figura 3.11. Solución propuesta UZ_ieee_11073 y lista de dependencias. Página 23 Figura 3.12. Esquema de implementación de la máquina de estados X73PHD. Página 24 Figura 3.13. Pila de protocolos BlueZ. Página 25 Figura 3.14. Ejemplo de conexiones de DBus. Página 27 Figura 3.15. Modelo de cloud computing según un esquema “software como servicio”. Página 28 Figura 3.16. Modelo de cloud computing según un esquema “infraestructura como servicio”. Página 29 Figura 3.17. Modelo de cloud computing según un esquema “plataforma como servicio”. Página 29 Figura 3.18. Esquema del servicio de aplicaciones de Google Apps. Página 31 Figura 3.19. Situación y función del Config Profile en la plataforma de telemonitorización. Página 31 Figura 3.20. Flujo de ejecución de la plataforma. Páginas 32 y 33 Figura 3.21. Esquema conceptual de la plataforma de telemonitorización basada en estándares extremo a extremo. Página 34 Figura 3.22. Pantalla principal de la plataforma uz.Health. Página 36 Figura 3.23. Pantalla de configuración de la medida. Página 37 Figura 3.24. Pantalla de resultados de la medida. Página 38 Capítulo 4 Figura 4.1. Emulador de agente X73 funcionando como termómetro. Página 39 Figura 4.2. Eventos del proceso de toma de medida. Página 40 Figura 4.3. Salida de depuración del Agente Android e interfaz gráfico. Página 40 Figura 4.4. Medida realizada con el tensiómetro A&D Medical UA-767PBT-C Blood Pressure Monitor. Página 41 Figura 4.5. Interfaz gráfico de la plataforma Healthy Interoperability. Página 42 Página | 46 Referencias Capítulo 1 [1] Martinez. I. et al. Integration Proposal through Standard-Based Design of an End-to-End Platform for p-Health Environments. Minneapolis : IEEE Engineering in Medicine and Biology society, 2009. Capítulo 2 [2] Continua Health Alliance. http://www.continuaalliance.org [11/10] [3] Morfeo Openhealth. http://openhealth.morfeo-project.org/ [11/10] [4] Healthy Interoperability. http://www.healthy-interoperability.at/ [11/10] [5] Google Health. http://www.google.com/health [11/10] [6] Microsoft HealthVault. http://www.healthvault.com [11/10] [7] Universal Serial Bus Device Class Definition for Personal Healthcare Devices (USB PHDC) release 1.0. USB Implementers Forum Inc. http://www.usb.org. 1st Ed. 2007. [11/10] [8] Bluetooth Health Device Profile (BT HDP) version 1.0 revision 00 [Multi-Channel Adaptation Protocol (MCAP)] [Implementation Guidance Whitepaper]. Bluetooth Special interest Group (SIG). http:// www.bluetooth.com. 1st Ed.2008. [11/10] [9] ZigBee Health Care Profile (ZHC) specification version 1.0 revision 15. ZigBee Alliance. http://www.zigbee.org.1st Ed. 2010. [11/10] Capítulo 3 [10] I. Martínez et al. “Implementación integrada de plataforma telemática basada en estándares para monitorización de pacientes”. Jornadas de Ingeniería Telemática, pp. 505-512, 2007. [11] I. Martínez et al. “Optimización de una plataforma telemática para monitorización de pacientes orientada a u-Salud y basada en estándares y Plug-and-Play”. Jornadas de Ingeniería Telemática, pp. 505-512, 2008. [12] I. Martínez et al. “Plataforma Telemática de Integración de Estándares End-to-End para Salud Personal”. VIII Jornadas de Ingeniería Telemática (JITEL), Septiembre 2009 [13] Jungo BTware. http://www.jungo.com. [07/10] [14] Stollmann BlueCode+. http://www.stollmann.de. [07/10] [15] Toshiba Bluetooth. http://aps2.toshiba-tro.de/bluetooth. [07/10] [16] Ethermind Stack. http://www.mindtree.com. [07/10] [17] BlueZ. http://www.bluez.org. [07/10] [18] Boston Consulting Group “Capture the value of Cloud Computing”, 2009 http://www.bcg.com/documents/file34246.pdf [10/10] [19] Shaily malik, Vineet Sinha - Cloud Computing - A Hope for the Rural India, 2010 International Journal of Computer Applications (0975 - 8887) Volume 1 – No. 20 [20] M. Gil Lalaguna et al., “Configuración remota de perfiles de usuario y casos de uso para una solución ubicua de p-Salud”. Caseib 2009 [21] Historia Clínica Electrónica. Informes de la Sociedad Española de Informática y Salud (SEIS). www.seis.es [07/10]. [22] ISO/EN13606 - CEN/TC251. Electronic Healthcare Record (EHR) Communication Standard. Parts 1-5. http://www.medicaltech.org. 1st Ed.: 2004. Last visit: 07/10. [23] I. Martínez et al., "Implementation of an End-to-End Standards-based Patient Monitoring Solution", IET Comm. Special Issue on Telemedicine e-Health Communication Systems 2:181-191, 2008. [24] A. Muñoz et al., "Proof-of-concept Design and Development of an ISO/EN13606-based Electronic Healthcare Record Service", J Am Med Inform Assoc 14:118-129, 2007. [25] Mense, A et al., "Healthy interoperability": A standard based framework for integrating personal monitoring and personal health device data into medical information systems”, Journal on Information Technology in Healthcare, 7 (4), pp. 214-221, 2010. [26] Device to Enterprise Communication (DEC) Profile PCD-01. IHE-PCD Technical Committee. http://wiki.ihe.net/index.php?title=PCD_Profile_ DEC_Overview. [07/10]. [27] Subscribe to Patient Data (SPD) Profile PCD-02. IHE-PCD Technical Committee. http://www.ihe.net/ Technical_Framework/upload/IHE_PCD_TF_Supplement_SPD_PC_2007-07-18.pdf [07/10]. [28] IHE-XDR. http://wiki.ihe.net/index.php?title=Cross-enterprise_Document_Reliable_Interchange [07/10]. [29] HL7 – PHM Reports. http://www.hl7.org/special/Committees/projman/ searchableProjectIndex.cfm? action=edit&ProjectNumber=209. [07/10]. [30] I. Martínez et al., "Recent innovative advances in telemedicine: standard-based designs for personal health", Int J Biomedical Engineering and Technology, 2010. Capítulo 4 [31] Laycock, G. T. (1993). "The Theory and Practice of Specification Based Software Testing" (PostScript). . Dept of Computer Science, Sheffield University, UK Retrieved on 2008-02-13. [32] Wiener Sozialdienste. http://www.wiso.or.at/ [11/10] Página | 47 Página | 48 Anexos A.I. ISO/IEEE 11073 Inicios de la norma. VITAL, INTERMED, 1073… La familia X73 es un conjunto de normas desarrolladas y adoptadas por todos los países para conectividad completa de dispositivos médicos, que aporta interoperabilidad, plug-and-play, transparencia, y facilidad de uso y configuración. Dicha norma está, a fecha de finalización de este documento, en fase de desarrollo. De hecho, muchas de sus partes tienen todavía el status de drafts. Haciendo cronología, el IEEE fue el primero que desarrolló estándares en esta área con la aparición de Medical Information Bus (MIB) en 1984. Sin embargo, los principales fabricantes desarrollaron sus soluciones propietarias, que no han tenido una aceptación general. El CEN creó en 1993 un conjunto de estándares (Point-of-Care Medical Device Communication, PoC MDC) que fueron ratificados en 1999 para poder interconectar dispositivos e intercambiar datos. En el año 2000/2001 las organizaciones de estandarización IEEE e ISO se pusieron de acuerdo y crearon el “Pilot Project” para no competir y trabajar conjuntamente en un único conjunto de estándares. En dicho proyecto piloto, los estándares IEEE empiezan a desarrollarse conjuntamente. Apelando al tratado de Viena esta organización conjunta se extendió para incluir al CEN con el fin de llegar a una armonía internacional en los estándares. De hecho, estos acuerdos han puesto la base para que otras organizaciones de estandarización avancen en una forma similar y trabajen de forma coordinada con otras organizaciones como HL7, DICOM, IHE o Continua Alliance. A principios de 2004 se aprobaron los cinco estándares existentes de la norma 11073 y, desde entonces, se han desarrollado con un alto nivel de participación internacional. Están siendo adoptados como normas ISO a través de su comité técnico TC215, bajo la denominación de norma 11073. También se consideran estándares europeos por medio del TC251 del CEN. Este proceso de integración comienza uniendo esfuerzos realizados anteriormente por cada una de las partes, de modo que se absorben normas previas de ISO e IEEE para poder llegar a cubrir todos los niveles/capas en la comunicación entre los dispositivos. Entrando en detalle, X73-PoC MDC absorbe ENV13734 (VITAL) para las capas superiores, ENV13735 (INTERMED) para las capas intermedias, y las antiguas normas 1073 (1073.3 para las capas inferiores y 1073.4 para el nivel físico). El conjunto se renombra como 11073-x-x (para CEN e ISO) y 1073.x.x (para IEEE), aunque puede asumirse la nomenclatura general de X73-x-x (ver Figura AI.1). Figura AI.1. Modelos de referencia X73 Modelo X73-PoC La norma X73-PoC posibilita la comunicación entre dispositivos médicos (Medical Devices, MDs) y sistemas informáticos externos. Asimismo proporcionan una captura de datos automática de los signos vitales del paciente y de la información asociada al funcionamiento del dispositivo. La norma X73 se aplica sobre un dispositivo médico MD seleccionado. Dicho MD establece una comunicación con el gateway central que al mismo tiempo se conecta con el hospital. El modelo de comunicación es del tipo agente-manager y se posibilitan dos modos básicos de funcionamiento Página | 49 o comunicación de medidas: store&forward y real-time, que se identifican con los dos perfiles de comunicación: polling y baseline. X73-PoC estaba inicialmente orientada a entornos de Unidades de Cuidados Intensivos, UCI (bedside) y dirigida a equipamiento para el cuidado continuo del paciente (monitores, ventiladores, bombas de infusión, ECGs, etc.) Comprende una familia de estándares que pueden usarse conjuntamente a distintos niveles para proporcionar conectividad a los dispositivos implicados dando una solución completa desde bajo nivel (cable físico y conector) hasta alto nivel (representación abstracta de información y servicios). La familia X73-PoC se divide en cuatro grupos: Transporte (por ej., wireless ó cableado). Servicios de aplicación (por ej., servicios por eventos o polling, servicios continuos o baseline). Datos del dispositivo (por ejemplo, modelo orientado a objetos y terminología para la representación de los datos y especializaciones para cada tipo de dispositivo). Comunicación en red y gateway estándares (por ejemplo, gateway entre representación de datos y mensajes basados en IEEE1073 y DICOM, HL7, etc.). El esquema de la pila de protocolos X73-PoC se muestra en Figura AI.2. Figura AI.2. Pila de protocolos X73-PoC Pila de protocolos X73-PoC A. Niveles superiores (1073.1.x.x). Determinan la aplicación de X73-PoC a un MD determinado. Se debe conocer el conjunto de nombres y códigos (Medical Device Data Language, MDDL) de que se dispone para crear posibles mensajes y realizar la comunicación. MDDL establece la nomenclatura, como conjunto de códigos para nombrar los elementos en el Modelo de Información de Dominio (DIM), y la sintaxis que establece la correspondencia entre códigos y formularios. Los códigos necesarios son los genéricos de monitorización, y los específicos de cada escenario y MD. La nomenclatura en X73-PoC se usa principalmente en las PDUs para identificar la información gestionada (medidas, partes del cuerpo, etc). B. Niveles intermedios (1073.2.x.x). Los niveles intermedios se definen mediante la generación del MD System (MDS) y sus mensajes que están asociados con el paciente de forma no ambigua. Así, al realizar la conexión se inicia una secuencia automática de asociación. El agente (MD, sensor, etc.) será el proveedor de datos y el manager será el sistema de información que recoge y gestiona los datos que le envía el agente. Los procesos de aplicación del agente son aquellos que gobiernan el sensor, levan a cabo procesado de las señales obtenidas y sirven de fuente de datos para el MDS. Los procesos de aplicación del manager son procesos para recoger y archivar señales que provee el agente. Como muestra Figura AI.2, el MDIB es el conjunto de instancias de objetos que definen el agente. En este marco los protocolos ACSE y CMDISE se utilizan para asociación y para los servicios de Página | 50 gestión y comunicación de los datos respectivamente. Los pasos a seguir en la aplicación de estas partes de X73-PoC serían: Revisar el Modelo del Paquete de Comunicación del DIM. Identificar los controladores de comunicación, interfaces y sus características: o DCC: es la interfaz para cada MDS que opera como agente; i.e. que provee información de signos vitales. o BCC: es el punto físico de conexión para los DCC cuyos MDS necesitan asociarse con un Entorno de Paciente específico. Opera como manager que consume y actúa sobre la información de signos vitales. Revisar el Modelo Dinámico del DIM y las formas de tratar con inicializaciones, estados de conexión, diagramas de relación de objetos o acceso a datos. Revisar el Modelo de Servicio de los sistemas de comunicación para eventos, peticiones de datos, modificación de atributos, invocación de métodos, creación/eliminación de instancias. Utilizar el Modelo de Comunicación y las definiciones de los distintos protocolos y servicios que se utilizan para el intercambio de información. Conocer especializaciones de la Sintaxis Abstracta. Definir los campos y cabeceras de las PDUs a lo largo de toda la pila de protocolos (ACSE, ROSE, CMDISE, presentación y sesión), así como su uso, aplicación, sintaxis, y reglas de codificación. El proceso es análogo para los mensajes. Sincronización. Actualmente X73-PoC no define un método para la sincronización temporal entre dispositivos médicos, sino que establece que ha de ser consecuente con las definiciones relevantes contenidas en Reglas de codificación. Se define la especialización MDER para formato de red. C. Niveles inferiores (1073.3.x.x y 1073.4.x.x) Se definen los requisitos de nivel físico (wired y wireless), haciendo uso la sub-norma 1073.3.3.x que está basada en conexión mediante cable RS-232 e infrarrojos (IrDA). Esta parte es la que presenta más limitaciones, por lo que sería interesante incorporar nuevas tecnologías, como USB o Bluetooth a X73-PoC. Por todo ello, y tras diversos estudios y propuestas del CEN, se ha constatado la necesidad de ampliar el ámbito de aplicación de la norma a este tipo de tecnologías, incluso nuevas wireless, como Zigbee o WiBree. El grupo de trabajo de IEEE/ISO P1073.0.1.1 en Radio Frecuencia (RF) ha venido desarrollando un informe sobre el uso de redes RF para comunicación de dispositivos médicos. Este informe proporcionará un interesante análisis del uso de tecnologías wireless aplicado a MDs en el PoC, que sentará las bases para la adopción de una nueva versión de X73. A partir de estas premisas, en los últimos años el vertiginoso desarrollo de nuevos MDs wearables, con sensores de alta calidad y sobre tecnologías wireless (como Bluetooth o ZigBee), y el incremento de accesos de banda ancha a redes multimedia, está acelerando la evolución del estándar X73 hacia una versión optimizada y adecuada a estas nuevas tecnologías y contextos ubicuos. Esta versión se denomina X73-PHD (Personal Health Devices). En esta ocasión cambia la arquitectura del protocolo, el modelo de comunicaciones agente-manager, se define una nueva máquina de estados finita (Finite State Machine, FSM), y el modelado del transporte y de nivel físico que conforman la pila de protocolos X73-PHD, como se detalla en el siguiente apartado. Por todo ello, es evidente que este conjunto de estándares está todavía en fase de desarrollo, en un proceso evolutivo en el que multitud de ingenieros han trabajado en paralelo con universidades, instituciones y entidades internacionales. Esto desemboca en una situación transitoria en su progresiva implantación dado que no está asegurada todavía al no existir garantías de que los principales diseñadores y fabricantes de dispositivos médicos acepten el estándar. Sin embargo, la existencia de un estándar universal como X73PoC para los sistemas sanitarios es una necesidad en la comunicación de los dispositivos médicos en e-Salud. Modelo X73-PHD En este apartado no se busca desarrollar todo el contenido técnico del protocolo (su estudio requiere de una lectura en profundidad y preferentemente acompañado de una implementación real). Sin embargo, se presenta una descripción básica de su estructura y los aspectos más interesantes que afectan al uso de MDs del usuario. Página | 51 PHD ha simplificado en gran medida la arquitectura del protocolo, delimitando perfectamente las funcionalidades que ahora quedan separadas en tres modelos (ver Figura AI.3): Modelo del Dominio de Información (Domain Information Model, DIM) caracteriza la información contenida en un agente como un conjunto de objetos. Cada uno de los objetos contiene uno o más atributos. Los atributos describen datos de medidas que son enviados al manager y elementos que controlan el comportamiento del dispositivo. Modelo de Servicio, proporciona métodos de acceso a los datos que son enviados entre los dos sistemas agente y manager para establecer el intercambio de datos del DIM. Entre esos métodos se incluyen comandos como GET, SET, ACTION y Event Report extraídos del protocolo ROSE. Modelo de Comunicaciones, describe la arquitectura de red en la que uno o más agentes se comunican con un solo manager mediante conexiones punto a punto. Para cada enlace, la FSM controla el comportamiento del sistema. Otra función del modelo de comunicaciones es convertir los datos abstractos (abstract syntax) usados en el DIM en una sintaxis de transferencia. Por ejemplo a mensajes binarios empleando las reglas de codificación (MDER). Otro tipo de mensajes pueden ser empleados como XML. Figura AI.3. Arquitectura genérica de X73-PHD Las especializaciones de los dispositivos contienen a menudo definiciones de clases nuevas en el modelo de comunicaciones para abarcar las funcionalidades particulares del mismo. Además, el fabricante puede crear especializaciones propias o extendidas que contienen un esquema de objetos modificado, así como su lista de atributos definidos. Es tarea del manager el identificar estas configuraciones para decidir si acepta la asociación con el dispositivo en cuestión en base a sus capacidades. Pila de protocolos X73-PHD X73-PHD incorpora una nueva arquitectura para la pila de protocolos X73 que posibilita la conexión entre MDs o agente y sistemas externos (Compute Engines, CE) o managers. Esta nueva pila X73-PHD se ha dividido en tres niveles (ver Figura AI.4): Device Specialization. Un conjunto de modelos descriptivos que aglutina el total de objetos y atributos relacionados con los componentes de los dispositivos, como su diseño virtual (Virtual MD, VMD), la configuración del sistema (MD System, MDS), o las especificaciones de la métrica persistente (PM-Store). Optimized Exchange Protocol. La parte principal del estándar. Consiste en un marco de terminología médica y técnica DIM que se encapsulará dentro de una trama PDU. X73-PoC definía esta parte como MDDL. Después el Modelo de Servicio define el conjunto de mensajes e instrucciones para obtener datos de agente. Proporciona una conversión de datos de Sintaxis de Notación Abstracta ASN.1 a una sintaxis de transferencia usando reglas de codificación optimizadas (MDER) además de otras específicas (BER/PER/XER). Los elementos de servicio de X73PoC siguen siendo ROSE, ACSE y CMISE. Finalmente, el Modelo de Comunicación describe una conexión punto a punto basada en una arquitectura agente-manager a través de una nueva máquina finita de estados FSM. Transport Layer. La transmisión de datos es independiente de la tecnología de transporte debido a que X73-PHD establece suposiciones que requieren un soporte directo por esta capa permitiendo que varios tipos de transporte puedan ser implementados. Por tanto, las especificaciones del tipo de capa de transporte quedan fuera del alcance de X73-PHD. Página | 52 Figura AI.4. Evolución de la pila X73-PoC a X73-PHD Entrando en detalle de IEEE 11073-20601 Application Profile-Optimized Exchange Protocol, si en algo destaca este protocolo respecto al anterior, es que han sido capaces de reunir prácticamente los tres modelos en un documento único y compacto. Sus características más destacadas son: Ahora, conociendo las especificaciones estándar, un agente no tiene que transmitir su configuración a no ser que haga uso de una diferente. En tal caso, el Manager pedirá dicha configuración para poder trabajar con dicho agente y almacenarla para futuras ocasiones evitando de esta forma el proceso de asociación que, en el caso de dispositivos multi-especializados (implementan varios equipos al mismo tiempo, como tensiómetro y glucómetro), puede requerir un tiempo considerable. Es independiente de la capa de transporte. Esto reduce enormemente la problemática de implementación, y simplemente asume una serie de funcionalidades que ha de reunir la tecnología seleccionada. Si no fuera el caso, admite la adición de éstas mediante una capa de acondicionamiento (shim layer). Define diferentes perfiles de transporte, teniendo en cuenta las condiciones del canal de comunicación (entorno de aplicación) y clasificándolos según éstas en tipos: o Tipo1: Perfiles de transporte que contienen ambos servicios de transporte fiable y no fiable, donde deberá de haber 1 o más canales virtuales para transporte fiable y 0 o más canales no fiables. o Tipo 2: Contienen únicamente un servicio de transporte unidireccional. o Tipo 3: Sólo contienen un servicio de transporte no fiable, donde deberá de haber 1 o más canales de dicho tipo. Reduce la complejidad del árbol de objetos del DIM eliminando clases redundantes al tiempo que agrega nuevas como la Permanent Metric (PM) que permite almacenar medidas para su posterior envío a petición del manager. Se simplifica enormemente la implementación de dispositivos multi-especializados. En X73-PoC, esta característica exigía la definición de un tipo de MDS específico (Hydra-MDS) que junto con la complejidad de la estructura de objetos era difícil de implementar correctamente. Una Máquina de Estados Finitos FSM mucho más completa, descrita en profundidad y testeada para evitar cualquier posible error durante el funcionamiento del protocolo. La FSM diseñada para PHD es más completa que la utilizada en la versión X73-PoC, al haber incorporado nuevas funcionalidades como disponer de la configuración del agente por parte del manager. Dado que este es un aspecto clave en la nueva versión X73-PHD, se detalla en el apartado siguiente un esquema de FSM genérico para la comunicación entre agente y manager. Página | 53 Nueva máquina de estados finitos FSM El diseño de la FSM (ver Figura AI.5) es la clave de cualquier solución basada en X73-PHD dado que define mecanismo principal de comportamiento. Para el diseño se han de tener en cuenta los estados definidos en X73-PHD: DISCONNECTED, CONNECTED, UNASSOCIATED, ASSOCIATED, CONFIGURING y OPERATING. El proceso de funcionamiento sería: Ambos equipos son encendidos, desencadenando el proceso de inicialización local (MDIB y otros parámetros de estado). A partir de esta inicialización, se establece una conexión a través de la capa de transporte; si tiene éxito, ambos pasan al estado CONNECTED, pero UNASSOCIATED. Para asociarse, MD envía una petición de asociación [AARQ] al manager. Si el manager conoce la configuración del agente ya porque es estándar o la tiene almacenada de operaciones pasadas, pasan a ASSOCIATED y podrán operar. Si no, el manager solicitará la configuración del agente (CONFIGURING) previamente y la podrá almacenar para futuras ocasiones (esto facilita las funcionalidades Plugand-Play). En el estado OPERATING, se inicia el envio de muestras. Puede ser el agente quien las mande directamente o previa demanda del manager. Bajo este modo, el agente puede realizar un solo envío, o sucesivos durante un periodo de tiempo limitado o ilimitado. En cualquier momento se pueden desasociar tanto agente como manager en situaciones de error, por finalización del envío de medidas o por otras circunstancias. Para ello se dispone de una solicitud de desasociación [RLRQ] seguida de la confirmación del otro extremo [RLQE] o una desasociación directa [ABRT]. DISCONNECTED transport connection indication transport disconnection indication CONNECTED disassociating procedure associated operating configuring unassociated associating procedure OK waiting (MD) config check (CE) send config (MD) wait config (CE) Figura AI.5. Máquina de estados finitos Página | 54 AII. Plataformas previas. upHealth.ES La plataforma upHealth.ES ha pasado, en los últimos años, por diferentes versiones para adecuarla a las evoluciones de los estándares en los que se basaba, la evolución de los distintos dispositivos médicos y tecnologías que la soportaban (de fijos a móviles), incluso la integración entre los distintos estándares en los que se basaba. Este anexo recoge la documentación asociada a todas ellas, así como el detalle de su puesta en marcha. El comienzo El comienzo del grupo X73 Spain Group, que se ha dado a inicio del segundo semestre de 2009, ha sido fruto del esfuerzo de muchas personas y de una muy buena idea: “Conseguir poner en funcionamiento real la plataforma upHealth.ES”. Este proyecto se enmarca en la línea de investigación de telemedicina del Grupo de Tecnologías de Comunicación (GTC) adscrito al Instituto de Investigación en Ingeniería de Aragón (I3A). A principios de 2000, el grupo se une a la Red de Telemedicina a nivel nacional, y por tanto comienza como nodo de la red a participar en proyectos enmarcados en distintos nuevos servicios de telemonitorización en vehículos de emergencias médicas. Progresivamente van apareciendo más proyectos y se comienza a constituir la base de los antecedentes de este proyecto. Alguno de estos proyectos se basa en la interoperabilidad de dispositivos biomédicos de monitorización en aplicaciones de telemedicina. Se aportan ideas, se escriben documentos técnicos, se realizan charlas y conferencias. A raíz de estos hechos, se oyen voces de pasar del mero análisis en reuniones entre distintos grupos de distintas universidades a establecer una estrecha colaboración entre varios nodos de la Red de Telemedicina. Así pasamos de un middleware de ideas a ver signos que apelan a una estandarización para conseguir los objetivos. La colaboración con la Universidad Pública de Navarra (UPNA) y el Instituto de Salud Carlos III (ISCIII) para decidir elegir las normas ISO11073/IEEE1073 (X73) consolidada como referencia europea para lograr la interoperabilidad. A partir de este momento el grupo de Zaragoza, se da cuenta que debería hacer una aportación científica en este marco de estandarizar los dispositivos médicos. Por ello se decide que una buena aportación sería crear un sistema completo (end-to-end) basado en la norma X73, que implica el diseño e implantación, para múltiples servicios, de todos los elementos necesarios para transmitir las mediciones efectuadas a un paciente, desde su domicilio (donde se sitúan dispositivos médicos y gateway X73) hasta el hospital de seguimiento, centro de salud o consulta médica (donde se encuentra el servidor de telemonitorización) sin que este hecho conlleve un esfuerzo adicional por parte del usuario. Para lograr este objetivo, se otorgan becas de colaboración, y se desarrollan proyectos fin de carrera, enmarcados en este propósito. Así, la colaboración entre las tres universidades, cuyos grupos han destinado un esfuerzo importante por impulsar ese proyecto, da sus frutos y finalmente en la Universidad Zaragoza se implementa el mencionado sistema end-to-end. Ya en 2009, es necesario hacer inventario de lo que hay hecho hasta ahora y sobre todo para futuros compañeros que se unan a la plataforma, es necesario recopilar y organizar todo lo que hemos desarrollado. Este documento contiene los códigos de las plataformas desarrolladas hasta ahora y pretende poner al lector en antecedentes para poder entender qué es lo que se ha hecho hasta ahora en el laboratorio y qué es lo queda por hacer. Podrá entender cómo funcionan los códigos elaborados para las distintas plataformas del estándar y cómo se usan los dispositivos médicos disponibles en el laboratorio. Además incluye en un capítulo final una presentación resumida de la nueva página web del grupo, www.x73Spain.com o también www.uphealth.es. X73 Spain Group posee una serie de versiones previas de la plataforma denominada upHealth.ES de acuerdo a la evolución que ha experimentado estos últimos años, y la relación de personal que ha llevado a cabo cada una de estas plataformas es la siguiente Plataforma upHealth.ES. Evolución, librerías y funciones Para que en el laboratorio quede una constancia organizada y clara de la evolución de la plataforma de monitorización, se ha elaborado una entrada al servidor del laboratorio, donde el personal puede acceder a los códigos desarrollados, así como a los artículos científicos escritos sobre el estándar o a memorias de proyectos o tesis anteriores. Como se ve en dicha figura, cada versión de la plataforma contiene una carpeta (Código Fuente o Códigos C++) donde se Página | 55 encuentran los códigos en el lenguaje de programación correspondiente, y otra carpeta Ejecutables, que contiene los archivos ejecutables que genera Microsoft Visual Studio cuando compilas la solución, para poder hacer uso directo de la plataforma lanzando directamente las aplicaciones. La plataforma 1.0 se centra en PoC y está compuesta de un adapter y un gateway implementados en Linux con IrDA y RS-232. Además se apoya en las librerías propias del estándar X73, que están recogidas en la carpeta x73srv-lib. La plataforma 1.5 recoge la migración a sistema operativo de Windows del par agent-manager, similar a los anteriores adapter-gateway. Se encuentra en esta carpeta además un resumen explicativo del debug de X73. La plataforma 2.0 se centra en PHD y está claramente organizada en la carpeta Código C++, que está subdivida en otras subcarpetas (agent, agent_network, agent_P2P, manager) que contienen el código del agente (en sus tres versiones) y del manager, respect. La plataforma 2.1 hace la versión de PHD en Windows Mobile y contiene en su carpeta Códigos C++ las mismas dos subcarpetas (agent, manager) para diferenciar ambos códigos. upHealth.ES – Plataforma 1.0-alfa El diseño e implementación de soluciones de telemedicina basadas en estándares es una tarea ardua y compleja. Existen contribuciones previas, desarrolladas en EE.UU. por el grupo de investigación del Dr. Warren, que estudian la viabilidad de implantar estándares en entornos sanitarios e implementan plataformas de monitorización de pacientes en el PoC. Sin embargo, no existen antecedentes europeos en este campo ni tampoco propuestas de soluciones telemáticas globales extremo a extremo que alcancen nuevos casos de uso como se plantean con esta plataforma. Así, y a partir de trabajos preliminares surgidos desde los grupos tecnológicos que conformaron la Red Nacional de Investigación Cooperativa en Telemedicina en los que se avanzaba las primeras aportaciones iniciales, surge una implementación integrada completa: platform1.0-alfa. Esta plataforma aporta una solución global basada en estándares (X73 y EN13606) extremo a extremo, y que permite la investigación y experimentación de las normas más recientes de tecnología médica. Esta solución facilitaría la gestión y aprovechamiento de los recursos de los proveedores, promoviendo la implantación de dispositivos interoperables ubicuos y plug-and-play. El esquema genérico de platform1.0-alfa se presenta en Figura AII.1. Se basa en un elemento concentrador (Gateway/CE) que recopila toda la información adquirida por los MDs del paciente. Este gateway se comunica, a través de la red de acceso, con un servidor remoto que gestiona los diferentes gateway y que centraliza la información proveniente de cada escenario de monitorización de paciente (de ahí su nombre: servidor de telemonitorización). Por último, el servidor de telemonitorización se conecta, a través de la red de comunicaciones, con el servidor de HCE del hospital para almacenar la información asociada a cada paciente en su correspondiente base de datos. A partir de este esquema genérico, se detalla su implementación en la figura Figura AII.2. Esta implementación consigue que el diseño propuesto no dependa de los MDs propietarios de los fabricantes, ni de los interfaces de conexión, ni del formato de las diferentes bases de datos ya que toda la comunicación sigue protocolos estándares. Además, esta arquitectura incluye: Interfaces personalizados a cada UC y/o tipo de paciente/usuario y a su interacción activa. Métodos P&P para gestión de múltiples dispositivos según algoritmos de Inteligencia Ambiental (AmI). Módulos de selección de las tecnologías de acceso de banda ancha óptimas usando algoritmos avanzados de estimación de calidad de servicio (Quality of Service, QoS). Página | 56 X73 EN13606 home hospital Telemonitoring server Communications network Gateway server Communications network interface EHR medical devices Figura AII.1. Esquema genérico de la solución platform1.0-alfa basada en estándares extremo a extremo VMD no X73 prop USB X73 adapter X73 data IrDA-RS232 X73 gateway X73 data TCP/IP Ethernet Monitoring Server X73 / EN13606 EN13606 TCP/IP Ethernet EHR Server EN13606 EHR Electronic Healthcare Record X73srv-adapter-v1.1 X73 communication X73srv-gateway-v1.1 X73srv-telemon-v1.1 X73 communication EN13606 client EN13606 server EN13606 communication Figura AII.2. Arquitectura completa de platform1.0-alfa con las especificaciones tecnológicas de cada elemento Implementación sobre X73 y EN13606 Se detallan a continuación las características técnicas de cada uno de los elementos que componen la arquitectura del sistema, así como las especificaciones de diseño que se han seguido en su implementación (ver Figura AII.2): MDs y adaptadores X73. A día de hoy resulta difícil encontrar MDs que cumplan la norma X73-PoC. Muchos de ellos tienen interfaces físicos Bluetooth, USB, etc. que no están incluidos en la norma (X73-PoC actualmente sólo contempla RS-232 e IrDA). Por ello, en el desarrollo presentado se utilizan dispositivos médicos propietarios sin salida X73-PoC. Los dispositivos utilizados en la implementación son: un tensiómetro (OMRON 705IT), y un pulsioxímetro (DATEX-Ohmeda 3900). A estos dispositivos hay que añadir su correspondiente adaptador a la norma X73-PoC, tanto a nivel físico como a nivel de información, que es el que realmente permite la intercomunicación X73 extremo a extremo con el gateway. Gateway X73. El gateway se diseña como un dispositivo X73 o manager, beneficiándose de todas aquellas funcionalidades propias del estándar: interoperabilidad, sistema de alertas, supervisión y control remoto. Existen riesgos derivados del hecho de que el gateway X73 esté situado en el entorno personal del paciente, donde las condiciones escapan al control del proveedor del servicio. Algunas cuestiones que se han considerado en la solución propuesta han sido: La inteligencia del sistema no puede depender de un equipo externo al hogar; por tanto, el gateway necesita un módulo de inteligencia local (por ej., a control remoto). El paciente tiene derecho a la privacidad de su información médica debiendo ser esta transmitida empleando métodos de cifrado. Página | 57 Servidor de telemonitorización X73/EN13606. El servidor de telemonitorización desempeña un doble papel: De servidor (manager) para la comunicación X73-PoC con el gateway (agente), y de cliente para la comunicación con el servidor de HCE. Crea un extracto EN13606 a partir de los datos X73 proporcionados por el dispositivo médico y es transmitido con el acorde a los arquetipos contemplados por la norma EN13606. Servidor de HCE EN13606. Es un contenedor de información clínica, donde se encuentran las bases de datos con las HCE de los pacientes. Los datos provenientes de cada MD (extractos de HCE generados según un “arquetipo” diseñado ad-hoc) son incorporados al HCE como datos asociados a diferentes asistencias médicas, siguiendo el formato EN13606. De esta manera, este servidor recibe los extractos “arquetipo”, los valida según la norma EN13606, los almacena en la base de datos, y envía el correspondiente reconocimiento al cliente. El objetivo de desarrollar las diversas capas y elementos de servicio por separado es facilitar un desarrollo progresivo y directamente guiado por las especificaciones de los estándares X73 y OSI (X73 sigue una pila de protocolos que contempla los 7 niveles del modelo OSI). Los lenguajes de programación utilizados han sido Java y C/C++ junto con otras herramientas de desarrollo (ANTLR 2.7, Java SDK 5.0 y el compilador de ASN.1 ASN.1c 0.9.22). ASN.1 es un lenguaje orientado a la definición de protocolos en el cual se diseñan los tipos de datos a gestionar así como las estructuras de los mensajes de una manera abstracta. Para obtener elementos en formato de computación o de red, estas definiciones son procesadas por el compilador ASN.1c obteniendo como resultado un conjunto de estructuras de C (definición de tipos de datos estándar y funciones de codificación. Para incorporar la codificación específica de X73-PoC MDER, se ha optado por modificar el árbol sintáctico del compilador haciendo uso de ANTLR2 manteniendo la automatización dl proceso. A continuación Se describen down-up, las características específicas de cada capa: La capa de transporte se ha implementado como adaptación a la pila de transporte que corresponda usar: la del sistema operativo en caso de TCP/IP (net socket), o una diseñada de forma específica en el caso de IrDA/RS-232. La capa de sesión en el estándar X73 queda minimizada, desapareciendo todos los servicios de sincronización y control de diálogo. La capa de presentación queda principalmente como un mecanismo de negociación de las sintaxis a usar por las capas superiores, definido en X73. Para representar las definiciones de clases, atributos y mensajes gestionados por X73-PoC se hace uso de la sintaxis abstracta (MDDL). Éstas son posteriormente mapeadas a sintaxis de transferencia (cómo se traducen a cadenas de bits) acorde a MDER. Esta codificación, desarrollada exclusivamente para X73, simplifica en gran medida la lectura y transmisión de datos si se hace uso de plantillas de tramas (conociendo la posición de los bytes en el mensaje transmitido). Se detallan a continuación los servicios de gestión de asociación y envío de datos implementados: ACSE (Association Control SE). Se encarga de gestionar el estado de asociación entre el manager y el agente. Define un conjunto de comandos CMDISE (Common Medical Device Information SE). Este protocolo implementa las operaciones de transmisión de datos entre los equipos. Se usa junto a ROSE/CMISE. ROSE/CMISE (Remote Operation SE/Common Management Information SE). Para la comunicación se utiliza sintaxis MDER, que adopta un conjunto reducido de tipos de datos ASN.1. Implementa la comunicación de eventos o notificaciones y la solicitud de ejecución de acciones o funciones del dispositivo. Evolución de la plataforma La primera de las actualizaciones, consistió en la incorporación de equipo de pulsioximetría a la plataforma. Mientras que el proyecto anterior estaba orientado al uso de un solo equipo dispositivo médico, la extensión de su aplicación como un simple demostrador a un sistema de mayor utilidad práctica era inevitable. El manager de este modo no queda relegado a un simple gateway monopuesto sino que tendría bajo su gestión más de un dispositivo, ampliando la red personal PAN. Al mismo tiempo, el protocolo X73-PoC contempla varias formas de implementar varios dispositivos en la red: Página | 58 Como un dispositivo multifuncional (HydraMDS): Funciona como varios equipos médicos de naturaleza diferente al mismo tiempo, transmitiendo sobre un mismo enlace con el Manager. Como múltiples dispositivos: para cada uno se establece un enlace punto a punto y el Manager debe de gestionar las diversas comunicaciones X73. El equipo a incorporar es un Pulsioxímetro del fabricante Datex-Ohmeda modelo 3900 (Figura AII.3). Este dispositivo permite visualizar en todo momento el valor de SpO2 y de las pulsaciones cardiacas, así como muestra el gráfico de la forma de onda pletismográfica. Las lecturas de SpO2, frecuencia cardiaca y valor pulsátil PIr, junto con la marca horaria, la etiqueta personalizada del paciente y las condiciones de alarma respectivas, se transmiten a intervalos de 2 segundos en el modo de salida automático y cada 6 segundos en el modo de salida de tendencia. Figura AII.3. Imagen del pulsioxímetro Las diferencias con respecto al otro dispositivo a la hora de desarrollar la implementación de la solución son principalmente la presencia de diferentes tipos de datos (curva pletismográfica , nivel de saturación de oxígeno en sangre y ritmo cardíaco) que precisan de nuevos formatos como el Real Time Sample Array (RT-SA) y modos de transmisión adicionales como Baseline o periódico. Manteniendo la estructura del núcleo de X73-PoC, se añaden las funcionalidades necesarias para conseguir, al igual que con el dispositivo inicial, capturar y enviar los datos del paciente a un servidor remoto (ver Figura AII.4): Las mejoras obtenidas al finalizar el trabajo se había se resumen a continuación: Recopilación y organización del código original creado por los desarrolladores previos. Depuración del proyecto para su correcto funcionamiento tanto en Windows (mediante Cygwin) como Linux. Clasificación de todas las herramientas necesarias para la compilación del código junto con la redacción de una guía de compilación e instalación para futuros proyectos Creación, a partir del punto anterior, de un autoinstalable para la ejecución del sistema en otros equipos. Figura AII.4. Esquema de aplicación Página | 59 La segunda de las actualizaciones consiste en el desarrollo de un actualizador de adaptadores. El protocolo X73-PoC podría haber sido implementado en un sistema sin necesidad de hacer uso de dispositivos reales. Precisamente esto conlleva el problema de tener que diseñar un adaptador que interprete los datos del dispositivo en concreto. Esta es una cuestión que siempre se ha mantenido presente, sin embargo, los buenos resultados que se estaban obteniendo junto el futuro prometedor de la norma sugería que el proyecto no quedara en un simple demostrador, sino que tuviera una verdadera aplicación práctica. El objetivo: adaptar dispositivos médicos de uso prácticamente nulo en los centros de salud para su funcionamiento con el protocolo X73 y añadir nuevas funcionalidades a los mismos. Muchos son los dispositivos que se encuentran en el mercado, para los cuales cada fabricante otorga características exclusivas a cada modelo, sin tener en cuenta la incorporación de los mismos en sistemas globales de eSalud. Cada dispositivo necesita, al menos de momento, de un adaptador que incluye un intérprete de datos en formato propietario y un agente X73 (ver Figura AII.5). Dispositivo Médico Intérprete Protocolo Propietario Agente X73 Figura AII.5. Proceso de adaptación de MD a X73 La implementación consiste en el desarrollo de una aplicación que permita la configuración manual del Intérprete de Protocolo Propietario del adaptador y configurar los parámetros del Agente X73 acorde con el tipo de dispositivo y modo de funcionamiento. Dicha aplicación se ejecutará desde un computador externo conectado al adaptador X73 por medio de un puerto USB o un puerto RS-232 (puertos de salida más comunes). Mediante un interfaz gráfico sencillo (hay que tener en cuenta que la persona que realiza la configuración del adaptador no tiene porque saber el funcionamiento del mismo) podrá realizarse una búsqueda del modelo de dispositivo en concreto en una base de datos local o localizada en un servidor remoto a través de Internet y descargar en el adaptador el controlador necesario. El controlador puede contener, además de información técnica del dispositivo, parámetros relacionados con el paciente. Las diferentes partes que componen el sistema son: Aplicación Servidor. Permanece a la escucha de conexiones entrantes, ejecuta funciones de autenticación de usuarios mediante password, realiza búsquedas en la base de datos de dispositivos y transfiere el fichero de configuración solicitado. Aplicación Cliente. Se encuentra almacenada en el servidor en forma de applet, de esta forma se puede acceder a ella por medio un navegador de un equipo conectado a Internet y una vez descargada ejecutarla en la misma ventana del navegador (sin instalaciones). Esta aplicación se ha creado con una interfaz gráfica simple e intuitiva tanto para facilitar su manejo al encargado de llevar a cabo la instalación del adaptador X73 (que no tiene necesariamente que tener muchos conocimientos de informática) como para que un exceso de imágenes y datos hagan que la carga del applet sea excesivamente lenta. Aplicación Adaptador. Alojada en el equipo conectado al dispositivo, se encarga de establecer un diálogo con la aplicación Cliente para recibir el software de adaptación apropiado y una vez almacenado ejecutarlo para iniciar el funcionamiento del Adaptador. A continuación se muestra en Figura AII.6 un esquema general de la aplicación: DISPOSITIVO ADAPTADOR GATEWAY X73 VENDOR APLICACIÓN ADAPTADOR RS-232 APLICACIÓN CLIENTE SERVIDOR DE TELEMONITORIZACIÓN TCP/IP APLICACIÓN SERVIDOR TCP/IP EQUIPO EXTERNO Figura AII.6. Esquema del sistema actualizador Página | 60 Plataforma 1.5-beta La principal motivación para la implementación de esta actualización de la plataforma es la complejidad en el desarrollo con la platform1.0-alfa. Esto se debe al hecho de haber diseñado un código basado en librerías orientadas a Linux, implementar un traductor de tipos de datos ASN.1 a estructuras MDER demasiado limitado a los primeros dispositivos implementados y disponer de una elevada cantidad de llamadas a funciones para representar el total de las especificaciones en cada uno de los niveles OSI que define la norma. En Figura AII.7 se representa un esquema del diseño de la plataforma. Con estos problemas cualquier cambio en el sistema requiere demasiado tiempo en programación y depuración de errores. Con el desarrollo de X73-PHD a la vista, la solución es reutilizar la plataforma encapsulándola para poder hacerla funcionar en un entorno Windows y simplificar el código para facilitar el trabajo sobre el mismo. Al mismo tiempo, implementar algunas de las características que trae consigo X73-PHD como la máquina de estados (FSM) y agregar una interfaz de usuario. Especificación de objetos ASN.1 Archivos ASN.1 IMPLEMENTACIÓN DE LA PILA DEL PROTOCOLO X73 CAPA DE APLICACIÓN [application_l.cc] ACSE [acse-se.cc] CMISE/ROSE [rose_cmip_se.cc] CAPA DE PRESENTACIÓN [presentation_l.cc] Compilador ASN1.C IrDA [transport_l.cc] Clases de utilidad de Objetos MDER Procesador JAVA Generado por ANTLR Enlace en tiempo de ejecución INTERFAZ FÍSICO (socket API) AARE-apdu(.h/.c) AARQ-apdu(.h/.c) AttributeList(.h/.c) Etc... Librería ASNX java CAPA DE SESIÓN [session_l.cc] TCP/IP [transport_l.cc] [server.cc] Clases de utilidad de Objetos BER/DER asn_cmise.h asn_cmip.h asn_common.h asn_mdse.h asn_rose.h Especificación de objetos ASN.1 Archivos ASN.1 Figura AII.7. Esquema de diseño y herramientas empleadas en las plataformas X73 La implementación de esta nueva plataforma comprende el proceso de adaptación de todas las librerías de modo que el nuevo proyecto pueda ser compilable en un único entorno de desarrollo (Microsoft Visual C++). Uno de los objetivos es conseguir un sistema que requiera un mínimo tiempo de aprendizaje y de puesta en marcha de nuevas modificaciones. Al mismo tiempo, se tiene como objetivo a largo plazo la conversión del proyecto para su ejecución en sistemas móviles (PDA, Smartphone, UltraMoblePC) que hagan uso del sistema operativo Windows CE (Windows Mobile). El uso de managers móviles o en sistemas de mediana/baja capacidad es uno de los puntos de aplicación de X73-PHD. Esta solución mantiene la filosofía de comunicación entre MD (adaptador) y CE (gateway): CE pide asociación a MD, lo que desencadena la creación de un objeto MDIB actualizado con los datos adquiridos del tensiómetro (según perfil periódico o episódico). MD envía la estructura del objeto a CE, que copia en una base de datos actualizable y, en su caso, envía al servidor de telemonitorización. Desde esta base se van a analizar los requisitos que establecerán las reglas de diseño para realizar la nueva implementación (ver Figura AII.8). Primero, buscar un diseño funcional y conforme a X73. Para ello, se ha de eliminar la dependencia con la tecnología de transporte buscando una solución genérica y configurable (denominada gestor de capa de transporte o handler). Así, los datos adquiridos, primero se transforman a X73 actualizándose cada vez que hay una nueva medida (pero en modo episódico, no periódico como en la anterior plataforma1.0) para, después, iniciar el envío de datos (ya conforme a X73) del adaptador X73 al CE a petición del usuario. Por tanto, se deja al desarrollador la inclusión de los archivos que den soporte a la tecnología de transporte que estime oportuno para cada MD. Página | 61 Segundo, el diseño de pila genérica X73 debe mantenerse. Sin embargo, se ha de optimizar el código e introducir la librería de definiciones ASN1.C, llamada ASNX en X73, para que enlace correctamente en la vinculación que se realiza desde el entorno de desarrollo para todos los recursos. Las clases que son una abstracción de los previos adaptador y gateway también han de modificarse para implementar la nueva máquina de estados definida por CEN para X73-PHD. Por último, al no incorporar una tecnología de transporte concreta, los datos que se encapsulan a través de las distintas capas llegan a una disposición en estructuras de buffers, que recogen el conjunto de PDUs de las distintas capas de la pila. Estos buffers han de ser correctamente gestionados para que responda al protocolo de comunicaciones que marca la norma. PLATAFORMA 1.0 - alfa (X73-PoC / SO Linux) Código pila X73 C/ C++ BER ASN1.C GNU GCC Librería ASNX C/ C++ GNU GCC MDER ANTLR JAVA spec.h GNU GCC Librería X73 C/ C++ Spec ASN1.C diseño Código migrado puntos abiertos implementación Migración asn_common.h asn_cmip.h asn_cmdise.h asn_mdse.h asn_rose.h PLATAFORMA 1.5 - beta (X73-PHD / SO Windows) PLATAFORMA 2.0 - release Figura AII.8. Esquema de migración Plataforma 2.0-Release Consiste en la implementación del estándar X73-PHD sobre un sistema compuesto por varios MD/agente y un CE/manager. Además se tienen en cuenta los siguientes objetivos para el desarrollo del proyecto: Capacidad de incorporación al sistema de un número de dispositivos mucho mayor que en la plataforma anterior haciendo uso de una combinación de tecnologías de transporte tanto cableadas (USB, Ethernet) como inalámbricas (Bluetooth, Wi-Fi, Zigbee). Diseño de un manager con posibilidad de ser ejecutado sobre una plataforma móvil (PDA, Smartphone) para la gestión inalámbrica de un rango de dispositivos médicos. Monitorización y estudio estadístico del tráfico, contemplando la incorporación de posibles modificaciones en las definiciones de tipos de datos ASN.1 para optimizar el intercambio de información en términos de tiempo y coste. Diseño de un interfaz gráfico (GUI) multimodal para la gestión de dispositivos y muestras del usuario y otro para la gestión del protocolo a nivel de depuración y evaluación. En el planteamiento de la solución se tiene en cuenta que la norma X73-PHD va orientada a dispositivos de uso personal que, como ya ha sido comentado anteriormente, poseen unas características muy restrictivas en cuanto a capacidad de procesado (velocidad y memoria) y especialmente autonomía. Uno de los desafíos del proyecto es conseguir programar el agente X73-PHD en un sistema basado en microcontrolador. La reducción de complejidad a conseguir, teniendo como referencia la plataforma anterior basada en el X73-PoC es drástica al mismo tiempo que se ha de optimizar el uso de memoria. Posteriormente, hay que incorporar una tecnología de transporte teniendo en cuenta varios aspectos. El tipo de la señal a transmitir queda caracterizado por la estructura de los datos (muestras simples o vectores), su tamaño y la frecuencia de transmisión requerida, pueden ser gestionados de manera más eficiente en unas tecnologías que en otras (proceso de asociación y autenticación, tamaño de cabeceras y velocidades de transmisión). Por otro lado es determinante el entorno de aplicación del dispositivo dado que, el uso de tecnologías inalámbricas puede estar prohibido en algunos escenarios por poder interferir con otros equipos electrónicos. Al mismo tiempo, la distancia al manager y su ubicación requerirán enlaces cableados o inalámbricos con diferente tecnología en cada caso. Por último se tienen en cuenta las posibilidades de implementación debido a que para cada tecnología se precisan unos módulos que incluyen básicamente el interfaz físico (radio o cable) y un controlador de protocolo que gobierna la transmisión y las comunicaciones con el resto de dispositivos. Precio, disponibilidad, consumo, tamaño y complejidad de desarrollo sobre el sistema global son los aspectos a analizar Página | 62 Para el desarrollo del proyecto se ha hecho uso del mismo lenguaje de programación que en las dos plataformas previas: C++. Los criterios que se han tenido en cuenta para su selección son: Uso de punteros para la gestión de árboles de objetos, gestión eficiente de memoria y tramas de datos. Experiencia de desarrollo con el lenguaje C/C++. Acceso a bajo nivel hardware. Posibilidad de desarrollo en sistemas empotrados. Integración con entornos de diseño de aplicaciones de ventanas para Windows (MFC). El entorno de desarrollo de la solución ha sido básicamente Microsoft Visual Studio C++ y su versión para sistemas empotrados Microsoft eMbedded Visual C++. Mientras que todo el código perteneciente al propio protocolo como la gestión de los modelos del X73-PHD (Información, servicios y comunicaciones) se desarrolla únicamente con las librerías estándar de C++, los interfaces visuales (GUI) se han implementado haciendo uso de las librerías Microsoft Foundation Class (MFC). Estas librerías permiten encapsular tanto el código perteneciente al protocolo como las funcionalidades requeridas en clases más sencillas. Además proporciona las herramientas necesarias (botones, campos de información, listados, etc.) para la creación de aplicaciones tanto de ventana como de consola de una manera más sencilla tanto para plataforma Win32 como sistemas empotrados basados en Windows CE. Para la implementación del estándar se ha seguido el borrador de la norma ISO/IEEE P11073-20601/D20 Draft Standard for Health informatics - Personal health device communication - Application profile - Optimized exchange protocol en su versión 20 lanzada en mayo del 2008. Esta versión ha sufrido muy pocos cambios desde entonces, estando localizados en aquellos apartados relacionados con determinadas especializaciones de dispositivos para incrementar su compatibilidad. Dado que son muchas las características que ofrece el protocolo y algunas de ellas no tienen sentido dependiendo del tipo de dispositivo que se emplea en el sistema, es importante hacer una selección de dichas propiedades. Aún así, mientras que en la plataforma anterior se buscaba poder desarrollar un demostrador que contuviera la mínima parte de las características del X73-PoC para poder funcionar con una configuración determinada, en esta ocasión el sistema ha de ser capaz de reconocer la mayor parte de los mensajes y la máquina de estados por completo. Entre las características aplazadas destaca la Métrica Permanente (Permanent Metric) al estar orientadas nuestras aplicaciones a la adquisición y transmisión en tiempo real y el tipo Enumeración (enumeration) al ser empleado solamente en configuraciones extendidas de algunos dispositivos. El modelado de la pila de protocolos o modelos de X73-PHD ha sido modificado en esta ocasión para reducir la complejidad del programa. Mientras que en la plataforma anterior estaban implementadas todas las capas del modelo OSI como funciones o clases con sus correspondientes variables locales y vinculaciones con otras clases, ahora simplemente se procesa la cabecera de los mensajes y se sigue un esquema de interpretación determinado según el tipo de servicio al que pertenece la cabecera. De esta manera es posible acceder a la información contenida en la trama desde la aplicación central en algunos casos, como se verá más adelante. En la Figura AII.9 se puede ver un ejemplo de los dos modelos: X73-PoC PROTOCOL MANAGEMENT X73-PHD PROTOCOL MANAGEMENT Application PDU Application Layer PRST ACSE CMDISE -ROSE PHD PROTOCOL AARQ AARE RLRQ RLRE ABRT Protocol & Device Info Reply Info Release Reason Release Confirma tion Abort Reason RORJ ROER Reject Reason Error Reason RORS Event Report ROIV ACSE PROTOCOL CMDISE-ROSE PROTOCOL Get Set Action Atribute Value Atribute Value Activate Method Presentation Layer Device Configuration Information Measurements Session Layer Figura AII.9. Comparativa de modelos Página | 63 Los tipos de datos definidos en ASN.1 son codificados a MDER de manera más simple en esta ocasión para reducir la complejidad de la solución. Se ha prescindido de librerías adicionales y los mensajes, objetos y datos son codificados y agregados a la trama “on-the-fly”. Esta estrategia descarga la complejidad de la etapa de ejecución del protocolo al tiempo que la desplaza hacia la etapa de desarrollo. Esto es debido a que el uso de punteros en C++ y la manipulación de arrays de bytes (tramas de transmisión) han de realizarse con extrema precaución para no provocar errores en tiempo de ejecución (desbordamiento de memoria, punteros a zonas restringidas, etc.) El procesado de las tramas se hace de manera bastante similar a las dos plataformas anteriores aunque ahora se hace tratamiento más atomizado aprovechando las características de la codificación MDER. Este tipo de codificación explota el hecho de que los paquetes intercambiados contienen campos que se repiten constantemente, como cabeceras de tipo de protocolo, longitud o indicadores de segmento mientras que los campos contenedores de datos de medidas son actualizados. Así surge la propuesta de uso de patrones de tramas, almacenados previamente en memoria que agilicen el procesado y eviten la necesidad de implementar demasiadas funciones. El esquema final de la solución que implementa el módulo de comunicaciones X73-PHD puede verse en la Figura AII.10 (a). Todas las características del protocolo como los modelos, definición de tipos de datos, máquina de estados, gestión de tramas se encuentran encapsulados en varias clases siendo las más representativas las clases PHDAppAgente y PHDAppManager, las cuales implementan el nivel de aplicación del protocolo. Es importante remarcar que se cumplen restricciones de diseño en al haber reducido el uso de memoria de unos 8450KB con X73-PoC a 1880KB con X73-PHD además de rebajar el número de librerías y clases en un factor de casi 20, sin contar librerías de transmisión. GRAPHIC USER INTERFACE MFC LIBRARIES FINITE STATE MACHINE X73PHDAPPLICATION DATA TYPE ASN.1 CLASSES DATA TYPE C++ CLASSES MDER-CODED FRAME MANAGEMENT X73-PROTOCOL STACK MANAGER CODEC X73 TRANSPORT MODULE BLUETOOTH ETHERNET USB IRDA RS-232 OTHERS Figura AII.10. (a) Esquema de la solución, (b) Aplicación agente genérica Finalmente se diseña el interfaz de usuario haciendo uso de las librerías MFC como se ha comentado al comienzo. Esta aplicación implementa por un lado un agente que puede representar cualquiera de las especificaciones estándar o extendida definidas en la norma y simula un dispositivo médico. Por otro lado implementa un manager que recibe conexiones de agentes y gestiona la transmisión de datos desde el dispositivo. Ambos interfaces ofrecen información y controles útiles para la depuración del programa como visor de buffers de transmisión, control del estado del sistema, información de procesos, bytes enviados y recibidos entre otros y por otro lado controles orientados al usuario/paciente como por ejemplo inicio o detención del sistema y envío de medidas. Se puede ver una captura de la aplicación agente en la Figura AII.10 (b). Plataforma 2.0-BT Por último se ha desarrollado la plataforma 2.0-BT, para cubrir los puntos abiertos de la plataforma anterior. Esta plataforma mantiene la estructura de la pila y los subsistemas de las anteriores plataformas, y se basa en modificar el software heredado de la plataforma 2.0 para que se pueda aplicar dispositivos móviles a través de la capa de transporte con tecnología Bluetooth. Para ello, se trabaja con Windows Mobile, por ser el más extendido de los que ofrece la tecnología actual en este país. De este modo, ha sido necesario sustituir las librerías de las que se disponía en la anterior plataforma para poder realizar un software compatible. Página | 64 Otro de los cambios ha sido la separación de la especificación del dispositivo médico. Se ha elaborado un archivo de código fuente distinto para cada MD con librerías comunes. De esta forma, cuando se requiera integrar un dispositivo nuevo, sólo será necesario integrar un nuevo archivo en la solución con los drivers adecuados para su funcionamiento. Finalmente, la máquina de estados se ha vinculado, de forma que la llamada a la función se realiza desde otro archivo haciendo uso de la programación orientada a objetos. De esta forma se consigue fragmentar el código, dejando por un lado la parte básica inamovible y por otro la plataforma susceptible de evolución. Para el diseño se han de tener en cuenta los estados definidos en X73-PHD: DISCONNECTED, CONNECTED, UNASSOCIATED, ASSOCIATED, CONFIGURING y OPERATING. El proceso de funcionamiento, sería: Ambos equipos son encendidos, desencadenando el proceso de inicialización local. A partir de esta inicialización, se establece una conexión a través de la capa de transporte; si tiene éxito, ambos pasan al estado CONNECTED, pero UNASSOCIATED. Para asociarse, el MD envía una petición de asociación al CE. Si el CE conoce la configuración del MD ya porque es estándar o la tiene almacenada de operaciones pasadas, pasan a ASSOCIATED y podrán operar. Si no, el CE solicitará la configuración del MD (CONFIGURING) previamente y la podrá almacenar para futuras ocasiones (esto facilita las funcionalidades plug&play). En el estado OPERATING, se inicia el envío de muestras. Puede ser el MD quien las mande directamente o previa demanda del CE. Bajo este modo, el MD puede realizar un solo envío, o sucesivos durante un periodo de tiempo limitado o ilimitado. En cualquier momento se pueden desasociar tanto MD como CE en situaciones de error, por finalización del envío de medidas o por otras circunstancias. Para ello se dispone de una solicitud de desasociación seguida de la confirmación del otro extremo o una desasociación directa. En primer lugar, la solución del proyecto se puede dividir en dos partes muy diferenciadas; cada uno de estos dos códigos fuentes se encarga de funciones distintas y a la vez complementarias. El código fuente BthConnect.cpp, Figura AII.11, se encarga de realizar la comunicación mediante sockets Bluetooth, y es aquí donde se encuentran las funciones de búsqueda de dispositivos (Function: DiscoverDevices), conseguir la información del dispositivo Bluetooth (Function: GetDeviceInfo) y establecer la comunicación BT (Function: OpenClientConnection y Function: OpenServerConnection). Además este código fuente posee la descripción de las instrucciones que realiza cada uno de los botones. En el otro código fuente, StandardX73.cpp, está definido el estándar X73 propiamente, la relación de cada una de las tramas que se han de intercambiar entre el MD y el CE para cumplir con el estándar. También están definidas las clases y estructuras para que a través de la definición de un objeto en el BthConnect.cpp se puedan hacer llamadas a las funciones definidas en StandardX73.cpp con tan sólo una llamada a través del objeto. Cuando se establece con el médico cuál ha de ser la periodicidad de las medidas, la historia clínica del paciente se actualizará para establecer una serie de alarmas que se activarán en su CE. Así, cuando el paciente reciba una alarma sonora y con mensaje en la pantalla de su CE, deberá ejecutar su programa Manager X73 y seleccionar START y así de este modo el CE permanecerá a la escucha, buscando dispositivos Bluetooth activados en su zona de actuación. Figura AII.12. Después mediante CONEXIÓN_X73 se realizará una petición de asociación con el CE. Cuando éste recibe la petición solamente buscará la dirección Bluetooth asociado a ese dispositivo médico. Para finalizar la fase de conexión se ha elaborado dentro del código C++ el envío de datos de prueba de la medida de tensión sistólica y diastólica. Cuando el CE recibe la medida de la tensión, puede ya desconectar el MD de la comunicación X73 establecida presionando el botón DESCONEXIÓN_X73 y entonces aparecerá en la pantalla del CE del paciente un aviso advirtiendo que el tensiómetro se ha desconectado. Como a veces la búsqueda de dispositivos Bluetooth no resulta satisfactoria a la primera, se ha diseñado un botón dentro del entorno gráfico denominado SEARCH (en el MD) y SEARCH AGAIN (en el CE) que permite al paciente y al dispositivo médico realizar una nueva búsqueda de dispositivos Bluetooth activos en la zona. Como mejora del software, se ha fragmentado el código fuente StandardX73.cpp, creando un nuevo elemento en la solución denominado Tension.cpp que contiene las líneas de código relacionadas con la actuación por parte del estándar cuando el dispositivo médico elegido es un tensiómetro. Página | 65 INICIO PROGRAMA Busca los dispositivos Bluetooth en la zona SHOW DEVICES Discover Devices Muestra los dispositivos bluetooth activos en la zona de actuación Get Number Device Devuelve un entero con el número de dispositivos encontrados Get Device Information Crea un hilo de ejecución CREATE THREAD Devuelve el nombre y dirección de todos los dispositivos en la lista de enlaces en DeviceInfo. Es usado por el interfaz de usuario para mostrar los nombres y direcciones de los dispositivos encontrados Get Local Device Name Devuelve el nombre del titular establecido en el Registro Open Server Connection Abre un socket servidor para escuchar. Registros del servicio. Crea un hilo de ejecución, ReadThread, para leer los mensajes entrantes. Figura AII.11. Esquema de funcionamiento de la conexión Bluetooth Del mismo modo, se ha creado un nuevo código fuente .cpp para la báscula y el pulsioxímetro, para permitir introducir nuevos dispositivos. Esto mejora la escalabilidad y la modularidad. El código se ha estructurado de manera tal que, si en un futuro se quisiera introducir un nuevo dispositivo médico emergente en el mercado en el que se haya incluido puerto Bluetooth, bastará con incluir un nuevo código fuente .cpp para el dispositivo e incluir la librería diseñada devices.h donde se ha definido la clase Bthdevices para asociar los dispositivos médicos con el código StandardX73.cpp a través de un objeto creado en éste último código fuente. Figura AII.12. Interfaz gráfica del manager Bluetooth Página | 66 A.III. Detalles de implementación de framework X73PHD y perfil médico BT HDP La implementación de la plataforma está pensada como si fuera un cubo de piezas donde cada usuario pueda construir un manager o un agente pieza por pieza dándole un estilo personal si fuera necesario. Todas estas piezas se pueden obtener de la librería principal (que se ha dado denominado UZ_ieee_11073, ver Figura AIII.1). Esta librería, desarrollada en C#, contiene todos los objetos necesarios para crear un manager compatible con X73PHD. Esta librería depende únicamente de la librería BinaryNotes y es compatible con la versión 2.0 del framework .NET o superiores. De esta forma, se asegura la total compatibilidad con la plataforma Mono. A continuación, se muestra en Figura AIII.1 una imagen de la solución UZ_ieee_11073 en el IDE de desarrollo Visual Studio 2010. Figura AIII.1. Solución propuesta UZ_ieee_11073 y lista de dependencias BinaryNotes. Generando los objetos ASN.1 BinaryNotes es un framework ASN.1 completo Open Source para Java y para C# además de un compilador que construye clases Java o C# a partir de un fichero de especificaciones ASN.1. Este framework contiene: Librería de codificación y decodificación. Esta librería implementa las reglas de codificación BER, PER y DER. BNCompiler. Compilador ASN.1 que puede ser ampliado y que es capaz de generar clases Java o C# a partir de un fichero ASN.1 específico de entrada. Se pueden personalizar los ficheros generados cambiando las plantillas XSL o creando plantillas propias. Colas de mensajes. Implementación de colas de mensajes de alto rendimiento basadas en codificación ASN.1 Sin embargo, BinaryNotes, como ya se comenta a lo largo de la memoria, no implementa MDER, las reglas de codificación empleadas por ISO/IEEE 11073 para el intercambio de información. Fue necesario la modificación y creación de algunas clases dentro del código de BinaryNotes (Ver Figura AIII.2). Figura AIII.2. Nuevas clases MDER implementadas para codificar y decodificar reglas médicas Las modificaciones de la librería se han realizado apoyándose en el documento de la norma ISO/IEEE 11073-20101:2004 donde se define las reglas de codificación MDER y siguiendo el estilo de programación del resto de clases de la librería Página | 67 BinaryNotes. En el documento de la norma se describen también tipos de datos, atributos, objetos… etc. que utiliza el estándar X73 para representar datos. Toda esa información descrita en formato ASN.1 debe ser traducida a objetos de C#. Para realizar esta tarea se utiliza el compilador de BinaryNotes (BNCompiler). Los pasos a seguir son los siguientes: 1. Generamos un archivo ASN.1 que contenga todas las definiciones del estándar. En nuestro caso al fichero generado le hemos dado el nombre de UZ_IEEE_20601_defs.asn1. … -- *************************************************** -- A.2.14 Operational state data type -- *************************************************** --The operational state data type defines if a certain object or other property is enabled or disabled. OperationalState ::= INTEGER { disabled(0), enabled(1), notAvailable(2) }(0..65535) … Ejemplo de parte del fichero con la especificación ASN.1 del estándar 2. Desde la consola (Ejecutar > cmd si estamos en Windows), nos movemos al directorio Dist/bin, donde reside el compilador de BinaryNotes. 3. Ejecutamos el compilador indicando el path del fichero ASN.1 que hemos creado (En nuestro caso, el fichero lo hemos movido al mismo directorio que el compilador) C:\BinaryNotes\Dist\bin\bncompiler.cmd –m cs –f UZ_IEEE_20601.asn 4. Si no hemos especificado directorio de salida (mediante el parámetro “–o directorio”), si todo ha ido bien, obtendremos nuestros ficheros de C# (Ver Figura AIII.3) en el directorio “Output”. Figura AIII.3. Clases C# generadas por el compilador de BinaryNotes Librería UZ_ieee_11073 Con casi 4000 líneas de código, la librería UZ_ieee_11073.dll contiene el grueso de desarrollo de este TFM implementando toda la arquitectura propuesta en el anterior capítulo. El proyecto se ha organizado intentando separar las partes en las que se divide el estándar y todas aquellas clases de apoyo que tienen algo en común. La estructura de carpetas es la siguiente: A continuación se describe el contenido y objetos de cada una de las carpetas: Página | 68 Config: Contiene las clases que gestionan la configuración de un dispositivo, como tipo de codificación, versión de protocolo utilizada, etc. Core: Esta carpeta contiene los objetos a más alto nivel de la librería. Los objetos agente y manager se construyen a partir de canales, objetos MDS, etc. Events: El núcleo X73PHD publica eventos para que otras clases u objetos los reciban como nuevas medidas, conexiones y desconexiones de dispositivos. Esta carpeta contiene las clases que se encargan del sistema de eventos de la implementación. Exceptions: No solo pueden generarse eventos sino también excepciones de muchos tipos durante la ejecución del núcleo. En esta carpeta se encuentran los tipos de excepciones utilizadas explícitamente para esta implementación. Gateway: Para comunicar el núcleo X73PHD con el mundo exterior en ocasiones se necesita alguna capa de adaptación, contenida en esta carpeta. Logging: La implementación se ha construido utilizando un sistema de log de errores robusto, flexible y multi-hilo permitiendo generar múltiples tipos de mensajes, ya sea por consola, mensajes remotos, etc. Part_10101: En esta carpeta se contiene en una única clase toda la nomenclatura del estándar. Part_104xx: Los dispositivos médicos se ven como especializaciones de X73PHD. En esta carpeta se contienen todas las especializaciones soportadas por esta implementación. A día de hoy solo se soportan las especializaciones 10408 (termómetro) y 10404 (pulsioxímetro). Sin embargo, gracias a la modularidad de la solución, soportar más especializaciones es tan sencillo como crear una nueva clase similar a estas otras. Part_20601: Esta carpeta contiene el grueso de la implementación, máquina de estados finitos, canales, canales virtuales, tipos de PDUs, etc. Utils: Esta carpeta contiene clases de apoyo al resto de clases para realizar operaciones determinadas u objetos que no tienen una clasificación especial. A continuación se describen los principales espacios de nombres (namespaces) de la librería. UZ_ieee_11073. Part_10101 En este namespace se definen los códigos de nomenclatura, los cuales ofrecen la posibilidad de identificar cláramente objetos y atributos en relación a su código OID. Esta nomenclatura está dividida en particiones, para organizar los código dependiendo de su contenido y función. Estos códigos son definidos en el código mediante constantes. Este namespace únicamente contiene clase llamada Nomenclature. La clase contiene constantes estáticas que representan los atributos y objetos mediante un código OID entero. Para acceder a estas constantes desde cualquier parte del código tendremos dos opciones: 1. Usar el namespace en la cabecera del fichero: using UZ_ieee_11073.Part_10101; mandatoryAttributes.Add(Nomenclature.MDC_ATTR_ID_HANDLE, new Attribute(Nomenclature.MDC_ATTR_ID_HANDLE, handle)); 2. No usar el namespace y usar todo el nombre de la variable. Página | 69 mandatoryAttributes.Add(UZ_ieee_11073.Part_10101.Nomenclature.MDC_ATTR_ID_HANDLE, new Attribute(UZ_ieee_11073.Part_10101.Nomenclature.MDC_ATTR_ID_HANDLE, handle)); UZ_ieee_11073. Part_20601 En este namespace se encuentran todos los objetos que definen el comportamiento del protocolo de intercambio optimizado o ISO/IEEE 11073-20601. Es sin duda el núcleo de la implementación. Este namespace se compone de otros 4 namespaces (o sub-namespaces) que engloban clases homogéneas. ASN1. En este namespace aparecen los objetos ASN.1 generados mediante el compilador BNCompiler. FSM. Clases relacionadas con la máquina de estados (Finite State Machine) y que forma parte del modelo de comunicación de ISO/IEEE 11073. Messages. En este namespace se definen las APDU que se utilizan para el intercambio de información en ISO/IEEE 11073. PHD. Aquí se definen las diferentes clases que conforman el DIM (Domain Information Model) y que caracterizan un dispositivo. UZ_ieee_11073. Part_20601.FSM Como ya se ha comentado, en este namespace aparecen las clases relacionadas con la máquina de estados FSM (Finite State Machine) y que forma parte del modelo de comunicación de ISO/IEEE 11073. En un primer nivel, se definen los interfaces y clases abstractas necesarias para la implementación de la máquina de estados. La implementación de los estados será diferente si el dispositivo es manager o agente. En este caso, en la figura adjunta aparece la implementación de los diferentes estados únicamente del manager. Todos los estados derivan de una clase base denominada State, una clase abstracta y que es la siguiente: public abstract class State { protected IStateHandler StateHandler; protected State (IStateHandler handler) { this.StateHandler = handler; } /** * Process an APDU that has arrived on the input data stream * @param apdu */ public abstract void Process(ApduType apdu); /** * Process an outer event * @param apdu */ public abstract void ProcessEvent(Event newEvent); public abstract string Name { get; } } Todo estado tendrá un manejador de estados o IStateHandler, un nombre identificador del estado y dos métodos, Process para procesar las APDU provenientes de otro dispositivo y ProcessEvent para procesar diferentes eventos que puedan producirse como desconexión de otro dispositivo, problemas en la red… etc. El interface IStateHandler es un elemento clave para manejar los estados de la máquina de estados y que además nos permitirá enviar la información hacia el exterior desde cada uno de los estados: Página | 70 public interface IStateHandler { State State { get; set; } MDS MDS { get; set; } void Send(ApduType apdu); void SendEvent(Event evnt); } Visualiizando de forma gráfica la creación de la máquina de estados quedaría una figura como la siguiente: Figura AIII.4. Implementación de la máquina de estados Estas clases son clases abstractas por lo que no se pueden instanciar. En nuestro código a día de hoy únicamente tenemos implementadas las clases de la máquina de estados para el Manager. Analizamos a continuación la implementación de dos estados del manager: Desconectado y No asociado. En el caso de estado desconectado o ManagerDisconnected, tenemos el siguiente código: class ManagerDisconnected : Disconected { public ManagerDisconnected(IStateHandler handler) : base(handler) { Logger.LogDebug("Current State: Disconnected"); } public override void Process(ApduType apdu) { //Do not Process anything in Disconnected state. } public override void ProcessEvent(Event newEvent) { if (newEvent.Type == Event.Connection) StateHandler.State = new ManagerUnassociated(StateHandler); else Logger.LogWarning("Unexpected event (" + newEvent.Type + ") arrived in disconnected state."); } Página | 71 En este caso, el manager está en estado desconectado. En este estado no procesa ninguna APDU, únicamente los eventos de conexión o desconexión. En el método ProcessEvent, cuando llega un Evento de Conexión (Event.Connection) modificamos la propiedad State del IStateHandler indicándole el siguiente estado, que sería ManagerUnassociated. El estado ManagerUnassociated, al que llegamos desde ManagerDisconnected a través de un evento de conexión, es más complicado. A continuación presentamos el código más signiticativo de este estado: class ManagerUnassociated : Unassociated { public ManagerUnassociated(IStateHandler handler) : base(handler){} public override void Process(ApduType apdu) { if (apdu.isAarqSelected()) { Logger.LogDebug("[Agent: " + StateHandler.Agent + "][State: "+ Name + "] AssociationRequest received. Starting association process."); Associating(apdu.Aarq); } else if (apdu.isAareSelected() || apdu.isRlrqSelected() || apdu.isPrstSelected()) { Logger.LogDebug("[Agent: " + StateHandler.Agent + "][State: " + Name + "] Aare or Rlrq or Prst received. Sending Tx abrt (reason undefined)."); StateHandler.Send(new AbrtApduUndefined()); } } public override void ProcessEvent(Event evnt) { if (evnt.Type == Event.Desconnection) { Logger.LogInfo("[Agent: " + StateHandler.Agent + "][State: "+ Name + "] Transport disconnection."); StateHandler.State = new ManagerDisconnected(StateHandler); //TODO Indicar desconexion a capas superiores } } En este caso se procesan tanto eventos como APDU. Si estamos en estado no asociado y recivimos un evento de desconexión, movemos el IStateHandler a estado Desconectado. En el caso del procesado de la APDU, si se recibe una AARQ, se inicializa el proceso de asociación, en otro caso se envía una APDU de abort por causas no definidas (AbrtApdeuUndefined) tal como se define en el documento de la norma. UZ_ieee_11073. Part_20601.Messages En este namespace se construyen las APDU que se utilizan para el intercambio de información en ISO/IEEE 1107320601. Todas estas APDU derivan de una clase base ApduType a la que se añade información. Veamos algunos ejemplos. AbrtApdu. APDU para abortar conexión. public class AbrtApdu : ApduType { public AbrtApdu(int reason) { UZ_ieee_11073.Part_20601.ASN1.AbrtApdu abrt = new UZ_ieee_11073.Part_20601.ASN1.AbrtApdu(); Abort_reason abrtReason = new Abort_reason(reason); abrt.Reason = abrtReason; selectAbrt(abrt); } } A través del constructor se pasa la razón del aborto de conexión y se construye una APDU específica para esta situación. Página | 72 AbrtApduBufferOverFlow. APDU para abortar la conexión por desbordamiento de buffer. Es un caso específico del anterior, y por ello esta clase deriva de la anterior. public class AbrtApduBufferOverflow : AbrtApdu { public AbrtApduBufferOverflow() : base(ASNValues.ABRT_RE_BUFFER_OVERFLOW) { } } AareRejectApdu. Esta es un poco más compleja que las otras e indica el rechazo a la asociación. public class AareRejectApdu : ApduType { public AareRejectApdu(int assocResult) { byte[] empty = {}; AareApdu aare = new AareApdu(); AssociateResult ar = new AssociateResult(assocResult); DataProto dp = new DataProto(); DataProtoId dpi = new DataProtoId(ASNValues.DATA_PROTO_ID_EMPTY); dp.Data_proto_id = dpi; dp.Data_proto_info = empty; aare.Result = ar; aare.Selected_data_proto = dp; selectAare(aare); } } UZ_ieee_11073. Part_20601.PHD En este namespace aparece la implementación del modelo de información de dominio, el DIM. El DIM caracteriza la información de un agente como un conjunto de objetos. Cada objeto tiene uno o más atributos. Los atributos describen medidas que son comunicadas a un manager así como también elementos que controlan el comportamiento e información del estado del agente. Por ejemplo, veamos la implementación de Metric. Esta es la clase base de todos los objetos que representan medida, estado y datos de contexto. Tal como impone la norma, esta clase no puede ser instanciada, por ello se trata de una clase abstracta. public abstract class Metric : DIM { private static readonly int[] MandatoryIds = {Nomenclature.MDC_ATTR_ID_HANDLE, Nomenclature.MDC_ATTR_ID_TYPE, Nomenclature.MDC_ATTR_METRIC_SPEC_SMALL}; public override int Code { get { return Nomenclature.MDC_MOC_VMO_METRIC; } } protected Metric(Dictionary<int, Attribute> attributes) : base(attributes) { } protected override void CheckAttributes(Dictionary<int,Attribute> attributes) { for( int i=0; i<MandatoryIds.Length; i++) { if(!attributes.ContainsKey(MandatoryIds[i])) throw new InvalidAttributeException("Attribute id " + MandatoryIds[i] + " is not assigned in Metric Object."); } } } También podemos encontrar en este namespace la implementación del MDS, una de las clases más importante de toda Página | 73 la librería puesto que cada agente es instanciado directamente desde una clase MDS. El objeto MDS representa la identificación y el estado de un agente a través de sus atributos. Además, este namespace contiene la implementación del canal virtual y los diferentes tipos de canales para cada una de las tecnologías. Actualmente se han implementado dos tipos de canales, para TCP y para HDP. Este último únicamente es compatible con la plataforma Mono pues utiliza la pila de Bluetooth open source de Linux BlueZ, no compatible con Windows. Toda esta información puede resultar muy abstracta, por lo que a continuación se propone un ejemplo de la implementación de un manager básico utilizando la librería ISO/IEEE 11073. Un ejemplo de Manager A continuación se desarrolla y se describe el código básico necesario para crear un Manager X73 con la librería implementada. using using using using using System; System.Collections.Generic; UZ_ieee_11073.Core; UZ_ieee_11073.Events; UZ_ieee_11073.Part_20601.PHD.Channel.TCP; namespace UZ_ieee_11073_Manager { public class Manager : IEventListener { private TCPManagerChannel _tcpManagerChannel; private List<Agent> _agentsList; public Manager() { _agentsList = new List<Agent>(); InitializeChannels(); } private void InitializeChannels() { _tcpManagerChannel = new TCPManagerChannel(); _tcpManagerChannel.AgentAttached += AgentAttached; } void AgentAttached(Agent agent) { agent.EventManager.AddEventListener(this); } public void Start() { _tcpManagerChannel.Start(); } public void Stop() { Console.WriteLine("Parando Manager"); _tcpManagerChannel.Finish(); foreach (Agent agent in _agentsList) { agent.SendEvent(new Event(Event.AssociationAbortRequest)); agent.FreeResources(); } _agentsList.Clear(); } Página | 74 #region IEventListener implementation public void StateChanged(Agent agent, StateChange stateChange) { Console.WriteLine("El estado del agente " + agent.SystemId + "ha cambiado. " + stateChange); } public void NewMeasure(Agent agent, List<Measure> measure) { Console.WriteLine("El agente " + agent.SystemId + "ha generado nuevas medidas:"); foreach(Measure ms in measure) Console.WriteLine(ms.ToString()); } public void AgentDisconnected(Agent agent) { agent.FreeResources(); _agentsList.Remove(agent); } public string Name { get { return "UZ_ieee11073_Manager"; } } public void AgentConnected(Agent agent) { if (_agentsList.Contains(agent)) { Console.WriteLine("Agente ya conectado"); return; } _agentsList.Add(agent); } #endregion } } En el código propuesto, nuestra clase Manager implementa el interfaz IEventListener que debe ser obligatoriamente implementado por cualquier clase que quiera escuchar los eventos de un agente. En el constructor de nuestra clase inicializamos los canales que deseemos, en este caso únicamente se ha inicializado el gestor de canales de TCP, aunque podríamos haber inicializado el de Bluetooth HDP o RFCOMM. En el momento que el manager del canal TCP dispara el evento de AgentAttached, ya tenemos un agente conectado y comenzamos a escuchar todos sus eventos. Actualmente se soportan los eventos de conexión, desconexión, cambio de estado y recepción de medidas, pero es posible que en un futuro los eventos soporten más acciones que se van produciendo en el núcleo. De esta forma tan sencilla y rápida se ha creado un manager ISO/IEEE 11073. La modularidad de la solución permite que añadamos nuevos canales a la librería o incluso nuevos protocolos de comunicaciones sin afectar al resto del código. El usuario final será el encargado de colocar las piezas finales de tal forma que se obtenga un manager a la medida. Página | 75 Integración de Bluetooth HDP Uno de los retos más importantes que afronta este TFM es la integración del perfil médico Bluetooth HDP en la nueva plataforma. Los anteriores desarrollos de upHealth.ES hacían uso de TCP/IP o Bluetooth RFCOMM como tecnologías de transporte por debajo de X73PHD. Por primera vez se utiliza el perfil médico Bluetooth HDP como tecnología de transporte construyendo la primera solución totalmente compatible con el estándar X73PHD. Este logro se ha conseguido en colaboración con la Universidad Juan Carlos I (especializada en estos últimos años en desarrollos a bajo nivel de X73PHD) y en el contexto de la primera de las prácticas médicas realizadas en este TFM. El perfil médico Bluetooth HDP en combinación con la especificación X73-20601 facilita un framework robusto y basado en estándares que permite la interoperabilidad completa entre dispositivos de e-Salud sobre Bluetooth. Este nuevo perfil médico Bluetooth HDP ha traído consigo el desarrollo de dos especificaciones en la pila de protocolos específicas para dispositivos médicos como son MCAP y HDP. MCAP permite una conexión robusta incluyendo además soporte para datos en streaming. El perfil Bluetooth HDP permite a los dispositivos agente (conocidos en Bluetooth como source y asociados a tensiómetros, pulsioxímetros, etc.) intercambiar datos con los dispositivos manager (conocidos en Bluetooth como sink y asociados a móviles, portátiles, SmartPhones, Tablet PCs específicos para e-Salud, etc.). A día de hoy únicamente algunas pilas Bluetooth comerciales presentan compatibilidad con el nuevo perfil médico Bluetooth HDP: Jungo BTware [13], diseñada para sistemas empotrados de bajo consumo; Stollmann BlueCode+ [14], diseñada con una arquitectura independiente de la plataforma; Toshiba Bluetooth Stack [15], para Windows y certificada por Continua; y Ethermind Bluetooth Stack [16], desarrollada por la empresa Mindtree para sistemas empotrados y otras arquitecturas. Sin embargo, todas ellas se apartan del camino elegido por el proyecto upHealth.ES pues se tratan de soluciones comerciales, cerradas, que no permiten evolucionar el desarrollo con nuevas funcionalidades en un futuro y se alejan de los paradigmas de diseño que se quieren imponer en la nueva plataforma. Desde la Universidad Juan Carlos I, en el año 2009, se inició el camino para integrar el nuevo perfil médico Bluetooth HDP en la pila oficial BlueZ de Linux [17]. Esta iniciativa tenía como objetivo final la inclusión de HDP/MCAP en el núcleo de Linux y de esta forma ofrecer las nuevas funcionalidades HDP a plataformas como Linux, Android o Meego. En la Figura 3.13 se muestra un diagrama de bloques de la arquitectura BlueZ (en azul se muestran los bloques que no estaban previamente implementados en BlueZ o que necesitaron ajustar parte de su código, como L2CAP): MCAP es un protocolo basado en L2CAP que facilita un mecanismo sencillo para manejar múltiples canales de datos. Este protocolo soporta diferentes configuraciones de canal dependiendo de la aplicación o las necesidades de la transmisión como por ejemplo los modos reliable o streaming. HDP es un perfil que simplifica el uso de MCAP y es el encargado de anunciar a otros dispositivos las características soportadas así como los canales usados por cada perfil. Para estos anuncios hace uso del Service Discovery Application Profile (SDP). De esta forma, los dispositivos pueden encontrar al manager y conectar con él o viceversa, el manager puede iniciar una conexión a un dispositivo. DI especifica un método por el cual dispositivos Bluetooth comparten información que puede ser usada por otro dispositivos para encontrar imágenes o software asociado, como por ejemplo controladores específicos. Toda esta información también se publica en el registro SDP. Health Device Profile (HDP) GAP MCAP DI SDP L2CAP Host Controller Interface (HCI) Bluetooth Module Figura AIII.5. Pila de protocolos BlueZ. Página | 76 Implementando MCAP La implementación de MCAP se ha realizado totalmente compatible con la especificación de Bluetooth SIG, soportando todas las características obligatorias y algunas de las opcionales, como la re-conexión de canal. Como ya se ha comentado, MCAP requiere los modos de streaming y retransmisión mejorada de L2CAP. Estos modos no existían al comienzo del desarrollo del perfil Bluetooth HDP, se fueron construyendo paralelamente por otros miembros de BlueZ. La arquitectura se diseñó para anunciar mediante callbacks, a las capas superiores, todos los eventos que ocurren durante la ejecución del protocolo. Este diseño permite a la capa HDP recibir todos los eventos en tiempo real de forma eficiente. Destacar que esta implementación de MCAP es multi-hilo por lo que, cuando se abre una sesión de MCAP, se inicializa un nuevo hilo esperando nuevas conexiones. Este hilo controla todas las acciones que forman parte del protocolo como conexión de nuevos canales de datos, desconexiones, re-conexiones, etc. Implementando HDP La implementación de Bluetooth HDP simplifica el uso de MCAP al usuario y registra toda la información necesaria en el registro SDP. Aunque en la primera versión de la implementación se usaban también callbacks para notificar eventos al usuario, la actual se ha re-escrito para adaptarse a las guías de estilo de BlueZ utilizando el sistema de mensajes de sistema DBus. Esta implementación esconde por completo el mecanismo de control de los canales, facilitando un modelo de abstracción basado en un servicio de notificación que notifica nuevos MCAP Communication Links (MCL) tales como nuevos dispositivos remotos. Además, esta implementación gestiona la creación de nuevos canales de datos y controla la correcta configuración de los mismos antes de ser notificados al usuario. DBus Antes de continuar con la integración de Bluetooth HDP en la plataforma, es imprescindible describir qué es DBus y para qué es utilizado. DBus es un protocolo de comunicación entre procesos que emplea mensajes. Ha sido diseñado para que sea ligero y fácilmente utilizado por cualquier programa. La arquitectura de DBus se compone de 2 partes básicas: la librería libdbus, y un daemon que sirve como repetidor de los mensajes. La librería libdbus crea conexiones o canales que conectan dos aplicaciones (ver Figura AIII.6). Lo que hace es usar esa única conexión para conectarse al daemon de DBus, que se comporta como un repetidor. De esta forma, todas las aplicaciones que se conecten al daemon podrán contactar entre sí. La información se transmite en forma de mensajes que los hay de dos tipos: métodos y señales. Los métodos sirven para decirle a un objeto que realice una operación. Pueden requerir parámetros o no. Mientras, las señales sirven para notificar un suceso de interés general. DBus es independiente del lenguaje que se use para acceder a él y hace que los objetos sean unas entidades no asociadas a ningún lenguaje concreto. Como un objeto en DBus es una ruta, en DBus los objetos son direccionados a través de una ruta que equivale a su nombre (un programa publica “objetos-rutas” (ObjectPath) a las que se puede acceder) y son equivalentes a las que se emplean en el sistema de ficheros de Linux. Cada aplicación debe tener una ruta única y no es complicado encontrar rutas como “/org/bluez/” ó “/org/freedesktop/DBus”. A cada objeto le corresponden unos métodos. Estos métodos cambiarán el estado del objeto o nos permitirán recabar información sobre él. Si se quiere ver métodos y señales en funcionamiento hay que ejecutar el comando dbus-monitor en una consola de texto y ver cómo se suceden las acciones. Los interfaces son conjuntos de métodos con nombres predefinidos y acciones acordadas que son conceptualmente cercanos. Un interfaz puede contener todo lo necesario para reproducir música o buscar texto. Así, los interfaces pueden tener la misma ruta que los objetos y, para poder diferenciarlos, se llegó al acuerdo de que los objetos tienen rutas con “/” como separador y los interfaces tienen rutas con “.” como separador (por ejemplo, “/org/freedesktop/DBus” es un ruta y “org.freedesktop.DBus” es un interfaz). Página | 77 Figura AIII.6. Ejemplo de conexiones de DBus Un programa que quiera trabajar con DBus debe seguir unos pasos. El primero consiste en conseguir un bus, un canal, para comunicarse con el daemon de DBus. Si el daemon no está ejecutándose esto será imposible. Por tanto, hay que asegurarse de que esté funcionando. Una vez que se tenga el bus se ha de conectar con el objeto. Para ello, se debe usar su ruta. Sin embargo, este objeto no existe realmente: es un objeto DBus. Entonces, ¿cómo se puede trabajar con él desde una aplicación? La solución a este problema consiste en emplear un objeto proxy o intermediario. Su misión consiste en hacer de traductor o embajador del objeto DBus dentro de una sesión del programa. Este proxy es, en realidad, una clase del lenguaje de programación que enmascara los detalles de la interacción con DBus. El proxy se comporta como si fuese el objeto remoto, pero con sintaxis del lenguaje específico por lo que su uso será natural. HDP utilizando DBus La nueva implementación de HDP hace uso de DBus para interactuar con la pila de Bluetooth de forma estándar. Se compone de 3 interfaces principales: org.bluez.HealthManager org.bluez.HealthDevice org.bluez.HealthChannel A continuación se describe los métodos y eventos principales de estos interfaces. El interfaz org.bluez.HealthManager presenta dos métodos principales: ObjectPath CreateApplication(dictionary config) void DestroyApplication(ObjectPath application) Este es el interfaz principal a través del cual registraremos nuestra aplicación gestora de HDP. El método CreateApplication registra la nueva aplicación aceptando un objeto de tipo Dictionary como parámetro. Este Dictionary puede contener las siguientes parejas de parámetros: DataType de tipo uint16 (obligatorio) Role que puede tomar los valores "Source" o "Sink" (obligatorio) Description de tipo string (opcional) ChannelType que puede tomar los valores "Reliable" o "Streaming" (opcional) Mediante estos parámetros podemos configurar nuestra aplicación que será cerrada cuando se llame al método DestroyApplication o salgamos del DBus. Página | 78 El interfaz org.bluez.HealthDevice representa al dispositivo médico remoto y presenta cuatro métodos: Dictionary GetProperties(). Este método devuelve todas las propiedades del interfaz. Boolean Echo(). Este método envía una petición de eco al servicio remoto. Devuelve True si la respuesta se ajusta al bufer enviado o False si ocurre cualquier error. ObjectPath CreateChannel(ObjectPath application, string configuration). Crea un Nuevo canal de datos. El string de configuracion indica la calidad del servicio que se va a utilizar tomando los valores “Reliable”, “Streaming” o “Any”. Void DestroyChannel(ObjectPath channel). Destruye el canal de datos. Además de estos métodos, este interfaz está compuesto por tres señales o eventos: Void ChannelConnecte(ObjectPath channel). Esta señal se dispara cuando se crea un nuevo canal de datos o cuando un canal ya conocido es reconectado. Void ChannelDeleted(ObjectPath channel). Esta señal se dispara cuando se elimina un canal de datos. Void PropertyChanged(string name, variant value). Esta señal indica que una propiedad ha cambiado de valor. El interfaz org.bluez.HealthChannel representa un canal de datos y presenta tres métodos principales: Dictionary GetProperties(). Este método devuelve todas las propiedades del interfaz. Fd Acquire(). Este método devuelve el descriptor de fichero asignado a este canal de datos. Void Release(). Libera el descriptor de fichero. En la plataforma desarrollada en este TFM se ha utilizado una implementación de DBus sobre Mono. Sin embargo, dado el estado experimental en el que todavía se encuentra la implementación de HDP en BlueZ es importante describir todos los componentes necesarios para que todo funcione correctamente: Kernel de Linux 2.6.36 o superior. Es necesaria esta versión del kernel de Linux para que no se produzcan cuelgues en la capa L2CAP, aunque los componentes de BlueZ están trabajando para resolver este problema. DBus 1.4.0 o superior. El interfaz org.bluez.HealthChannel hace uso de una característica recientemente implementada en DBus conocida como “Unix Fd passing”. Mediante esta característica, es posible enviar un descriptor de fichero desde una aplicación a otra. BlueZ 4.77 o superior. La implementación de HDP apareció a partir de la versión 4.71 de BlueZ de forma muy experimental. Y aunque todavía sigue teniendo ese estado de desarrollo, las últimas versiones ya presentan la suficiente estabilidad para trabajar con ellas. Es imprescindible que en la configuración de la compilación se utilice el flag para hdp: “configure –enable-health”. El wrapper de Mono para Dbus conocido como dbus-sharp no implementa esta última y más reciente característica de DBus por lo que se ha tenido que crear una librería compartida en C (hdpbushelper.so) para recuperar el descriptor de archivo de forma nativa y pasárselo a nuestro código de C# a través de técnicas de marshalling. A continuación se muestra el código de dicha librería nativa: gboolean acquire_unix_fd(char *path, int *fd) { DBusMessage *message, *reply; DBusConnection* conn; DBusError err; gboolean ret; dbus_error_init(&err); conn = dbus_bus_get(DBUS_BUS_SYSTEM, &err); if (dbus_error_is_set(&err)) { fprintf(stderr, "Connection Error (%s)\n", err.message); dbus_error_free(&err); ret = FALSE; Página | 79 goto end; } message = dbus_message_new_method_call("org.bluez", path, "org.bluez.HealthChannel", "Acquire"); if (NULL == message) { fprintf(stderr, "Message Null\n"); ret = FALSE; goto end; } reply = dbus_connection_send_with_reply_and_block(conn, message, -1, &err); //-1 is the default timeout if (dbus_error_is_set(&err)) { fprintf(stderr, "Error sending dbus message: %s\n", err.message); dbus_error_free(&err); ret = FALSE; goto end; } dbus_message_get_args(reply, &err, DBUS_TYPE_UNIX_FD, fd, DBUS_TYPE_INVALID); if (dbus_error_is_set(&err)) { fprintf(stderr, "Error getting arguments from reply: %s\n", err.message); dbus_error_free(&err); ret = FALSE; goto end; } ret = TRUE; end: if (reply) dbus_message_unref(reply); if (message) dbus_message_unref(message); return ret; } Otra cosa importante observada durante los test con algunos dispositivos es que utilizando adaptadores Bluetooth 2.1 + EDR se activa la protección “Man in the Middle” y algunos dispositivos no la soportan si no son 2.1. Para observar este comportamiento se puede configurar udev para que arranque el demonio con el flag “-d” cuando arranque el sistema o se conecte un dispositivo Bluetooth. Otra posibilidad es arrancar el demonio manualmente. Si se han compilado el código fuente de BlueZ, en la carpeta “src” aparecerá un binario llamado “bluetoothd”. Nos aseguramos de parar el demonio que posiblemente tengamos ejecutando mediante “/etc/init.d/bluetooth stop” y posteriormente ejecutamos como root el binario “bluetoothd –dn” A continuación analizamos algunos fragmentos de código que interactúan con DBus para utilizar el perfil médico de Bluetooth HDP. Inicialmente es imprescindible definir las interfaces que expone HDP en C#. public public public public public public public public delegate delegate delegate delegate delegate delegate delegate delegate void void void void void void void void DeviceDisappearedHandler(string address); DeviceFoundHandler(string address, IDictionary<string, object> values); DeviceCreatedHandler(ObjectPath device); DeviceRemovedHandler(ObjectPath device); DisconnectedRequestedHandler(); ChannelConnectedHandler (ObjectPath channel); ChannelDeletedHandler (ObjectPath channel); PropertyChangedHandler(string name, object val); [Interface ("org.bluez.HealthManager")] Página | 80 public interface HealthManager { ObjectPath CreateApplication(IDictionary<string, object> config); void DestroyApplication(ObjectPath application); } [Interface ("org.bluez.HealthDevice")] public interface HealthDevice { ObjectPath CreateChannel(ObjectPath application, string configuration); void DestroyChannel(ObjectPath channel); bool Echo(); IDictionary<string, object> GetProperties(); event ChannelConnectedHandler ChannelConnected; event ChannelDeletedHandler ChannelDeleted; event PropertyChangedHandler PropertyChanged; } [Interface ("org.bluez.HealthChannel")] public interface HealthChannel { IDictionary<string, object> GetProperties(); uint Acquire(); void Release(); } Además de estos interfaces específicos de HDP, se implementan otros de Bluetooth más generales y que nos servirán para conocer los adaptadores de Bluetooth instalados en nuestro equipo y los dispositivos remotos conectados a ellos. También se ha de implementar el acceso a la librería nativa desarrollada para obtener el descriptor de Unix. [DllImport("libhdpdbushelper.so")] [return: MarshalAs(UnmanagedType.Bool)] public static extern bool acquire_unix_fd(string path, ref int fd); Se ha creado una librería que contiene todo este código relacionado con HDP llamada UZ_ieee_11073_HDPHelper que facilita el trabajo con este perfil abstrayéndonos de las tareas más complejas. La clase principal de esta librería es HDPManager. private Bus _systemBus; private HealthDevice _healthDevice; public HDPManager () { _systemBus = Bus.System; _healthManager = _systemBus.GetObject<HealthManager>("org.bluez", new ObjectPath("/org/bluez")); } En el constructor se obtiene el bus de sistema y el objeto HealthManager que será el punto de entrada para gestionar el perfil médico de Bluetooth. Esta clase propone como públicos dos métodos que se expondrán al usuario directamente y que le permitirá conocer los adaptadores de Bluetooth instalados y los dispositivos conectados a ellos: public ObjectPath[] ListAdapters() { _manager = _systemBus.GetObject<Manager>("org.bluez", new ObjectPath("/")); return _manager.ListAdapters(); } public ObjectPath[] ListDevices(ObjectPath adapter) { _adapter = _systemBus.GetObject<Adapter>("org.bluez", adapter); Página | 81 return _adapter.ListDevices(); } Previamente a escuchar el dispositivo médico, desde el gestor de canales se inicializará la aplicación manager: public void CreateApplication(ushort deviceType) { IDictionary<string, object> dict = new Dictionary<string, object>(); dict.Add("DataType", deviceType); dict.Add("Role", "Sink"); _appPath = _healthManager.CreateApplication(dict); } Para esta acción será imprescindible determinar qué tipo de dispositivo médico se va a escuchar. Y finalmente, cuando ya se ha elegido adaptador, dispositivo y tipo de dispositivo a escuchar, se comenzará a escuchar el dbus. public void ListenHealthDevice(ObjectPath device) { _healthDevice = _systemBus.GetObject<HealthDevice>("org.bluez", device); _healthDevice.ChannelConnected += delegate(ObjectPath vchannel) { Console.WriteLine("Se creó un canal: "); }; _healthDevice.ChannelDeleted += delegate(ObjectPath channel) { Console.WriteLine("Se borró un canal"); }; _healthDevice.PropertyChanged += delegate(string name, object val) { Console.WriteLine("Una propiedad cambió: " + name + " Value: " + val); if(name.Equals("MainChannel")) { HealthChannel channel = _systemBus.GetObject<HealthChannel>("org.bluez", (ObjectPath)val); ObjectPath cc = (ObjectPath)val; int descriptor = -1; bool ret = NativeMethods.acquire_unix_fd(cc.ToString(), ref descriptor); if(ret) { UnixStream stream = new UnixStream(descriptor, true); if(StreamConnected != null) StreamConnected(stream); } } }; } En este caso de ejemplo se han utilizado métodos anónimos para compactar el código. En el momento que la propiedad MainChannel cambia, se obtiene el descriptor llamando a la librería nativa y se lanza un evento con el stream ya creado. En ese momento, el proceso continúa de forma similar a cualquier otro canal gracias a la abstracción de capas descrita en anteriores capítulos. Página | 82 Integración de los servicios en la nube Config profile El diseño del Config Profile ha sido un elemento clave en estudios previos [20]. Este archivo contiene toda la información asociada a los procedimientos que deben seguir los pacientes que gestiona un mismo manager CE. En la Figura AIII.7 se muestra el concepto del Config Profile en el contexto de la plataforma de telemonitorización. Agentes Manager datos x73 x73 Config Profile Dispositivos Médicos Compute Engine idCE Otra info Red + Datos de paciente Base de Datos Datos de paciente Config Profile Servidor de Gestión Servidor de HCE Figura AIII.7.Situación y función del Config Profile en la plataforma de telemonitorización Este elemento Config Profile es generado en el servidor de gestión (Management Server, MS). La información que contiene procede de una base de datos que es completada a partir de dos fuentes de información distintas. Por un lado se obtienen los datos necesarios de la HCE de cada paciente y, por otro lado, se introduce información adicional al caso de uso de cada paciente manualmente. Una vez completa la información que debe contener el Config Profile se genera un archivo XML que es el que se envía a CE para que el proceso de monitorización sea correcto. La información necesaria para rellenar el Config Profile estaría contenida en una base de datos que almacenaría datos como información genérica relativa a dispositivos médicos, registro de los CEs que se están utilizando para llevar a cabo la monitorización de pacientes, información sobre los pacientes que están siendo controlados, médicos o enfermeros que están realizando el seguimiento de pacientes, medidas realizadas, etc. En este TFM se ofrece una nueva perspectiva para el Config Profile ya que, dada la complejidad que requiere el diseño, desarrollo e implementación de un servidor de gestión que ofrezca seguridad y genere un Config Profile de forma eficiente, el objetivo de este TFM es trasladar parte de esa información a la nube (especialmente las tareas a realizar por cada usuario), sirviendo como prueba de concepto para un futuro donde toda la información sea almacenada de forma distribuida. Diseño del antiguo Config Profile La información necesaria para rellenar Config.Profile estaría contenida en una base de datos que sigue el modelo de la Figura AIII.8. Para su diseño nos hemos servido de los análisis explicados en los apartados previos a este capítulo. La base de datos consta de las siguientes tablas de relaciones: MD Table: contiene información muy genérica relativa a los dispositivos médicos. Cada dispositivo de un tipo, marca y modelo tendrá un identificador único por lo que en esta tabla se recogen todos los dispositivos distintos que pueden utilizarse en la monitorización de pacientes. Como se ha dicho, esta tabla contendrá el identificador de MD, idMD, el tipo, MDType, la marca, trademark, y el modelo, model. CE Table: en esta tabla quedarán registrados todos los CEs que se están utilizando para llevar a cabo la monitorización de pacientes. Para cada CE se almacenará su identificador único, idCE, la marca y modelo del dispositivo, trademark y model, y otro parámetro muy importante, idUSER, que indicará qué tipo de uso se da al CE, es decir si lo utiliza un paciente en un entorno domiciliario, un enfermero o médico en uno hospitalario o finalmente un monitor o un deportista en un entorno fitness. Página | 83 Figura AIII.8. Modelo de la base de datos Patient Table: aquí estarán recogidos todos los pacientes que de una forma u otra están siendo controlados y que tendrán un único identificador, idPAC. La información que se ha considerado necesaria para el Config.Profile es nombre, name, y apellido, surname, para que el entorno que vea el usuario sea dirigido y personalizado. La edad, birthday, y el sexo, sex, puesto que son factores que influyen en los dispositivos médicos que pueden tener asociados, en las enfermedades y en las prescripciones médicas. Además, se está considerando que estos dos factores influyan en la apariencia que tendrá el GUI de la aplicación que se está diseñando e implementando paralelamente. Todo lo expuesto hasta ahora justifica el caso domiciliario pero también son los parámetros que se han considerado importantes para el caso hospitalario. Doctor Table: en la presente tabla quedarán registrados todos los médicos o enfermeros que estén realizando el seguimiento de algún paciente. Cada uno de ellos tendrá su propio identificador como en los casos anteriores, idDOC. También será necesario conocer el nombre y apellido, name y surname, del personal médico así como el cargo que desempeñan. Esta última característica vendrá indicada por idROL por lo que con este campo se podrá conocer si la persona que realiza el seguimiento es un médico, un enfermero o un monitor para el escenario de fitness. Este parámetro es muy importante porque dependiendo del tipo de cargo que desempeñe el usuario este tendrá unos permisos en la aplicación u otros. Además, como en el caso de los pacientes, estos factores son los que se han considerado importantes porque para el caso hospitalario estos influirán en la apariencia del GUI. Para el escenario domiciliario en el que el usuario es un paciente es importante para este que sepa quién es el que está vigilando su salud. Measure Table: debido a que con cada MD pueden tomarse diferentes tipos de medidas (p. ej. con un tensiómetro pueden tomarse la presión sistólica, la diastólica y el ritmo cardiaco) esta tabla se ha diseñado de forma que tenga listadas todas las medidas distintas que pueden tomarse con los diferentes dispositivos médicos aunque sean del mismo tipo (p. ej. el ritmo cardiaco medido con el tensiómetro 705 IT-BT de OMRON tendrá un identificador distinto al medido con el tensiómetro UA-787 de A&D). Por lo tanto los campos que existirán en esta tabla serán el identificador de medida, idMeasure, el tipo de medida, MeasureType, el identificador del dispositivo al que está asociada dicha medida, idMD, y los umbrales técnicos para esa medida, tanto superior como inferior, que dicho MD puede medir, MaxFuncThres y MinFuncThres. Interpers Table: en esta tabla se recogen las relaciones que conciernen a algunas de las tablas ya explicadas. Es aquí donde queda indicado quienes son los usuarios de cada CE así como los pacientes que tiene asociados cada doctor/ enfermero. El identificador clave será idREL y en cada fila se asociará a cada CE, idCE, los pacientes y médicos, idPAC e idDOC, que están asociados a este. Página | 84 Procedure Table: esta es la tabla final en la quedarán asociados todos los procedimientos a llevar a cabo para cada paciente. A cada paciente, que estará representado en esta tabla por idREL, se le asociarán todas las medidas que debe realizarse, idMeasure, con la fecha y hora a las que debe realizarse cada toma, date. Dependiendo de la gravedad de cada paciente, PATType, cada medida tendrá asociados unos umbrales médicos superior e inferior, MaxMedThres y MinMedThres, impuestos por el especialista. El relleno de esta base de datos se realizará en el centro de Salud por personal experto. Cada paciente al que se decida realizarle un seguimiento debe quedar registrado en la base de datos en la que deben quedar reflejadas las dolencias por las que se trata a cada paciente, los dispositivos asociados al mismo, así como las pautas prescritas por el especialista para que el seguimiento sea óptimo. Implementación del Config Profile Como se ha citado anteriormente el Config Profile será un archivo XML que se implementará en el servidor de gestión, MS, y se enviará a CE. Puede sufrir cambios y es importante que en el CE siempre esté la versión actualizada. Se ha considerado el usar XML como forma de envío de la información ya que propone un estándar para el intercambio de información estructurada entre diferentes plataformas. XML es una tecnología sencilla que tiene a su alrededor otras que la complementan y la hacen mucho más grande y con unas posibilidades mucho mayores. Tiene un papel muy importante en la actualidad ya que permite la compatibilidad entre sistemas para compartir la información de una manera segura, fiable y fácil. Para implementar el archivo XML se partirá de un esquema XML y se utilizará la herramienta JAXB puesto que permite crear clases Java a partir de un esquema XML. En el Anexo E se detallada un poco más el por qué se han elegido estas tecnologías. El Config Profile responde al esquema indicado en la Figura AIII.9. El parámetro de entrada que es necesario para generar el Config Profile es idCE, puesto que cada Config Profile es único por CE. La forma de interpretar el archivo XML es la que se detalla a continuación. La información que puede encontrarse a primer nivel es el listado con todos los pacientes asociados a un CE concreto. Para el caso domiciliario posteriormente aparece un listado con el personal médico asociado a cada paciente. La correspondencia será uno a uno, es decir, al primer paciente lo controla el primer doctor, al segundo el segundo y así sucesivamente. En el caso hospitalario solo aparecerá un único doctor o enfermero pues es él quien lleva el control de todos los pacientes. A este mismo nivel se obtendrá también la información dada por idUSER que indica quién hace uso del CE así como qué CE es el que se está utilizando. De las distintas partes diferenciadas que componen el archivo XML la que nos va a ofrecer una mayor cantidad de información es la parte relativa a los pacientes. Es aquí donde vienen indicados los procedimientos a llevar a cabo para tratar a cada paciente. Dentro de la información asociada a los pacientes, en segundo nivel se encuentra su nombre, apellido, fecha de nacimiento, sexo así como una lista de los diferentes dispositivos médicos que ese paciente tiene asociados. De cada MD se obtiene información, en un tercer nivel, del tipo de dispositivo que se trata, el modelo, la marca así como una lista con todas las medidas que el paciente ha de tomarse con ese determinado MD. Ya por último, en un cuarto nivel se tiene la información asociada a cada medida. El tipo, los umbrales funcionales que vienen determinados por cada dispositivo, los umbrales médicos que vienen prescritos por el especialista y una lista con los instantes en los que deben efectuarse las tomas. La información asociada al personal experto es más breve. Se obtiene el nombre y el apellido del usuario así como su rol que será un aspecto importante a la hora de otorgar al usuario ciertos permisos sobre la aplicación. Página | 85 Figura AIII.9. Esquema XML del Config Profile Moviendo el Config Profile a la nube Este proyecto ofrece una nueva perspectiva para el Config Profile. Dada la complejidad que requiere el diseño, desarrollo e implementación de un servidor de gestión que ofrezca seguridad y genere Config Profiles de forma eficiente, nuestro objetivo es trasladar parte de esa información a la nube (especialmente las tareas a realizar por cada usuario), sirviendo como prueba de concepto para un futuro donde toda la información sea almacenada de forma distribuida. A continuación se puede observar un ejemplo de Config Profile como se consideraba anteriormente: <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <Users xmlns ="http://www.example.org/configProfile"> <patient> <name>Juan</name> <surname>Español</surname> <birthday>1984-06-09 00:00:00.0</birthday> <sex>Hombre</sex> <MD> <measure> <MeasureType>Presión Diastólica</MeasureType> <Date>2009-06-25 09:00:00.0</Date> <Date>2009-06-25 09:05:00.0</Date> <Date>2009-06-25 21:00:00.0</Date> <Date>2009-06-25 21:05:00.0</Date> <MaxFuncThres>299.0</MaxFuncThres> <MinFuncThres>0.0</MinFuncThres> Página | 86 <MaxMedThres>60.0</MaxMedThres> <MinMedThres>40.0</MinMedThres> </measure> <measure> <MeasureType>Presión Sistólica</MeasureType> <Date>2009-06-25 09:00:00.0</Date> <Date>2009-06-25 09:05:00.0</Date> <Date>2009-06-25 21:00:00.0</Date> <Date>2009-06-25 21:05:00.0</Date> <MaxFuncThres>299.0</MaxFuncThres> <MinFuncThres>0.0</MinFuncThres> <MaxMedThres>120.0</MaxMedThres> <MinMedThres>90.0</MinMedThres> </measure> <measure> <MeasureType>Pulso</MeasureType> <Date>2009-05-28 09:00:00.0</Date> <Date>2009-05-08 21:00:00.0</Date> <MaxFuncThres>180.0</MaxFuncThres> <MinFuncThres>40.0</MinFuncThres> <MaxMedThres>0.0</MaxMedThres> <MinMedThres>0.0</MinMedThres> </measure> <MDtype>Tensiómetro</MDtype> <trademark>OMRON</trademark> <model>705IT BT</model> </MD> </patient> <doctor> <name>Jesús</name> <surname>Rodríguez</surname> <rol>médico</rol> </doctor> <doctor> <name>Borja</name> <surname>Calvo</surname> <rol>enfermero</rol> </doctor> <user>paciente</user> <PDA>1</PDA> </Users> Mediante la utilización de los servicios en la nube, el contenido del Config Profile es más sencillo. Aunque únicamente es una primera aproximación, para esta prueba de concepto se considera un Config Profile como el siguiente: <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <Users xmlns ="http://www.example.org/configProfile"> <patient> <name>Juan</name> <surname>Español</surname> <birthday>1984-06-09 00:00:00.0</birthday> <sex>Hombre</sex> <gappsuser>uz.juanespanol</gappsuser> <gappspass>#2e/@98ksp=q&l</gappspass> </patient> </Users> El nuevo Config Profile se hace más sencillo moviendo la información sobre las medidas y los dispositivos a los servicios en la nube, en este caso Google Calendar. Se ha añadido sin embargo dos nuevos campos definiendo el nombre de usuario del paciente y la contraseña (cifrada) que identifican al paciente en Google Apps. Pero, ¿cómo se define la anterior información en los servicios en la nube? Utilizando la misma estrategia que utilizan compañías como HTC para introducir información propia en las Google Apps, nuestra plataforma utiliza los campos vacíos que ofrecen las diferentes aplicaciones de Google para almacenar la información asociada a cada usuario en forma de XML. Analicemos como se introduce la información sobre las tareas y eventos a realizar o asistir por el paciente. En este caso utilizamos Google Calendar, un servicio online de calendario que nos permite introducir recordatorios, tareas o cualquier otro tipo de evento. Si añadimos un evento, inicialmente veremos la siguiente figura: Página | 87 Figura AIII.10.Evento de Google Calendar Un evento de Google nos permite introducir el título y fecha del evento, en nuestro caso una medida, con lo cual esa información ya no la necesitaremos en el XML. El resto de información necesaria, la colocaremos en el campo de descripción con el siguiente formato: <uzHealthData> <measure> <MeasureType>2677</MeasureType> <MaxFuncThres>299.0</MaxFuncThres> <MinFuncThres>0.0</MinFuncThres> <MaxMedThres>60.0</MaxMedThres> <MinMedThres>40.0</MinMedThres> </measure> <Device> <trademark>OMRON</trademark> <model>705IT BT</model> <protocol>X73PHD</protocol> <technology>BTPHD</technology> <deviceconfig> <PIN>3921334</PIN> </deviceconfig> </Device> <doctor> <name>Gregory</name> <surname>House</surname> <rol>Especialista</rol> <email>[email protected]</email> </doctor> </uzHealthData> Es decir, un evento está asociado a una medida de un usuario y contiene la siguiente información: Medida. Se define el tipo de medida (que puede ser pulso, sistólica, diastólica… etc) y los umbrales en los que se espera esa medida. Dispositivo. Información del dispositivo de medida que se espera utilizar por parte del paciente. Entre la información se define el protocolo y tecnología del dispositivo. Y en caso de que sea necesario, se define la configuración necesaria para trabajar con ese dispositivo. Por ejemplo, en este caso que es un dispositivo Bluetooth, se envía el PIN para realizar el emparejamiento con el dispositivo de forma automática. Doctor. Información del doctor que controlará esta medida. Con todo esto, la pantalla de Google Calendar quedaría como: Página | 88 Figura AIII.11.Evento de Google Calendar con información de uzHealth Esta información es totalmente transparente al usuario, que únicamente verá los eventos y tareas en la plataforma de telemonitorización. Cuando el nuevo evento aparezca, el usuario simplemente puede hacer clic en el botón “Realizar Medida” para que esta comience de forma automática, configurando el dispositivo sin necesidad de la participación del usuario y enviando la medida al servidor de telemonitorización. El objetivo principal es hacer el uso de la aplicación más sencilla al usuario de tal forma que el proceso de medida sea tan fácil como sea posible. Hay que recordar que este tipo de aplicaciones estará orientado en mayor parte a personas mayores, sin conocimientos informáticos, y una complejidad de la aplicación puede llevar a un mal uso de la misma o incluso a no utilizarla nunca. 3.6. Integración con el servidor de HCE Este TFM presenta el desarrollo de una plataforma de telemonitorización de pacientes sobre sistema operativo Linux y que integra las normas de interoperabilidad X73PHD y UNE-EN/ISO13606. Es una solución estándar y ubicua para entornos de salud personal que utiliza Bluetooth HDP para la comunicación entre los dispositivos médicos y el manager X73PHD. Además, se homogeneíza la comunicación de área extendida (Wide Area Network, WAN) con el servidor de HCE mediante tecnologías Web Services (WS) y comunicación interoperable según XML (ver Figura AIII.12). En las secciones anteriores se ha definido y analizado X73PHD como el estándar internacional para interoperabilidad de dispositivos médicos. Este es el primer paso para llegar a una plataforma totalmente interoperable. No obstante, para lograr niveles óptimos en la calidad asistencial y continuidad de cuidado de un paciente, es necesario que las partes implicadas en el seguimiento/control de su enfermedad interactúen también de forma interoperable. El estándar internacional para lograr interoperabilidad de HCE [21] entre sistemas sanitarios es UNE-EN/ISO13606 [22]. Esta norma especifica cómo la información clínica debe ser transmitida basándose en un modelo dual: Modelo de Referencia y Modelo de Arquetipos. Sin embargo, como ya se ha comentado a lo largo de este proyecto, la existencia de normas médicas no garantiza la correcta implementación de una solución homogénea de salud personal dado que la integración de las diferentes normas en soluciones extremo a extremo todavía sigue siendo una tarea compleja e intrincada. Este es uno de los principales retos en la investigación de estándares: su posterior implementación, en forma de soluciones reales, en el sistema sanitario. Algunas contribuciones anteriores han diseñado implementaciones aisladas tanto de una plataforma de monitorización de pacientes basadas en X73 [23] como de un servidor de HCE basado en UNE-EN/ISO13606 [24]. Estos desarrollos previos, si bien han servido como prueba de concepto del correcto funcionamiento de ambas normas, también han constatado una ausencia de interoperabilidad en la comunicación Página | 89 extremo a extremo. Algunas otras iniciativas como IHE y Continua o proyectos como Healthy Interoperability [25] ya han abordado este problema. Sin embargo, hacen uso de mensajes HL7 y no del estándar europeo UNE-EN/ISO13606. Interfaz PAN (Bluetooth) Dispositivos médicos (Agentes X73PHD) Interfaz WAN (XML) Computer Engine (Manager X73PHD) Servidor HCE (ISO/EN13606) Figura AIII.12. Esquema conceptual de la plataforma de telemonitorización basada en estándares extremo a extremo Así, X73PHD cubre la comunicación en el interfaz PAN y UNE-EN/ISO13606 define el intercambio interoperable de HCE. Pero, hasta el momento, no se ha definido un estándar específico para el interfaz WAN entre el manager y el servidor de HCE. Sin embargo, se han propuesto algunas iniciativas (lideradas por IHE y Continua Health Alliance) para suplir en parte esta carencia. El Comité Técnico IHE-Patient Care Device (IHE-PCD) ha propuesto el perfil Device to Enterprise Communication (DEC, llamado PCD-01) [26]. Este perfil emplea mensajes HL7 v2.6 para conectar el manager y el servidor HCE. El perfil Subscribe to Patient Data (llamado PCD-02) [27] es una extensión de este perfil que divide este interfaz para filtrar los datos generados en el entorno de e-Salud. Dentro de las directrices de Continua Health Alliance, este interfaz se ha dividido en dos subinterfaces, incluyendo un nuevo elemento dirigido a servicios de back-end. El primer subinterfaz está fuera del alcance de las denominadas guías de diseño (Continua Design Guidelines). Para el segundo subinterfaz, se ha elegido el perfil IHE Cross-Enterprise Document Reliable Interchange (XDR) [28] y, sobre este, el documento HL7 Personal Health Monitoring (PHM) [29]. Estas propuestas de IHE y Continua Health Alliance no implican la definición de nuevos estándares ad-hoc. Al contrario, impulsan algunos perfiles y procedimientos de otros estándares, esencialmente HL7 (IHE-DEC impulsa mensajes HL7 v2.6 y Continua Health Alliance hace uso del perfil HL7-PHM). Debido a que la implementación propuesta está basada en X73PHD y UNE-EN/ISO13606, estos enfoques basados en HL7 no es la opción más adecuada. Además, el detalle y complejidad de HL7 ha llevado al diseño de una arquitectura WS apoyada por propuesta basada en XML. Este documento XML satisface los particulares requerimientos de las implementaciones X73PHD y UNE-EN/ISO13606 previamente detalladas con elevada especificidad para mantener los requisitos de interoperabilidad, seguridad, fiabilidad y privacidad al mismo tiempo que la simplicidad de aplicación. Un ejemplo de este XML se muestra a continuación: <collecter> <idCollecter>12345678</idCollecter> <soc> <deviceInfo> <extraDeviceInfo> <attribute> <id>MDC_ATTR_SYS_ID</id> <value>123456</value> </attribute> <attribute> <id>MDC_ATTR_ID_TYPE</id> <value>MDC_MASS_BODY_ACTUAL</value> </attribute> <attribute> <id>MDC_ATTR_VAL_BATT_CHARGE</id> <value>60</value> </attribute> <attribute> <id>MDC_ATTR_ID_MODEL</id> <value>DeviceManufacturer</value> Página | 90 <value>DeviceModel</value> </attribute> </extraDeviceInfo> </deviceInfo> <measurement> <timeStamp>15/04/2010-18:10:15</timeStamp> <attribute> <id>MDC_ATTR_ID_TYPE</id> <value>MDC_MASS_BODY_ACTUAL</value> </attribute> <attribute> <id>MDC_ATTR_NU_VAL_OBS_SIMP</id> <value>53.5</value> </attribute> <attribute> <id>MDC_ATTR_UNIT_CODE</id> <value>MDC_DIM_KILO_G</value> </attribute> </measurement> <contextInfo> <code/> <value/> </contextInfo> </soc> </collecter> Desde el punto de vista del manager, el XML diseñado tiene en cuenta los datos disponibles que son relevantes para su incorporación en la HCE para algunas especializaciones de dispositivos médicos, manteniendo una nomenclatura homogénea. Desde el punto de vista del servidor de HCE, se incluye la información necesaria para integrar los datos en la arquitectura UNE-EN/ISO13606. El contenido y estructura XML depende del fichero de configuración Config Profile (explicado en la sección anterior), obtenido del servidor de HCE, y configurado en colaboración con especialistas médicos y a partir de análisis previos de casos de uso [30]. Así, como se muestra en el ejemplo, el XML incluye información específica de los pacientes (idCollecter), sus dispositivos asociados (deviceInfo), el procedimiento de medida (timeStamp), y otra información técnica como tipo de dispositivo (mdc_ attr_id_type), modelo (mdc_attr_id_model), niveles de batería (mdc_attr_val_batt_charge), etc. Integración con el nivel de aplicación Finalmente, la implementación de la plataforma uz.Health se completa con el desarrollo de un interfaz gráfico sencillo, que permite al usuario utilizar todos los componentes y procesos descritos a lo largo del capítulo. Es imprescindible aclarar que este interfaz se ha construido únicamente a modo demostración y que presenta grandes carencias de usabilidad, robustez y accesibilidad, carencias que serán corregidas con la elaboración del futuro interfaz gráfico totalmente accesible que prepara el grupo de investigación. El interfaz gráfico ha sido desarrollado en GTK# y Mono y su utilización está orientada a plataformas Linux aunque la portabilidad a entornos Windows es casi inmediata. Pantalla de bienvenida La pantalla de bienvenida de uz.Health nos presenta un breve mensaje que indica los pasos que debe seguir el usuario para identificarse con el servidor de telemonitorización. Aunque todavía no está implementado, en un futuro se espera que se integre la identificación mediante DNI electrónico o biometría. Página | 91 Figura AIII.13. Pantalla de bienvenida Pantalla de inicialización de servicios Introducidos el DNI o número de identificación de usuario y contraseña, se produce la inicialización de los servicios: Figura AIII.14.Pantalla de inicialización de servicios Si la inicialización de cada uno de los servicios es correcta aparecerá una imagen verde al lado del servicio. Si se produce un error, aparece un símbolo rojo como el de la siguiente figura: Página | 92 Figura AIII.15.Pantalla de inicialización de servicios donde uno ha fallado Una vez terminada la inicialización de servicios se presenta al usuario la opción de volver al inicio (si algún servicio no se ha inicializado correctamente) o la opción se ir a la siguiente pantalla. Home de usuario Esta es la pantalla principal del usuario, conocido como Home. En ella se presentan las opciones más habituales para el usuario. A la izquierda aparece la zona de notificaciones donde se avisará al usuario si tiene algún correo electrónico, alguna tarea pendiente o un mensaje de chat. Debajo los botones para poder contactar con el centro de salud, consultar la historia clínica electrónica o realizar una medida manual que no esté planificada. En pestañas se distribuyen los servicios de usuario: Tareas y eventos, correo, mensajes instantáneos y los contactos. Figura AIII.16. Pantalla principal de usuario Página | 93 Tareas y eventos En la pestaña de tareas y eventos encontraremos las tareas programadas por el doctor para el usuario y las diferentes citas planificadas por el centro de salud. Seleccionando una tarea aparecerá la información extendida a la derecha junto con el botón “Realizar Tarea”. Haciendo clic sobre ese botón llegaremos a la pantalla del proceso de medida con todos los parámetros configurados como se describió en el anterior apartado. Figura AIII.17. Pantalla de Tareas y eventos Correo En la pestaña de correo se presenta un mini cliente de correo donde podremos consultar los correos enviados por los doctores u otros pacientes de nuestro centro de salud. También podremos responder a los correos o crear uno nuevo. Este servicio es aportado por Gmail. Figura AIII.18. Pantalla de Correo Página | 94 Mensajes instantáneos Esta pestaña funciona a modo de chat para realizar consultas a los doctores o chatear con otros pacientes. Este servicio es facilitado por Google Talk. Figura AIII.19. Pantalla de mensajes instantáneos Contactos En la pestaña de contactos encontraremos el contacto de doctores y otros usuarios con la información para escribirles un email o contactar con ellos de forma tradicional. Figura AIII.20. Pantalla de Contactos Página | 95 Una medida se puede realizar de forma planificada seleccionando la tarea desde la pestaña de “Tareas y Eventos” o puede realizarse la medida de forma manual. A continuación observamos el proceso de medida manual. Proceso de medida La pantalla de medida manual propone realizar la medida siguiendo 4 pasos: 1. 2. 3. 4. Seleccionar el tipo de dispositivo Seleccionar el protocolo de comunicaciones del dispositivo Seleccionar la tecnología de transporte usada por el dispositivo En caso de que sea necesario, configurar los parámetros de la tecnología de transporte. Figura AIII.21. Pantalla de configuración de medida En la Figura AIII.22 vemos un ejemplo de la medida con un pulsioxímetro X73 mediante HDP. En este caso hay que seleccionar el adaptador Bluetooth y el dispositivo médico que se va a utilizar. Página | 96 Figura AIII.22. Pantalla de configuración de medida llena de datos Finalmente, en la última pantalla observamos el proceso de medida. Figura AIII.23. Pantalla de medida final A la derecha, a modo de depuración, se ha colocado un analizador de protocolo pudiendo observar los diferentes estados por los que pasa el núcleo de comunicaciones. Una vez realizada la medida, haciendo clic en el botón “Enviar Medida” enviará la medida al servidor de telemonitorización mediante el XML generado siguiendo la descripción del apartado 3.4 de esta memoria. Si se inicia la medida desde la pestaña de “Tareas y eventos” se llega directamente a esta pantalla ya que la configuración del dispositivo es obtenida desde la propia tarea. Página | 97 Página | 98