Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
Companion App iOS
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
3
Issues
3
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Packages & Registries
Packages & Registries
Container Registry
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
card10
Companion App iOS
Commits
ee9f76c8
Commit
ee9f76c8
authored
Aug 24, 2019
by
Philip Brechler
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'devel-melle' into 'master'
Refactoring, connection handling See merge request
!18
parents
841d70a8
fa759dd6
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
68 additions
and
34 deletions
+68
-34
card10badge/Bluetooth/AboveLEDs.swift
card10badge/Bluetooth/AboveLEDs.swift
+11
-4
card10badge/Bluetooth/BluetoothManager.swift
card10badge/Bluetooth/BluetoothManager.swift
+34
-8
card10badge/Bluetooth/ChunkedDataReader.swift
card10badge/Bluetooth/ChunkedDataReader.swift
+1
-1
card10badge/Bluetooth/DataTransferManager.swift
card10badge/Bluetooth/DataTransferManager.swift
+6
-6
card10badge/Conncted/ConnectedViewController.swift
card10badge/Conncted/ConnectedViewController.swift
+4
-3
card10badge/Hatchery/HatcheryDetailViewController.swift
card10badge/Hatchery/HatcheryDetailViewController.swift
+12
-12
No files found.
card10badge/Bluetooth/AboveLEDs.swift
View file @
ee9f76c8
...
...
@@ -23,13 +23,20 @@ struct AboveLEDs {
return
result
}
public
static
func
randomRGB
()
->
AboveLEDs
{
var
LEDs
:
[
RGBLED
]
=
[]
private
static
func
combineValues
(
_
rgbValue
:
()
->
RGBLED
)
->
AboveLEDs
{
var
LEDs
:
[
RGBLED
]
=
[]
for
_
in
0
..<
11
{
LEDs
.
append
(
RGBLED
.
randomRGB
())
LEDs
.
append
(
rgbValue
())
}
return
AboveLEDs
(
LEDs
:
LEDs
)
}
public
static
func
randomRGB
()
->
AboveLEDs
{
return
combineValues
({
RGBLED
.
randomRGB
()
})
}
public
static
func
off
()
->
AboveLEDs
{
return
combineValues
({
RGBLED
(
red
:
0
,
green
:
0
,
blue
:
0
)
})
}
}
card10badge/Bluetooth/BluetoothManager.swift
View file @
ee9f76c8
...
...
@@ -158,12 +158,12 @@ class BluetoothManager: NSObject, CBCentralManagerDelegate, CBPeripheralDelegate
}
public
func
sendFileData
(
data
:
Data
,
fileName
:
String
)
{
guard
self
.
connectedPeripheral
!=
nil
else
{
subscribers
.
forEach
{
$0
.
value
?
.
didFailToSendFile
()
}
return
}
self
.
dataTransferManager
=
DataTransferManager
(
self
)
self
.
subscribeToRxChannel
()
...
...
@@ -249,8 +249,8 @@ class BluetoothManager: NSObject, CBCentralManagerDelegate, CBPeripheralDelegate
guard
let
aboveCharacteristic
=
self
.
findCharacteristic
(
on
:
peripheral
,
forServiceUUID
:
card10ServiceUUID
,
forCharacteristicUUID
:
card10LedsAboveCharacteristic
)
else
{
print
(
"setLEDsAbove could not find card10RocketsCharacteristic!"
)
return
print
(
"setLEDsAbove could not find card10RocketsCharacteristic!"
)
return
}
self
.
connectedPeripheral
?
.
writeValue
(
aboveLEDs
.
data
,
...
...
@@ -321,10 +321,9 @@ class BluetoothManager: NSObject, CBCentralManagerDelegate, CBPeripheralDelegate
func
centralManager
(
_
central
:
CBCentralManager
,
didConnect
peripheral
:
CBPeripheral
)
{
print
(
"did connect:
\(
peripheral
.
name
??
"<nil>"
)
\(
peripheral
.
identifier
)
)"
)
self
.
connectedPeripheral
=
peripheral
peripheral
.
delegate
=
self
peripheral
.
discoverServices
([
card10ServiceUUID
,
card10RxTxServiceUUID
])
self
.
connectedPeripheral
=
peripheral
subscribers
.
forEach
{
$0
.
value
?
.
didConnectToPeripheal
(
FoundPeripheral
(
peripheral
:
peripheral
,
advertisementName
:
nil
,
rssi
:
nil
))
}
}
func
centralManager
(
_
central
:
CBCentralManager
,
didDisconnectPeripheral
peripheral
:
CBPeripheral
,
error
:
Error
?)
{
...
...
@@ -360,8 +359,35 @@ class BluetoothManager: NSObject, CBCentralManagerDelegate, CBPeripheralDelegate
func
peripheral
(
_
peripheral
:
CBPeripheral
,
didDiscoverCharacteristicsFor
service
:
CBService
,
error
:
Error
?)
{
print
(
"did didDiscoverCharacteristicsFor:
\(
service
.
uuid
)
\(
service
.
characteristics
!
)
)"
)
// FIXME: pairing is broken ATM
// pairWithCard10Badge(peripheral: peripheral)
// make sure that all characteristic are discovered, if yes announce to subscribers
let
card10ServiceIsComplete
=
connectedPeripheral
?
.
services
?
.
filter
{
$0
.
uuid
.
uuidString
==
card10ServiceUUID
.
uuidString
}
.
first
?
.
characteristics
?
.
allSatisfy
{
[
card10TimeCharacteristic
,
card10VibrateCharacteristic
,
card10RocketsCharacteristic
,
card10BackgroundLedBottomLeftCharacteristic
,
card10BackgroundLedBottomRightCharacteristic
,
card10BackgroundLedTopRightCharacteristic
,
card10BackgroundLedTopLeftCharacteristic
,
card10LedsDimBottomCharacteristic
,
card10LedsDimTopCharacteristic
,
card10LedsAboveCharacteristic
,
card10SingleRgbLedCharacteristic
,
card10LightSensorCharacteristic
]
.
contains
(
$0
.
uuid
)
}
??
false
let
card10RxTxServiceIsComplete
=
connectedPeripheral
?
.
services
?
.
filter
{
$0
.
uuid
.
uuidString
==
card10RxTxServiceUUID
.
uuidString
}
.
first
?
.
characteristics
?
.
allSatisfy
{
[
card10TXWriteCharacteristicUUID
,
card10RXReadCharacteristicUUID
]
.
contains
(
$0
.
uuid
)
}
??
false
if
card10ServiceIsComplete
&&
card10RxTxServiceIsComplete
{
subscribers
.
forEach
{
$0
.
value
?
.
didConnectToPeripheal
(
FoundPeripheral
(
peripheral
:
peripheral
,
advertisementName
:
nil
,
rssi
:
nil
))
}
}
}
func
peripheral
(
_
peripheral
:
CBPeripheral
,
didUpdateValueFor
characteristic
:
CBCharacteristic
,
error
:
Error
?)
{
...
...
card10badge/Bluetooth/ChunkedDataReader.swift
View file @
ee9f76c8
...
...
@@ -25,7 +25,7 @@ class ChunkedDataReader: NSObject {
guard
dataToReturn
!.
count
>
0
else
{
return
nil
}
currentOffset
+=
packageSize
return
dataToReturn
}
...
...
card10badge/Bluetooth/DataTransferManager.swift
View file @
ee9f76c8
...
...
@@ -96,7 +96,7 @@ class DataTransferManager: NSObject {
sendPackage
(
type
:
.
CHUNK
,
payload
:
self
.
currentChunkToSend
,
offset
:
self
.
chunkedReader
!.
currentOffset
-
20
)
retryCount
+=
1
}
else
{
self
.
sendPackage
(
type
:
.
ERROR
,
payload
:
nil
,
offset
:
0
)
self
.
sendPackage
(
type
:
.
ERROR
,
payload
:
nil
,
offset
:
0
)
}
case
.
FINISH
?:
...
...
@@ -111,7 +111,7 @@ class DataTransferManager: NSObject {
case
.
ERROR
?:
// fucked up, send error ack
print
(
"Error from card10, message "
,
String
(
data
:
package
,
encoding
:
.
ascii
)
!
)
print
(
"Error from card10, message "
,
String
(
data
:
package
,
encoding
:
.
ascii
)
!
)
self
.
sendPackage
(
type
:
.
ERROR_ACK
,
payload
:
nil
,
offset
:
0
)
delegate
?
.
didFailToSendFile
()
break
...
...
@@ -181,11 +181,11 @@ class DataTransferManager: NSObject {
}
func
checkChunkWithResponse
(
_
response
:
Data
)
->
Bool
{
return
true
//FIXME: This CRC32 implementation doesn't work. Disabled for now
let
responseInUInt32
=
response
.
withUnsafeBytes
{
$0
.
load
(
as
:
UInt8
.
self
)
}
let
responseInUInt32
=
response
.
withUnsafeBytes
{
$0
.
load
(
as
:
UInt8
.
self
)
}
let
chunkInUInt8
=
[
UInt8
](
self
.
currentChunkToSend
!
)
let
checksum
=
CRC32
.
checksum
(
bytes
:
chunkInUInt8
)
if
responseInUInt32
==
checksum
{
...
...
@@ -198,7 +198,7 @@ class DataTransferManager: NSObject {
guard
chunkedReader
!=
nil
&&
dataToSend
!=
nil
else
{
return
}
let
progress
=
Double
(
chunkedReader
!.
currentOffset
)
/
Double
(
self
.
dataToSend
!.
count
)
print
(
"Progress sending file: "
,
progress
)
print
(
"Progress sending file: "
,
progress
)
delegate
?
.
didUpdateProgress
(
progress
)
}
}
card10badge/Conncted/ConnectedViewController.swift
View file @
ee9f76c8
...
...
@@ -113,10 +113,11 @@ extension ConnectedViewController {
@IBAction
func
disconnectButtonAction
(
sender
:
UIButton
)
{
pollingTimer
?
.
cancel
()
let
rgbOff
=
RGBLED
.
init
(
r
:
0
,
g
:
0
,
b
:
0
)
let
rgbOff
=
RGBLED
.
init
(
r
ed
:
0
,
green
:
0
,
blue
:
0
)
BluetoothManager
.
sharedInstance
()
.
setBackgroundLEDs
(
topLeft
:
rgbOff
,
topRight
:
rgbOff
,
bottomRight
:
rgbOff
,
bottomLeft
:
rgbOff
)
BluetoothManager
.
sharedInstance
()
.
setLEDsAbove
(
a
:
rgbOff
,
b
:
rgbOff
,
c
:
rgbOff
,
d
:
rgbOff
,
e
:
rgbOff
,
f
:
rgbOff
,
g
:
rgbOff
,
h
:
rgbOff
,
i
:
rgbOff
,
j
:
rgbOff
,
k
:
rgbOff
)
DispatchQueue
.
main
.
asyncAfter
(
deadline
:
.
now
()
+
1.0
)
{
BluetoothManager
.
sharedInstance
()
.
disconnectFromCard10Badge
()
BluetoothManager
.
sharedInstance
()
.
setLEDsAbove
(
AboveLEDs
.
off
())
DispatchQueue
.
main
.
asyncAfter
(
deadline
:
.
now
()
+
1.0
)
{
BluetoothManager
.
sharedInstance
()
.
disconnectFromCard10Badge
()
}
}
}
...
...
card10badge/Hatchery/HatcheryDetailViewController.swift
View file @
ee9f76c8
...
...
@@ -8,7 +8,7 @@
import
UIKit
file
private
struct
DataToTransfer
:
Hashable
{
private
struct
DataToTransfer
:
Hashable
{
let
fileName
:
String
let
data
:
Data
}
...
...
@@ -62,20 +62,20 @@ class HatcheryDetailViewController: UIViewController, HatcheryClientDelegate, Bl
let
fileContent
=
FileManager
.
default
.
contents
(
atPath
:
fileURL
.
path
)
let
fileName
=
FileManager
.
default
.
displayName
(
atPath
:
fileURL
.
path
)
guard
fileContent
!=
nil
else
{
return
}
self
.
filesToTransfer
.
append
(
DataToTransfer
(
fileName
:
String
.
init
(
format
:
"apps/%@/%@"
,
folderName
,
fileName
),
data
:
fileContent
!
))
self
.
filesToTransfer
.
append
(
DataToTransfer
(
fileName
:
String
.
init
(
format
:
"apps/%@/%@"
,
folderName
,
fileName
),
data
:
fileContent
!
))
}
BluetoothManager
.
sharedInstance
()
.
subscribe
(
self
)
uploadAlert
=
UIAlertController
(
title
:
"Uploading"
,
message
:
"Please wait"
,
preferredStyle
:
.
alert
)
progressBar
=
UIProgressView
(
progressViewStyle
:
.
default
)
progressBar
?
.
setProgress
(
0.0
,
animated
:
true
)
progressBar
?
.
frame
=
CGRect
(
x
:
10
,
y
:
70
,
width
:
250
,
height
:
0
)
uploadAlert
?
.
view
.
addSubview
(
progressBar
!
)
self
.
present
(
uploadAlert
!
,
animated
:
true
,
completion
:
nil
)
self
.
transferNextFile
()
}
catch
{
print
(
"Error while enumerating files
\(
path
.
path
)
:
\(
error
.
localizedDescription
)
"
)
}
...
...
@@ -83,7 +83,7 @@ class HatcheryDetailViewController: UIViewController, HatcheryClientDelegate, Bl
func
didFailToDownloadEgg
()
{
let
failedAlert
=
UIAlertController
(
title
:
"Error"
,
message
:
"Failed to download egg"
,
preferredStyle
:
.
alert
)
failedAlert
.
addAction
(
UIAlertAction
.
init
(
title
:
"OK"
,
style
:
.
default
,
handler
:
nil
))
self
.
present
(
failedAlert
,
animated
:
true
)
}
...
...
@@ -100,9 +100,9 @@ class HatcheryDetailViewController: UIViewController, HatcheryClientDelegate, Bl
})
}
}
//MARK: - BluetoothManagerDelegate
//
MARK: - BluetoothManagerDelegate
func
didFinishToSendFile
()
{
guard
self
.
filesToTransfer
.
count
>
0
else
{
return
...
...
@@ -110,7 +110,7 @@ class HatcheryDetailViewController: UIViewController, HatcheryClientDelegate, Bl
self
.
filesToTransfer
.
removeFirst
()
self
.
transferNextFile
()
}
func
didFailToSendFile
()
{
self
.
filesToTransfer
.
removeAll
()
BluetoothManager
.
sharedInstance
()
.
unsubscribe
(
self
)
...
...
@@ -120,7 +120,7 @@ class HatcheryDetailViewController: UIViewController, HatcheryClientDelegate, Bl
self
.
present
(
finishedController
,
animated
:
true
,
completion
:
nil
)
})
}
func
didUpdateProgressOnFile
(
_
progress
:
Double
)
{
self
.
progressBar
?
.
setProgress
(
Float
(
progress
),
animated
:
true
)
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment