BrainBit for developers Subscribe for updates Visit website

Scanner

The scanner works like this:

1. Create scanner

When creating a scanner, you need to specify the type of device to search. It can be either one device or several. Here is example for one type of devices - Callibri. 

SensorFamily filter[] = {
			    SensorFamily::SensorLEBrainBit
		    };
OpStatus st;
auto scanner = createScanner(filter, sizeof(filter), &st);
            
Scanner scanner = new Scanner(SensorFamily.SensorLEBrainBit);
            
var scanner = Scanner( SensorFamily.SensorLEBrainBit)
            
Scanner scanner = new Scanner(SensorFamily.SensorLEBrainBit);
            
var scanner = new Scanner()
await scanner.init([SensorFamily.LEBrainBit])
            
scanner = Scanner([SensorFamily.SensorLEBrainBit])
            
var scanner = NTScanner(sensorFamily: [NTSensorFamily.leBrainBit.rawValue])
            
NTScanner* scanner = [[NTScanner alloc] initWithSensorFamily:@[@(NTSensorFamilyLEBrainBit)]];
            

 

 

2. During the search, you can get a list of found devices using a callback. To do this, you need to subscribe to receive the event, and unsubscribe after the search is completed:

void sensorsCallback(SensorScanner* ptr, SensorInfo* sensors, int32_t szSensors, void* userData){
    
}
...
OpStatus st;
SensorsListenerHandle lHandle = nullptr;
addSensorsCallbackScanner(scanner, sensorsCallback, &lHandle, nullptr, &st);
            
scanner.sensorsChanged = (scanner, sensors) -> {
    sensors.forEach(sensorInfo -> Log.i("TAG", sensorInfo.getName() + ": " +  sensorInfo.getAddress()));
};
...
scanner.sensorsChanged = null;
            
scanner?.sensorsChanged = Scanner.ScannerCallback { scanner, sensors ->
    sensors.forEach { sensorInfo -> Log.i("TAG", sensorInfo.name+ ": " + sensorInfo.address) }
}
...
scanner.sensorsChanged = null
            
private void Scanner_Founded(IScanner scanner, IReadOnlyList<SensorInfo> sensors)
{
    foreach(SensorInfo sensorInfo in sensors){
        Console.WriteLine(sensorInfo.Name + ": " + sensorInfo.Address);
    }
}

scanner.EventSensorsChanged += Scanner_Founded;
...
scanner.EventSensorsChanged -= Scanner_Founded;
            
scanner.AddSensorListChanged(sensorFounded => {
	console.log(sensorFounded)
});
...
scanner.RemoveSensorListChanged();
            
def sensorFound(scanner, sensors):
   for i in range(len(sensors)):
       print('Sensor %s' % sensors[i])

scanner.sensorsChanged = sensorFound
...
scanner.sensorsChanged = None
            
scanner.setSensorsCallback(sensorFounded)
...
scanner.setSensorsCallback(nil)
            
[scanner setSensorsCallback:sensorFounded];
...
[scanner setSensorsCallback:nil];
            

 

3. Start search

OpStatus outStatus;

startScanner(scanner, &outStatus);
            
scanner.start();
            
scanner.start();
            
scanner.Start();
            
scanner.Start()
            
scanner.start()
            
scanner.startScan()
            
[scanner startScan];
            

 

4. Stop search

OpStatus outStatus;

stopScanner(scanner, &outStatus);
            
scanner.stop();
            
scanner.stop();
            
scanner.Stop();
            
scanner.Stop()
            
scanner.stop()
            
scanner.stopScan()
            
[scanner stopScan];
            

 

5. Additionally, a list of found devices can be obtained using a separate method

int32_t szSensorsInOut = 32;
SensorInfo* sensors = new SensorInfo[szSensorsInOut];
OpStatus outStatus;
sensorsScanner(scanner, sensors, &szSensorsInOut, &outStatus);
            
List<SensorInfo> sensors = scanner.getSensors();
            
var sensors: List<SensorInfo>?  = scanner.sensors
            
IReadOnlyList<SensorInfo> sensors = scanner.Sensors;
            
var sensors = await scanner.Sensors()
            
sensors = scanner.sensors()
            
var sensors = scanner.sensors
            
NSArray<NTSensorInfo*>* sensors = scanner.sensors;
            

 

`SensorInfo` contains information about device:


- Name - the name of device
- Address - MAC address of device (UUID for iOS/MacOS)
- Serial number - device's serial number
- Sensor family - type of device
- Sensor model - numerical value of the device model
- Pairing required - whether the device needs to be paired or not

 

6. After you finish working with the scanner, you need to clean up the resources used

freeScanner(scanner);
            
scanner.close();
            
scanner.close()
            
scanner.Dispose();
            
scanner.Close();
            
del scanner
            
scanner = nil
            
scanner = nil;
            

 

Important! When restarting the search, the callback will only be called when a new device is found. If you need to get all devices found by the current scanner instance, call the appropriate method.