miniProject-Wireless Pong

Revision:
7:c9ff6b5c8507
Parent:
6:5563f0026858
Child:
8:54dd4a3d0de9
--- a/main.cpp	Thu Oct 04 23:33:35 2012 +0000
+++ b/main.cpp	Fri Oct 05 12:05:01 2012 +0000
@@ -2,6 +2,7 @@
 #include "rtos.h"
 #include "NokiaLCD.h"
 #include "XMIT_IR.h"
+#include "queue.h"
 
 #define FPS 5
 #define UART_TIMEOUT 500
@@ -34,6 +35,8 @@
 char irdatOUT[10];
 char irdatIN[10];
 char error_code=0;
+Thread* threadptr_donothing;
+DataQueue RX_DataBuffer(1,100);
 
 //Function Prototypes
 void BlinkAlive(void const* arguments);
@@ -41,6 +44,8 @@
 void IRStuff(void const* arguments);
 void MakePacket(char* data,int len);
 char CheckPacket(char* data, int data_size);
+void ISR_UARTRX(void);
+void DoNothing(void const* arguments);
 
 
 int main()
@@ -55,14 +60,18 @@
 
     //Serial init
     device.baud(2400);
+    //device.attach(&ISR_UARTRX,Serial::RxIrq);
 
     //PC serial init
     pc.baud(19200);
+    pc.printf("Starting...\n\n");
 
     //Thread init
     Thread thread_blinkalive(BlinkAlive);
     Thread thread_updatelcd(UpdateLCD);
     Thread thread_irstuff(IRStuff);
+    Thread thread_donothing(DoNothing);
+    threadptr_donothing = &thread_donothing;
 
 
 
@@ -75,7 +84,7 @@
 
 void UpdateLCD(void const* arguments)
 {
-    /*while(true) {
+    while(true) {
         led2 = 1;
         lcd.locate(0,1);
         lcd.printf("Debug:");
@@ -97,23 +106,41 @@
         //End - Sleep thread
         led2 = 0;
         Thread::signal_wait(0x1);
-    }*/
+    }
 }
 
 void IRStuff(void const* arguments)
 {
     while(true) {
-        //error_code = CheckPacket(irdatIN,2);
-        
-        while(device.readable())
-        {
+        error_code = CheckPacket(irdatIN,2);
+
+        /*while(device.readable()) {
             char tempdata = device.getc();
             if(tempdata==0x02) pc.printf("\n");
             pc.printf("0x%02X.",tempdata);
+        }*/
+
+        //pc.printf("UART_STATE: 0x%08X",*((unsigned int *)0x400FC0C4));
+
+
+        /*pc.printf("any data?\n");
+        while(RX_DataBuffer.GetNumberOfItems())
+        {
+            char* data;
+            RX_DataBuffer.Get(data);
+            pc.printf("0x%02X.",*data);
+        }*/
+
+        //pc.printf("\n\nE=0x%02X\n\n",error_code);
+        if(error_code==0x0) {
+            pc.printf("0x%02X.",irdatIN[1]);
+            Thread::wait(10);
+        } else if(error_code==0x2) {
+            pc.printf("!");
+            Thread::wait(10);
+        } else {
+            Thread::wait(10);
         }
-        
-        //pc.printf("\n\nERROR=0x%02X\n\n",error_code);
-        Thread::wait(3000);
     }
 
 }
@@ -156,10 +183,10 @@
     char tempdata=0x0;
     char check=0x0;
 
-    pc.printf("\nChecking Packet\n\t");
+    //pc.printf("\nChecking Packet\n\t");
     //Data available
     if(!device.readable()) {
-        pc.printf("no data");
+        //pc.printf("no data");
         return 0x4; //no data
     }
 
@@ -171,8 +198,7 @@
 
     //STX recieved
     if(tempdata!=0x02) {
-        pc.printf("found bad data: 0x%02X",tempdata);
-        if(tempdata==0xFF) device.getc(); //flush
+        if(tempdata==0xFF) pc.printf("found bad data: 0x%02X",tempdata);
         return 0x1; //bad start byte
     }
 
@@ -199,3 +225,25 @@
 
 }
 
+void DoNothing(void const* arguments)
+{
+    while(true) {
+        Thread::signal_wait(0x1);
+    }
+}
+
+void ISR_UARTRX(void)
+{
+    uint32_t RBR = LPC_UART1->RBR;
+    char data = (char)RBR;
+    RX_DataBuffer.Put(&data);
+    //pc.printf("!");
+
+    while(device.readable()) {
+        char data = device.getc();
+        RX_DataBuffer.Put(&data);
+        //pc.printf("*");
+    }
+
+}
+