private void Unmount(string mountPoint) { log.Info(String.Format("Unmount {0}", mountPoint)); try { Dokan.RemoveMountPoint(mountPoint); driver.Unmount(null); driver = null; } catch (DokanException ex) { log.Error("Unmount failed", ex); } if (dokanThrd != null && dokanThrd.IsAlive) { log.Info("Dokan thread join"); dokanThrd.Join(); } dokanThrd = null; log.Info("Dokan thread ended"); }
protected void Listen() { IsRunning = true; waitRemoval = new AutoResetEvent(false); insertedChip = null; chipInsertionDate = null; log.Info(String.Format("Listening on {0} reader {1}...", readerProviderName, readerUnitName)); readerProvider = DokanNFCConfig.CreateReaderProviderFromName(readerProviderName); readerUnit = DokanNFCConfig.CreateReaderUnitFromName(readerProvider, readerUnitName); if (readerProvider != null && readerUnit != null) { if (readerUnit.ConnectToReader()) { DokanNFCConfig config = DokanNFCConfig.GetSingletonInstance(); switch (config.Mode) { case DisplayMode.RawRFID: break; case DisplayMode.NFC: driver = new NFCDokanRFIDDriver(this); break; } if (driver != null) { string mountPoint = config.MountPoint; if (String.IsNullOrEmpty(mountPoint)) { string[] mountPoints = DokanNFCConfig.GetAvailableMountPoints(); if (mountPoints.Length > 0) { mountPoint = mountPoints[0]; } } if (!String.IsNullOrEmpty(mountPoint)) { DokanOptions options = DokanOptions.FixedDrive; if (config.AlwaysMounted) { Mount(mountPoint, options); } else { options |= DokanOptions.RemovableDrive; } do { if (readerUnit.WaitInsertion(500)) { Thread.Sleep(400); chipInsertionDate = DateTime.Now; log.Info("Card inserted."); if (readerUnit.Connect()) { insertedChip = readerUnit.GetSingleChip(); if (insertedChip != null) { log.Info(String.Format("Chip type `{0}`", insertedChip.Type)); if (!config.AlwaysMounted) { Mount(mountPoint, options); } RemovalChecker(); while (!waitRemoval.WaitOne(500) && IsRunning) { ; } log.Info("Card removed."); if (!config.AlwaysMounted) { Unmount(mountPoint); } } } else { log.Error("Cannot connect to the card."); } chipInsertionDate = null; } } while (IsRunning); if (config.AlwaysMounted) { Unmount(mountPoint); } } else { log.Error("No mount point."); } } else { log.Error("No matching file system driver to mount."); } readerUnit.DisconnectFromReader(); } else { log.Error("Cannot connect to the reader."); } GC.KeepAlive(readerUnit); GC.KeepAlive(readerProvider); } else { log.Error("Error in RFID reader resource allocation."); } }
protected void Listen() { IsRunning = true; waitRemoval = new AutoResetEvent(false); insertedChip = null; chipInsertionDate = null; log.Info(String.Format("Listening on {0} reader {1}...", readerProviderName, readerUnitName)); readerProvider = DokanNFCConfig.CreateReaderProviderFromName(readerProviderName); readerUnit = DokanNFCConfig.CreateReaderUnitFromName(readerProvider, readerUnitName); if (readerProvider != null && readerUnit != null) { if (readerUnit.ConnectToReader()) { DokanNFCConfig config = DokanNFCConfig.GetSingletonInstance(); switch (config.Mode) { case DisplayMode.RawRFID: break; case DisplayMode.NFC: driver = new NFCDokanRFIDDriver(this); break; } if (driver != null) { string mountPoint = config.MountPoint; if (String.IsNullOrEmpty(mountPoint)) { string[] mountPoints = DokanNFCConfig.GetAvailableMountPoints(); if (mountPoints.Length > 0) { mountPoint = mountPoints[0]; } } if (!String.IsNullOrEmpty(mountPoint)) { DokanOptions options = DokanOptions.FixedDrive; if (config.AlwaysMounted) { Mount(mountPoint, options); } else { options |= DokanOptions.RemovableDrive; } do { if (readerUnit.WaitInsertion(500)) { Thread.Sleep(400); chipInsertionDate = DateTime.Now; log.Info("Card inserted."); if (readerUnit.Connect()) { insertedChip = readerUnit.GetSingleChip(); if (insertedChip != null) { log.Info(String.Format("Chip type `{0}`", insertedChip.Type)); if (!config.AlwaysMounted) { Mount(mountPoint, options); } RemovalChecker(); while (!waitRemoval.WaitOne(500) && IsRunning) ; log.Info("Card removed."); if (!config.AlwaysMounted) { Unmount(mountPoint); } } } else { log.Error("Cannot connect to the card."); } chipInsertionDate = null; } } while (IsRunning); if (config.AlwaysMounted) { Unmount(mountPoint); } } else { log.Error("No mount point."); } } else { log.Error("No matching file system driver to mount."); } readerUnit.DisconnectFromReader(); } else { log.Error("Cannot connect to the reader."); } GC.KeepAlive(readerUnit); GC.KeepAlive(readerProvider); } else { log.Error("Error in RFID reader resource allocation."); } }