カメラをBLE経由で電源オンにする方法


[ドキュメント](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に何かを設定しなければいけないようなのですが、何を設定すればいいのでしょうか？




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

原因は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をコールしたら無事カメラを起動することができるようになりました。




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]

