CoreBluetooth Namespace
Important
Some information relates to prerelease product that may be substantially modified before it’s released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
The CoreBluetooth namespace provides classes for Bluetooth communication.
Classes
Interfaces
ICBCentralManagerDelegate |
Interface representing the required methods (if any) of the protocol CBCentralManagerDelegate. |
ICBPeripheralDelegate |
Interface representing the required methods (if any) of the protocol CBPeripheralDelegate. |
ICBPeripheralManagerDelegate |
Interface representing the required methods (if any) of the protocol CBPeripheralManagerDelegate. |
Enums
CBATTError |
Errors returned by a GATT server. |
CBAttributePermissions |
Enumerates the read, write, and encryption permissions for a characteristic's values. |
CBCentralManagerState |
Enumerates possible states of a CBCentralManager. |
CBCharacteristicProperties |
The possible properties of a characteristic. A characteristic may have multiple properties. |
CBCharacteristicWriteType |
Enumerates the possible types of writes to a characteristic's value. |
CBError |
Errors possible during Bluetooth LE transactions. |
CBManagerState | |
CBPeripheralManagerAuthorizationStatus |
Enumerates the possible states of the CBPeripheralManager. |
CBPeripheralManagerConnectionLatency |
The connection latency of the CBPeripheralManager. |
CBPeripheralManagerState |
Enumerates the possible states of the CBPeripheralManager. |
CBPeripheralState |
Enumerates the possible connection states of a CBPeripheral. |
Remarks
The CoreBluetooth namespace allows developers to work with Bluetooth Low Energy (Bluetooth LE) devices.
The Bluetooth LE model revolves around CBPeer objects. There are two kinds of CBPeer: CBCentral objects that scan and consume data provided by CBPeripheral objects that correspond to data-providing Bluetooth LE devices.
Generally, the iOS device will be in the CBCentral role, but it is also possible to create apps in which the device is a CBPeripheral.
The following example shows the typical initialization behavior of an app that consumes data from external Bluetooth LE devices. Applications that have a CBCentral must have an associated CBCentralManagerDelegate delegate object and must override it's UpdatedState method. The override must check the state of the CBCentralManager and confirm that it is PoweredOn.
Typically, applications will want to scan for Bluetooth LE peripherals. This is a high-energy function, so developers should call M:CoreBluetooth.CBManager.StopScan* after finding the CBPeripheral in which they are interested or after a certain amount of time.
public class MySimpleCBCentralManagerDelegate : CBCentralManagerDelegate
{
override public void UpdatedState (CBCentralManager mgr)
{
if (mgr.State == CBCentralManagerState.PoweredOn) {
//Passing in null scans for all peripherals. Peripherals can be targeted by using CBUIIDs
CBUUID[] cbuuids = null;
mgr.ScanForPeripherals (cbuuids); //Initiates async calls of DiscoveredPeripheral
//Timeout after 30 seconds
var timer = new Timer (30 * 1000);
timer.Elapsed += (sender, e) => mgr.StopScan();
} else {
//Invalid state -- Bluetooth powered down, unavailable, etc.
System.Console.WriteLine ("Bluetooth is not available");
}
}
public override void DiscoveredPeripheral (CBCentralManager central, CBPeripheral peripheral, NSDictionary advertisementData, NSNumber RSSI)
{
Console.WriteLine ("Discovered {0}, data {1}, RSSI {2}", peripheral.Name, advertisementData, RSSI);
}
}
public partial class HelloBluetoothCSharpViewController : UIViewController
{
MySimpleCBCentralManagerDelegate myDel;
public override void ViewDidLoad ()
{
base.ViewDidLoad ();
//Important to retain reference, else will be GC'ed
myDel = new MySimpleCBCentralManagerDelegate ();
var myMgr = new CBCentralManager (myDel, DispatchQueue.CurrentQueue);
}
//...etc...
}
The DiscoveredPeripheral method may be called multiple times for a single physical device. Once application developers have a reference to the CBPeripheral in which they are interested, they should maintain that reference for further work and call StopScan.
With a reference to a discovered CBPeripheral, developers can then connect to it, as shown in the following example.
A CBPeripheral has zero or more CBServices, each of which has zero or more CBCharacteristics. If the characteristic represents a measurement (such as a heartbeat, time, temperature, etc.), the value will be in the Value property.
public class SimplePeripheralDelegate : CBPeripheralDelegate
{
public override void DiscoveredService (CBPeripheral peripheral, NSError error)
{
System.Console.WriteLine ("Discovered a service");
foreach (var service in peripheral.Services) {
Console.WriteLine (service.ToString ());
peripheral.DiscoverCharacteristics (service);
}
}
public override void DiscoveredCharacteristic (CBPeripheral peripheral, CBService service, NSError error)
{
System.Console.WriteLine ("Discovered characteristics of " + peripheral);
foreach (var c in service.Characteristics) {
Console.WriteLine (c.ToString ());
peripheral.ReadValue (c);
}
}
public override void UpdatedValue (CBPeripheral peripheral, CBDescriptor descriptor, NSError error)
{
Console.WriteLine ("Value of characteristic " + descriptor.Characteristic + " is " + descriptor.Value);
}
public override void UpdatedCharacterteristicValue (CBPeripheral peripheral, CBCharacteristic characteristic, NSError error)
{
Console.WriteLine ("Value of characteristic " + characteristic.ToString () + " is " + characteristic.Value);
}
}
//...
mgr = new CBCentralManager (myCentralDelegate, DispatchQueue.CurrentQueue);
mgr.ConnectedPeripheral += (s, e) => {
activePeripheral = e.Peripheral;
System.Console.WriteLine ("Connected to " + activePeripheral.Name);
if (activePeripheral.Delegate == null) {
activePeripheral.Delegate = new SimplePeripheralDelegate ();
//Begins asynchronous discovery of services
activePeripheral.DiscoverServices ();
}
};
//Connect to peripheral, triggering call to ConnectedPeripheral event handled above
mgr.ConnectPeripheral (myPeripheral);