MiMicSDK Websocket module sample program.

Dependencies:   NyFileSystems libMiMic mbed-rtos mbed

Fork of UPnPBasicDevice by Ryo Iizuka

This is Websocket server.

WebSocketのサンプルです。 MiMicSDKのWebsocketはhttpdの1モジュールとして動作するので、ファイルサーバ等と一緒に動かすことが出来ます。

ファームウェアを書き込んだ後にブラウザから "http://192.168.128.39/" にアクセスすると、AIN1のデータをリアルタイムに表示するページが開きます。

Committer:
nyatla
Date:
Fri Sep 27 12:48:30 2013 +0000
Revision:
23:6340bfc0bfe3
Parent:
21:7dbe2100b419
Child:
24:83a1d2bc8709
first commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nyatla 4:0a280ed0a848 1 /**
nyatla 20:4b0b449ddb12 2 * @file
nyatla 20:4b0b449ddb12 3 * Simplest UPnP basic device.<br/>
nyatla 20:4b0b449ddb12 4 * This program is upnp:BasicDeveice:1 template.
nyatla 20:4b0b449ddb12 5 *
nyatla 20:4b0b449ddb12 6 * <p>
nyatla 20:4b0b449ddb12 7 * After starting program, check "network" by Exproler.
nyatla 20:4b0b449ddb12 8 * MiMic basic device will be appeared.
nyatla 20:4b0b449ddb12 9 * </p>
nyatla 4:0a280ed0a848 10 */
nyatla 5:6a2a1644ea2c 11 #include "mbed.h"
nyatla 19:66d729b94d16 12 #include "rtos.h"
nyatla 5:6a2a1644ea2c 13 #include "SDFileSystem.h"
nyatla 0:ec1e45489427 14 #include "mimic.h"
nyatla 10:80c05810f911 15 #include "utils/PlatformInfo.h"
nyatla 19:66d729b94d16 16 #include "fsdata.h"
nyatla 19:66d729b94d16 17
nyatla 0:ec1e45489427 18
nyatla 23:6340bfc0bfe3 19 //local filesystem
nyatla 23:6340bfc0bfe3 20 LocalFileSystem2 lf("local");
nyatla 23:6340bfc0bfe3 21
nyatla 23:6340bfc0bfe3 22 NetConfig cfg; //create network configulation
nyatla 19:66d729b94d16 23 Net* net;
nyatla 19:66d729b94d16 24
nyatla 0:ec1e45489427 25 /**
nyatla 20:4b0b449ddb12 26 * Httpd for UPnPService and presentation.
nyatla 0:ec1e45489427 27 */
nyatla 23:6340bfc0bfe3 28 class WebSocketHttpd:public MiMic::Httpd
nyatla 0:ec1e45489427 29 {
nyatla 0:ec1e45489427 30 private:
nyatla 23:6340bfc0bfe3 31 ModLocalFileSystem modlocal;
nyatla 23:6340bfc0bfe3 32 ModWebSocket modwebsocket;
nyatla 20:4b0b449ddb12 33 ModRomFiles modromfs; //ROM file module
nyatla 0:ec1e45489427 34 public:
nyatla 23:6340bfc0bfe3 35 WebSocketHttpd(NetConfig& i_cfg):Httpd(i_cfg.getHttpPort())
nyatla 0:ec1e45489427 36 {
nyatla 20:4b0b449ddb12 37 //prepare fs data (presentation.html,icon,image.)
nyatla 20:4b0b449ddb12 38 this->modromfs.setParam("rom",FSDATA,3);
nyatla 23:6340bfc0bfe3 39 this->modlocal.setParam("local");
nyatla 23:6340bfc0bfe3 40 //bind websocket module.
nyatla 23:6340bfc0bfe3 41 this->modwebsocket.setParam("ws");
nyatla 0:ec1e45489427 42 }
nyatla 0:ec1e45489427 43 virtual void onRequest(HttpdConnection& i_connection)
nyatla 0:ec1e45489427 44 {
nyatla 20:4b0b449ddb12 45 //try to ModRomFS module. for icon,images.
nyatla 19:66d729b94d16 46 if(this->modromfs.execute(i_connection)){
nyatla 19:66d729b94d16 47 return;
nyatla 23:6340bfc0bfe3 48 }
nyatla 23:6340bfc0bfe3 49 //try to ModLocalFileSystem
nyatla 23:6340bfc0bfe3 50 if(this->modlocal.execute(i_connection)){
nyatla 23:6340bfc0bfe3 51 return;
nyatla 23:6340bfc0bfe3 52 }
nyatla 23:6340bfc0bfe3 53 //try to Websocket service.
nyatla 23:6340bfc0bfe3 54 if(this->modwebsocket.execute(i_connection)){
nyatla 23:6340bfc0bfe3 55 //send AIN1 value every 10ms.
nyatla 23:6340bfc0bfe3 56 AnalogIn ain(p20);
nyatla 23:6340bfc0bfe3 57 do{
nyatla 23:6340bfc0bfe3 58 Thread::wait(20);
nyatla 23:6340bfc0bfe3 59 }while(this->modwebsocket.writeF("%d,",(int)(ain*4096)));
nyatla 23:6340bfc0bfe3 60 this->modwebsocket.close();
nyatla 19:66d729b94d16 61 return;
nyatla 19:66d729b94d16 62 }
nyatla 20:4b0b449ddb12 63 //Otherwise, Send the redirect response to /rom/index.html
nyatla 20:4b0b449ddb12 64 i_connection.sendHeader(302,
nyatla 20:4b0b449ddb12 65 "text/html",
nyatla 20:4b0b449ddb12 66 "Status: 302:Moved Temporarily\r\n"
nyatla 20:4b0b449ddb12 67 "Location: /rom/index.html\r\n");
nyatla 0:ec1e45489427 68 }
nyatla 0:ec1e45489427 69 };
nyatla 0:ec1e45489427 70
nyatla 12:218b57d9a6d4 71
nyatla 0:ec1e45489427 72 int main()
nyatla 0:ec1e45489427 73 {
nyatla 19:66d729b94d16 74 net=new Net();//Net constructor must be created after started RTOS
nyatla 23:6340bfc0bfe3 75 // manual setting
nyatla 23:6340bfc0bfe3 76 cfg.setIpAddr(192,168,128,39);
nyatla 23:6340bfc0bfe3 77 cfg.setNetMask(255,255,255,0);
nyatla 23:6340bfc0bfe3 78 cfg.setGateway(192,168,128,254);
nyatla 12:218b57d9a6d4 79
nyatla 23:6340bfc0bfe3 80 WebSocketHttpd httpd(cfg); //create a httpd instance.
nyatla 19:66d729b94d16 81 net->start(cfg);
nyatla 0:ec1e45489427 82 httpd.loop(); //start httpd loop.
nyatla 0:ec1e45489427 83 return 0;
nyatla 0:ec1e45489427 84 }