Bluez: werben service / gatt-server-Beispiel?

Ziel

Ich bin die Dritte ein einfaches Gerät mit Linux. Es ist BLE-fähig ist, und ich bin derzeit mit bluez 5.8.

Ich möchte eine Aktion auslösen, auf dieses Gerät mit einem iPhone.

Was bereits funktioniert:

  • Ich kann das iPhone "sieht" das Gerät.
  • Das iPhone verbindet sich auch das Gerät.

Richte ich das bluetooth-Gerät, wie unter linux (Dank diese Frage):

# activate bluetooth
hciconfig hci0 up                                             
# set advertise data: "hello world"
hcitool -i hci0 cmd 0x08 0x0008 48 45 4c 4c 4f 57 4f 52 4c 44
# start advertising as connectable
hciconfig hci0 leadv 0

Des iOS-Codes ist einfach:

- (int) scanForPeripherals
{
    if (self->centralManager.state != CBCentralManagerStatePoweredOn) {
        return -1;
    }
    NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:NO], CBCentralManagerScanOptionAllowDuplicatesKey, nil];
    [self.centralManager scanForPeripheralsWithServices:nil options:options];
    return 0;
}

- (void)centralManagerDidUpdateState:(CBCentralManager *)central
{
    if (central.state == CBCentralManagerStatePoweredOn) {
        NSLog(@"Starting scan");
        [self scanForPeripherals];
    }
}

- (void) centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI
{
    NSLog(@"didDiscoverPeripheral");
    /* 
     * Retain the peripheral to avoid the error:
     *  CoreBluetooth[WARNING]: state = connecting> is being dealloc'ed while connecting
     */
    self.activePeripheral = peripheral;
    [centralManager connectPeripheral:peripheral options:nil];
}

- (void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral
{
    NSLog(@"Connected to peripheral");

    /* discover all services */
    [peripheral discoverServices:nil];
}

- (void)peripheral:(CBPeripheral *)peripheral didDiscoverServices:(NSError *)error
{
    NSLog(@"Discovered services");
    for (CBService *service in peripheral.services) {
        NSLog(@"Discovered service %@", service);
    }
}

Wenn Sie diesen code ausführen auf dem iPhone, ich bekomme dieses Protokoll:

2013-12-19 12:53:22.609 Test2[18518:60b] Starting scan
2013-12-19 12:53:29.945 Test2[18518:60b] didDiscoverPeripheral
2013-12-19 12:53:31.230 Test2[18518:60b] Connected to peripheral

So scheint es, dass das iPhone verbindet feine, aber nicht sehen, jeden Dienst.

Was ich bin fehlt

  • Ich brauche, um Werbung für eine einfache BLE serviceaber ich finde keine Dokumentation, wie dies zu tun in bluez .
  • Ich glaube, ich brauche so etwas wie eine gatt-server zu erhalten, Lesen/schreiben von Eigenschaften für den Dienst, den ich bewerben würde. Ich sah die plugins/gatt-Beispiel.c-Datei in bluez, aber ich habe absolut keine Idee, wie es zu benutzen: es gibt keine Dokumentation.

Vielleicht sollte ich erwähnen, dass ich sah diese Frage: Erstellen eines gatt-serveraber die Antworten erheben zu viel Fragen (z.B. wo ist die GATT-api für bluez? wie die GATT-Datenbank? Wie registrieren Sie sich für lese - /Schreibvorgänge?)

BEARBEITEN:
Die Befehle, die ich verwenden Sie nur die set-up-die BLE-Gerät zu werben, einige Daten, aber iOS meldet, dass die Verbindung akzeptiert. Welchen Teil von bluez ist das akzeptieren von eingehenden verbindungen?

InformationsquelleAutor der Frage Gilles Gregoire | 2013-12-19

Schreibe einen Kommentar