flandreas / antares Goto Github PK
View Code? Open in Web Editor NEWDigital circuit learning platform
Digital circuit learning platform
There are currently 2 issues with the circuit's "Default light color" property:
When the simulation is running, highlight the cell that is currently being addressed if the memory component is openend in a desktop view.
When dragging wire from right to left and going over the starting point, an unexpected error occurs (see attached movie).
java.lang.NullPointerException
at ch.scorpion.jabbah.graph.view.net.edge.EdgeViewImpl.moveSegment(SourceFile:471)
at ch.scorpion.jabbah.graph.view.net.edge.EdgeViewImpl.moveSegment(SourceFile:370)
at ch.scorpion.jabbah.graph.view.net.edge.e.d(SourceFile:1067)
at ch.scorpion.jabbah.edit.g.J.e(SourceFile:198)
at ch.scorpion.jabbah.edit.d.j.f(SourceFile:186)
at ch.scorpion.jabbah.c.g.H.mouseDragged(SourceFile:314)
at java.desktop/java.awt.AWTEventMulticaster.mouseDragged(Unknown Source)
at java.desktop/java.awt.AWTEventMulticaster.mouseDragged(Unknown Source)
at java.desktop/java.awt.Component.processMouseMotionEvent(Unknown Source)
at java.desktop/javax.swing.JComponent.processMouseMotionEvent(Unknown Source)
at java.desktop/java.awt.Component.processEvent(Unknown Source)
at java.desktop/java.awt.Container.processEvent(Unknown Source)
at java.desktop/java.awt.Component.dispatchEventImpl(Unknown Source)
at java.desktop/java.awt.Container.dispatchEventImpl(Unknown Source)
at java.desktop/java.awt.Component.dispatchEvent(Unknown Source)
at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.desktop/java.awt.Container.dispatchEventImpl(Unknown Source)
at java.desktop/java.awt.Window.dispatchEventImpl(Unknown Source)
at java.desktop/java.awt.Component.dispatchEvent(Unknown Source)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
at java.base/java.security.AccessController.doPrivileged(Unknown Source)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.desktop/java.awt.EventQueue$5.run(Unknown Source)
at java.desktop/java.awt.EventQueue$5.run(Unknown Source)
at java.base/java.security.AccessController.doPrivileged(Unknown Source)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.desktop/java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.run(Unknown Source)
2021-02-18 19:34:56,796 ERROR [AWT-EventQueue-0] (SourceFile:26) - Unexpected error: null
java.lang.NullPointerException
at ch.scorpion.jabbah.graph.view.net.edge.EdgeViewImpl.moveSegment(SourceFile:471)
at ch.scorpion.jabbah.graph.view.net.edge.EdgeViewImpl.moveSegment(SourceFile:370)
at ch.scorpion.jabbah.graph.view.net.edge.e.d(SourceFile:1067)
at ch.scorpion.jabbah.edit.g.J.e(SourceFile:198)
at ch.scorpion.jabbah.edit.d.j.f(SourceFile:186)
at ch.scorpion.jabbah.c.g.H.mouseDragged(SourceFile:314)
at java.desktop/java.awt.AWTEventMulticaster.mouseDragged(Unknown Source)
at java.desktop/java.awt.AWTEventMulticaster.mouseDragged(Unknown Source)
at java.desktop/java.awt.Component.processMouseMotionEvent(Unknown Source)
at java.desktop/javax.swing.JComponent.processMouseMotionEvent(Unknown Source)
at java.desktop/java.awt.Component.processEvent(Unknown Source)
at java.desktop/java.awt.Container.processEvent(Unknown Source)
at java.desktop/java.awt.Component.dispatchEventImpl(Unknown Source)
at java.desktop/java.awt.Container.dispatchEventImpl(Unknown Source)
at java.desktop/java.awt.Component.dispatchEvent(Unknown Source)
at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.desktop/java.awt.Container.dispatchEventImpl(Unknown Source)
at java.desktop/java.awt.Window.dispatchEventImpl(Unknown Source)
at java.desktop/java.awt.Component.dispatchEvent(Unknown Source)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
at java.base/java.security.AccessController.doPrivileged(Unknown Source)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.desktop/java.awt.EventQueue$5.run(Unknown Source)
at java.desktop/java.awt.EventQueue$5.run(Unknown Source)
at java.base/java.security.AccessController.doPrivileged(Unknown Source)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.desktop/java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.run(Unknown Source)
Allow the user to set the bit width attribute of delay components.
After moving a circuit from its current folder to another folder, the circuit can't be opened any more afterwards.
Controls are interactive elements from sub circuits that are placed on the symbol of the sub circuit. If flat simulation is used AND the sub circuit uses a script, the models of the controls are never really updated during the simulation. Such Controls in symbols can confuse the user, for example when the display (the initial value) 0000 as the content of a register, although
this doesn't reflect the real value. Therefore, draw those controls as "disabled".
Allow the user to translate the text of a text component
Add a new preference setting for configuring the default propagation delay of switches. This value will also be used as propagation delay when the user clicks on a circuit input. Version 0.3.0 uses a hardcoded value of 1'000 ns for interactive circuit input clicks, which is too large compared to typical gate propagation delay, because it will dominate in graphical signal curves in the upcoming oscilloscope feature.
Undoing complex wiring using the undo system (especially when using junctions and) can sometimes scramble the wires. This is due to the fact that the design of the undo system uses "undo logic", which is error prone. Explore using a "event sourcing" based approach.
Add a transistor component (n-type, p-type)
Although a splash-screen is part of the software (and displayed when starting the built JAR directly), it is not displayed when starting installations that have been installed by the installers. At least on macOS.
Version 0.1 of Antares calculates statistics (number of components per type) only by deep traversal in the circuit graph, recursively expanding all subcircuits. It would be interesting to see to what degree the component graph is cut down by using scripts. Calculate two separate statistics, one for "deep" circuit structure and another for "flat" circuit structure.
The icons look quite blurry, especially on high resolution displays. Add higher resolution icons and choose depending on the screens DPI.
Allow the user to set horizontal and vertical alignment property of text components.
Introduce a new break circuit component with one input. If the input is asserted, the simulation is suspended if it runs in single step mode. This can be used for example in a microprocessor circuit to implement a "single machine instruction" mode if a breakpoint is activated whenever the microprogram returns to address 0.
If the text of a text component (or a rectangular component containing text) is larger than the surrounding box, repainting errors occur when moving the component.
Fixes:
The properties of an object can only be edited by the author of a circuit. Since script properties show their scripts in a popup editor, an Antares user is not able to inspect the scripts of standard library components, because he is not the author of the standard library circuits. This prevents Antares users from studying the scripts used in the standard library.
Change the property editor of script properties such that it opens the script in a read-only popup editor.
If the main circuit is closed by the user during simulation, the simulation isn't stopped.
Add the following functions to the scripting DSL:
Add a new built-in component that allows to add pull-up and pull-down resistors to circuits.
Change the icons for logic gates in the library tree according to the currently selected symbol type (ANSI/IEEE, ICE)
The "4-16 Decoder" of the standard library can't be opened. Exception "Illegal argument: isPort with name 'I0' already contained".
When selecting a rectangle with a text, the text is currently not drawn. The selection model consists only of the boundary of the rectangle. This can lead to disorientation when selecting multiple rectangles with text. Display the entire contents of the rectangle view using the selection color.
In addition, in order to make this work correctly, it is necessary that component draw their background with full transparency when being selected.
The language in which the UI is presented is currently taken from the operating system settings. In addition, a command line parameter allows to choose the language at startup time, although this is not transparent to the normal user. Let the user change the language in the preferences window. Antares has to be restarted after changing that preference.
As the title says: create some short videos without sound for the Antares front page (and maybe also for subsequent pages.
For example like this (it's a little big though and unfortunately a GIF):
I think Antares capabilities are much more apparent in videos.
Alternatively put some screenshots on the front page ๐
Circuit inputs can also be toggled by the user with the mouse, if they are part of the top-level circuit. Their default propagation delay of 1 ns is also applied when being clicked by the user. If a circuit input (with attribute "toggle" unset) drives the clock input of a D-flipflop, a very short click/release by the user doesn't trigger the flipflop, because the resulting impulse is too short for the edge detection component of the D-flipflop is implemented in the standard library, especially if the current simulation speed is small.
When being clicked by the user, a circuit input should apply the same propagation delay like a normal switch, something like 1000 ns.
If a ROM or a RAM is not selected (i.e. the CS input is not asserted), the memory contents view should not highlight the currently addressed cell.
The FlafLaf look & feel used by Antares already supports a dark theme. When using a dark Antares theme (such as "CRT"), the UI should also use the dark FlatLaf theme
Hi @flandreas
Small suggestion for the unexpected error window:
It would be helpful if you added something like a "copy error to clipboard" button and added a clickable link to the right bug tracker (I assumed it's this one.)
Hint for other users wanting to report an error: Go to "File/Export Log file". Open the generated zip file and copy the relevant exception (Most likely starting on a line containing "ERROR".
Both built-in libraries "Base" and "Standard" should have a folder containing frequently used components: Input, Output, Switch, LED, NOT, AND, OR.
In addition to set the orientation of ports (inputs, outputs and input/outputs in the circuit editor) and pins (in the symbol editor), ports and pins can now also be rotated by 90 degrees counterclockwise using the keyboard or the menu item.
When starting Antares the first time with initial settings, the properties panel in the lower left part of the window is not visible, because the library tree takes too much space. This confuses users.
Add menu items (including accelerators) for switching between circuit editor and symbol editor.
Hi @flandreas
Very nice progress in Antares 0.3.0, congrats!
So I played around with Antares 0.3.0 and following exception occured, when I clicked on the yellow highlighted part of the imported Tannenbaum project (looks very neat btw!):
2021-01-23 09:05:53,161 ERROR [AWT-EventQueue-0] (SourceFile:26) - Unexpected error: null
java.util.ConcurrentModificationException
at java.base/java.util.ArrayList$Itr.checkForComodification(Unknown Source)
at java.base/java.util.ArrayList$Itr.next(Unknown Source)
at ch.scorpion.jabbah.c.b.a.update(SourceFile:196)
at ch.scorpion.antares.view.input.SwitchView.updateLabels(SourceFile:413)
at ch.scorpion.antares.view.input.SwitchView.modelExchanged(SourceFile:148)
at ch.scorpion.antares.view.input.SwitchView.modelExchanged(SourceFile:59)
at ch.scorpion.jabbah.graph.view.AbstractGraphElementView.setModel(SourceFile:41)
at ch.scorpion.antares.view.input.SwitchView.bindToModel(SourceFile:321)
at ch.scorpion.antares.view.input.SwitchView.bindToModel(SourceFile:59)
at ch.scorpion.jabbah.graph.container.ControlViewComponent.bindToGraph(SourceFile:172)
at ch.scorpion.jabbah.graph.view.vertice.SubGraphVerticeViewImpl.bind(SourceFile:316)
at ch.scorpion.jabbah.graph.view.graph.GraphViewImpl.bind(SourceFile:151)
at ch.scorpion.jabbah.graph.g.aE.a(SourceFile:5216)
at ch.scorpion.jabbah.graph.g.aU.invoke(SourceFile:1105)
at ch.scorpion.jabbah.base.b.a.b(SourceFile:73)
at ch.scorpion.jabbah.d.e.o.b(SourceFile:1348)
at ch.scorpion.jabbah.graph.g.a.l.invoke(SourceFile:1195)
at ch.scorpion.jabbah.base.Q.run(SourceFile:22)
at java.desktop/java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
at java.base/java.security.AccessController.doPrivileged(Unknown Source)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.desktop/java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.run(Unknown Source)
I couldn't reproduce this error and I don't think it's very important. But the dialog told me to report it ;)
Cheers
The end of a connected wire can be dragged around and be reconnected to another port or left open, but it is currently not possible to reconnect it to an existing wire to producing a junction.
Add a help menu with a menu item "Documentation" that opens the online manual from antarescircuit.io in a browser window.
Texts added using the text tool now don't have borders and are not filled by default
Allow the user to set a description attribute on wires, and show it a a tooltip. During simulation, show also the current signal of the wire in the tooltip.
The choice of the Antares tunnel symbol might be questionable. Implement an alternative, more standard-like "arrow" symbol and let the user choose in the preferences which one he wants to use.
Pressing the ENTER key in the navigator allows to open the circuit currently selected in the tree.
Antares 0.3 cannot be started on environments (PCs) where it has never been executed. When starting, it looks for the file "Antares.pref" in the application's home directory and refuses to continue if the file is not found.
Copy/Paste in the symbol editor has been broken with version 0.2. Fix and add unit test.
When using a clock at 1 Hz even in a minimal circuit, the CPU load is too high during simulation. This is because the simulation engine is busy polling the simulation queue at a high frequency. Improve the polling strategy by deferring the next polling to the smallest execution time in the simulation queue.
Pure graphical components like rectangles or circle don't perform component-to-component snapping, but just snap at the component's location. Instead, a rectangle should snap at its both sides and at the center, both horizontally and vertically. The reason for the bug is that graphical elements are wrapped by special wrapper when being added to a graph drawing, and this wrapper doesn't correctly forward snapping behavior to the wrapped graphical component.
The endpoint of wire that is connected with an OR gate pin is at a location that is suitable for European block-like symbols, but not for American style symbols.
Rectanguar components like rectangles and circles now have a description property. The description is displayed as a tooltip if the mouse is moved over the displayed text of the rectangle (if there is a text at all). This is primarily useful for rectangles of style "Subsystem", where it can be used to explain a subsystem in more detail.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.