わふうの人が書いてます。

iOSアプリケーション開発、BLEのファームウェアとハードウェア試作のフリーランスエンジニア。

CBDescriptorクラスリファレンス 日本語訳

プロパティ

@property(readonly, nonatomic) CBCharacteristic *characteristic;

属するcharacteristicのポインタです。

/*!

  • @property UUID
    *
  • @discussion
  • The Bluetooth UUID of the descriptor.
    /

    @property(readonly, nonatomic) CBUUID *UUID;

    DescriptorのBluetooth UUIDです。

@property(retain, readonly) id value;

Descriptorのあちあです。様々なデスクリプタに対応するvalue typeの詳細は、CBUUIDクラスで定義されています。

CBMutableDescriptorクラス

iOS6以降で有効です。

- (id)initWithType:(CBUUID *)UUID value:(id)value;

サービスタイプとvalueで初期化されたdescriptorを返します。一旦親であるserviceが公開されたならば、valueは要求されて、ダイナミックに更新することはできません。

  • UUID
    • DescriptorのBluetooth UUID
  • value
    • Descriptorの値

CBATTRequestクラスリファレンス 日本語訳

iOS6以降で有効です。
CBATTRequestクラスは、セントラルからの読み出し/書き込み要求を表します。

プロパティ

@property(readonly, retain, nonatomic) CBCentral *central;

リクエストを発生させたセントラルです。

@property(readonly, retain, nonatomic) CBCharacteristic *characteristic;

値を読み書きするcharacteristicです。

/*!

  • @property offset
    *
  • @discussion The zero-based index of the first byte for the read or write.
    /

    @property(readonly, nonatomic) NSUInteger offset;

    0から始まる、読み書きする最初のバイト位置です。

@property(readwrite, copy) NSData *value;

読み書きするデータです。
読み出し要求では、value はnilで、respondToRequest:withResult: に返信する前に設定されるべきです。
書き込み要求では、valueは書き込まれるべき値を含んでいます。

CBCharacteristics/CBMutableCharacteristic クラスリファレンス 日本語訳

これはCBCharacteristicsクラスのうちCoreBlutoothを理解するために必要最小限の部分を日本語訳したものです。

CBCharacteristicsクラス

プロパティ

@property(readonly, nonatomic) CBService *service;

このcharacteristicが属するサービスへのポインタです。

@property(readonly, nonatomic) CBUUID *UUID;

characteristicのBluetooth UUID。

@property(readonly, nonatomic) CBCharacteristicProperties properties;

characteristicのプロパテイです。

@property(retain, readonly) NSData *value;

characteristicsの値です。

@property(retain, readonly) NSArray *descriptors;

このcharacteristicで、これまでに発見されたCBDescriptorsのリストです。

@property(readonly) BOOL isBroadcasted;

このcharacteristcが現在ブロードキャストされているか、否かを示します。

@property(readonly) BOOL isNotifying;

このcharacteristicが現在ノーティフィケーションされているか否かを示します。

CBMutableCharacteristics クラス

iOS6から有効です。
CBMutableCharacteristicsクラスは、CBCharacteristicクラスを継承します。

プロパティ

@property(assign, readwrite, nonatomic) CBAttributePermissions permissions;

characteristic valueの許可設定です。

see CBAttributePermissions

@property(retain, readwrite, nonatomic) CBUUID *UUID;

@property(assign, readwrite, nonatomic) CBCharacteristicProperties properties;

@property(retain, readwrite) NSData *value;

@property(retain, readwrite) NSArray *descriptors;

インスタンスメソッド

- (id)initWithType:(CBUUID )UUID properties:(CBCharacteristicProperties)properties value:(NSData )value permissions:(CBAttributePermissions)permissions;

返り値は、初期化されたcharacteristicです。

  • UUID
    • characteristicのBluetooth UUIDです。
  • properties
    • characteristicのプロパティです。
  • value
    • キャッシュされるcharacteristicの値です。もしもnilならば、値はダイナミックであり、オンデマンドで要求されます。
  • permissions
    • charactersticの値のパーミションです。

列挙型

CBAttributePermissions

ATT attributeの読み出し/書き込み/暗号化許可属性です。論理和で結合できます。

  • CBAttributePermissionsReadable
    • 読み出しのみ
  • CBAttributePermissionsWriteable
    • 書き込みのみ
  • CBAttributePermissionsReadEncryptionRequired
    • 信頼されたデバイスが、読み出し可能
  • CBAttributePermissionsWriteEncryptionRequired
    • 信頼されたデバイスが、書き込み可能

CBCharacteristicProperties

CBCharacteristicPropertiesは、そのcharacteristicの値がどのように使えるか、またはdescriptor(s)がアクセスできるかを示します。
論理和で結合させることができます。
特に明記がない限り、
CBPeripheralManager で公開されたローカルのcharacteristicsに対してプロパティは有効です。

  • CBCharacteristicPropertyBroadcast
    • characteristic configuration descriptorを使って、characteristicの値をブロードキャすることを許します。
    • local characteristcには許されていません。
  • CBCharacteristicPropertyRead
    • characteristicの値を読むことを許します。
  • CBCharacteristicPropertyWriteWithoutResponse
    • characteristicの値への、レスポンスがない書き込みを許可します。
  • CBCharacteristicPropertyWrite
    • characteristicの値への、書き込みを許可します。
  • CBCharacteristicPropertyNotify
    • characteristicの値の、レスポンスがないノーティフィケーションを許可します。
  • CBCharacteristicPropertyIndicate
    • characteristicの値の、インディケーションを許可します。
  • CBCharacteristicPropertyAuthenticatedSignedWrites
    • characteristicの値への、承認ありの書き込みを許可します。
  • CBCharacteristicPropertyExtendedProperties
    • もしも設定されていれば、追加のcharacteristicプロパティが、characteristic extended properties descriptorに定義されています。
    • local characteristicsには許されていません。
  • CBCharacteristicPropertyNotifyEncryptionRequired
    • もしも設定されていれば、信頼されたデバイスのみがcharacteristicの値のノーティフィケーションを有効に出来ます。
  • CBCharacteristicPropertyIndicateEncryptionRequired
    • もしも設定されていれば、信頼されたデバイスのみがcharacteristicの値のインディケーションを有効に出来ます。

CBPeripheralDelegateプロトコル リファレンス 日本語訳

これはApple社のhttp://developer.apple.com/library/ios/#documentation/CoreBluetooth/Reference/CBPeripheralDelegate_Protocol/translated_content/CBPeripheralDelegate.htmlのうち、CoreBluetoothを理解するために必要最小限の部分を日本語訳したものです。

CBPeripheralDelegateプロトコルは、CBPeripheralのdelegateプロパティが実装すべきプロトコルです。
CBPeripheralDelegateプロトコルの、すべてのメソッドはoptionalです。

インスタンス・メソッド

- (void)peripheral:(CBPeripheral )peripheral didDiscoverCharacteristicsForService:(CBService )service error:(NSError *)error;

-[discoverCharacteristics:forService:] リクエストが完了した時に、呼ばれます。

もしも成功したら、”error”はnilで、発見されたcharacteriticsは、それがあったならば、サービスの”characteristics”プロパティにマージされています。もしも成功しなかったら、”error”には、発生した失敗が設定されます。

Invoked upon completion of a request.

- (void)peripheral:(CBPeripheral )peripheral didDiscoverDescriptorsForCharacteristic:(CBCharacteristic )characteristic error:(NSError *)error;

-[discoverDescriptorsForCharacteristic:] リクエストが完了した時に、呼ばれます。

もしも成功したら、”error”はnilで、発見されたdescriptorsは、それがあったならば、キャラクタリスティックの”descriptors”プロパティにマージされています。もしも成功しなかったら、”error”には、発生した失敗が設定されます。

Invoked upon completion of a -[discoverIncludedServices:forService:] request.

- (void)peripheral:(CBPeripheral )peripheral didDiscoverIncludedServicesForService:(CBService )service error:(NSError *)error;

-[discoverIncludedServices:forService:] リクエストが完了した時に、呼ばれます。

もしも成功したら、”error”はnilで、発見されたservicesは、それがあったならば、サービスの”includedServices”プロパティにマージされています。もしも成功しなかったら、”error”には、発生した失敗が設定されます。

- (void)peripheral:(CBPeripheral )peripheral didDiscoverServices:(NSError )error;

-[discoverServices:] リクエストが完了した時に、呼ばれます。

もしも成功したら、”error”はnilで、発見されたservicesは、それがあったならば、ペリフェラルの”services”プロパティにマージされています。もしも成功しなかったら、”error”には、発生した失敗が設定されます。

- (void)peripheral:(CBPeripheral )peripheral didUpdateNotificationStateForCharacteristic:(CBCharacteristic )characteristic error:(NSError *)error;

-[setNotifyValue:forCharacteristic:] リクエストが完了した時に、呼ばれます。

もしも成功しなかったら、”error”には、発生した失敗が設定されます。

(訳者注:ここから先の説明があまりに素っ気いないのですが、原文そのままです。あまりにそっけないので、あとで解説を追加します。)

- (void)peripheral:(CBPeripheral )peripheral didUpdateValueForCharacteristic:(CBCharacteristic )characteristic error:(NSError *)error;

-[readValueForCharacteristic:] リクエストが完了した、もしくはnotification/indicationを受信した時に、呼ばれます。

もしも成功しなかったら、”error”には、発生した失敗が設定されます。

- (void)peripheral:(CBPeripheral )peripheral didUpdateValueForDescriptor:(CBDescriptor )descriptor error:(NSError *)error;

-[readValueForDescriptor:] リクエストが完了した時に、呼ばれます。

もしも成功しなかったら、”error”には、発生した失敗が設定されます。

- (void)peripheral:(CBPeripheral )peripheral didWriteValueForCharacteristic:(CBCharacteristic )characteristic error:(NSError *)error;

-[writeValue:forCharacteristic:] リクエストが完了した時に、呼ばれます。

もしも成功しなかったら、”error”には、発生した失敗が設定されます。

- (void)peripheral:(CBPeripheral )peripheral didWriteValueForDescriptor:(CBDescriptor )descriptor error:(NSError *)error;

-[writeValue:forDescriptor:] リクエストが完了した時に、呼ばれます。

もしも成功しなかったら、”error”には、発生した失敗が設定されます。

- (void)peripheralDidUpdateRSSI:(CBPeripheral )peripheral error:(NSError )error;

-[readRSSI:] リクエストが完了した時に、呼ばれます。

もしも成功したら、”error”はnilで、ペリフェラルの”RSSI”プロパティは更新されています。もしも成功しなかったら、”error”には、発生した失敗が設定されます。

CBPeripheralクラスリファレンス 日本語訳

プロパティ

@property(assign, nonatomic) id delegate;

ペリフェラルのイベントを受信するデリゲートです。

@property(readonly, nonatomic) CFUUIDRef UUID;

ペリフェラルが、少なくとも一度システムから接続されたことがあれば、ペリフェラルにはUUIDが割り当てられます。(訳者注:逆にこれまで一度も接続したことがないペリフェラルでは、nilになります。接続は、他のアプリでの接続、iPhoneの電源オン/オフ、再起動に関係なく、一度でも接続したことがあるペリフェラルであれば、UUIDが割り当てらています。)

ペリフェラルを取得するために、後に
BCentralManager
に与えるために、このUUIDを保存しておけます。

@property(retain, readonly) NSString *name;

ペリフェラルの名前です。(訳者注:アドバタイズメント・データのローカル名を示します。通常は型番が与えらています。)

@property(retain, readonly) NSNumber *RSSI;

接続している間、接続のRSSIをデシベルで表します。

(訳者注:RSSIは、Received Signal Strength Indicatorの略称で、受信信号強度を表します。このRSSIは、RF送受信の半導体が出力する信号値をそのまま使っていると推測されます。物理的に絶対値が正しい値とは限りませんが、目安としては利用できるでしょう。信号レベルは対数で、デシベル(10log 信号電力)で表します。通常、-40 ~ -90dB程度の範囲です。マイナスになるほど、信号が弱いことを示します。)

@property(readonly) BOOL isConnected;

ペリフェラルが現在接続しているかを、示します。

@property(retain, readonly) NSArray *services;

ペリフェラルで発見されたサービスの、CBServiceオブジェクトのリストです。

メソッド

- (void)readRSSI;

接続の現在のRSSIを取得します。

see peripheralDidUpdateRSSI:error:

- (void)discoverServices:(NSArray *)serviceUUIDs;

ペリフェラルで有効なサービスを発見します。

  • serviceUUIDs
    • 発見すべきサービスのUUIDを表す、CBUUIDオブジェクトのリストです。もしもnilを与えると、ペリフェラルのすべてのサービスが発見されるでしょうが、とても遅くなり、従って推奨しません。

see peripheral:didDiscoverServices:

- (void)discoverIncludedServices:(NSArray )includedServiceUUIDs forService:(CBService )service;

指定したサービスのincluded serviceを発見します。
(訳者注: Bluetooth low energyのサービスは、オブジェクト指向でいうクラスの概念に相当します。いまあるサービスはそのまま提供しつつ、そのサービスの機能を拡張する仕組みが、included serviceで、ちょうどクラス継承の概念に相当します。)

  • includedServiceUUIDs
    • 発見すべきincluded serviceのUUIDを表すCBUUIDオブジェクトのリストです。もしもnilならば、サービスのすべてのincluded serviceが発見されますが、とても遅くなり、従って推奨しません。
  • service
    • プライマリGATTサービス

see peripheral:didDiscoverIncludedServicesForService:error:

- (void)discoverCharacteristics:(NSArray )characteristicUUIDs forService:(CBService )service;

サービスの指定したcharacteristicを発見します。

  • charactertisticsUUIDs
    • 発見すべきcharacteristicのUUIDを表すCBUUIDオブジェクトのリストです。もしnilならば、サービスのすべてのcharacteristicsが発見されますが、とても遅くなり、従って推奨しません。
  • service
    • GATTサービス

see peripheral:didDiscoverCharacteristicsForService:error:

- (void)readValueForCharacteristic:(CBCharacteristic *)characteristic;

characteriticの値を読みます。

  • characteristic
    • GATT characteristic

see peripheral:didUpdateValueForCharacteristic:error:

- (void)writeValue:(NSData )data forCharacteristic:(CBCharacteristic )characteristic type:(CBCharacteristicWriteType)type;

characteristicの値として、valueを書き込みます。

  • data
    • 書き込む値
  • characteristic
    • 書き込み対象のcharacteristic
  • type
    • 書き込みタイプ。characteristicへの書き込み完了を報告する/しないが設定できる。

see peripheral:didWriteValueForCharacteristic:error:

see CBCharacteristicWriteType

- (void)setNotifyValue:(BOOL)enabled forCharacteristic:(CBCharacteristic *)characteristic;

characteristicの値の、notification/indicationの有効/無効を背呈します。

characterisitcが、notification/indicationの両方を許可しているならば、notificationが使われます。
notification/indicationが有効になったとき、characteristicの値更新は、デリゲート
peripheral:didUpdateValueForCharacteristic:error:
に通知されます

更新を送るのは、選択したペリフェラルが行うものなので、
notification/indicationが有効である間、アプリケーションはその変更を処理できるように備えるべきです。

(訳者注:Bluetooth low energyは、接続先の装置の値更新をiPhone側にプッシュする仕組みがあります。それがnotificationとindicationです。この2つの違いは、通知の信頼性です。

  • notification
    • 接続先の装置からiPhoneに、値の更新を通知します。
    • notificationは通知だけの、信頼性のない通知です。iPhoneが接続先の装置に、値更新通知を受信したことを返しません。
  • indication
    • notificationと同じく、接続先の装置からiPhoneに、値の更新を通知します。
    • indicationは、iPhoneが接続先装置に値更新を受信したことを返信する、信頼性が確保された通知方法です。

例えば、室温やバッテリー残量のように、センサーなどの値変化を通知するが、一定周期で送信するため、通知データを取りこぼしても問題がない場合は、notificationを用いるなどします。

notification/indicationのいずれを実装しているかは、装置のファームウェア設計によります。readできるcharacteristicが、notification/indicationを実装しているとは限りません。iPhone側は、configutaionをみて、そのcharacteristicがnotification/indicationに対応しているかをみることしかできません。)

  • enabled
    • notification/indication を有効にすべきか、否かを設定します
  • characteristic
    • クライアントcharacteristic configuration descriptorを保持しているcharacteristic

see peripheral:didUpdateNotificationStateForCharacteristic:error:

seealso CBConnectPeripheralOptionNotifyOnNotificationKey

- (void)discoverDescriptorsForCharacteristic:(CBCharacteristic *)characteristic;

characteristicのdescriptor(s)を発見します。

  • characteristic
    • GATT characteristic

see peripheral:didDiscoverDescriptorsForCharacteristic:error:

- (void)readValueForDescriptor:(CBDescriptor *)descriptor;

descriptorの値を読みます。

  • descriptor
    • GATT characteristic descriptor

see peripheral:didUpdateValueForDescriptor:error:

- (void)writeValue:(NSData )data forDescriptor:(CBDescriptor )descriptor;

descriptorの値としてvalueを書き込みます。Client characteristic configuration descriptorはこのメソッドで書き込みはできません。
それには、 setNotifyValue:forCharacteristic: を使うべきです。

see peripheral:didWriteValueForCharacteristic:error:

###

列挙型

CBCharacteristicWriteType

  • CBCharacteristicWriteWithResponse = 0,
  • CBCharacteristicWriteWithoutResponse,

CoreBluetoothフレームワーク 定数 日本語訳

これはApple社のドキュメント
http://developer.apple.com/library/ios/#documentation/CoreBluetooth/Reference/CoreBluetooth_Constants/
からCoreBluetoothフレームワークを理解するために必要最小限の部分のみを日本語訳したものです。

CBError.h

Bluetoth low energyのトランザクションで生じうるエラーです。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
enum {
CBATTErrorInvalidHandle = 0x01,
CBATTErrorReadNotPermitted = 0x02,
CBATTErrorWriteNotPermitted = 0x03,
CBATTErrorInvalidPdu = 0x04,
CBATTErrorInsufficientAuthentication = 0x05,
CBATTErrorRequestNotSupported = 0x06,
CBATTErrorInvalidOffset = 0x07,
CBATTErrorInsufficientAuthorization = 0x08,
CBATTErrorPrepareQueueFull = 0x09,
CBATTErrorAttributeNotFound = 0x0A,
CBATTErrorAttributeNotLong = 0x0B,
CBATTErrorInsufficientEncryptionKeySize = 0x0C,
CBATTErrorInvalidAttributeValueLength = 0x0D,
CBATTErrorUnlikelyError = 0x0E,
CBATTErrorInsufficientEncryption = 0x0F,
CBATTErrorUnsupportedGroupType = 0x10,
CBATTErrorInsufficientResources = 0x11,
};

CBCEntralManagerDelegateProtocol リファレンス 日本語訳

これは、Apple社のCBCentralManagerクラスドキュメント http://developer.apple.com/library/mac/#documentation/CoreBluetooth/Reference/CBCentralManagerDelegate_Protocol/translated_content/CBCentralManagerDelegate.html
から、CoreBluetooth開発の理解に必要最低限の情報を日本語に意訳したものです。

CBCentralManagerDelegate プロトコルは、CBCentralのデリゲートのプロトコルです。

CBCentralManagerDelegateは、-[centralManagerDidUpdateState:] のみがrequiredです。その他は optional です。

インスタンス・メソッド

- (void)centralManagerDidUpdateState:(CBCentralManager *)central;

セントラル・マネージャのステートが更新された時に、呼ばれます。

引数:

  • central
    • ステートが変化したセントラルマネージャ。

議論:

詳細は “state” プロパティを参照してください。

- (void)centralManager:(CBCentralManager )central didConnectPeripheral:(CBPeripheral )peripheral;

ペリフェラルとの接続が確立したときに、呼ばれます。

<<<<<<< HEAD

- (void)centralManager:(CBCentralManager )central didDisconnectPeripheral:(CBPeripheral )peripheral error:(NSError *)error;

ペリフェラルとの既存の接続が切断した時に、呼ばれます。

=======
centralManager:didDisconnectPeripheral:error:
Invoked whenever an existing connection with the peripheral is torn down.

- (void)centralManager:(CBCentralManager )central didDisconnectPeripheral:(CBPeripheral )peripheral error:(NSError *)error;

ペリフェラルとの既存の接続が切断した時に、呼ばれます。

centralManager:didDiscoverPeripheral:advertisementData:RSSI:
Invoked when the central discovers a peripheral while scanning.

- (void)centralManager:(CBCentralManager )central didDiscoverPeripheral:(CBPeripheral )peripheral advertisementData:(NSDictionary )advertisementData RSSI:(NSNumber )RSSI;

セントラルがスキャン中にペリフェラルを発見した時に、呼ばれます。

議論:

アドバタイズメント / スキャン・レスポンス・データは、”advertisementData”に収納され、CBAdvertisementData * キーを通して読み出すことができる。 (訳者注:BLEの規格ではアドバタイズメント・パケットには、デバイス名、デバイスが提供するサービスのUUID、メーカ独自の拡張データを収納することができます。最後の拡張データがiOSで読み取れるかは、未確認。)
この引数のperipheralは、このペリフェラルに対して、なにかのコマンドを実行する場合は、必ずリテインしなければならない。(訳者注:リテインしないと、ペリフェラルは開放されて、接続が切断します。)

centralManager:didFailToConnectPeripheral:error:
Invoked whenever the central manager fails to create a connection with the peripheral.

- (void)centralManager:(CBCentralManager )central didFailToConnectPeripheral:(CBPeripheral )peripheral error:(NSError *)error;

セントラル・マネージャがペリフェラルと接続を確立するのに失敗した時に、呼ばれます。

議論:

失敗した原因は”error”に格納されます。

centralManager:didRetrieveConnectedPeripherals:
Invoked when the central manager retrieves the list of peripherals currently connected to the system.

- (void)centralManager:(CBCentralManager )central didRetrieveConnectedPeripherals:(NSArray )peripherals;

セントラル・マネージャが、現在システムと接続しているペリフェラルの一覧を取得した時に、呼び出されます。

議論:

詳細は -[retrieveConnectedPeripherals] メソッドを参照してください。

centralManager:didRetrievePeripherals:
Invoked when the central manager retrieves the list of known peripherals.

- (void)centralManager:(CBCentralManager )central didRetrievePeripherals:(NSArray )peripherals;

セントラル・マネージャが、既知のペリフェラルの一覧を取得した時に、呼び出されます。

議論:

詳細は -[retrievePeripherals:] メソッドを参照してください。

See Also:

centralManager:didRetrievePeripheral:

定数(CBAdvertisementData.h)

CBAdvertisementData.h は -[centralManager:didDiscoverPeripheral:advertisementData:RSSI:] のadvertisementDataの辞書の鍵を定義しています。

CBAdvertisementDataServiceUUIDsKey;

CBServiceのUUIDを表す、1つもしくはそれ以上のCBUUIDのリスト。

const CBAdvertisementDataOverflowServiceUUIDsKey

iOS6以降
アドバタイズメントデータの”overflow”領域で見つけられたCBService UUIDを表す、1つもしくはそれ以上のCBUUIDのリスト。
この領域のUUIDは”ベストエフォート”であるため、常に正確とは限らない。

参照:

startAdvertising:

CBAdvertisementDataLocalNameKey

ペリフェラルのローカル名を表す、NSString。

CBAdvertisementDataTxPowerLevelKey

ペリフェラルの送信電力を表す、NSNumber。

CBAdvertisementDataManufacturerDataKey

ペリフェラルの製造者データを表す、NSDataオブジェクト。

CBAdvertisementDataServiceDataKey

サービス特有のアドバタイズメントデータを含む辞書。
その辞書の鍵は、CBService UUIDを表す、CBUUIDオブジェクト。値はNSDataオブジェクト。

CBCentralManagerクラスリファレンス、日本語訳

これは、Apple社のCBCentralManagerクラスドキュメント http://developer.apple.com/library/ios/#documentation/CoreBluetooth/Reference/CBCentralManager_Class/から、CoreBluetooth開発の理解に必要最低限の情報を日本語に意訳したものです。

プロパティ

@property(assign, nonatomic) id delegate;

セントラル・マネージャのイベントを受け取るデリゲートを設定します。

@property(readonly) CBCentralManagerState state;

セントラル・マネージャの状態を表します。セントラル・マネージャをインスタンスしたときは初期値CBCentralStateUnknownです。この値が変化した瞬間に、デリゲートのコールバック - (void)centralManagerDidUpdateState:(CBCentralManager *)central が呼ばれます。

CBCentralManagerState列挙型は、以下の値を取ります。

1
2
3
4
5
6
7
8
typedef NS_ENUM(NSInteger, CBCentralManagerState) {
CBCentralManagerStateUnknown = 0,
CBCentralManagerStateResetting,
CBCentralManagerStateUnsupported,
CBCentralManagerStateUnauthorized,
CBCentralManagerStatePoweredOff,
CBCentralManagerStatePoweredOn
};
  • CBCentralManagerStateUnknown = 0,
    • 初期値です。すぐに更新されます。
  • CBCentralManagerStateResetting,
    • システムサービスとの接続が一時的に失なわれました。すぐに更新されます。
  • CBCentralManagerStateUnsupported,
    • Bluetooth Low EnergyのCentral/Clientをサポートしていません。
  • CBCentralManagerStateUnauthorized,
    • このアプリケーションは、Bluetooth Low EnergyのCentral/Client使う認可がありません。
  • CBCentralManagerStatePoweredOff,
    • Bluetoothがオフになっています。
  • CBCentralManagerStatePoweredOn
    • Bluetoothがオンで、かつ、いま利用できます。

インスタンスメソッド

- (void)cancelPeripheralConnection:(CBPeripheral *)peripheral;

ペリフェラルへの、ペンディング状態もしくは接続している接続を、キャンセルします。

connectPeripheral:options:
Establish a connection to the peripheral.

- (void)connectPeripheral:(CBPeripheral )peripheral options:(NSDictionary )options;

ペリフェラルへの接続を確立します。引数optionsで接続のオプションを指定出来ます。
CBConnectPeripheralOptionNotifyOnIiscoonectionKey を参照してください。

このメソッドはタイムアウトをしません。ペンディングされた接続をキャンセルするには、cancelPeripheralConnections: を使います。

- (CBCentralManager *)initWithDelegate:(id)delegate queue:(dispatch_queue_t)queue;

指定したデリゲートとディスパッチキューで、セントラルマネージャを初期化します。

  • queue
    • イベントを処理するキューを指定します。nilならばメインキューがデフォルトでつかわれます。

- (void)retrieveConnectedPeripherals;

システムに今在接続しているペリフェラルの一覧を取得するようにセントラルに問い合わせます。
問い合わせ結果はデリゲートを通して通知されます。

- (void)retrievePeripherals:(NSArray *)peripheralUUIDs;

UUIDで指定したペリフェラルの一覧をセントラルに問い合わせます。

  • peripheralUUIDs
    • 取得するCBPeripheralの CFUUIDRef のリスト。

問い合わせ結果はデリゲートを通して通知されます。

- (void)scanForPeripheralsWithServices:(NSArray )serviceUUIDs options:(NSDictionary )options;

セントラルにペリフェラルのスキャンを要求します。

  • serviceUUIDs
    • アプリケーションが興味があるサービスの CBUUIDs の配列。
  • options
    • スキャンを指定するオプションを指定した辞書。 CBCentralManagerScanOptionAllowDuplicatesKey を参照。

ペリフェラルそれぞれを発見する都度、デリゲートのコールバックが呼ばれます。”serviceUUIDs”でCBUUIDの配列が指定されている場合は、セントラルはそのサービス、もしくはそれらのサービスをアドバタイズしているペリフェラルのみを返します(推奨)。
“seriviceUUIDs”がnilの場合は、発見したすべてのペリフェラルを返します(非推奨)。
セントラルが、すでに異なるパラメータでスキャンしている場合は、指定したパラメータがそれを置換します。

- (void)stopScan;

セントラルにペリフェラルのスキャンを停止するよう問い合わせます。

定数

CBCentralManagerScanOptionAllowDuplicatesKey

このキーにはNSNumber(Boolean)の値が対応します。値がYESのとき、
ペリフェラルのスキャンで、重複したデバイスをフィルタリングをしません。デフォルトでは、同じペリフェラルを複数回発見したときは、1回の発見イベントに集約します。このフィルタリングを無効にすると、バッテリーの稼働時間に不利な影響をもたらすかもしれませんから、必要なときにだけ利用します。

scanForPeripheralsWithServices:options: を参照してください。

CBConnectPeripheralOptionNotifyOnConnectionKey

iOS6から有効です。

このキーには、NSNumber(Boolean)の値が対応します。値は、アプリケーションがサスペンドしている時に、
あるペリフェラルとの接続が確立したならば、
それをシステムがアラート表示すべきことを示します。

この設定は、アプリケーションが
bluetooth-central バックグラウンド・モード
を指定していないために、アプリケーションが自分でアラート表示できないときに便利です。

あるペリフェラルに対して、2つ以上のアプリケーションがこの通知を要求していたならば、フォアグラウンドで最も最近に要求をしたアプリケーションが、通知を受け取ります。

CBConnectPeripheralOptionNotifyOnDisconnectionKey

このキーには、NSNumber(Boolean)の値が対応します。この値は、アプリがサスペンドしている時に、
あるペリフェラルが切断したならば、それをシステムがアラート表示すべきことを示します。

この設定は、アプリケーションが
bluetooth-central バックグラウンド・モード
を指定していないために、アプリケーションが自分でアラート表示できないときに便利です。

あるペリフェラルに対して、2つ以上のアプリケーションがこの通知を要求していたならば、フォアグラウンドで最も最近に要求をしたアプリケーションが、通知を受け取ります。

CBConnectPeripheralOptionNotifyOnNotificationKey

このキーには、NSNumber(Boolean)の値が対応します。この値は、アプリがサスペンドしている時に、
あるペリフェラルから受信したすべてののティフィケーション(ここでのノティフィケーションは、iOSのそれではなく、Bluetooth Low Energyの規格でいうノティフィケーションを示す)に対して、
それをシステムがアラート表示すべきことを示します。

この設定は、アプリケーションが
bluetooth-central バックグラウンド・モード
を指定していないために、アプリケーションが自分でアラート表示できないときに便利です。

あるペリフェラルに対して、2つ以上のアプリケーションがこの通知を要求していたならば、フォアグラウンドで最も最近に要求をしたアプリケーションが、通知を受け取ります。

Macbook Airにお茶をこぼす前にできること

Macbook Airにお茶をこぼす前に、できることがあるのではと思ったので、写真をとってみた。

まず危険な状態。
手を前後に動かす、その動線上にお湯のみがあり、さらに、お湯のみが机の端に近いので、お湯のみを床に落として割る可能性も高い。

危険な状態:

  • お湯のみのお茶をMacbook Airにこぼす
  • お湯のみを床に落として割る

原因:

  • お湯のみが机の上に置いてある
  • 手の動線上にお湯のみがある

そもそも、開発しながらお茶を飲まない、お湯のみを机に置かない、という根本的な原因の取り除きもあるけれども、それは行き過ぎると、極端な話、死ぬ可能性があるから生きるのをやめる、になるので、ここではそこまでは問わない。

左上にお湯のみを移動した。動線にひっかからないので、トラブルは解消できそうだが、右利きなので、左にあるお湯のみまで手を伸ばすのが不便だ。

右上にお湯のみを移動した。動線は、あまり、ひっかからないだろう。左に置くよりもちょっと危険だが、お湯のみに手を伸ばすのは便利がいい。お湯のみの位置は、こうすることにした。

UTF-8なURLを書くとOctpressのページ生成で例外が発生する

本文にURLを入れていると http://tmpurl.com/何か のように、リンク先URLにUTF-8の文字が入っていると、rake generate してもページ生成に失敗します。その時のエラーメッセージは:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
unchanged sass/screen.scss
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/maruku-0.6.0/lib/maruku/input/parse_doc.rb:22:in `<top (required)>': iconv will be deprecated in the future, use String#encode instead.
Configuration from ~/_config.yml
Building site: source -> public
~/plugins/raw.rb:11:in `gsub': invalid byte sequence in UTF-8 (ArgumentError)
from ~/plugins/raw.rb:11:in `unwrap'
from ~/plugins/octopress_filters.rb:18:in `post_filter'
from ~/plugins/octopress_filters.rb:33:in `post_render'
from ~/plugins/post_filters.rb:124:in `block in post_render'
from ~/plugins/post_filters.rb:123:in `each'
from ~/plugins/post_filters.rb:123:in `post_render'
from ~/plugins/post_filters.rb:151:in `transform'
from /usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/jekyll-0.11.2/lib/jekyll/convertible.rb:84:in `do_layout'
from ~/plugins/post_filters.rb:167:in `do_layout'
from /usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/jekyll-0.11.2/lib/jekyll/post.rb:189:in `render'
from /usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/jekyll-0.11.2/lib/jekyll/site.rb:193:in `block in render'
from /usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/jekyll-0.11.2/lib/jekyll/site.rb:192:in `each'
from /usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/jekyll-0.11.2/lib/jekyll/site.rb:192:in `render'
from /usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/jekyll-0.11.2/lib/jekyll/site.rb:40:in `process'
from /usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/jekyll-0.11.2/bin/jekyll:250:in `<top (required)>'
from /usr/local/bin/jekyll:23:in `load'
from /usr/local/bin/jekyll:23:in `<main>'

対処方法は、URLをエンコードしておけばよいです。私は以下のTwitter投稿用ブックマークレットでリンク先をTwitter投稿フォームに表示させて、そのエンコードされたURLを使うことにしました。

1
javascript:(function()%7Bwindow.twttr=window.twttr%7C%7C%7B%7D;var%20D=550,A=450,C=screen.height,B=screen.width,H=Math.round((B/2)-(D/2)),G=0,F=document,E;if(C%3EA)%7BG=Math.round((C/2)-(A/2))%7Dwindow.twttr.shareWin=window.open('http://twitter.com/share','','left='+H+',top='+G+',width='+D+',height='+A+',personalbar=0,toolbar=0,scrollbars=1,resizable=1');E=F.createElement('script');E.src='http://platform.twitter.com/bookmarklets/share.js?v=1';F.getElementsByTagName('head')%5B0%5D.appendChild(E)%7D());

エラーメッセージからは、どのページがエラー原因なのかが分かりません。原因元の切り分けには、commentやdateなどがある投稿のヘッダにpublished: falseと書いて、そのページを生成対象から外して、エラーが生じるかを見ます。