145 lines
4.2 KiB
TypeScript
145 lines
4.2 KiB
TypeScript
import type { PluginListenerHandle } from '@capacitor/core';
|
|
|
|
// export interface SatelliteStatus {
|
|
// satellitesInView: number;
|
|
// usedInFix: number;
|
|
// constellationCounts: { [key: string]: number };
|
|
// }
|
|
|
|
// export interface WifiAp {
|
|
// ssid: string;
|
|
// bssid: string;
|
|
// rssi: number;
|
|
// distance?: number;
|
|
// }
|
|
|
|
// export interface WifiScanResult {
|
|
// apCount: number;
|
|
// aps: WifiAp[];
|
|
// }
|
|
|
|
// export interface ImuData {
|
|
// accelX: number;
|
|
// accelY: number;
|
|
// accelZ: number;
|
|
// gyroX: number;
|
|
// gyroY: number;
|
|
// gyroZ: number;
|
|
// speed?: number;
|
|
// acceleration?: number;
|
|
// directionRad?: number;
|
|
// }
|
|
|
|
// export interface GpsData {
|
|
// latitude: number;
|
|
// longitude: number;
|
|
// accuracy: number;
|
|
// satellitesInView?: number;
|
|
// usedInFix?: number;
|
|
// constellationCounts?: { [key: string]: number };
|
|
// }
|
|
|
|
// export interface PositioningData {
|
|
// source: 'GNSS' | 'WIFI' | 'FUSED' | 'MOCK';
|
|
// timestamp: number;
|
|
// latitude: number;
|
|
// longitude: number;
|
|
// accuracy: number;
|
|
|
|
// gnssData?: SatelliteStatus;
|
|
// wifiData?: WifiAp[];
|
|
// imuData?: ImuData;
|
|
// }
|
|
|
|
export interface PositioningData {
|
|
source: 'GNSS' | 'WIFI' | 'FUSED' | 'MOCK';
|
|
timestamp: number;
|
|
latitude: number;
|
|
longitude: number;
|
|
accuracy: number;
|
|
speed: number;
|
|
acceleration: number;
|
|
directionRad: number;
|
|
isMocked: boolean;
|
|
mode: 'normal' | 'driving';
|
|
predicted?: boolean;
|
|
}
|
|
|
|
export interface SatelliteStatus {
|
|
satellitesInView: number;
|
|
usedInFix: number;
|
|
constellationCounts: { [key: string]: number };
|
|
}
|
|
|
|
export interface DumonGeoOptions {
|
|
distanceThresholdMeters?: number;
|
|
speedChangeThreshold?: number;
|
|
directionChangeThreshold?: number;
|
|
emitDebounceMs?: number;
|
|
drivingEmitIntervalMs?: number;
|
|
wifiScanIntervalMs?: number;
|
|
enableWifiRtt?: boolean;
|
|
enableLogging?: boolean;
|
|
enableForwardPrediction?: boolean;
|
|
maxPredictionSeconds?: number;
|
|
emitGnssStatus?: boolean;
|
|
suppressMockedUpdates?: boolean;
|
|
keepScreenOn?: boolean;
|
|
backgroundPollingIntervalMs?: number; // Android background polling interval
|
|
backgroundPostMinDistanceMeters?: number; // Android background min distance to post
|
|
backgroundPostMinAccuracyMeters?: number; // Android background min acceptable accuracy for POST (meters)
|
|
backgroundMinPostIntervalMs?: number; // Android background minimum interval between POST attempts
|
|
}
|
|
|
|
export interface PermissionStatus {
|
|
location: 'granted' | 'denied';
|
|
wifi: 'granted' | 'denied';
|
|
}
|
|
|
|
export interface DumonGeolocationPlugin {
|
|
startPositioning(): Promise<void>;
|
|
stopPositioning(): Promise<void>;
|
|
getLatestPosition(): Promise<PositioningData>;
|
|
checkAndRequestPermissions(): Promise<PermissionStatus>;
|
|
setOptions(options: DumonGeoOptions): Promise<void>;
|
|
getGnssStatus(): Promise<SatelliteStatus | null>;
|
|
getLocationServicesStatus(): Promise<{ gpsEnabled: boolean; networkEnabled: boolean }>;
|
|
// Background tracking (Android)
|
|
startBackgroundTracking(options?: {
|
|
title?: string;
|
|
text?: string;
|
|
channelId?: string;
|
|
channelName?: string;
|
|
postUrl?: string; // optional: service will POST latest fixes here as JSON
|
|
}): Promise<void>;
|
|
stopBackgroundTracking(): Promise<void>;
|
|
isBackgroundTrackingActive(): Promise<{ active: boolean }>;
|
|
getBackgroundLatestPosition(): Promise<PositioningData | null>;
|
|
openBackgroundPermissionSettings(): Promise<void>;
|
|
openNotificationPermissionSettings(): Promise<void>;
|
|
// Auth token management for background posting
|
|
setAuthTokens(tokens: { accessToken: string; refreshToken: string }): Promise<void>;
|
|
clearAuthTokens(): Promise<void>;
|
|
getAuthState(): Promise<{ present: boolean }>;
|
|
setBackgroundPostUrl(options: { url?: string }): Promise<void>;
|
|
getBackgroundPostUrl(): Promise<{ url: string | null }>;
|
|
|
|
configureEdgeToEdge(options: {
|
|
bgColor: string;
|
|
style: 'DARK' | 'LIGHT';
|
|
overlay?: boolean;
|
|
}): Promise<void>;
|
|
|
|
setGpsMode(options: { mode: 'normal' | 'driving' }): Promise<void>;
|
|
|
|
addListener(
|
|
eventName: 'onPositionUpdate',
|
|
listenerFunc: (data: PositioningData) => void
|
|
): PluginListenerHandle;
|
|
|
|
addListener(
|
|
eventName: 'onGnssStatus',
|
|
listenerFunc: (data: SatelliteStatus) => void
|
|
): PluginListenerHandle;
|
|
}
|