David Fletcher / Mbed 2 deprecated cc3100_Test_websock_Camera_CM4F

Dependencies:   mbed

Committer:
dflet
Date:
Fri Aug 28 21:04:44 2015 +0000
Revision:
15:5433f9d94cd7
Parent:
14:90603ea1e85b
Child:
16:7e5aab2fabba
Cam ov2640 working correctly, didnt know it also gave a jpeg header. App still not stable. Still a lot of work needed.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dflet 0:50cedd586816 1 //*****************************************************************************
dflet 0:50cedd586816 2 // httpserver_app.c
dflet 0:50cedd586816 3 //
dflet 0:50cedd586816 4 // camera application macro & APIs
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 //! \addtogroup Httpserverapp
dflet 0:50cedd586816 41 //! @{
dflet 0:50cedd586816 42 //
dflet 0:50cedd586816 43 //*****************************************************************************
dflet 0:50cedd586816 44
dflet 0:50cedd586816 45 #include <string.h>
dflet 0:50cedd586816 46 #include <stdlib.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_sl_common.h"
dflet 0:50cedd586816 51
dflet 0:50cedd586816 52 // Free-RTOS/TI-RTOS include
dflet 15:5433f9d94cd7 53 #include "FreeRTOS.h"
dflet 0:50cedd586816 54 #include "osi.h"
dflet 15:5433f9d94cd7 55 #include "semphr.h"
dflet 0:50cedd586816 56
dflet 0:50cedd586816 57 // HTTP lib includes
dflet 0:50cedd586816 58 #include "HttpCore.h"
dflet 0:50cedd586816 59 #include "HttpRequest.h"
dflet 0:50cedd586816 60
dflet 0:50cedd586816 61 #include "websocketapp.h"
dflet 0:50cedd586816 62 #include "httpserverapp.h"
dflet 0:50cedd586816 63 #include "camera_app.h"
dflet 0:50cedd586816 64 #include "i2cconfig.h"
dflet 0:50cedd586816 65 #include "mt9d111.h"
dflet 0:50cedd586816 66 #include "cli_uart.h"
dflet 0:50cedd586816 67 #include "app_config.h"
dflet 0:50cedd586816 68 #include "myBoardInit.h"
dflet 5:75fcfdb7cae7 69 #include "HttpDebug.h"
dflet 0:50cedd586816 70
dflet 0:50cedd586816 71 using namespace mbed_cc3100;
dflet 0:50cedd586816 72
dflet 0:50cedd586816 73 cc3100 _cc3100_Mod(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 74
dflet 0:50cedd586816 75 /****************************************************************************/
dflet 0:50cedd586816 76 /* MACROS */
dflet 0:50cedd586816 77 /****************************************************************************/
dflet 0:50cedd586816 78
dflet 0:50cedd586816 79
dflet 0:50cedd586816 80 /****************************************************************************
dflet 0:50cedd586816 81 Global variables
dflet 0:50cedd586816 82 ****************************************************************************/
dflet 0:50cedd586816 83 char *g_Buffer;
dflet 0:50cedd586816 84 UINT8 g_success = 0;
dflet 0:50cedd586816 85 int g_close = 0;
dflet 0:50cedd586816 86 UINT16 g_uConnection;
dflet 0:50cedd586816 87 OsiTaskHandle g_iCameraTaskHdl = 0;
dflet 0:50cedd586816 88
dflet 15:5433f9d94cd7 89 SemaphoreHandle_t xSemaphore = NULL;
dflet 15:5433f9d94cd7 90 void createMutex()
dflet 15:5433f9d94cd7 91 {
dflet 15:5433f9d94cd7 92
dflet 15:5433f9d94cd7 93 xSemaphore = xSemaphoreCreateMutex();
dflet 15:5433f9d94cd7 94 }
dflet 15:5433f9d94cd7 95
dflet 0:50cedd586816 96
dflet 0:50cedd586816 97 void WebSocketCloseSessionHandler()
dflet 0:50cedd586816 98 {
dflet 0:50cedd586816 99 g_close = 1;
dflet 0:50cedd586816 100 }
dflet 0:50cedd586816 101
dflet 0:50cedd586816 102 void CameraAppTask(void *param)
dflet 0:50cedd586816 103 {
dflet 0:50cedd586816 104 UINT8 Opcode = 0x02;
dflet 0:50cedd586816 105 struct HttpBlob Write;
dflet 6:37fb696395d7 106 #ifdef ENABLE_JPEG
dflet 0:50cedd586816 107 InitCameraComponents(640, 480);
dflet 14:90603ea1e85b 108 // InitCameraComponents(320, 240);
dflet 6:37fb696395d7 109 #else
dflet 6:37fb696395d7 110 InitCameraComponents(240, 256);
dflet 6:37fb696395d7 111 #endif
dflet 6:37fb696395d7 112
dflet 0:50cedd586816 113 while(1)
dflet 0:50cedd586816 114 {
dflet 0:50cedd586816 115 if(g_close == 0)
dflet 0:50cedd586816 116 {
dflet 0:50cedd586816 117 Write.uLength = StartCamera((char **)&Write.pData);
dflet 12:7d75ba5deed1 118 HttpDebug("Data Len = 0x%x \n\r",Write.uLength);
dflet 0:50cedd586816 119 if(!sl_WebSocketSend(g_uConnection, Write, Opcode))
dflet 0:50cedd586816 120 {
dflet 6:37fb696395d7 121 Uart_Write((uint8_t*)"sl_WebSocketSend failed.\n\r");
dflet 0:50cedd586816 122 while(1);
dflet 0:50cedd586816 123 }
dflet 0:50cedd586816 124 }
dflet 0:50cedd586816 125 }
dflet 0:50cedd586816 126
dflet 0:50cedd586816 127 }
dflet 0:50cedd586816 128
dflet 0:50cedd586816 129
dflet 0:50cedd586816 130 /*!
dflet 0:50cedd586816 131 * \brief This websocket Event is called when WebSocket Server receives data
dflet 0:50cedd586816 132 * from client.
dflet 0:50cedd586816 133 *
dflet 0:50cedd586816 134 *
dflet 0:50cedd586816 135 * \param[in] uConnection Websocket Client Id
dflet 0:50cedd586816 136 * \param[in] *ReadBuffer Pointer to the buffer that holds the payload.
dflet 0:50cedd586816 137 *
dflet 0:50cedd586816 138 * \return none.
dflet 0:50cedd586816 139 *
dflet 0:50cedd586816 140 */
dflet 0:50cedd586816 141 void WebSocketRecvEventHandler(UINT16 uConnection, char *ReadBuffer)
dflet 0:50cedd586816 142 {
dflet 0:50cedd586816 143 char *camera = "capture";
dflet 0:50cedd586816 144
dflet 0:50cedd586816 145 /*
dflet 0:50cedd586816 146 * UINT8 Opcode;
dflet 0:50cedd586816 147 * struct HttpBlob Write;
dflet 0:50cedd586816 148 */
dflet 0:50cedd586816 149
dflet 0:50cedd586816 150 g_uConnection = uConnection;
dflet 0:50cedd586816 151
dflet 0:50cedd586816 152 g_Buffer = ReadBuffer;
dflet 0:50cedd586816 153 g_close = 0;
dflet 0:50cedd586816 154 if (!strcmp(ReadBuffer,camera))
dflet 0:50cedd586816 155 {
dflet 0:50cedd586816 156 if(!g_iCameraTaskHdl)
dflet 0:50cedd586816 157 {
dflet 0:50cedd586816 158 osi_TaskCreate(CameraAppTask,
dflet 0:50cedd586816 159 "CameraApp",
dflet 0:50cedd586816 160 1024,
dflet 0:50cedd586816 161 NULL,
dflet 0:50cedd586816 162 CAMERA_SERVICE_PRIORITY,
dflet 0:50cedd586816 163 &g_iCameraTaskHdl);
dflet 0:50cedd586816 164 }
dflet 0:50cedd586816 165
dflet 0:50cedd586816 166 }
dflet 0:50cedd586816 167 //Free memory as we are not using anywhere later
dflet 0:50cedd586816 168 free(g_Buffer);
dflet 0:50cedd586816 169 g_Buffer = NULL;
dflet 0:50cedd586816 170 /* Enter websocket application code here */
dflet 0:50cedd586816 171 return;
dflet 0:50cedd586816 172 }
dflet 0:50cedd586816 173
dflet 0:50cedd586816 174
dflet 0:50cedd586816 175 /*!
dflet 0:50cedd586816 176 * \brief This websocket Event indicates successful handshake with client
dflet 0:50cedd586816 177 * Once this is called the server can start sending data packets over websocket using
dflet 0:50cedd586816 178 * the sl_WebSocketSend API.
dflet 0:50cedd586816 179 *
dflet 0:50cedd586816 180 *
dflet 0:50cedd586816 181 * \param[in] uConnection Websocket Client Id
dflet 0:50cedd586816 182 *
dflet 0:50cedd586816 183 * \return none
dflet 0:50cedd586816 184 */
dflet 0:50cedd586816 185 void WebSocketHandshakeEventHandler(UINT16 uConnection)
dflet 0:50cedd586816 186 {
dflet 0:50cedd586816 187 g_success = 1;
dflet 0:50cedd586816 188 g_uConnection = uConnection;
dflet 0:50cedd586816 189 }
dflet 0:50cedd586816 190
dflet 0:50cedd586816 191
dflet 0:50cedd586816 192 //****************************************************************************
dflet 0:50cedd586816 193 //
dflet 0:50cedd586816 194 //! Task function start the device and crete a TCP server showcasing the smart
dflet 0:50cedd586816 195 //! plug
dflet 0:50cedd586816 196 //!
dflet 0:50cedd586816 197 //****************************************************************************
dflet 0:50cedd586816 198
dflet 0:50cedd586816 199
dflet 0:50cedd586816 200 void HttpServerAppTask(void * param)
dflet 0:50cedd586816 201 {
dflet 0:50cedd586816 202 int32_t lRetVal = -1;
dflet 0:50cedd586816 203
dflet 0:50cedd586816 204 //Start SimpleLink in AP Mode
dflet 15:5433f9d94cd7 205 lRetVal = _cc3100_Mod.Network_AP_InitDriver();
dflet 15:5433f9d94cd7 206 // lRetVal = _cc3100_Mod.Network_IF_InitDriver(ROLE_AP);
dflet 0:50cedd586816 207 if(lRetVal < 0)
dflet 0:50cedd586816 208 {
dflet 0:50cedd586816 209 Uart_Write((uint8_t*)"Start SimpleLink in AP Mode Failed \n\r");
dflet 0:50cedd586816 210 LOOP_FOREVER();
dflet 0:50cedd586816 211 }
dflet 15:5433f9d94cd7 212 osi_Sleep(2);
dflet 0:50cedd586816 213 //Stop Internal HTTP Server
dflet 0:50cedd586816 214 lRetVal = _cc3100_Mod._netapp.sl_NetAppStop(SL_NET_APP_HTTP_SERVER_ID);
dflet 0:50cedd586816 215 if(lRetVal < 0)
dflet 0:50cedd586816 216 {
dflet 0:50cedd586816 217 Uart_Write((uint8_t*)"Stop Internal HTTP Server Failed \n\r");
dflet 0:50cedd586816 218 LOOP_FOREVER();
dflet 0:50cedd586816 219 }
dflet 0:50cedd586816 220 Uart_Write((uint8_t*)"HttpServerAppTask \n\r");
dflet 0:50cedd586816 221 //Run APPS HTTP Server
dflet 0:50cedd586816 222 HttpServerInitAndRun(NULL);
dflet 11:404bd8bb7fa6 223
dflet 11:404bd8bb7fa6 224 Uart_Write((uint8_t*)"HttpServerAppTask has returned for some reason\n\r");
dflet 0:50cedd586816 225 LOOP_FOREVER();
dflet 0:50cedd586816 226
dflet 0:50cedd586816 227 }
dflet 0:50cedd586816 228
dflet 0:50cedd586816 229 //*****************************************************************************
dflet 0:50cedd586816 230 //
dflet 0:50cedd586816 231 // Close the Doxygen group.
dflet 0:50cedd586816 232 //! @}
dflet 0:50cedd586816 233 //
dflet 0:50cedd586816 234 //*****************************************************************************
dflet 0:50cedd586816 235