Browse Source

Some long uncommitted changes (not sure exactly what or why)

Joeri Exelmans 4 years ago
parent
commit
ff9420f0a1

+ 32 - 0
examples/microwave/audio.py

@@ -0,0 +1,32 @@
+# try:
+#     import simpleaudio
+#     bell = simpleaudio.WaveObject.from_wave_file("bell.wav")
+
+#     def play_bell():
+#         bell.play()
+
+#     running = simpleaudio.WaveObject.from_wave_file("running.wav")
+#     running.audio_data *= 200 # repeat sample
+
+#     playing = None
+    
+#     def play_running():
+#         global playing
+#         if playing is None:
+#             playing = running.play()
+
+#     def stop_running():
+#         global playing
+#         if playing is not None:
+#             playing.stop()
+#             playing = None
+
+# except ImportError:
+print("Audio disabled. Install python package 'simpleaudio' for a fully immersive experience :)")
+
+def play_bell():
+    pass
+def play_running():
+    pass
+def stop_running():
+    pass

+ 23 - 31
examples/microwave/models/model_01c_flat_nodoor.xml

@@ -8,9 +8,13 @@
       same_source_priority="explicit"
       />
     <datamodel>
+      import GUI;
       time = 0;
       checkStartTime = func {
-        if (time == 0) time = 30;
+        if (time == 0) {
+          time = 30;
+          display_time(time);
+        }
       };
     </datamodel>
     <inport name="in">
@@ -23,49 +27,37 @@
     <outport name="out">
       <event name="micro_on"/>
       <event name="micro_off"/>
-      <event name="set_time"/>
-      <event name="ping"/>
+      <event name="bell"/>
     </outport>
     <root initial="NotRunning">
-      <state id="Running" stable="true">
+      <state id="Running" initial="Running">
         <onentry> <raise port="out" event="micro_on"/> </onentry>
         <onexit> <raise port="out" event="micro_off"/> </onexit>
         <transition port="in" event="stop" target="../NotRunning"/>
-        <transition after="1 s" target="../Choice">
-          <code> time -= 1; </code>
-          <raise port="out" event="set_time">
-            <param expr="time"/>
-          </raise>
-        </transition>
-        <transition port="in" event="increase_time" target=".">
-          <code> time += 10; </code>
-            <raise port="out" event="set_time">
-              <param expr="time"/>
-            </raise>
-        </transition>
-      </state>
-      <state id="Choice">
-        <transition cond="time > 0" target="../Running"/>
-        <transition cond="time == 0" target="../NotRunning"/>
+        <state id="Running" stable="true">
+          <transition after="1 s" target="../Choice">
+            <code> time -= 1; display_time(time); </code>
+          </transition>
+          <transition port="in" event="increase_time" target=".">
+            <code> time += 10; display_time(time); </code>
+          </transition>
+        </state>
+        <state id="Choice">
+          <transition cond="time > 0" target="../Running"/>
+          <transition cond="time == 0" target="/NotRunning">
+            <raise port="out" event="bell"/>
+          </transition>
+        </state>
       </state>
       <state id="NotRunning" stable="true">
         <transition port="in" event="start" target="../Running">
           <code> checkStartTime(); </code>
-          <raise port="out" event="set_time">
-            <param expr="time"/>
-          </raise>
         </transition>
         <transition port="in" event="stop" target=".">
-          <code> time = 0; </code>
-          <raise port="out" event="set_time">
-            <param expr="time"/>
-          </raise>
+          <code> time = 0; display_time(time); </code>
         </transition>
         <transition port="in" event="increase_time" target=".">
-          <code> time += 10; </code>
-            <raise port="out" event="set_time">
-              <param expr="time"/>
-            </raise>
+          <code> time += 10; display_time(time); </code>
         </transition>
       </state>
     </root>

+ 15 - 32
examples/microwave/models/model_02_hierarchical_door.xml

@@ -7,13 +7,16 @@
       combo_step_maximality="take_one"
       input_event_lifeline="first_combo_step"
       hierarchical_priority="source_parent"
-      orthogonal_priority="explicit"
       same_source_priority="explicit"
       />
     <datamodel>
+      import GUI;
       time = 0;
       checkStartTime = func {
-        if (time == 0) time = 30;
+        if (time == 0) {
+          time = 30;
+          display_time(time);
+        }
       };
     </datamodel>
     <inport name="in">
@@ -26,8 +29,7 @@
     <outport name="out">
       <event name="micro_on"/>
       <event name="micro_off"/>
-      <event name="set_time"/>
-      <event name="ping"/>
+      <event name="bell"/>
     </outport>
     <root initial="DoorClosed">
       <state id="DoorClosed" initial="NotRunning">
@@ -36,51 +38,32 @@
           <onentry> <raise port="out" event="micro_on"/> </onentry>
           <onexit> <raise port="out" event="micro_off"/> </onexit>
           <transition port="in" event="stop" target="../NotRunning"/>
-          <transition after="1 s" target=".">
-            <code> time -= 1; </code>
-            <raise port="out" event="set_time">
-              <param expr="time"/>
-            </raise>
-          </transition>
+          <state id="Inner">
+            <transition after="1 s" target=".">
+              <code> time -= 1; display_time(time); </code>
+            </transition>
+          </state>
           <transition cond="time == 0" target="../NotRunning"/>
-
           <transition port="in" event="increase_time" target=".">
-            <code> time += 10; </code>
-              <raise port="out" event="set_time">
-                <param expr="time"/>
-              </raise>
+            <code> time += 10; display_time(time); </code>
           </transition>
