8641


[ドキュメント](https://opc.olympus-
imaging.com/sdkdocs/data/apirefiOS/category_o_l_y_camera_07_camera_connection_08.html#a87d920903e73ccd031a704310a5157dd)には`OLYCamera(CameraConnection)`に`(BOOL)
wakeup:(NSError **)
error`というメソッドが記載されていますが、具体的にどのような手順を踏めばアプリからカメラを起動することができるのでしょうか？

何も設定せずにコールすると、以下のエラーが発生します。

[code]

    [ERROR] [OLYCamera+CameraConnection.m:332: -[OLYCamera(CameraConnection) internalWakeup:]]
        Error Domain=OLYCameraErrorDomain
              Code=195887106 "The value of 'peripheral' property is invalid."
              UserInfo=0x170075680 {NSLocalizedDescription=The value of 'peripheral' property is invalid.}
    
[/code]

peripheralに何かを設定しなければいけないようなのですが、何を設定すればいいのでしょうか？


CC BY-SA 3.0
2015-03-26T08:30:55.280
8435
2015-04-01T05:16:05.090
2015-03-27T04:21:06.817
3068
9033
question
ios bluetooth olympus-camerakit
カメラをBLE経由で電源オンにする方法


OLYCameraのプロパティ「bluetoothPeripheral」にCBPeripheralを指定し、「bluetoothPassword」にBLEのパスコードを指定すれば良いと思います。

CBPeripheralは、Core Bluetoothから検索して、接続済みのものを渡す必要があります。  
検索するときのサービスIDは、「bluetoothServices」メソッドで取得でき、BLEのパスコードは「OACentralConfiguration」クラスを使えば取得できます。


CC BY-SA 3.0
2015-03-27T00:29:01.780
8456
2015-03-27T00:29:01.780
8986
8435
answer


OPCサポートです。  
質問ありがとうございます。

まず、`CoreBluetoothFramework`の`CBCentralManager`を利用して、Olympus AIR
A01に内蔵されているBluetooth Smartをスキャンする必要があります。

`scanForPeripheralsWithServices:`にてスキャンを実行してください。そのときに、第１引数`serviceUUIDs`に`[OLYCamera
bluetoothServices]`を指定することによりAIR A01以外のBluetoothデバイスがスキャンされなくなります。

[code]

    NSDictionary *options = @{ CBCentralManagerScanOptionAllowDuplicatesKey: @NO };
    [self.centralManager scanForPeripheralsWithServices:[OLYCamera bluetoothServices] options:options];
    
[/code]

AIR
A01が発見されると、`CBCentralManager`のdelegateメソッド`didDiscoverPeripheral`が呼ばれます。`advertisementData`の`CBAdvertisementDataLocalNameKey`キーの文字列とOA.Centralにて設定したBluetoothの名前が一致している場合、`CBPeripheral`をCamera
Kitのプロパティー`bluetoothPeripheral`に設定してください。

[code]

    - (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)p advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI
    {
        if (self.BleName && self.BleName.length > 0) {
            if ([[advertisementData objectForKey:CBAdvertisementDataLocalNameKey] isEqualToString:self.BleName]) {
                //OLYCamera instance may be generated at AppDelegate etc.
                OLYCamera *camera = [[OLYCamera alloc] init];
                camera.bluetoothPeripheral = p;
                [self.centralManager stopScan];
            }
        }
    }
    
[/code]

また、OA.Centralにて設定したBluetoothパスコードをプロパティー`bluetoothPassword`に設定してください。

[code]

    camera.bluetoothPassword = @"123456";
    
[/code]

以上で準備が整いました。`wakeup`を呼び出すとAIR A01の電源が入ります。

またCamera Kitを使って、OA.CentralアプリよりBluetooth
Smartの設定情報(名前とパスコード）を取得することができます。まずご自身のアプリのカスタムURLスキームを指定します。URLスキームについては、Apple社のガイドラインに従ってください。カスタムURLスキームはOA.Centralからご自身のアプリに戻ってくるときの識別子になります。

Implementing Custom URL Schemes (Accessed Mar. 27, 2015)  
<https://developer.apple.com/library/prerelease/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/Inter-
AppCommunication/Inter-
AppCommunication.html#//apple_ref/doc/uid/TP40007072-CH6-SW10>

[code]

    [OACentralConfiguration requestConfigurationURL:@"your-app-scheme"];
    
[/code]

OA.Centralアプリが起動しBluetooth Smartの設定情報を指定したURLスキームに応答します。  
`AppDelegate`の`openURL`の中で、Camera KitにURLをパースさせて、Bluetooth
Smartの設定情報(名前とパスコード）を取得できます。

[code]

    - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url sourceApplication:(NSString *)source annotation:(id)annotation {
        OACentralConfiguration *oacentralconfig = [[OACentralConfiguration alloc] initWithConfigurationURL:url];
        if ((oacentralconfig.bleCode != nil) && (oacentralconfig.bleCode != nil)) {
            //Valid Bluetooth Smart setting information is available
        } else {
            //Setting information is invalid or not set.
        }
    }
    
[/code]


CC BY-SA 3.0
2015-03-27T03:55:25.317
8465
2015-03-27T03:55:25.317
8370
8435
answer


お困りのようなので、お試し実装してみました。

まだ荒削りですがもしよろしければご参考にしてみてください。

<https://github.com/FromF/OlympusCameraKit/tree/master/BluetoothSmartTest>

Olympus
CameraKitのプロパティーbluetoothPeripheralが`wakeup`するときと、`didDiscoverPeripheral`とで、違うインスタンス(別々にalloc）をつかっていませんでしょうか？


CC BY-SA 3.0
2015-03-28T11:31:17.910
8506
2015-03-28T11:31:17.910
5343
8435
answer


ご助言をいただきありがとうございました。遅くなりましたが本日やっと検証を行い、問題点を見つけることができました。

原因はBluetoothデバイスを見つけた後にそれに接続する処理を行っていないことでした。

[code]

    - (void)    centralManager:(CBCentralManager *) central didDiscoverPeripheral:(CBPeripheral *) p advertisementData:(NSDictionary *) advertisementData RSSI:(NSNumber *) RSSI
    {
        if (self.bleName.length > 0)
        {
            if ([[advertisementData objectForKey:CBAdvertisementDataLocalNameKey] isEqualToString:self.bleName])
            {
                self.camera.bluetoothPeripheral =   p;
                self.camera.bluetoothPassword   =   self.blePassword;
                [self.centralManager stopScan];
    
                [self.centralManager connectPeripheral:self.camera.bluetoothPeripheral options:nil];
            }
        }
    }
    
[/code]

と、connectPeripheral:options:を読んで接続を確認した後でwakeupをコールしたら無事カメラを起動することができるようになりました。


CC BY-SA 3.0
2015-04-01T05:16:05.090
8641
2015-04-01T05:16:05.090
9033
8435
answer