This is a very simple guide, reviewing the steps required to get Blinky working on an Mbed OS platform.

Dependencies:   RemoteIR

main.cpp

Committer:
sb8718
Date:
2020-06-02
Revision:
140:2252b2df4bc6
Parent:
138:e829be898713
Child:
141:ba61e3c64a6d

File content as of revision 140:2252b2df4bc6:

#include "mbed.h"

#define SERVER_IP "192.168.0.53"
#define SERVER_PORT 50000

Serial pc(USBTX, USBRX, 115200);
WiFiInterface *wifi;

TCPSocket socket;
Thread sock_thread;

char rx_buf_pc[100];
int index = 0;
volatile int flag;

void rx_cb(void)
{
    char ch;
    ch = pc.getc();
    pc.putc(ch);
    rx_buf_pc[index++] = ch;
    if (ch == 0x0D) {
        pc.putc(0x0A);
        rx_buf_pc[--index] = '\0';
        index = 0;
        flag = 1;
    }
}


void rx_thread() 
{
    char* buf = (char*)malloc(1024);
    
    while(true)
    {
        nsapi_size_or_error_t size = socket.recv(buf, 1024);
        if (size <= 0)
        {
            if (size == NSAPI_ERROR_WOULD_BLOCK) continue;
            
            pc.printf("Error while receiving data from TCP socket (%d)\r\n", size);
            return;
        }
        buf[size] = '\0';
        pc.printf("\r\nRX data: (%d) %s \r\n", size, buf);
    }
}


int main() {
    SocketAddress sockAddr;
    SocketAddress serverAddr(SERVER_IP, SERVER_PORT);
    
    pc.printf("\r\n WiFi TCP Client example\r\n");
    
    wifi = WiFiInterface::get_default_instance();
    if (!wifi)
    {
        pc.printf("ERROR: No WiFiInterface found.\n");
        while(1);
    }
    
    pc.printf("Connecting to %s...\r\n", MBED_CONF_APP_WIFI_SSID);
    int ret = wifi->connect(MBED_CONF_APP_WIFI_SSID, MBED_CONF_APP_WIFI_PASSWORD, NSAPI_SECURITY_WPA_WPA2);
    if (ret != 0)
    {
        pc.printf("Connection error!!\r\n");
        while(1);
    }
    
    pc.printf("Success!!\r\n");
    pc.printf("RSSI: %d\r\n", wifi->get_rssi());
    
    wifi->get_ip_address(&sockAddr);
    pc.printf("IP : %s, ", sockAddr.get_ip_address());
    
    pc.printf("Netmask: %s, ", wifi->get_netmask());
    
    wifi->get_gateway(&sockAddr);
    pc.printf("Gateway: %s\r\n", sockAddr.get_ip_address());
    
    socket.open(wifi);
    int response = socket.connect(serverAddr);
    if (0 != response)
    {
        pc.printf("Enter connecting: %d\r\n", response);
        socket.close();
        wifi->disconnect();
        while(1);
    }   
    
    sock_thread.start(&rx_thread);
    //pc.attach(&rx_cb);

    while(1)
    {
        flag = 0;
        pc.printf("Enter characters to send to a server: ");
        while (flag != 1)
        {
            char ch;
            if (pc.readable())
            {                
                ch = pc.getc();
                pc.putc(ch);
                rx_buf_pc[index++] = ch;
                if (ch == 0x0D) {
                    pc.putc(0x0A);
                    rx_buf_pc[--index] = '\0';
                    index = 0;
                    flag = 1;
                }
            }
        }
        
        if (!strcmp(rx_buf_pc, "q") || !strcmp(rx_buf_pc, "Q"))
        {
            break;
        }
        else 
        {
            int len = strlen(rx_buf_pc);
            pc.printf("Sent: %s (%d)\r\n", rx_buf_pc, len);
            rx_buf_pc[len++] = 0x0D;
            rx_buf_pc[len++] = 0x0A;
            socket.send((const char *) rx_buf_pc, len);
            Thread::wait(500);
        }
    }
    
    socket.close();
    wifi->disconnect();
    sock_thread.join();
    pc.printf("RX sock_thread joined!!\r\n");
    pc.printf("\nDone\r\n");
    Thread::wait(osWaitForever);
}