import WatchKit
import Foundation
import CoreBluetooth
var WK_Peripheral: CBPeripheral!
var WK_manager: CBCentralManager!
class BLERow: NSObject {
@IBOutlet var lblName: WKInterfaceLabel!
}
class BLEDevices: WKInterfaceController {
//MARK:- Outlets
@IBOutlet weak var bleTable: WKInterfaceTable!
@IBOutlet weak var cancelButton: WKInterfaceButton!
@IBOutlet weak var connectButton: WKInterfaceButton!
@IBOutlet weak var connectLabel: WKInterfaceLabel!
var BLEManager = BluetoothManager.getInstance()
var arrPeripherals = [CBPeripheral]()
//MARK:- Life cycle
override func awake(withContext context: Any?) {
super.awake(withContext: context)
// BLEManager.startScanPeripheral()
WK_manager = CBCentralManager(delegate: self, queue: nil)
// Configure interface objects here.
}
func startScan(){
arrPeripherals.removeAll()
print("Scanning...")
connectLabel.setText("Scanning")
WK_manager.scanForPeripherals(withServices:nil, options: nil)
}
override func willActivate() {
// This method is called when watch view controller is about to be visible to user
super.willActivate()
}
override func didDeactivate() {
// This method is called when watch view controller is no longer visible
super.didDeactivate()
}
//MARK:- Actions
@IBAction func cancelTouchUp() {
}
@IBAction func connectTouchUp() {
}
//MARK:- TableView Functions
func setupTable() {
connectLabel.setText("SetUp \(arrPeripherals.count)")
bleTable.setNumberOfRows(self.arrPeripherals.count, withRowType: "rowType")
for i in 0 ..< self.arrPeripherals.count {
if let row = bleTable.rowController(at: i) as? BLERow {
row.lblName.setText(self.arrPeripherals[i].name)
}
}
}
override func table(_ table: WKInterfaceTable, didSelectRowAt rowIndex: Int) {
self.pushController(withName: "DetailController", context: self.arrPeripherals[rowIndex])
}
}
extension BLEDevices: CBCentralManagerDelegate {
func centralManagerDidUpdateState(_ central: CBCentralManager) {
if central.state == .unknown {
print("Unknown")
connectLabel.setText("Unknown")
}
else if central.state == .unsupported {
print("Unsupported")
connectLabel.setText("Unsupported")
}
else if central.state == .unauthorized {
print("Unauthorized")
connectLabel.setText("Unauthorized")
}
else if central.state == .resetting {
print("Resetting")
connectLabel.setText("Resetting")
}
else if central.state == .poweredOn {
print("Powered On")
connectLabel.setText("Powered On")
self.startScan()
}
else if central.state == .poweredOff {
print("Powered Off")
connectLabel.setText("Powered Off")
}
}
func didDiscoverPeripheral(_ peripheral: CBPeripheral, advertisementData: [String : Any], RSSI: NSNumber) {
connectLabel.setText("discovered")
if let data = advertisementData["kCBAdvDataManufacturerData"] as? Data {
assert(data.count >= 7)
//0d00 - TI manufacturer ID
//Constructing 2-byte data as little endian (as TI's manufacturer ID is 000D)
let manufactureID = UInt16(data[0]) + UInt16(data[1]) << 8
print(String(format: "manufactureID--> %04X", manufactureID)) //->000D
//fe - the node ID that I have given
let nodeID = data[2]
print(String(format: "nodeID--> %02X", nodeID)) //->FE
//05 - state of the node (something that remains constant
let state = data[3]
print(String(format: "state--> %02X", state)) //->05
//c6f - is the sensor tag battery voltage
//Constructing 2-byte data as big endian (as shown in the Java code)
let batteryVoltage = UInt16(data[4]) << 8 + UInt16(data[5])
print(String(format: "batteryVoltage--> %04X", batteryVoltage)) //->0C6F
//32- is the BLE packet counter.
let packetCounter = data[6]
print(String(format: "packetCounter--> %02X", packetCounter)) //->32
}
if let service = advertisementData["kCBAdvDataServiceUUIDs"] as? NSArray {
print(service)
}
if !arrPeripherals.contains(peripheral) {
if peripheral.name == "OBU_QUS"{
arrPeripherals.append(peripheral)
if arrPeripherals.count > 0 {
self.bleTable.setHidden(false)
}else{
self.bleTable.setHidden(true)
}
setupTable()
}
}
}
func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) {
}
func centralManager(_ central: CBCentralManager, didFailToConnect peripheral: CBPeripheral, error: Error?) {
}
func centralManager(_ central: CBCentralManager, didDisconnectPeripheral peripheral: CBPeripheral, error: Error?) {
}
}
我想将 BLE 设备直接连接到我的 watchOS。现在我可以检查中央管理器是否开始扫描设备,但我从来没有得到一个设备。 我用单例类尝试过,然后直接使用它但没有取得任何成功。 如果上面的代码片段有什么问题,请给我建议。任何帮助将不胜感激。