run_debug.py 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. import target
  2. from sccd.runtime.statecharts_core import Event
  3. import threading
  4. import fsaclasses
  5. def buildModel():
  6. statea = fsaclasses.State("a")
  7. stateb = fsaclasses.State("b")
  8. statet = fsaclasses.State("t")
  9. statec = fsaclasses.State("c", final=True)
  10. transitionab = fsaclasses.Transition("a2b",statea,stateb)
  11. transitionab.trigger = fsaclasses.Event("a")
  12. transitionbt = fsaclasses.Transition("b2t",stateb,statet)
  13. transitionbt.trigger = fsaclasses.After(fsaclasses.Float(2.0))
  14. transitiontc = fsaclasses.Transition("t2c",statet,statec)
  15. fsamodel = fsaclasses.FSAModel(
  16. [statea,stateb,statec],
  17. [transitionab,transitionbt, transitiontc]
  18. )
  19. fsamodel.initialState = statea
  20. return fsamodel
  21. if __name__ == '__main__':
  22. fsamodel = buildModel()
  23. events = fsaclasses.Events([fsaclasses.RunTimeEvent('a', 3.0)])
  24. controller = target.Controller(fsamodel, events)
  25. def set_defaults(inp, defaultlist):
  26. for i, v in enumerate(defaultlist):
  27. if len(inp) == i + 1:
  28. inp.append(v)
  29. def get_bool(val):
  30. if val.lower() in ["true", "yes", "1"]:
  31. return True
  32. else:
  33. return False
  34. def raw_inputter():
  35. while 1:
  36. inp = raw_input().split(" ")
  37. action = inp[0]
  38. if action == "continuous":
  39. params = []
  40. elif action == "realtime":
  41. set_defaults(inp, [1.0])
  42. params = [inp[1]]
  43. elif action == "big_step":
  44. params = []
  45. elif action == "small_step":
  46. params = []
  47. elif action == "pause":
  48. params = []
  49. elif action == "add_breakpoint":
  50. if len(inp) < 5:
  51. print("Adding a breakpoint requires 4 parameters!")
  52. continue
  53. # Merge together the final part again
  54. params = [inp[1], " ".join(inp[2:-2]).replace("\\n", "\n").replace("\\t", "\t"), get_bool(inp[-2]), get_bool(inp[-1])]
  55. print("Generated parameters: " + str(params))
  56. elif action == "del_breakpoint":
  57. if len(inp) < 2:
  58. print("Breakpoint removal requires 1 parameter!")
  59. continue
  60. params = [inp[1]]
  61. elif action == "toggle_breakpoint":
  62. params = [inp[1]]
  63. elif action == "list_breakpoints":
  64. params = []
  65. elif action == "god_event":
  66. if len(inp) != 2:
  67. print("God events require 1 parameter!")
  68. continue
  69. params = [inp[1]]
  70. elif action == "help":
  71. print("Supported operations:")
  72. print(" continuous")
  73. print(" --> Simulate until termination time is reached")
  74. print(" pause")
  75. print(" --> Pause the simulation")
  76. print(" realtime [realtime_scale]")
  77. print(" --> Simulate in realtime")
  78. print(" realtime_scale can speed up or slow down the pace")
  79. print(" big_step")
  80. print(" --> Simulate a big step")
  81. print(" small_step")
  82. print(" --> Simulate a small step")
  83. print(" add_breakpoint name function enabled disable_on_trigger")
  84. print(" --> Add a breakpoint that will pause simulation when function returns True")
  85. print(" the function should contain a definition of the 'breakpoint' function")
  86. print(" and must take 1 parameter")
  87. print(" enabled indicates whether or not the breakpoint should be checked")
  88. print(" disable_on_trigger determines if the breakpoint should auto-disable")
  89. print(" after being triggered")
  90. print(" del_breakpoint name")
  91. print(" --> Remove a breakpoint")
  92. print(" toggle_breakpoint name")
  93. print(" --> Toggle the designated breakpoint")
  94. print(" list_breakpoints")
  95. print(" --> List all breakpoints")
  96. print(" god_event new_state")
  97. print(" --> Updates the current state")
  98. print("")
  99. print("Defaults: ")
  100. print(" realtime_scale --> 1.0")
  101. continue
  102. else:
  103. print("Command not understood: " + str(inp))
  104. continue
  105. controller.addInput(Event(action, "user_input", params))
  106. input_thread = threading.Thread(target=raw_inputter)
  107. input_thread.daemon = True
  108. input_thread.start()
  109. output_listener = controller.addOutputListener(["user_output"])
  110. def outputter():
  111. while 1:
  112. print output_listener.fetch(-1)
  113. output_thread = threading.Thread(target=outputter)
  114. output_thread.daemon = True
  115. output_thread.start()
  116. controller.start()