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:
Tue Sep 15 16:45:04 2015 +0000
Revision:
22:f9b5e0b80bf2
Parent:
20:409ebd125b9c
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 19:3dd3e7f30f8b 73 * cc3100_spawn.cpp
dflet 0:50cedd586816 74 */
dflet 0:50cedd586816 75
dflet 0:50cedd586816 76 /* Off board leds */
dflet 0:50cedd586816 77 DigitalOut led1(PB_15);
dflet 0:50cedd586816 78 DigitalOut led2(PB_14);
dflet 20:409ebd125b9c 79 cc3100 _cc3100(NC, NC, PD_12, PD_13, PD_11, SPI(PC_3, PC_2, PB_10));//Seeed_Arch_Max irq, nHib, cs, mosi, miso, sck
dflet 0:50cedd586816 80
dflet 14:90603ea1e85b 81 static void Start_MCO1(void);
dflet 0:50cedd586816 82 void initLEDs(void);
dflet 0:50cedd586816 83 void toggleLed(int ind);
dflet 0:50cedd586816 84 static void DisplayBanner(char * AppName);
dflet 0:50cedd586816 85
dflet 0:50cedd586816 86 #define PRINT_BUF_LEN 128
dflet 0:50cedd586816 87 int8_t print_buf[PRINT_BUF_LEN];
dflet 0:50cedd586816 88
dflet 0:50cedd586816 89 //*****************************************************************************
dflet 0:50cedd586816 90 // LOCAL DEFINES
dflet 0:50cedd586816 91 //*****************************************************************************
dflet 0:50cedd586816 92 #define APP_NAME "WebSocket"
dflet 0:50cedd586816 93
dflet 0:50cedd586816 94 void initLEDs(void){
dflet 0:50cedd586816 95
dflet 0:50cedd586816 96 #if (THIS_BOARD == Seeed_Arch_Max)
dflet 0:50cedd586816 97 led1 = 0;
dflet 0:50cedd586816 98 led2 = 0;
dflet 0:50cedd586816 99 #endif
dflet 0:50cedd586816 100
dflet 0:50cedd586816 101 }
dflet 0:50cedd586816 102
dflet 14:90603ea1e85b 103 static void Start_MCO1()
dflet 14:90603ea1e85b 104 {
dflet 14:90603ea1e85b 105
dflet 14:90603ea1e85b 106 GPIO_InitTypeDef GPIO_InitStruct;
dflet 14:90603ea1e85b 107 __GPIOA_CLK_ENABLE();
dflet 14:90603ea1e85b 108
dflet 16:7e5aab2fabba 109 //Configure GPIO pin : GPIO_AF0_MCO PA8
dflet 16:7e5aab2fabba 110 GPIO_InitStruct.Pin = GPIO_PIN_8;
dflet 16:7e5aab2fabba 111 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
dflet 16:7e5aab2fabba 112 GPIO_InitStruct.Pull = GPIO_PULLUP;
dflet 16:7e5aab2fabba 113 GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
dflet 14:90603ea1e85b 114 GPIO_InitStruct.Alternate = GPIO_AF0_MCO;
dflet 14:90603ea1e85b 115 HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
dflet 14:90603ea1e85b 116
dflet 17:acc075ff3fcb 117 #ifndef MT9D111_CAM
dflet 14:90603ea1e85b 118 /* MCO1 output 16MHz */
dflet 17:acc075ff3fcb 119 HAL_RCC_MCOConfig(RCC_MCO1, RCC_MCO1SOURCE_HSI, RCC_MCODIV_1);
dflet 17:acc075ff3fcb 120 #else
dflet 14:90603ea1e85b 121 /* MCO1 output 8MHz */
dflet 17:acc075ff3fcb 122 HAL_RCC_MCOConfig(RCC_MCO1, RCC_MCO1SOURCE_HSI, RCC_MCODIV_2);
dflet 17:acc075ff3fcb 123 #endif
dflet 14:90603ea1e85b 124 wait_ms(500);
dflet 16:7e5aab2fabba 125
dflet 14:90603ea1e85b 126 }
dflet 14:90603ea1e85b 127
dflet 0:50cedd586816 128 void toggleLed(int ind){
dflet 0:50cedd586816 129
dflet 0:50cedd586816 130 if(ind == 1){
dflet 0:50cedd586816 131 led1 = !led1;
dflet 0:50cedd586816 132 }
dflet 0:50cedd586816 133 if(ind == 2){
dflet 0:50cedd586816 134 led2 = !led2;
dflet 0:50cedd586816 135 }
dflet 0:50cedd586816 136
dflet 0:50cedd586816 137 }
dflet 0:50cedd586816 138
dflet 0:50cedd586816 139 //*****************************************************************************
dflet 0:50cedd586816 140 //
dflet 0:50cedd586816 141 //! Application startup display on UART
dflet 0:50cedd586816 142 //!
dflet 0:50cedd586816 143 //! \param none
dflet 0:50cedd586816 144 //!
dflet 0:50cedd586816 145 //! \return none
dflet 0:50cedd586816 146 //!
dflet 0:50cedd586816 147 //*****************************************************************************
dflet 0:50cedd586816 148
dflet 0:50cedd586816 149 //#ifndef NOTERM
dflet 0:50cedd586816 150 static void
dflet 0:50cedd586816 151 DisplayBanner(char * AppName)
dflet 0:50cedd586816 152 {
dflet 0:50cedd586816 153
dflet 0:50cedd586816 154 Report("\n\n\n\r");
dflet 0:50cedd586816 155 Report(" *************************************************\n\r");
dflet 0:50cedd586816 156 Report(" CC3100 %s Application \n\r", AppName);
dflet 0:50cedd586816 157 Report(" *************************************************\n\r");
dflet 0:50cedd586816 158 Report("\n\n\n\r");
dflet 0:50cedd586816 159 }
dflet 0:50cedd586816 160 //#endif
dflet 0:50cedd586816 161
dflet 0:50cedd586816 162 //****************************************************************************
dflet 0:50cedd586816 163 // MAIN FUNCTION
dflet 0:50cedd586816 164 //****************************************************************************
dflet 0:50cedd586816 165 int main(void) {
dflet 16:7e5aab2fabba 166
dflet 16:7e5aab2fabba 167 int rv = 0;
dflet 0:50cedd586816 168
dflet 0:50cedd586816 169 //
dflet 0:50cedd586816 170 // Configuring UART
dflet 0:50cedd586816 171 //
dflet 0:50cedd586816 172 CLI_Configure();
dflet 14:90603ea1e85b 173
dflet 14:90603ea1e85b 174 #if defined OV5642_CAM
dflet 14:90603ea1e85b 175 Uart_Write((uint8_t*)"\n\rOV5642 Camera \n\r");
dflet 14:90603ea1e85b 176 #elif defined OV2640_CAM
dflet 14:90603ea1e85b 177 Uart_Write((uint8_t*)"\n\rOV2640 Camera \n\r");
dflet 14:90603ea1e85b 178 #elif defined MT9D111_CAM
dflet 14:90603ea1e85b 179 Uart_Write((uint8_t*)"\n\rMT9D111 Camera \n\r");
dflet 14:90603ea1e85b 180 #endif
dflet 14:90603ea1e85b 181
dflet 14:90603ea1e85b 182 /* Start Camera Master Clock */
dflet 14:90603ea1e85b 183 Start_MCO1();
dflet 14:90603ea1e85b 184
dflet 14:90603ea1e85b 185
dflet 14:90603ea1e85b 186
dflet 7:a069c1750fbc 187 initLEDs();
dflet 0:50cedd586816 188
dflet 17:acc075ff3fcb 189 //#ifndef NOTERM
dflet 0:50cedd586816 190 memset(print_buf, 0x00, PRINT_BUF_LEN);
dflet 0:50cedd586816 191 sprintf((char*) print_buf, " \r\nSystemCoreClock = %dMHz\r\n ", SystemCoreClock /1000000);
dflet 0:50cedd586816 192 rv = Uart_Write((uint8_t *) print_buf);
dflet 0:50cedd586816 193 if(rv < 0){
dflet 0:50cedd586816 194 while(1){
dflet 0:50cedd586816 195 toggleLed(1);
dflet 0:50cedd586816 196 wait(0.1);
dflet 0:50cedd586816 197 }
dflet 0:50cedd586816 198 }
dflet 0:50cedd586816 199
dflet 0:50cedd586816 200 //
dflet 0:50cedd586816 201 // Display Application Banner
dflet 0:50cedd586816 202 //
dflet 0:50cedd586816 203 DisplayBanner(APP_NAME);
dflet 0:50cedd586816 204
dflet 16:7e5aab2fabba 205 // createMutex();
dflet 15:5433f9d94cd7 206
dflet 0:50cedd586816 207 //#endif
dflet 0:50cedd586816 208
dflet 0:50cedd586816 209 //
dflet 0:50cedd586816 210 // Start the SimpleLink Host
dflet 0:50cedd586816 211 //
dflet 0:50cedd586816 212 VStartSimpleLinkSpawnTask(SPAWN_TASK_PRIORITY);
dflet 0:50cedd586816 213 //
dflet 0:50cedd586816 214 // Start the HttpServer Task
dflet 0:50cedd586816 215 //
dflet 0:50cedd586816 216 //
dflet 0:50cedd586816 217 osi_TaskCreate(HttpServerAppTask,
dflet 0:50cedd586816 218 "WebSocketApp",
dflet 0:50cedd586816 219 OSI_STACK_SIZE,
dflet 0:50cedd586816 220 NULL,
dflet 0:50cedd586816 221 HTTP_SERVER_APP_TASK_PRIORITY,
dflet 0:50cedd586816 222 NULL );
dflet 0:50cedd586816 223
dflet 14:90603ea1e85b 224 Uart_Write((uint8_t*)"HttpServerApp Initializing \n\r");
dflet 16:7e5aab2fabba 225
dflet 0:50cedd586816 226 //
dflet 0:50cedd586816 227 // Start the task scheduler
dflet 0:50cedd586816 228 //
dflet 0:50cedd586816 229 osi_start();
dflet 0:50cedd586816 230
dflet 0:50cedd586816 231 return 0;
dflet 0:50cedd586816 232 }
dflet 0:50cedd586816 233
dflet 4:c27adffcfec2 234
dflet 0:50cedd586816 235 //*****************************************************************************
dflet 0:50cedd586816 236 //
dflet 0:50cedd586816 237 // Close the Doxygen group.
dflet 0:50cedd586816 238 //! @}
dflet 0:50cedd586816 239 //
dflet 0:50cedd586816 240 //*****************************************************************************
dflet 0:50cedd586816 241
dflet 14:90603ea1e85b 242
dflet 14:90603ea1e85b 243
dflet 14:90603ea1e85b 244