Neopixels: Fixed the number of bytes sent for animations. It was hardcoded and now depends on the board.

Updated for Swift 5.2 and fixed new warnings about tuples
This commit is contained in:
Antonio 2020-05-07 20:40:03 +02:00
parent 5125b08706
commit c089e932da
9 changed files with 178 additions and 148 deletions

View file

@ -75,6 +75,7 @@
A94AC1462363A59B0062AB11 /* TemperatureViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A94AC1452363A59B0062AB11 /* TemperatureViewController.swift */; };
A94AC1482363A7BD0062AB11 /* TemperaturePanelViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A94AC1472363A7BD0062AB11 /* TemperaturePanelViewController.swift */; };
A94AC14E2364A82B0062AB11 /* AdafruitBoard.swift in Sources */ = {isa = PBXBuildFile; fileRef = A94AC14D2364A82A0062AB11 /* AdafruitBoard.swift */; };
A9573B372464891D00E15D28 /* AdafruitBoard+FlashNeopixels.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9573B362464891D00E15D28 /* AdafruitBoard+FlashNeopixels.swift */; };
A958E77C238AFA4E006A225A /* BlePeripheral+AdafruitNeoPixels.swift in Sources */ = {isa = PBXBuildFile; fileRef = A958E77B238AFA4E006A225A /* BlePeripheral+AdafruitNeoPixels.swift */; };
A958E77E238B7457006A225A /* NormalBrightnessSliderControl.swift in Sources */ = {isa = PBXBuildFile; fileRef = A958E77D238B7457006A225A /* NormalBrightnessSliderControl.swift */; };
A958E780238B75D9006A225A /* NormalBrightnessColorPickerController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A958E77F238B75D9006A225A /* NormalBrightnessColorPickerController.swift */; };
@ -339,6 +340,7 @@
A94AC1452363A59B0062AB11 /* TemperatureViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TemperatureViewController.swift; sourceTree = "<group>"; };
A94AC1472363A7BD0062AB11 /* TemperaturePanelViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TemperaturePanelViewController.swift; sourceTree = "<group>"; };
A94AC14D2364A82A0062AB11 /* AdafruitBoard.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdafruitBoard.swift; sourceTree = "<group>"; };
A9573B362464891D00E15D28 /* AdafruitBoard+FlashNeopixels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AdafruitBoard+FlashNeopixels.swift"; sourceTree = "<group>"; };
A958E77923821EF8006A225A /* BlePeripheral+AdafruitToneGenerator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "BlePeripheral+AdafruitToneGenerator.swift"; sourceTree = "<group>"; };
A958E77B238AFA4E006A225A /* BlePeripheral+AdafruitNeoPixels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "BlePeripheral+AdafruitNeoPixels.swift"; sourceTree = "<group>"; };
A958E77D238B7457006A225A /* NormalBrightnessSliderControl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NormalBrightnessSliderControl.swift; sourceTree = "<group>"; };
@ -545,6 +547,7 @@
children = (
A92256942411D01100B8AB57 /* AdafruitBoardsManager.swift */,
A94AC14D2364A82A0062AB11 /* AdafruitBoard.swift */,
A9573B362464891D00E15D28 /* AdafruitBoard+FlashNeopixels.swift */,
A901EC4C237C47D800687BE6 /* SensorDataSeries.swift */,
A9A08B2223A2841200498069 /* LightSequence.swift */,
A9A08B2423A2CBCF00498069 /* LightSequenceAnimation.swift */,
@ -1206,6 +1209,7 @@
A9EAA19523514B2800FA615E /* CornerShadowButton.swift in Sources */,
A96AA5D523635A89004A06BA /* NSLayoutConstraint+ChangeMultiplier.swift in Sources */,
A93159DD241A5B6000218092 /* ActiveLabelUtils.swift in Sources */,
A9573B372464891D00E15D28 /* AdafruitBoard+FlashNeopixels.swift in Sources */,
A96AA5C823633EB3004A06BA /* UIButton+BackgroundColorForState.swift in Sources */,
A92256912411CEEA00B8AB57 /* BlePeripheral+AdafruitToneGenerator.swift in Sources */,
A9A08B2523A2CBCF00498069 /* LightSequenceAnimation.swift in Sources */,
@ -1603,7 +1607,7 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 21;
CURRENT_PROJECT_VERSION = 22;
DEVELOPMENT_TEAM = 2X94RM7457;
INFOPLIST_FILE = BluefruitPlayground/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
@ -1628,7 +1632,7 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 21;
CURRENT_PROJECT_VERSION = 22;
DEVELOPMENT_TEAM = 2X94RM7457;
INFOPLIST_FILE = BluefruitPlayground/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
@ -1692,7 +1696,7 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 21;
CURRENT_PROJECT_VERSION = 22;
DEVELOPMENT_TEAM = 2X94RM7457;
INFOPLIST_FILE = "BluefruitPlayground-SimulatedBluetooth-Info.plist";
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
@ -1718,7 +1722,7 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 21;
CURRENT_PROJECT_VERSION = 22;
DEVELOPMENT_TEAM = 2X94RM7457;
INFOPLIST_FILE = "BluefruitPlayground-SimulatedBluetooth-Info.plist";
IPHONEOS_DEPLOYMENT_TARGET = 12.0;

View file

