public bool LoadDocument(string fileName)
        {
            try
            {
                if (String.IsNullOrEmpty(fileName) == false)
                {
                    CircuitData circuitData = CircuitSerializer.DeserializeCircuit(fileName);
                    circuitEditor.SignalList = SignalConverter.Instance.ConvertToSignalList(circuitData.Signals);
                    circuitEditor.Circuit    = CircuitConverter.Instance.ConvertToCircuit(circuitData, circuitEditor.SignalList, true);
                    m_Simulation.Signals     = circuitEditor.SignalList;
                    m_Simulation.Circuit     = circuitEditor.Circuit;

                    FileName = fileName;
                    return(true);
                }
            }
            catch (Exception e)
            {
                string msg = e.Message;
                if (e.InnerException != null)
                {
                    msg += "\n" + e.InnerException.Message;
                }
                MessageBox.Show(msg + "\n-----\n" + e.StackTrace, "Exception", MessageBoxButtons.OK, MessageBoxIcon.Stop);
            }
            return(false);
        }
        // Creates CircuitProbe wrapper
        private CircuitProbe CreateItem(
            // Fields of CircuitProbe table
            Guid CircuitProbeId,
            string Name,
            string Note
            // Fields of Circuit table

            )
        {
            TableSnapshot <CircuitData> tableCircuit = (TableSnapshot <CircuitData>) this.CircuitProject.Table("Circuit");
            CircuitData dataCircuit = new CircuitData()
            {
                CircuitId = CircuitProbeId
            };
            RowId rowIdCircuit = tableCircuit.Insert(ref dataCircuit);

            CircuitProbeData dataCircuitProbe = new CircuitProbeData()
            {
                CircuitProbeId = CircuitProbeId,
                Name           = Name,
                Note           = Note,
            };

            return(this.Create(this.Table.Insert(ref dataCircuitProbe), rowIdCircuit));
        }
        // Creates Constant wrapper
        private Constant CreateItem(
            // Fields of Constant table
            Guid ConstantId,
            int BitWidth,
            int Value,
            PinSide PinSide,
            string Note
            // Fields of Circuit table

            )
        {
            TableSnapshot <CircuitData> tableCircuit = (TableSnapshot <CircuitData>) this.CircuitProject.Table("Circuit");
            CircuitData dataCircuit = new CircuitData()
            {
                CircuitId = ConstantId
            };
            RowId rowIdCircuit = tableCircuit.Insert(ref dataCircuit);

            ConstantData dataConstant = new ConstantData()
            {
                ConstantId = ConstantId,
                BitWidth   = BitWidth,
                Value      = Value,
                PinSide    = PinSide,
                Note       = Note,
            };

            return(this.Create(this.Table.Insert(ref dataConstant), rowIdCircuit));
        }
