plugmate-virtual-sensor-access.ino

TrustKernel PlugMate : Secure Miniature USB-C Computer running PlugOS · File : plugmate-virtual-sensor-access.ino · Language : Kotlin · Use case : Accéder aux données GPS virtuelles fournies par l'hôte via l'API Android Location.

Example of using the Android Location API to read coordinates transmitted by the host, as PlugMate has no physical GPS.

PlugMate virtualizes peripherals like GPS. This code uses standard Android APIs. The host must have permission to share its location with the PlugMate client. Data arrives via the secure tunnel. No physical location permission is required on the card, but the app must request ACCESS_FINE_LOCATION permission at the standard Android UI level.

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)
    }
}

← Back to the board