@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="15705" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="BYZ-38-t0r">
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="16096" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="BYZ-38-t0r">
<device id="retina6_5" orientation="portrait" appearance="light"/>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="15706"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="16087"/>
<capability name="Named colors" minToolsVersion="9.0"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
@ -402,19 +402,19 @@
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="scanning_background" translatesAutoresizingMaskIntoConstraints="NO" id="8C3-rm-MeC">
<rect key="frame" x="-126" y="124" width="666" height="666"/>
<rect key="frame" x="40.333333333333343" y="290.33333333333337" width="333.33333333333326" height="333.33333333333337"/>
<constraints>
<constraint firstAttribute="width" secondItem="8C3-rm-MeC" secondAttribute="height" multiplier="1:1" id="Om7-9I-uA7"/>
</constraints>
</imageView>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="scanning_background" translatesAutoresizingMaskIntoConstraints="NO" id="CWZ-b3-xqm">
<rect key="frame" x="-126" y="124" width="666" height="666"/>
<rect key="frame" x="40.333333333333343" y="290.33333333333337" width="333.33333333333326" height="333.33333333333337"/>
<constraints>
<constraint firstAttribute="width" secondItem="CWZ-b3-xqm" secondAttribute="height" multiplier="1:1" id="1kq-aH-pC6"/>
</constraints>
</imageView>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="scanning_background" translatesAutoresizingMaskIntoConstraints="NO" id="8Ft-ej-FAg">
<rect key="frame" x="-126" y="124" width="666" height="666"/>
<rect key="frame" x="40.333333333333343" y="290.33333333333337" width="333.33333333333326" height="333.33333333333337"/>
<constraints>
<constraint firstAttribute="width" secondItem="8Ft-ej-FAg" secondAttribute="height" multiplier="1:1" id="b0q-mr-GjX"/>
</constraints>
@ -597,7 +597,7 @@
<objects>
<viewController id="MlQ-3l-TbI" customClass="ScanProblemsViewController" customModule="BluefruitPlayground_SimulateBluetooth" customModuleProvider="target" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="1Lx-el-2sO" customClass="GradientView" customModule="BluefruitPlayground_SimulateBluetooth" customModuleProvider="target">
<rect key="frame" x="0.0" y="0.0" width="414" height="756"/>
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="28" sectionFooterHeight="28" translatesAutoresizingMaskIntoConstraints="NO" id="7ms-q4-Fd9">
@ -605,14 +605,14 @@
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<prototypes>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" selectionStyle="none" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="HelpCell" id="U5T-Rn-JoM" customClass="HelpTableViewCell" customModule="BluefruitPlayground_SimulateBluetooth" customModuleProvider="target">
<rect key="frame" x="0.0" y="28" width="414" height="217"/>
<rect key="frame" x="0.0" y="28" width="414" height="216.66667175292969"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="U5T-Rn-JoM" id="luQ-sf-H0h">
<rect key="frame" x="0.0" y="0.0" width="414" height="217"/>
<rect key="frame" x="0.0" y="0.0" width="414" height="216.66667175292969"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="10" translatesAutoresizingMaskIntoConstraints="NO" id="W6j-6k-zao">
<rect key="frame" x="20" y="19" width="374" height="187"/>
<rect key="frame" x="20" y="19" width="374" height="186.66666666666666"/>
<subviews>
<stackView opaque="NO" contentMode="scaleToFill" verticalHuggingPriority="750" verticalCompressionResistancePriority="1000" spacing="10" translatesAutoresizingMaskIntoConstraints="NO" id="NeJ-ep-YDO">
<rect key="frame" x="0.0" y="0.0" width="374" height="40.666666666666664"/>
@ -662,10 +662,10 @@
<nil key="highlightedColor"/>
</label>
<view contentMode="scaleToFill" verticalHuggingPriority="1000" verticalCompressionResistancePriority="1000" translatesAutoresizingMaskIntoConstraints="NO" id="lX3-kv-DYx">
<rect key="frame" x="0.0" y="101.33333333333331" width="374" height="85.666666666666686"/>
<rect key="frame" x="0.0" y="101.33333333333334" width="374" height="85.333333333333343"/>
<subviews>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="bottom" horizontalHuggingPriority="251" verticalHuggingPriority="1000" verticalCompressionResistancePriority="1000" image="scanproblems_powerup" translatesAutoresizingMaskIntoConstraints="NO" id="UAb-G3-y7N">
<rect key="frame" x="0.0" y="10.000000000000014" width="374" height="75.666666666666671"/>
<rect key="frame" x="12" y="10.000000000000014" width="350" height="75.333333333333329"/>
</imageView>
</subviews>
<color key="backgroundColor" name="cell_light"/>
@ -856,19 +856,19 @@
</constraints>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" verticalCompressionResistancePriority="1000" text="Title" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumScaleFactor="0.5" translatesAutoresizingMaskIntoConstraints="NO" id="Sed-sJ-Bks">
<rect key="frame" x="38" y="8.0000000000000018" width="292" height="21.666666666666671"/>
<rect key="frame" x="38" y="8.0000000000000018" width="304" height="21.666666666666671"/>
<fontDescription key="fontDescription" type="system" weight="medium" pointSize="18"/>
<color key="textColor" name="text_default"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="1000" horizontalCompressionResistancePriority="1000" verticalCompressionResistancePriority="1000" text="Subtitle subtitle subtitle subtitle subtitle subtitle" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="onF-zN-PM3">
<rect key="frame" x="38" y="31.666666666666661" width="292" height="38.333333333333343"/>
<rect key="frame" x="38" y="31.666666666666661" width="304" height="38.333333333333343"/>
<fontDescription key="fontDescription" type="system" pointSize="16"/>
<color key="textColor" name="text_default"/>
<nil key="highlightedColor"/>
</label>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="1000" verticalHuggingPriority="251" image="disclosure" translatesAutoresizingMaskIntoConstraints="NO" id="fdq-Op-BkP">
<rect key="frame" x="338" y="19" width="24" height="40"/>
<rect key="frame" x="350" y="29" width="12" height="20"/>
<color key="tintColor" white="0.80000000000000004" alpha="0.80330230496453903" colorSpace="custom" customColorSpace="calibratedWhite"/>
</imageView>
</subviews>
@ -922,19 +922,19 @@
</constraints>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" verticalCompressionResistancePriority="1000" text="Title" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumScaleFactor="0.5" translatesAutoresizingMaskIntoConstraints="NO" id="jjJ-q6-e8z">
<rect key="frame" x="38" y="8.0000000000000018" width="292" height="21.666666666666671"/>
<rect key="frame" x="38" y="8.0000000000000018" width="304" height="21.666666666666671"/>
<fontDescription key="fontDescription" type="system" weight="medium" pointSize="18"/>
<color key="textColor" name="text_default"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="1000" horizontalCompressionResistancePriority="1000" verticalCompressionResistancePriority="1000" text="Subtitle subtitle subtitle subtitle subtitle subtitle" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="rOY-0f-W7p">
<rect key="frame" x="38" y="31.666666666666668" width="292" height="40.666666666666657"/>
<rect key="frame" x="38" y="31.666666666666668" width="304" height="40.666666666666657"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" name="text_default"/>
<nil key="highlightedColor"/>
</label>
<imageView hidden="YES" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="1000" verticalHuggingPriority="251" image="disclosure" translatesAutoresizingMaskIntoConstraints="NO" id="fTM-eg-YMl">
<rect key="frame" x="338" y="20.333333333333329" width="24" height="40"/>
<rect key="frame" x="350" y="30.333333333333336" width="12" height="20"/>
<color key="tintColor" white="0.80000000000000004" alpha="0.80330230499999999" colorSpace="custom" customColorSpace="calibratedWhite"/>
</imageView>
</subviews>
@ -1064,19 +1064,19 @@
</constraints>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" verticalCompressionResistancePriority="1000" text="Title" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumScaleFactor="0.5" translatesAutoresizingMaskIntoConstraints="NO" id="fTD-3i-zkW">
<rect key="frame" x="46" y="8.0000000000000018" width="284" height="21.666666666666671"/>
<rect key="frame" x="46" y="8.0000000000000018" width="296" height="21.666666666666671"/>
<fontDescription key="fontDescription" type="system" weight="medium" pointSize="18"/>
<color key="textColor" name="text_default"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="1000" horizontalCompressionResistancePriority="1000" verticalCompressionResistancePriority="1000" text="Subtitle subtitle subtitle subtitle subtitle subtitle" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="sQJ-U4-6NT">
<rect key="frame" x="46" y="29.666666666666668" width="284" height="40.666666666666657"/>
<rect key="frame" x="46" y="29.666666666666668" width="296" height="40.666666666666657"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" name="text_default"/>
<nil key="highlightedColor"/>
</label>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="1000" verticalHuggingPriority="251" image="disclosure" translatesAutoresizingMaskIntoConstraints="NO" id="t4j-Bn-dSU">
<rect key="frame" x="338" y="19.333333333333329" width="24" height="40"/>
<rect key="frame" x="350" y="29.333333333333336" width="12" height="20"/>
<color key="tintColor" white="0.80000000000000004" alpha="0.80330230499999999" colorSpace="custom" customColorSpace="calibratedWhite"/>
</imageView>
</subviews>
@ -1204,19 +1204,19 @@
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="1EM-zG-od1">
<rect key="frame" x="27" y="-78" width="360" height="800"/>
<rect key="frame" x="27" y="122" width="360" height="400"/>
<subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="mCj-Gb-k6T">
<rect key="frame" x="0.0" y="0.0" width="360" height="800"/>
<rect key="frame" x="0.0" y="0.0" width="360" height="400"/>
<subviews>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="tip_datacable" translatesAutoresizingMaskIntoConstraints="NO" id="eyT-6W-nB8">
<rect key="frame" x="138" y="50.333333333333343" width="84" height="248.33333333333337"/>
<rect key="frame" x="159" y="-87.333333333333343" width="42" height="124"/>
</imageView>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="tip_powercable" translatesAutoresizingMaskIntoConstraints="NO" id="5s4-fh-H68">
<rect key="frame" x="126" y="446.66666666666674" width="108" height="350"/>
<rect key="frame" x="153" y="334" width="54" height="175"/>
</imageView>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="board_cpb" translatesAutoresizingMaskIntoConstraints="NO" id="i3T-Db-EAx">
<rect key="frame" x="0.0" y="0.0" width="360" height="800"/>
<rect key="frame" x="0.0" y="0.0" width="360" height="400"/>
<constraints>
<constraint firstAttribute="width" constant="360" id="twB-P9-kif"/>
</constraints>
@ -1570,24 +1570,24 @@
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
<subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="tQU-ml-Eiz">
<rect key="frame" x="0.0" y="0.0" width="414" height="356"/>
<rect key="frame" x="0.0" y="0.0" width="414" height="251"/>
<subviews>
<view contentMode="scaleToFill" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="BN3-jQ-GBi" userLabel="titleView">
<rect key="frame" x="8" y="20" width="398" height="252"/>
<rect key="frame" x="67" y="20" width="280" height="147"/>
<subviews>
<imageView userInteractionEnabled="NO" alpha="0.80000001192092896" contentMode="scaleAspectFit" verticalHuggingPriority="1000" image="info_adafruit_logo" translatesAutoresizingMaskIntoConstraints="NO" id="v29-ih-FFw">
<rect key="frame" x="0.0" y="0.0" width="398" height="210"/>
<rect key="frame" x="0.0" y="0.0" width="280" height="105"/>
<color key="tintColor" name="text_default"/>
</imageView>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" verticalHuggingPriority="251" text="App Name" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="izk-pv-hGR">
<rect key="frame" x="75" y="214" width="323" height="19"/>
<rect key="frame" x="75" y="109" width="205" height="19"/>
<fontDescription key="fontDescription" type="system" weight="medium" pointSize="15"/>
<color key="textColor" name="text_default"/>
<color key="highlightedColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<color key="shadowColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</label>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="v.2.0" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="NGh-Xb-KmR" userLabel="versionLabel">
<rect key="frame" x="75" y="233" width="323" height="19"/>
<rect key="frame" x="75" y="128" width="205" height="19"/>
<fontDescription key="fontDescription" type="system" weight="medium" pointSize="15"/>
<color key="textColor" name="text_default"/>
<color key="highlightedColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
@ -1609,7 +1609,7 @@
</constraints>
</view>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="750" verticalCompressionResistancePriority="1000" text="Details details details details details details details details details details details details" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" minimumScaleFactor="0.5" translatesAutoresizingMaskIntoConstraints="NO" id="gM0-9c-k2j" customClass="ActiveLabel" customModule="ActiveLabel">
<rect key="frame" x="8" y="312" width="398" height="36"/>
<rect key="frame" x="8" y="207" width="398" height="36"/>
<fontDescription key="fontDescription" type="system" pointSize="15"/>
<color key="textColor" name="text_default"/>
<nil key="highlightedColor"/>
@ -1709,13 +1709,13 @@
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="20" translatesAutoresizingMaskIntoConstraints="NO" id="aDl-bl-Snv">
<rect key="frame" x="20" y="200.66666666666666" width="374" height="464.66666666666674"/>
<rect key="frame" x="20" y="268.33333333333326" width="374" height="329.66666666666674"/>
<subviews>
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="bluetooth_status" translatesAutoresizingMaskIntoConstraints="NO" id="Yms-Ya-hqI">
<rect key="frame" x="0.0" y="0.0" width="374" height="270"/>
<rect key="frame" x="0.0" y="0.0" width="374" height="135"/>
</imageView>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" alignment="center" spacing="6" translatesAutoresizingMaskIntoConstraints="NO" id="Dph-8N-wNh">
<rect key="frame" x="0.0" y="290" width="374" height="70.666666666666686"/>
<rect key="frame" x="0.0" y="155" width="374" height="70.666666666666686"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Enable Bluetooth" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ppt-z7-z9u">
<rect key="frame" x="106.66666666666667" y="0.0" width="160.66666666666663" height="24"/>
@ -1724,7 +1724,7 @@
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Bluetooth permission should be granted to connect to the Circuit Playground Device" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="hCn-Cu-eSJ">
<rect key="frame" x="22.333333333333343" y="29.99999999999994" width="329.66666666666663" height="40.666666666666657"/>
<rect key="frame" x="22.333333333333343" y="29.999999999999996" width="329.66666666666663" height="40.666666666666657"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<nil key="highlightedColor"/>
@ -1732,7 +1732,7 @@
</subviews>
</stackView>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="9ix-t9-34H">
<rect key="frame" x="0.0" y="380.66666666666674" width="374" height="84"/>
<rect key="frame" x="0.0" y="245.66666666666669" width="374" height="84"/>
<subviews>
<button opaque="NO" contentMode="scaleToFill" verticalCompressionResistancePriority="1000" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="HMY-4d-aqM" customClass="CornerShadowButton" customModule="BluefruitPlayground_SimulateBluetooth" customModuleProvider="target">
<rect key="frame" x="20" y="20" width="334" height="44"/>
@ -1794,6 +1794,10 @@
<point key="canvasLocation" x="1048" y="-515"/>
</scene>
</scenes>
<inferredMetricsTieBreakers>
<segue reference="KoA-I2-yK2"/>
</inferredMetricsTieBreakers>
<color key="tintColor" name="text_default"/>
<resources>
<image name="bluetooth_status" width="101" height="135"/>
<image name="board_clue_front" width="400" height="400"/>
@ -1829,8 +1833,4 @@
<color red="0.88899999856948853" green="0.40000000596046448" blue="0.36000001430511475" alpha="0.80000001192092896" colorSpace="custom" customColorSpace="displayP3"/>
</namedColor>
</resources>
<inferredMetricsTieBreakers>
<segue reference="KoA-I2-yK2"/>
</inferredMetricsTieBreakers>
<color key="tintColor" name="text_default"/>
</document>

