Skip to content

Commit 414339c

Browse files
authored
Merge pull request #35 from SomaticLabs/emojis
Added support for trigger-able patterns
2 parents a1ae9b4 + daf568f commit 414339c

File tree

24 files changed

+1614
-126
lines changed

24 files changed

+1614
-126
lines changed

SwiftyZorb.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
objects = {
88

99
/* Begin PBXBuildFile section */
10+
4035C710207F10A5003964B7 /* Trigger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4035C70F207F10A5003964B7 /* Trigger.swift */; };
1011
403783F71E5FDAA100B68645 /* SwiftyZorb.swift in Sources */ = {isa = PBXBuildFile; fileRef = 403783F61E5FDAA100B68645 /* SwiftyZorb.swift */; };
1112
403783FC1E5FDAA900B68645 /* BluetoothManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 403783F81E5FDAA900B68645 /* BluetoothManager.swift */; };
1213
403783FD1E5FDAA900B68645 /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 403783F91E5FDAA900B68645 /* Constants.swift */; };
@@ -21,6 +22,7 @@
2122
/* End PBXBuildFile section */
2223

2324
/* Begin PBXFileReference section */
25+
4035C70F207F10A5003964B7 /* Trigger.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Trigger.swift; sourceTree = "<group>"; };
2426
403783F61E5FDAA100B68645 /* SwiftyZorb.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SwiftyZorb.swift; sourceTree = "<group>"; };
2527
403783F81E5FDAA900B68645 /* BluetoothManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BluetoothManager.swift; sourceTree = "<group>"; };
2628
403783F91E5FDAA900B68645 /* Constants.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Constants.swift; sourceTree = "<group>"; };
@@ -112,6 +114,7 @@
112114
isa = PBXGroup;
113115
children = (
114116
403783F61E5FDAA100B68645 /* SwiftyZorb.swift */,
117+
4035C70F207F10A5003964B7 /* Trigger.swift */,
115118
409911721FEDCC350079C73C /* ZorbDevice.swift */,
116119
);
117120
path = Public;
@@ -203,6 +206,7 @@
203206
409911771FEDCFFD0079C73C /* ManagerError.swift in Sources */,
204207
403783FE1E5FDAA900B68645 /* Identifiers.swift in Sources */,
205208
409911751FEDCCF60079C73C /* PacketQueue.swift in Sources */,
209+
4035C710207F10A5003964B7 /* Trigger.swift in Sources */,
206210
403783FD1E5FDAA900B68645 /* Constants.swift in Sources */,
207211
409911731FEDCC350079C73C /* ZorbDevice.swift in Sources */,
208212
403783FF1E5FDAA900B68645 /* Settings.swift in Sources */,

SwiftyZorb/Info.plist

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
<key>CFBundlePackageType</key>
1616
<string>FMWK</string>
1717
<key>CFBundleShortVersionString</key>
18-
<string>2.1.0</string>
18+
<string>2.3.0</string>
1919
<key>CFBundleVersion</key>
2020
<string>$(CURRENT_PROJECT_VERSION)</string>
2121
<key>NSPrincipalClass</key>

