Driver for the JY-MCU v1.06 HC-06 Bluetooth module.

Dependents:   DISCO-F746NG_rtos_test MbedTableControl

Files at this revision

API Documentation at this revision

Comitter:
Weimen Li
Date:
Mon Aug 08 19:48:19 2016 -0400
Parent:
20:13283edd1aba
Commit message:
Converted std::queue to RTOS's Queue to pass information from receivedByteISR to receivedByteThread, as std::queue is not ISR-safe.

Changed in this revision

HC06Bluetooth.cpp Show annotated file Show diff for this revision Revisions of this file
HC06Bluetooth.h Show annotated file Show diff for this revision Revisions of this file
diff -r 13283edd1aba -r cce827364df1 HC06Bluetooth.cpp
--- a/HC06Bluetooth.cpp	Mon Aug 08 15:03:13 2016 -0400
+++ b/HC06Bluetooth.cpp	Mon Aug 08 19:48:19 2016 -0400
@@ -124,53 +124,46 @@
 
     while(btSerialObj.readable())
     {
-        dataReceivedBuffer.push(btSerialObj.getc());
+        dataReceivedBuffer.put((char*) btSerialObj.getc());
     }
-    receiveByteThreadObj.signal_set(SIG_BT_BYTE);
 }
 
 void HC06Bluetooth::receiveByteThread()
 {
     // Now that all characters have been read, process them.
+    char receivedChar;
     while(true)
     {
-        if (!dataReceivedBuffer.empty())
+      receivedChar = (uint32_t) dataReceivedBuffer.get().value.p;
+        // Call the character callback function if it is not null.
+        if (charCallbackFunc != NULL) charCallbackFunc(receivedChar);
+
+        if (lineCallbackFunc != NULL)
         {
-            char receivedChar = dataReceivedBuffer.front();
-            dataReceivedBuffer.pop();
-            // Call the character callback function if it is not null.
-            if (charCallbackFunc != NULL) charCallbackFunc(receivedChar);
-
-            if (lineCallbackFunc != NULL)
+            // If the character is a newline or carriage return, then call the line callback function.
+            if ((receivedChar == '\n') || (receivedChar == '\r'))
             {
-                // If the character is a newline or carriage return, then call the line callback function.
-                if ((receivedChar == '\n') || (receivedChar == '\r'))
+                // Clear whatever was in the toClient buffer before.
+                dataReceivedToClient.clear();
+                // Copy everything from the queue to the client buffer.
+                while(!dataReceivedBufferCopy.empty())
                 {
-                    // Clear whatever was in the toClient buffer before.
-                    dataReceivedToClient.clear();
-                    // Copy everything from the queue to the client buffer.
-                    while(!dataReceivedBufferCopy.empty())
-                    {
-                        dataReceivedToClient.push_back(dataReceivedBufferCopy.front());
-                        dataReceivedBufferCopy.pop();
-                    }
-                    // Null-terminate the string.
-                    dataReceivedToClient.push_back('\0');
+                    dataReceivedToClient.push_back(dataReceivedBufferCopy.front());
+                    dataReceivedBufferCopy.pop();
+                }
+                // Null-terminate the string.
+                dataReceivedToClient.push_back('\0');
 
-                    // Call the callback function with the toClient buffer.
-                    lineCallbackFunc(&dataReceivedToClient[0], dataReceivedToClient.size());
-                }
+                // Call the callback function with the toClient buffer.
+                lineCallbackFunc(&dataReceivedToClient[0], dataReceivedToClient.size());
+            }
 
-                // Otherwise, enqueue it in the copy.
-                else
-                {
-                    dataReceivedBufferCopy.push(receivedChar);
-                }
+            // Otherwise, enqueue it in the copy.
+            else
+            {
+                dataReceivedBufferCopy.push(receivedChar);
             }
         }
-        else {
-            receiveByteThreadObj.signal_wait(SIG_BT_BYTE);
-        }
     }
 }
 
diff -r 13283edd1aba -r cce827364df1 HC06Bluetooth.h
--- a/HC06Bluetooth.h	Mon Aug 08 15:03:13 2016 -0400
+++ b/HC06Bluetooth.h	Mon Aug 08 19:48:19 2016 -0400
@@ -76,7 +76,7 @@
     void (*lineCallbackFunc) (const char*, size_t strlen);
     /// Pointer to a callback function the client provides when a character is received.
     void (*charCallbackFunc) (char);
-    std::queue<char> dataReceivedBuffer;
+    Queue<char, 64> dataReceivedBuffer;
     std::queue<char> dataReceivedBufferCopy;
     std::vector<char> dataReceivedToClient;
 };