View file

@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="15705" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="16096" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
<device id="retina6_1" orientation="portrait" appearance="light"/>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="15706"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="16087"/>
<capability name="Named colors" minToolsVersion="9.0"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
@ -24,10 +24,10 @@
<rect key="frame" x="20" y="0.0" width="374" height="423"/>
</containerView>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="xKj-ea-39A">
<rect key="frame" x="8" y="263" width="76" height="152"/>
<rect key="frame" x="8" y="327" width="44" height="88"/>
<subviews>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="ga4-d9-1lz">
<rect key="frame" x="0.0" y="0.0" width="76" height="76"/>
<rect key="frame" x="0.0" y="0.0" width="44" height="44"/>
<inset key="contentEdgeInsets" minX="6" minY="6" maxX="6" maxY="6"/>
<state key="normal" image="circuit_all"/>
<connections>
@ -35,7 +35,7 @@
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="xLL-a0-gwf">
<rect key="frame" x="0.0" y="76" width="76" height="76"/>
<rect key="frame" x="0.0" y="44" width="44" height="44"/>
<inset key="contentEdgeInsets" minX="6" minY="6" maxX="6" maxY="6"/>
<state key="normal" image="circuit_clear"/>
<connections>
@ -45,7 +45,7 @@
</subviews>
</stackView>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="12T-bB-WIy">
<rect key="frame" x="330" y="339" width="76" height="76"/>
<rect key="frame" x="362" y="371" width="44" height="44"/>
<inset key="contentEdgeInsets" minX="6" minY="6" maxX="6" maxY="6"/>
<state key="normal" image="circuit_reset"/>
<connections>
@ -615,10 +615,10 @@
</constraints>
</view>
<stackView opaque="NO" contentMode="scaleToFill" distribution="fillEqually" spacing="30" translatesAutoresizingMaskIntoConstraints="NO" id="FYu-kC-2q0">
<rect key="frame" x="70" y="730" width="274" height="44"/>
<rect key="frame" x="74" y="730" width="266" height="44"/>
<subviews>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="nxH-er-ZBM" customClass="CornerShadowButton" customModule="BluefruitPlayground_SimulateBluetooth" customModuleProvider="target">
<rect key="frame" x="0.0" y="0.0" width="46" height="44"/>
<rect key="frame" x="0.0" y="0.0" width="44" height="44"/>
<constraints>
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="44" id="LHV-xq-UoT"/>
<constraint firstAttribute="height" constant="44" id="YUR-JQ-XXD"/>
@ -632,7 +632,7 @@
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="jLv-tG-qa5" customClass="CornerShadowButton" customModule="BluefruitPlayground_SimulateBluetooth" customModuleProvider="target">
<rect key="frame" x="76" y="0.0" width="46" height="44"/>
<rect key="frame" x="74" y="0.0" width="44" height="44"/>
<constraints>
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="44" id="Eay-1g-IGd"/>
<constraint firstAttribute="height" constant="44" id="hqq-CF-25R"/>
@ -646,7 +646,7 @@
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Ta7-LK-awK" customClass="CornerShadowButton" customModule="BluefruitPlayground_SimulateBluetooth" customModuleProvider="target">
<rect key="frame" x="152" y="0.0" width="46" height="44"/>
<rect key="frame" x="148" y="0.0" width="44" height="44"/>
<constraints>
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="44" id="ccz-yG-CgQ"/>
<constraint firstAttribute="height" constant="44" id="gLO-Cf-PUP"/>
@ -660,7 +660,7 @@
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="0uY-jB-1Ht" customClass="CornerShadowButton" customModule="BluefruitPlayground_SimulateBluetooth" customModuleProvider="target">
<rect key="frame" x="228" y="0.0" width="46" height="44"/>
<rect key="frame" x="222" y="0.0" width="44" height="44"/>
<constraints>
<constraint firstAttribute="height" constant="44" id="CWM-0O-ns9"/>
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="44" id="o2R-dn-3uf"/>
@ -718,7 +718,7 @@
<rect key="frame" x="0.0" y="12" width="414" height="510"/>
<subviews>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="750" verticalHuggingPriority="750" image="temperature_gauge" translatesAutoresizingMaskIntoConstraints="NO" id="eYC-Gt-apS">
<rect key="frame" x="20" y="67" width="374" height="376"/>
<rect key="frame" x="97" y="144.5" width="220" height="221"/>
<constraints>
<constraint firstAttribute="width" secondItem="eYC-Gt-apS" secondAttribute="height" multiplier="220:221" id="Tur-P3-pES"/>
</constraints>
@ -730,7 +730,7 @@
<nil key="highlightedColor"/>
</label>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="OKs-DM-Ka8">
<rect key="frame" x="342" y="438" width="64" height="64"/>
<rect key="frame" x="374" y="470" width="32" height="32"/>
<fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/>
<inset key="contentEdgeInsets" minX="6" minY="6" maxX="6" maxY="6"/>
<state key="normal" title="ºC" backgroundImage="temperature_swap">
@ -846,27 +846,27 @@
<rect key="frame" x="0.0" y="12" width="414" height="510"/>
<subviews>
<view contentMode="scaleToFill" horizontalHuggingPriority="249" verticalHuggingPriority="249" horizontalCompressionResistancePriority="249" verticalCompressionResistancePriority="249" translatesAutoresizingMaskIntoConstraints="NO" id="zLf-Fi-H66">
<rect key="frame" x="20" y="51" width="374" height="408"/>
<rect key="frame" x="87" y="124" width="240" height="262"/>
<subviews>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="Xxj-ol-hAb">
<rect key="frame" x="0.0" y="0.0" width="374" height="408"/>
<rect key="frame" x="0.0" y="0.0" width="240" height="262"/>
<subviews>
<view alpha="0.0" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="jZX-SK-33o">
<rect key="frame" x="0.0" y="0.0" width="374" height="81.5"/>
<rect key="frame" x="0.0" y="0.0" width="240" height="52.5"/>
<color key="backgroundColor" systemColor="systemRedColor" red="1" green="0.23137254900000001" blue="0.18823529410000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</view>
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="PqL-CE-oDP">
<rect key="frame" x="0.0" y="81.5" width="374" height="322.5"/>
<rect key="frame" x="0.0" y="52.5" width="240" height="207"/>
<subviews>
<view alpha="0.0" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="EJt-MV-fsH">
<rect key="frame" x="0.0" y="0.0" width="138.5" height="322.5"/>
<rect key="frame" x="0.0" y="0.0" width="89" height="207"/>
<color key="backgroundColor" systemColor="systemGreenColor" red="0.20392156859999999" green="0.78039215689999997" blue="0.34901960780000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</view>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="dvq-By-eaI">
<rect key="frame" x="138.5" y="0.0" width="228" height="322.5"/>
<rect key="frame" x="89" y="0.0" width="146" height="207"/>
<subviews>
<imageView opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="249" verticalHuggingPriority="249" horizontalCompressionResistancePriority="249" verticalCompressionResistancePriority="249" image="humidity_fill" translatesAutoresizingMaskIntoConstraints="NO" id="B9g-ei-Fcg">
<rect key="frame" x="0.0" y="0.0" width="228" height="322.5"/>
<rect key="frame" x="0.0" y="0.0" width="146" height="207"/>
</imageView>
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
@ -878,13 +878,13 @@
</constraints>
</view>
<view alpha="0.0" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="d1M-64-lqP">
<rect key="frame" x="366.5" y="0.0" width="7.5" height="322.5"/>
<rect key="frame" x="235" y="0.0" width="5" height="207"/>
<color key="backgroundColor" systemColor="systemOrangeColor" red="1" green="0.58431372550000005" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</view>
</subviews>
</stackView>
<view alpha="0.0" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="V1f-go-Uqz">
<rect key="frame" x="0.0" y="404" width="374" height="4"/>
<rect key="frame" x="0.0" y="259.5" width="240" height="2.5"/>
<color key="backgroundColor" systemColor="systemPurpleColor" red="0.68627450980000004" green="0.32156862749999998" blue="0.87058823529999996" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</view>
</subviews>
@ -903,16 +903,16 @@
</constraints>
</view>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="1000" verticalHuggingPriority="1000" image="humidity_outline" translatesAutoresizingMaskIntoConstraints="NO" id="g1O-iQ-qQu">
<rect key="frame" x="20" y="51" width="374" height="408"/>
<rect key="frame" x="87" y="124" width="240" height="262"/>
<constraints>
<constraint firstAttribute="width" secondItem="g1O-iQ-qQu" secondAttribute="height" multiplier="120:131" id="nSg-Im-mfj"/>
</constraints>
</imageView>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="JhQ-aW-u6h">
<rect key="frame" x="154.5" y="194" width="239.5" height="265"/>
<rect key="frame" x="173.5" y="215.5" width="153.5" height="170.5"/>
<subviews>
<stackView opaque="NO" contentMode="scaleToFill" alignment="bottom" translatesAutoresizingMaskIntoConstraints="NO" id="DQU-f5-FTT">
<rect key="frame" x="93" y="107" width="53.5" height="50.5"/>
<rect key="frame" x="50" y="60" width="53.5" height="50.5"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="750" verticalCompressionResistancePriority="1000" text="0" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumScaleFactor="0.5" translatesAutoresizingMaskIntoConstraints="NO" id="BCi-JJ-WJB">
<rect key="frame" x="0.0" y="0.0" width="27.5" height="50.5"/>
@ -1056,19 +1056,19 @@
<rect key="frame" x="0.0" y="12" width="414" height="510"/>
<subviews>
<imageView opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="249" verticalHuggingPriority="249" horizontalCompressionResistancePriority="249" verticalCompressionResistancePriority="249" image="pressure_hand" translatesAutoresizingMaskIntoConstraints="NO" id="Pys-h6-hWK">
<rect key="frame" x="193.5" y="72.5" width="27" height="365"/>
<rect key="frame" x="197.5" y="128" width="19" height="254"/>
</imageView>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="1000" verticalHuggingPriority="1000" image="pressure_outline" translatesAutoresizingMaskIntoConstraints="NO" id="qar-Qw-2fa">
<rect key="frame" x="20" y="72.5" width="374" height="365"/>
<rect key="frame" x="77" y="128" width="260" height="254"/>
<constraints>
<constraint firstAttribute="width" secondItem="qar-Qw-2fa" secondAttribute="height" multiplier="130:127" id="fut-ab-EWu"/>
</constraints>
</imageView>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="JYL-Re-hQN">
<rect key="frame" x="95" y="412.5" width="224" height="50.5"/>
<rect key="frame" x="129" y="357" width="156" height="50.5"/>
<subviews>
<stackView opaque="NO" contentMode="scaleToFill" alignment="bottom" translatesAutoresizingMaskIntoConstraints="NO" id="TuZ-t8-AxA">
<rect key="frame" x="35" y="0.0" width="154.5" height="50.5"/>
<rect key="frame" x="1" y="0.0" width="154.5" height="50.5"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="750" verticalCompressionResistancePriority="1000" text="990" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumScaleFactor="0.5" translatesAutoresizingMaskIntoConstraints="NO" id="3fc-lA-gKu">
<rect key="frame" x="0.0" y="0.0" width="103" height="50.5"/>
@ -1110,13 +1110,13 @@
</constraints>
</view>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="1000" verticalHuggingPriority="1000" verticalCompressionResistancePriority="1000" text="max" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumScaleFactor="0.5" translatesAutoresizingMaskIntoConstraints="NO" id="mQS-JG-YLL">
<rect key="frame" x="339" y="428.5" width="28.5" height="18"/>
<rect key="frame" x="305" y="373" width="28.5" height="18"/>
<fontDescription key="fontDescription" type="system" pointSize="15"/>
<color key="textColor" red="1" green="0.99998790029999995" blue="0.9999920726" alpha="1" colorSpace="custom" customColorSpace="displayP3"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="1000" verticalHuggingPriority="1000" verticalCompressionResistancePriority="1000" text="min" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumScaleFactor="0.5" translatesAutoresizingMaskIntoConstraints="NO" id="6zY-bT-18t">
<rect key="frame" x="50" y="428.5" width="25" height="18"/>
<rect key="frame" x="84" y="373" width="25" height="18"/>
<fontDescription key="fontDescription" type="system" pointSize="15"/>
<color key="textColor" red="1" green="0.99998790029999995" blue="0.9999920726" alpha="1" colorSpace="custom" customColorSpace="displayP3"/>
<nil key="highlightedColor"/>
@ -1239,16 +1239,16 @@
<rect key="frame" x="20" y="0.0" width="374" height="510"/>
<subviews>
<stackView opaque="NO" contentMode="scaleToFill" spacing="8" translatesAutoresizingMaskIntoConstraints="NO" id="PZf-yf-AWg">
<rect key="frame" x="40" y="0.0" width="334" height="510"/>
<rect key="frame" x="75" y="115" width="264" height="280"/>
<subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ljR-bi-cvW">
<rect key="frame" x="0.0" y="0.0" width="176" height="510"/>
<rect key="frame" x="0.0" y="0.0" width="106" height="280"/>
<subviews>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="1000" verticalHuggingPriority="1000" image="sound_level_dimmed" translatesAutoresizingMaskIntoConstraints="NO" id="LlW-Yf-hDl">
<rect key="frame" x="0.0" y="0.0" width="176" height="510"/>
<rect key="frame" x="0.0" y="0.0" width="106" height="280"/>
</imageView>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="249" verticalHuggingPriority="249" horizontalCompressionResistancePriority="249" verticalCompressionResistancePriority="249" image="sound_level" translatesAutoresizingMaskIntoConstraints="NO" id="xqN-Wx-HD5">
<rect key="frame" x="0.0" y="0.0" width="176" height="510"/>
<rect key="frame" x="0.0" y="0.0" width="106" height="280"/>
</imageView>
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
@ -1264,19 +1264,19 @@
</constraints>
</view>
<view contentMode="scaleToFill" horizontalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="yug-x0-ADE">
<rect key="frame" x="184" y="0.0" width="150" height="510"/>
<rect key="frame" x="114" y="0.0" width="150" height="280"/>
<subviews>
<stackView opaque="NO" contentMode="scaleToFill" alignment="bottom" translatesAutoresizingMaskIntoConstraints="NO" id="qoc-mM-xcg">
<rect key="frame" x="0.0" y="0.0" width="150" height="510"/>
<rect key="frame" x="0.0" y="0.0" width="150" height="280"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="750" verticalHuggingPriority="750" verticalCompressionResistancePriority="1000" text="-120" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumScaleFactor="0.5" translatesAutoresizingMaskIntoConstraints="NO" id="Knc-sL-2af">
<rect key="frame" x="0.0" y="459.5" width="87" height="50.5"/>
<rect key="frame" x="0.0" y="229.5" width="87" height="50.5"/>
<fontDescription key="fontDescription" type="system" weight="semibold" pointSize="42"/>
<color key="textColor" red="1" green="0.99998790029999995" blue="0.9999920726" alpha="1" colorSpace="custom" customColorSpace="displayP3"/>
<nil key="highlightedColor"/>
</label>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="KJ5-tm-SpG">
<rect key="frame" x="87" y="460" width="63" height="50"/>
<rect key="frame" x="87" y="230" width="63" height="50"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="1000" verticalHuggingPriority="1000" horizontalCompressionResistancePriority="751" verticalCompressionResistancePriority="1000" text="dBFS" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumScaleFactor="0.5" translatesAutoresizingMaskIntoConstraints="NO" id="Q4H-RL-ETg">
<rect key="frame" x="0.0" y="14.5" width="63" height="31.5"/>
@ -1413,11 +1413,11 @@
<rect key="frame" x="0.0" y="0.0" width="414" height="808"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<view contentMode="scaleToFill" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="9cd-cz-wWH">
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="9cd-cz-wWH">
<rect key="frame" x="0.0" y="12" width="414" height="350"/>
<subviews>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" ambiguous="YES" image="tonegenerator_speaker" translatesAutoresizingMaskIntoConstraints="NO" id="Y70-SD-9rD">
<rect key="frame" x="28" y="85" width="358" height="180"/>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="tonegenerator_speaker" translatesAutoresizingMaskIntoConstraints="NO" id="Y70-SD-9rD">
<rect key="frame" x="77" y="85" width="260" height="180"/>
</imageView>
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
@ -1430,7 +1430,7 @@
<constraint firstAttribute="trailingMargin" relation="greaterThanOrEqual" secondItem="Y70-SD-9rD" secondAttribute="trailing" constant="20" id="z0e-dB-Eew"/>
</constraints>
</view>
<view contentMode="scaleToFill" verticalHuggingPriority="751" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="bWw-lC-Emh">
<view contentMode="scaleToFill" verticalHuggingPriority="751" translatesAutoresizingMaskIntoConstraints="NO" id="bWw-lC-Emh">
<rect key="frame" x="0.0" y="374" width="414" height="400"/>
<subviews>
<view clipsSubviews="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Gc2-PQ-UgW">
@ -2022,11 +2022,11 @@
<rect key="frame" x="0.0" y="0.0" width="345" height="345"/>
<subviews>
<view alpha="0.89999997615814209" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ISA-9V-YpI">
<rect key="frame" x="147.5" y="147.5" width="50" height="50"/>
<rect key="frame" x="20" y="20" width="305" height="305"/>
<color key="backgroundColor" systemColor="systemRedColor" red="1" green="0.23137254900000001" blue="0.18823529410000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="50" id="cTY-fJ-AX3"/>
<constraint firstAttribute="width" secondItem="ISA-9V-YpI" secondAttribute="height" multiplier="1:1" id="u3F-8A-u56"/>
<constraint firstAttribute="width" constant="50" id="xKZ-w7-8xf"/>
</constraints>
</view>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Mrg-ds-FvJ">
@ -2041,11 +2041,15 @@
<constraint firstItem="ISA-9V-YpI" firstAttribute="centerY" secondItem="efQ-XI-Enl" secondAttribute="centerY" id="4f0-Dx-K62"/>
<constraint firstItem="Mrg-ds-FvJ" firstAttribute="bottom" secondItem="efQ-XI-Enl" secondAttribute="bottom" id="PP7-en-T4h"/>
<constraint firstItem="Mrg-ds-FvJ" firstAttribute="leading" secondItem="efQ-XI-Enl" secondAttribute="leading" id="Wmk-Sc-eA9"/>
<constraint firstAttribute="bottom" secondItem="ISA-9V-YpI" secondAttribute="bottom" constant="20" id="XIh-Ri-ygO"/>
<constraint firstItem="ISA-9V-YpI" firstAttribute="leading" secondItem="efQ-XI-Enl" secondAttribute="leading" constant="20" id="aWA-fc-Ap2"/>
<constraint firstAttribute="width" constant="345" id="fSD-H6-Mta"/>
<constraint firstAttribute="width" secondItem="efQ-XI-Enl" secondAttribute="height" multiplier="1:1" id="fYl-ir-S8T"/>
<constraint firstItem="Mrg-ds-FvJ" firstAttribute="trailing" secondItem="efQ-XI-Enl" secondAttribute="trailing" id="hkg-2h-Q7l"/>
<constraint firstItem="Mrg-ds-FvJ" firstAttribute="top" secondItem="efQ-XI-Enl" secondAttribute="top" id="lit-8n-qEv"/>
<constraint firstItem="ISA-9V-YpI" firstAttribute="centerX" secondItem="efQ-XI-Enl" secondAttribute="centerX" id="ptU-93-Hhv"/>
<constraint firstAttribute="trailing" secondItem="ISA-9V-YpI" secondAttribute="trailing" constant="20" id="sg0-YV-ffD"/>
<constraint firstItem="ISA-9V-YpI" firstAttribute="top" secondItem="efQ-XI-Enl" secondAttribute="top" constant="20" id="z3g-kE-YdS"/>
</constraints>
</view>
</subviews>
@ -2058,7 +2062,7 @@
</view>
<size key="freeformSize" width="345" height="345"/>
<connections>
<outlet property="neopixelViewWidthConstraint" destination="xKZ-w7-8xf" id="ebt-Hb-8bt"/>
<outlet property="neopixelViewWidthConstraint" destination="cTY-fJ-AX3" id="6fg-4b-BSf"/>
<outlet property="neopixelsContainerView" destination="efQ-XI-Enl" id="bEq-vx-4PY"/>
<outlet property="neopixelsContainerWidthConstraint" destination="fSD-H6-Mta" id="UfV-Ip-7QC"/>
</connections>
@ -2128,7 +2132,7 @@
<rect key="frame" x="0.0" y="71" width="348" height="60.5"/>
<subviews>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="1000" verticalHuggingPriority="251" image="lightsensor_min" translatesAutoresizingMaskIntoConstraints="NO" id="xIf-cH-XwT">
<rect key="frame" x="0.0" y="0.0" width="32" height="60.5"/>
<rect key="frame" x="0.0" y="14" width="32" height="32"/>
<color key="tintColor" name="panel_text"/>
<constraints>
<constraint firstAttribute="width" constant="32" id="Cnh-ct-KRE"/>
@ -2166,7 +2170,7 @@
</constraints>
</view>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="1000" verticalHuggingPriority="251" image="lightsensor_max" translatesAutoresizingMaskIntoConstraints="NO" id="Syp-9X-v8i">
<rect key="frame" x="316" y="0.0" width="32" height="60.5"/>
<rect key="frame" x="316" y="14" width="32" height="32"/>
<color key="tintColor" name="panel_text"/>
<constraints>
<constraint firstAttribute="width" constant="32" id="ph4-zE-oZL"/>
@ -2250,25 +2254,25 @@
<rect key="frame" x="20" y="0.0" width="319" height="224"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="750" verticalCompressionResistancePriority="1000" text="Title" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="2w2-fb-yU1">
<rect key="frame" x="0.0" y="16" width="319" height="0.0"/>
<rect key="frame" x="0.0" y="16" width="319" height="26.5"/>
<fontDescription key="fontDescription" type="system" weight="medium" pointSize="22"/>
<color key="textColor" name="panel_text"/>
<nil key="highlightedColor"/>
</label>
<view contentMode="scaleToFill" verticalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="LE8-Xm-MyC">
<rect key="frame" x="8" y="36" width="303" height="158"/>
<rect key="frame" x="8" y="62.5" width="303" height="131.5"/>
<subviews>
<stackView opaque="NO" contentMode="scaleToFill" distribution="fillEqually" alignment="center" spacing="40" translatesAutoresizingMaskIntoConstraints="NO" id="aGX-eE-4cQ">
<rect key="frame" x="0.0" y="0.0" width="303" height="158"/>
<rect key="frame" x="0.0" y="0.0" width="303" height="131.5"/>
<subviews>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="8" translatesAutoresizingMaskIntoConstraints="NO" id="a9L-nV-v5t">
<rect key="frame" x="0.0" y="0.0" width="74.5" height="158"/>
<rect key="frame" x="0.0" y="0.0" width="74.5" height="131.5"/>
<subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="CJ1-3n-P8S">
<rect key="frame" x="0.0" y="0.0" width="74.5" height="150"/>
<rect key="frame" x="0.0" y="0.0" width="74.5" height="103"/>
<subviews>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" horizontalCompressionResistancePriority="1000" verticalCompressionResistancePriority="1000" image="status_left" translatesAutoresizingMaskIntoConstraints="NO" id="YGm-Cb-2wM">
<rect key="frame" x="0.0" y="0.0" width="74.5" height="150"/>
<rect key="frame" x="0.0" y="0.0" width="74.5" height="103"/>
<color key="tintColor" red="1" green="0.4073752891886665" blue="0.12012620532416363" alpha="1" colorSpace="custom" customColorSpace="displayP3"/>
</imageView>
</subviews>
@ -2281,7 +2285,7 @@
</constraints>
</view>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="751" verticalHuggingPriority="251" horizontalCompressionResistancePriority="1000" text="XXXSlide Switch" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="lva-OC-wlT">
<rect key="frame" x="0.0" y="158" width="74.5" height="0.0"/>
<rect key="frame" x="0.0" y="111" width="74.5" height="20.5"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" name="panel_text"/>
<nil key="highlightedColor"/>
@ -2289,13 +2293,13 @@
</subviews>
</stackView>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="8" translatesAutoresizingMaskIntoConstraints="NO" id="thZ-V9-9zx">
<rect key="frame" x="114.5" y="0.0" width="74" height="158"/>
<rect key="frame" x="114.5" y="0.0" width="74" height="131.5"/>
<subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Jzv-K5-VcG">
<rect key="frame" x="0.0" y="0.0" width="74" height="150"/>
<rect key="frame" x="0.0" y="0.0" width="74" height="103"/>
<subviews>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" horizontalCompressionResistancePriority="1000" verticalCompressionResistancePriority="1000" image="status_a" translatesAutoresizingMaskIntoConstraints="NO" id="Di5-wa-clX">
<rect key="frame" x="0.0" y="0.0" width="74" height="150"/>
<rect key="frame" x="0.0" y="0.0" width="74" height="103"/>
<color key="tintColor" white="0.33333333329999998" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</imageView>
</subviews>
@ -2308,7 +2312,7 @@
</constraints>
</view>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="751" verticalHuggingPriority="251" horizontalCompressionResistancePriority="1000" text="XXXButton A" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="4sg-ww-Cfh">
<rect key="frame" x="0.0" y="158" width="74" height="0.0"/>
<rect key="frame" x="0.0" y="111" width="74" height="20.5"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" name="panel_text"/>
<nil key="highlightedColor"/>
@ -2316,13 +2320,13 @@
</subviews>
</stackView>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="8" translatesAutoresizingMaskIntoConstraints="NO" id="WS9-eS-UNJ">
<rect key="frame" x="228.5" y="0.0" width="74.5" height="158"/>
<rect key="frame" x="228.5" y="0.0" width="74.5" height="131.5"/>
<subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="fXs-km-nko">
<rect key="frame" x="0.0" y="0.0" width="74.5" height="150"/>
<rect key="frame" x="0.0" y="0.0" width="74.5" height="103"/>
<subviews>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" horizontalCompressionResistancePriority="1000" verticalCompressionResistancePriority="1000" image="status_b" translatesAutoresizingMaskIntoConstraints="NO" id="eoc-2h-ygp">
<rect key="frame" x="0.0" y="0.0" width="74.5" height="150"/>
<rect key="frame" x="0.0" y="0.0" width="74.5" height="103"/>
<color key="tintColor" white="0.33333333329999998" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</imageView>
</subviews>
@ -2335,7 +2339,7 @@
</constraints>
</view>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="751" verticalHuggingPriority="251" horizontalCompressionResistancePriority="1000" text="XXXButtonB" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Xf1-zu-lRO">
<rect key="frame" x="0.0" y="158" width="74.5" height="0.0"/>
<rect key="frame" x="0.0" y="111" width="74.5" height="20.5"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" name="panel_text"/>
<nil key="highlightedColor"/>
@ -3961,6 +3965,7 @@
<point key="canvasLocation" x="2550" y="3271"/>
</scene>
</scenes>
<color key="tintColor" name="text_default"/>
<resources>
<image name="board_clue_back" width="400" height="400"/>
<image name="board_clue_front" width="400" height="400"/>
@ -4011,5 +4016,4 @@
<color red="0.94900000095367432" green="0.96100002527236938" blue="0.96100002527236938" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</namedColor>
</resources>
<color key="tintColor" name="text_default"/>
</document>

