1 contributor
//
// BluetoothRadio.swift
// USB Meter
//
// Created by Bogdan Timofte on 19/03/2020.
// Copyright © 2020 Bogdan Timofte. All rights reserved.
//
import CoreBluetooth
/**
Bluetooth Radio Modules
# DX-BT18 (HM-10)
- Documentation [DX-BT18 User Manual](https:fccid.io/2AKS8DX-BT18/User-Manual/Users-Manual-4216091)
- Code [HM10 Bluetooth Serial iOS](https://github.com/hoiberg/HM10-BluetoothSerial-iOS)
# PW0316
- Documentation [PW0316 BLE4.0 User Manual](http://www.phangwei.com/o/PW0316_User_Manual_V2.9.pdf)
*/
enum BluetoothRadio : CaseIterable {
case BT18
case PW0316
case UNKNOWN
}
/**
Dictionary containing services used in our communication for each radio
*/
var BluetoothRadioServicesUUIDS: [BluetoothRadio:[CBUUID]] = [
.BT18 : [CBUUID(string: "FFE0")],
.PW0316 : [CBUUID(string: "FFE0"), CBUUID(string: "FFE5")]
]
/**
Dictionary containing preferred notification characteristics used in our communication.
Notes:
- UM-family radios are documented around an HM-10 style `FFE0` / `FFE1` path
- DX-BT18 can additionally expose `FFE2` as a write-only characteristic
- TC66C PW0316 uses `FFE4` for notifications
*/
var BluetoothRadioNotifyUUIDs: [BluetoothRadio:[CBUUID]] = [
.BT18 : [CBUUID(string: "FFE1")],
.PW0316 : [CBUUID(string: "FFE4")]
]
/**
Dictionary containing preferred write characteristics used in our communication.
Preference order matters:
- for BT18 radios we prefer `FFE2` when available and fall back to `FFE1`
- for PW0316 radios we write to `FFE9`
*/
var BluetoothRadioWriteUUIDs: [BluetoothRadio:[CBUUID]] = [
.BT18 : [CBUUID(string: "FFE2"), CBUUID(string: "FFE1")],
.PW0316 : [CBUUID(string: "FFE9")]
]
/**
Returns an array containing all service UUIDs used by radios
*/
func allBluetoothRadioServices () -> [CBUUID] {
var retval: [CBUUID] = []
for radio in BluetoothRadio.allCases {
for serviceUUID in BluetoothRadioServicesUUIDS[radio] ?? [] {
if !retval.contains(serviceUUID) {
retval.append(serviceUUID)
}
}
}
return retval
}