Пример #1
0
    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)
Пример #2
0
    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)
Пример #3
0
    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)
Пример #4
0
    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)
Пример #5
0
 def forcedDisconnect(self, data):
     BleEventBus.emit(SystemBleTopics.forcedDisconnect, self.address)
     self.cleanupCallback()