Beispiel #1
0
        private void MergeLibrary(Component obj, Eagle.eagle eagleSrc, Eagle.libraries libsDst, string libName)
        {
            var libSrc = eagleSrc.drawing.Item as Eagle.library;

            if (libSrc == null)
            {
                Logger.WriteWarning("No Schematic Library for Component: <a href=\"MGA:{0}\">{1}</a>", obj.Impl.ID, obj.Impl.Name);
                return;
            }
            if (String.IsNullOrWhiteSpace(libName))
            {
                libName = "library-noname";
            }
            var libDst = libsDst.library.Where(l => l.name.Equals(libName)).FirstOrDefault();

            if (libDst == null)
            {
                libSrc.name = libName;
                libsDst.library.Add(libSrc);
            }
            else
            {
                // keep the description
                // add to packages, add to symbols, add to device-sets/devices
                foreach (Eagle.package pkg in libSrc.packages.package)
                {
                    if (libDst.packages.package.Where(p => p.name.Equals(pkg.name)).Count() == 0)
                    {
                        libDst.packages.package.Add(pkg);
                    }
                }
                foreach (Eagle.symbol sym in libSrc.symbols.symbol)
                {
                    if (libDst.symbols.symbol.Where(s => s.name.Equals(sym.name)).Count() == 0)
                    {
                        libDst.symbols.symbol.Add(sym);
                    }
                }
                foreach (Eagle.deviceset dset in libSrc.devicesets.deviceset)
                {
                    if (libDst.devicesets.deviceset.Where(d => d.name.Equals(dset.name)).Count() == 0)
                    {
                        libDst.devicesets.deviceset.Add(dset);
                    }
                    else
                    {
                        var dstDset = libDst.devicesets.deviceset.Where(d => d.name.Equals(dset.name)).FirstOrDefault();
                        foreach (Eagle.device dev in dset.devices.device)
                        {
                            if (dstDset.devices.device.Where(dd => dd.name.Equals(dev.name)).Count() == 0)
                            {
                                dstDset.devices.device.Add(dev);
                            }
                        }
                    }
                }
            }
        }
Beispiel #2
0
        private GenerateLayoutCodeResult GenerateLayoutCode(Eagle.eagle eagle, Schematic.TestBench TestBench_obj)
        {
            // write layout file
            string layoutFile = Path.Combine(this.mainParameters.OutputDirectory, "layout-input.json");
            var    myLayout   = new Layout.LayoutGenerator(eagle.drawing.Item as Eagle.schematic, TestBench_obj, Logger, this.mainParameters.OutputDirectory, this,
                                                           onlyConsiderExactConstraints: ((CyPhy2Schematic_Settings)mainParameters.config).onlyConsiderExactConstraints);

            myLayout.Generate(layoutFile);
            GenerateLayoutCodeResult result = new GenerateLayoutCodeResult();

            result.bonesFound  = myLayout.bonesFound; // MOT-782
            result.boardLayout = myLayout.boardLayout;
            return(result);
        }
Beispiel #3
0
        private Eagle.eagle GenerateSchematicCode(TestBench TestBench_obj)
        {
            // load schematic library
            Eagle.eagle eagle = null;
            try
            {
                eagle = Eagle.eagle.Deserialize(CyPhy2Schematic.Properties.Resources.schematicTemplate);
                Logger.WriteInfo("Parsed Eagle Library schema version: " + eagle.version);
            }
            catch (Exception e)
            {
                eagle = new Eagle.eagle();  // create an empty eagle object network
                Logger.WriteError("Error parsing XML: " + e.Message + "<br>Inner: " + e.InnerException + "<br>Stack: " + e.StackTrace);
            }
            // 2. The second traversal walks the lighter weight (largely CyPhy independent) object network and maps to the eagle XML object network
            //    the classes of this object network are automatically derived from the eagle XSD using the XSD2Code tool in the META repo
            //    an important step of this traversal is the routing which is implemented currently as a simple rats nest routing,
            //        the traversal and visitor code is localized in (SchematicTraversal.cs)
            TestBench_obj.accept(new EdaVisitor(this)
            {
                eagle_obj = eagle,
                Logger    = Logger
            });

            // 2.5  Finally a serializer (XSD generated code), walks the object network and generates the XML file
            System.IO.Directory.CreateDirectory(this.mainParameters.OutputDirectory);
            String outFile = Path.Combine(this.mainParameters.OutputDirectory, "schema.sch");

            try
            {
                eagle.SaveToFile(outFile);
            }
            catch (Exception ex)
            {
                Logger.WriteError("Error Saving Schema File: {0}<br> Exception: {1}<br> Trace: {2}",
                                  outFile, ex.Message, ex.StackTrace);
            }

            return(eagle);
        }