Meshtastic-Apple/Meshtastic/Enums/PositionConfigEnums.swift
Blake McAnally 58da532d32 Extract the generated protobufs into its own Swift package
This change modifies the process for generating and integrating the Meshtastic protobufs into the client application.

* The generated Swift code is now in a local SPM package `MeshtasticProtobufs`
* An Xcode Workspace file `Meshtastic.xcworkspace` was created to more easily manage the new build targets.
* The code generation script for the protos was modified to generate the Swift code into the new location.
* The README.md was updated to reflect these changes.

NOTE: After merging this PR, do not open the project file `Meshtastic.xcodeproj`. You must use the workspace `Meshtastic.xcworkspace`

Extracting out the generated protobuf code into its own library enables several opportunities for the project. This is just a first step, but with some more modularization, a standalone Apple Watch app or other targets starts to become a little bit more achievable to implement.

After extracting the protobufs into a Swift package, I validate these changes by building and running the Meshtastic app to an iPhone 15 Pro Max, and tried changing some settings on a local node. I then messaged back and forth using two local nodes connected to two different iOS devices.
2024-06-28 11:11:01 -05:00

132 lines
3.1 KiB
Swift

//
// GpsFormats.swift
// Meshtastic
//
// Copyright(c) Garth Vander Houwen 8/20/22.
//
import Foundation
import MeshtasticProtobufs
enum GpsFormats: Int, CaseIterable, Identifiable {
case gpsFormatDec = 0
case gpsFormatDms = 1
case gpsFormatUtm = 2
case gpsFormatMgrs = 3
case gpsFormatOlc = 4
case gpsFormatOsgr = 5
var id: Int { self.rawValue }
var description: String {
switch self {
case .gpsFormatDec:
return "gpsformat.dec".localized
case .gpsFormatDms:
return "gpsformat.dms".localized
case .gpsFormatUtm:
return "gpsformat.utm".localized
case .gpsFormatMgrs:
return "gpsformat.mgrs".localized
case .gpsFormatOlc:
return "gpsformat.olc".localized
case .gpsFormatOsgr:
return "gpsformat.osgr".localized
}
}
func protoEnumValue() -> Config.DisplayConfig.GpsCoordinateFormat {
switch self {
case .gpsFormatDec:
return Config.DisplayConfig.GpsCoordinateFormat.dec
case .gpsFormatDms:
return Config.DisplayConfig.GpsCoordinateFormat.dms
case .gpsFormatUtm:
return Config.DisplayConfig.GpsCoordinateFormat.utm
case .gpsFormatMgrs:
return Config.DisplayConfig.GpsCoordinateFormat.mgrs
case .gpsFormatOlc:
return Config.DisplayConfig.GpsCoordinateFormat.olc
case .gpsFormatOsgr:
return Config.DisplayConfig.GpsCoordinateFormat.osgr
}
}
}
enum GpsUpdateIntervals: Int, CaseIterable, Identifiable {
case thirtySeconds = 30
case oneMinute = 60
case twoMinutes = 120
case fiveMinutes = 300
case tenMinutes = 600
case fifteenMinutes = 900
case thirtyMinutes = 1800
case oneHour = 3600
case sixHours = 21600
case twelveHours = 43200
case twentyFourHours = 86400
case maxInt32 = 2147483647
var id: Int { self.rawValue }
var description: String {
switch self {
case .thirtySeconds:
return "interval.thirty.seconds".localized
case .oneMinute:
return "interval.one.minute".localized
case .twoMinutes:
return "interval.two.minutes".localized
case .fiveMinutes:
return "interval.five.minutes".localized
case .tenMinutes:
return "interval.ten.minutes".localized
case .fifteenMinutes:
return "interval.fifteen.minutes".localized
case .thirtyMinutes:
return "interval.thirty.minutes".localized
case .oneHour:
return "interval.one.hour".localized
case .sixHours:
return "interval.six.hours".localized
case .twelveHours:
return "interval.twelve.hours".localized
case .twentyFourHours:
return "interval.twentyfour.hours".localized
case .maxInt32:
return "on.boot".localized
}
}
}
enum GpsMode: Int, CaseIterable, Equatable {
case enabled = 1
case disabled = 0
case notPresent = 2
var id: Int { self.rawValue }
var description: String {
switch self {
case .disabled:
return "gpsmode.disabled".localized
case .enabled:
return "gpsmode.enabled".localized
case .notPresent:
return "gpsmode.notPresent".localized
}
}
func protoEnumValue() -> Config.PositionConfig.GpsMode {
switch self {
case .enabled:
return Config.PositionConfig.GpsMode.enabled
case .disabled:
return Config.PositionConfig.GpsMode.disabled
case .notPresent:
return Config.PositionConfig.GpsMode.notPresent
}
}
}