From b6b4e13869b18931fd7aa5787dd77423ff508c5d Mon Sep 17 00:00:00 2001 From: edo-neo Date: Mon, 10 Feb 2025 16:27:11 +0100 Subject: [PATCH] rfid write tag ok in dev tbt production --- src/components/rfid_pn532.py | 38 ++++++++++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/src/components/rfid_pn532.py b/src/components/rfid_pn532.py index 23796d3..ca1e750 100644 --- a/src/components/rfid_pn532.py +++ b/src/components/rfid_pn532.py @@ -85,5 +85,39 @@ class RFID_PN532(Component): self.rfid_error_signal.emit(False) self.mutex.unlock() - def write_tag(self,data): - self.data_to_write=copy.deepcopy(data) + def write_tag(self, data): + self.data_to_write = copy.deepcopy(data) + if not self.simulate: + if not self.connected: + self.open_device() + + if not self.connected: + self.log.error("Failed to connect to device") + return + + if self.mutex.tryLock(): + try: + target = self.clf.sense(RemoteTarget('106A'), RemoteTarget('106B'), RemoteTarget('212F')) + if target is not None: + tag = src.lib.nfc.tag.activate(self.clf, target) + if tag is not None and tag.ndef is not None: + self.log.info("Detected NFC tag, writing data...") + ndef_record = ndef.TextRecord(self.data_to_write) + + # IMPORTANT: DON'T CLOSE DEVICE BEFORE WRITING + tag.ndef.records = [ndef_record] # Write the record to the tag + self.log.info(f"Data '{self.data_to_write}' written successfully to tag.") + else: + self.log.error("Tag is not NDEF-compatible or invalid") + else: + self.log.debug("No tag present for writing") + except Exception as e: + self.log.error(f"Error during tag writing: {e}") + finally: + # Move closing outside the try block + self.mutex.unlock() # Unlock mutex always + + # Close AFTER writing and mutex release + if self.connected: + self.close_device() # close_device can raise exception +