David Fletcher / Mbed 2 deprecated cc3100_Test_websock_Camera_CM4F

Dependencies:   mbed

Committer:
dflet
Date:
Tue Aug 25 22:03:00 2015 +0000
Revision:
14:90603ea1e85b
Parent:
12:7d75ba5deed1
Child:
18:3f1b52616d00
I2C now works. 2 Cams added only the ov2640 works for now, many changes everywhere in the cam app. Still filled with debug.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dflet 0:50cedd586816 1 //*****************************************************************************
dflet 0:50cedd586816 2 // Copyright (C) 2014 Texas Instruments Incorporated
dflet 0:50cedd586816 3 //
dflet 0:50cedd586816 4 // All rights reserved. Property of Texas Instruments Incorporated.
dflet 0:50cedd586816 5 // Restricted rights to use, duplicate or disclose this code are
dflet 0:50cedd586816 6 // granted through contract.
dflet 0:50cedd586816 7 // The program may not be used without the written permission of
dflet 0:50cedd586816 8 // Texas Instruments Incorporated or against the terms and conditions
dflet 0:50cedd586816 9 // stipulated in the agreement under which this program has been supplied,
dflet 0:50cedd586816 10 // and under no circumstances can it be used with non-TI connectivity device.
dflet 0:50cedd586816 11 //
dflet 0:50cedd586816 12 //*****************************************************************************
dflet 0:50cedd586816 13
dflet 0:50cedd586816 14
dflet 0:50cedd586816 15 /**
dflet 0:50cedd586816 16 * @defgroup HttpSocket
dflet 0:50cedd586816 17 * This module performs all HTTP socket operations
dflet 0:50cedd586816 18 *
dflet 0:50cedd586816 19 * @{
dflet 0:50cedd586816 20 */
dflet 0:50cedd586816 21
dflet 0:50cedd586816 22 #include <string.h>
dflet 0:50cedd586816 23 #include "HttpDebug.h"
dflet 0:50cedd586816 24 #include "HttpSocket.h"
dflet 0:50cedd586816 25 #include "cc3100_simplelink.h"
dflet 0:50cedd586816 26 #include "cc3100_socket.h"
dflet 0:50cedd586816 27
dflet 0:50cedd586816 28 #include "osi.h"
dflet 0:50cedd586816 29
dflet 0:50cedd586816 30 using namespace mbed_cc3100;
dflet 0:50cedd586816 31
dflet 0:50cedd586816 32 cc3100 _cc3100_Module(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 33
dflet 0:50cedd586816 34 #define OSI_DELAY(x) osi_Sleep(x); //os idle
dflet 0:50cedd586816 35
dflet 0:50cedd586816 36 int OpenTCPServerSocket(unsigned int uiPortNum)
dflet 0:50cedd586816 37 {
dflet 0:50cedd586816 38 int iSockDesc, iRetVal;
dflet 0:50cedd586816 39 sockaddr_in sServerAddress;
dflet 0:50cedd586816 40 SlSockNonblocking_t enableOption;
dflet 0:50cedd586816 41 enableOption.NonblockingEnabled = 1;
dflet 0:50cedd586816 42
dflet 0:50cedd586816 43 //
dflet 0:50cedd586816 44 // opens a secure socket
dflet 0:50cedd586816 45 //
dflet 0:50cedd586816 46 if(443 == uiPortNum)
dflet 0:50cedd586816 47 {
dflet 0:50cedd586816 48 iSockDesc = _cc3100_Module._socket.sl_Socket(SL_AF_INET,SL_SOCK_STREAM, SL_SEC_SOCKET);
dflet 0:50cedd586816 49 }
dflet 0:50cedd586816 50 else //non secure
dflet 0:50cedd586816 51 {
dflet 0:50cedd586816 52 iSockDesc = _cc3100_Module._socket.sl_Socket(SL_AF_INET, SL_SOCK_STREAM, SL_IPPROTO_TCP);
dflet 0:50cedd586816 53 }
dflet 0:50cedd586816 54
dflet 0:50cedd586816 55 if( iSockDesc < 0 )
dflet 0:50cedd586816 56 {
dflet 0:50cedd586816 57 return -1;
dflet 0:50cedd586816 58 }
dflet 0:50cedd586816 59 //non blocking socket - Enable nonblocking mode
dflet 0:50cedd586816 60 iRetVal = _cc3100_Module._socket.sl_SetSockOpt(iSockDesc,SOL_SOCKET,SL_SO_NONBLOCKING, &enableOption,sizeof(enableOption));
dflet 0:50cedd586816 61 if(iRetVal < 0)
dflet 0:50cedd586816 62 {
dflet 0:50cedd586816 63 CloseTCPServerSocket(iSockDesc);
dflet 0:50cedd586816 64 return -1;
dflet 0:50cedd586816 65 }
dflet 0:50cedd586816 66
dflet 0:50cedd586816 67 if(443 == uiPortNum)
dflet 0:50cedd586816 68 {
dflet 0:50cedd586816 69 iRetVal = _cc3100_Module._socket.sl_SetSockOpt(iSockDesc, SL_SOL_SOCKET, SL_SO_SECURE_FILES_PRIVATE_KEY_FILE_NAME,SL_SSL_SRV_KEY, strlen(SL_SSL_SRV_KEY));
dflet 0:50cedd586816 70 if( iRetVal < 0 )
dflet 0:50cedd586816 71 {
dflet 0:50cedd586816 72 CloseTCPServerSocket(iSockDesc);
dflet 0:50cedd586816 73 return -1;
dflet 0:50cedd586816 74 }
dflet 0:50cedd586816 75 iRetVal = _cc3100_Module._socket.sl_SetSockOpt(iSockDesc, SL_SOL_SOCKET, SL_SO_SECURE_FILES_CERTIFICATE_FILE_NAME,SL_SSL_SRV_CERT, strlen(SL_SSL_SRV_CERT));
dflet 0:50cedd586816 76 if( iRetVal < 0 )
dflet 0:50cedd586816 77 {
dflet 0:50cedd586816 78 CloseTCPServerSocket(iSockDesc);
dflet 0:50cedd586816 79 return -1;
dflet 0:50cedd586816 80 }
dflet 0:50cedd586816 81 }
dflet 0:50cedd586816 82
dflet 0:50cedd586816 83 //
dflet 0:50cedd586816 84 // Bind - Assign a port to the socket
dflet 0:50cedd586816 85 //
dflet 0:50cedd586816 86 sServerAddress.sin_family = AF_INET;
dflet 0:50cedd586816 87 sServerAddress.sin_addr.s_addr = _cc3100_Module._socket.htonl(INADDR_ANY);
dflet 0:50cedd586816 88 sServerAddress.sin_port = _cc3100_Module._socket.htons(uiPortNum);
dflet 0:50cedd586816 89 if ( _cc3100_Module._socket.bind(iSockDesc, (sockaddr*)&sServerAddress, sizeof(sServerAddress)) != 0 )
dflet 0:50cedd586816 90 {
dflet 0:50cedd586816 91 CloseTCPServerSocket(iSockDesc);
dflet 0:50cedd586816 92 return -1;
dflet 0:50cedd586816 93 }
dflet 0:50cedd586816 94
dflet 0:50cedd586816 95 return iSockDesc;
dflet 0:50cedd586816 96 }
dflet 0:50cedd586816 97
dflet 0:50cedd586816 98 int CreateTCPServerSocket(unsigned int uiPortNum)
dflet 0:50cedd586816 99 {
dflet 0:50cedd586816 100 int iSockDesc = -1;
dflet 0:50cedd586816 101 unsigned char connectRetries = 0;
dflet 0:50cedd586816 102
dflet 0:50cedd586816 103 while (connectRetries++ < SERVER_MAX_SETUP_RETRY_COUNT)
dflet 0:50cedd586816 104 {
dflet 0:50cedd586816 105 iSockDesc = OpenTCPServerSocket(uiPortNum);
dflet 0:50cedd586816 106
dflet 0:50cedd586816 107 if (iSockDesc < 0)
dflet 0:50cedd586816 108 {
dflet 0:50cedd586816 109 continue;
dflet 0:50cedd586816 110 }
dflet 0:50cedd586816 111
dflet 0:50cedd586816 112 if(_cc3100_Module._socket.listen(iSockDesc, HTTP_CORE_MAX_CONNECTIONS) != 0)
dflet 0:50cedd586816 113 {
dflet 0:50cedd586816 114 CloseTCPServerSocket(iSockDesc);
dflet 0:50cedd586816 115 iSockDesc = -1;
dflet 0:50cedd586816 116 continue;
dflet 0:50cedd586816 117 }
dflet 0:50cedd586816 118 else
dflet 0:50cedd586816 119 {
dflet 0:50cedd586816 120 connectRetries = 0;
dflet 0:50cedd586816 121 break;
dflet 0:50cedd586816 122 }
dflet 0:50cedd586816 123 }
dflet 0:50cedd586816 124
dflet 0:50cedd586816 125 return iSockDesc;
dflet 0:50cedd586816 126 }
dflet 0:50cedd586816 127
dflet 0:50cedd586816 128 int CloseTCPServerSocket(int iSockDesc)
dflet 0:50cedd586816 129 {
dflet 0:50cedd586816 130 int ittr = 0;
dflet 0:50cedd586816 131
dflet 0:50cedd586816 132 if(iSockDesc < 0)
dflet 0:50cedd586816 133 {
dflet 0:50cedd586816 134 return 0 ;
dflet 0:50cedd586816 135 }
dflet 0:50cedd586816 136
dflet 0:50cedd586816 137 do
dflet 0:50cedd586816 138 {
dflet 0:50cedd586816 139 if(_cc3100_Module._socket.sl_Close(iSockDesc) >= 0)
dflet 0:50cedd586816 140 {
dflet 0:50cedd586816 141 iSockDesc = -1;
dflet 0:50cedd586816 142 HttpDebug("Http server socket closed\n\r");
dflet 0:50cedd586816 143 return 0;
dflet 0:50cedd586816 144 }
dflet 0:50cedd586816 145 else
dflet 0:50cedd586816 146 {
dflet 0:50cedd586816 147 HttpDebug("\n Http client socket close error\n\r");
dflet 0:50cedd586816 148 OSI_DELAY(500);//wait 500ms
dflet 0:50cedd586816 149 }
dflet 0:50cedd586816 150 ittr++;
dflet 0:50cedd586816 151 }while(ittr < 3);
dflet 0:50cedd586816 152
dflet 0:50cedd586816 153 return -1;
dflet 0:50cedd586816 154 }
dflet 0:50cedd586816 155
dflet 0:50cedd586816 156 int CreateTCPClientSocket(int iSockDesc)
dflet 0:50cedd586816 157 {
dflet 0:50cedd586816 158 sockaddr sClientAddr;
dflet 0:50cedd586816 159 SlSocklen_t uiClientAddrLen = sizeof(sClientAddr);
dflet 0:50cedd586816 160 int sock = -1;
dflet 0:50cedd586816 161 SlTimeval_t timeVal;
dflet 0:50cedd586816 162 SlSockNonblocking_t enableOption;
dflet 0:50cedd586816 163
dflet 0:50cedd586816 164 sock = _cc3100_Module._socket.accept(iSockDesc, &sClientAddr, &uiClientAddrLen);
dflet 0:50cedd586816 165 if(sock >= 0)
dflet 0:50cedd586816 166 {
dflet 0:50cedd586816 167 enableOption.NonblockingEnabled = 0;
dflet 0:50cedd586816 168
dflet 0:50cedd586816 169 //Blocking socket - Enable blocking mode
dflet 0:50cedd586816 170 if(_cc3100_Module._socket.sl_SetSockOpt(sock,SOL_SOCKET,SL_SO_NONBLOCKING, &enableOption,sizeof(enableOption)) < 0)
dflet 0:50cedd586816 171 {
dflet 0:50cedd586816 172 CloseTCPClientSocket(sock);
dflet 0:50cedd586816 173 return -1;
dflet 0:50cedd586816 174 }
dflet 0:50cedd586816 175
dflet 0:50cedd586816 176 timeVal.tv_sec = 1; // 1 Seconds
dflet 0:50cedd586816 177 timeVal.tv_usec = 0; // Microseconds. 10000 microseconds resoultion
dflet 0:50cedd586816 178 if((_cc3100_Module._socket.sl_SetSockOpt(sock,SOL_SOCKET,SL_SO_RCVTIMEO, &timeVal, sizeof(timeVal))) < 0)
dflet 0:50cedd586816 179 {
dflet 0:50cedd586816 180 CloseTCPClientSocket(sock);
dflet 0:50cedd586816 181 return -1;
dflet 0:50cedd586816 182 }// Enable receive timeout
dflet 0:50cedd586816 183 }
dflet 0:50cedd586816 184 return sock;
dflet 0:50cedd586816 185 }
dflet 0:50cedd586816 186
dflet 0:50cedd586816 187 int CloseTCPClientSocket(int iSockDesc)
dflet 0:50cedd586816 188 {
dflet 0:50cedd586816 189 int ittr = 0;
dflet 0:50cedd586816 190
dflet 0:50cedd586816 191 if(iSockDesc < 0)
dflet 0:50cedd586816 192 {
dflet 0:50cedd586816 193 return 0;
dflet 0:50cedd586816 194 }
dflet 0:50cedd586816 195
dflet 0:50cedd586816 196 do
dflet 0:50cedd586816 197 {
dflet 0:50cedd586816 198 if(_cc3100_Module._socket.sl_Close(iSockDesc) >= 0)
dflet 0:50cedd586816 199 {
dflet 0:50cedd586816 200 iSockDesc = -1;
dflet 0:50cedd586816 201 // HttpDebug("\n Http client socket closed\n\r");
dflet 0:50cedd586816 202
dflet 0:50cedd586816 203 return 0;
dflet 0:50cedd586816 204 }
dflet 0:50cedd586816 205 else
dflet 0:50cedd586816 206 {
dflet 0:50cedd586816 207 HttpDebug("\n client socket close error\n\r");
dflet 0:50cedd586816 208 OSI_DELAY(500);//wait 500ms
dflet 0:50cedd586816 209 }
dflet 0:50cedd586816 210 ittr++;
dflet 0:50cedd586816 211 }while(ittr < 3);
dflet 0:50cedd586816 212
dflet 0:50cedd586816 213 return -1;
dflet 0:50cedd586816 214 }
dflet 0:50cedd586816 215
dflet 0:50cedd586816 216 int ClientSocketSend(long socket, char * buffer, unsigned int len)
dflet 0:50cedd586816 217 {
dflet 14:90603ea1e85b 218 // HttpDebug("\r\n ClientSocketSend\n\r");
dflet 0:50cedd586816 219 int send_len = 0, Ittr = 0;
dflet 0:50cedd586816 220
dflet 0:50cedd586816 221 do
dflet 0:50cedd586816 222 {
dflet 0:50cedd586816 223 send_len = (int)_cc3100_Module._socket.send((int)socket, buffer, (int)len, 0);
dflet 0:50cedd586816 224
dflet 0:50cedd586816 225 if(send_len > 0)
dflet 0:50cedd586816 226 {
dflet 0:50cedd586816 227 if(len != send_len)
dflet 0:50cedd586816 228 {
dflet 0:50cedd586816 229 HttpDebug("client Send length is not matching %d \n\r", send_len);
dflet 0:50cedd586816 230 send_len = -1;
dflet 0:50cedd586816 231 }
dflet 0:50cedd586816 232 return send_len;
dflet 0:50cedd586816 233 }
dflet 0:50cedd586816 234 else if(send_len != SL_EAGAIN)
dflet 0:50cedd586816 235 {
dflet 0:50cedd586816 236 HttpDebug("\n client socket send error %d\n\r", send_len);
dflet 0:50cedd586816 237 return -1;
dflet 0:50cedd586816 238 }
dflet 0:50cedd586816 239
dflet 0:50cedd586816 240 Ittr++;
dflet 0:50cedd586816 241
dflet 0:50cedd586816 242 } while((SL_EAGAIN == send_len));
dflet 0:50cedd586816 243
dflet 0:50cedd586816 244 HttpDebug("\n client send time out %d\n\r", send_len);
dflet 0:50cedd586816 245
dflet 0:50cedd586816 246 return -1;
dflet 0:50cedd586816 247 }
dflet 0:50cedd586816 248
dflet 0:50cedd586816 249
dflet 0:50cedd586816 250 /// @}
dflet 0:50cedd586816 251