Index: /trunk/hal/lpc2103-retkodfuncam/interrupt.c
===================================================================
--- /trunk/hal/lpc2103-retkodfuncam/interrupt.c	(revision 613)
+++ /trunk/hal/lpc2103-retkodfuncam/interrupt.c	(revision 614)
@@ -207,5 +207,5 @@
     }
 
-   else if (REG (VICRawIntr) & VIC_MSK_TIMER1_HBLK) {
+   if (REG (VICRawIntr) & VIC_MSK_TIMER1_HBLK) {
 	REG(TIMER1_IR) = 0xff;  // clear TIMER1 interrupt register flags
       	if(hblk_callback!=NULL) hblk_callback();
Index: /trunk/hal/lpc2103-retkodfuncam/interrupt.h
===================================================================
--- /trunk/hal/lpc2103-retkodfuncam/interrupt.h	(revision 613)
+++ /trunk/hal/lpc2103-retkodfuncam/interrupt.h	(revision 614)
@@ -20,4 +20,6 @@
 #define INTERRUPT_H
 
+#define ROW_BUF_LEN		500
+
 #include <stdbool.h>
 
@@ -25,5 +27,6 @@
 // XXX: this doesn't belong here
 extern volatile uint32_t dclk_cnt; 
-extern volatile uint8_t row_buf[1280];
+extern volatile uint32_t row_done; 
+extern volatile uint8_t row_buf[ROW_BUF_LEN];
 
 void enable_ext_interrupt (void);
Index: /trunk/hal/lpc2103-retkodfuncam/fast-interrupt.c
===================================================================
--- /trunk/hal/lpc2103-retkodfuncam/fast-interrupt.c	(revision 613)
+++ /trunk/hal/lpc2103-retkodfuncam/fast-interrupt.c	(revision 614)
@@ -28,23 +28,20 @@
 #include "cc3_hal.h"
 
+#define VIC_MSK_EINT0_DCLK	0x04000
 
+volatile uint32_t row_done; 
 volatile uint32_t dclk_cnt; 
-volatile uint8_t row_buf[1280];
+volatile uint8_t row_buf[ROW_BUF_LEN];
 
 __attribute__((section(".boot.fiq")))
 void fast_interrupt (void)
 {
-      // XXX: cleanup the static 1280 crap below
-   // if (REG (VICRawIntr) & VIC_MSK_EINT0_DCLK) {
-      REG (SYSCON_EXTINT) = 0x1;  // clear EINT0
-	if(dclk_cnt<1280) row_buf[dclk_cnt]=(REG(GPIO_IOPIN)>>24); 
-      dclk_cnt++;
-      if(dclk_cnt%2==0)
-      REG (GPIO_IOSET) = _CC3_LED_0;
-      else
-      REG (GPIO_IOCLR) = _CC3_LED_0;
-      //dclk_callback();
-      //  if(dclk_callback!=NULL) dclk_callback();
-   // }
-//    REG(VICVectAddr) = 0x0;
+  if(dclk_cnt<ROW_BUF_LEN ) {
+	  row_buf[dclk_cnt]=(REG(GPIO_IOPIN)>>24); 
+  	  dclk_cnt++;
+  } else {
+  row_done=1;	
+  REG (VICIntEnClr) = VIC_MSK_EINT0_DCLK;
+  }
+ REG (SYSCON_EXTINT) = 0x1;  // clear EINT0
 }
Index: /trunk/projects/cmucam1/ppm-fd/ppm-fd.c
===================================================================
--- /trunk/projects/cmucam1/ppm-fd/ppm-fd.c	(revision 585)
+++ /trunk/projects/cmucam1/ppm-fd/ppm-fd.c	(revision 614)
@@ -4,5 +4,5 @@
 
 #define X_MAX		1024
-#define Y_MAX		768
+#define Y_MAX		1024	
 #define CHAN_MAX	3
 
Index: /trunk/projects/cmucam1/cmucam1.c
===================================================================
--- /trunk/projects/cmucam1/cmucam1.c	(revision 613)
+++ /trunk/projects/cmucam1/cmucam1.c	(revision 614)
@@ -103,7 +103,8 @@
 volatile uint32_t hblk_cnt;
 //volatile uint32_t dclk_cnt; 
-volatile uint32_t frame_done, row_done;
+volatile uint32_t frame_done;
 
 volatile uint32_t row_width;
+volatile uint32_t dclk_lines[288];
 
 
@@ -119,5 +120,6 @@
 	row_done=0;
 	row_width=width;
-	do{ } while(!row_done);
+	do{ 
+	} while(!row_done);
 	return hblk_cnt;
 }
@@ -125,41 +127,5 @@
 void my_vblk()
 {
-  hblk_cnt=0; 
-}
-/*
- // XXX: This moved to fast-interrupt.c
-void my_dclk()
-{
-	if(dclk_cnt<1280) row_buf[dclk_cnt]=(REG(GPIO_IOPIN)>>24); 
-	dclk_cnt++;
-}
-*/
-void my_hblk()
-{
-hblk_cnt++;
-	if( hblk_cnt%2==0 ) 
-	{
-		// Use this row to print dclk_cnt from last row
-		disable_dclk_interrupt();
-  		print_num(hblk_cnt);
-		cc3_uart0_write(" ");
-  		print_num(dclk_cnt);
-		cc3_uart0_write("\r\n");
-	}
-	else {
-		// Lets count dclk
-		dclk_cnt=0;
-		enable_dclk_interrupt();
-	}
-}
-
-
-
-
-/*
-// Here is some craptacular code to try and grab a row of data
-
-void my_vblk()
-{
+    
   // start of frame
   frame_done=0;
@@ -168,22 +134,7 @@
 }
 
-void my_dclk()
-{
- // Read a row into memory
- if(dclk_cnt< row_width) {
-	 row_buf[dclk_cnt]=(REG(GPIO_IOPIN)>>24); 
-	 dclk_cnt++;
- }
- else
- {
-  // signal when you have enough
-  row_done=1;	
-  disable_dclk_interrupt();
- }
-}
 
 void my_hblk()
 {
-
   	if(hblk_cnt<1023) 
 	{
@@ -191,7 +142,9 @@
 		// Reset the dclk_cnt which is the index into
 		// the row buffer that gets filled by the dclk int	
-		dclk_cnt=0;
 		hblk_cnt++;
-  		if( row_done==0 ) enable_dclk_interrupt();
+  		if( row_done==0 ) {
+			dclk_cnt=0;
+			enable_dclk_interrupt();
+		}
 	}
 	else
@@ -205,15 +158,21 @@
 		row_done=1;
 	}
-}
-
-*/
+
+}
+
+
+
 
 int main (void)
 {
   	int32_t val, n,led_state;
-	uint8_t red,green,blue,pix_data[4];
+	uint8_t red,green,blue,pix_data[4],y1,u,v,y2;
 	int32_t raw_pix_data[4],raw_pix_data_tmp;
 	int32_t row,col,row_max,col_max,i,j;
 
+
+  disable_dclk_interrupt();
+  disable_hblk_interrupt();
+  disable_vblk_interrupt();
 
       	cc3_uart_init (0,
@@ -305,12 +264,9 @@
   init_camera_interrupts();
 
-  // Simple dclk counting test
-  enable_vblk_interrupt(); 
-  enable_hblk_interrupt(); 
-  while(1);
-  // End dclk counting test
-
-  while(1){
-
+
+//  while(1){
+
+
+        cc3_uart0_putchar (1);
 	// Start next frame capture (vblk stops at end of frame)
   	enable_vblk_interrupt(); 
@@ -318,10 +274,42 @@
 	do {
 		// ask for a row of size n, return which row was captured
-		row=capture_next_row(100); // 1280 is max
-  		print_num(row);
-		cc3_uart0_write("\r\n");
+		row=capture_next_row(ROW_BUF_LEN); // 1280 is max
+        	cc3_uart0_putchar (2);
+		for(i=0; i<ROW_BUF_LEN; i++ ) 
+		{
+	       		/*
+			red=row_buf[i+1] & 0xf8; 
+	       		blue=row_buf[i] & 0x1f<<3; 
+	       		green=(row_buf[i] & 0xe0>>5) | (row_buf[i+1]<<5); 
+			i++;
+			if(red<4) red=4;
+			if(green<4) green=4;
+			if(blue<4) blue=4;
+			cc3_uart0_putchar (red);
+			cc3_uart0_putchar (green);
+			cc3_uart0_putchar (blue);
+
+			*/
+
+			y1=row_buf[i];
+			u=row_buf[i+1];
+			y2=row_buf[i+2];
+			v=row_buf[i+3];
+			i+=3;
+
+			cc3_uart0_putchar (y1);
+			cc3_uart0_putchar (u);
+			cc3_uart0_putchar (v);
+
+			cc3_uart0_putchar (y2);
+			cc3_uart0_putchar (u);
+			cc3_uart0_putchar (v);
+		}
+  		//print_num(row);
+		//cc3_uart0_write("\r\n");
 	} while(!frame_done);
-	
-  }
+        	cc3_uart0_putchar (3);
+	while(1);	
+//  }
 
 
