DISCO-F746NG_LCDTS_CC3000_NTP

Dependencies:   BSP_DISCO_F746NG LCD_DISCO_F746NG NTPClient NVIC_set_all_priorities TS_DISCO_F746NG cc3000_hostdriver_mbedsocket mbed

Fork of DISCO-F746NG_LCDTS_demo by ST

main.cpp

Committer:
JackB
Date:
2015-10-17
Revision:
2:030b4c500fce
Parent:
0:9933f7db9a9b

File content as of revision 2:030b4c500fce:

#include "mbed.h"
#include "cc3000.h"
#include "main.h"
#include "NTPClient.h"
#include "TS_DISCO_F746NG.h"
#include "LCD_DISCO_F746NG.h"

#define CC3000_IRQ   D3  // (D3)
#define CC3000_EN    D5  // (D5)
#define CC3000_CS    D10 // (D10)
#define CC3000_MOSI  D11 // (D11)
#define CC3000_MISO  D12 // (D12)
#define CC3000_SCLK  D13 // (D13)

#define SSID         "Prakjaroen"
#define PHRASE       "A4B5C6D7E8F9"
#define SECURITY     WPA2

#define IP           "192.168.2.165"
#define MASK         "255.255.255.0"
#define GW           "192.168.2.1"

#define DHCP         1

#if (DHCP == 1)
    #define STATIC_IP    0
    #define IP_INIT      DHCP
#else
    #define STATIC_IP    1
    #define IP_INIT      STATIC_IP
#endif

using namespace mbed_cc3000;

#define MY_BOARD MBED_BOARD_EXAMPLE

/* cc3000 module declaration specific for user's board. Check also init() */
#if (MY_BOARD == WIGO)
cc3000 wifi(PTA16, PTA13, PTD0, SPI(PTD2, PTD3, PTC5), SSID, PHRASE, SECURITY, false);
Serial pc(USBTX, USBRX);
#elif (MY_BOARD == WIFI_DIPCORTEX)
cc3000 wifi(p28, p27, p30, SPI(p21, p14, p37), SSID, PHRASE, SECURITY, false);
Serial pc(UART_TX, UART_RX);
#elif (MY_BOARD == MBED_BOARD_EXAMPLE)
cc3000 wifi(CC3000_IRQ, CC3000_EN, CC3000_CS, SPI(CC3000_MOSI, CC3000_MISO, CC3000_SCLK), SSID, PHRASE, SECURITY, false); //SparkFun Board on Arduino pin definitions
//Serial pc(USBTX, USBRX);
//    Serial pc(P4_28, P4_29);

    #if defined(TARGET_NUCLEO_F411RE)
    Serial pc(USBTX, USBRX);
    #elif defined(TARGET_NUCLEO_F446RE)
    Serial pc(USBTX, USBRX);
    #elif defined(TARGET_ARCH_PRO)
    Serial pc(P4_28, P4_29);
    #elif defined(TARGET_ARCH_MAX)
    Serial pc(USBTX, USBRX);
    Serial bt(D6, D7);  // tx, rx, Arch Max
    #elif defined(TARGET_LPC4337)
    Serial pc(P2_10, P2_11); // TX, RX
    #elif defined(TARGET_DISCO_F746NG)
    Serial pc(USBTX, USBRX);
    #else
    Serial pc(USBTX, USBRX);
    #endif



#else

#endif

// array to store RM parameters from EEPROM
unsigned char cRMParamsFromEeprom[128];

// array to store MAC address from EEPROM
unsigned char cMacFromEeprom[6];

LCD_DISCO_F746NG lcd;
TS_DISCO_F746NG ts;

