For Terrance

Dependencies:   mbed

Revision:
0:085749c8446f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Code/Serial.c	Wed Jun 13 15:10:06 2012 +0000
@@ -0,0 +1,55 @@
+#include "System.h"
+
+ByteQueue PCBackDoorTx,PCBackDoorRx;
+BYTE PCBackDoorTx_Queue_Storage[PC_BACKDOOR_TX_QUEUE_SIZE];
+BYTE PCBackDoorRx_Queue_Storage[PC_BACKDOOR_RX_QUEUE_SIZE];
+
+Serial PCBackDoor(USBTX, USBRX); 
+Ticker PCBackDoorTxQueueCheck;
+
+//IRQ for when data is received
+void PCBackDoorRxIRQ();
+void PCBackDoorMoveTxQueue();
+
+void InitPCBackDoor()
+{
+    InitByteQueue(&PCBackDoorTx,PC_BACKDOOR_TX_QUEUE_SIZE,&PCBackDoorTx_Queue_Storage[0]);
+    InitByteQueue(&PCBackDoorRx,PC_BACKDOOR_RX_QUEUE_SIZE,&PCBackDoorRx_Queue_Storage[0]);
+    
+    PCBackDoor.baud(57600);
+    PCBackDoor.format(8,Serial::None,1);  
+ 
+    
+    //The Rx IRQ wil fill up my big software Rx Queue
+    PCBackDoor.attach(&PCBackDoorRxIRQ);
+    
+    //Periodicically check my outgoing Tx Queue (every 1 mS)
+   PCBackDoorTxQueueCheck.attach_us(&PCBackDoorMoveTxQueue,500);
+}
+
+void PCBackDoorMoveTxQueue()
+{
+    BYTE Temp;
+    
+    while(PCBackDoor.writeable())
+    {
+        if(BytesInQueue(&PCBackDoorTx) == 0)
+        {
+            break;
+        }
+        else
+        {
+            ByteDequeue(&PCBackDoorTx,&Temp);
+            PCBackDoor.putc(Temp);
+        }
+    }
+ 
+}
+
+void PCBackDoorRxIRQ()
+{
+   while(PCBackDoor.readable())
+    {
+         ByteEnqueue(&PCBackDoorRx,(BYTE)PCBackDoor.getc());   
+    }
+}
\ No newline at end of file