private returncode identifyDDfile() { returncode rc = returncode.eErr; makeDirTree(); DevTypStruct find = new DevTypStruct(); scanDirTree(ref find); strInputFileName = hcfg.ddRoot + "\\" + strManufacturer + "\\" + strDeviceType + "\\" + string.Format("{0:D2}", find.devrev) + string.Format("{0:D2}", find.ddrev) + "." + find.ext; Common.chInputFileName = strInputFileName; BinaryReader br; // 读取文件 try { br = new BinaryReader(new FileStream(strInputFileName, FileMode.Open)); } catch (IOException e11) { Console.WriteLine(e11.Message + "\n Cannot open file."); return(returncode.eFileErr); } DDlDevDescription.DDOD_HEADER header = new DDlDevDescription.DDOD_HEADER(); header.byManufacturer = new byte[3]; DDlDevDescription.ReadHeader(br, ref header); int mfg = header.byManufacturer[0] << 16 | header.byManufacturer[1] << 8 | header.byManufacturer[2]; header.device_type = (ushort)(((header.device_type & 0x00ff) << 8) | ((header.device_type & 0xff00) >> 8)); eFFVersionMajor = header.tok_rev_major; eFFVersionMinor = header.tok_rev_minor; if (eFFVersionMajor < 5)// FDI version number { if (eFFVersionMajor == 3) { eFFVersionMajor += 7;// translate to hart version } if (eFFVersionMajor == 4) { eFFVersionMajor += 6;// translate to hart version // fdi4 => hcf10 [4/3/2014 timj] } } if ((eFFVersionMajor != find.bffver) || (mfg != hartDev.ddbDeviceID.wManufacturer) || (header.device_type != hartDev.ddbDeviceID.wDeviceType) || (header.device_revision != find.devrev) || (header.dd_revision != find.ddrev)) {// header info does not match filename // error message - //MessageBox.Show("Error: DD File header information does not match file name."); br.Close(); return(returncode.eFileErr); } br.Close(); //////VerificationLevel//?????? if (DevDDList.Count > 0) { rc = returncode.eOk; } return(rc); }
private void scanDirTree(ref DevTypStruct retStruct, bool exactMatch = false) { List <DevTypStruct> DevList = new List <DevTypStruct>(); List <DevTypStruct> DDList = new List <DevTypStruct>(); int maxVersion = -1; if (bUseStandardDD) { switch (strDDRevision) { case "5": retStruct.devrev = 5; retStruct.ddrev = 6; retStruct.bffver = 8; retStruct.ext = "fm8"; break; case "6": retStruct.devrev = 6; retStruct.ddrev = 3; retStruct.bffver = 8; retStruct.ext = "fm8"; break; case "7": retStruct.devrev = 7; retStruct.ddrev = 3; retStruct.bffver = 8; retStruct.ext = "fm8"; break; default: retStruct.devrev = 5; retStruct.ddrev = 6; retStruct.bffver = 8; retStruct.ext = "fm8"; break; } return; } foreach (DevTypStruct d in DevDDList) { if ( (exactMatch && d.devrev == Byte.Parse(strDeviceRevision, System.Globalization.NumberStyles.HexNumber)) || (!exactMatch && d.devrev >= maxVersion && d.devrev <= Byte.Parse(strDeviceRevision, System.Globalization.NumberStyles.HexNumber)) ) { DevList.Add(d); maxVersion = d.devrev; } } retStruct.devrev = maxVersion; maxVersion = -1; foreach (DevTypStruct d in DevList) { if (exactMatch) { if (d.ddrev == Byte.Parse(strDDRevision, System.Globalization.NumberStyles.HexNumber)) { DDList.Add(d); maxVersion = d.ddrev; } } else if (retStruct.devrev == d.devrev) { if (d.ddrev > maxVersion) { DDList.Clear(); maxVersion = d.ddrev; } if (d.ddrev == maxVersion) { DDList.Add(d); } } } retStruct.ddrev = maxVersion; maxVersion = -1; foreach (DevTypStruct d in DDList) { if (d.bffver >= maxVersion && d.bffver <= maxVer) { maxVersion = d.bffver; retStruct.ext = d.ext; } } retStruct.bffver = maxVersion; }
private void makeDirTree(bool bSecondMake = false) { string path = hcfg.ddRoot + "\\" + strManufacturer + "\\" + strDeviceType; DevTypStruct DevDD = new DevTypStruct(); string filename, fullname, fileBase, fileExt; DirectoryInfo root = new DirectoryInfo(path); try { FileInfo[] fi = root.GetFiles(); foreach (FileInfo f in fi) { filename = f.Name; fullname = f.FullName; if (filename.Length != 8 || filename.Substring(4, 1) != ".") { //LOGIT(CLOG_LOG, "Bad Name from search '%s'\n", fileName.c_str()); } else {//bffVersion fileBase = filename.Substring(0, 4); fileExt = filename.Substring(5, 3); if ((fileExt[0] != 'f' && fileExt[0] != 'F') || (fileExt[1] != 'm' && fileExt[1] != 'M')) { continue; } int devrev = Convert.ToInt32(fileBase.Substring(0, 2), 16); int ddrev = Convert.ToInt32(fileBase.Substring(2, 2), 16); int bffVersion = 5; char fe2 = fileExt[2]; if (fe2 == 's' || fe2 == 'S') { bffVersion = 5; } else if (fe2 == '6') { bffVersion = 6; } else if (fe2 == '8') { bffVersion = 8; } else if (fe2 == 'Y' || fe2 == 'y') { bffVersion = 8; // FMAHACK eff 8 file suffix of .psy temporarily [6/19/2014 timj] } else if (fileExt[2] == 'A' || fileExt[2] == 'a') { bffVersion = 10; } else if (fe2 == 'A') { bffVersion = 10; } else if (fe2 == 'B') { bffVersion = 11; } else if (fe2 == 'C') { bffVersion = 12; } else if (fe2 == 'D') { bffVersion = 13; } else if (fe2 == 'E') { bffVersion = 14; } else if (fe2 == 'F') { bffVersion = 15; } DevDD.devrev = devrev; DevDD.ddrev = ddrev; DevDD.bffver = bffVersion; DevDD.ext = fileExt; DevDDList.Add(DevDD); /* * textBox1.Text += filename; * textBox1.Text += "\r\n";*/ } } } catch (Exception ex) { /** * 1.异常消息 * 2.异常模块名称 * 3.异常方法名称 * 4.异常行号 */ String str = ""; str += ex.Message + "\n";//异常消息 saveLogfile(str); //str += ex.StackTrace + "\n";//提示出错位置,不会定位到方法内部去 //str += ex.ToString() + "\n";//将方法内部和外部所有出错的位置提示出来 } if (DevDDList.Count == 0) { if (bSecondMake) { return; } bUseStandardDD = true; strManufacturer = hcfg.defaultManufacturer; strDeviceType = hcfg.defaultDeviceType; hartDev.ddbDeviceID.wManufacturer = UInt16.Parse(strManufacturer, System.Globalization.NumberStyles.HexNumber); // 0x26;//0x00601e;// hartDev.ddbDeviceID.wDeviceType = UInt16.Parse(strDeviceType, System.Globalization.NumberStyles.HexNumber); // 0x6;//0xe188;// //MessageBox.Show(this, Resource.String.Warning, Resource.String.DDNofFoundUsingDefault, MessageBoxButtons.Close, MessageBoxIcon.Warning); saveLogfile("DD file not found, use the default DD."); makeDirTree(true); } }