Commit b7dbb6c5 authored by Alex Moore's avatar Alex Moore
Browse files

Integrated UI with scanner

parent 5739ca99
......@@ -11,10 +11,13 @@
D9CA44271A8988EF002039E1 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = D9CA44261A8988EF002039E1 /* AppDelegate.m */; };
D9CA442F1A8988EF002039E1 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = D9CA442E1A8988EF002039E1 /* Images.xcassets */; };
D9CA443E1A8988EF002039E1 /* CaptuvoSDKDemoTests.m in Sources */ = {isa = PBXBuildFile; fileRef = D9CA443D1A8988EF002039E1 /* CaptuvoSDKDemoTests.m */; };
D9CA444A1A898952002039E1 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D9CA44491A898952002039E1 /* ViewController.m */; };
D9CA444D1A89898D002039E1 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = D9CA444C1A89898D002039E1 /* Main.storyboard */; };
D9CA44551A898ABF002039E1 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = D9CA44301A8988EF002039E1 /* LaunchScreen.xib */; };
D9D2F5A91A8B1A2100CED28A /* libCaptuvoSDK.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D9D2F5A81A8B1A2100CED28A /* libCaptuvoSDK.a */; };
EF321C8C1A9D19E100567A08 /* CaptuvoViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = EF321C8B1A9D19E100567A08 /* CaptuvoViewController.m */; };
EF321C8F1A9D1A5600567A08 /* CaptuvoScannerController.m in Sources */ = {isa = PBXBuildFile; fileRef = EF321C8E1A9D1A5600567A08 /* CaptuvoScannerController.m */; };
EF321C921A9D1A8500567A08 /* CaptuvoOptionsController.m in Sources */ = {isa = PBXBuildFile; fileRef = EF321C911A9D1A8500567A08 /* CaptuvoOptionsController.m */; };
EF3928921A9D1496008D6D52 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EF3928911A9D1495008D6D52 /* AudioToolbox.framework */; };
EF3A94521A91565B00884373 /* ExternalAccessory.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EF3A94511A91565B00884373 /* ExternalAccessory.framework */; };
EF3A94541A91566D00884373 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EF3A94531A91566D00884373 /* UIKit.framework */; };
EF3A94561A91567B00884373 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EF3A94551A91567B00884373 /* Foundation.framework */; };
......@@ -42,11 +45,16 @@
D9CA443C1A8988EF002039E1 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
D9CA443D1A8988EF002039E1 /* CaptuvoSDKDemoTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CaptuvoSDKDemoTests.m; sourceTree = "<group>"; };
D9CA44471A898952002039E1 /* Captuvo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Captuvo.h; sourceTree = "<group>"; };
D9CA44481A898952002039E1 /* ViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = "<group>"; };
D9CA44491A898952002039E1 /* ViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = ViewController.m; path = ../ViewController.m; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objc; };
D9CA444C1A89898D002039E1 /* Main.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = Main.storyboard; path = ../Main.storyboard; sourceTree = "<group>"; };
D9CA44521A898A9C002039E1 /* libCaptuvoSDK_Emulator.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libCaptuvoSDK_Emulator.a; path = ../libCaptuvoSDK_Emulator.a; sourceTree = "<group>"; };
D9D2F5A81A8B1A2100CED28A /* libCaptuvoSDK.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libCaptuvoSDK.a; sourceTree = "<group>"; };
EF321C8A1A9D19E100567A08 /* CaptuvoViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CaptuvoViewController.h; sourceTree = "<group>"; };
EF321C8B1A9D19E100567A08 /* CaptuvoViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CaptuvoViewController.m; path = ../CaptuvoViewController.m; sourceTree = "<group>"; };
EF321C8D1A9D1A5600567A08 /* CaptuvoScannerController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CaptuvoScannerController.h; sourceTree = "<group>"; };
EF321C8E1A9D1A5600567A08 /* CaptuvoScannerController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CaptuvoScannerController.m; path = ../CaptuvoScannerController.m; sourceTree = "<group>"; };
EF321C901A9D1A8500567A08 /* CaptuvoOptionsController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CaptuvoOptionsController.h; path = CaptuvoSDKDemo/CaptuvoOptionsController.h; sourceTree = "<group>"; };
EF321C911A9D1A8500567A08 /* CaptuvoOptionsController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CaptuvoOptionsController.m; sourceTree = "<group>"; };
EF3928911A9D1495008D6D52 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; };
EF3A94511A91565B00884373 /* ExternalAccessory.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ExternalAccessory.framework; path = System/Library/Frameworks/ExternalAccessory.framework; sourceTree = SDKROOT; };
EF3A94531A91566D00884373 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
EF3A94551A91567B00884373 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
......@@ -57,6 +65,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
EF3928921A9D1496008D6D52 /* AudioToolbox.framework in Frameworks */,
EF3A94561A91567B00884373 /* Foundation.framework in Frameworks */,
EF3A94541A91566D00884373 /* UIKit.framework in Frameworks */,
EF3A94521A91565B00884373 /* ExternalAccessory.framework in Frameworks */,
......@@ -77,6 +86,7 @@
D9CA44151A8988EF002039E1 = {
isa = PBXGroup;
children = (
EF3928911A9D1495008D6D52 /* AudioToolbox.framework */,
EF3A94551A91567B00884373 /* Foundation.framework */,
EF3A94531A91566D00884373 /* UIKit.framework */,
EF3A94511A91565B00884373 /* ExternalAccessory.framework */,
......@@ -101,7 +111,9 @@
D9CA44501A8989C2002039E1 /* Frameworks */,
D9CA444B1A898965002039E1 /* Include */,
D9CA44261A8988EF002039E1 /* AppDelegate.m */,
D9CA44491A898952002039E1 /* ViewController.m */,
EF321C8B1A9D19E100567A08 /* CaptuvoViewController.m */,
EF321C8E1A9D1A5600567A08 /* CaptuvoScannerController.m */,
EF321C911A9D1A8500567A08 /* CaptuvoOptionsController.m */,
D9CA444C1A89898D002039E1 /* Main.storyboard */,
D9CA442E1A8988EF002039E1 /* Images.xcassets */,
D9CA44301A8988EF002039E1 /* LaunchScreen.xib */,
......@@ -141,7 +153,9 @@
children = (
D9CA44251A8988EF002039E1 /* AppDelegate.h */,
D9CA44471A898952002039E1 /* Captuvo.h */,
D9CA44481A898952002039E1 /* ViewController.h */,
EF321C8A1A9D19E100567A08 /* CaptuvoViewController.h */,
EF321C8D1A9D1A5600567A08 /* CaptuvoScannerController.h */,
EF321C901A9D1A8500567A08 /* CaptuvoOptionsController.h */,
);
name = Include;
path = ..;
......@@ -261,9 +275,11 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
D9CA444A1A898952002039E1 /* ViewController.m in Sources */,
EF321C8C1A9D19E100567A08 /* CaptuvoViewController.m in Sources */,
D9CA44271A8988EF002039E1 /* AppDelegate.m in Sources */,
D9CA44241A8988EF002039E1 /* main.m in Sources */,
EF321C8F1A9D1A5600567A08 /* CaptuvoScannerController.m in Sources */,
EF321C921A9D1A8500567A08 /* CaptuvoOptionsController.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
......
......@@ -8,7 +8,7 @@
#import "AppDelegate.h"
#import "ViewController.h"
#import "CaptuvoViewController.h"
@interface AppDelegate ()
......
//
// CaptuvoOptionsController.h
// CaptuvoSDKDemo
//
// Created by PLUC SeniorDesign on 2/24/15.
// Copyright (c) 2015 Anthony J. Carno. All rights reserved.
//
#import "CaptuvoViewController.h"
@interface CaptuvoOptionsController : CaptuvoViewController
@property (weak, nonatomic) IBOutlet UIStepper *sledSoundStepper;
@property (weak, nonatomic) IBOutlet UILabel *sledSoundLabel;
@end
//
// CaptuvoOptionsController.m
// CaptuvoSDKDemo
//
// Created by PLUC SeniorDesign on 2/24/15.
// Copyright (c) 2015 Anthony J. Carno. All rights reserved.
//
#import "CaptuvoOptionsController.h"
@interface CaptuvoOptionsController ()
@end
@implementation CaptuvoOptionsController
int sled_volume;
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
[[Captuvo sharedCaptuvoDevice] requestDecoderGoodReadBeeperVolumeStatus];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
/**
@brief This method identifies the current sled volume and then sets the label and the stepper to the correct values.
*/
- (void)decoderGoodReadBeeperVolumeStatus:(BeeperVolume)volume
{
switch (volume) {
case BeeperVolumeHigh:
sled_volume = 3;
self.sledSoundLabel.text = @"High";
break;
case BeeperVolumeMedium:
sled_volume = 2;
self.sledSoundLabel.text = @"Medium";
break;
case BeeperVolumeLow:
sled_volume = 1;
self.sledSoundLabel.text = @"Low";
break;
case BeeperVolumeOff:
sled_volume = 0;
self.sledSoundLabel.text = @"Silent";
break;
default:
break;
}
self.sledSoundStepper.value = (double)sled_volume;
}
/**
@brief This method changes the sled volume between high, medium, low, and silent.
@param (id)sender - tied to button
@return IBAction - tied to button
*/
- (IBAction)changeSledVolume:(id)sender {
sled_volume = (int)self.sledSoundStepper.value;
switch (sled_volume) {
case 0:
[[Captuvo sharedCaptuvoDevice] setDecoderGoodReadBeeperVolume:BeeperVolumeOff persistSetting:NO];
self.sledSoundLabel.text = @"Silent";
break;
case 1:
[[Captuvo sharedCaptuvoDevice] setDecoderGoodReadBeeperVolume:BeeperVolumeLow persistSetting:NO];
self.sledSoundLabel.text = @"Low";
break;
case 2:
[[Captuvo sharedCaptuvoDevice] setDecoderGoodReadBeeperVolume:BeeperVolumeMedium persistSetting:NO];
self.sledSoundLabel.text = @"Medium";
break;
case 3:
[[Captuvo sharedCaptuvoDevice] setDecoderGoodReadBeeperVolume:BeeperVolumeHigh persistSetting:NO];
self.sledSoundLabel.text = @"High";
break;
default:
break;
}
}
/*
#pragma mark - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
// Get the new view controller using [segue destinationViewController].
// Pass the selected object to the new view controller.
}
*/
@end
//
// CaptuvoScannerController.h
// CaptuvoSDKDemo
//
// Created by PLUC SeniorDesign on 2/24/15.
// Copyright (c) 2015 Anthony J. Carno. All rights reserved.
//
#import "CaptuvoViewController.h"
@interface CaptuvoScannerController : CaptuvoViewController
@property (weak, nonatomic) IBOutlet UILabel *barcodeLabel;
@end
//
// ViewController.m
// TestApp3_ScannerCalls
// CaptuvoScannerController.m
// CaptuvoSDKDemo
//
// Created by Anthony J. Carno on 2/4/15.
// Created by PLUC SeniorDesign on 2/24/15.
// Copyright (c) 2015 Anthony J. Carno. All rights reserved.
//
#import "ViewController.h"
#import "CaptuvoScannerController.h"
@interface ViewController ()
@interface CaptuvoScannerController ()
@end
@implementation ViewController
@implementation CaptuvoScannerController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[self initDecoder];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
[[Captuvo sharedCaptuvoDevice] removeCaptuvoDelegate:self];
}
- (void)initCaptuvoSDK
/**
@brief This method attempts to establish a connection to the Captuvo SL22 Enterprise Sled and start the decoder hardware. A UIAlertView prompts the user if a connection cannot be established. Additionally, this method adds the current class (self) as a CaptuvoDelegate.
@return ProtocolConnectionStatus - the connection status of the Captuvo sled
*/
- (void)initDecoder
{
[[Captuvo sharedCaptuvoDevice] addCaptuvoDelegate:self] ;
ProtocolConnectionStatus status = [[Captuvo sharedCaptuvoDevice] startDecoderHardware];
// switch (status) {
// case ProtocolConnectionStatusAlreadyConnected:
// printf("ProtocolConnectionStatusAlreadyConnected\n");
// break;
// case ProtocolConnectionStatusBatteryDepleted:
// printf("ProtocolConnectionStatusBatteryDepleted\n");
// break;
// case ProtocolConnectionStatusConnected:
// printf("ProtocolConnectionStatusConnected\n");
// break;
// case ProtocolConnectionStatusUnableToConnect:
// printf("ProtocolConnectionStatusUnableToConnect\n");
// break;
// case ProtocolConnectionStatusUnableToConnectIncompatiableSledFirmware:
// printf("ProtocolConnectionStatusUnableToConnectIncompatiableSledFirmware\n");
// break;
// default:
// printf("ERROR\n");
// break;
// }
// switch (status) {
// case ProtocolConnectionStatusAlreadyConnected:
// printf("ProtocolConnectionStatusAlreadyConnected\n");
// break;
// case ProtocolConnectionStatusBatteryDepleted:
// printf("ProtocolConnectionStatusBatteryDepleted\n");
// break;
// case ProtocolConnectionStatusConnected:
// printf("ProtocolConnectionStatusConnected\n");
// break;
// case ProtocolConnectionStatusUnableToConnect:
// printf("ProtocolConnectionStatusUnableToConnect\n");
// break;
// case ProtocolConnectionStatusUnableToConnectIncompatiableSledFirmware:
// printf("ProtocolConnectionStatusUnableToConnectIncompatiableSledFirmware\n");
// break;
// default:
// printf("ERROR\n");
// break;
// }
if (status == ProtocolConnectionStatusUnableToConnect) {
UIAlertView *sledAlert = [[UIAlertView alloc] initWithTitle:@"Connection Error"
message:@"Unable to communicate with sled - unknown communication error."
......@@ -74,30 +79,30 @@
otherButtonTitles:nil];
[sledAlert show];
}
[[Captuvo sharedCaptuvoDevice] requestBatteryVoltage] ;
[[Captuvo sharedCaptuvoDevice] requestChargeStatus] ;
//[[Captuvo sharedCaptuvoDevice] requestBatteryVoltage] ;
//[[Captuvo sharedCaptuvoDevice] requestChargeStatus] ;
}
- (IBAction)connectToSled:(id)sender {
[self initCaptuvoSDK];
self.sledNameLabel.text = [[Captuvo sharedCaptuvoDevice] getCaptuvoName];
self.sledSerialNumberLabel.text = [[Captuvo sharedCaptuvoDevice] getCaptuvoSerialNumber];
self.sledHardwareRevisionLabel.text = [[Captuvo sharedCaptuvoDevice] getCaptuvoHardwareRevision];
}
- (IBAction)toggleSledBeeper:(id)sender {
if (!self.sledBeeperSwitch.on) {
[[Captuvo sharedCaptuvoDevice] setDecoderGoodReadBeeperVolume:BeeperVolumeOff persistSetting:NO];
}
else if (self.sledBeeperSwitch.on) {
[[Captuvo sharedCaptuvoDevice] setDecoderGoodReadBeeperVolume:BeeperVolumeMedium persistSetting:NO];
}
}
/**
@brief This method handles the barcode data returned by the scanner
@param (NSString *)data - the scanned barcode (in text form)
*/
- (void) decoderDataReceived:(NSString *)data {
self.barcodeLabel.textAlignment = NSTextAlignmentLeft;
self.barcodeLabel.text = data;
}
/*
#pragma mark - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
// Get the new view controller using [segue destinationViewController].
// Pass the selected object to the new view controller.
}
*/
@end
//
// CaptuvoViewController.h
// CaptuvoSDKDemo
//
// Created by PLUC SeniorDesign on 2/24/15.
// Copyright (c) 2015 Anthony J. Carno. All rights reserved.
//
#import <UIKit/UIKit.h>
#import "Captuvo.h"
@interface CaptuvoViewController : UIViewController<CaptuvoEventsProtocol>
@end
//
// CaptuvoViewController.m
// CaptuvoSDKDemo
//
// Created by PLUC SeniorDesign on 2/24/15.
// Copyright (c) 2015 Anthony J. Carno. All rights reserved.
//
#import "CaptuvoViewController.h"
@interface CaptuvoViewController ()
@end
@implementation CaptuvoViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
[[Captuvo sharedCaptuvoDevice] addCaptuvoDelegate:self] ;
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
[[Captuvo sharedCaptuvoDevice] removeCaptuvoDelegate:self];
}
/*
#pragma mark - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
// Get the new view controller using [segue destinationViewController].
// Pass the selected object to the new view controller.
}
*/
@end
......@@ -2,13 +2,14 @@
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="6254" systemVersion="14C109" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="BYZ-38-t0r">
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="6247"/>
<capability name="Alignment constraints to the first baseline" minToolsVersion="6.0"/>
<capability name="Constraints to layout margins" minToolsVersion="6.0"/>
</dependencies>
<scenes>
<!--View Controller-->
<!--Captuvo Scanner Controller-->
<scene sceneID="tne-QT-ifu">
<objects>
<viewController id="BYZ-38-t0r" customClass="ViewController" sceneMemberID="viewController">
<viewController id="BYZ-38-t0r" customClass="CaptuvoScannerController" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="y3c-jy-aDJ"/>
<viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/>
......@@ -17,148 +18,138 @@
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Sled Name:" lineBreakMode="wordWrap" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="az2-Ss-aQb">
<rect key="frame" x="16" y="80" width="210" height="25"/>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="&lt;- (Press either button on sled) -&gt;" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Xap-xR-5fF">
<rect key="frame" x="168" y="272" width="264" height="55"/>
<constraints>
<constraint firstAttribute="width" constant="210" id="cYP-HQ-bzN"/>
<constraint firstAttribute="height" constant="55" id="AQy-qF-SfB"/>
<constraint firstAttribute="width" constant="264" id="eLd-Cz-TUJ"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<nil key="highlightedColor"/>
</label>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="vBZ-Vb-gkg">
<rect key="frame" x="243" y="40" width="114" height="22"/>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Ack-GN-IJf">
<rect key="frame" x="265" y="438" width="71" height="30"/>
<constraints>
<constraint firstAttribute="height" constant="22" id="2fr-Fv-lIF"/>
<constraint firstAttribute="width" constant="114" id="MdS-JM-9MW"/>
<constraint firstAttribute="width" constant="71" id="dQg-Ug-qTb"/>
</constraints>
<state key="normal" title="Connect to Sled"/>
<state key="normal" title="Options">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<connections>
<action selector="connectToSled:" destination="BYZ-38-t0r" eventType="touchDown" id="P3I-Cu-e7M"/>
<segue destination="xcG-dk-skD" kind="show" id="dSM-O8-a57"/>
</connections>
</button>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Sled Serial Number:" lineBreakMode="wordWrap" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="MYS-u4-lg7">
<rect key="frame" x="16" y="160" width="210" height="25"/>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Barcode:" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="tm2-Im-Urw">
<rect key="frame" x="257" y="208" width="87" height="25"/>
<constraints>
<constraint firstAttribute="height" constant="25" id="tkn-kO-pea"/>
<constraint firstAttribute="width" constant="87" id="lnl-RE-mWA"/>
<constraint firstAttribute="height" constant="25" id="oWn-wd-gPf"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Sled Hardware Revision:" lineBreakMode="wordWrap" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="znO-Rl-AXT">
<rect key="frame" x="16" y="240" width="210" height="25"/>
<constraints>
<constraint firstAttribute="height" constant="25" id="loS-Yg-fhT"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Not connected" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="STb-jJ-tvn">
<rect key="frame" x="16" y="273" width="350" height="25"/>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
<constraints>
<constraint firstAttribute="height" constant="25" id="6F1-Uu-Zs9"/>
<constraint firstItem="Xap-xR-5fF" firstAttribute="centerX" secondItem="Ack-GN-IJf" secondAttribute="centerX" id="RlC-VF-HUZ"/>
<constraint firstItem="Ack-GN-IJf" firstAttribute="centerX" secondItem="8bC-Xf-vdC" secondAttribute="centerX" id="Tve-lY-e6I"/>
<constraint firstItem="tm2-Im-Urw" firstAttribute="top" secondItem="y3c-jy-aDJ" secondAttribute="bottom" constant="188" id="a78-35-xRX"/>
<constraint firstItem="Xap-xR-5fF" firstAttribute="top" secondItem="tm2-Im-Urw" secondAttribute="bottom" constant="39" id="lIE-1K-Nd4"/>
<constraint firstItem="tm2-Im-Urw" firstAttribute="centerX" secondItem="Xap-xR-5fF" secondAttribute="centerX" id="rIg-kK-RzW"/>
<constraint firstItem="wfy-db-euE" firstAttribute="top" secondItem="Ack-GN-IJf" secondAttribute="bottom" constant="132" id="tPS-j6-ZlG"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Not connected" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="rc3-6P-qxV">
<rect key="frame" x="16" y="193" width="350" height="25"/>
</view>
<connections>
<outlet property="barcodeLabel" destination="Xap-xR-5fF" id="y44-Go-nZ3"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
</objects>
</scene>
<!--Captuvo Options Controller-->
<scene sceneID="VT2-LB-nru">
<objects>
<viewController id="xcG-dk-skD" customClass="CaptuvoOptionsController" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="biD-Rb-H3A"/>
<viewControllerLayoutGuide type="bottom" id="Fd2-zu-4sN"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="zKp-Rt-msY">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<stepper opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" contentHorizontalAlignment="center" contentVerticalAlignment="center" value="2" maximumValue="4" translatesAutoresizingMaskIntoConstraints="NO" id="MMn-VQ-Lbm">
<rect key="frame" x="128" y="148" width="94" height="29"/>
<connections>
<action selector="changeSledVolume:" destination="xcG-dk-skD" eventType="valueChanged" id="DbV-An-YFO"/>
</connections>
</stepper>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Sled Volume:" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="xg4-fB-V4K">
<rect key="frame" x="16" y="148" width="104" height="29"/>
<constraints>
<constraint firstAttribute="height" constant="25" id="zZK-23-QJ7"/>
<constraint firstAttribute="width" constant="104" id="ogd-G5-vv4"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Not connected" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="DIo-3K-gQd">
<rect key="frame" x="16" y="113" width="350" height="25"/>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Sled Options" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="6hE-VK-BFq">
<rect key="frame" x="246" y="28" width="109" height="21"/>
<constraints>
<constraint firstAttribute="height" constant="25" id="981-hk-bjy"/>
<constraint firstAttribute="width" constant="350" id="qJH-1N-rjp"/>
<constraint firstAttribute="width" constant="109" id="2PS-T4-kkG"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Barcode:" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="tm2-Im-Urw">
<rect key="frame" x="16" y="424" width="210" height="25"/>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="adS-nN-DHV">
<rect key="frame" x="230" y="148" width="114" height="29"/>
<constraints>
<constraint firstAttribute="height" constant="25" id="qb1-8L-a26"/>
<constraint firstAttribute="width" constant="114" id="yHX-1n-bjP"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled=