run_debug.py 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. import target
  2. from sccd.runtime.statecharts_core import Event
  3. import threading
  4. from Options import Options
  5. from CBDMultipleOutput.models.HarmonicOscilator import CircleCBDDerivative
  6. from CBDMultipleOutput.Source.CBD import CBD
  7. if __name__ == '__main__':
  8. options = Options(delta = 0.01)
  9. options.setMaxIterations(1000);
  10. #cbdModel = EvenNumberGen("EvenNumbersGenerator")
  11. cbdModel = CircleCBDDerivative("CircleCBDDerivative", options.getDeltaT())
  12. # Use keep_running false for as fast as possible simulation.
  13. controller = target.Controller(options, cbdModel)
  14. def set_defaults(inp, defaultlist):
  15. for i, v in enumerate(defaultlist):
  16. if len(inp) == i + 1:
  17. inp.append(v)
  18. def get_bool(val):
  19. if val.lower() in ["true", "yes", "1"]:
  20. return True
  21. else:
  22. return False
  23. def raw_inputter():
  24. while 1:
  25. inp = raw_input().split(" ")
  26. action = inp[0]
  27. if action == "continuous":
  28. params = []
  29. elif action == "realtime":
  30. set_defaults(inp, [1.0])
  31. params = [inp[1]]
  32. elif action == "big_step":
  33. params = []
  34. elif action == "small_step":
  35. params = []
  36. elif action == "pause":
  37. params = []
  38. elif action == "add_breakpoint":
  39. if len(inp) < 5:
  40. print("Adding a breakpoint requires 4 parameters!")
  41. continue
  42. # Merge together the final part again
  43. params = [inp[1], " ".join(inp[2:-2]).replace("\\n", "\n").replace("\\t", "\t"), get_bool(inp[-2]), get_bool(inp[-1])]
  44. print("Generated parameters: " + str(params))
  45. elif action == "del_breakpoint":
  46. if len(inp) < 2:
  47. print("Breakpoint removal requires 1 parameter!")
  48. continue
  49. params = [inp[1]]
  50. elif action == "toggle_breakpoint":
  51. params = [inp[1]]
  52. elif action == "list_breakpoints":
  53. params = []
  54. elif action == "god_event":
  55. if len(inp) != 3:
  56. print("God events require 2 parameters!")
  57. continue
  58. params = [inp[1], eval(inp[2])]
  59. elif action == "help":
  60. print("Supported operations:")
  61. print(" continuous")
  62. print(" --> Simulate until termination time is reached")
  63. print(" pause")
  64. print(" --> Pause the simulation")
  65. print(" realtime [realtime_scale]")
  66. print(" --> Simulate in realtime")
  67. print(" realtime_scale can speed up or slow down the pace")
  68. print(" big_step")
  69. print(" --> Simulate a big step")
  70. print(" small_step")
  71. print(" --> Simulate a small step")
  72. print(" add_breakpoint name function enabled disable_on_trigger")
  73. print(" --> Add a breakpoint that will pause simulation when function returns True")
  74. print(" the function should contain a definition of the 'breakpoint' function")
  75. print(" and must take 1 parameter")
  76. print(" enabled indicates whether or not the breakpoint should be checked")
  77. print(" disable_on_trigger determines if the breakpoint should auto-disable")
  78. print(" after being triggered")
  79. print(" del_breakpoint name")
  80. print(" --> Remove a breakpoint")
  81. print(" toggle_breakpoint name")
  82. print(" --> Toggle the designated breakpoint")
  83. print(" list_breakpoints")
  84. print(" --> List all breakpoints")
  85. print(" god_event signal_name new_value")
  86. print(" --> Updates the last value of the signal")
  87. print("")
  88. print("Defaults: ")
  89. print(" realtime_scale --> 1.0")
  90. continue
  91. else:
  92. print("Command not understood: " + str(inp))
  93. continue
  94. controller.addInput(Event(action, "user_input", params))
  95. input_thread = threading.Thread(target=raw_inputter)
  96. input_thread.daemon = True
  97. input_thread.start()
  98. output_listener = controller.addOutputListener(["user_output"])
  99. def outputter():
  100. while 1:
  101. print output_listener.fetch(-1)
  102. output_thread = threading.Thread(target=outputter)
  103. output_thread.daemon = True
  104. output_thread.start()
  105. controller.start()