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:
Mon Aug 31 15:20:36 2015 +0000
Revision:
17:acc075ff3fcb
Parent:
16:7e5aab2fabba
Child:
19:3dd3e7f30f8b
Changed SPI mode from 1 to mode 0. Mode 0 is correct. Note: may be some clk skew here mode 0 & 1 work???, spi still flacky when mco1 is turned on. Doing some off app testing to try and get the mt9d111 cam working. Removed some debug.

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 /* Free-RTOS includes */
dflet 15:5433f9d94cd7 53 #include "FreeRTOS.h"
dflet 0:50cedd586816 54 #include "osi.h"
dflet 0:50cedd586816 55
dflet 0:50cedd586816 56 #include "cli_uart.h"
dflet 0:50cedd586816 57 #include "app_config.h"
dflet 0:50cedd586816 58 #include "myBoardInit.h"
dflet 17:acc075ff3fcb 59 #include "httpserverapp.h"
dflet 12:7d75ba5deed1 60 #include "camera_app.h"
dflet 0:50cedd586816 61
dflet 0:50cedd586816 62 using namespace mbed_cc3100;
dflet 0:50cedd586816 63
dflet 14:90603ea1e85b 64 extern DCMI_HandleTypeDef hdcmi;
dflet 14:90603ea1e85b 65 extern DMA_HandleTypeDef hdma_dcmi;
dflet 4:c27adffcfec2 66
dflet 1:1a80c1529aa3 67 /* Warning if pin changes are made below then the same changes have to be made in the following files.
dflet 0:50cedd586816 68 * httpserverapp.cpp
dflet 0:50cedd586816 69 * HttpCore.cpp
dflet 0:50cedd586816 70 * HttpSocket.cpp
dflet 0:50cedd586816 71 * HttpStatic.cpp
dflet 0:50cedd586816 72 * fPtr_func.cpp
dflet 0:50cedd586816 73 */
dflet 0:50cedd586816 74
dflet 0:50cedd586816 75 /* Off board leds */
dflet 0:50cedd586816 76 DigitalOut led1(PB_15);
dflet 0:50cedd586816 77 DigitalOut led2(PB_14);
dflet 0:50cedd586816 78 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 79
dflet 14:90603ea1e85b 80 static void Start_MCO1(void);
dflet 0:50cedd586816 81 void initLEDs(void);
dflet 0:50cedd586816 82 void toggleLed(int ind);
dflet 0:50cedd586816 83 static void DisplayBanner(char * AppName);
dflet 0:50cedd586816 84
dflet 0:50cedd586816 85 #define PRINT_BUF_LEN 128
dflet 0:50cedd586816 86 int8_t print_buf[PRINT_BUF_LEN];
dflet 0:50cedd586816 87
dflet 0:50cedd586816 88 //*****************************************************************************
dflet 0:50cedd586816 89 // LOCAL DEFINES
dflet 0:50cedd586816 90 //*****************************************************************************
dflet 0:50cedd586816 91 #define APP_NAME "WebSocket"
dflet 0:50cedd586816 92
dflet 0:50cedd586816 93 void initLEDs(void){
dflet 0:50cedd586816 94
dflet 0:50cedd586816 95 #if (THIS_BOARD == Seeed_Arch_Max)
dflet 0:50cedd586816 96 led1 = 0;
dflet 0:50cedd586816 97 led2 = 0;
dflet 0:50cedd586816 98 #endif
dflet 0:50cedd586816 99
dflet 0:50cedd586816 100 }
dflet 0:50cedd586816 101
dflet 14:90603ea1e85b 102 static void Start_MCO1()
dflet 14:90603ea1e85b 103 {
dflet 14:90603ea1e85b 104
dflet 14:90603ea1e85b 105 GPIO_InitTypeDef GPIO_InitStruct;
dflet 14:90603ea1e85b 106 __GPIOA_CLK_ENABLE();
dflet 14:90603ea1e85b 107
dflet 16:7e5aab2fabba 108 //Configure GPIO pin : GPIO_AF0_MCO PA8
dflet 16:7e5aab2fabba 109 GPIO_InitStruct.Pin = GPIO_PIN_8;
dflet 16:7e5aab2fabba 110 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
dflet 16:7e5aab2fabba 111 GPIO_InitStruct.Pull = GPIO_PULLUP;
dflet 16:7e5aab2fabba 112 GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
dflet 14:90603ea1e85b 113 GPIO_InitStruct.Alternate = GPIO_AF0_MCO;
dflet 14:90603ea1e85b 114 HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
dflet 14:90603ea1e85b 115
dflet 17:acc075ff3fcb 116 #ifndef MT9D111_CAM
dflet 14:90603ea1e85b 117 /* MCO1 output 16MHz */
dflet 17:acc075ff3fcb 118 HAL_RCC_MCOConfig(RCC_MCO1, RCC_MCO1SOURCE_HSI, RCC_MCODIV_1);
dflet 17:acc075ff3fcb 119 #else
dflet 14:90603ea1e85b 120 /* MCO1 output 8MHz */
dflet 17:acc075ff3fcb 121 HAL_RCC_MCOConfig(RCC_MCO1, RCC_MCO1SOURCE_HSI, RCC_MCODIV_2);
dflet 17:acc075ff3fcb 122 #endif
dflet 14:90603ea1e85b 123 wait_ms(500);
dflet 16:7e5aab2fabba 124
dflet 14:90603ea1e85b 125 }
dflet 14:90603ea1e85b 126
dflet 0:50cedd586816 127 void toggleLed(int ind){
dflet 0:50cedd586816 128
dflet 0:50cedd586816 129 if(ind == 1){
dflet 0:50cedd586816 130 led1 = !led1;
dflet 0:50cedd586816 131 }
dflet 0:50cedd586816 132 if(ind == 2){
dflet 0:50cedd586816 133 led2 = !led2;
dflet 0:50cedd586816 134 }
dflet 0:50cedd586816 135
dflet 0:50cedd586816 136 }
dflet 0:50cedd586816 137
dflet 0:50cedd586816 138 //*****************************************************************************
dflet 0:50cedd586816 139 //
dflet 0:50cedd586816 140 //! Application startup display on UART
dflet 0:50cedd586816 141 //!
dflet 0:50cedd586816 142 //! \param none
dflet 0:50cedd586816 143 //!
dflet 0:50cedd586816 144 //! \return none
dflet 0:50cedd586816 145 //!
dflet 0:50cedd586816 146 //*****************************************************************************
dflet 0:50cedd586816 147
dflet 0:50cedd586816 148 //#ifndef NOTERM
dflet 0:50cedd586816 149 static void
dflet 0:50cedd586816 150 DisplayBanner(char * AppName)
dflet 0:50cedd586816 151 {
dflet 0:50cedd586816 152
dflet 0:50cedd586816 153 Report("\n\n\n\r");
dflet 0:50cedd586816 154 Report(" *************************************************\n\r");
dflet 0:50cedd586816 155 Report(" CC3100 %s Application \n\r", AppName);
dflet 0:50cedd586816 156 Report(" *************************************************\n\r");
dflet 0:50cedd586816 157 Report("\n\n\n\r");
dflet 0:50cedd586816 158 }
dflet 0:50cedd586816 159 //#endif
dflet 0:50cedd586816 160
dflet 0:50cedd586816 161 //****************************************************************************
dflet 0:50cedd586816 162 // MAIN FUNCTION
dflet 0:50cedd586816 163 //****************************************************************************
dflet 0:50cedd586816 164 int main(void) {
dflet 16:7e5aab2fabba 165
dflet 16:7e5aab2fabba 166 int rv = 0;
dflet 0:50cedd586816 167
dflet 0:50cedd586816 168 //
dflet 0:50cedd586816 169 // Configuring UART
dflet 0:50cedd586816 170 //
dflet 0:50cedd586816 171 CLI_Configure();
dflet 14:90603ea1e85b 172
dflet 14:90603ea1e85b 173 #if defined OV5642_CAM
dflet 14:90603ea1e85b 174 Uart_Write((uint8_t*)"\n\rOV5642 Camera \n\r");
dflet 14:90603ea1e85b 175 #elif defined OV2640_CAM
dflet 14:90603ea1e85b 176 Uart_Write((uint8_t*)"\n\rOV2640 Camera \n\r");
dflet 14:90603ea1e85b 177 #elif defined MT9D111_CAM
dflet 14:90603ea1e85b 178 Uart_Write((uint8_t*)"\n\rMT9D111 Camera \n\r");
dflet 14:90603ea1e85b 179 #endif
dflet 14:90603ea1e85b 180
dflet 14:90603ea1e85b 181 /* Start Camera Master Clock */
dflet 14:90603ea1e85b 182 Start_MCO1();
dflet 14:90603ea1e85b 183
dflet 14:90603ea1e85b 184
dflet 14:90603ea1e85b 185
dflet 7:a069c1750fbc 186 initLEDs();
dflet 0:50cedd586816 187
dflet 17:acc075ff3fcb 188 //#ifndef NOTERM
dflet 0:50cedd586816 189 memset(print_buf, 0x00, PRINT_BUF_LEN);
dflet 0:50cedd586816 190 sprintf((char*) print_buf, " \r\nSystemCoreClock = %dMHz\r\n ", SystemCoreClock /1000000);
dflet 0:50cedd586816 191 rv = Uart_Write((uint8_t *) print_buf);
dflet 0:50cedd586816 192 if(rv < 0){
dflet 0:50cedd586816 193 while(1){
dflet 0:50cedd586816 194 toggleLed(1);
dflet 0:50cedd586816 195 wait(0.1);
dflet 0:50cedd586816 196 }
dflet 0:50cedd586816 197 }
dflet 0:50cedd586816 198
dflet 0:50cedd586816 199 //
dflet 0:50cedd586816 200 // Display Application Banner
dflet 0:50cedd586816 201 //
dflet 0:50cedd586816 202 DisplayBanner(APP_NAME);
dflet 0:50cedd586816 203
dflet 16:7e5aab2fabba 204 // createMutex();
dflet 15:5433f9d94cd7 205
dflet 0:50cedd586816 206 //#endif
dflet 0:50cedd586816 207
dflet 0:50cedd586816 208 //
dflet 0:50cedd586816 209 // Start the SimpleLink Host
dflet 0:50cedd586816 210 //
dflet 0:50cedd586816 211 VStartSimpleLinkSpawnTask(SPAWN_TASK_PRIORITY);
dflet 0:50cedd586816 212 //
dflet 0:50cedd586816 213 // Start the HttpServer Task
dflet 0:50cedd586816 214 //
dflet 0:50cedd586816 215 //
dflet 0:50cedd586816 216 osi_TaskCreate(HttpServerAppTask,
dflet 0:50cedd586816 217 "WebSocketApp",
dflet 0:50cedd586816 218 OSI_STACK_SIZE,
dflet 0:50cedd586816 219 NULL,
dflet 0:50cedd586816 220 HTTP_SERVER_APP_TASK_PRIORITY,
dflet 0:50cedd586816 221 NULL );
dflet 0:50cedd586816 222
dflet 14:90603ea1e85b 223 Uart_Write((uint8_t*)"HttpServerApp Initializing \n\r");
dflet 16:7e5aab2fabba 224
dflet 0:50cedd586816 225 //
dflet 0:50cedd586816 226 // Start the task scheduler
dflet 0:50cedd586816 227 //
dflet 0:50cedd586816 228 osi_start();
dflet 0:50cedd586816 229
dflet 0:50cedd586816 230 return 0;
dflet 0:50cedd586816 231 }
dflet 0:50cedd586816 232
dflet 4:c27adffcfec2 233
dflet 0:50cedd586816 234 //*****************************************************************************
dflet 0:50cedd586816 235 //
dflet 0:50cedd586816 236 // Close the Doxygen group.
dflet 0:50cedd586816 237 //! @}
dflet 0:50cedd586816 238 //
dflet 0:50cedd586816 239 //*****************************************************************************
dflet 0:50cedd586816 240
dflet 14:90603ea1e85b 241
dflet 14:90603ea1e85b 242
dflet 14:90603ea1e85b 243