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:
Fri Jun 26 16:49:04 2015 +0000
Revision:
2:b92db44a29b4
Parent:
1:1a80c1529aa3
Child:
3:7643714ec664
WIP commit 2

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 0:50cedd586816 54 #include "stm32f4xx_hal.h"
dflet 0:50cedd586816 55 #include "stm32f4xx_hal_rcc.h"
dflet 0:50cedd586816 56
dflet 0:50cedd586816 57 /* Free-RTOS includes */
dflet 0:50cedd586816 58 #include "osi.h"
dflet 0:50cedd586816 59
dflet 0:50cedd586816 60 #include "cli_uart.h"
dflet 0:50cedd586816 61 #include "app_config.h"
dflet 0:50cedd586816 62 #include "myBoardInit.h"
dflet 0:50cedd586816 63
dflet 0:50cedd586816 64 using namespace mbed_cc3100;
dflet 0:50cedd586816 65
dflet 0:50cedd586816 66 static void SystemClock_Config(void);
dflet 0:50cedd586816 67 static void MX_DMA_Init(void);
dflet 0:50cedd586816 68 static void MX_DCMI_Init(void);
dflet 0:50cedd586816 69
dflet 0:50cedd586816 70 /**
dflet 0:50cedd586816 71 * Initializes the Global MSP.
dflet 0:50cedd586816 72 */
dflet 0:50cedd586816 73 //void HAL_MspInit(void)
dflet 0:50cedd586816 74 //{
dflet 0:50cedd586816 75 /* USER CODE BEGIN MspInit 0 */
dflet 0:50cedd586816 76
dflet 0:50cedd586816 77 /* USER CODE END MspInit 0 */
dflet 0:50cedd586816 78
dflet 0:50cedd586816 79 // HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);
dflet 0:50cedd586816 80
dflet 0:50cedd586816 81 /* System interrupt init*/
dflet 0:50cedd586816 82 /* SysTick_IRQn interrupt configuration */
dflet 0:50cedd586816 83 // HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
dflet 0:50cedd586816 84
dflet 0:50cedd586816 85 /* USER CODE BEGIN MspInit 1 */
dflet 0:50cedd586816 86
dflet 0:50cedd586816 87 /* USER CODE END MspInit 1 */
dflet 0:50cedd586816 88 //}
dflet 0:50cedd586816 89
dflet 0:50cedd586816 90 DCMI_HandleTypeDef hdcmi;
dflet 0:50cedd586816 91 DMA_HandleTypeDef hdma_dcmi;
dflet 0:50cedd586816 92
dflet 0:50cedd586816 93 /** System Clock Configuration
dflet 0:50cedd586816 94 */
dflet 0:50cedd586816 95 static void SystemClock_Config(void)
dflet 0:50cedd586816 96 {
dflet 0:50cedd586816 97
dflet 0:50cedd586816 98 RCC_OscInitTypeDef RCC_OscInitStruct;
dflet 0:50cedd586816 99 RCC_ClkInitTypeDef RCC_ClkInitStruct;
dflet 0:50cedd586816 100
dflet 0:50cedd586816 101 __PWR_CLK_ENABLE();
dflet 0:50cedd586816 102
dflet 0:50cedd586816 103 __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
dflet 0:50cedd586816 104
dflet 0:50cedd586816 105 RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
dflet 0:50cedd586816 106 RCC_OscInitStruct.HSEState = RCC_HSE_ON;
dflet 0:50cedd586816 107 RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
dflet 0:50cedd586816 108 RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
dflet 0:50cedd586816 109 RCC_OscInitStruct.PLL.PLLM = 8;
dflet 0:50cedd586816 110 RCC_OscInitStruct.PLL.PLLN = 336;
dflet 0:50cedd586816 111 RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
dflet 0:50cedd586816 112 RCC_OscInitStruct.PLL.PLLQ = 7;
dflet 0:50cedd586816 113 HAL_RCC_OscConfig(&RCC_OscInitStruct);
dflet 0:50cedd586816 114
dflet 0:50cedd586816 115 RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1
dflet 0:50cedd586816 116 |RCC_CLOCKTYPE_PCLK2;
dflet 0:50cedd586816 117 RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
dflet 0:50cedd586816 118 RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
dflet 0:50cedd586816 119 RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
dflet 0:50cedd586816 120 RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
dflet 0:50cedd586816 121 HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5);
dflet 0:50cedd586816 122
dflet 1:1a80c1529aa3 123 /* RCC_MCODIV_5 33.6MHz mco output on pin PC_9 (cam xclk) */
dflet 1:1a80c1529aa3 124 /* RCC_MCODIV_4 42MHz mco output on pin PC_9 (cam xclk) */
dflet 1:1a80c1529aa3 125 /* RCC_MCODIV_3 56MHz mco output on pin PC_9 (cam xclk) */
dflet 2:b92db44a29b4 126 HAL_RCC_MCOConfig(RCC_MCO2, RCC_MCO2SOURCE_SYSCLK, RCC_MCODIV_5);
dflet 0:50cedd586816 127
dflet 0:50cedd586816 128 HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);
dflet 0:50cedd586816 129
dflet 0:50cedd586816 130
dflet 0:50cedd586816 131
dflet 0:50cedd586816 132 }
dflet 0:50cedd586816 133
dflet 0:50cedd586816 134 void MX_DCMI_Init()
dflet 0:50cedd586816 135 {
dflet 0:50cedd586816 136
dflet 0:50cedd586816 137 hdcmi.Instance = DCMI;
dflet 0:50cedd586816 138 hdcmi.Init.SynchroMode = DCMI_SYNCHRO_HARDWARE;
dflet 0:50cedd586816 139 hdcmi.Init.PCKPolarity = DCMI_PCKPOLARITY_FALLING;
dflet 0:50cedd586816 140 hdcmi.Init.VSPolarity = DCMI_VSPOLARITY_LOW;
dflet 0:50cedd586816 141 hdcmi.Init.HSPolarity = DCMI_HSPOLARITY_LOW;
dflet 0:50cedd586816 142 hdcmi.Init.CaptureRate = DCMI_CR_ALL_FRAME;
dflet 0:50cedd586816 143 hdcmi.Init.ExtendedDataMode = DCMI_EXTEND_DATA_8B;
dflet 0:50cedd586816 144 #ifdef ENABLE_JPEG
dflet 0:50cedd586816 145 hdcmi.Init.JPEGMode = DCMI_JPEG_ENABLE;
dflet 0:50cedd586816 146 #else
dflet 0:50cedd586816 147 hdcmi.Init.JPEGMode = DCMI_JPEG_DISABLE;
dflet 0:50cedd586816 148 #endif
dflet 0:50cedd586816 149 HAL_DCMI_Init(&hdcmi);
dflet 0:50cedd586816 150
dflet 0:50cedd586816 151 }
dflet 0:50cedd586816 152
dflet 0:50cedd586816 153 /**
dflet 0:50cedd586816 154 * Enable DMA controller clock
dflet 0:50cedd586816 155 */
dflet 0:50cedd586816 156 void MX_DMA_Init(void)
dflet 0:50cedd586816 157 {
dflet 0:50cedd586816 158 /* DMA controller clock enable */
dflet 0:50cedd586816 159 __DMA2_CLK_ENABLE();
dflet 0:50cedd586816 160
dflet 0:50cedd586816 161 /* DMA interrupt init */
dflet 0:50cedd586816 162 HAL_NVIC_SetPriority(DMA2_Stream1_IRQn, 0, 0);
dflet 0:50cedd586816 163 HAL_NVIC_EnableIRQ(DMA2_Stream1_IRQn);
dflet 0:50cedd586816 164
dflet 0:50cedd586816 165 }
dflet 0:50cedd586816 166
dflet 1:1a80c1529aa3 167 /* Warning if pin changes are made below then the same changes have to be made in the following files.
dflet 0:50cedd586816 168 * httpserverapp.cpp
dflet 0:50cedd586816 169 * HttpCore.cpp
dflet 0:50cedd586816 170 * HttpSocket.cpp
dflet 0:50cedd586816 171 * HttpStatic.cpp
dflet 0:50cedd586816 172 * fPtr_func.cpp
dflet 0:50cedd586816 173 */
dflet 0:50cedd586816 174
dflet 0:50cedd586816 175 /* Off board leds */
dflet 0:50cedd586816 176 DigitalOut led1(PB_15);
dflet 0:50cedd586816 177 DigitalOut led2(PB_14);
dflet 0:50cedd586816 178 //cc3100 _cc3100(NC, NC, PE_5, PE_4, PE_6, SPI(PB_5, PB_4, PB_3));//Seeed_Arch_Max irq, nHib, cs, mosi, miso, sck
dflet 0:50cedd586816 179 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 180
dflet 0:50cedd586816 181 void initLEDs(void);
dflet 0:50cedd586816 182 void toggleLed(int ind);
dflet 0:50cedd586816 183 static void DisplayBanner(char * AppName);
dflet 0:50cedd586816 184
dflet 0:50cedd586816 185 #define PRINT_BUF_LEN 128
dflet 0:50cedd586816 186 int8_t print_buf[PRINT_BUF_LEN];
dflet 0:50cedd586816 187
dflet 0:50cedd586816 188 //*****************************************************************************
dflet 0:50cedd586816 189 // LOCAL DEFINES
dflet 0:50cedd586816 190 //*****************************************************************************
dflet 0:50cedd586816 191 #define APP_NAME "WebSocket"
dflet 0:50cedd586816 192
dflet 0:50cedd586816 193 void initLEDs(void){
dflet 0:50cedd586816 194
dflet 0:50cedd586816 195 #if (THIS_BOARD == Seeed_Arch_Max)
dflet 0:50cedd586816 196 led1 = 0;
dflet 0:50cedd586816 197 led2 = 0;
dflet 0:50cedd586816 198 #endif
dflet 0:50cedd586816 199
dflet 0:50cedd586816 200 }
dflet 0:50cedd586816 201
dflet 0:50cedd586816 202 void toggleLed(int ind){
dflet 0:50cedd586816 203
dflet 0:50cedd586816 204 if(ind == 1){
dflet 0:50cedd586816 205 led1 = !led1;
dflet 0:50cedd586816 206 }
dflet 0:50cedd586816 207 if(ind == 2){
dflet 0:50cedd586816 208 led2 = !led2;
dflet 0:50cedd586816 209 }
dflet 0:50cedd586816 210
dflet 0:50cedd586816 211 }
dflet 0:50cedd586816 212
dflet 0:50cedd586816 213 //*****************************************************************************
dflet 0:50cedd586816 214 //
dflet 0:50cedd586816 215 //! Application startup display on UART
dflet 0:50cedd586816 216 //!
dflet 0:50cedd586816 217 //! \param none
dflet 0:50cedd586816 218 //!
dflet 0:50cedd586816 219 //! \return none
dflet 0:50cedd586816 220 //!
dflet 0:50cedd586816 221 //*****************************************************************************
dflet 0:50cedd586816 222
dflet 0:50cedd586816 223 //#ifndef NOTERM
dflet 0:50cedd586816 224 static void
dflet 0:50cedd586816 225 DisplayBanner(char * AppName)
dflet 0:50cedd586816 226 {
dflet 0:50cedd586816 227
dflet 0:50cedd586816 228 Report("\n\n\n\r");
dflet 0:50cedd586816 229 Report(" *************************************************\n\r");
dflet 0:50cedd586816 230 Report(" CC3100 %s Application \n\r", AppName);
dflet 0:50cedd586816 231 Report(" *************************************************\n\r");
dflet 0:50cedd586816 232 Report("\n\n\n\r");
dflet 0:50cedd586816 233 }
dflet 0:50cedd586816 234 //#endif
dflet 0:50cedd586816 235
dflet 0:50cedd586816 236 //****************************************************************************
dflet 0:50cedd586816 237 // MAIN FUNCTION
dflet 0:50cedd586816 238 //****************************************************************************
dflet 0:50cedd586816 239 int main(void) {
dflet 0:50cedd586816 240
dflet 0:50cedd586816 241 int rv = 0;
dflet 0:50cedd586816 242 SystemClock_Config();
dflet 0:50cedd586816 243 //
dflet 0:50cedd586816 244 // Configuring UART
dflet 0:50cedd586816 245 //
dflet 0:50cedd586816 246 CLI_Configure();
dflet 0:50cedd586816 247
dflet 0:50cedd586816 248 /* Initialize all configured peripherals */
dflet 0:50cedd586816 249 MX_DMA_Init();
dflet 0:50cedd586816 250 MX_DCMI_Init();
dflet 0:50cedd586816 251 initLEDs();
dflet 0:50cedd586816 252
dflet 0:50cedd586816 253 toggleLed(1);
dflet 0:50cedd586816 254 //#ifndef NOTERM
dflet 0:50cedd586816 255
dflet 0:50cedd586816 256 //
dflet 0:50cedd586816 257 // Configuring UART
dflet 0:50cedd586816 258 //
dflet 0:50cedd586816 259 // CLI_Configure();
dflet 0:50cedd586816 260
dflet 0:50cedd586816 261 memset(print_buf, 0x00, PRINT_BUF_LEN);
dflet 0:50cedd586816 262 sprintf((char*) print_buf, " \r\nSystemCoreClock = %dMHz\r\n ", SystemCoreClock /1000000);
dflet 0:50cedd586816 263 rv = Uart_Write((uint8_t *) print_buf);
dflet 0:50cedd586816 264 if(rv < 0){
dflet 0:50cedd586816 265 while(1){
dflet 0:50cedd586816 266 toggleLed(1);
dflet 0:50cedd586816 267 wait(0.1);
dflet 0:50cedd586816 268 }
dflet 0:50cedd586816 269 }
dflet 0:50cedd586816 270
dflet 0:50cedd586816 271 //
dflet 0:50cedd586816 272 // Display Application Banner
dflet 0:50cedd586816 273 //
dflet 0:50cedd586816 274 DisplayBanner(APP_NAME);
dflet 0:50cedd586816 275
dflet 0:50cedd586816 276 //#endif
dflet 0:50cedd586816 277
dflet 0:50cedd586816 278 //
dflet 0:50cedd586816 279 // Start the SimpleLink Host
dflet 0:50cedd586816 280 //
dflet 0:50cedd586816 281 VStartSimpleLinkSpawnTask(SPAWN_TASK_PRIORITY);
dflet 0:50cedd586816 282 //
dflet 0:50cedd586816 283 // Start the HttpServer Task
dflet 0:50cedd586816 284 //
dflet 0:50cedd586816 285 //
dflet 0:50cedd586816 286
dflet 0:50cedd586816 287 osi_TaskCreate(HttpServerAppTask,
dflet 0:50cedd586816 288 "WebSocketApp",
dflet 0:50cedd586816 289 OSI_STACK_SIZE,
dflet 0:50cedd586816 290 NULL,
dflet 0:50cedd586816 291 HTTP_SERVER_APP_TASK_PRIORITY,
dflet 0:50cedd586816 292 NULL );
dflet 0:50cedd586816 293
dflet 0:50cedd586816 294 Uart_Write((uint8_t*)"HttpServerApp Initialized \n\r");
dflet 0:50cedd586816 295
dflet 0:50cedd586816 296 //
dflet 0:50cedd586816 297 // Start the task scheduler
dflet 0:50cedd586816 298 //
dflet 0:50cedd586816 299 osi_start();
dflet 0:50cedd586816 300
dflet 0:50cedd586816 301 return 0;
dflet 0:50cedd586816 302 }
dflet 0:50cedd586816 303
dflet 0:50cedd586816 304 //*****************************************************************************
dflet 0:50cedd586816 305 //
dflet 0:50cedd586816 306 // Close the Doxygen group.
dflet 0:50cedd586816 307 //! @}
dflet 0:50cedd586816 308 //
dflet 0:50cedd586816 309 //*****************************************************************************
dflet 0:50cedd586816 310