CsvDataSimulator

class CsvDataSimulator(val context: Context)

Simula datos de sensores de salud leyendo desde un archivo CSV.

Esta clase está diseñada para desarrollo, pruebas y demostraciones, permitiendo que la aplicación funcione como si estuviera conectada a un sensor biométrico real sin necesidad de hardware físico. Lee puntos de datos biométricos de un archivo CSV especificado y los emite a lo largo del tiempo, imitando un flujo de datos en vivo.

El simulador busca el archivo de simulación (simulacion.csv) en las siguientes ubicaciones, en orden de prioridad:

  1. Directorio de almacenamiento interno de la app.

  2. Directorio de almacenamiento externo de la app.

  3. La carpeta pública "Downloads".

  4. La carpeta assets de la app (como último recurso).

Formato del archivo CSV

El archivo CSV debe contener una fila de encabezado y filas de datos posteriores. El encabezado debe incluir las siguientes columnas (el orden no es importante, pero los nombres no distinguen mayúsculas y minúsculas): timestamp, heartRate, hrStatus, skinTemp, ambientTemp, accelX, accelY, accelZ, steps.

Se puede incluir una columna opcional ibi para datos de Variabilidad de la Frecuencia Cardíaca (HRV).

Ejemplo:

timestamp,heartRate,hrStatus,skinTemp,ambientTemp,accelX,accelY,accelZ,steps,ibi
1700000000000,72,0,36.5,25.0,0.1,-0.2,-9.8,100,833;820;845

Constructors

Link copied to clipboard
constructor(context: Context)

Types

Link copied to clipboard
object Companion
Link copied to clipboard
data class LoopInfo(val currentLoop: Int, val totalLoops: Int)
Link copied to clipboard
data class SimulatedDataPoint(val timestamp: Long, val heartRate: Int, val hrStatus: Int, val skinTemp: Float, val ambientTemp: Float, val accelX: Float, val accelY: Float, val accelZ: Float, val steps: Long, val ibiList: List<Int> = emptyList(), val isOnBody: Boolean = true)

Representa un único punto de datos en el tiempo, extraído de una fila del archivo CSV de simulación.

Properties

Link copied to clipboard
private val _isPlaying: <Error class: unknown class>

Indica si la simulación está reproduciéndose

Link copied to clipboard
private val _isSimulationMode: <Error class: unknown class>

Indica si el modo simulación está activo

Link copied to clipboard
private val _loopInfo: <Error class: unknown class>

Estado del loop actual

Link copied to clipboard
private val _simulationProgress: <Error class: unknown class>

Progreso de la simulación (0.0 a 1.0)

Link copied to clipboard
private val context: Context
Link copied to clipboard
private var currentIndex: Int

Índice actual en la lista de simulación

Link copied to clipboard
val isPlaying: StateFlow<Boolean>
Link copied to clipboard
val isSimulationMode: StateFlow<Boolean>
Link copied to clipboard
private var loopCount: Int

Contador de loops completados

Link copied to clipboard
Link copied to clipboard

Modo de loop (true = repetir al finalizar)

Link copied to clipboard

Número máximo de loops (null = infinito)

Link copied to clipboard

Callback para datos del acelerómetro

Link copied to clipboard

Callback para detección on/off body

Link copied to clipboard

Callback para datos de frecuencia cardíaca

Link copied to clipboard

Callback para cuando se completa un loop

Link copied to clipboard

Callback para conteo de pasos

Link copied to clipboard

Callback para datos de temperatura

Link copied to clipboard

Velocidad de reproducción (1.0 = normal, 2.0 = doble velocidad)

Link copied to clipboard

Lista de puntos de datos cargados del CSV

Link copied to clipboard
private var simulationJob: Job?

Job de la corrutina de simulación

Link copied to clipboard
val simulationProgress: StateFlow<Float>
Link copied to clipboard
private val simulationScope: <Error class: unknown class>

Scope para operaciones asíncronas

Functions

Link copied to clipboard

Calcula la duración total de la simulación en segundos.

Link copied to clipboard
fun cleanup()

Detiene la simulación y libera los recursos.

Link copied to clipboard

Lee datos de sensor simulados desde un archivo CSV línea por línea y emite cada línea como un String. La función simula un flujo de datos en tiempo real introduciendo un retardo entre las emisiones. Se asegura de que el recurso (el archivo CSV) se cierre correctamente después de su consumo.

Link copied to clipboard
private fun generateIBIFromHR(heartRate: Int): List<Int>

Genera una lista de valores sintéticos de Intervalo Entre Latidos (IBI) basados en una frecuencia cardíaca (HR) dada.

Link copied to clipboard

Obtiene el número total de loops (repeticiones) que se han completado durante la sesión de simulación actual.

Link copied to clipboard

Calcula y devuelve estadísticas básicas para los datos CSV cargados en formato de cadena.

Link copied to clipboard

Obtiene la duración total estimada de la simulación en milisegundos.

Link copied to clipboard

Inicializa el simulador buscando y cargando datos desde un archivo CSV.

Link copied to clipboard
private fun loadFromAssets(): Boolean

Intenta cargar los datos de simulación desde un archivo CSV ubicado en la carpeta de assets de la aplicación.

Link copied to clipboard
private fun loadSimulationData(file: File): Boolean

Carga y analiza los datos de simulación desde un archivo CSV.

Link copied to clipboard

Analiza una sola línea de un archivo CSV.

Link copied to clipboard
private fun parseIBIList(ibiString: String): List<Int>

Analiza una representación en cadena de texto (String) de una lista de IBI (Intervalo Entre Latidos) y la convierte en una lista de enteros (List).

Link copied to clipboard

Pausa la simulación de datos en curso.

Link copied to clipboard
private fun reloadSimulationData()

Recarga los datos del archivo CSV. Útil si el archivo puede haber cambiado durante la ejecución.

Link copied to clipboard

Reinicia los contadores relacionados con el modo de bucle (loop).

Link copied to clipboard
fun resumeSimulation(playbackRate: Long = DEFAULT_PLAYBACK_RATE)

Reanuda una simulación de datos que fue pausada.

Link copied to clipboard
fun seekTo(index: Int)

Salta la simulación a un índice específico en la lista de datos.

Link copied to clipboard

Determina si los datos deben recargarse en cada loop. Útil si el archivo CSV puede cambiar durante la ejecución.

Link copied to clipboard
fun startSimulation(playbackRate: Long = DEFAULT_PLAYBACK_RATE)
Link copied to clipboard

Detiene la simulación de datos en curso.

Link copied to clipboard
private fun validateCSVHeader(header: String?): Boolean

Valida la cabecera (header) de un archivo CSV.