Exemple #4
0
        public void SerializeAndDeserialize()
        {
            var circuitToSave = new CircuitData();
            var andGateData   = new AndGateData();
            var input1        = new InputData();

            input1.Id = Guid.NewGuid();
            var input2 = new InputData();

            input2.Id = Guid.NewGuid();

            andGateData.Input1 = input1;
            andGateData.Input2 = input2;

            andGateData.Delay = 10;
            andGateData.Id    = Guid.NewGuid();
            circuitToSave.Elements.Add(andGateData);

            CircuitData circuitToRead;

            using (var stream = new MemoryStream())
            {
                CircuitDataWriter.Write(circuitToSave, stream);
                stream.Seek(0, SeekOrigin.Begin); // przewinięcie z powrotem na początek
                circuitToRead = CircuitDataReader.Read(stream);
            }
            var andGate = (AndGateData)circuitToRead.Elements[0];

            Assert.AreEqual(andGateData.Id, andGate.Id);
            Assert.AreEqual(andGateData.Delay, andGate.Delay);
        }
        // Creates LogicalCircuit wrapper
        private LogicalCircuit CreateItem(
            // Fields of LogicalCircuit table
            Guid LogicalCircuitId,
            string Name,
            string Notation,
            string Note,
            string Category,
            bool IsDisplay
            // Fields of Circuit table

            )
        {
            TableSnapshot <CircuitData> tableCircuit = (TableSnapshot <CircuitData>) this.CircuitProject.Table("Circuit");
            CircuitData dataCircuit = new CircuitData()
            {
                CircuitId = LogicalCircuitId
            };
            RowId rowIdCircuit = tableCircuit.Insert(ref dataCircuit);

            LogicalCircuitData dataLogicalCircuit = new LogicalCircuitData()
            {
                LogicalCircuitId = LogicalCircuitId,
                Name             = Name,
                Notation         = Notation,
                Note             = Note,
                Category         = Category,
                IsDisplay        = IsDisplay,
            };

            return(this.Create(this.Table.Insert(ref dataLogicalCircuit), rowIdCircuit));
        }
        // Creates CircuitButton wrapper
        private CircuitButton CreateItem(
            // Fields of CircuitButton table
            Guid CircuitButtonId,
            string Notation,
            bool IsToggle,
            PinSide PinSide,
            bool Inverted,
            int Width,
            int Height,
            string Note
            // Fields of Circuit table

            )
        {
            TableSnapshot <CircuitData> tableCircuit = (TableSnapshot <CircuitData>) this.CircuitProject.Table("Circuit");
            CircuitData dataCircuit = new CircuitData()
            {
                CircuitId = CircuitButtonId
            };
            RowId rowIdCircuit = tableCircuit.Insert(ref dataCircuit);

            CircuitButtonData dataCircuitButton = new CircuitButtonData()
            {
                CircuitButtonId = CircuitButtonId,
                Notation        = Notation,
                IsToggle        = IsToggle,
                PinSide         = PinSide,
                Inverted        = Inverted,
                Width           = Width,
                Height          = Height,
                Note            = Note,
            };

            return(this.Create(this.Table.Insert(ref dataCircuitButton), rowIdCircuit));
        }
        // Creates GraphicsArray wrapper
        private GraphicsArray CreateItem(
            // Fields of GraphicsArray table
            Guid GraphicsArrayId,
            bool WriteOn1,
            MemoryOnStart OnStart,
            int DataBitWidth,
            int BitsPerPixel,
            int Width,
            int Height,
            string Note
            // Fields of Circuit table

            )
        {
            TableSnapshot <CircuitData> tableCircuit = (TableSnapshot <CircuitData>) this.CircuitProject.Table("Circuit");
            CircuitData dataCircuit = new CircuitData()
            {
                CircuitId = GraphicsArrayId
            };
            RowId rowIdCircuit = tableCircuit.Insert(ref dataCircuit);

            GraphicsArrayData dataGraphicsArray = new GraphicsArrayData()
            {
                GraphicsArrayId = GraphicsArrayId,
                WriteOn1        = WriteOn1,
                OnStart         = OnStart,
                DataBitWidth    = DataBitWidth,
                BitsPerPixel    = BitsPerPixel,
                Width           = Width,
                Height          = Height,
                Note            = Note,
            };

            return(this.Create(this.Table.Insert(ref dataGraphicsArray), rowIdCircuit));
        }
 private void SaveAs(string fileName)
 {
     try
     {
         if (String.IsNullOrEmpty(fileName))
         {
             FileSelector fileSelector = new FileSelector(FileSelectorFilters.Circuits);
             fileSelector.FileName = fileName;
             if (fileSelector.ExecuteSaveDialog())
             {
                 fileName = fileSelector.FileName;
             }
         }
         if (String.IsNullOrEmpty(fileName) == false)
         {
             CircuitData data = CircuitConverter.Instance.ConvertFromCircuit(circuitEditor.Circuit);
             data.Signals = SignalConverter.Instance.ConvertFromSignalList(circuitEditor.SignalList);
             CircuitSerializer.SerializeCircuit(fileName, data);
             m_Persistent = true;
             FileName     = fileName;
         }
     }
     catch (Exception e)
     {
         string msg = e.Message;
         if (e.InnerException != null)
         {
             msg += "\n" + e.InnerException.Message;
         }
         MessageBox.Show(msg + "\n-----\n" + e.StackTrace, "Exception", MessageBoxButtons.OK, MessageBoxIcon.Stop);
     }
 }
