mirror of
https://github.com/isometimes/rpi4-osdev
synced 2024-11-25 19:50:40 +00:00
101 lines
3.5 KiB
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)"
|
|
}
|
|
}
|