USB device stack

Dependents:   MATSU-bed_blinky MATSU-bed_detection

Fork of USBDevice by mbed official

Revision:
15:849c0c0f2769
Parent:
1:80ab0d068708
Child:
19:fcb63a105965
--- a/USBSerial/USBSerial.h	Thu Sep 12 14:45:27 2013 +0100
+++ b/USBSerial/USBSerial.h	Tue Nov 05 09:45:23 2013 +0000
@@ -55,7 +55,9 @@
     * @param product_release Your preoduct_release (default: 0x0001)
     *
     */
-    USBSerial(uint16_t vendor_id = 0x1f00, uint16_t product_id = 0x2012, uint16_t product_release = 0x0001): USBCDC(vendor_id, product_id, product_release), buf(128){ };
+    USBSerial(uint16_t vendor_id = 0x1f00, uint16_t product_id = 0x2012, uint16_t product_release = 0x0001): USBCDC(vendor_id, product_id, product_release), buf(128){
+        settingsChangedCallback = 0;
+    };
 
 
     /**
@@ -79,6 +81,22 @@
     * @returns the number of bytes available
     */
     uint8_t available(); 
+
+    /** Determine if there is a character available to read
+     *
+     *  @returns
+     *    1 if there is a character available to read,
+     *    0 otherwise
+     */
+    int readable() { return available() ? 1 : 0; }
+    
+    /** Determine if there is space available to write a character
+     *
+     *  @returns
+     *    1 if there is space to write a character,
+     *    0 otherwise
+     */
+    int writeable() { return 1; } // always return 1, for write operation is blocking
     
     /**
     * Write a block of data. 
@@ -110,19 +128,33 @@
      *
      * @param fptr function pointer
      */
-    void attach(void (*fn)(void)) {
-        if(fn != NULL) {
-            rx.attach(fn);
+    void attach(void (*fptr)(void)) {
+        if(fptr != NULL) {
+            rx.attach(fptr);
         }
     }
 
+    /**
+     * Attach a callback to call when serial's settings are changed.
+     *
+     * @param fptr function pointer
+     */
+    void attach(void (*fptr)(int baud, int bits, int parity, int stop)) {
+        settingsChangedCallback = fptr;
+    }
 
 protected:
     virtual bool EP2_OUT_callback();
+    virtual void lineCodingChanged(int baud, int bits, int parity, int stop){
+        if (settingsChangedCallback) {
+            settingsChangedCallback(baud, bits, parity, stop);
+        }
+    }
 
 private:
     FunctionPointer rx;
     CircBuffer<uint8_t> buf;
+    void (*settingsChangedCallback)(int baud, int bits, int parity, int stop);
 };
 
 #endif