/// <summary> /// Determines which ports have pressure switches and which do not. /// For those that do, it reads current pressure state (good/bad). /// </summary> private void CheckPressureSwitches() { // Reset these member booleans to false on every call. for (int i = 0; i < _checkedSwitchIsPresent.Length; i++) { _checkedSwitchIsPresent[i] = _checkedIsPressureGood[i] = false; } for (int i = 0; i < _checkedSwitchIsPresent.Length; i++) { _checkedSwitchIsPresent[i] = SmartCardManager.IsPressureSwitchPresent(i + 1); if (_wasSwitchPresent[i] != _checkedSwitchIsPresent[i]) { Thread.Sleep(500); // Try again. _checkedSwitchIsPresent[i] = SmartCardManager.IsPressureSwitchPresent(i + 1); } else if (_checkedSwitchIsPresent[i]) // If pressure switch is still present since last check, we need to then re-check the pressure. { // Check the pressure. // Save the state for setting later to avoid synchronization issues. _checkedIsPressureGood[i] = SmartCardManager.CheckPressureSwitch(i + 1); if (_wasPressureGood[i] != _checkedIsPressureGood[i]) { Thread.Sleep(500); // Try again. _checkedIsPressureGood[i] = SmartCardManager.CheckPressureSwitch(i + 1); } } } }
public bool KartveOkuyucuKontrol() { // ilk giriste terminal sayisini degiskene kaydet, sertifikayi goster ve degiskene kaydet String[] terminals = SmartOp.getCardTerminals(); Program.TerminalSayisi = terminals.Length; if (terminals == null || terminals.Length == 0) { MesajiIsle("Kart takılı bir kart okuyucu bulunamadı. E-İmza programına girmeden evvel imza için kullanacağınız kartı takmalısınız.", 1); // eskiden bundan sonra cikartmiyordum, eimza kısmında kart değiştigi veya sonradan takıldığı ortaya cikiyordu. // orada uyari alip cikiyordu (karti programa girdikten sonra degistirmeyin veya onceden takiniz gibi...) // Bir tus konulup kartlari Oku diye girdikten sonra manuel olarak kart bilgisi almasi saglanabilir ama gerekli oldugunu sanmiyorum. //MessageBox.Show("Kart takılı kart okuyucu bulunamadı", "", MessageBoxButtons.OK, // System.Windows.Forms.MessageBoxIcon.Error, // System.Windows.Forms.MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly); return(false); // throw new SmartCardException("Kart takılı kart okuyucu bulunamadı"); } SmartCardManager scmgr = SmartCardManager.getInstance(); { ECertificate signingCert = scmgr.getSignatureCertificate(true, false); lbSertifikaSahibi.Text = "Sertifika ve Sahiplik Bilgisi: " + signingCert.ToString(); Program.SertifikaBilgisi = "Sertifika ve Sahiplik Bilgisi: " + signingCert.ToString(); //lbTCKimlikNo.Text = TerminalSayisi } return(true); }
public SettingsForm(ILogger logger, SmartCardManager smartCardManager) { InitializeComponent(); this.SetLogoIcon(); imgShow.Images.Add(Images.View); btnTariffPenaltyShow.ImageIndex = 0; btnTariffMetroShow.ImageIndex = 0; this.logger = logger; this.smartCardManager = smartCardManager; tariffForm = null; cboLanguage.SetEnum <CashDeskLanguage>(CashDeskHelper.GetString); cashDeskLanguage = Settings.Default.CashDeskLanguage; ApplyLanguage(); }
/// <summary> /// If pressure switch is present, then this methods reads the pressure level from it, /// otherwise this method returns Full. /// </summary> /// <param name="position"></param> /// <returns></returns> static private PressureLevel ReadPressureLevel(int position) { const string funcName = "ReadPressureLevel"; if (!SmartCardManager.IsPressureSwitchPresent(position)) { Log.Debug(funcName + ": Cylinder " + position + " has no pressure switch. Defaulting to Full"); return(PressureLevel.Full); } if (SmartCardManager.CheckPressureSwitch(position)) { Log.Debug(funcName + ": Cylinder " + position + " pressure is Full"); return(PressureLevel.Full); } Log.Debug(funcName + ": Cylinder " + position + " pressure is Low"); return(PressureLevel.Low); }
private void SelectSignature( PdfRequestDTO request, out X509Certificate2 CERTIFICATE, out IExternalSignature externalSignature) { try { SmartCardManager smartCardManager = SmartCardManager.getInstance(); var smartCardCertificate = smartCardManager.getSignatureCertificate(false, false); var signer = smartCardManager.getSigner(request.DonglePassword, smartCardCertificate); CERTIFICATE = smartCardCertificate.asX509Certificate2(); externalSignature = new SmartCardSignature(signer, CERTIFICATE, "SHA-256"); } catch (Exception ex) { CERTIFICATE = null; externalSignature = null; MessageBox.Show(ex.Message); } }
/// <summary> /// Determines which card readers have inserted cards and which have no cards. /// </summary> private void CheckSmartCardPresence() { // Reset these member booleans to false on every call. for (int i = 0; i < _checkedCardIsPresent.Length; i++) { _checkedCardIsPresent[i] = false; } for (int i = 0; i < _checkedCardIsPresent.Length; i++) { // Check if smart card has changed. // Save the state for setting later to avoid synchronization issues. _checkedCardIsPresent[i] = SmartCardManager.IsCardPresent(i + 1); if (_wasCardPresent[i] != _checkedCardIsPresent[i]) { Thread.Sleep(500); // Try again. _checkedCardIsPresent[i] = SmartCardManager.IsCardPresent(i + 1); } } }
public bool KartveOkuyucuKontrol() { String[] terminals = SmartOp.getCardTerminals(); Program.TerminalSayisi = terminals.Length; if (terminals == null || terminals.Length == 0) { return(false); } SmartCardManager scmgr = SmartCardManager.getInstance(); { ECertificate signingCert = scmgr.getSignatureCertificate(true, false); LBLTCKIMLIK.Text = Bul(signingCert.ToString(), "SERIALNUMBER=", ","); LBLADISOYADI.Text = Bul(signingCert.ToString(), "CN=", ","); LBLSERIAL.Text = Bul(signingCert.ToString(), "Serial:", "Valid from").TrimStart(' '); LBLBASTARIH.Text = Bul(signingCert.ToString(), "Valid from", "to").TrimStart(' ').TrimEnd(' '); LBLBITTARIH.Text = Bul(signingCert.ToString(), " to", "Ca:").TrimStart(' ').TrimEnd(' '); DateTime bitis_tarihi = DateTime.Parse(LBLBITTARIH.Text); DateTime baslangic_tarihi = DateTime.Parse(LBLBASTARIH.Text); DateTime simdi = DateTime.Now; int kalangun = GunFarkikBul(simdi, bitis_tarihi); if (bitis_tarihi < simdi) { LBLKALANGUN.Text = "- " + kalangun.ToString(); LBLKALANGUN.ForeColor = Color.Red; } else { LBLKALANGUN.Text = kalangun.ToString(); } Program.SertifikaBilgisi = "Sertifika ve Sahiplik Bilgisi: " + signingCert.ToString(); } return(true); }
/// <summary> /// Return the information from all smart cards that are present. /// </summary> /// <returns>All of the installed cylinders.</returns> static private void ReadChangedCylinders(bool[] changedSmartCards, IList <GasEndPoint> changedGasEndPoints, PortRestrictions port1Restrictions) { const string funcName = "ReadChangedCylinders: "; Log.Assert(changedSmartCards != null, funcName + "changedSmartCards should not be null."); DockingStation dockingStation = Controller.GetDockingStation(); // SGF 8-Nov-2012 INS-2686 changedGasEndPoints.Clear(); for (int i = 0; i < changedSmartCards.Length; i++) { int position = i + 1; Log.Debug(funcName + "POSITION " + position); if (changedSmartCards[position - 1] == false) // No detection of a card insertion, nor a removal? { Log.Debug(string.Format("{0}Position {1} Smart card SKIPPED; No insertion change detected.", funcName, position)); if (position == Controller.FRESH_AIR_GAS_PORT) { GasEndPoint persistedPort1GasEndPoint = new GasEndPointDataAccess().FindByPosition(Controller.FRESH_AIR_GAS_PORT); // If there's nothing known to be installed on port 1, then create a fresh air // cylinder for the port. // This could happen if, while nothing was installed on the port, a SettingsUpdate // just occurred previously where the port setting was changed to allow fresh air. // In that situation, we have to then make the fresh air cylinder. if (persistedPort1GasEndPoint == null) { Log.Debug(string.Format("{0}Position {1}, No persisted cylinder; assuming Fresh Air.", funcName, position)); GasEndPoint freshAirCylinder = GasEndPoint.CreateFreshAir(position); freshAirCylinder.GasChangeType = GasEndPoint.ChangeType.Installed; changedGasEndPoints.Add(freshAirCylinder); } } // SGF 8-Nov-2012 INS-2686 -- begin // Soon, we will check to see if a pressure switch is present, and if so, read the pressure level. // Before we do that, we must check for two scenarios in which it is not necessary or appropriate // to read a pressure switch. // 1. If there is no cylinder attached to the port, there is no reason to check for a pressure switch. // 2. If this is the first port, and we know that the port is drawing fresh air, there is no reason // to check for a pressure switch. This case cannot be handled by case #1, as we define a "logical" // cylinder to represent fresh air. // If we find either scenario for the current port, we skip further processing on this port, and proceed to // the next one. GasEndPoint currentInstalledCylinder = dockingStation.GasEndPoints.Find(ic => ic.Position == position); if (currentInstalledCylinder == null) { Log.Debug(string.Format("{0}Position {1} No cylinder present; do not check for pressure switch.", funcName, position)); continue; } else { bool isFreshAir = currentInstalledCylinder.Cylinder.IsFreshAir; if (isFreshAir) { Log.Debug(string.Format("{0}Position {1} Fresh air; do not check for pressure switch.", funcName, position)); continue; } } // SGF 8-Nov-2012 INS-2686 -- end // SMARTCARD NOT CHANGED (NO INSERT OR REMOVAL DETECTED). // WE NEED TO AT LEAST ALWAYS READ THE PRESSURE SWITCH THEN. if (SmartCardManager.IsPressureSwitchPresent(position)) { GasEndPoint pressureCylinder = new GasEndPoint(); pressureCylinder.Position = position; pressureCylinder.Cylinder.Pressure = ReadPressureLevel(position); pressureCylinder.GasChangeType = GasEndPoint.ChangeType.PressureChanged; Log.Debug(string.Format("{0}Position {1} Pressure Switch reports {2}.", funcName, position, pressureCylinder.Cylinder.Pressure)); changedGasEndPoints.Add(pressureCylinder); } else { Log.Debug(string.Format("{0}Position {1} Pressure Switch not present.", funcName, position)); } continue; } // IF WE MAKE IT TO HERE, THE CARD HAS BEEN EITHER INSERTED OR REMOVED. if (!SmartCardManager.IsCardPresent(position)) // CARD REMOVED? { Log.Debug(string.Format("{0}Position {1} SmartCard not present, Returning CardRemoved", funcName, position)); // Server needs to know specifically that cylinder is missing. // Indicate this with an InstalledCylinder containing an empty Cylinder object. GasEndPoint missingCylinder = new GasEndPoint(); missingCylinder.Position = position; missingCylinder.GasChangeType = GasEndPoint.ChangeType.Uninstalled; changedGasEndPoints.Add(missingCylinder); // If a cylinder is not installed on the fresh air port, then assume fresh air // for the port if (position == Controller.FRESH_AIR_GAS_PORT) { Log.Debug(string.Format("{0}Position {1} is assumed to be Fresh Air.", funcName, position)); GasEndPoint freshAirCylinder = GasEndPoint.CreateFreshAir(position); freshAirCylinder.GasChangeType = GasEndPoint.ChangeType.Installed; changedGasEndPoints.Add(freshAirCylinder); } continue; } // IF WE MAKE IT TO HERE, THE CARD HAS BEEN INSERTED. Cylinder cylinder = SmartCardManager.ReadCard(position); if (cylinder == null) // Couldn't read valid cylinder? Driver error or corrupt card. { Log.Debug(string.Format("{0}Position {1}, ReadCard returned null. SKIPPING cylinder.", funcName, position)); continue; } // Dates read from card will be in 'local' time, but everything we deal with is in UTC. cylinder.ExpirationDate = Configuration.ToUniversalTime(cylinder.ExpirationDate); cylinder.RefillDate = Configuration.ToUniversalTime(cylinder.RefillDate); Thread.Sleep(1000); cylinder.Pressure = ReadPressureLevel(position); GasEndPoint gasEndPoint = new GasEndPoint(cylinder, position, GasEndPoint.Type.iGas); gasEndPoint.GasChangeType = GasEndPoint.ChangeType.Installed; Log.Debug(string.Format("{0}Position {1}, Returning CardInserted. Pressure={2}", funcName, position, cylinder.Pressure)); changedGasEndPoints.Add((GasEndPoint)gasEndPoint.Clone()); } // end-for return; }
/// <summary> /// Return the information from all smart cards, manifolds and manual cylinders that are present at start-up. /// </summary> /// <param name="installedCylinders">Information about the cylinders is placed into this passed-in list.</param> static private void ReadInstalledCylinders(List <GasEndPoint> gasEndPoints, PortRestrictions port1Restrictions) { const string funcName = "ReadInstalledCylinders: "; // Get all currently attached manifolds and manually-assigned cylinders. List <GasEndPoint> manGasEndPoints = new GasEndPointDataAccess().FindAll().FindAll(m => m.InstallationType == GasEndPoint.Type.Manifold || m.InstallationType == GasEndPoint.Type.Manual); for (int position = 1; position <= Configuration.DockingStation.NumGasPorts; position++) { Log.Debug(funcName + "POSITION " + position); // iGas cylinders take precendence if (!SmartCardManager.IsCardPresent(position)) { Log.Debug(string.Format("{0}Position {1}, No iGas card detected.", funcName, position)); // Does the port have a manifold or manual cylinder attached? Then make sure we include // that cylinder in the returned list. If no cylinder exists on port 1, then create a // virtual fresh air cylinder. GasEndPoint man = manGasEndPoints.Find(m => m.Position == position); if (man != null) { Log.Debug(string.Format("{0}Position {1} {2} found (\"{3}\", \"{4}\", Pressure {5}).", funcName, position, man.InstallationType == GasEndPoint.Type.Manifold ? "Manifold" : "Manual Cylinder", man.Cylinder.FactoryId, man.Cylinder.PartNumber, man.Cylinder.Pressure)); gasEndPoints.Add(man); } else if (position == Controller.FRESH_AIR_GAS_PORT) { Log.Debug(string.Format("{0}Position {1} is assumed to be Fresh Air.", funcName, position)); GasEndPoint freshAirEndPoint = GasEndPoint.CreateFreshAir(position); freshAirEndPoint.GasChangeType = GasEndPoint.ChangeType.Installed; gasEndPoints.Add(freshAirEndPoint); } continue; } // IF WE MAKE IT TO HERE, THEN WE KNOW WE HAVE AN INSERTED SMART CARD WHICH MEANS iGas IS ATTACHED. Cylinder cylinder = SmartCardManager.ReadCard(position); if (cylinder == null) // Check for a valid cylinder. { Log.Debug(string.Format("{0}Position {1}, ReadCard returned null. SKIPPING cylinder.", funcName, position)); continue; } // Dates read from card will be in 'local' time, but everything we deal with is in UTC. cylinder.ExpirationDate = Configuration.ToUniversalTime(cylinder.ExpirationDate); cylinder.RefillDate = Configuration.ToUniversalTime(cylinder.RefillDate); Thread.Sleep(1000); if (SmartCardManager.IsPressureSwitchPresent(position)) { if (SmartCardManager.CheckPressureSwitch(position)) { cylinder.Pressure = PressureLevel.Full; } else { cylinder.Pressure = PressureLevel.Low; } Log.Debug(string.Format("{0}Position {1} Pressure Switch reports {2}.", funcName, position, cylinder.Pressure)); } else { Log.Debug(string.Format("{0}Position {1} Pressure Switch not detected.", funcName, position)); } GasEndPoint gasEndPoint = new GasEndPoint(cylinder, position, GasEndPoint.Type.iGas); // Add the installed cylinder to the DockingStation (IDS). gasEndPoints.Add(gasEndPoint); } return; }