Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: NVIC_set_all_priorities cc3000_hostdriver_mbedsocket mbed
doTCPIP.cpp
- Committer:
- Kojto
- Date:
- 2013-09-08
- Revision:
- 0:ce33c63eefe5
File content as of revision 0:ce33c63eefe5:
#include "doTCPIP.h"
#include "cc3000.h"
#include "main.h"
using namespace mbed_cc3000;
extern cc3000 wigo;
//volatile uint8_t newData;
// int32_t server_running;
//uint8_t ForceFixedSSID;
//int8_t runSmartConfig; // Flag indicating whether user requested to perform Smart Config
//volatile uint32_t ulCC3000Connected;
uint8_t ConnectUsingSmartConfig;
uint8_t myMAC[8];
tUserFS userFS;
int8_t requestBuffer[REQ_BUFFER_SIZE];
//int32_t LAN_Connected = 0;
uint8_t SmartConfigProfilestored = 0xff;
#ifndef CC3000_UNENCRYPTED_SMART_CONFIG
const uint8_t smartconfigkey[] = {0x73,0x6d,0x61,0x72,0x74,0x63,0x6f,0x6e,0x66,0x69,0x67,0x41,0x45,0x53,0x31,0x36};
#else
const uint8_t smartconfigkey = NULL;
#endif
/** \brief Flag indicating whether to print CC3000 Connection info */
//Device name - used for Smart config in order to stop the Smart phone configuration process
uint8_t DevServname[] = "CC3000";
//volatile uint32_t SendmDNSAdvertisment;
/* TODO */
void create_tcp_connection(int32_t port)
{
const char python_msg[] = "Hello Python\n";
int32_t stat;
int32_t sock;
//new TCP socket descriptor
int32_t newsock;
//destination address
sockaddr destAddr;
//local address
sockaddr LocalAddr;
socklen_t addrlen;
memset(&LocalAddr, 0, 8);
LocalAddr.family = AF_INET;
LocalAddr.data[0] = (port >> 8) & 0xff;
LocalAddr.data[1] = port & 0xff;
memset (&LocalAddr.data[2], 0, 4);
sock = wigo._socket.socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
while(sock == -1) sock = wigo._socket.socket(AF_INET, SOCK_DGRAM, IPPROTO_TCP);
wigo._socket.bind(sock,&LocalAddr,sizeof(sockaddr));
wigo._socket.listen(sock, 1);
addrlen = sizeof(destAddr);
while(1)
{
newsock = -2;
printf("Server waiting for connection to Python\n");
LED_D2_ON;
while((newsock == -1) || (newsock == -2))
{
newsock = wigo._socket.accept(sock,&destAddr, &addrlen);
}
printf("Connected\n");
//receive TCP data
if(newsock >= 0)
{
wigo._socket.recv(newsock, requestBuffer,20,0);
printf("Input = %s\n", requestBuffer);
stat = -2;
stat = wigo._socket.send(newsock, python_msg, strlen(python_msg), 0);
printf("status= %d\n", stat);
LED_D2_OFF;
} else printf("bad socket= %d\n", newsock);
wigo._socket.closesocket(newsock);
printf("Done, press any key to repeat\n");
getchar();
// printf("\x1B[2J"); //VT100 erase screen
// printf("\x1B[H"); //VT100 home
}
}
void start_smart_config() {
wigo.start_smart_config(smartconfigkey);
}
void init_tcp(void)
{
int t;
tNetappIpconfigRetArgs ipinfo2;
check_dhcp();
//while(checkWiFiConnected() == false);
// If connectivity is good, run the primary functionality
// while(1)
// {
// if (checkWiFiConnected()) break;
// wait(1);
// }
// printf("Connected\n");
// If we're not blocked by accept or others, obtain the latest status
wigo.get_ip_config(&ipinfo2); // data is returned in the ipinfo2 structure
printf("\n*** Wi-Go board DHCP assigned IP Address = %d.%d.%d.%d\n", ipinfo2.aucIP[3], ipinfo2.aucIP[2], ipinfo2.aucIP[1], ipinfo2.aucIP[0]);
LED_D3_ON;
t = wigo._socket.mdnsAdvertiser(1, DevServname, sizeof(DevServname));
printf("mDNS Status= %x\n", t);
}
void run_tcp_server(void)
{
LED_D3_OFF;
LED_D2_OFF;
printf("\n\nStarting TCP/IP Server\n");
init_tcp();
create_tcp_connection(TCPIP_PORT);
}
bool check_dhcp(void)
{
int32_t t;
//static uint8_t obtainIpInfoFlag = FALSE;
// Wait until for dhcp
while (wigo.is_dhcp_configured() == false)
{
wait_ms(500);
printf("waiting\n");
}
// Check if we are in a connected state. If so, set flags and LED
//if (wigo.is_connected() == true)
//{
//if (obtainIpInfoFlag == FALSE)
//{
// obtainIpInfoFlag = TRUE; // Set flag so we don't constantly turn the LED on
//LED_D3_ON;
//If Smart Config was performed, we need to send complete notification to the configure (Smart Phone App)
// if (ConnectUsingSmartConfig==1)
// {
// ConnectUsingSmartConfig = 0;
// SmartConfigProfilestored = SMART_CONFIG_SET;
// }
//}
t = wigo._socket.mdnsAdvertiser(1, DevServname, sizeof(DevServname));
printf("mDNS Status= %x\n", t);
return true;
//}
//return FALSE;
}
void do_FTC(void)
{
printf("Running First Time Configuration\n");
// server_running = 1;
//runSmartConfig = 1;
start_smart_config();
init_tcp();
RED_OFF;
GREEN_OFF;
BLUE_OFF;
userFS.FTC = 1;
wigo._nvmem.write( NVMEM_USER_FILE_1_FILEID, sizeof(userFS), 0, (uint8_t *) &userFS);
//runSmartConfig = 0;
SmartConfigProfilestored = SMART_CONFIG_SET;
wigo._wlan.stop();
printf("FTC finished\n");
}


SimpleLink Wi-Fi CC3000