CBCentralManager.swift 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. //
  2. // CBCentralManager.swift
  3. // RileyLinkBLEKit
  4. //
  5. // Copyright © 2017 Pete Schwamb. All rights reserved.
  6. //
  7. import CoreBluetooth
  8. // MARK: - It's only valid to call these methods on the central manager's queue
  9. extension CBCentralManager {
  10. func connectIfNecessary(_ peripheral: CBPeripheral, options: [String: Any]? = nil) {
  11. guard case .poweredOn = state else {
  12. return
  13. }
  14. switch peripheral.state {
  15. case .connected:
  16. delegate?.centralManager?(self, didConnect: peripheral)
  17. case .connecting, .disconnected, .disconnecting:
  18. fallthrough
  19. @unknown default:
  20. connect(peripheral, options: options)
  21. }
  22. }
  23. func cancelPeripheralConnectionIfNecessary(_ peripheral: CBPeripheral) {
  24. guard case .poweredOn = state else {
  25. return
  26. }
  27. switch peripheral.state {
  28. case .disconnected:
  29. delegate?.centralManager?(self, didDisconnectPeripheral: peripheral, error: nil)
  30. case .connected, .connecting, .disconnecting:
  31. fallthrough
  32. @unknown default:
  33. cancelPeripheralConnection(peripheral)
  34. }
  35. }
  36. }
  37. extension CBManagerState {
  38. var description: String {
  39. switch self {
  40. case .poweredOff:
  41. return "Powered Off"
  42. case .poweredOn:
  43. return "Powered On"
  44. case .resetting:
  45. return "Resetting"
  46. case .unauthorized:
  47. return "Unauthorized"
  48. case .unknown:
  49. return "Unknown"
  50. case .unsupported:
  51. return "Unsupported"
  52. @unknown default:
  53. return "Unknown: \(rawValue)"
  54. }
  55. }
  56. }