def handleAdvertisement(self, scanData: ScanData): if scanData.address != self.address: return self.result = scanData.operationMode if self.targetMode is not None and self.result != self.targetMode and self.waitUntilInTargetMode: pass elif self.targetMode is None and self.result == CrownstoneOperationMode.UNKNOWN: # if we're looking for a mode, we'll wait for the duration of the timeout in the hope it will be something other than unknown pass else: BleEventBus.emit(SystemBleTopics.abortScanning, True)
def parsePayload(self, address, rssi, nameText, serviceDataArray, serviceUUID): advertisement = Advertisement(address, rssi, nameText, serviceDataArray, serviceUUID) if advertisement.isCrownstoneFamily(): if advertisement.operationMode == CrownstoneOperationMode.SETUP: advertisement.parse() BleEventBus.emit(SystemBleTopics.rawAdvertisementClass, advertisement) else: try: advertisement.parse(self.settings.serviceDataKey) except: # fail silently. If we can't parse this, we just to propagate this message pass BleEventBus.emit(SystemBleTopics.rawAdvertisementClass, advertisement)
def handleAdvertisement(self, scanData: ScanData): if scanData.address in self.addressesToExcludeSet: return if self.setupModeOnly and not scanData.operationMode == CrownstoneOperationMode.SETUP: return # TODO: this is actually normalModeOnly, maybe change setupModeOnly to operationMode to filter for. if not self.setupModeOnly and scanData.operationMode == CrownstoneOperationMode.SETUP: return if scanData.rssi < self.rssiAtLeast: return self.deviceList.append(scanData) if self.returnFirstAcceptable: BleEventBus.emit(SystemBleTopics.abortScanning, True)
def checkAdvertisement(self, advertisement): self.cleanupExpiredTrackers() if advertisement.address not in self.trackedCrownstones: self.trackedCrownstones[ advertisement.address] = StoneAdvertisementTracker( lambda: self.removeStone(advertisement.address)) self.trackedCrownstones[advertisement.address].update(advertisement) # forward all scans over this topic. It is located here instead of the delegates so it would be easier to convert the json to classes. data = fillScanDataFromAdvertisement( advertisement, self.trackedCrownstones[advertisement.address].verified) BleEventBus.emit(BleTopics.rawAdvertisement, data) if self.trackedCrownstones[advertisement.address].verified: BleEventBus.emit(BleTopics.advertisement, data) if not self.trackedCrownstones[advertisement.address].duplicate: BleEventBus.emit(BleTopics.newDataAvailable, data)
def forcedDisconnect(self, data): BleEventBus.emit(SystemBleTopics.forcedDisconnect, self.address) self.cleanupCallback()