dumon-geolocation/src/definitions.ts
2025-10-14 21:34:17 +08:00

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