David Fletcher / Mbed 2 deprecated cc3100_Test_websock_Camera_CM4F

Dependencies:   mbed

Committer:
dflet
Date:
Thu Sep 03 20:10:39 2015 +0000
Revision:
18:3f1b52616d00
Parent:
16:7e5aab2fabba
Child:
20:409ebd125b9c
Some debug removed still have some random  failures with SPI?? MT9D111 cam still not working.

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 16:7e5aab2fabba 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 0:50cedd586816 89 void WebSocketCloseSessionHandler()
dflet 0:50cedd586816 90 {
dflet 0:50cedd586816 91 g_close = 1;
dflet 0:50cedd586816 92 }
dflet 0:50cedd586816 93
dflet 0:50cedd586816 94 void CameraAppTask(void *param)
dflet 0:50cedd586816 95 {
dflet 0:50cedd586816 96 UINT8 Opcode = 0x02;
dflet 0:50cedd586816 97 struct HttpBlob Write;
dflet 6:37fb696395d7 98 #ifdef ENABLE_JPEG
dflet 18:3f1b52616d00 99 // InitCameraComponents(640, 480);
dflet 18:3f1b52616d00 100 InitCameraComponents(320, 240);
dflet 6:37fb696395d7 101 #else
dflet 6:37fb696395d7 102 InitCameraComponents(240, 256);
dflet 6:37fb696395d7 103 #endif
dflet 6:37fb696395d7 104
dflet 0:50cedd586816 105 while(1)
dflet 0:50cedd586816 106 {
dflet 0:50cedd586816 107 if(g_close == 0)
dflet 0:50cedd586816 108 {
dflet 0:50cedd586816 109 Write.uLength = StartCamera((char **)&Write.pData);
dflet 0:50cedd586816 110 if(!sl_WebSocketSend(g_uConnection, Write, Opcode))
dflet 0:50cedd586816 111 {
dflet 6:37fb696395d7 112 Uart_Write((uint8_t*)"sl_WebSocketSend failed.\n\r");
dflet 0:50cedd586816 113 while(1);
dflet 0:50cedd586816 114 }
dflet 0:50cedd586816 115 }
dflet 0:50cedd586816 116 }
dflet 0:50cedd586816 117
dflet 0:50cedd586816 118 }
dflet 0:50cedd586816 119
dflet 0:50cedd586816 120
dflet 0:50cedd586816 121 /*!
dflet 0:50cedd586816 122 * \brief This websocket Event is called when WebSocket Server receives data
dflet 0:50cedd586816 123 * from client.
dflet 0:50cedd586816 124 *
dflet 0:50cedd586816 125 *
dflet 0:50cedd586816 126 * \param[in] uConnection Websocket Client Id
dflet 0:50cedd586816 127 * \param[in] *ReadBuffer Pointer to the buffer that holds the payload.
dflet 0:50cedd586816 128 *
dflet 0:50cedd586816 129 * \return none.
dflet 0:50cedd586816 130 *
dflet 0:50cedd586816 131 */
dflet 0:50cedd586816 132 void WebSocketRecvEventHandler(UINT16 uConnection, char *ReadBuffer)
dflet 0:50cedd586816 133 {
dflet 0:50cedd586816 134 char *camera = "capture";
dflet 0:50cedd586816 135
dflet 0:50cedd586816 136 /*
dflet 0:50cedd586816 137 * UINT8 Opcode;
dflet 0:50cedd586816 138 * struct HttpBlob Write;
dflet 0:50cedd586816 139 */
dflet 0:50cedd586816 140
dflet 0:50cedd586816 141 g_uConnection = uConnection;
dflet 0:50cedd586816 142
dflet 0:50cedd586816 143 g_Buffer = ReadBuffer;
dflet 0:50cedd586816 144 g_close = 0;
dflet 0:50cedd586816 145 if (!strcmp(ReadBuffer,camera))
dflet 0:50cedd586816 146 {
dflet 0:50cedd586816 147 if(!g_iCameraTaskHdl)
dflet 0:50cedd586816 148 {
dflet 0:50cedd586816 149 osi_TaskCreate(CameraAppTask,
dflet 0:50cedd586816 150 "CameraApp",
dflet 0:50cedd586816 151 1024,
dflet 0:50cedd586816 152 NULL,
dflet 0:50cedd586816 153 CAMERA_SERVICE_PRIORITY,
dflet 0:50cedd586816 154 &g_iCameraTaskHdl);
dflet 0:50cedd586816 155 }
dflet 0:50cedd586816 156
dflet 0:50cedd586816 157 }
dflet 0:50cedd586816 158 //Free memory as we are not using anywhere later
dflet 0:50cedd586816 159 free(g_Buffer);
dflet 0:50cedd586816 160 g_Buffer = NULL;
dflet 0:50cedd586816 161 /* Enter websocket application code here */
dflet 0:50cedd586816 162 return;
dflet 0:50cedd586816 163 }
dflet 0:50cedd586816 164
dflet 0:50cedd586816 165
dflet 0:50cedd586816 166 /*!
dflet 0:50cedd586816 167 * \brief This websocket Event indicates successful handshake with client
dflet 0:50cedd586816 168 * Once this is called the server can start sending data packets over websocket using
dflet 0:50cedd586816 169 * the sl_WebSocketSend API.
dflet 0:50cedd586816 170 *
dflet 0:50cedd586816 171 *
dflet 0:50cedd586816 172 * \param[in] uConnection Websocket Client Id
dflet 0:50cedd586816 173 *
dflet 0:50cedd586816 174 * \return none
dflet 0:50cedd586816 175 */
dflet 0:50cedd586816 176 void WebSocketHandshakeEventHandler(UINT16 uConnection)
dflet 0:50cedd586816 177 {
dflet 0:50cedd586816 178 g_success = 1;
dflet 0:50cedd586816 179 g_uConnection = uConnection;
dflet 0:50cedd586816 180 }
dflet 0:50cedd586816 181
dflet 0:50cedd586816 182
dflet 0:50cedd586816 183 //****************************************************************************
dflet 0:50cedd586816 184 //
dflet 0:50cedd586816 185 //! Task function start the device and crete a TCP server showcasing the smart
dflet 0:50cedd586816 186 //! plug
dflet 0:50cedd586816 187 //!
dflet 0:50cedd586816 188 //****************************************************************************
dflet 0:50cedd586816 189
dflet 0:50cedd586816 190
dflet 0:50cedd586816 191 void HttpServerAppTask(void * param)
dflet 0:50cedd586816 192 {
dflet 0:50cedd586816 193 int32_t lRetVal = -1;
dflet 0:50cedd586816 194
dflet 0:50cedd586816 195 //Start SimpleLink in AP Mode
dflet 15:5433f9d94cd7 196 lRetVal = _cc3100_Mod.Network_AP_InitDriver();
dflet 15:5433f9d94cd7 197 // lRetVal = _cc3100_Mod.Network_IF_InitDriver(ROLE_AP);
dflet 0:50cedd586816 198 if(lRetVal < 0)
dflet 0:50cedd586816 199 {
dflet 0:50cedd586816 200 Uart_Write((uint8_t*)"Start SimpleLink in AP Mode Failed \n\r");
dflet 0:50cedd586816 201 LOOP_FOREVER();
dflet 0:50cedd586816 202 }
dflet 15:5433f9d94cd7 203 osi_Sleep(2);
dflet 0:50cedd586816 204 //Stop Internal HTTP Server
dflet 0:50cedd586816 205 lRetVal = _cc3100_Mod._netapp.sl_NetAppStop(SL_NET_APP_HTTP_SERVER_ID);
dflet 0:50cedd586816 206 if(lRetVal < 0)
dflet 0:50cedd586816 207 {
dflet 0:50cedd586816 208 Uart_Write((uint8_t*)"Stop Internal HTTP Server Failed \n\r");
dflet 0:50cedd586816 209 LOOP_FOREVER();
dflet 0:50cedd586816 210 }
dflet 0:50cedd586816 211 Uart_Write((uint8_t*)"HttpServerAppTask \n\r");
dflet 0:50cedd586816 212 //Run APPS HTTP Server
dflet 0:50cedd586816 213 HttpServerInitAndRun(NULL);
dflet 11:404bd8bb7fa6 214
dflet 11:404bd8bb7fa6 215 Uart_Write((uint8_t*)"HttpServerAppTask has returned for some reason\n\r");
dflet 0:50cedd586816 216 LOOP_FOREVER();
dflet 0:50cedd586816 217
dflet 0:50cedd586816 218 }
dflet 0:50cedd586816 219
dflet 0:50cedd586816 220 //*****************************************************************************
dflet 0:50cedd586816 221 //
dflet 0:50cedd586816 222 // Close the Doxygen group.
dflet 0:50cedd586816 223 //! @}
dflet 0:50cedd586816 224 //
dflet 0:50cedd586816 225 //*****************************************************************************
dflet 0:50cedd586816 226