David Fletcher / Mbed 2 deprecated cc3100_Test_websock_Camera_CM4F

Dependencies:   mbed

Committer:
dflet
Date:
Tue Jul 07 22:56:31 2015 +0000
Revision:
11:404bd8bb7fa6
Parent:
9:b7c6e7303df5
Child:
12:7d75ba5deed1
WIP commit 12

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