int main()
{
    uint8_t firmware_ver[2];
    signed char mac_status = -1;
    unsigned char FW_status = 1;

    init(); // board dependent init
    pc.baud(230400);
    printf("\r\n--------------------------------------------------------------------------------\r\n");

    printf("Target   : ");
#if defined(TARGET_NUCLEO_F411RE)
    printf("NUCLEO F411RE\r\n");
#elif defined(TARGET_NUCLEO_F446RE)
    printf("NUCLEO F446RE\r\n");
#elif defined(TARGET_ARCH_PRO)
    printf("Seeed Arch PRO\r\n");
#elif defined(TARGET_ARCH_MAX)
    printf("Seeed Arch Max\r\n");
#elif defined(TARGET_LPC4337)
    printf("LPC4337\r\n");
#elif defined(TARGET_DISCO_F746NG)
    printf("DISCO_F746NG\r\n");
#else
    printf("Unknown\r\n");
#endif

    printf("CPU Clock: %3.3f MHz\r\n", ((float)SystemCoreClock/1000000.0));

    printf("MAC      : ");
    char mac_board[6];
    mbed_mac_address(mac_board);
    for(int i=0; i<6;i++) {
        printf("%02X", mac_board[i]);
        if (i < 5) printf(":");
    }
    printf("\r\n");


    printf("mbed cc3000 NTP client demo.\r\n");

#if (DHCP == 1)
    printf("Initialize the interface using DHCP...\r\n");
    printf("wifi.init() ");
    wifi.init();
#else
    printf("Initialize the interface using a static IP address...\r\n");
    printf("wifi.init(%s, %s, %s) ", IP, MASK, GW);
    wifi.init(IP, MASK, GW);
#endif
    printf("done.\r\n");

    printf("Read from cc3000...\r\n");
        
    // Read Firmware Version and MAC Address
    FW_status = wifi.read_sp_version(firmware_ver);   // read actual Firmware version
    if(FW_status == 0){
        printf("Firmware version: %d.%d\r\n", firmware_ver[0], firmware_ver[1]);
        mac_status = wifi.get_mac_address(cMacFromEeprom);
        if(mac_status == 0){
            printf("MAC address     : ");
            for(int i = 0; i < 6; i++) {
                printf("%02X", cMacFromEeprom[i]);
                if (i < 5) printf(":");
            }
            printf("\r\n");
        }
    } else {
        printf("ERROR: CC3000 not found - check connections !\r\n");
    }

    // WiFi parameters
    printf("WiFi parameters:\r\n");
    printf("SSID            : %s\r\n", SSID);
    printf("Phrase          : %s\r\n", PHRASE);
    printf("Security        : ");
    if (SECURITY == 0) printf("NONE");
    if (SECURITY == 1) printf("WEP");
    if (SECURITY == 2) printf("WPA");
    if (SECURITY == 3) printf("WPA2");
    printf("\r\n");
    
    wait(1.0);
  
    // Connect to WiFi
    printf("Bring the interface up...\r\n");
    if (wifi.connect() == -1) {
        printf("ERROR: Failed to connect. Please verify connection details and try again.\r\n");
    }
    char *ip     = wifi.getIPAddress();
    char *mask   = wifi.getNetworkMask();
    char *gate   = wifi.getGateway();
    char *mac    = wifi.getMACAddress();
    bool conn    = wifi.is_connected();
    bool dhcp    = wifi.is_dhcp_configured();
    bool enabled = wifi.is_enabled();
    
    printf("IP              : %s\r\n", ip);
    printf("Netmask         : %s\r\n", mask);
    printf("Gateway         : %s\r\n", gate);
    printf("MAC             : %s\r\n", mac);
    printf("Connected       : %d\r\n", conn);
    printf("DHCP            : %d\r\n", dhcp);
    printf("Enabled         : %d\r\n", enabled);

    wait(1.0);
    
    
    // Read time from server
    NTPClient ntp_client;
    // NTP Server Parameters
//    char* domain_name = "217.114.59.3";
    char* domain_name = "2.nl.pool.ntp.org";
//    char* domain_name = "0.uk.pool.ntp.org";
    int   port_number = 123;
    time_t ct_time;
    char time_buffer[80];    
    char time_buffer_old[80];    

    printf("Reading time: ");
    if (ntp_client.setTime(domain_name, port_number) == 0) {
        printf("Passed.\r\n");
        ct_time = time(NULL) + 7200; // Summer time - Convert to Europe/Amsterdam Time
        set_time(ct_time);
        strftime(time_buffer, 80, "%a %d-%b-%Y %T", localtime(&ct_time));
        printf("Time            : %s\r\n", time_buffer);
    } else {
        printf("FAILED!\r\n");
    }

    strcpy(time_buffer_old, "Dummy value");


    TS_StateTypeDef TS_State;
    uint16_t x, y;
    uint8_t text[30];
    uint8_t status;
    uint8_t idx;
    uint8_t cleared = 0;
    uint8_t prev_nb_touches = 0;

    lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"TOUCHSCREEN DEMO", CENTER_MODE);
    wait(1);

    status = ts.Init(lcd.GetXSize(), lcd.GetYSize());
    if (status != TS_OK) {
        lcd.Clear(LCD_COLOR_RED);
        lcd.SetBackColor(LCD_COLOR_RED);
        lcd.SetTextColor(LCD_COLOR_WHITE);
        lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"TOUCHSCREEN INIT FAIL", CENTER_MODE);
    } else {
        lcd.Clear(LCD_COLOR_GREEN);
        lcd.SetBackColor(LCD_COLOR_GREEN);
        lcd.SetTextColor(LCD_COLOR_WHITE);
        lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"TOUCHSCREEN INIT OK", CENTER_MODE);
    }

    wait(1);
    lcd.SetFont(&Font12);
    lcd.SetBackColor(LCD_COLOR_BLUE);
    lcd.SetTextColor(LCD_COLOR_WHITE);

    while(1) {

        ct_time = time(NULL);
//        strftime(time_buffer, 80, "%S", localtime(&ct_time));
        strftime(time_buffer, 80, "%a %d-%b-%Y %T", localtime(&ct_time));
        if (strcmp(time_buffer, time_buffer_old) != 0) {
            strcpy(time_buffer_old, time_buffer);
            printf("%s\r\n", time_buffer);
    lcd.DisplayStringAt(0, LINE(15), (uint8_t *)time_buffer, CENTER_MODE);
            strftime(time_buffer, 80, "%T", localtime(&ct_time));
            // 21:00:00
            if ((time_buffer[3] == '0') && (time_buffer[4] == '0') && 
                (time_buffer[6] == '0') && (time_buffer[7] == '0')) {
                // Sync once per hour
                printf("Reading time: ");
                if (ntp_client.setTime(domain_name, port_number) == 0) {
                    printf("Passed.\r\n");
                    ct_time = time(NULL) + 7200; // Summer time - Convert to Europe/Amsterdam Time
                    set_time(ct_time);
                    strftime(time_buffer, 80, "%a %d-%b-%Y %T", localtime(&ct_time));
//                    printf("Time            : %s\r\n", time_buffer);
    lcd.DisplayStringAt(0, LINE(15), (uint8_t *)time_buffer, CENTER_MODE);
                } else {
                    printf("FAILED!\r\n");
                }
            }
        }

        ts.GetState(&TS_State);
        if (TS_State.touchDetected) {
            // Clear lines corresponding to old touches coordinates
            if (TS_State.touchDetected < prev_nb_touches) {
                for (idx = (TS_State.touchDetected + 1); idx <= 5; idx++) {
                    lcd.ClearStringLine(idx);
                }
            }
            prev_nb_touches = TS_State.touchDetected;

            cleared = 0;

            sprintf((char*)text, "Touches: %d", TS_State.touchDetected);
            lcd.DisplayStringAt(0, LINE(0), (uint8_t *)&text, LEFT_MODE);

            for (idx = 0; idx < TS_State.touchDetected; idx++) {
                x = TS_State.touchX[idx];
                y = TS_State.touchY[idx];
                sprintf((char*)text, "Touch %d: x=%d y=%d    ", idx+1, x, y);
                lcd.DisplayStringAt(0, LINE(idx+1), (uint8_t *)&text, LEFT_MODE);
            }

            lcd.DrawPixel(TS_State.touchX[0], TS_State.touchY[0], LCD_COLOR_ORANGE);
        } else {
            if (!cleared) {
                lcd.Clear(LCD_COLOR_BLUE);
                sprintf((char*)text, "Touches: 0");
                lcd.DisplayStringAt(0, LINE(0), (uint8_t *)&text, LEFT_MODE);
                cleared = 1;
            }
        }
    }
}