Exemple #9
0
        // Creates Sound wrapper
        private Sound CreateItem(
            // Fields of Sound table
            Guid SoundId,
            PinSide PinSide,
            string Notation,
            string Note
            // Fields of Circuit table

            )
        {
            TableSnapshot <CircuitData> tableCircuit = (TableSnapshot <CircuitData>) this.CircuitProject.Table("Circuit");
            CircuitData dataCircuit = new CircuitData()
            {
                CircuitId = SoundId
            };
            RowId rowIdCircuit = tableCircuit.Insert(ref dataCircuit);

            SoundData dataSound = new SoundData()
            {
                SoundId  = SoundId,
                PinSide  = PinSide,
                Notation = Notation,
                Note     = Note,
            };

            return(this.Create(this.Table.Insert(ref dataSound), rowIdCircuit));
        }
Exemple #10
0
        // Creates Sensor wrapper
        private Sensor CreateItem(
            // Fields of Sensor table
            Guid SensorId,
            SensorType SensorType,
            int BitWidth,
            PinSide PinSide,
            string Notation,
            string Data,
            string Note
            // Fields of Circuit table

            )
        {
            TableSnapshot <CircuitData> tableCircuit = (TableSnapshot <CircuitData>) this.CircuitProject.Table("Circuit");
            CircuitData dataCircuit = new CircuitData()
            {
                CircuitId = SensorId
            };
            RowId rowIdCircuit = tableCircuit.Insert(ref dataCircuit);

            SensorData dataSensor = new SensorData()
            {
                SensorId   = SensorId,
                SensorType = SensorType,
                BitWidth   = BitWidth,
                PinSide    = PinSide,
                Notation   = Notation,
                Data       = Data,
                Note       = Note,
            };

            return(this.Create(this.Table.Insert(ref dataSensor), rowIdCircuit));
        }
Exemple #11
0
        public void SetData(CircuitData data)
        {
            simulationControl.SetData(data);

            backgroundWorker.DoWork             += backgroundWorker_DoWork;
            backgroundWorker.ProgressChanged    += backgroundWorker_ProgressChanged;
            backgroundWorker.RunWorkerCompleted += backgroundWorker_RunWorkerCompleted;
        }
Exemple #12
0
 /// <summary>
 /// load circuti data from path
 /// </summary>
 public static bool LoadCircuitDatafromjson(string JsonData, ref CircuitData lab)
 {
     if (string.IsNullOrEmpty(JsonData) == true)
     {
         return(false);
     }
     lab = JsonUtility.FromJson <CircuitData>(JsonData);
     return(true);
 }
        // Creates Circuit wrapper
        private Circuit CreateItem(
            // Fields of Circuit table
            Guid CircuitId
            )
        {
            CircuitData dataCircuit = new CircuitData()
            {
                CircuitId = CircuitId,
            };

            return(this.Create(this.Table.Insert(ref dataCircuit)));
        }
