TI's CC3100 websocket camera demo with Arducam mini ov5642 and freertos. Should work with other M3's. Work in progress test demo.

Dependencies:   mbed

Committer:
dflet
Date:
Sun Sep 06 15:19:36 2015 +0000
Revision:
0:400d8e75a8d0
Child:
1:e448e81c416f
TI's websocket Camera demo, also uses Arducam mini 0v5642 camera.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dflet 0:400d8e75a8d0 1 //*****************************************************************************
dflet 0:400d8e75a8d0 2 // main.c
dflet 0:400d8e75a8d0 3 //
dflet 0:400d8e75a8d0 4 // Reference code to demonstrate getting the current time using an NTP server.
dflet 0:400d8e75a8d0 5 //
dflet 0:400d8e75a8d0 6 // Copyright (C) 2014 Texas Instruments Incorporated - http://www.ti.com/
dflet 0:400d8e75a8d0 7 //
dflet 0:400d8e75a8d0 8 //
dflet 0:400d8e75a8d0 9 // Redistribution and use in source and binary forms, with or without
dflet 0:400d8e75a8d0 10 // modification, are permitted provided that the following conditions
dflet 0:400d8e75a8d0 11 // are met:
dflet 0:400d8e75a8d0 12 //
dflet 0:400d8e75a8d0 13 // Redistributions of source code must retain the above copyright
dflet 0:400d8e75a8d0 14 // notice, this list of conditions and the following disclaimer.
dflet 0:400d8e75a8d0 15 //
dflet 0:400d8e75a8d0 16 // Redistributions in binary form must reproduce the above copyright
dflet 0:400d8e75a8d0 17 // notice, this list of conditions and the following disclaimer in the
dflet 0:400d8e75a8d0 18 // documentation and/or other materials provided with the
dflet 0:400d8e75a8d0 19 // distribution.
dflet 0:400d8e75a8d0 20 //
dflet 0:400d8e75a8d0 21 // Neither the name of Texas Instruments Incorporated nor the names of
dflet 0:400d8e75a8d0 22 // its contributors may be used to endorse or promote products derived
dflet 0:400d8e75a8d0 23 // from this software without specific prior written permission.
dflet 0:400d8e75a8d0 24 //
dflet 0:400d8e75a8d0 25 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
dflet 0:400d8e75a8d0 26 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
dflet 0:400d8e75a8d0 27 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
dflet 0:400d8e75a8d0 28 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
dflet 0:400d8e75a8d0 29 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
dflet 0:400d8e75a8d0 30 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
dflet 0:400d8e75a8d0 31 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
dflet 0:400d8e75a8d0 32 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
dflet 0:400d8e75a8d0 33 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
dflet 0:400d8e75a8d0 34 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
dflet 0:400d8e75a8d0 35 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
dflet 0:400d8e75a8d0 36 //
dflet 0:400d8e75a8d0 37 //*****************************************************************************
dflet 0:400d8e75a8d0 38
dflet 0:400d8e75a8d0 39 //****************************************************************************
dflet 0:400d8e75a8d0 40 //
dflet 0:400d8e75a8d0 41 //! \addtogroup main
dflet 0:400d8e75a8d0 42 //! @{
dflet 0:400d8e75a8d0 43 //
dflet 0:400d8e75a8d0 44 //****************************************************************************
dflet 0:400d8e75a8d0 45
dflet 0:400d8e75a8d0 46 #include "mbed.h"
dflet 0:400d8e75a8d0 47
dflet 0:400d8e75a8d0 48 // SimpleLink include
dflet 0:400d8e75a8d0 49 #include "cc3100_simplelink.h"
dflet 0:400d8e75a8d0 50 #include "cc3100.h"
dflet 0:400d8e75a8d0 51
dflet 0:400d8e75a8d0 52 #include "httpserverapp.h"
dflet 0:400d8e75a8d0 53
dflet 0:400d8e75a8d0 54 /* Free-RTOS includes */
dflet 0:400d8e75a8d0 55 #include "osi.h"
dflet 0:400d8e75a8d0 56
dflet 0:400d8e75a8d0 57 #include "cli_uart.h"
dflet 0:400d8e75a8d0 58 #include "app_config.h"
dflet 0:400d8e75a8d0 59 #include "myBoardInit.h"
dflet 0:400d8e75a8d0 60 #include "camera_app.h"
dflet 0:400d8e75a8d0 61
dflet 0:400d8e75a8d0 62 using namespace mbed_cc3100;
dflet 0:400d8e75a8d0 63
dflet 0:400d8e75a8d0 64
dflet 0:400d8e75a8d0 65 /* Warning if pin changes are made below then the same changes have to be made in the following files.
dflet 0:400d8e75a8d0 66 * httpserverapp.cpp
dflet 0:400d8e75a8d0 67 * HttpCore.cpp
dflet 0:400d8e75a8d0 68 * HttpSocket.cpp
dflet 0:400d8e75a8d0 69 * HttpStatic.cpp
dflet 0:400d8e75a8d0 70 * fPtr_func.cpp
dflet 0:400d8e75a8d0 71 */
dflet 0:400d8e75a8d0 72
dflet 0:400d8e75a8d0 73 /* On board leds */
dflet 0:400d8e75a8d0 74 DigitalOut led1(LED1);
dflet 0:400d8e75a8d0 75 DigitalOut led2(LED2);
dflet 0:400d8e75a8d0 76
dflet 0:400d8e75a8d0 77 cc3100 _cc3100(NC, NC, p9, p10, p8, SPI(p5, p6, p7));//LPC1768 irq, nHib, cs, mosi, miso, sck
dflet 0:400d8e75a8d0 78 //ArduCAM myCAM(OV5642, p14, SPI(p11, p12, p13), I2C(p28, p27));
dflet 0:400d8e75a8d0 79
dflet 0:400d8e75a8d0 80 void initLEDs(void);
dflet 0:400d8e75a8d0 81 void toggleLed(int ind);
dflet 0:400d8e75a8d0 82 static void DisplayBanner(char * AppName);
dflet 0:400d8e75a8d0 83
dflet 0:400d8e75a8d0 84 #define PRINT_BUF_LEN 128
dflet 0:400d8e75a8d0 85 int8_t print_buf[PRINT_BUF_LEN];
dflet 0:400d8e75a8d0 86
dflet 0:400d8e75a8d0 87 //*****************************************************************************
dflet 0:400d8e75a8d0 88 // LOCAL DEFINES
dflet 0:400d8e75a8d0 89 //*****************************************************************************
dflet 0:400d8e75a8d0 90 #define APP_NAME "WebSocket"
dflet 0:400d8e75a8d0 91
dflet 0:400d8e75a8d0 92 void initLEDs(void){
dflet 0:400d8e75a8d0 93
dflet 0:400d8e75a8d0 94 led1 = 1;
dflet 0:400d8e75a8d0 95 led2 = 1;
dflet 0:400d8e75a8d0 96
dflet 0:400d8e75a8d0 97 }
dflet 0:400d8e75a8d0 98
dflet 0:400d8e75a8d0 99 void toggleLed(int ind){
dflet 0:400d8e75a8d0 100
dflet 0:400d8e75a8d0 101 if(ind == 1){
dflet 0:400d8e75a8d0 102 led1 = !led1;
dflet 0:400d8e75a8d0 103 }
dflet 0:400d8e75a8d0 104 if(ind == 2){
dflet 0:400d8e75a8d0 105 led2 = !led2;
dflet 0:400d8e75a8d0 106 }
dflet 0:400d8e75a8d0 107
dflet 0:400d8e75a8d0 108 }
dflet 0:400d8e75a8d0 109
dflet 0:400d8e75a8d0 110 //*****************************************************************************
dflet 0:400d8e75a8d0 111 //
dflet 0:400d8e75a8d0 112 //! Application startup display on UART
dflet 0:400d8e75a8d0 113 //!
dflet 0:400d8e75a8d0 114 //! \param none
dflet 0:400d8e75a8d0 115 //!
dflet 0:400d8e75a8d0 116 //! \return none
dflet 0:400d8e75a8d0 117 //!
dflet 0:400d8e75a8d0 118 //*****************************************************************************
dflet 0:400d8e75a8d0 119
dflet 0:400d8e75a8d0 120 //#ifndef NOTERM
dflet 0:400d8e75a8d0 121 static void
dflet 0:400d8e75a8d0 122 DisplayBanner(char * AppName)
dflet 0:400d8e75a8d0 123 {
dflet 0:400d8e75a8d0 124
dflet 0:400d8e75a8d0 125 Report("\n\n\n\r");
dflet 0:400d8e75a8d0 126 Report(" *************************************************\n\r");
dflet 0:400d8e75a8d0 127 Report(" CC3100 %s Application \n\r", AppName);
dflet 0:400d8e75a8d0 128 Report(" *************************************************\n\r");
dflet 0:400d8e75a8d0 129 Report("\n\n\n\r");
dflet 0:400d8e75a8d0 130 }
dflet 0:400d8e75a8d0 131 //#endif
dflet 0:400d8e75a8d0 132
dflet 0:400d8e75a8d0 133 //****************************************************************************
dflet 0:400d8e75a8d0 134 // MAIN FUNCTION
dflet 0:400d8e75a8d0 135 //****************************************************************************
dflet 0:400d8e75a8d0 136 int main(void) {
dflet 0:400d8e75a8d0 137
dflet 0:400d8e75a8d0 138 SCB->SHCSR |= 0x00070000;
dflet 0:400d8e75a8d0 139 int rv = 0;
dflet 0:400d8e75a8d0 140
dflet 0:400d8e75a8d0 141 //
dflet 0:400d8e75a8d0 142 // Configuring UART
dflet 0:400d8e75a8d0 143 //
dflet 0:400d8e75a8d0 144 CLI_Configure();
dflet 0:400d8e75a8d0 145 initLEDs();
dflet 0:400d8e75a8d0 146
dflet 0:400d8e75a8d0 147 // toggleLed(1);
dflet 0:400d8e75a8d0 148 //#ifndef NOTERM
dflet 0:400d8e75a8d0 149
dflet 0:400d8e75a8d0 150 memset(print_buf, 0x00, PRINT_BUF_LEN);
dflet 0:400d8e75a8d0 151 sprintf((char*) print_buf, " \r\nSystemCoreClock = %dMHz\r\n ", SystemCoreClock /1000000);
dflet 0:400d8e75a8d0 152 rv = Uart_Write((uint8_t *) print_buf);
dflet 0:400d8e75a8d0 153 if(rv < 0){
dflet 0:400d8e75a8d0 154 while(1){
dflet 0:400d8e75a8d0 155 toggleLed(1);
dflet 0:400d8e75a8d0 156 wait(0.1);
dflet 0:400d8e75a8d0 157 }
dflet 0:400d8e75a8d0 158 }
dflet 0:400d8e75a8d0 159
dflet 0:400d8e75a8d0 160 //
dflet 0:400d8e75a8d0 161 // Display Application Banner
dflet 0:400d8e75a8d0 162 //
dflet 0:400d8e75a8d0 163 DisplayBanner(APP_NAME);
dflet 0:400d8e75a8d0 164
dflet 0:400d8e75a8d0 165 //#endif
dflet 0:400d8e75a8d0 166
dflet 0:400d8e75a8d0 167 //
dflet 0:400d8e75a8d0 168 // Start the SimpleLink Host
dflet 0:400d8e75a8d0 169 //
dflet 0:400d8e75a8d0 170 VStartSimpleLinkSpawnTask(SPAWN_TASK_PRIORITY);
dflet 0:400d8e75a8d0 171 //
dflet 0:400d8e75a8d0 172 // Start the HttpServer Task
dflet 0:400d8e75a8d0 173 //
dflet 0:400d8e75a8d0 174 //
dflet 0:400d8e75a8d0 175
dflet 0:400d8e75a8d0 176 osi_TaskCreate(HttpServerAppTask,
dflet 0:400d8e75a8d0 177 "WebSocketApp",
dflet 0:400d8e75a8d0 178 OSI_STACK_SIZE,
dflet 0:400d8e75a8d0 179 NULL,
dflet 0:400d8e75a8d0 180 HTTP_SERVER_APP_TASK_PRIORITY,
dflet 0:400d8e75a8d0 181 NULL );
dflet 0:400d8e75a8d0 182
dflet 0:400d8e75a8d0 183 Uart_Write((uint8_t*)"HttpServerApp Initialized \n\r");
dflet 0:400d8e75a8d0 184
dflet 0:400d8e75a8d0 185 //
dflet 0:400d8e75a8d0 186 // Start the task scheduler
dflet 0:400d8e75a8d0 187 //
dflet 0:400d8e75a8d0 188 osi_start();
dflet 0:400d8e75a8d0 189
dflet 0:400d8e75a8d0 190 return 0;
dflet 0:400d8e75a8d0 191 }
dflet 0:400d8e75a8d0 192
dflet 0:400d8e75a8d0 193 /**
dflet 0:400d8e75a8d0 194 * @brief This function handles Hard Fault exception.
dflet 0:400d8e75a8d0 195 * @param None
dflet 0:400d8e75a8d0 196 * @retval None
dflet 0:400d8e75a8d0 197 */
dflet 0:400d8e75a8d0 198 extern "C" void HardFault_Handler(void)
dflet 0:400d8e75a8d0 199 {
dflet 0:400d8e75a8d0 200 /* Go to infinite loop when Hard Fault exception occurs */
dflet 0:400d8e75a8d0 201 Uart_Write((uint8_t*)"\n\rHardFault_Handler \n\r");
dflet 0:400d8e75a8d0 202 printf("Hard Fault Register SCB->HSFR 0x%X \r\n",SCB->HFSR);
dflet 0:400d8e75a8d0 203 printf("Fault bits set SCB->CFSR 0x%X \r\n",SCB->CFSR);
dflet 0:400d8e75a8d0 204 printf("Call to Memory Address SCB->BFAR 0x%X ERROR!\r\n",SCB->BFAR);
dflet 0:400d8e75a8d0 205 printf("Call to Memory Address SCB->MMFAR 0x%X ERROR!\r\n",SCB->MMFAR);
dflet 0:400d8e75a8d0 206 Uart_Write((uint8_t*)"HardFault_Handler \n\r");
dflet 0:400d8e75a8d0 207 while (1)
dflet 0:400d8e75a8d0 208 {
dflet 0:400d8e75a8d0 209 }
dflet 0:400d8e75a8d0 210 }
dflet 0:400d8e75a8d0 211
dflet 0:400d8e75a8d0 212 /**
dflet 0:400d8e75a8d0 213 * @brief This function handles Memory Manage exception.
dflet 0:400d8e75a8d0 214 * @param None
dflet 0:400d8e75a8d0 215 * @retval None
dflet 0:400d8e75a8d0 216 */
dflet 0:400d8e75a8d0 217 extern "C" void MemManage_Handler(void)
dflet 0:400d8e75a8d0 218 {
dflet 0:400d8e75a8d0 219 Uart_Write((uint8_t*)"\n\rMemManage_Handler \n\r");
dflet 0:400d8e75a8d0 220 printf("Fault bits set SCB->CFSR 0x%X \r\n",SCB->CFSR);
dflet 0:400d8e75a8d0 221 printf("Call to Memory Address SCB->BFAR 0x%X ERROR!\r\n",SCB->BFAR);
dflet 0:400d8e75a8d0 222 printf("Call to Memory Address SCB->MMFAR 0x%X ERROR!\r\n",SCB->MMFAR);
dflet 0:400d8e75a8d0 223 Uart_Write((uint8_t*)"MemManage_Handler \n\r");
dflet 0:400d8e75a8d0 224 /* Go to infinite loop when Memory Manage exception occurs */
dflet 0:400d8e75a8d0 225 while (1)
dflet 0:400d8e75a8d0 226 {
dflet 0:400d8e75a8d0 227 }
dflet 0:400d8e75a8d0 228 }
dflet 0:400d8e75a8d0 229
dflet 0:400d8e75a8d0 230 /**
dflet 0:400d8e75a8d0 231 * @brief This function handles Bus Fault exception.
dflet 0:400d8e75a8d0 232 * @param None
dflet 0:400d8e75a8d0 233 * @retval None
dflet 0:400d8e75a8d0 234 */
dflet 0:400d8e75a8d0 235 extern "C" void BusFault_Handler(void)
dflet 0:400d8e75a8d0 236 {
dflet 0:400d8e75a8d0 237 Uart_Write((uint8_t*)"\n\rBusFault_Handler \n\r");
dflet 0:400d8e75a8d0 238 printf("Fault bits set SCB->CFSR 0x%X \r\n",SCB->CFSR);
dflet 0:400d8e75a8d0 239 printf("Call to Memory Address SCB->BFAR 0x%X ERROR!\r\n",SCB->BFAR);
dflet 0:400d8e75a8d0 240 printf("Call to Memory Address SCB->MMFAR 0x%X ERROR!\r\n",SCB->MMFAR);
dflet 0:400d8e75a8d0 241 Uart_Write((uint8_t*)"BusFault_Handler \n\r");
dflet 0:400d8e75a8d0 242 /* Go to infinite loop when Bus Fault exception occurs */
dflet 0:400d8e75a8d0 243 while (1)
dflet 0:400d8e75a8d0 244 {
dflet 0:400d8e75a8d0 245 }
dflet 0:400d8e75a8d0 246 }
dflet 0:400d8e75a8d0 247
dflet 0:400d8e75a8d0 248 /**
dflet 0:400d8e75a8d0 249 * @brief This function handles Usage Fault exception.
dflet 0:400d8e75a8d0 250 * @param None
dflet 0:400d8e75a8d0 251 * @retval None
dflet 0:400d8e75a8d0 252 */
dflet 0:400d8e75a8d0 253 extern "C" void UsageFault_Handler(void)
dflet 0:400d8e75a8d0 254 {
dflet 0:400d8e75a8d0 255 Uart_Write((uint8_t*)"UsageFault_Handler \n\r");
dflet 0:400d8e75a8d0 256 /* Go to infinite loop when Usage Fault exception occurs */
dflet 0:400d8e75a8d0 257 while (1)
dflet 0:400d8e75a8d0 258 {
dflet 0:400d8e75a8d0 259 }
dflet 0:400d8e75a8d0 260 }
dflet 0:400d8e75a8d0 261
dflet 0:400d8e75a8d0 262 /**
dflet 0:400d8e75a8d0 263 * @brief This function handles SVCall exception.
dflet 0:400d8e75a8d0 264 * @param None
dflet 0:400d8e75a8d0 265 * @retval None
dflet 0:400d8e75a8d0 266 */
dflet 0:400d8e75a8d0 267 /*
dflet 0:400d8e75a8d0 268 extern "C" void SVC_Handler(void)
dflet 0:400d8e75a8d0 269 {
dflet 0:400d8e75a8d0 270 Uart_Write((uint8_t*)"SVC_Handler \n\r");
dflet 0:400d8e75a8d0 271 }
dflet 0:400d8e75a8d0 272 */
dflet 0:400d8e75a8d0 273 /**
dflet 0:400d8e75a8d0 274 * @brief This function handles Debug Monitor exception.
dflet 0:400d8e75a8d0 275 * @param None
dflet 0:400d8e75a8d0 276 * @retval None
dflet 0:400d8e75a8d0 277 */
dflet 0:400d8e75a8d0 278 extern "C" void DebugMon_Handler(void)
dflet 0:400d8e75a8d0 279 {
dflet 0:400d8e75a8d0 280 Uart_Write((uint8_t*)"DebugMon_Handler \n\r");
dflet 0:400d8e75a8d0 281 }
dflet 0:400d8e75a8d0 282
dflet 0:400d8e75a8d0 283 /**
dflet 0:400d8e75a8d0 284 * @brief This function handles PendSVC exception.
dflet 0:400d8e75a8d0 285 * @param None
dflet 0:400d8e75a8d0 286 * @retval None
dflet 0:400d8e75a8d0 287 */
dflet 0:400d8e75a8d0 288 /*
dflet 0:400d8e75a8d0 289 extern "C" void PendSV_Handler(void)
dflet 0:400d8e75a8d0 290 {
dflet 0:400d8e75a8d0 291 Uart_Write((uint8_t*)"PendSV_Handler \n\r");
dflet 0:400d8e75a8d0 292 }
dflet 0:400d8e75a8d0 293 */
dflet 0:400d8e75a8d0 294
dflet 0:400d8e75a8d0 295 //*****************************************************************************
dflet 0:400d8e75a8d0 296 //
dflet 0:400d8e75a8d0 297 // Close the Doxygen group.
dflet 0:400d8e75a8d0 298 //! @}
dflet 0:400d8e75a8d0 299 //
dflet 0:400d8e75a8d0 300 //*****************************************************************************
dflet 0:400d8e75a8d0 301
dflet 0:400d8e75a8d0 302
dflet 0:400d8e75a8d0 303