fetch last data from IEEE1888 (FIAP) Storage.

Dependencies:   EthernetInterface Fiap HTTPClientForFIAP mbed-rtos mbed spxml

Fork of temp_FIAP_fetch by Yasushi TAUCHI

This program fetches last data from FIAP storage with IEEE1888 format.

Currently, You can confirm the data in console when FIAP_DEBUG_MODE is set to true.

Note: You should locate storage.txt into mbed memory at least before using this program. The storage.txt contains storage url, see example at IEEE1888_MULTI_SENSOR_GW/main.h .

And you should define FIAP_DEBUG_MODE and other constants in Fetch_IEEE1888_Storage/main.h file.

You can launch an AMI ( Amazon Machine Image ) on Amazon Web Service ( http://aws.amazon.com/ ) as the FIAP storage. The AMI is named as "IEEE1888 Storage", registered at Tokyo region.

If You need more information about the AMI, see http://d.hatena.ne.jp/satoruyoshida/20130210/1360508112 .

/media/uploads/strysd/fiap_ami.jpg

from here, in Japanese. このプログラムは IEEE1888 形式で FIAP Storage からデータを取得する例です。 現在、その値は FIAP_DEBUG_MODE を true に設定するとコンソールで確認できます。

このプログラムを使用する前に、少なくとも FIAP Storage の url を記載した sotrage.txt をメモリに格納しておく必要があります。 url の例は、 IEEE1888_MULTI_SENSOR_GW の main.h ファイルにあります。

FIAP_DEBUG_MODE およびその他の定数は Fetch_IEEE1888_Storage/main.h に存在します。

Amazon Web Service に用意した AMI を利用して FIAP Storage を起動することができます。IEEE1888 Storage という名前の公開 AMI です。

この AMI について詳しくは、http://d.hatena.ne.jp/satoruyoshida/20130210/1360508112 をご覧ください。

main.cpp

Committer:
strysd
Date:
2013-08-11
Revision:
5:51b00f225b7c
Parent:
3:9a1a6ebcdaa7

File content as of revision 5:51b00f225b7c:

#include "main.h"
#include "mbed.h"
#include "EthernetInterface.h"
#include "fiap.h"

EthernetInterface eth;
Serial pc(USBTX, USBRX);
FIAP fiap;

DigitalOut led1(LED1);//error while connecting to FIAPStorage
DigitalOut led3(LED3);//LAN speed (1 = error)
DigitalOut led4(LED4);//LAN link (1 = error)

DigitalIn lnk(P1_25);//LAN link
DigitalIn spd(P1_26);//LAN speed
DigitalOut speed(p29);//LAN speed for RJ45 (1 = OK)
DigitalOut link(p30); //LAN link for RJ45 (1 = OK)

int exitTimer;
int i;

#define STORAGE_URL_SIZE 100
char storage_url[STORAGE_URL_SIZE];
struct fiap_element element[] = {
    {NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL},
};

//if you set LEDs for LAN indicator in real time.
/*
Ticker flipper;

void myflip() {
    led3 = spd;
    led4 = lnk;
    if(USE_RJ45_LAMP == true){
        speed = !spd;
        link = !lnk;
    }
}
*/

int setFIAPStorage(void )
{
    LocalFileSystem local("local");
    FILE *fp;
    fp = fopen("/local/storage.txt", "r");
    if(fp == NULL){
        return -1;
    }
    fgets(storage_url, STORAGE_URL_SIZE, fp);
    fiap.setStorage(storage_url);
    fiap.setMode(true);
    fclose(fp);
    
    fiap.debug_mode=FIAP_DEBUG_MODE;
    return 0;
}

int fetchFIAP(void )
{
    element[0].cid = POINT_ID_0;

    if(fiap.fetch_last_data(element) != 0){
        return -1;
    }

    i = 0;//now fixed value
    printf("%s, %s, %2d-%2d-%2d %2d:%2d:%2d %s\n",
           element[i].cid,  element[i].value,
           element[i].year, element[i].month, element[i].day, 
           element[i].hour, element[i].minute, element[i].second,
           element[i].timezone);
           
    return 0;
}

/* stop USB Interface */
#define USR_POWERDOWN (0x104)
int semihost_powerdown() {
    uint32_t arg;
    return __semihost(USR_POWERDOWN, &arg);
}

/** Frequency Control
 * @see ClockControl/ClockControl.cpp by Michael Wei
 */
void setPLL0Frequency(unsigned char clkSrc, unsigned short M, unsigned char N)
{
      LPC_SC->CLKSRCSEL = clkSrc;
      LPC_SC->PLL0CFG   = (((unsigned int)N-1) << 16) | M-1;
      LPC_SC->PLL0CON   = 0x01;             
      LPC_SC->PLL0FEED  = 0xAA;
      LPC_SC->PLL0FEED  = 0x55;
      while (!(LPC_SC->PLL0STAT & (1<<26)));
    
      LPC_SC->PLL0CON   = 0x03;
      LPC_SC->PLL0FEED  = 0xAA;
      LPC_SC->PLL0FEED  = 0x55;
}

unsigned int setSystemFrequency(unsigned char clkDivider, unsigned char clkSrc, unsigned short M, unsigned char N)
{
    setPLL0Frequency(clkSrc, M, N);
    LPC_SC->CCLKCFG = clkDivider - 1;
    SystemCoreClockUpdate();
    return SystemCoreClock;
}

int main()
{
    setSystemFrequency(0x3, 0x1, 6, 1);//clock down from 96MHz to 48MHz
    led1 = led3 = led4 = speed = link = 0;
    pc.baud(USB_PAUD_RATE);

    //if you set LEDs for LAN indicator in real time.
    //interval : 0.1 = 100ms
    //flipper.attach(&myflip, 0.1);

    eth.init(); //Use DHCP
    eth.connect();
    printf("IP: %s\r\n", eth.getIPAddress());
    
    led1 = 1;
    if(setFIAPStorage() != 0) {
        printf("Check if storage.txt exists in mbed memory.\r\n");
        return -1;
    }
    led1 = 0;

    exitTimer = RETRY_TIMES_ON_ERROR;
    while(exitTimer > 0) {
        led3 = spd;
        led4 = lnk;
        if(USE_RJ45_LAMP == true){
            speed = !spd;
            link = !lnk;
        }
        if (led4 == 1 || led3 == 1) {
            exitTimer--;
            wait(WAIT_NEXT_FETCH);
            continue;
        }

        if(fetchFIAP() != 0){
            led1 = 1;
            exitTimer--;
        } else {
            led1 = 0;
            exitTimer = RETRY_TIMES_ON_ERROR;//initialize
        }
        wait(WAIT_NEXT_FETCH);
    }
    eth.disconnect();
    if(FIAP_DEBUG_MODE == true){
        printf("Disconnected because of error\r\n");
    }

    return -1;
}