add BS and DEL to the USB serial to delete last chanracter entered, gives simple...
authorJim Morris <morris@wolfman.com>
Sat, 24 Sep 2016 22:31:53 +0000 (15:31 -0700)
committerJim Morris <morris@wolfman.com>
Sat, 24 Sep 2016 22:31:53 +0000 (15:31 -0700)
src/libs/USBDevice/USBSerial/CircBuffer.h
src/libs/USBDevice/USBSerial/USBSerial.cpp

index 74e2ced..a542d0c 100644 (file)
@@ -52,6 +52,14 @@ public:
                __enable_irq();
     }
 
+    // pop last entered character
+    void pop() {
+        if(!isEmpty()) {
+            write--;
+            write %= size;
+        }
+    }
+
     uint16_t available() {
                __disable_irq();
                uint16_t i= (write >= read) ? write - read : (size - read) + write;
index 49ae631..42849e6 100644 (file)
@@ -180,6 +180,13 @@ bool USBSerial::USBEvent_EPOut(uint8_t bEP, uint8_t bEPStatus)
     readEP(c, &size);
     iprintf("Read %ld bytes:\n\t", size);
     for (uint8_t i = 0; i < size; i++) {
+
+        // handle backspace and delete by deleting the last character in the buffer if there is one
+        if(c[i] == 0x08 || c[i] == 0x7F) {
+            if(!rxbuf.isEmpty()) rxbuf.pop();
+            continue;
+        }
+
         if(c[i] == 'X' - 'A' + 1) { // ^X
             THEKERNEL->set_feed_hold(false); // required to free stuff up
             halt_flag = true;