-
         </state>
         <state id="NotRunning">
           <transition port="in" event="start" target="../Running">
             <code> checkStartTime(); </code>
-            <raise port="out" event="set_time">
-              <param expr="time"/>
-            </raise>
           </transition>
           <transition port="in" event="stop" target=".">
-            <code> time = 0; </code>
-            <raise port="out" event="set_time">
-              <param expr="time"/>
-            </raise>
+            <code> time = 0; display_time(time); </code>
           </transition>
-
           <transition port="in" event="increase_time" target=".">
-            <code> time += 10; </code>
-              <raise port="out" event="set_time">
-                <param expr="time"/>
-              </raise>
+            <code> time += 10; display_time(time); </code>
           </transition>
         </state>
       </state>
       <state id="DoorOpen">
         <transition port="in" event="door_closed" target="../DoorClosed"/>
         <transition port="in" event="increase_time" target=".">
-          <code> time += 10; </code>
-            <raise port="out" event="set_time">
-              <param expr="time"/>
-            </raise>
+          <code> time += 10; display_time(time); </code>
         </transition>
       </state>
     </root>

+ 16 - 20
examples/microwave/models/model_03_orthogonal.xml

@@ -11,9 +11,13 @@
       same_source_priority="explicit"
       />
     <datamodel>
+      import GUI;
       time = 0;
       checkStartTime = func {
-        if (time == 0) time = 30;
+        if (time == 0) {
+          time = 30;
+          display_time(time);
+        }
       };
     </datamodel>
     <inport name="in">
@@ -26,8 +30,8 @@
     <outport name="out">
       <event name="micro_on"/>
       <event name="micro_off"/>
-      <event name="set_time"/>
-      <event name="ping"/>
+      <event name="display_time"/>
+      <event name="bell"/>
     </outport>
     <root>
       <parallel id="P">
@@ -38,26 +42,21 @@
               <onentry> <raise port="out" event="micro_on"/> </onentry>
               <onexit> <raise port="out" event="micro_off"/> </onexit>
               <transition port="in" event="stop" target="../NotRunning"/>
-              <transition after="1 s" target=".">
-                <code> time -= 1; </code>
-                <raise port="out" event="set_time">
-                  <param expr="time"/>
-                </raise>
+              <state id="Inner">
+                <transition after="1 s" target=".">
+                  <code> time -= 1; display_time(time); </code>
+                </transition>
+              </state>
+              <transition cond="time == 0" target="../NotRunning">
+                <raise port="out" event="bell"/>
               </transition>
-              <transition cond="time == 0" target="../NotRunning"/>
             </state>
             <state id="NotRunning">
               <transition port="in" event="start" target="../Running">
                 <code> checkStartTime(); </code>
-                <raise port="out" event="set_time">
-                  <param expr="time"/>
-                </raise>
               </transition>
               <transition port="in" event="stop" target=".">
-                <code> time = 0; </code>
-                <raise port="out" event="set_time">
-                  <param expr="time"/>
-                </raise>
+                <code> time = 0; display_time(time); </code>
               </transition>
             </state>
           </state>
@@ -68,10 +67,7 @@
         <state id="TimeIncrease">
           <state id="Default">
             <transition port="in" event="increase_time" target=".">
-              <code> time += 10; </code>
-                <raise port="out" event="set_time">
-                  <param expr="time"/>
-                </raise>
+              <code> time += 10; display_time(time); </code>
             </transition>
           </state>
         </state>

+ 4 - 11
examples/microwave/run.py

@@ -2,8 +2,6 @@ from sccd.realtime.eventloop import *
 from sccd.realtime.tkinter import TkInterImplementation
 from sccd.cd.parser.xml import *
 import GUI
-import tkinter
-from tkinter.constants import NO
 import sys
 
 if __name__ == '__main__':
@@ -17,19 +15,14 @@ if __name__ == '__main__':
     def send_event(event: str):
         eventloop.add_input_now(port="in", event_name=event)
 
-    tk = tkinter.Tk()
-    tk.withdraw()
-    topLevel = tkinter.Toplevel(tk)
-    topLevel.resizable(width=NO, height=NO)
-    topLevel.title("Microwave oven simulator")
-    gui = GUI.GUI(topLevel, send_event)
+    GUI.gui.send_event = send_event
 
     def on_output(event):
         if event.port == "out":
-            gui.handle_event(event)
+            GUI.gui.handle_event(event)
 
     controller = Controller(cd, output_callback=on_output)
-    eventloop = EventLoop(controller, TkInterImplementation(tk))
+    eventloop = EventLoop(controller, TkInterImplementation(GUI.tk))
 
     eventloop.start()
-    tk.mainloop()
+    GUI.tk.mainloop()

+ 8 - 7
src/sccd/test/run.py

@@ -9,13 +9,14 @@ if sys.version_info.minor >= 7:
   QueueImplementation = queue.SimpleQueue
 else:
   QueueImplementation = queue.Queue
-sys.path.append("..")
-from util.os_tools import *
-from util.debug import *
-from cd.static.cd import *
-from controller.controller import *
-from xml import *
-from util import timer
+
+from sccd.util.os_tools import *
+from sccd.util.debug import *
+from sccd.cd.static.cd import *
+from sccd.controller.controller import *
+from sccd.statechart.parser.xml import *
+from sccd.test.xml import *
+from sccd.util import timer
 
 # A TestCase loading and executing a statechart test file.
 class Test(unittest.TestCase):