Created
July 24, 2016 21:02
-
-
Save ryanjjones10/23d5eccfdf95371ddad634c1cea22455 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // | |
| // ViewController.swift | |
| // BLESwift | |
| // | |
| // Created by Ryan Jones on 6/14/16. | |
| // Copyright © 2016 Ryan Jones. All rights reserved. | |
| // | |
| import CoreBluetooth | |
| import UIKit | |
| class ViewController: UIViewController, CBCentralManagerDelegate, CBPeripheralDelegate { | |
| var centralManager: CBCentralManager! | |
| var peripheral: CBPeripheral! | |
| var currentCharacteristic: CBCharacteristic! = nil | |
| var readRSSITimer: NSTimer! | |
| var RSSIholder: NSNumber = 0 | |
| let txCharacteristic = CBUUID(string: "6e400002-b5a3-f393-e0a9-e50e24dcca9e") | |
| override func viewDidLoad() { | |
| super.viewDidLoad() | |
| self.startManager() | |
| } | |
| override func didReceiveMemoryWarning() { | |
| super.didReceiveMemoryWarning() | |
| } | |
| func centralManagerDidUpdateState(central: CBCentralManager) { | |
| if (central.state == CBCentralManagerState.PoweredOn) { | |
| self.centralManager?.scanForPeripheralsWithServices(nil, options: nil) | |
| self.currentState.text = "Scanning" | |
| } else { | |
| print("BLE not on") | |
| } | |
| } | |
| func centralManager(central: CBCentralManager, didDiscoverPeripheral peripheral: CBPeripheral, advertisementData: [String : AnyObject], RSSI: NSNumber) { | |
| if (peripheral.name != nil && peripheral.name! == "Nordic_UART"){ | |
| self.peripheral = peripheral | |
| self.centralManager.connectPeripheral(self.peripheral, options: [CBConnectPeripheralOptionNotifyOnDisconnectionKey : true]) | |
| } | |
| } | |
| func centralManager(central: CBCentralManager, didConnectPeripheral peripheral: CBPeripheral) { | |
| peripheral.readRSSI() | |
| self.startReadRSSI() | |
| peripheral.delegate = self | |
| peripheral.discoverServices(nil) | |
| print("connected to \(peripheral)") | |
| self.stopScan() | |
| } | |
| func centralManager(central: CBCentralManager, didDisconnectPeripheral peripheral: CBPeripheral, error: NSError?){ | |
| self.stopReadRSSI() | |
| if self.peripheral != nil { | |
| self.peripheral.delegate = nil | |
| self.peripheral = nil | |
| } | |
| print("did disconnect", error) | |
| self.startManager() | |
| } | |
| func centralManager(central: CBCentralManager, didFailToConnectPeripheral peripheral: CBPeripheral, error: NSError?){ | |
| print("connection failed", error) | |
| } | |
| func peripheral(peripheral: CBPeripheral, didDiscoverServices error: NSError?){ | |
| peripheral.discoverCharacteristics(nil, forService: peripheral.services![0]) | |
| } | |
| func peripheral(peripheral: CBPeripheral, didDiscoverCharacteristicsForService service: CBService, error: NSError?){ | |
| for characteristic in service.characteristics! { | |
| let thisCharacteristic = characteristic as CBCharacteristic | |
| if thisCharacteristic.UUID == txCharacteristic{ | |
| self.currentCharacteristic = thisCharacteristic | |
| } | |
| } | |
| if let error = error { | |
| print("characteristics error", error) | |
| } | |
| } | |
| func peripheral(peripheral: CBPeripheral, didUpdateValueForCharacteristic characteristic: CBCharacteristic, error: NSError?){ | |
| if let error = error { | |
| print("updated error", error) | |
| } | |
| } | |
| func peripheral(peripheral: CBPeripheral, didWriteValueForCharacteristic characteristic: CBCharacteristic, error: NSError?){ | |
| if let error = error { | |
| print("Writing error", error) | |
| } else { | |
| print("Succeeded") | |
| } | |
| } | |
| func stopScan(){ | |
| self.centralManager.stopScan() | |
| } | |
| func startManager(){ | |
| centralManager = CBCentralManager(delegate: self, queue: dispatch_get_main_queue()) | |
| } | |
| func peripheral(peripheral: CBPeripheral, didReadRSSI RSSI: NSNumber, error: NSError?) { | |
| self.RSSIholder = Int(RSSI) | |
| } | |
| func readRSSI(){ | |
| if (self.peripheral != nil){ | |
| self.peripheral.delegate = self | |
| self.peripheral.readRSSI() | |
| } else { | |
| print("peripheral = nil") | |
| } | |
| if (Int(self.RSSIholder) > -70) { | |
| let openValue = "1".dataUsingEncoding(NSUTF8StringEncoding)! | |
| self.peripheral.writeValue(openValue, forCharacteristic: self.currentCharacteristic, type: CBCharacteristicWriteType.WithResponse) | |
| } | |
| } | |
| func startReadRSSI() { | |
| if self.readRSSITimer == nil { | |
| self.readRSSITimer = NSTimer.scheduledTimerWithTimeInterval(0.5, target: self, selector: #selector(self.readRSSI), userInfo: nil, repeats: true) | |
| } | |
| } | |
| func stopReadRSSI() { | |
| if (self.readRSSITimer != nil){ | |
| self.readRSSITimer.invalidate() | |
| self.readRSSITimer = nil | |
| } | |
| } | |
| } | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment