Fx0とLEDを使うサンプルです。Ethernet用です。

Dependencies:   EthernetNetIf HTTPServer RPCInterface mbed

Fork of ethernet_test_http_2 by Yasushi TAUCHI

main.cpp

Committer:
komoritan
Date:
2015-02-14
Revision:
2:7e3c2cd97026
Parent:
1:09c09f50c156

File content as of revision 2:7e3c2cd97026:

/* (c) KDDI Technology
 *
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

#include "mbed.h"
#include "EthernetNetIf.h"
#include "HTTPServer.h"
#include "RPCFunction.h"

DigitalOut led1(LED1,"led1");
DigitalOut led2(LED2,"led2");
DigitalOut led3(LED3,"led3");
DigitalOut led4(LED4,"led4");

#if 1
/*
 * Use DHCP
 */
        EthernetNetIf ethif;
#else
/*
 * Use "static IP address" (Parameters:IP, Subnet mask, Gateway, DNS)
 */
        EthernetNetIf ethif(IpAddr(xxx,xxx,xxx,xxx), IpAddr(xxx,xxx,xxx,xxx), IpAddr(xxx,xxx,xxx,xxx), IpAddr(xxx,xxx,xxx,xxx));
#endif
    
    HTTPServer server;
    LocalFileSystem local("local");

    /* RFC Interface */
    // inputデータに従い、LED1~4の点灯・消灯を設定する。inputデータはカンマ区切りを想定。
    void doSetLed(char* input, char* output);
    //RPC Interfaceを宣言(setLed:外部IF公開名、doSetLed:外部からのコール後、処理する関数名)
    RPCFunction test(&doSetLed, "setLed");
    // LEDの点灯・消灯情報を取得可能な外部IF
    void doGetLed(char* input, char* output);
    RPCFunction getdata(&doGetLed, "getLed");

    /* locan func */
    void _createOutputString(char* output);

int main(void) {

    if (ethif.setup()) {
        error("Ethernet setup failed.");
        return 1;
    }
    
    wait(1);
    server.addHandler<RPCHandler>("/rpc");
    FSHandler::mount("/local", "/");
    server.addHandler<FSHandler>("/");
    server.bind(80);
    while (1) {
        Net::poll();
    }
}

// Led1-4の点灯・消灯処理
void doSetLed(char* input, char* output) {

  char *tok;
  char s2[] = ",";  /* カンマで区切られていることを想定 */
  int cnt = 1;
  tok = strtok( input, "," );
  
  // カンマ区切りの文字列を取得し、1:LED点灯、0(1以外):消灯とする
  while( tok != NULL ){
    int ret;
    int setled = 0;
    ret = strcmp( tok, "1" );
    if (ret == 0) {
      setled = 1;
    } else {
      setled = 0;
    }
    switch (cnt) {
      case 1:
          led1 = setled;
          break;
      case 2:
          led2 = setled;
          break;
      case 3:
          led3 = setled;
          break;
      case 4:
          led4 = setled;
          break;
      default:
          break;          
    }
    cnt++;
    tok = strtok( NULL, s2 );  /* 2回目以降 */
  }

  // 完了時には文字列"finish"を返却する
  _createOutputString(output);
}

// LEDの点灯情報をJSONデータで返却する
void doGetLed(char* input, char* output) {

  _createOutputString(output);
}

// outputにJSON形式の文字列を設定する
void _createOutputString(char* output) {

  sprintf(output, "{\"led1\":%d, \"led2\":%d, \"led3\":%d, \"led4\":%d}",(int)led1, (int)led2, (int)led3, (int)led4);
}