Swift: Как восстановить данные с устройства Sensortag 2.0 - PullRequest
0 голосов
/ 18 февраля 2019

Мне нужна ваша помощь, чтобы понять, как восстановить данные с устройства Sensortag 2.0.

У меня есть следующая информация:

  • Transfert: BLE

  • Сервис: f000fff0-0451-4000-b000-000000000000

  • Характеристики: f000fff1-0451-4000-b000-000000000000

  • Уведомление со следующей характеристикой: f000fff2-0451-4000-b000-000000000000

  • команда пуска: 0x73 или 0x53

  • команда завершения: 0x65 или 0x45

  • 1 пакетов 20Byte

  • Второй байт используется в качестве кода распознавания.

Мой тест:

Чтобы помочь мне понять, я использую этот исходный код: https://github.com/degtiarev/DataCollector

1) В файле Device.swift я добавил UUID следующим образом:

static let TestServiceUUID = "f000fff0-0451-4000-b000-000000000000"
static let TestCharacteristicsUUID = "f000fff1-0451-4000-b000-000000000000"
static let TestNotificationUUID = "f000fff1-0451-4000-b000-000000000000"

2) В CollectingDataVC.swift я изменил sensorTagName следующим образом:

let sensorTagName = "my-device"

3) Я добавилмой сервис:

if let services = peripheral.services {
    for service in services {
        print("Discovered service \(service)")
        // If we found movement service, discover the characteristics for those services.
        if (service.uuid == CBUUID(string: Device.MovementServiceUUID)) ||
            (service.uuid == CBUUID(string: Device.TestServiceUUID)) ||
            (service.uuid == CBUUID(string: Device.IOServiceUUID)) || (service.uuid == CBUUID(string: Device.SimpleKeyUUID)) {
            peripheral.discoverCharacteristics(nil, for: service)
        }
    }
}

4) Я добавил характеристики :

for characteristic in characteristics {

    // Test
    if characteristic.uuid == CBUUID(string: Device.TestCharacteristicsUUID) {
        movementCharacteristics[peripheral.identifier.uuidString] = characteristic
        sensorTags[peripheral.identifier.uuidString]?.setNotifyValue(true, for: characteristic)
    }

    if characteristic.uuid == CBUUID(string: Device.TestNotificationUUID) {
        movementCharacteristics[peripheral.identifier.uuidString] = characteristic
        sensorTags[peripheral.identifier.uuidString]?.setNotifyValue(true, for: characteristic)
    }

}

Программа работает, потому что мое устройство подключено, и у меня есть этоинформация на моей консоли:

SENSOR TAG FOUND! ADDING NOW!!!
**** SUCCESSFULLY CONNECTED TO SENSOR TAG!!!


======= SERVICES ========
▿ Optional([<CBService: 0x1c0677a40, isPrimary = YES, UUID = Device Information>, <CBService: 0x1c0678180, isPrimary = YES, UUID = F000FFF0-0451-4000-B000-000000000000>])
  ▿ some: 2 elements
    - <CBService: 0x1c0677a40, isPrimary = YES, UUID = Device Information> #0
      - super: CBAttribute
        - super: NSObject
    - <CBService: 0x1c0678180, isPrimary = YES, UUID = F000FFF0-0451-4000-B000-000000000000> #1
      - super: CBAttribute
        - super: NSObject
==========


Discovered service <CBService: 0x1c0677a40, isPrimary = YES, UUID = Device Information>
Discovered service <CBService: 0x1c0678180, isPrimary = YES, UUID = F000FFF0-0451-4000-B000-000000000000>


======= CHARACTERISTICS ========
▿ 2 elements
  - <CBCharacteristic: 0x1c42a3c60, UUID = F000FFF1-0451-4000-B000-000000000000, properties = 0xA, value = (null), notifying = NO> #0
    - super: CBAttribute
      - super: NSObject
  - <CBCharacteristic: 0x1c42a4320, UUID = F000FFF2-0451-4000-B000-000000000000, properties = 0x12, value = (null), notifying = NO> #1
    - super: CBAttribute
      - super: NSObject
==========

4) Отсюда я не знаю, что делать.

Я создал «Hello World»:

func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) {

  print("Hello World!")

}

Но этот код никогда не выполняется.Это моя первая программа на swift, поэтому мне нужна помощь, чтобы понять и понять, что я должен делать.

1 Ответ

0 голосов
/ 18 февраля 2019

Я проверил проект, который вы используете, и он уже дал описание об использовании метода и о том, когда он вызовет:

 Invoked when you retrieve a specified characteristic’s value,
 or when the peripheral device notifies your app that the characteristic’s value has changed.

 This method is invoked when your app calls the readValueForCharacteristic: method,
 or when the peripheral notifies your app that the value of the characteristic for
 which notifications and indications are enabled has changed.

 If successful, the error parameter is nil.
 If unsuccessful, the error parameter returns the cause of the failure.

И

func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) {

выше методаэто метод делегата CBPeripheralDelegate, который

optional public func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...