added gy80 dcm

Dependencies:   mbed DCM_AHRS_GY80 PID MMA8451Q

Fork of quadCommand by Greg Abdo

Revision:
0:8681037b9a18
diff -r 000000000000 -r 8681037b9a18 quadCommand/com/queue/queue.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/quadCommand/com/queue/queue.cpp	Sun Jun 09 22:13:59 2013 +0000
@@ -0,0 +1,148 @@
+/*************************** queue.cpp ***************************************/
+/*                                                                           */
+/*  Authers: Oanh Tran, Ling Lei, Sihao Xie, Greg Abdo.                      */
+/*  Date:    February 23, 2013                                               */
+/*  Version: 1.0                                                             */
+/*                                                                           */
+/* The queue is used to stack StructureItem in order with a FILO             */
+/*arrangement.                                                               */
+/*****************************************************************************/
+
+#include "queue.h"
+
+/***************************** constructor ***********************************/
+/* Description:                                                              */
+/*****************************************************************************/
+
+queue::queue()
+{
+    front = NULL;   // Set front to NULL at the start.
+}
+
+/******************************* distructor **********************************/
+/* Description:                                                              */
+/*****************************************************************************/
+
+queue::~queue()
+{
+    clear();        // Clear the entire queue.
+}
+
+/*****************************************************************************/
+/* Description:                                                              */
+/* Accepts:                                                                  */
+/* Returns:                                                                  */
+/*****************************************************************************/
+
+bool queue::isEmpty()
+{
+    // Is the queue empty?
+    if( front == NULL ) // Check the front pointer.
+        return true;    // Queue is empty, return true.
+    
+    return false;       // There is atleast one item, not empty.
+}
+
+/*****************************************************************************/
+/* Description:                                                              */
+/* Accepts:                                                                  */
+/* Returns:                                                                  */
+/*****************************************************************************/
+
+void queue::clear()
+{
+    // Is the list already empty?
+    if( isEmpty() )     // Check for an empty list.
+        return;         // List is empty, don't need to do anything.
+
+    queueNode * current = front;    // Create node to help step through list.
+    queueNode * placeHold = front;  // Create node to keep place of delete.
+
+    // As long as were not at the end, keep stepping to the next node.
+    while( current != NULL)
+    {
+        placeHold = current->next;  // Hold where we have to go.
+        delete current;             // Delete the node.
+        current = placeHold;        // Set current to the next node.
+    }
+
+    front = NULL;   // Reset the front to NULL;
+    length = 0;
+}
+
+/*****************************************************************************/
+/* Description:                                                              */
+/* Accepts:                                                                  */
+/* Returns:                                                                  */
+/*****************************************************************************/
+
+void queue::add( short * item )
+{
+    // Were we passed an invalid object somehow?
+    if( item == NULL )  // Check for NULL
+        return;         // If so, return.
+
+    if( queueLength() > MAXQUEUELENGTH )
+        clear();
+        
+    queueNode * newNode = new queueNode( item );    // Create the new node.
+
+    if( isEmpty() )
+        front = newNode;        // Set front to the new node.
+        
+    else    
+    {
+        queueNode *temp = front;
+        while( temp->next != NULL )
+            temp = temp->next;
+            
+        temp->next = newNode;
+    }   
+    length++;
+}
+
+/*****************************************************************************/
+/* Description:                                                              */
+/* Accepts:                                                                  */
+/* Returns:                                                                  */
+/*****************************************************************************/
+
+short * queue::pop()
+{
+    // Is the list already empty?
+    if( isEmpty() )     // Check for an empty list.
+        return NULL;    // List is empty, don't need to do anything.
+
+    short* dataHold = front->data;  // Keep track of what were returning. 
+    queueNode * oldNode = front;    // Save the old node to be deleted
+    front = front->next;            // Set front to next object.
+                                    
+    delete oldNode;                 // Delete the front node.                     
+    length--;                       // Remove one from the length.
+    return dataHold;                // return the stuctureItem.
+}
+
+/*****************************************************************************/
+/* Description:                                                              */
+/* Accepts:                                                                  */
+/* Returns:                                                                  */
+/*****************************************************************************/
+
+short * queue::peek()
+{
+    if( front != NULL )
+        return front->data;
+
+    return NULL;
+}
+
+/*****************************************************************************/
+/* Description:                                                              */
+/* Accepts:                                                                  */
+/* Returns:                                                                  */
+/*****************************************************************************/
+
+short queue::queueLength()
+{
+    return length;
+}