48 lines
1.0 KiB
Python
48 lines
1.0 KiB
Python
|
from datetime import datetime
|
||
|
from dataclasses import dataclass, field
|
||
|
from enum import Enum
|
||
|
from typing import Dict, Optional
|
||
|
|
||
|
|
||
|
class DeviceMode(Enum):
|
||
|
"""
|
||
|
GPS device mode.
|
||
|
"""
|
||
|
|
||
|
NO_FIX = 1 # No fix
|
||
|
TWO_D = 2 # 2D fix
|
||
|
THREE_D = 3 # 3D fix (including altitude)
|
||
|
|
||
|
|
||
|
@dataclass
|
||
|
class GpsDevice:
|
||
|
"""
|
||
|
Models the GPS device.
|
||
|
"""
|
||
|
|
||
|
path: str
|
||
|
activated: Optional[datetime] = None
|
||
|
native: bool = False
|
||
|
baudrate: Optional[int] = None
|
||
|
parity: str = 'N'
|
||
|
stopbits: Optional[int] = None
|
||
|
cycle: Optional[float] = None
|
||
|
driver: Optional[str] = None
|
||
|
subtype: Optional[str] = None
|
||
|
mode: Optional[DeviceMode] = None
|
||
|
|
||
|
|
||
|
@dataclass
|
||
|
class GpsStatus:
|
||
|
"""
|
||
|
Models the status of the GPS service.
|
||
|
"""
|
||
|
|
||
|
latitude: Optional[float] = None
|
||
|
longitude: Optional[float] = None
|
||
|
altitude: Optional[float] = None
|
||
|
speed: Optional[float] = None
|
||
|
satellites_used: int = 0
|
||
|
devices: Dict[str, GpsDevice] = field(default_factory=dict)
|
||
|
timestamp: Optional[datetime] = None
|