Exemple #14
0
        private void LoadFiles()
        {
            button_ProceedToPage2.Enabled = false;
            //at this point the chosen files really do exist
            m_CircuitData         = CircuitSerializer.DeserializeCircuit(textBox_Circuit.Text);
            m_CircuitData.Signals = null;
            Circuit circuit = CircuitConverter.Instance.ConvertToCircuit(m_CircuitData);

            foreach (BaseElement be in circuit)
            {
                if (be is SignalInput)
                {
                    ListViewItem li = new ListViewItem(be.Name);
                    //li.ToolTipText = String.Format("{0} ({1}, X: {2}, Y: {3})", be.);
                    li.Group = listView_CircuitIOs.Groups[0];
                    listView_CircuitIOs.Items.Add(li);
                }
                if (be is SignalOutput)
                {
                    ListViewItem li = new ListViewItem(be.Name);
                    li.Group = listView_CircuitIOs.Groups[1];
                    listView_CircuitIOs.Items.Add(li);
                }
            }

            m_SymbolData = SymbolSerializer.DeserializeSymbol(textBox_Symbol.Text);
            Symbol symbol = SymbolConverter.Instance.ConvertToSymbol(m_SymbolData);

            foreach (SymbolPart part in symbol)
            {
                if (part is PortPart)
                {
                    PortPart port = (PortPart)part;
                    if (port.Direction == DirectionType.Input)
                    {
                        ListViewItem li = new ListViewItem(port.Name);
                        //li.ToolTipText = String.Format("{0} ({1}, X: {2}, Y: {3})", port.Name, port.Direction, port.Location.X, port.Location.Y);
                        li.Group = listView_SymbolPorts.Groups[0];
                        listView_SymbolPorts.Items.Add(li);
                    }
                    if (port.Direction == DirectionType.Output)
                    {
                        ListViewItem li = new ListViewItem(port.Name);
                        //li.ToolTipText = String.Format("{0} ({1}, X: {2}, Y: {3})", port.Name, port.Direction, port.Location.X, port.Location.Y);
                        li.Group = listView_SymbolPorts.Groups[1];
                        listView_SymbolPorts.Items.Add(li);
                    }
                }
            }
        }
Exemple #15
0
        public void SetCircuitData(CircuitData data)
        {
            foreach (var elementData in data.Elements)
            {
                var control = CreateElementControl(elementData);
                AddElementControl(control, elementData.X, elementData.Y);
                control.SetData(elementData);
            }

            foreach (var wire in data.Wires)
            {
                AddWire(wire);
            }
        }
        // Constructor
        public CircuitSet(CircuitProject store)
        {
            ITableSnapshot table = store.Table("Circuit");

            if (table != null)
            {
                Debug.Assert(store.IsFrozen, "The store should be frozen");
                this.Table = (TableSnapshot <CircuitData>)table;
            }
            else
            {
                Debug.Assert(!store.IsFrozen, "In order to create table, the store should not be frozen");
                this.Table = CircuitData.CreateTable(store);
            }
            this.InitializeCircuitSet();
        }
Exemple #17
0
        public CircuitData BuildData()
        {
            var data = new CircuitData();

            foreach (var element in elements)
            {
                data.Elements.Add(element.BuildData());
            }

            foreach (var wire in Wires)
            {
                data.Wires.Add(wire.BuildData());
            }

            return(data);
        }
Exemple #18
0
    public static bool LoadCircuitData(string labfile, ref CircuitData lab)
    {
        try
        {
            FileStream   fsFile   = new FileStream(labfile, FileMode.Open);
            StreamReader srReader = new StreamReader(fsFile);
            string       Text     = srReader.ReadToEnd();
            srReader.Close();

            LoadCircuitDatafromjson(Text, ref lab);
        }
        catch (Exception e)
        {
            throw e;
        }
        return(true);
    }
Exemple #19
0
        // Creates Gate wrapper
        private Gate CreateItem(
            // Fields of Gate table
            Guid GateId
            // Fields of Circuit table

            )
        {
            TableSnapshot <CircuitData> tableCircuit = (TableSnapshot <CircuitData>) this.CircuitProject.Table("Circuit");
            CircuitData dataCircuit = new CircuitData()
            {
                CircuitId = GateId
            };
            RowId rowIdCircuit = tableCircuit.Insert(ref dataCircuit);

            GateData dataGate = new GateData()
            {
                GateId = GateId,
            };

            return(this.Create(this.Table.Insert(ref dataGate), rowIdCircuit));
        }
