Port of TI's CC3100 Websock camera demo. Using FreeRTOS, mbedTLS, also parts of Arducam for cams ov5642 and 0v2640. Can also use MT9D111. Work in progress. Be warned some parts maybe a bit flacky. This is for Seeed Arch max only, for an M3, see the demo for CM3 using the 0v5642 aducam mini.

Dependencies:   mbed

Revision:
2:b92db44a29b4
Parent:
1:1a80c1529aa3
Child:
3:7643714ec664
--- a/camera_app/camera_app.cpp	Thu Jun 25 18:37:49 2015 +0000
+++ b/camera_app/camera_app.cpp	Fri Jun 26 16:49:04 2015 +0000
@@ -349,35 +349,31 @@
     Uart_Write((uint8_t*)"CaptureImage \n\r");
     DCMI_HandleTypeDef hdcmi;
     DMA_HandleTypeDef hdma_dcmi;
-    //
-    // Configure DMA in ping-pong mode
-    //
+    memset(g_image.g_image_buffer,0xF80F,sizeof(g_image.g_image_buffer));
+    p_buffer = &(g_image.g_image_buffer[0]);
 
     DMAConfig();
     
-    HAL_DCMI_Start_DMA(&hdcmi, DCMI_MODE_SNAPSHOT, (uint32_t)&WriteBuffer, FRAME_SIZE_IN_BYTES); 
-    
- 
-/* Wait for frame */
-while ((DCMI->CR & DCMI_CR_CAPTURE) != 0) {
- 
-}
- 
-/* The frame is finished, but DMA still waiting
-   for data because we set max frame size
-   so we need to abort the DMA transfer here */
-HAL_DMA_Abort(&hdma_dcmi);
- 
-/* Read the number of data items transferred */
-//image->size = (FRAME_SIZE_IN_BYTES - hdma_dcmi.Instance->NDTR)*4;      
-    
     //
     // Perform Image Capture 
     //
-//    MAP_CameraCaptureStart(CAMERA_BASE);
-    while(g_frame_end == 0)
-        ;
-//    MAP_CameraCaptureStop(CAMERA_BASE, true);
+    Uart_Write((uint8_t*)"CaptureImage Start\n\r");
+    HAL_DCMI_Start_DMA(&hdcmi, DCMI_MODE_SNAPSHOT, (uint32_t)p_buffer, sizeof(g_image.g_image_buffer)); 
+    
+    /* Wait for frame */
+    while ((DCMI->CR & DCMI_CR_CAPTURE) != 0) {
+ 
+    }
+    g_frame_end = 1;
+    
+    Uart_Write((uint8_t*)"CaptureImage Complete\n\r");
+    /* The frame is finished, but DMA still waiting
+       for data because we set max frame size
+       so we need to abort the DMA transfer here */
+    HAL_DMA_Abort(&hdma_dcmi);//need this???
+ 
+    /* Read the number of data items transferred */
+    uint16_t image_size = (FRAME_SIZE_IN_BYTES - hdma_dcmi.Instance->NDTR)*4;      
 
     //
     // Create JPEG Header
@@ -412,8 +408,8 @@
 static void DMAConfig()
 {
     Uart_Write((uint8_t*)"DMAConfig \n\r");
-    memset(g_image.g_image_buffer,0xF80F,sizeof(g_image.g_image_buffer));
-    p_buffer = &(g_image.g_image_buffer[0]);
+//    memset(g_image.g_image_buffer,0xF80F,sizeof(g_image.g_image_buffer));
+//    p_buffer = &(g_image.g_image_buffer[0]);
     //
     // Initilalize DMA 
     //
@@ -427,14 +423,14 @@
     //
     //  Pong Buffer
     // 
-    p_buffer += TOTAL_DMA_ELEMENTS; 
+//    p_buffer += TOTAL_DMA_ELEMENTS; 
 //    UDMASetupTransfer(UDMA_CH22_CAMERA|UDMA_ALT_SELECT,UDMA_MODE_PINGPONG,TOTAL_DMA_ELEMENTS,
 //                     UDMA_SIZE_32, UDMA_ARB_8,(void *)CAM_BUFFER_ADDR,
 //                     UDMA_SRC_INC_32, (void *)p_buffer, UDMA_DST_INC_32);
     //
     //  Ping Buffer
     // 
-    p_buffer += TOTAL_DMA_ELEMENTS; 
+//    p_buffer += TOTAL_DMA_ELEMENTS; 
 
     g_dma_txn_done = 0;
     g_frame_size_in_bytes = 0;