WiFi DipCortex / CC3000 Demo - Contains a menu driven set of tests to initalise and control the CC3000 radio. Also allowing you to test various TCP and UDP connections.

Dependencies:   NTPClient WebSocketClient cc3000_hostdriver_mbedsocket mbed HTTPClient

http://www.soldersplash.co.uk/products/wifi-dipcortex/

Please Note, this example uses the serial port so you will need an external RS232 TTL to USB adapter.

tcpTests.cpp

Committer:
SolderSplashLabs
Date:
2013-10-12
Revision:
5:506f580e7ead
Parent:
4:4e5e094a81c0

File content as of revision 5:506f580e7ead:

#include "mbed.h"
#include "cc3000.h"

#include "TCPSocketConnection.h"
#include "TCPSocketServer.h"

#include "HTTPClient.h"
#include "Websocket.h"

extern cc3000 wifi;
extern Serial pc;
HTTPClient http;

const char WEB_SOCKET_URL[] = {"ws://sockets.mbed.org/ws/SolderSplashLabs/wo"};
const char* ECHO_SERVER_ADDRESS = "192.168.0.10";
const int ECHO_SERVER_PORT_TCP = 80;
char hello[] = "Hello World\r\n";
char str[512];

// ------------------------------------------------------------------------------------------------------------
/*!
    @brief Exercise the HTTP Client library
*/
// ------------------------------------------------------------------------------------------------------------
void HttpClientTest ( void )
{
    //GET data
    printf("\r\nTrying to fetch page... \r\n");
    int ret = http.get("http://mbed.org/media/uploads/donatien/hello.txt", str, 128);
    if (!ret)
    {
      printf("Page fetched successfully - read %d characters \r\n", strlen(str));
      printf("Result: %s \r\n", str);
    }
    else
    {
      printf("Error - ret = %d - HTTP return code = %d \r\n", ret, http.getHTTPResponseCode());
    }
 
    //POST data
    HTTPMap map;
    HTTPText inText(str, 512);
    map.put("Hello", "World");
    map.put("test", "1234");
    printf(" \r\nTrying to post data... \r\n");
    ret = http.post("http://httpbin.org/post", map, &inText);
    if (!ret)
    {
      printf("Executed POST successfully - read %d characters \r\n", strlen(str));
      printf("Result: %s \r\n", str);
    }
    else
    {
      printf("Error - ret = %d - HTTP return code = %d \r\n", ret, http.getHTTPResponseCode());
    }
 
    //PUT data
    strcpy(str, "This is a PUT test!");
    HTTPText outText(str);
    //HTTPText inText(str, 512);
    printf(" \r\nTrying to put resource... \r\n");
    ret = http.put("http://httpbin.org/put", outText, &inText);
    if (!ret)
    {
      printf("Executed PUT successfully - read %d characters \r\n", strlen(str));
      printf("Result: %s \r\n", str);
    }
    else
    {
      printf("Error - ret = %d - HTTP return code = %d \r\n", ret, http.getHTTPResponseCode());
    }
 
    //DELETE data
    //HTTPText inText(str, 512);
    printf(" \r\nTrying to delete resource... \r\n");
    ret = http.del("http://httpbin.org/delete", &inText);
    if (!ret)
    {
      printf("Executed DELETE successfully - read %d characters \r\n", strlen(str));
      printf("Result: %s \r\n", str);
    }
    else
    {
      printf("Error - ret = %d - HTTP return code = %d \r\n", ret, http.getHTTPResponseCode());
    }
 
}