Exemple #20
0
        public CircuitBuilder(CircuitData circuitData, Simulation simulation)
        {
            this.circuitData = circuitData;
            this.simulation  = simulation;

            Register(new AndGateBuilder());
            Register(new BufferBuilder());
            Register(new OrGateBuilder());
            Register(new ExnorGateBuilder());
            Register(new XorGateBuilder());
            Register(new NandGateBuilder());
            Register(new NotGateBuilder());
            Register(new NorGateBuilder());
            Register(new SwitchBuilder());
            Register(new DiodeBuilder());
            Register(new FlipFlopBuilder());
            Register(new GeneratorBuilder());
            Register(new IntegratedCircuitBuilder());
            Register(new FreeInputBuilder());
            Register(new FreeOutputBuilder());
        }
 public void SetCircuitData(CircuitData data)
 {
     circuitControl1.SetCircuitData(data);
 }
 public CircuitSimulator(CircuitData circuitData)
 {
     this.circuitData = circuitData;
 }
 public void SetData(CircuitData data)
 {
     circuitData = data;
     BuildControls();
 }
Exemple #24
0
        public void Notify(object sender, OperationEnum ev)
        {
            if (ev == OperationEnum.StartSimulation)
            {
                Console.WriteLine(@"Please, provide a path to the circuit file!");
                userPathInput = Console.ReadLine();

                Notify(this, OperationEnum.CheckedFile);
            }

            if (ev == OperationEnum.CheckedFile)
            {
                _fileReaderContext.CheckFile(userPathInput);

                if (_fileReaderContext.fileIsValid && _fileReaderContext.fileType != null)
                {
                    Notify(this, OperationEnum.InterpretFile);
                }
                else
                {
                    Notify(this, OperationEnum.RestartSimulation);
                }
            }

            if (ev == OperationEnum.InterpretFile)
            {
                _fileData = _fileReaderContext.ReadFile(userPathInput);

                _lineInterpreter.InterpretData(_fileData.FileDictionary, _fileData.EdgeDictonary);
                _circuitInputs = _lineInterpreter.CircuitInputs;

                Notify(this, OperationEnum.BuildCircuit);
            }

            if (ev == OperationEnum.BuildCircuit)
            {
                CircuitBuilderMaker cbm = new CircuitBuilderMaker(_fileData, _circuitInputs);
                _circuitData = cbm.GetCircuit();

                if (!_circuitData.NoError)
                {
                    Console.WriteLine(_circuitData.ErrorMessage);
                    Notify(this, OperationEnum.RestartSimulation);
                }

                Notify(this, OperationEnum.RunCircuit);
            }

            if (ev == OperationEnum.RunCircuit)
            {
                foreach (NodeComponent nodeInput in _circuitData.NodeComponent.OutputNodeList)
                {
                    nodeInput.SetValue(SetInputs(nodeInput.Name));
                }

                Notify(this, OperationEnum.InputUser);
            }

            if (ev == OperationEnum.InputUser)
            {
                Console.WriteLine("Use on of the following commands: \"restart\" \"reset\" \"quit\"");
                string input = Console.ReadLine().ToLower();

                switch (input)
                {
                case CommandHandler.RESTART:
                    Notify(this, OperationEnum.RestartSimulation);
                    break;

                case CommandHandler.RESET:
                    foreach (NodeComponent nodeInput in _circuitData.NodeComponent.OutputNodeList)
                    {
                        nodeInput.ResetCircuit();
                    }
                    Console.Clear();
                    Notify(this, OperationEnum.RunCircuit);
                    break;

                case CommandHandler.QUIT:
                    Environment.Exit(0);
                    break;

                default:
                    Console.WriteLine("Unknown command");
                    Notify(this, OperationEnum.InputUser);
                    break;
                }
            }

            if (ev == OperationEnum.RestartSimulation)
            {
                Console.WriteLine();
                Console.WriteLine("Press any key to restart application");
                Console.ReadKey();
                Console.Clear();

                Notify(this, OperationEnum.StartSimulation);
            }
        }