示例#1
0
    def read_loop(self):
        log.debug("READER: start new reading loop...")
        if not self._clf:
            try:
                self._clf = nfc.ContactlessFrontend(probe=nfc.dev.__all__)
                log.debug("READER: CLF found: " + str(self._clf))
            except LookupError:
                log.warning("READER: Reader device not found. Exiting")
                self.Exit()
                return
        try:
            log.debug("READER: Now start reading")
            while not self._exit_reading:
                if not self._pause_reading:
                    tag = self._clf.poll(general_bytes=None)
                else:
                    tag = None
                if not tag:
                    time.sleep(0.5)
                    continue
                if isinstance(tag, nfc.Type3Tag):
                    log.debug("READER: New tag found: " + str(tag))
                    last_tag = {'idm': tag.idm, 'pmm': tag.pmm}
                    if tag.ndef is not None:
                        log.debug("READER: NDEF is present")
                        self._last_idm = tag.idm
                        last_tag['version'] = tag.ndef.version
                        last_tag['writeable'] = tag.ndef.writeable
                        last_tag['capacity'] = tag.ndef.capacity
                        last_tag['size'] = len(tag.ndef.message)

                        self._message = Message(tag.ndef.message)
                        log.debug("READER: NDEF Message detected: ")
                        log.debug("READER:     type=%s" % self._message.type)
                        if last_tag['size']:
                            log.debug("READER: size: %d" % last_tag['size'])
                            self.NDEFMessage(tag.ndef.message)  # emit
                        self.TagInfo(pickle.dumps(last_tag))

                while tag.is_present:
                    time.sleep(1)
                log.debug("READER: Tag removed")

        except IOError:
            log.warning("READER: IO Error occured. restarting...")
            read_thread = Thread(target=self.read_loop, name="ReadThread")
            read_thread.start()
示例#2
0
    def WriteNDEF(self, message_string):
        log.info("WRITER: Writting...")
        self._pause_reading = True
        self._message = Message(str(message_string))
        log.info("WRITER: Write message with type " + self._message.type)
        if not self._clf:
            try:
                self._clf = nfc.ContactlessFrontend(probe=nfc.dev.__all__)
            except LookupError:
                log.warning("WRITER: Reader/Writer not found. Exiting")
                self.Exit()
        tag = None
        while not tag:
            tag = self._clf.poll(general_bytes=None)

        if tag:
            log.debug("WRITER: found tag with IDm " + tag.idm)
            tag.ndef.message = self._message.tostring()
            log.debug("WRITER: Writing successfully finished.")
        else:
            log.info("WRITER: No tag found...")
        self._pause_reading = False
        return