def _getNearest(self, setup, rssiAtLeast, scanDuration, returnFirstAcceptable, validated, addressesToExclude): addressesToExcludeSet = set() for data in addressesToExclude: if isinstance(data, dict): if "address" in data: addressesToExcludeSet.add(data["address"].lower()) else: raise BluenetException( BluenetError.INVALID_ADDRESS, "Addresses to Exclude is either an array of addresses (like 'f7:19:a4:ef:ea:f6') or an array of dicts with the field 'address'" ) else: addressesToExcludeSet.add(data.lower()) selector = NearestSelector(setup, rssiAtLeast, returnFirstAcceptable, addressesToExcludeSet) topic = Topics.advertisement if not validated: topic = SystemBleTopics.rawAdvertisement subscriptionId = BluenetEventBus.subscribe( topic, selector.handleAdvertisement) self.ble.startScanning(scanDuration=scanDuration) BluenetEventBus.unsubscribe(subscriptionId) return selector.getNearest()
def isCrownstoneInNormalMode(self, address, scanDuration=3, waitUntilInRequiredMode=False): # print("Checking if it is in normal mode, address", address) checker = NormalModeChecker(address, waitUntilInRequiredMode) subscriptionId = BluenetEventBus.subscribe(Topics.advertisement, checker.handleAdvertisement) self.ble.startScanning(scanDuration=scanDuration) BluenetEventBus.unsubscribe(subscriptionId) return checker.getResult()
def getRssiAverage(self, address, scanDuration=3): # print("Checking if it is in normal mode, address", address) checker = RssiChecker(address) subscriptionId = BluenetEventBus.subscribe(Topics.advertisement, checker.handleAdvertisement) self.ble.startScanning(scanDuration=scanDuration) BluenetEventBus.unsubscribe(subscriptionId) return checker.getResult()
def getRssiAverage(self, address, scanDuration=3): checker = RssiChecker(address) subscriptionId = BluenetEventBus.subscribe( SystemBleTopics.rawAdvertisement, lambda advertisement: checker. handleAdvertisement(advertisement.getDictionary())) self.ble.startScanning(scanDuration=scanDuration) BluenetEventBus.unsubscribe(subscriptionId) return checker.getResult()
def getCrownstonesByScanning(self, scanDuration=3): gatherer = Gatherer() subscriptionIdValidated = BluenetEventBus.subscribe(Topics.advertisement, lambda advertisementData: gatherer.handleAdvertisement(advertisementData, True) ) subscriptionIdAll = BluenetEventBus.subscribe(SystemBleTopics.rawAdvertisement, lambda advertisement: gatherer.handleAdvertisement(advertisement.getDictionary(), False) ) self.ble.startScanning(scanDuration=scanDuration) BluenetEventBus.unsubscribe(subscriptionIdValidated) BluenetEventBus.unsubscribe(subscriptionIdAll) return gatherer.getCollection()
def _getNearest(self, setup, rssiAtLeast, timeout, returnFirstAcceptable, validated): selector = NearestSelector(setup, rssiAtLeast, returnFirstAcceptable) topic = Topics.advertisement if not validated: topic = SystemBleTopics.rawAdvertisement subscriptionId = BluenetEventBus.subscribe( topic, selector.handleAdvertisement) self.ble.startScanning(timeout=timeout) BluenetEventBus.unsubscribe(subscriptionId) return selector.getNearest()
def stop(self): print("Stopping UartBridge") self.running = False BluenetEventBus.unsubscribe(self.eventId)
def shutDown(self): for subscriptionId in self.subscriptionIds: BluenetEventBus.unsubscribe(subscriptionId) self.validator.shutDown()