private void StartLoadDeviceInfo() { lock (LockDeviceInfo) { if (!DeviceInfoLoaded) { try { //byte[] Imsi = CurrentModel.ExecuteJsonMethodAsBytes("ReadImsi", "Imsi"); // 9 bytes: 08 29 40 40 ... //string BatteryLevel = CurrentModel.ExecuteJsonMethodAsString("ReadBatteryLevel", "BatteryLevel"); //string SystemAsicVersion = CurrentModel.ExecuteJsonMethodAsString("ReadSystemAsicVersion", "SystemAsicVersion"); // 8960 -> Chip SOC version //string OperatorName = CurrentModel.ExecuteJsonMethodAsString("ReadOperatorName", "OperatorName"); // 000-DK //string ManufacturerModelName = CurrentModel.ExecuteJsonMethodAsString("ReadManufacturerModelName", "ManufacturerModelName"); // RM-821_eu_denmark_251 //string AkVersion = CurrentModel.ExecuteJsonMethodAsString("ReadAkVersion", "AkVersion"); // 9200.10521 //string BspVersion = CurrentModel.ExecuteJsonMethodAsString("ReadBspVersion", "BspVersion"); // 3051.40000 //string ProductCode = CurrentModel.ExecuteJsonMethodAsString("ReadProductCode", "ProductCode"); // 059Q9D7 //string SecurityMode = CurrentModel.ExecuteJsonMethodAsString("GetSecurityMode", "SecMode"); // Restricted //string SerialNumber = CurrentModel.ExecuteJsonMethodAsString("ReadSerialNumber", "SerialNumber"); // 356355051883955 = IMEI //string SwVersion = CurrentModel.ExecuteJsonMethodAsString("ReadSwVersion", "SwVersion"); // 3051.40000.1349.0007 //string ModuleCode = CurrentModel.ExecuteJsonMethodAsString("ReadModuleCode", "ModuleCode"); // 0205137 //byte[] PublicId = CurrentModel.ExecuteJsonMethodAsBytes("ReadPublicId", "PublicId"); // 0x14 bytes: a5 e5 ... //string Psn = CurrentModel.ExecuteJsonMethodAsString("ReadPsn", "Psn"); // CEP737370 //string HwVersion = CurrentModel.ExecuteJsonMethodAsString("ReadHwVersion", "HWVersion"); // 6504 = 6.5.0.4 //byte[] BtId = CurrentModel.ExecuteJsonMethodAsBytes("ReadBtId", "BtId"); // 6 bytes: bc c6 ... //byte[] WlanMacAddress1 = CurrentModel.ExecuteJsonMethodAsBytes("ReadWlanMacAddress", "WlanMacAddress1"); // 6 bytes //byte[] WlanMacAddress2 = CurrentModel.ExecuteJsonMethodAsBytes("ReadWlanMacAddress", "WlanMacAddress2"); // same //byte[] WlanMacAddress3 = CurrentModel.ExecuteJsonMethodAsBytes("ReadWlanMacAddress", "WlanMacAddress3"); // same //bool SimlockActive = CurrentModel.ExecuteJsonMethodAsBoolean("ReadSimlockActive", "SimLockActive"); // false //string ServiceTag = CurrentModel.ExecuteJsonMethodAsString("ReadServiceTag", "ServiceTag"); // error //byte[] RfChipsetVersion = CurrentModel.ExecuteJsonMethodAsBytes("ReadRfChipsetVersion", "RfChipsetVersion"); // error //byte[] Meid = CurrentModel.ExecuteJsonMethodAsBytes("ReadMeid", "Meid"); // error //string Test = CurrentModel.ExecuteJsonMethodAsString("ReadManufacturingData", ""); -> This method is only possible in Label-mode. UefiSecurityStatusResponse SecurityStatus = CurrentModel.ReadSecurityStatus(); UInt32? FlagsResult = CurrentModel.ReadSecurityFlags(); UInt32 SecurityFlags = 0; if (FlagsResult != null) { SecurityFlags = (UInt32)CurrentModel.ReadSecurityFlags(); LogFile.Log("Security flags: 0x" + SecurityFlags.ToString("X8")); FinalConfigDakStatus = CurrentModel.ReadFuseStatus(NokiaFlashModel.Fuse.Dak); FinalConfigFastBootStatus = CurrentModel.ReadFuseStatus(NokiaFlashModel.Fuse.FastBoot); FinalConfigFfuVerifyStatus = CurrentModel.ReadFuseStatus(NokiaFlashModel.Fuse.FfuVerify); FinalConfigJtagStatus = CurrentModel.ReadFuseStatus(NokiaFlashModel.Fuse.Jtag); FinalConfigOemIdStatus = CurrentModel.ReadFuseStatus(NokiaFlashModel.Fuse.OemId); FinalConfigProductionDoneStatus = CurrentModel.ReadFuseStatus(NokiaFlashModel.Fuse.ProductionDone); FinalConfigPublicIdStatus = CurrentModel.ReadFuseStatus(NokiaFlashModel.Fuse.PublicId); FinalConfigRkhStatus = CurrentModel.ReadFuseStatus(NokiaFlashModel.Fuse.Rkh); FinalConfigRpmWdogStatus = CurrentModel.ReadFuseStatus(NokiaFlashModel.Fuse.RpmWdog); FinalConfigSecGenStatus = CurrentModel.ReadFuseStatus(NokiaFlashModel.Fuse.SecGen); FinalConfigSecureBootStatus = CurrentModel.ReadFuseStatus(NokiaFlashModel.Fuse.SecureBoot); FinalConfigShkStatus = CurrentModel.ReadFuseStatus(NokiaFlashModel.Fuse.Shk); FinalConfigSimlockStatus = CurrentModel.ReadFuseStatus(NokiaFlashModel.Fuse.Simlock); FinalConfigSpdmSecModeStatus = CurrentModel.ReadFuseStatus(NokiaFlashModel.Fuse.SpdmSecMode); FinalConfigSsmStatus = CurrentModel.ReadFuseStatus(NokiaFlashModel.Fuse.Ssm); } else LogFile.Log("Security flags could not be read"); PlatformName = CurrentModel.ReadStringParam("DPI"); LogFile.Log("Platform Name: " + PlatformName); // Some phones do not support the Terminal interface! (928 verizon) // Instead read param RRKH to get the RKH. PublicID = null; byte[] RawPublicID = CurrentModel.ReadParam("PID"); if ((RawPublicID != null) && (RawPublicID.Length > 4)) { PublicID = new byte[RawPublicID.Length - 4]; Array.Copy(RawPublicID, 4, PublicID, 0, RawPublicID.Length - 4); LogFile.Log("Public ID: " + Converter.ConvertHexToString(PublicID, " ")); } else { PublicID = new byte[20]; LogFile.Log("Public ID: " + Converter.ConvertHexToString(PublicID, " ")); } RootKeyHash = CurrentModel.ReadParam("RRKH"); if (RootKeyHash != null) LogFile.Log("Root Key Hash: " + Converter.ConvertHexToString(RootKeyHash, " ")); if (SecurityStatus != null) { PlatformSecureBootStatus = SecurityStatus.PlatformSecureBootStatus; LogFile.Log("Platform Secure Boot Status: " + PlatformSecureBootStatus.ToString()); UefiSecureBootStatus = SecurityStatus.UefiSecureBootStatus; LogFile.Log("Uefi Secure Boot Status: " + UefiSecureBootStatus.ToString()); EffectiveSecureBootStatus = SecurityStatus.PlatformSecureBootStatus && SecurityStatus.UefiSecureBootStatus; LogFile.Log("Effective Secure Boot Status: " + EffectiveSecureBootStatus.ToString()); BootloaderSecurityQfuseStatus = SecurityStatus.SecureFfuEfuseStatus; LogFile.Log("Bootloader Security Qfuse Status: " + BootloaderSecurityQfuseStatus.ToString()); BootloaderSecurityAuthenticationStatus = SecurityStatus.AuthenticationStatus; LogFile.Log("Bootloader Security Authentication Status: " + BootloaderSecurityAuthenticationStatus.ToString()); BootloaderSecurityRdcStatus = SecurityStatus.RdcStatus; LogFile.Log("Bootloader Security Rdc Status: " + BootloaderSecurityRdcStatus.ToString()); EffectiveBootloaderSecurityStatus = SecurityStatus.SecureFfuEfuseStatus && !SecurityStatus.AuthenticationStatus && !SecurityStatus.RdcStatus; LogFile.Log("Effective Bootloader Security Status: " + EffectiveBootloaderSecurityStatus.ToString()); NativeDebugStatus = !SecurityStatus.DebugStatus; LogFile.Log("Native Debug Status: " + NativeDebugStatus.ToString()); } byte[] CID = CurrentModel.ReadParam("CID"); byte[] EMS = CurrentModel.ReadParam("EMS"); if (CID != null && EMS != null) { UInt16 MID = (UInt16)(((UInt16)CID[0] << 8) + CID[1]); UInt64 MemSize = (UInt64)(((UInt32)EMS[0] << 24) + ((UInt32)EMS[1] << 16) + ((UInt32)EMS[2] << 8) + EMS[3]) * 0x200; double MemSizeDouble = (double)MemSize / 1024 / 1024 / 1024; MemSizeDouble = (double)(int)(MemSizeDouble * 10) / 10; string Manufacturer = null; switch (MID) { case 0x0002: case 0x0045: Manufacturer = "SanDisk"; break; case 0x0011: Manufacturer = "Toshiba"; break; case 0x0013: Manufacturer = "Micron"; break; case 0x0015: Manufacturer = "Samsung"; break; case 0x0090: Manufacturer = "Hynix"; break; case 0x0070: Manufacturer = "Kingston"; break; case 0x00EC: Manufacturer = "GigaDevice"; break; } if (Manufacturer == null) eMMC = MemSizeDouble.ToString() + " GB"; else eMMC = Manufacturer + " " + MemSizeDouble.ToString() + " GB"; SamsungWarningVisible = (MID == 0x0015); } else { eMMC = "Unknown"; SamsungWarningVisible = true; } int? chargecurrent = CurrentModel.ReadCurrentChargeCurrent(); if (chargecurrent.HasValue) { if (chargecurrent < 0) ChargingStatus = CurrentModel.ReadCurrentChargeLevel() + "% - " + ((-1) * CurrentModel.ReadCurrentChargeCurrent()) + " mA (discharging)"; else ChargingStatus = CurrentModel.ReadCurrentChargeLevel() + "% - " + CurrentModel.ReadCurrentChargeCurrent() + " mA (charging)"; LogFile.Log("Charging status: " + ChargingStatus); } else { ChargingStatus = "Unknown"; LogFile.Log("Charging status: " + ChargingStatus); } PhoneInfo Info = CurrentModel.ReadPhoneInfo(true); if (Info.FlashAppProtocolVersionMajor < 2) BootloaderDescription = "Lumia Bootloader Spec A"; else BootloaderDescription = "Lumia Bootloader Spec B"; LogFile.Log("Bootloader: " + BootloaderDescription); ProductCode = Info.ProductCode; LogFile.Log("ProductCode: " + ProductCode); ProductType = Info.Type; LogFile.Log("ProductType: " + ProductType); if (RootKeyHash == null) { LogFile.Log("Root Key Hash was null. Gathering information from an alternative source."); RootKeyHash = Info.RKH; if (RootKeyHash != null) LogFile.Log("Root Key Hash: " + Converter.ConvertHexToString(RootKeyHash, " ")); else { RootKeyHash = new byte[32]; LogFile.Log("Root Key Hash: " + Converter.ConvertHexToString(RootKeyHash, " ")); } } if (PlatformName == null) { LogFile.Log("Platform Name was null. Gathering information from an alternative source."); PlatformName = Info.PlatformID; LogFile.Log("Platform Name: " + PlatformName); } if (SecurityStatus == null) { LogFile.Log("Security Status was null. Gathering information from an alternative source."); PlatformSecureBootStatus = Info.PlatformSecureBootEnabled; LogFile.Log("Platform Secure Boot Status: " + PlatformSecureBootStatus.ToString()); UefiSecureBootStatus = Info.UefiSecureBootEnabled; LogFile.Log("Uefi Secure Boot Status: " + UefiSecureBootStatus.ToString()); EffectiveSecureBootStatus = Info.PlatformSecureBootEnabled && Info.UefiSecureBootEnabled; LogFile.Log("Effective Secure Boot Status: " + EffectiveSecureBootStatus.ToString()); BootloaderSecurityQfuseStatus = Info.SecureFfuEnabled; LogFile.Log("Bootloader Security Qfuse Status: " + BootloaderSecurityQfuseStatus.ToString()); BootloaderSecurityAuthenticationStatus = Info.Authenticated; LogFile.Log("Bootloader Security Authentication Status: " + BootloaderSecurityAuthenticationStatus.ToString()); BootloaderSecurityRdcStatus = Info.RdcPresent; LogFile.Log("Bootloader Security Rdc Status: " + BootloaderSecurityRdcStatus.ToString()); EffectiveBootloaderSecurityStatus = !Info.IsBootloaderSecure; LogFile.Log("Effective Bootloader Security Status: " + EffectiveBootloaderSecurityStatus.ToString()); NativeDebugStatus = !Info.JtagDisabled; LogFile.Log("Native Debug Status: " + NativeDebugStatus.ToString()); } } catch { LogFile.Log("Reading status from Flash interface was aborted."); } DeviceInfoLoaded = true; } } }