View file

@ -0,0 +1,18 @@
//
// AdafruitBoard+FlashNeopixels.swift
// BluefruitPlayground
//
// Created by Antonio García on 07/05/2020.
// Copyright © 2020 Adafruit. All rights reserved.
//
import UIKit
extension AdafruitBoard {
// MARK: - Utils
func neopixelFlashLightSequence(color: UIColor) {
guard let neopixelPixelsCount = neopixelPixelsCount, neopixelPixelsCount > 0 else { return }
neopixelStartLightSequence(FlashLightSequence(baseColor: color, numPixels: neopixelPixelsCount), speed: 1, repeating: false, sendLightSequenceNotifications: false)
}
}

View file

@ -371,6 +371,10 @@ class AdafruitBoard {
}
// MARK: - Read Data
var neopixelPixelsCount: Int? {
return blePeripheral?.adafruitNeoPixelsCount
}
func lightLastValue() -> Float? {
return blePeripheral?.adafruitLightLastValue()
}
@ -423,7 +427,7 @@ class AdafruitBoard {
// MARK: - Receive Data
private func receiveLightData(response: Result<(Float, UUID), Error>) {
switch response {
case let .success(light, uuid):
case let .success((light, uuid)):
if isLightDataSeriesEnabled {
// Save value
@ -452,7 +456,7 @@ class AdafruitBoard {
private func receiveButtonsData(response: Result<(BlePeripheral.ButtonsState, UUID), Error>) {
switch response {
case let .success(buttonsState, uuid):
case let .success((buttonsState, uuid)):
//DLog("Buttons: \(buttonsState.slideSwitch == .left ? "":"") \(buttonsState.buttonA == .pressed ? "🔳":"🔲") \(buttonsState.buttonB == .pressed ? "🔳":"🔲") ")
// Send to delegate
@ -475,7 +479,7 @@ class AdafruitBoard {
private func receiveAccelerometerData(response: Result<(BlePeripheral.AccelerometerValue, UUID), Error>) {
switch response {
case let .success(value, uuid):
case let .success((value, uuid)):
var adjustedAcceleration = value
if accelerometerAutoAdjustOrientation {
@ -512,7 +516,7 @@ class AdafruitBoard {
private func receiveTemperatureData(response: Result<(Float, UUID), Error>) {
switch response {
case let .success(value, uuid):
case let .success((value, uuid)):
if isTemperatureDataSeriesEnabled {
// Save value
@ -541,7 +545,7 @@ class AdafruitBoard {
private func receiveHumidityData(response: Result<(Float, UUID), Error>) {
switch response {
case let .success(value, uuid):
case let .success((value, uuid)):
if isHumidityDataSeriesEnabled {
// Save value
@ -570,7 +574,7 @@ class AdafruitBoard {
private func receiveBarometricPressureData(response: Result<(Float, UUID), Error>) {
switch response {
case let .success(value, uuid):
case let .success((value, uuid)):
if isBarometricPressureDataSeriesEnabled {
// Save value
@ -599,7 +603,7 @@ class AdafruitBoard {
private func receiveSoundData(response: Result<([Double], UUID), Error>) {
switch response {
case let .success(amplitudesPerChannel, uuid):
case let .success((amplitudesPerChannel, uuid)):
if isSoundAmplitudePressureDataSeriesEnabled {
// Save value
@ -630,7 +634,7 @@ class AdafruitBoard {
private func receiveGyroscopeData(response: Result<(BlePeripheral.GyroscopeValue, UUID), Error>) {
switch response {
case let .success(value, uuid):
case let .success((value, uuid)):
if isGyroscopeDataSeriesEnabled {
// Save value
@ -659,7 +663,7 @@ class AdafruitBoard {
private func receiveQuaternionData(response: Result<(BlePeripheral.QuaternionValue, UUID), Error>) {
switch response {
case let .success(value, uuid):
case let .success((value, uuid)):
var adjustedQuaternion = value
if quaternionAutoAdjustOrientation {
if model == .clue_nRF52840 { // Clue has the quaternion sensor in the back

View file

@ -10,22 +10,21 @@ import UIKit
protocol LightSequenceGenerator {
var numFrames: Int { get }
var numPixels: Int { get }
var isCyclic: Bool { get }
func colorsForFrame(_ frame: Int) -> [[UInt8]]
}
// MARK: - Helper Base class for all LightSequences
class LightSequence {
// Constants
static let kNumPixels = 10
var numPixels: Int {
return LightSequence.kNumPixels
}
var numPixels: Int
var isCyclic: Bool {
return true
}
init(numPixels: Int) {
self.numPixels = numPixels
}
// Utils
static func preprocessColorPalette(colors: [UIColor]) -> [[UInt8]] {
@ -49,9 +48,9 @@ class RotateLightSequence: LightSequence, LightSequenceGenerator {
private var colorsBytes: [[UInt8]] // in byte format with brightness premultiplied
// MARK: -
override init() {
override init(numPixels: Int) {
colorsBytes = LightSequence.preprocessColorPalette(colors: RotateLightSequence.kColors)
super.init()
super.init(numPixels: numPixels)
}
var numFrames: Int {
@ -86,9 +85,9 @@ class PulseLightSequence: LightSequence, LightSequenceGenerator {
private var reverse = false
// MARK: -
override init() {
override init(numPixels: Int) {
colorsBytes = LightSequence.preprocessColorPalette(colors: PulseLightSequence.kColors)
super.init()
super.init(numPixels: numPixels)
}
var numFrames: Int {
@ -126,9 +125,9 @@ class SizzleLightSequence: LightSequence, LightSequenceGenerator {
private var reverse = false
// MARK: -
override init() {
override init(numPixels: Int) {
colorsBytes = LightSequence.preprocessColorPalette(colors: SizzleLightSequence.kColors)
super.init()
super.init(numPixels: numPixels)
}
var numFrames: Int {
@ -167,9 +166,9 @@ class SweepLightSequence: LightSequence, LightSequenceGenerator {
private var colorsBytes: [[UInt8]] // in byte format with brightness premultiplied
// MARK: -
override init() {
override init(numPixels: Int) {
colorsBytes = LightSequence.preprocessColorPalette(colors: SweepLightSequence.kColors)
super.init()
super.init(numPixels: numPixels)
}
var numFrames: Int {
@ -202,9 +201,9 @@ class FlashLightSequence: LightSequence, LightSequenceGenerator {
private var baseColor: UIColor
// MARK: -
init(baseColor: UIColor) {
init(baseColor: UIColor, numPixels: Int) {
self.baseColor = baseColor
super.init()
super.init(numPixels: numPixels)
}
var numFrames: Int {

View file

@ -293,8 +293,8 @@ extension HomeViewController: UITableViewDelegate {
self.show(viewController, sender: self)
CATransaction.setCompletionBlock({
// Flash neopixels with the module color
let board = AdafruitBoardsManager.shared.currentBoard
board?.neopixelStartLightSequence(FlashLightSequence(baseColor: module.color), speed: 1, repeating: false, sendLightSequenceNotifications: false)
guard let board = AdafruitBoardsManager.shared.currentBoard else { return }
board.neopixelFlashLightSequence(color: module.color)
})
CATransaction.commit()

View file

@ -98,13 +98,15 @@ class PixelsPreviewViewController: UIViewController {
// TODO: make this class more general, and add a parameter for the lightSequence
private func lightSequenceGeneratorForTag(_ tag: Int) -> LightSequenceGenerator? {
guard let numPixels = AdafruitBoardsManager.shared.currentBoard?.neopixelPixelsCount else { return nil }
let id = tag - PixelsPreviewViewController.kButtonStartTag
let lightSequence: LightSequenceGenerator?
switch id {
case 0: lightSequence = RotateLightSequence()
case 1: lightSequence = PulseLightSequence()
case 2: lightSequence = SizzleLightSequence()
case 3: lightSequence = SweepLightSequence()
case 0: lightSequence = RotateLightSequence(numPixels: numPixels)
case 1: lightSequence = PulseLightSequence(numPixels: numPixels)
case 2: lightSequence = SizzleLightSequence(numPixels: numPixels)
case 3: lightSequence = SweepLightSequence(numPixels: numPixels)
default: lightSequence = nil
}

View file

@ -56,9 +56,9 @@ struct ScreenFlowManager {
let rootNavigationViewController = mainStoryboard.instantiateViewController(withIdentifier: HomeViewController.kNavigationControllerIdentifier)
changeRootViewController(rootViewController: rootNavigationViewController) {
let board = AdafruitBoardsManager.shared.currentBoard
board?.neopixelStartLightSequence(FlashLightSequence(baseColor: .lightGray), speed: 1, repeating: false, sendLightSequenceNotifications: false)
// Flash neopixels
guard let board = AdafruitBoardsManager.shared.currentBoard else { return }
board.neopixelFlashLightSequence(color: .lightGray)
}
}
@ -68,10 +68,9 @@ struct ScreenFlowManager {
let rootNavigationViewController = mainStoryboard.instantiateViewController(withIdentifier: HomeViewController.kNavigationControllerIdentifier)
changeRootViewController(rootViewController: rootNavigationViewController) {
let board = AdafruitBoardsManager.shared.currentBoard
board?.neopixelStartLightSequence(FlashLightSequence(baseColor: .white), speed: 1, repeating: false, sendLightSequenceNotifications: false)
// Flash neopixels
guard let board = AdafruitBoardsManager.shared.currentBoard else { return }
board.neopixelFlashLightSequence(color: .white)
}
}