Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions GroundSdk.podspec
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@

Pod::Spec.new do |s|
s.name = "GroundSdk"
s.version = "1.8.0"
s.version = "1.8.1"
s.summary = "Parrot Drone SDK"
s.homepage = "https://developer.parrot.com"
s.license = "{ :type => 'BSD 3-Clause License', :file => 'LICENSE' }"
s.author = 'Parrot Drone SAS'
s.source = { :git => 'https://github.com/Parrot-Developers/pod_groundsdk.git', :tag => "1.8.0" }
s.source = { :git => 'https://github.com/Parrot-Developers/pod_groundsdk.git', :tag => "1.8.1" }
s.platform = :ios
s.ios.deployment_target = '10.0'
s.source_files = 'GroundSdk/**/*.{swift,h,m}'
s.resources = 'GroundSdk/**/*.{vsh,fsh,txt,png}'
s.dependency 'SdkCore', '1.8.0'
s.dependency 'SdkCore', '1.8.1'
s.public_header_files = ["GroundSdk/GroundSdk.h"]
s.swift_version = '4.2'
s.pod_target_xcconfig = {'SWIFT_VERSION' => '4.2'}
Expand Down
4 changes: 2 additions & 2 deletions GroundSdk/Device/DeviceConnector.swift
Original file line number Diff line number Diff line change
Expand Up @@ -62,12 +62,12 @@ extension DeviceConnectorType {
@objc(GSDeviceConnectorTechnology)
public enum DeviceConnectorTechnology: Int, CustomStringConvertible {

/// Connect using Bluetooth Low Energy.
case ble
/// Connect using Wifi.
case wifi
/// Connect using USB.
case usb
/// Connect using Bluetooth Low Energy.
case ble

/// Debug description.
public var description: String {
Expand Down
9 changes: 4 additions & 5 deletions GroundSdk/Device/DeviceModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -100,11 +100,10 @@ public enum DeviceModel: CustomStringConvertible {
}

/// List of devices that can be connectable through usb.
private static var usbDevices: Set<DeviceModel> = [.rc(.skyCtrl3), .rc(.skyCtrlUA)]
private static var usbDevices: Set<DeviceModel> = Set(RemoteControl.Model.allCases.map(DeviceModel.rc))

/// List of devices that can be connectable through wifi.
private static var wifiDevices: Set<DeviceModel> = [.drone(.anafi4k), .drone(.anafiThermal), .drone(.anafiUa),
.drone(.anafiUsa)]
private static var wifiDevices: Set<DeviceModel> = Set(Drone.Model.allCases.map(DeviceModel.drone))

/// List of devices that can be connectable through BLE.
private static var bleDevices: Set<DeviceModel> = []
Expand Down Expand Up @@ -251,7 +250,7 @@ public class GSDeviceModel: NSObject {

/// All known device models.
public static var allDevices: Set<GSDeviceModel> {
return Set(DeviceModel.allDevices.map { GSDeviceModel(deviceModel: $0) })
return Set(DeviceModel.allDevices.map(GSDeviceModel.init))
}

/// Filters device models that support a given technology.
Expand All @@ -265,7 +264,7 @@ public class GSDeviceModel: NSObject {

let extractedModels = Set(models.map { $0.deviceModel })
let supporting = DeviceModel.supportingTechnology(models: extractedModels, technology: technology)
return Set(supporting.map { GSDeviceModel(deviceModel: $0) })
return Set(supporting.map(GSDeviceModel.init))
}

/// Retrieves a device model by its name.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ public class SkyCtrl3ButtonsMappingEntry: SkyCtrl3MappingEntry {
/// Swift must use the function
/// `init(droneModel: Drone.Model, action: ButtonsMappableAction, buttonEvents: Set<SkyCtrl3ButtonEvent>)`
public convenience init(droneModel: Drone.Model, action: ButtonsMappableAction, buttonEventsAsInt: Set<Int>) {
let buttonEvents = Set(buttonEventsAsInt.map({ SkyCtrl3ButtonEvent(rawValue: $0)! }))
let buttonEvents = Set(buttonEventsAsInt.compactMap(SkyCtrl3ButtonEvent.init))
self.init(droneModel: droneModel, action: action, buttonEvents: buttonEvents)
}

Expand Down Expand Up @@ -196,7 +196,7 @@ public class SkyCtrl3AxisMappingEntry: SkyCtrl3MappingEntry {
public convenience init(
droneModel: Drone.Model, action: AxisMappableAction, axisEvent: SkyCtrl3AxisEvent,
buttonEventsAsInt: Set<Int>) {
let buttonEvents = Set(buttonEventsAsInt.map({ SkyCtrl3ButtonEvent(rawValue: $0)! }))
let buttonEvents = Set(buttonEventsAsInt.compactMap(SkyCtrl3ButtonEvent.init))
self.init(droneModel: droneModel, action: action, axisEvent: axisEvent, buttonEvents: buttonEvents)
}

Expand Down
2 changes: 1 addition & 1 deletion GroundSdk/GroundSdk.swift
Original file line number Diff line number Diff line change
Expand Up @@ -377,7 +377,7 @@ public extension GroundSdk {
func replayRef(source: FileReplaySource,
observer: @escaping (_ stream: FileReplay?) -> Void) -> GSFileReplayRef? {
let ref: Ref<FileReplay>? = session.newFileReplay(source: source, observer: observer)
return ref != nil ? GSFileReplayRef(ref: ref!) : nil
return ref.map(GSFileReplayRef.init)
}
}

Expand Down
2 changes: 1 addition & 1 deletion GroundSdk/GroundSdkConfig.swift
Original file line number Diff line number Diff line change
Expand Up @@ -297,7 +297,7 @@ public class GroundSdkConfig: NSObject {
@objc(supportedDevices)
public var gsSupportedDevices: Set<GSDeviceModel> {
get {
return Set(supportedDevices.map { GSDeviceModel(deviceModel: $0) })
return Set(supportedDevices.map(GSDeviceModel.init))
}
set(newGsSupportedDevices) {
supportedDevices = Set(newGsSupportedDevices.map { $0.deviceModel })
Expand Down
6 changes: 1 addition & 5 deletions GroundSdk/Internal/Device/DeviceConnectorCore.swift
Original file line number Diff line number Diff line change
Expand Up @@ -139,10 +139,6 @@ extension DeviceConnectorTechnology {
/// - Parameter technology: the technology to compare to
/// - Returns: `true` if the technology is strictly better
func betterThan(_ technology: DeviceConnectorTechnology) -> Bool {
let ranks: [DeviceConnectorTechnology: Int] = [
.ble: 0,
.wifi: 1,
.usb: 2]
return ranks[self]! > ranks[technology]!
return self.rawValue > technology.rawValue
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -336,11 +336,9 @@ class CameraPhotoSettingsCore: CameraPhotoSettings, CustomDebugStringConvertible
return
}

let gpslapseCaptureIntervalValueClamped = gpslapseCaptureIntervalValue != nil ?
supportedGpslapseIntervals.clamp(gpslapseCaptureIntervalValue!) : nil
let gpslapseCaptureIntervalValueClamped = gpslapseCaptureIntervalValue.map(supportedGpslapseIntervals.clamp)

let timelapseCaptureIntervalValueClamped = timelapseCaptureIntervalValue != nil ?
supportedTimelapseIntervals.clamp(timelapseCaptureIntervalValue!) : nil
let timelapseCaptureIntervalValueClamped = timelapseCaptureIntervalValue.map(supportedTimelapseIntervals.clamp)

if backend(mode, format, fileFormat, burstValue, bracketingValue, gpslapseCaptureIntervalValueClamped,
timelapseCaptureIntervalValueClamped) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -213,20 +213,22 @@ class CameraStyleSettingsCore: CameraStyleSettings, CustomDebugStringConvertible
/// - sharpness: requested sharpness
/// - Returns: true if settings have been changed, false else
private func set(saturation: Int? = nil, contrast: Int? = nil, sharpness: Int? = nil) -> Bool {
let oldContrast: (min: Int, value: Int, max: Int)? = contrast != nil ?
(min: _contrast.min, value: _contrast.value, max: _contrast.max) : nil
let oldSharpness: (min: Int, value: Int, max: Int)? = sharpness != nil ?
(min: _sharpness.min, value: _sharpness.value, max: _sharpness.max) : nil
let oldSaturation: (min: Int, value: Int, max: Int)? = saturation != nil ?
(min: _saturation.min, value: _saturation.value, max: _saturation.max) : nil

let oldContrast: (min: Int, value: Int, max: Int)? = contrast
.map { _ in (min: _contrast.min, value: _contrast.value, max: _contrast.max) }
let oldSharpness: (min: Int, value: Int, max: Int)? = sharpness
.map { _ in (min: _sharpness.min, value: _sharpness.value, max: _sharpness.max) }
let oldSaturation: (min: Int, value: Int, max: Int)? = saturation
.map { _ in (min: _saturation.min, value: _saturation.value, max: _saturation.max) }

if changeConfigBackend(saturation ?? _saturation.value, contrast ?? _contrast.value,
sharpness ?? _sharpness.value) {
timeout.schedule { [weak self] in

if let `self` = self {
let saturationUpdated = oldSaturation != nil ? self.update(saturation: oldSaturation!) : false
let contrastUpdated = oldContrast != nil ? self.update(contrast: oldContrast!) : false
let sharpnessUpdated = oldSharpness != nil ? self.update(sharpness: oldSharpness!) : false
let saturationUpdated = oldSaturation.map(self.update(saturation:)) ?? false
let contrastUpdated = oldContrast.map(self.update(contrast:)) ?? false
let sharpnessUpdated = oldSharpness.map(self.update(sharpness:)) ?? false
if saturationUpdated || contrastUpdated || sharpnessUpdated {
self.didChangeDelegate.userDidChangeSetting()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,15 +72,15 @@ class MediaListRefCore: Ref<[MediaItem]> {

// weak self in case backend call callback after cancelling request
if let `self` = self {
`self`.request = nil
self.request = nil
// copy user data into the new items
if let currentList = self.value as? [MediaItemCore] {
for media in medias {
media.userData = currentList.first(where: {return $0.uid == media.uid})?.userData
}
}
// update the ref with the new list
`self`.update(newValue: medias)
self.update(newValue: medias)
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -201,6 +201,6 @@ extension StreamServerCore: GSStreamServer {

public func replay(source: MediaReplaySource, observer: @escaping (MediaReplay?) -> Void) -> GSMediaReplayRef? {
let ref: Ref<MediaReplay>? = replay(source: source, observer: observer)
return ref != nil ? GSMediaReplayRef(ref: ref!) : nil
return ref.map(GSMediaReplayRef.init)
}
}
8 changes: 6 additions & 2 deletions GroundSdk/Internal/Engine/ActivationEngine.swift
Original file line number Diff line number Diff line change
Expand Up @@ -174,9 +174,13 @@ class ActivationEngine: EngineBaseCore {
/// - Returns: a list of all devices that needs to be registered.
private func getDevicesToRegister() -> [DeviceRegisterer.Info] {
var devices = [DeviceRegisterer.Info]()
let dronesToBeRegistered = droneStore.getDevices().filter({ deviceNeedToBeRegistered($0) })
let dronesToBeRegistered = droneStore
.getDevices()
.filter(deviceNeedToBeRegistered)
.map { DeviceRegisterer.Info(uid: $0.uid, firmware: $0.firmwareVersionHolder.version.description) }
let rcsToBeRegistered = rcStore.getDevices().filter({ deviceNeedToBeRegistered($0) })
let rcsToBeRegistered = rcStore
.getDevices()
.filter(deviceNeedToBeRegistered)
.map { DeviceRegisterer.Info(uid: $0.uid, firmware: $0.firmwareVersionHolder.version.description) }
devices.append(contentsOf: dronesToBeRegistered)
devices.append(contentsOf: rcsToBeRegistered)
Expand Down
9 changes: 5 additions & 4 deletions GroundSdk/Internal/Engine/Firmware/UpdateRestApi.swift
Original file line number Diff line number Diff line change
Expand Up @@ -91,8 +91,9 @@ class UpdateRestApi {
do {
let requestResult = try decoder.decode(ListRequestResponse.self, from: data)
// transform the json object into a `FirmwareStoreEntry` dict indexed by `FirmwareIdentifier`
let firmwares = requestResult.firmwares.map { FirmwareStoreEntry.from(httpFirmware: $0) }
.compactMap { $0 }.reduce([FirmwareIdentifier: FirmwareStoreEntry]()) { dict, value in
let firmwares = requestResult.firmwares
.compactMap(FirmwareStoreEntry.from)
.reduce([FirmwareIdentifier: FirmwareStoreEntry]()) { dict, value in
var dict = dict
dict[value.firmware.firmwareIdentifier] = value
return dict
Expand All @@ -103,7 +104,7 @@ class UpdateRestApi {
if let model = DeviceModel.from(internalIdHexStr: httpBlacklistedVersions.product) {

let blacklistedVersionsForThisModel = httpBlacklistedVersions.versions
.map { FirmwareVersion.parse(versionStr: $0) }.compactMap { $0 }
.compactMap(FirmwareVersion.parse)
blacklistedVersions[model] = Set(blacklistedVersionsForThisModel)
}
}
Expand Down Expand Up @@ -216,7 +217,7 @@ fileprivate extension FirmwareStoreEntry {
/// - Returns: a firmware store entry if the http firmware info are parsable.
static func from(httpFirmware: UpdateRestApi.HttpFirmwareInfo) -> FirmwareStoreEntry? {
// for now we simply skip unknown flags, as we do not handle all of them
let attributes = httpFirmware.flags?.map { FirmwareAttribute.from(httpAttribute: $0) }.compactMap { $0 } ?? []
let attributes = httpFirmware.flags?.compactMap(FirmwareAttribute.from) ?? []

if let model = DeviceModel.from(internalIdHexStr: httpFirmware.product),
let version = FirmwareVersion.parse(versionStr: httpFirmware.version),
Expand Down
10 changes: 6 additions & 4 deletions GroundSdk/Internal/Stream/GlRenderSinkCore.swift
Original file line number Diff line number Diff line change
Expand Up @@ -167,15 +167,17 @@ public class GlRenderSinkCore: SinkCore, GlRenderSink {
return false
}
let fillMode = fillModeFrom(scaleType: scaleType, paddingFill: paddingFill)
let textureWidth = textureLoader != nil ? textureLoader!.textureSpec.width : 0
let textureDarWidth = textureLoader != nil ? textureLoader!.textureSpec.ratioNumerator : 0
let textureDarHeight = textureLoader != nil ? textureLoader!.textureSpec.ratioDenominator : 0

let textureWidth = textureLoader.map { $0.textureSpec.width } ?? 0
let textureDarWidth = textureLoader.map { $0.textureSpec.ratioNumerator } ?? 0
let textureDarHeight = textureLoader.map { $0.textureSpec.ratioDenominator } ?? 0

sdkCoreRenderer = stream.startRenderer(renderZone: renderZone, fillMode: fillMode,
zebrasEnabled: zebrasEnabled, zebrasThreshold: Float(zebrasThreshold),
textureWidth: Int32(textureWidth),
textureDarWidth: Int32(textureDarWidth),
textureDarHeight: Int32(textureDarHeight),
textureLoaderlistener: textureLoader != nil ? self : nil,
textureLoaderlistener: textureLoader.map { _ in self },
histogramsEnabled: histogramsEnabled, overlayListener: self,
listener: self )
return sdkCoreRenderer != nil
Expand Down