Martin Kojtal / Mbed 2 deprecated cc3000_simple_socket_demo

Dependencies:   NVIC_set_all_priorities cc3000_hostdriver_mbedsocket mbed

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");
+}
+
+
+