xbee communication for UWB quadcopter project Originally by Greg Abdo Forking to reduce impact of interrupt by moving packetbuilder out of the interrupt and letting be handled in the main loop

Fork of com by Prosper Van

Committer:
oprospero
Date:
Wed Apr 23 06:21:01 2014 +0000
Revision:
8:951c71c71b2d
Parent:
0:26a151d2c6db
Child:
16:89695823d407
overflowing queue will force a pop instead of clear

Who changed what in which revision?

UserRevisionLine numberNew contents of line
oprospero 0:26a151d2c6db 1 /*************************** queue.cpp ***************************************/
oprospero 0:26a151d2c6db 2 /* */
oprospero 0:26a151d2c6db 3 /* Authers: Oanh Tran, Ling Lei, Sihao Xie, Greg Abdo. */
oprospero 0:26a151d2c6db 4 /* Date: February 23, 2013 */
oprospero 0:26a151d2c6db 5 /* Version: 1.0 */
oprospero 0:26a151d2c6db 6 /* */
oprospero 0:26a151d2c6db 7 /* The queue is used to stack StructureItem in order with a FILO */
oprospero 0:26a151d2c6db 8 /*arrangement. */
oprospero 0:26a151d2c6db 9 /*****************************************************************************/
oprospero 0:26a151d2c6db 10
oprospero 0:26a151d2c6db 11 #include "queue.h"
oprospero 0:26a151d2c6db 12
oprospero 0:26a151d2c6db 13 /***************************** constructor ***********************************/
oprospero 0:26a151d2c6db 14 /* Description: */
oprospero 0:26a151d2c6db 15 /*****************************************************************************/
oprospero 0:26a151d2c6db 16
oprospero 0:26a151d2c6db 17 queue::queue()
oprospero 0:26a151d2c6db 18 {
oprospero 0:26a151d2c6db 19 front = NULL; // Set front to NULL at the start.
oprospero 0:26a151d2c6db 20 }
oprospero 0:26a151d2c6db 21
oprospero 0:26a151d2c6db 22 /******************************* distructor **********************************/
oprospero 0:26a151d2c6db 23 /* Description: */
oprospero 0:26a151d2c6db 24 /*****************************************************************************/
oprospero 0:26a151d2c6db 25
oprospero 0:26a151d2c6db 26 queue::~queue()
oprospero 0:26a151d2c6db 27 {
oprospero 0:26a151d2c6db 28 clear(); // Clear the entire queue.
oprospero 0:26a151d2c6db 29 }
oprospero 0:26a151d2c6db 30
oprospero 0:26a151d2c6db 31 /*****************************************************************************/
oprospero 0:26a151d2c6db 32 /* Description: */
oprospero 0:26a151d2c6db 33 /* Accepts: */
oprospero 0:26a151d2c6db 34 /* Returns: */
oprospero 0:26a151d2c6db 35 /*****************************************************************************/
oprospero 0:26a151d2c6db 36
oprospero 0:26a151d2c6db 37 bool queue::isEmpty()
oprospero 0:26a151d2c6db 38 {
oprospero 0:26a151d2c6db 39 // Is the queue empty?
oprospero 0:26a151d2c6db 40 if( front == NULL ) // Check the front pointer.
oprospero 0:26a151d2c6db 41 return true; // Queue is empty, return true.
oprospero 0:26a151d2c6db 42
oprospero 0:26a151d2c6db 43 return false; // There is atleast one item, not empty.
oprospero 0:26a151d2c6db 44 }
oprospero 0:26a151d2c6db 45
oprospero 0:26a151d2c6db 46 /*****************************************************************************/
oprospero 0:26a151d2c6db 47 /* Description: */
oprospero 0:26a151d2c6db 48 /* Accepts: */
oprospero 0:26a151d2c6db 49 /* Returns: */
oprospero 0:26a151d2c6db 50 /*****************************************************************************/
oprospero 0:26a151d2c6db 51
oprospero 0:26a151d2c6db 52 void queue::clear()
oprospero 0:26a151d2c6db 53 {
oprospero 0:26a151d2c6db 54 // Is the list already empty?
oprospero 0:26a151d2c6db 55 if( isEmpty() ) // Check for an empty list.
oprospero 0:26a151d2c6db 56 return; // List is empty, don't need to do anything.
oprospero 0:26a151d2c6db 57
oprospero 0:26a151d2c6db 58 queueNode * current = front; // Create node to help step through list.
oprospero 0:26a151d2c6db 59 queueNode * placeHold = front; // Create node to keep place of delete.
oprospero 0:26a151d2c6db 60
oprospero 0:26a151d2c6db 61 // As long as were not at the end, keep stepping to the next node.
oprospero 0:26a151d2c6db 62 while( current != NULL)
oprospero 0:26a151d2c6db 63 {
oprospero 0:26a151d2c6db 64 placeHold = current->next; // Hold where we have to go.
oprospero 0:26a151d2c6db 65 delete current; // Delete the node.
oprospero 0:26a151d2c6db 66 current = placeHold; // Set current to the next node.
oprospero 0:26a151d2c6db 67 }
oprospero 0:26a151d2c6db 68
oprospero 0:26a151d2c6db 69 front = NULL; // Reset the front to NULL;
oprospero 0:26a151d2c6db 70 length = 0;
oprospero 0:26a151d2c6db 71 }
oprospero 0:26a151d2c6db 72
oprospero 0:26a151d2c6db 73 /*****************************************************************************/
oprospero 0:26a151d2c6db 74 /* Description: */
oprospero 0:26a151d2c6db 75 /* Accepts: */
oprospero 0:26a151d2c6db 76 /* Returns: */
oprospero 0:26a151d2c6db 77 /*****************************************************************************/
oprospero 0:26a151d2c6db 78
oprospero 0:26a151d2c6db 79 void queue::add( short * item )
oprospero 0:26a151d2c6db 80 {
oprospero 0:26a151d2c6db 81 // Were we passed an invalid object somehow?
oprospero 0:26a151d2c6db 82 if( item == NULL ) // Check for NULL
oprospero 0:26a151d2c6db 83 return; // If so, return.
oprospero 0:26a151d2c6db 84
oprospero 0:26a151d2c6db 85 if( queueLength() > MAXQUEUELENGTH )
oprospero 8:951c71c71b2d 86 delete pop();
oprospero 0:26a151d2c6db 87
oprospero 0:26a151d2c6db 88 queueNode * newNode = new queueNode( item ); // Create the new node.
oprospero 0:26a151d2c6db 89
oprospero 0:26a151d2c6db 90 if( isEmpty() )
oprospero 0:26a151d2c6db 91 front = newNode; // Set front to the new node.
oprospero 0:26a151d2c6db 92
oprospero 0:26a151d2c6db 93 else
oprospero 0:26a151d2c6db 94 {
oprospero 0:26a151d2c6db 95 queueNode *temp = front;
oprospero 0:26a151d2c6db 96 while( temp->next != NULL )
oprospero 0:26a151d2c6db 97 temp = temp->next;
oprospero 0:26a151d2c6db 98
oprospero 0:26a151d2c6db 99 temp->next = newNode;
oprospero 0:26a151d2c6db 100 }
oprospero 0:26a151d2c6db 101 length++;
oprospero 0:26a151d2c6db 102 }
oprospero 0:26a151d2c6db 103
oprospero 0:26a151d2c6db 104 /*****************************************************************************/
oprospero 0:26a151d2c6db 105 /* Description: */
oprospero 0:26a151d2c6db 106 /* Accepts: */
oprospero 0:26a151d2c6db 107 /* Returns: */
oprospero 0:26a151d2c6db 108 /*****************************************************************************/
oprospero 0:26a151d2c6db 109
oprospero 0:26a151d2c6db 110 short * queue::pop()
oprospero 0:26a151d2c6db 111 {
oprospero 0:26a151d2c6db 112 // Is the list already empty?
oprospero 0:26a151d2c6db 113 if( isEmpty() ) // Check for an empty list.
oprospero 0:26a151d2c6db 114 return NULL; // List is empty, don't need to do anything.
oprospero 0:26a151d2c6db 115
oprospero 0:26a151d2c6db 116 short* dataHold = front->data; // Keep track of what were returning.
oprospero 0:26a151d2c6db 117 queueNode * oldNode = front; // Save the old node to be deleted
oprospero 0:26a151d2c6db 118 front = front->next; // Set front to next object.
oprospero 0:26a151d2c6db 119
oprospero 0:26a151d2c6db 120 delete oldNode; // Delete the front node.
oprospero 0:26a151d2c6db 121 length--; // Remove one from the length.
oprospero 0:26a151d2c6db 122 return dataHold; // return the stuctureItem.
oprospero 0:26a151d2c6db 123 }
oprospero 0:26a151d2c6db 124
oprospero 0:26a151d2c6db 125 /*****************************************************************************/
oprospero 0:26a151d2c6db 126 /* Description: */
oprospero 0:26a151d2c6db 127 /* Accepts: */
oprospero 0:26a151d2c6db 128 /* Returns: */
oprospero 0:26a151d2c6db 129 /*****************************************************************************/
oprospero 0:26a151d2c6db 130
oprospero 0:26a151d2c6db 131 short * queue::peek()
oprospero 0:26a151d2c6db 132 {
oprospero 0:26a151d2c6db 133 if( front != NULL )
oprospero 0:26a151d2c6db 134 return front->data;
oprospero 0:26a151d2c6db 135
oprospero 0:26a151d2c6db 136 return NULL;
oprospero 0:26a151d2c6db 137 }
oprospero 0:26a151d2c6db 138
oprospero 0:26a151d2c6db 139 /*****************************************************************************/
oprospero 0:26a151d2c6db 140 /* Description: */
oprospero 0:26a151d2c6db 141 /* Accepts: */
oprospero 0:26a151d2c6db 142 /* Returns: */
oprospero 0:26a151d2c6db 143 /*****************************************************************************/
oprospero 0:26a151d2c6db 144
oprospero 0:26a151d2c6db 145 short queue::queueLength()
oprospero 0:26a151d2c6db 146 {
oprospero 0:26a151d2c6db 147 return length;
oprospero 0:26a151d2c6db 148 }