Support fast emu demo mode
authorJoseph Coffland <joseph@cauldrondevelopment.com>
Mon, 18 Feb 2019 07:28:48 +0000 (23:28 -0800)
committerJoseph Coffland <joseph@cauldrondevelopment.com>
Mon, 18 Feb 2019 07:28:48 +0000 (23:28 -0800)
src/avr/emu/src/emu.c
src/avr/src/main.c
src/py/bbctrl/APIHandler.py
src/py/bbctrl/AVREmu.py
src/py/bbctrl/Web.py
src/py/bbctrl/__init__.py

index 8224c10e0a9b0c15943c3795fd398e9b01205dc0..c42075873bf86d39da4aadbd7214f1bdc99bdc67 100644 (file)
@@ -30,6 +30,7 @@
 #include <avr/io.h>
 
 #include <stdio.h>
+#include <string.h>
 #include <stdlib.h>
 #include <stdint.h>
 #include <unistd.h>
@@ -52,10 +53,14 @@ void __RTC_OVF_vect();       // RTC tick
 
 void motor_emulate_steps(int motor);
 
+extern int __argc;
+extern char **__argv;
+
 
 volatile uint8_t io_mem[4096] = {0};
 
 
+bool fast = false;
 int serialByte = -1;
 uint8_t i2cData[I2C_MAX_DATA];
 int i2cIndex = 0;
@@ -68,6 +73,10 @@ void sei() {}
 
 
 void emu_init() {
+  // Parse command line args
+  for (int i = 0; i < __argc; i++)
+    if (strcmp(__argv[i], "--fast") == 0) fast = true;
+
   // Mark clocks ready
   OSC.STATUS = OSC_XOSCRDY_bm | OSC_PLLRDY_bm | OSC_RC32KRDY_bm;
 
@@ -83,7 +92,7 @@ void emu_callback() {
 
   if (RST.CTRL == RST_SWRST_bm) exit(0);
 
-  struct timeval t = {0, 0}; // 1000};
+  struct timeval t = {0, fast ? 0 : 1000};
   bool readData = true;
   while (readData) {
     readData = false;
index 7908fc6f9315c89cc0af59d7d65622b65b5057d2..d363ea2888ff8b201383ef2cf37a2ff4c134f016 100644 (file)
 #include <stdbool.h>
 
 
-int main() {
+// For emu
+int __argc;
+char **__argv;
+
+
+int main(int argc, char *argv[]) {
+  __argc = argc;
+  __argv = argv;
+
   wdt_enable(WDTO_250MS);
 
   // Init
index 6b583596e0e5b7ed016b2fb200383fcea2b1745e..10bde7b2a36f5ab4b0c6adfee29ffe8237989c1d 100644 (file)
@@ -39,7 +39,7 @@ log.setLevel(logging.DEBUG)
 
 class APIHandler(RequestHandler):
     def __init__(self, app, request, **kwargs):
-        super(APIHandler, self).__init__(app, request, **kwargs)
+        super().__init__(app, request, **kwargs)
         self.ctrl = app.ctrl
 
 
index 71f6d33b2a134af2b9344a29538c6484b36940cf..f06add33e03a150ae3eac655268e8456ee325d2f 100644 (file)
@@ -75,7 +75,10 @@ class AVREmu(object):
                 os.close(stdoutFDs[1])
                 os.close(i2cFDs[0])
 
-                os.execvp('bbemu', ('bbemu',))
+                cmd = ['bbemu']
+                if self.ctrl.args.fast_emu: cmd.append('--fast')
+
+                os.execvp(cmd[0], cmd)
                 os._exit(1) # In case of failure
 
             # Parent
index 0fc1fb3e286569aae505d4cb6a5644b7cf236e3f..5e30ee8aa68cfdb39bf397f1d01d7ff7e74517d0 100644 (file)
@@ -87,7 +87,7 @@ class RebootHandler(bbctrl.APIHandler):
 
 class LogHandler(tornado.web.RequestHandler):
     def __init__(self, app, request, **kwargs):
-        super(LogHandler, self).__init__(app, request, **kwargs)
+        super().__init__(app, request, **kwargs)
         self.filename = app.ctrl.args.log
 
 
@@ -105,7 +105,7 @@ class LogHandler(tornado.web.RequestHandler):
 
 class BugReportHandler(tornado.web.RequestHandler):
     def __init__(self, app, request, **kwargs):
-        super(BugReportHandler, self).__init__(app, request, **kwargs)
+        super().__init__(app, request, **kwargs)
         self.app = app
 
 
index 4eb9d611ee7e72221777b20f9023785504aef580..70f63be13f4439a3bb1838f3b6e042fd60fbd4b4 100644 (file)
@@ -124,6 +124,8 @@ def parse_args():
                         help = 'Camera frame format')
     parser.add_argument('--demo', action = 'store_true',
                         help = 'Enter demo mode')
+    parser.add_argument('--fast-emu', action = 'store_true',
+                        help = 'Enter demo mode')
 
     return parser.parse_args()