// ------------------------------------------------------------------------------------------------------------
/*!
    @brief Open a WebSocket, send a string
*/
// ------------------------------------------------------------------------------------------------------------
void WebSocketTest ( void )
{
int res = 0;
uint16_t counter = 0;
uint16_t reconnects = 0;
uint8_t myMAC[8];
char websocketstr[100];

    wifi.get_mac_address(myMAC);
    
    Websocket ws((char *)WEB_SOCKET_URL);
    if ( ws.connect() )
    {
        printf("Connected to websocket server.\r\n");
        
        printf("\r\n!! Press any key to stop sending !!\r\n\r\n");
        while (1)
        {   
            counter ++;
            sprintf(websocketstr, "WiFi DipCortex / CC3000 - %05d - %02x:%02x:%02x:%02x:%02x:%02x\r\n", counter, myMAC[0], myMAC[1], myMAC[2], myMAC[3], myMAC[4], myMAC[5]);
            
            if ( wifi.is_connected() )
            {
                res = ws.send(websocketstr);
                printf("Reconnects : %05d, Messages Sent : %05d, Websocket send returned : %d.\r\n", reconnects, counter, res);
            
                if ( -1 == res ) 
                {
                    printf("Websocket Failure, reconnecting .... \r\n");
                    ws.close();
                    if ( ws.connect() )
                    {
                        // Reconnected
                        reconnects ++;
                    }
                    else
                    {
                        // Failure!
                        break;
                    }
                }
                
                wait_ms(1000);
            }
            else
            {
                printf("WiFi Connection Lost .... \r\n");
            }
            
            if ( pc.readable() )
            {
                pc.getc();
                break;
            }
        }
        
        ws.close();
        printf("Websocket Closed \r\n");
    }
}

// ------------------------------------------------------------------------------------------------------------
/*!
    @brief Open a TCP port send a string and wait for a reply
*/
// ------------------------------------------------------------------------------------------------------------
void TcpClientTest ( void )
{
uint16_t counter = 0;
TCPSocketConnection socket;
char buf[256];
int n = 0;
        
    if (socket.connect(ECHO_SERVER_ADDRESS, ECHO_SERVER_PORT_TCP) < 0) 
    {
        printf("Unable to connect to (%s) on port (%d)\r\n", ECHO_SERVER_ADDRESS, ECHO_SERVER_PORT_TCP);
    }
    else
    {
        // Block for 1 second
        socket.set_blocking( true, 1000 );
        
        printf("\r\n!! Press any key to stop sending !!\r\n\r\n");
        while (1)
        {   
            counter ++;
        
            n = socket.send_all(hello, sizeof(hello) - 1);
            
            if ( n > 0 )
            {
                printf("%05d : TCP Socket Sent : Hello World\r\n", counter);
            }
            else
            {
                printf("Failed to send\r\n");
                break;
            }
     
            n = socket.receive(buf, 256);
            
            if ( n > 0 )
            {
                printf("TCP Socket Recv'd : %s \r\n", buf);
                buf[n] = '\0';
            }
            else
            {
                buf[0] = '\0';
                printf("TCP : Failed to Recv\r\n");
                break;
            }
            
            wait_ms(50);
            
            // Should we stop?
            if ( pc.readable() )
            {
                pc.getc();
                break;
            }
        }
        if ( wifi.is_connected() )
        {
            socket.close();
        }
        printf("Completed.\r\n");
    }
}

// ------------------------------------------------------------------------------------------------------------
/*!
    @brief Opens a sockets to listen for connections, upon connection a message is sent and the 
           client disconnected
*/
// ------------------------------------------------------------------------------------------------------------
void TcpServerTest ( void )
{
int32_t status;
char buffer[256];
TCPSocketServer server;
TCPSocketConnection client;
    
    server.bind(15000);
    server.listen();
    printf("\r\n!! Press any key to stop listening !!\r\n\r\n");
    while (1) 
    {
        status = server.accept(client);
        if (status >= 0) 
        {
            client.set_blocking(false, 1500); // Timeout after (1.5)s
            printf("Connection from: %s \r\n", client.get_address());
            //client.receive(buffer, sizeof(buffer));
            //printf("Received: %s \r\n",buffer);
            printf("Sending the message to the server. \r\n");
            client.send_all(hello, sizeof(hello));
            client.close();
        }
        
        // Should we stop?
        if ( pc.readable() )
        {
            pc.getc();
            break;
        }
        
        if ( wifi.is_connected() )
        {
            break;
        }
    }
    
    if ( wifi.is_connected() )
    {
        server.close();
    }
}