if (EM.assert(USBSerial::read(&cmd[1], 2) == 2, Error::BadParamSize)) {
         unsigned int count = cmd[1] | (cmd[2] << 8);
         if (EM.assert(count <= MAX_SAMPLE_BUFFER_SIZE, Error::BadParam)) {
-            if (run_status == RunStatus::Idle) {
+            if (!DAC::isSigGenRunning()) {
                 Samples::Generator.setSize(count);
                 USBSerial::read(
                     reinterpret_cast<uint8_t *>(Samples::Generator.data()),
                     Samples::Generator.bytesize());
-            } else if (run_status == RunStatus::Running) {
-                int more;
-                do {
-                    chThdSleepMicroseconds(10);
-                    more = DAC::sigGenWantsMore();
-                } while (more == -1);
-
-                // Receive streamed samples in half-buffer chunks.
-                USBSerial::read(reinterpret_cast<uint8_t *>(
-                    more == 0 ? Samples::Generator.data() : Samples::Generator.middata()),
-                    Samples::Generator.bytesize() / 2);
+            } else {
+                const int more = DAC::sigGenWantsMore();
+                if (more == -1) {
+                    USBSerial::write(reinterpret_cast<const uint8_t *>("\0"), 1);
+                } else {
+                    USBSerial::write(reinterpret_cast<const uint8_t *>("\1"), 1);
+
+                    // Receive streamed samples in half-buffer chunks.
+                    USBSerial::read(reinterpret_cast<uint8_t *>(
+                        more == 0 ? Samples::Generator.data() : Samples::Generator.middata()),
+                        Samples::Generator.bytesize() / 2);
+                }
             }
         }
     }