Example node for Yodiwo's Plegma API

Dependencies:   EthernetInterface FXOS8700Q HTTPClient HTTPD MQTTS SDFileSystem YodiwoPlegma mbed-rpc mbed-rtos mbed wolfSSL

main.cpp

Committer:
mitsarionas
Date:
2015-09-04
Revision:
2:b7489c070d1f
Parent:
0:00797f1ebe04
Child:
3:11b767300d32

File content as of revision 2:b7489c070d1f:

#include "mbed.h"
#include "rtos.h"
#include "EthernetInterface.h"
#include "MQTTEthernet.h"
#include "MQTTClient.h"
#include "HTTPD.h"
//#include "HTTPServer.h"
//#include "LocalFileSystem.h"
#include "SDFileSystem.h"                  // SD File System functions

#include "FsHandler.h"
#include "RpcHandler.h"
#include "pairing_backend.h"
#include "pairing_http_handler.h"
#include "config.h"

#define DAT0 PTE3                          // MOSI
#define CMD  PTE1                          // MISO
#define CLK  PTE2                          // SCLK
#define CD   PTE4                          // CS


EthernetInterface eth;

DigitalOut led1(LED1);
InterruptIn sw2(SW2);
uint32_t button_pressed;
Thread *thread2;
//HTTPServer server;
extern HTTPD *httpd;
//  Instantiate a local file system handler named 'local' which will be used later to access files on the mbed.
//LocalFileSystem local("local");
 
 
SDFileSystem sd(DAT0, CMD, CLK, CD, "sd"); // MOSI, MISO, SCLK, CS
//Serial pc(USBTX, USBRX);                   // Virtual COM Port

//MQTTEthernet ipstack;
MQTTSocket ipstack;
//MQTT::Client<MQTTEthernet, Countdown> *client;


config_t configuration;

extern pairing_context pairing_state;

void pairing_done(char *nodeKey, char *secretKey);

void sw2_press(void)
{
    thread2->signal_set(0x1);
}

void led_thread(void const *argument)
{
    while (true) {
        led1 = !led1;
        Thread::wait(1000);
    }
}

void button_thread(void const *argument)
{
    while (true) {
        Thread::signal_wait(0x1);
        button_pressed++;
    }
}

void callback_pairing (int id);

int main()
{
    Thread thread(led_thread);
//    thread2 = new Thread(button_thread);

    eth.init();
    eth.connect();
    printf("IP Address is %s\n", eth.getIPAddress());
    
    int r = read_config(&configuration, "/sd/config.json");
    printf("read config returned: %d\n", r);
    
    printf("p: %p %p\n", configuration.nodeKey, configuration.nodeSecret);
    printf("...: %d %d\n", configuration.nodeKey[0], configuration.nodeKey[1]);    
    if (!configuration.nodeKey) {
        printf("not paired, launching HTTP server for pairing\n");
        start_pairing_http_server(&eth, 80, pairing_done);        
    } else {

        printf("found NodeKey: %s, proceeding to connection\n", configuration.nodeKey);
    }
    
    ipstack = MQTTSocket();             
//    client = new MQTT::Client<MQTTEthernet, Countdown>(ipstack);

//    eth.disconnect();
  

    button_pressed = 0;
    sw2.fall(&sw2_press);
    while (true) {
        Thread::wait(5000);
//        printf("SW2 was pressed (last 5 seconds): %d \n", button_pressed);
        fflush(stdout);
//        button_pressed = 0;
    }
}


void pairing_done(char *nodeKey, char *secretKey)
{
    printf("pairing done!\n");
    printf("NokeKey: %s\n", nodeKey);
    printf("SecretKey: %s\n", secretKey);
    configuration.nodeKey = nodeKey;
    configuration.nodeSecret = secretKey;
    int r = write_config(&configuration, "/sd/config.json");
    if (r < 0) {
        printf("error writing config to file\n");
    } else {
        printf("successfully written new config to file\n");
    }
}