Lyon il y a 2 ans
Parent
commit
01c906403e

+ 1 - 0
package/PikaStdDevice/pika_hal.c

@@ -341,6 +341,7 @@ int pika_hal_SG_ioctl_merge_config(pika_hal_SG_config* dst,
     _IOCTL_CONFIG_USE_DEFAULT(amplitude, 0.1);
     dst->offset = src->offset;
     dst->seconds = src->seconds;
+		_IOCTL_CONFIG_USE_DEFAULT(noblocking, PIKA_HAL_SG_NOBLOCKING_ENABLE);
     _IOCTL_CONFIG_USE_DEFAULT(event_callback, NULL);
     _IOCTL_CONFIG_USE_DEFAULT(event_callback_filter,
                               PIKA_HAL_SG_EVENT_SIGNAL_ANY);

+ 7 - 0
package/PikaStdDevice/pika_hal.h

@@ -593,12 +593,19 @@ typedef enum {
     PIKA_HAL_SG_EVENT_SIGNAL_ANY,
 } PIKA_HAL_SG_EVENT_SIGNAL;
 
+typedef enum {
+	_PIKA_HAL_SG_NOBLOCKING_UNUSED = 0,
+	PIKA_HAL_SG_NOBLOCKING_ENABLE,
+	PIKA_HAL_SG_NOBLOCKING_DISABLE,
+} PIKA_HAL_SG_NOBLOCKING;
+
 typedef struct {
     PIKA_HAL_SG_WAVEFORM waveform;
     pika_float frequency;  // Frequency in Hz
     pika_float amplitude;  // Amplitude in Volts
     pika_float offset;     // Offset in Volts
     pika_float seconds;    // Seconds to output
+	  PIKA_HAL_SG_NOBLOCKING noblocking;
     void (*event_callback)(pika_dev* dev, PIKA_HAL_SG_EVENT_SIGNAL signal);
     PIKA_HAL_SG_EVENT_SIGNAL event_callback_filter;
     PIKA_HAL_EVENT_CALLBACK_ENA event_callback_ena;

+ 20 - 14
package/unittest/unittest.py

@@ -69,22 +69,28 @@ class TestCase:
     def assertNotIn(self, x, y):
         msg = "Expected %r not to be in %r" % (x, y)
         assert x not in y, msg
-
-    def run(self, result: TestResult, suite_name):
+    
+    def do_run(self, suite_name, name):
+        mem_before = 0.0
+        mem_after = 0.0
+        mem_before = mem.getNow()
+        self.test_fn()
+        mem_after = mem.getNow()
+        print("\x1b[1m\x1b[32m[       OK ] %s.%s\x1b[0m" % (suite_name, name))
+        if mem_after != mem_before:
+            print("\x1b[33m[ MEM LACK ]", mem_after - mem_before,"\x1b[0m")
+
+    def run(self, result: TestResult, suite_name, stop_on_error=False):
         for name in dir(self):
             if name.startswith("test"):
                 result.testsRun += 1
                 self.test_fn = getattr(self, name)
                 print("[ RUN      ] %s.%s" % (suite_name, name))
+                if stop_on_error:
+                    self.do_run(suite_name, name)
+                    continue
                 try:
-                    mem_before = 0.0
-                    mem_after = 0.0
-                    mem_before = mem.getNow()
-                    self.test_fn()
-                    mem_after = mem.getNow()
-                    print("\x1b[1m\x1b[32m[       OK ] %s.%s\x1b[0m" % (suite_name, name))
-                    if mem_after != mem_before:
-                        print("\x1b[33m[ MEM LACK ]", mem_after - mem_before,"\x1b[0m")
+                    self.do_run(suite_name, name)
                 except:
                     print("\x1b[1m\x1b[31m[  FAILED  ]\x1b[0m %s.%s" % (suite_name, name))
                     result.errorsNum += 1
@@ -98,17 +104,17 @@ class TestSuite:
     def addTest(self, case):
         self._tests.append(case)
 
-    def run(self, result: TestResult):
+    def run(self, result: TestResult, stop_on_error=False):
         for case in self._tests:
-            case.run(result, self.name)
+            case.run(result, self.name, stop_on_error)
         return result
 
 
 class TextTestRunner:
-    def run(self, suite: TestSuite):
+    def run(self, suite: TestSuite, stop_on_error=False):
         res = TestResult()
         print("[----------] tests from %s" % suite.name)
-        _ = suite.run(res)
+        _ = suite.run(res, stop_on_error)
         print("[----------] %d tests from %s" % res.testsRun, suite.name)
         print('')
         print('[==========]')