SwiftyZorb/Internal/Identifiers.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,9 @@ internal struct Identifiers {
4040
/// `CBUUID` for identifying the basic actuator control characteristic
4141
static let ActuatorCharacteristicUUID = CBUUID(string: "A28EFC05-E9B5-4C0A-9217-1C64D051D762")
4242

43+
/// `CBUUID` for identifying the pattern trigger characteristic
44+
static let PatternTriggerCharacteristicUUID = CBUUID(string: "A28EFC08-E9B5-4C0A-9217-1C64D051D762")
45+
4346
/// `CBUUID` for identifying the Nordic UART service
4447
static let NordicUARTServiceUUID = CBUUID(string: "6E400001-B5A3-F393-E0A9-E50E24DCCA9E")
4548

SwiftyZorb/Public/SwiftyZorb.swift

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,3 +250,25 @@ public func writeJavascript(at url: URL, completion: @escaping WriteRequestCallb
250250
public func writeBytecodeString(_ bytecode: String, completion: @escaping WriteRequestCallback) {
251251
bluetoothManager.device?.writeBytecodeString(bytecode) { result in completion(result) }
252252
}
253+
254+
/**
255+
Triggers a given pre-loaded pattern on the connected Zorb device.
256+
257+
Usage Example:
258+
259+
```swift
260+
SwiftyZorb.triggerPattern(.🎊) { result in
261+
switch result {
262+
case .success:
263+
// Pattern triggered successfully
264+
case .failure(let error):
265+
// An error occurred in triggering pattern
266+
}
267+
}
268+
```
269+
270+
- Parameter pattern: The `Trigger` enumeration option of the given preloaded pattern to trigger
271+
*/
272+
public func triggerPattern(_ pattern: Trigger, completion: @escaping WriteRequestCallback) {
273+
bluetoothManager.device?.triggerPattern(pattern) { result in completion(result) }
274+
}

SwiftyZorb/Public/Trigger.swift

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
//
2+
// Trigger.swift
3+
// SwiftyZorb
4+
//
5+
// Created by Jacob Rockland on 4/11/18.
6+
// Copyright © 2018 Somatic Technologies, Inc. All rights reserved.
7+
//
8+
9+
import Foundation
10+
11+
// MARK: - Triggerable Patterns
12+
13+
/**
14+
Enumeration of predefined triggerable patterns
15+
*/
16+
public enum Trigger: String {
17+
18+
// Confetti
19+
case 🎊 = "p"
20+
21+
// Point left
22+
case 👈 = "l"
23+
24+
// Point right
25+
case 👉 = "r"
26+
27+
// Left fist
28+
case 🤛 = "s"
29+
30+
// Right fist
31+
case 🤜 = "t"
32+
33+
// Hands raised
34+
case 🙌 = "u"
35+
36+
// Waiving hand
37+
case 👋 = "a"
38+
39+
// Hushed
40+
case 😯 = "q"
41+
42+
// Flushed
43+
case 😳 = "w"
44+
45+
// Grimacing
46+
case 😬 = "f"
47+
48+
// Smiling
49+
case 😊 = "d"
50+
51+
// Grinning
52+
case 😄 = "m"
53+
54+
// Laughing
55+
case 🤣 = "k"
56+
}

SwiftyZorb/Public/ZorbDevice.swift

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -434,5 +434,30 @@ final public class ZorbDevice {
434434
self.writeBytecode(bytes) { result in completion(result) }
435435
}
436436

437+
/**
438+
Triggers a given pre-loaded pattern on the given device
439+
440+
Usage Example:
441+
442+
```swift
443+
device.triggerPattern(.🎊) { result in
444+
switch result {
445+
case .success:
446+
// Pattern triggered successfully
447+
case .failure(let error):
448+
// An error occurred in triggering pattern
449+
}
450+
}
451+
```
452+
453+
- Parameter pattern: The `Trigger` enumeration option of the given preloaded pattern to trigger
454+
*/
455+
public func triggerPattern(_ pattern: Trigger, completion: @escaping WriteRequestCallback) {
456+
let byte = Data(pattern.rawValue.utf8.map{ UInt8($0) })
457+
self.writeBytes(byte, to: Identifiers.PatternTriggerCharacteristicUUID) {
458+
result in completion(result)
459+
}
460+
}
461+
437462
}
438463

docs/Classes.html

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
<a title="Classes Reference"></a>
1414
<header>
1515
<div class="content-wrapper">
16-
<p><a href="index.html">SwiftyZorb Docs</a> (100% documented)</p>
16+
<p><a href="index.html">SwiftyZorb Docs</a> (64% documented)</p>
1717
<p class="header-right"><a href="https://github.com/SomaticLabs/SwiftyZorb"><img src="img/gh.png"/>View on GitHub</a></p>
1818
</div>
1919
</header>
@@ -35,6 +35,14 @@
3535
</li>
3636
</ul>
3737
</li>
38+
<li class="nav-group-name">
39+
<a href="Enums.html">Enumerations</a>
40+
<ul class="nav-group-tasks">
41+
<li class="nav-group-task">
42+
<a href="Enums/Trigger.html">Trigger</a>
43+
</li>
44+
</ul>
45+
</li>
3846
<li class="nav-group-name">
3947
<a href="Functions.html">Functions</a>
4048
<ul class="nav-group-tasks">
@@ -59,6 +67,9 @@
5967
<li class="nav-group-task">
6068
<a href="Functions.html#/s:10SwiftyZorb24retrieveAvailableDevicesyy0A9Bluetooth6ResultOySayAA0B6DeviceCGGc10completion_tF">retrieveAvailableDevices(completion:)</a>
6169
</li>
70+
<li class="nav-group-task">
71+
<a href="Functions.html#/s:10SwiftyZorb14triggerPatternyAA7TriggerO_y0A9Bluetooth6ResultOyytGc10completiontF">triggerPattern(_:completion:)</a>
72+
</li>
6273
<li class="nav-group-task">
6374
<a href="Functions.html#/s:10SwiftyZorb14writeActuatorsys6UInt16V8duration_s5UInt8V7topLeftAG0H5RightAG06bottomI0AG0kJ0y0A9Bluetooth6ResultOyytGc10completiontF">writeActuators(duration:topLeft:topRight:bottomLeft:bottomRight:completion:)</a>
6475
</li>
@@ -125,7 +136,7 @@ <h4>Declaration</h4>
125136
</section>
126137
</section>
127138
<section id="footer">
128-
<p>&copy; 2018 <a class="link" href="https://somaticlabs.io" target="_blank" rel="external">Somatic Labs</a>. All rights reserved. (Last updated: 2018-01-22)</p>
139+
<p>&copy; 2018 <a class="link" href="https://somaticlabs.io" target="_blank" rel="external">Somatic Labs</a>. All rights reserved. (Last updated: 2018-04-12)</p>
129140
<p>Generated by <a class="link" href="https://github.com/realm/jazzy" target="_blank" rel="external">jazzy ♪♫ v0.9.1</a>, a <a class="link" href="http://realm.io" target="_blank" rel="external">Realm</a> project.</p>
130141
</section>
131142
</article>

docs/Classes/ZorbDevice.html

Lines changed: 70 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
<a title="ZorbDevice Class Reference"></a>
1515
<header>
1616
<div class="content-wrapper">
17-
<p><a href="../index.html">SwiftyZorb Docs</a> (100% documented)</p>
17+
<p><a href="../index.html">SwiftyZorb Docs</a> (64% documented)</p>
1818
<p class="header-right"><a href="https://github.com/SomaticLabs/SwiftyZorb"><img src="../img/gh.png"/>View on GitHub</a></p>
1919
</div>
2020
</header>
@@ -36,6 +36,14 @@
3636
</li>
3737
</ul>
3838
</li>
39+
<li class="nav-group-name">
40+
<a href="../Enums.html">Enumerations</a>
41+
<ul class="nav-group-tasks">
42+
<li class="nav-group-task">
43+
<a href="../Enums/Trigger.html">Trigger</a>
44+
</li>
45+
</ul>
46+
</li>
3947
<li class="nav-group-name">
4048
<a href="../Functions.html">Functions</a>
4149
<ul class="nav-group-tasks">
@@ -60,6 +68,9 @@
6068
<li class="nav-group-task">
6169
<a href="../Functions.html#/s:10SwiftyZorb24retrieveAvailableDevicesyy0A9Bluetooth6ResultOySayAA0B6DeviceCGGc10completion_tF">retrieveAvailableDevices(completion:)</a>
6270
</li>
71+
<li class="nav-group-task">
72+
<a href="../Functions.html#/s:10SwiftyZorb14triggerPatternyAA7TriggerO_y0A9Bluetooth6ResultOyytGc10completiontF">triggerPattern(_:completion:)</a>
73+
</li>
6374
<li class="nav-group-task">
6475
<a href="../Functions.html#/s:10SwiftyZorb14writeActuatorsys6UInt16V8duration_s5UInt8V7topLeftAG0H5RightAG06bottomI0AG0kJ0y0A9Bluetooth6ResultOyytGc10completiontF">writeActuators(duration:topLeft:topRight:bottomLeft:bottomRight:completion:)</a>
6576
</li>
@@ -611,12 +622,69 @@ <h4>Parameters</h4>
611622
</section>
612623
</div>
613624
</li>
625+
<li class="item">
626+
<div>
627+
<code>
628+
<a name="/s:10SwiftyZorb0B6DeviceC14triggerPatternyAA7TriggerO_y0A9Bluetooth6ResultOyytGc10completiontF"></a>
629+
<a name="//apple_ref/swift/Method/triggerPattern(_:completion:)" class="dashAnchor"></a>
630+
<a class="token" href="#/s:10SwiftyZorb0B6DeviceC14triggerPatternyAA7TriggerO_y0A9Bluetooth6ResultOyytGc10completiontF">triggerPattern(_:completion:)</a>
631+
</code>
632+
</div>
633+
<div class="height-container">
634+
<div class="pointer-container"></div>
635+
<section class="section">
636+
<div class="pointer"></div>
637+
<div class="abstract">
638+
<p>Triggers a given pre-loaded pattern on the given device</p>
639+
640+
<p>Usage Example:</p>
641+
<pre class="highlight swift"><code> <span class="n">device</span><span class="o">.</span><span class="nf">triggerPattern</span><span class="p">(</span><span class="o">.</span><span class="n">🎊</span><span class="p">)</span> <span class="p">{</span> <span class="n">result</span> <span class="k">in</span>
642+
<span class="k">switch</span> <span class="nf">result</span> <span class="p">{</span>
643+
<span class="k">case</span> <span class="o">.</span><span class="nv">success</span><span class="p">:</span>
644+
<span class="c1">// Pattern triggered successfully</span>
645+
<span class="k">case</span> <span class="o">.</span><span class="nf">failure</span><span class="p">(</span><span class="k">let</span> <span class="nv">error</span><span class="p">):</span>
646+
<span class="c1">// An error occurred in triggering pattern</span>
647+
<span class="p">}</span>
648+
<span class="p">}</span>
649+
</code></pre>
650+
651+
</div>
652+
<div class="declaration">
653+
<h4>Declaration</h4>
654+
<div class="language">
655+
<p class="aside-title">Swift</p>
656+
<pre class="highlight swift"><code><span class="kd">public</span> <span class="kd">func</span> <span class="nf">triggerPattern</span><span class="p">(</span><span class="n">_</span> <span class="nv">pattern</span><span class="p">:</span> <span class="kt"><a href="../Enums/Trigger.html">Trigger</a></span><span class="p">,</span> <span class="nv">completion</span><span class="p">:</span> <span class="kd">@escaping</span> <span class="kt">WriteRequestCallback</span><span class="p">)</span></code></pre>
657+
658+
</div>
659+
</div>
660+
<div>
661+
<h4>Parameters</h4>
662+
<table class="graybox">
663+
<tbody>
664+
<tr>
665+
<td>
666+
<code>
667+
<em>pattern</em>
668+
</code>
669+
</td>
670+
<td>
671+
<div>
672+
<p>The <code><a href="../Enums/Trigger.html">Trigger</a></code> enumeration option of the given preloaded pattern to trigger</p>
673+
</div>
674+
</td>
675+
</tr>
676+
</tbody>
677+
</table>
678+
</div>
679+
</section>
680+
</div>
681+
</li>
614682
</ul>
615683
</div>
616684
</section>
617685
</section>
618686
<section id="footer">
619-
<p>&copy; 2018 <a class="link" href="https://somaticlabs.io" target="_blank" rel="external">Somatic Labs</a>. All rights reserved. (Last updated: 2018-01-22)</p>
687+
<p>&copy; 2018 <a class="link" href="https://somaticlabs.io" target="_blank" rel="external">Somatic Labs</a>. All rights reserved. (Last updated: 2018-04-12)</p>
620688
<p>Generated by <a class="link" href="https://github.com/realm/jazzy" target="_blank" rel="external">jazzy ♪♫ v0.9.1</a>, a <a class="link" href="http://realm.io" target="_blank" rel="external">Realm</a> project.</p>
621689
</section>
622690
</article>

0 commit comments

Comments
 (0)