Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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;
        }
Esempio n. 3
0
        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);
            }
        }