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

Committer:
dflet
Date:
Sun Aug 30 21:10:11 2015 +0000
Revision:
16:7e5aab2fabba
Parent:
15:5433f9d94cd7
Child:
17:acc075ff3fcb
2 cams work now ov2640 and ov5642, the mt9d111 appears to be a hard nut to crack with respect to jpeg. Still have SPI issues, appears to be something to do with the MCO1 clock.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dflet 0:50cedd586816 1 //*****************************************************************************
dflet 0:50cedd586816 2 // main.c
dflet 0:50cedd586816 3 //
dflet 0:50cedd586816 4 // Reference code to demonstrate getting the current time using an NTP server.
dflet 0:50cedd586816 5 //
dflet 0:50cedd586816 6 // Copyright (C) 2014 Texas Instruments Incorporated - http://www.ti.com/
dflet 0:50cedd586816 7 //
dflet 0:50cedd586816 8 //
dflet 0:50cedd586816 9 // Redistribution and use in source and binary forms, with or without
dflet 0:50cedd586816 10 // modification, are permitted provided that the following conditions
dflet 0:50cedd586816 11 // are met:
dflet 0:50cedd586816 12 //
dflet 0:50cedd586816 13 // Redistributions of source code must retain the above copyright
dflet 0:50cedd586816 14 // notice, this list of conditions and the following disclaimer.
dflet 0:50cedd586816 15 //
dflet 0:50cedd586816 16 // Redistributions in binary form must reproduce the above copyright
dflet 0:50cedd586816 17 // notice, this list of conditions and the following disclaimer in the
dflet 0:50cedd586816 18 // documentation and/or other materials provided with the
dflet 0:50cedd586816 19 // distribution.
dflet 0:50cedd586816 20 //
dflet 0:50cedd586816 21 // Neither the name of Texas Instruments Incorporated nor the names of
dflet 0:50cedd586816 22 // its contributors may be used to endorse or promote products derived
dflet 0:50cedd586816 23 // from this software without specific prior written permission.
dflet 0:50cedd586816 24 //
dflet 0:50cedd586816 25 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
dflet 0:50cedd586816 26 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
dflet 0:50cedd586816 27 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
dflet 0:50cedd586816 28 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
dflet 0:50cedd586816 29 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
dflet 0:50cedd586816 30 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
dflet 0:50cedd586816 31 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
dflet 0:50cedd586816 32 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
dflet 0:50cedd586816 33 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
dflet 0:50cedd586816 34 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
dflet 0:50cedd586816 35 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
dflet 0:50cedd586816 36 //
dflet 0:50cedd586816 37 //*****************************************************************************
dflet 0:50cedd586816 38
dflet 0:50cedd586816 39 //****************************************************************************
dflet 0:50cedd586816 40 //
dflet 0:50cedd586816 41 //! \addtogroup main
dflet 0:50cedd586816 42 //! @{
dflet 0:50cedd586816 43 //
dflet 0:50cedd586816 44 //****************************************************************************
dflet 0:50cedd586816 45
dflet 0:50cedd586816 46 #include "mbed.h"
dflet 0:50cedd586816 47
dflet 0:50cedd586816 48 // SimpleLink include
dflet 0:50cedd586816 49 #include "cc3100_simplelink.h"
dflet 0:50cedd586816 50 #include "cc3100.h"
dflet 0:50cedd586816 51
dflet 0:50cedd586816 52 #include "httpserverapp.h"
dflet 0:50cedd586816 53
dflet 4:c27adffcfec2 54 //#include "stm32f4xx_hal.h"
dflet 16:7e5aab2fabba 55 //#include "stm32f4xx_hal_rcc.h"
dflet 0:50cedd586816 56
dflet 0:50cedd586816 57 /* Free-RTOS includes */
dflet 15:5433f9d94cd7 58 #include "FreeRTOS.h"
dflet 16:7e5aab2fabba 59 //#include "task.h"
dflet 16:7e5aab2fabba 60 //#include "semphr.h"
dflet 16:7e5aab2fabba 61 //#include "portmacro.h"
dflet 15:5433f9d94cd7 62
dflet 0:50cedd586816 63 #include "osi.h"
dflet 0:50cedd586816 64
dflet 0:50cedd586816 65 #include "cli_uart.h"
dflet 0:50cedd586816 66 #include "app_config.h"
dflet 0:50cedd586816 67 #include "myBoardInit.h"
dflet 12:7d75ba5deed1 68 #include "camera_app.h"
dflet 0:50cedd586816 69
dflet 0:50cedd586816 70 using namespace mbed_cc3100;
dflet 0:50cedd586816 71
dflet 14:90603ea1e85b 72 extern DCMI_HandleTypeDef hdcmi;
dflet 14:90603ea1e85b 73 extern DMA_HandleTypeDef hdma_dcmi;
dflet 4:c27adffcfec2 74
dflet 1:1a80c1529aa3 75 /* Warning if pin changes are made below then the same changes have to be made in the following files.
dflet 0:50cedd586816 76 * httpserverapp.cpp
dflet 0:50cedd586816 77 * HttpCore.cpp
dflet 0:50cedd586816 78 * HttpSocket.cpp
dflet 0:50cedd586816 79 * HttpStatic.cpp
dflet 0:50cedd586816 80 * fPtr_func.cpp
dflet 0:50cedd586816 81 */
dflet 0:50cedd586816 82
dflet 0:50cedd586816 83 /* Off board leds */
dflet 0:50cedd586816 84 DigitalOut led1(PB_15);
dflet 0:50cedd586816 85 DigitalOut led2(PB_14);
dflet 14:90603ea1e85b 86 //Serial pc(USBTX, USBRX);
dflet 0:50cedd586816 87 cc3100 _cc3100(NC, NC, PD_12, PD_13, PD_11, SPI(PB_5, PB_4, PB_3));//Seeed_Arch_Max irq, nHib, cs, mosi, miso, sck
dflet 0:50cedd586816 88
dflet 14:90603ea1e85b 89 static void Start_MCO1(void);
dflet 0:50cedd586816 90 void initLEDs(void);
dflet 0:50cedd586816 91 void toggleLed(int ind);
dflet 0:50cedd586816 92 static void DisplayBanner(char * AppName);
dflet 0:50cedd586816 93
dflet 0:50cedd586816 94 #define PRINT_BUF_LEN 128
dflet 0:50cedd586816 95 int8_t print_buf[PRINT_BUF_LEN];
dflet 0:50cedd586816 96
dflet 0:50cedd586816 97 //*****************************************************************************
dflet 0:50cedd586816 98 // LOCAL DEFINES
dflet 0:50cedd586816 99 //*****************************************************************************
dflet 0:50cedd586816 100 #define APP_NAME "WebSocket"
dflet 0:50cedd586816 101
dflet 0:50cedd586816 102 void initLEDs(void){
dflet 0:50cedd586816 103
dflet 0:50cedd586816 104 #if (THIS_BOARD == Seeed_Arch_Max)
dflet 0:50cedd586816 105 led1 = 0;
dflet 0:50cedd586816 106 led2 = 0;
dflet 0:50cedd586816 107 #endif
dflet 0:50cedd586816 108
dflet 0:50cedd586816 109 }
dflet 0:50cedd586816 110
dflet 14:90603ea1e85b 111 static void Start_MCO1()
dflet 14:90603ea1e85b 112 {
dflet 14:90603ea1e85b 113
dflet 14:90603ea1e85b 114 GPIO_InitTypeDef GPIO_InitStruct;
dflet 14:90603ea1e85b 115 __GPIOA_CLK_ENABLE();
dflet 14:90603ea1e85b 116
dflet 16:7e5aab2fabba 117 //Configure GPIO pin : GPIO_AF0_MCO PA8
dflet 16:7e5aab2fabba 118 GPIO_InitStruct.Pin = GPIO_PIN_8;
dflet 16:7e5aab2fabba 119 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
dflet 16:7e5aab2fabba 120 GPIO_InitStruct.Pull = GPIO_PULLUP;
dflet 16:7e5aab2fabba 121 GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
dflet 14:90603ea1e85b 122 GPIO_InitStruct.Alternate = GPIO_AF0_MCO;
dflet 14:90603ea1e85b 123 HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
dflet 14:90603ea1e85b 124
dflet 16:7e5aab2fabba 125 // #ifndef MT9D111_CAM
dflet 14:90603ea1e85b 126 /* MCO1 output 16MHz */
dflet 16:7e5aab2fabba 127 // HAL_RCC_MCOConfig(RCC_MCO1, RCC_MCO1SOURCE_HSI, RCC_MCODIV_1);
dflet 16:7e5aab2fabba 128 //#else
dflet 14:90603ea1e85b 129 /* MCO1 output 8MHz */
dflet 16:7e5aab2fabba 130 // HAL_RCC_MCOConfig(RCC_MCO1, RCC_MCO1SOURCE_HSI, RCC_MCODIV_2);
dflet 16:7e5aab2fabba 131 //#endif
dflet 14:90603ea1e85b 132 wait_ms(500);
dflet 16:7e5aab2fabba 133
dflet 14:90603ea1e85b 134 }
dflet 14:90603ea1e85b 135
dflet 0:50cedd586816 136 void toggleLed(int ind){
dflet 0:50cedd586816 137
dflet 0:50cedd586816 138 if(ind == 1){
dflet 0:50cedd586816 139 led1 = !led1;
dflet 0:50cedd586816 140 }
dflet 0:50cedd586816 141 if(ind == 2){
dflet 0:50cedd586816 142 led2 = !led2;
dflet 0:50cedd586816 143 }
dflet 0:50cedd586816 144
dflet 0:50cedd586816 145 }
dflet 0:50cedd586816 146
dflet 0:50cedd586816 147 //*****************************************************************************
dflet 0:50cedd586816 148 //
dflet 0:50cedd586816 149 //! Application startup display on UART
dflet 0:50cedd586816 150 //!
dflet 0:50cedd586816 151 //! \param none
dflet 0:50cedd586816 152 //!
dflet 0:50cedd586816 153 //! \return none
dflet 0:50cedd586816 154 //!
dflet 0:50cedd586816 155 //*****************************************************************************
dflet 0:50cedd586816 156
dflet 0:50cedd586816 157 //#ifndef NOTERM
dflet 0:50cedd586816 158 static void
dflet 0:50cedd586816 159 DisplayBanner(char * AppName)
dflet 0:50cedd586816 160 {
dflet 0:50cedd586816 161
dflet 0:50cedd586816 162 Report("\n\n\n\r");
dflet 0:50cedd586816 163 Report(" *************************************************\n\r");
dflet 0:50cedd586816 164 Report(" CC3100 %s Application \n\r", AppName);
dflet 0:50cedd586816 165 Report(" *************************************************\n\r");
dflet 0:50cedd586816 166 Report("\n\n\n\r");
dflet 0:50cedd586816 167 }
dflet 0:50cedd586816 168 //#endif
dflet 0:50cedd586816 169
dflet 0:50cedd586816 170 //****************************************************************************
dflet 0:50cedd586816 171 // MAIN FUNCTION
dflet 0:50cedd586816 172 //****************************************************************************
dflet 0:50cedd586816 173 int main(void) {
dflet 16:7e5aab2fabba 174
dflet 16:7e5aab2fabba 175 int rv = 0;
dflet 0:50cedd586816 176
dflet 0:50cedd586816 177 //
dflet 0:50cedd586816 178 // Configuring UART
dflet 0:50cedd586816 179 //
dflet 0:50cedd586816 180 CLI_Configure();
dflet 14:90603ea1e85b 181
dflet 14:90603ea1e85b 182 #if defined OV5642_CAM
dflet 14:90603ea1e85b 183 Uart_Write((uint8_t*)"\n\rOV5642 Camera \n\r");
dflet 14:90603ea1e85b 184 #elif defined OV2640_CAM
dflet 14:90603ea1e85b 185 Uart_Write((uint8_t*)"\n\rOV2640 Camera \n\r");
dflet 14:90603ea1e85b 186 #elif defined MT9D111_CAM
dflet 14:90603ea1e85b 187 Uart_Write((uint8_t*)"\n\rMT9D111 Camera \n\r");
dflet 14:90603ea1e85b 188 #endif
dflet 14:90603ea1e85b 189
dflet 14:90603ea1e85b 190 /* Start Camera Master Clock */
dflet 14:90603ea1e85b 191 Start_MCO1();
dflet 14:90603ea1e85b 192
dflet 14:90603ea1e85b 193
dflet 14:90603ea1e85b 194
dflet 7:a069c1750fbc 195 initLEDs();
dflet 0:50cedd586816 196
dflet 4:c27adffcfec2 197 // toggleLed(1);
dflet 0:50cedd586816 198 //#ifndef NOTERM
dflet 0:50cedd586816 199
dflet 0:50cedd586816 200 memset(print_buf, 0x00, PRINT_BUF_LEN);
dflet 0:50cedd586816 201 sprintf((char*) print_buf, " \r\nSystemCoreClock = %dMHz\r\n ", SystemCoreClock /1000000);
dflet 0:50cedd586816 202 rv = Uart_Write((uint8_t *) print_buf);
dflet 0:50cedd586816 203 if(rv < 0){
dflet 0:50cedd586816 204 while(1){
dflet 0:50cedd586816 205 toggleLed(1);
dflet 0:50cedd586816 206 wait(0.1);
dflet 0:50cedd586816 207 }
dflet 0:50cedd586816 208 }
dflet 0:50cedd586816 209
dflet 0:50cedd586816 210 //
dflet 0:50cedd586816 211 // Display Application Banner
dflet 0:50cedd586816 212 //
dflet 0:50cedd586816 213 DisplayBanner(APP_NAME);
dflet 0:50cedd586816 214
dflet 16:7e5aab2fabba 215 // createMutex();
dflet 15:5433f9d94cd7 216
dflet 0:50cedd586816 217 //#endif
dflet 0:50cedd586816 218
dflet 0:50cedd586816 219 //
dflet 0:50cedd586816 220 // Start the SimpleLink Host
dflet 0:50cedd586816 221 //
dflet 0:50cedd586816 222 VStartSimpleLinkSpawnTask(SPAWN_TASK_PRIORITY);
dflet 0:50cedd586816 223 //
dflet 0:50cedd586816 224 // Start the HttpServer Task
dflet 0:50cedd586816 225 //
dflet 0:50cedd586816 226 //
dflet 0:50cedd586816 227
dflet 0:50cedd586816 228 osi_TaskCreate(HttpServerAppTask,
dflet 0:50cedd586816 229 "WebSocketApp",
dflet 0:50cedd586816 230 OSI_STACK_SIZE,
dflet 0:50cedd586816 231 NULL,
dflet 0:50cedd586816 232 HTTP_SERVER_APP_TASK_PRIORITY,
dflet 0:50cedd586816 233 NULL );
dflet 0:50cedd586816 234
dflet 14:90603ea1e85b 235 Uart_Write((uint8_t*)"HttpServerApp Initializing \n\r");
dflet 16:7e5aab2fabba 236
dflet 0:50cedd586816 237 //
dflet 0:50cedd586816 238 // Start the task scheduler
dflet 0:50cedd586816 239 //
dflet 0:50cedd586816 240 osi_start();
dflet 0:50cedd586816 241
dflet 0:50cedd586816 242 return 0;
dflet 0:50cedd586816 243 }
dflet 0:50cedd586816 244
dflet 4:c27adffcfec2 245
dflet 0:50cedd586816 246 //*****************************************************************************
dflet 0:50cedd586816 247 //
dflet 0:50cedd586816 248 // Close the Doxygen group.
dflet 0:50cedd586816 249 //! @}
dflet 0:50cedd586816 250 //
dflet 0:50cedd586816 251 //*****************************************************************************
dflet 0:50cedd586816 252
dflet 14:90603ea1e85b 253
dflet 14:90603ea1e85b 254
dflet 14:90603ea1e85b 255