rpi4-osdev/part12-wgt/controller-ios/rpi4-osdev-ioscontrol/ViewController.swift

101 lines
3.5 KiB
Swift

//
// ViewController.swift
//
import UIKit
import CoreBluetooth
class ViewController: UIViewController,CBPeripheralManagerDelegate {
@IBOutlet weak var messageLabel: UILabel!
@IBOutlet weak var fireButton: UIButton!
private var service: CBUUID!
private var peripheralManager : CBPeripheralManager!
let myCharacteristic1 = CBMutableCharacteristic(type: CBUUID(string: "EC0E"), properties: [.notify, .write, .read], value: nil, permissions: [.readable, .writeable])
override func viewDidLoad() {
super.viewDidLoad()
peripheralManager = CBPeripheralManager(delegate: self, queue: nil)
}
@IBAction func onFireUp() {
let fireup : [UInt8] = [2, 1]
messageLabel.text = "Fired"
var fireupData = Data()
fireupData.append(contentsOf: fireup)
peripheralManager.updateValue(fireupData, for: myCharacteristic1, onSubscribedCentrals: nil)
}
@IBAction func onFireDown() {
let firedown : [UInt8] = [1, 1]
messageLabel.text = "Firing"
var firedownData = Data()
firedownData.append(contentsOf: firedown)
peripheralManager.updateValue(firedownData, for: myCharacteristic1, onSubscribedCentrals: nil)
}
@IBAction func handlePan(_ gesture: UIPanGestureRecognizer) {
let screenSize: CGRect = UIScreen.main.bounds
let tap = gesture.location(in: view)
let maxx = screenSize.width
let maxy = screenSize.height
let realx = UInt16(((tap.x / maxx) * 320).rounded())
let realy = UInt16(((tap.y / maxy) * 200).rounded())
let coords : [UInt8] = [UInt8(realx & 0x00ff), UInt8(realx >> 8 & 0x00ff), UInt8(realy & 0x00ff), UInt8(realy >> 8 & 0x00ff)]
var coordData = Data()
coordData.append(contentsOf: coords)
peripheralManager.updateValue(coordData, for: myCharacteristic1, onSubscribedCentrals: nil)
}
func peripheralManagerDidUpdateState(_ peripheral: CBPeripheralManager) {
switch peripheral.state {
case .unknown:
print("Bluetooth Device is UNKNOWN")
case .unsupported:
print("Bluetooth Device is UNSUPPORTED")
case .unauthorized:
print("Bluetooth Device is UNAUTHORIZED")
case .resetting:
print("Bluetooth Device is RESETTING")
case .poweredOff:
print("Bluetooth Device is POWERED OFF")
case .poweredOn:
print("Bluetooth Device is POWERED ON")
addServices()
@unknown default:
fatalError()
}
}
func addServices() {
service = CBUUID(string: "EC00")
let myService = CBMutableService(type: service, primary: true)
myService.characteristics = [myCharacteristic1]
peripheralManager.add(myService)
startAdvertising()
}
func startAdvertising() {
messageLabel.text = "Waiting for subscriber"
peripheralManager.startAdvertising([CBAdvertisementDataLocalNameKey : "echo", CBAdvertisementDataServiceUUIDsKey : [service]])
}
func peripheralManager(_ peripheral: CBPeripheralManager, central: CBCentral, didSubscribeTo characteristic: CBCharacteristic) {
messageLabel.text = "Sub \(central.identifier.uuidString)"
}
func peripheralManager(_ peripheral: CBPeripheralManager, central: CBCentral, didUnsubscribeFrom characteristic: CBCharacteristic) {
messageLabel.text = "Unsub \(central.identifier.uuidString)"
}
}