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
Diff: doTCPIP.cpp
- Revision:
- 0:ce33c63eefe5
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/doTCPIP.cpp Sun Sep 08 18:31:33 2013 +0000
@@ -0,0 +1,176 @@
+#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