plugmate-virtual-sensor-access.ino

TrustKernel PlugMate : Ordinateur miniature USB-C sécurisé sous PlugOS · Fichier : plugmate-virtual-sensor-access.ino · Langage : Kotlin · Usage : Accéder aux données GPS virtuelles fournies par l'hôte via l'API Android Location.

Exemple d'utilisation de l'API de localisation Android pour lire les coordonnées transmises par l'hôte, car le PlugMate n'a pas de GPS physique.

Le PlugMate virtualise les périphériques comme le GPS. Ce code utilise les API standards Android. L'hôte doit avoir la permission de partager sa position avec le client PlugMate. Les données arrivent via le tunnel sécurisé. Aucune permission de localisation physique n'est requise sur la carte, mais l'application doit demander la permission ACCESS_FINE_LOCATION au niveau de l'UI Android standard.

plugmate-virtual-sensor-access.ino

package com.trustkernel.plugmate.demo

import android.content.Context
import android.location.Location
import android.location.LocationListener
import android.location.LocationManager
import android.os.Bundle
import android.util.Log

/**
 * Accès aux capteurs virtuels.
 * Le PlugMate ne possède pas de GPS physique. Les données sont
 * transmises depuis l'hôte via le canal USB-C chiffré.
 */
class VirtualLocationListener(context: Context) : LocationListener {
    private val locationManager = context.getSystemService(Context.LOCATION_SERVICE) as LocationManager

    init {
        try {
            // Demande des mises à jour de localisation
            // Le PlugMate reçoit des coordonnées simulées ou réelles de l'hôte
            locationManager.requestLocationUpdates(
                LocationManager.GPS_PROVIDER,
                1000L, // minTime ms
                1.0f,  // minDistance m
                this
            )
        } catch (e: SecurityException) {
            Log.e("PlugMate", "Permission de localisation manquante", e)
        }
    }

    override fun onLocationChanged(location: Location) {
        Log.d("PlugMate", "GPS Virtuel: Lat=${location.latitude}, Lon=${location.longitude}")
        // Traiter la position
    }

    override fun onProviderEnabled(provider: String) {}
    override fun onProviderDisabled(provider: String) {}
    override fun onStatusChanged(provider: String?, status: Int, extras: Bundle?) {}
    
    fun stop() {
        locationManager.removeUpdates(this)
    }
}

← Retour à la fiche