MiMic RemoteMCU for mbed. This program provides MCU control API over REST API. It can control MCU from Javascript,PHP or any HTTP rest client directly. And, The application has self development environment.

Dependencies:   libMiMic mbed-rtos mbed NySDFileSystem

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "rtos.h"
00003 #include "SDFileSystem.h"
00004 #include "mimic.h"
00005 #include "fsdata.h"
00006 
00007 /**
00008  * local filesystem support.
00009  * MiMic::LocalFileSystem2 do not freeze on LPCXpresso.
00010  */
00011 LocalFileSystem2 lf("local");
00012 SDFileSystem sd(p5, p6, p7, p8,"sd");
00013 
00014 Net* net;
00015 
00016 
00017 /**
00018  * MiMic RemoteMCU httpd.<br/>
00019  * <p>Service list</p>
00020  * <pre>
00021  * /rom/ - romfs
00022  * /setup/ - MiMic configulation REST API.
00023  * /local/ - mbed LocalFileSystem
00024  * /mvm/   - MiMicVM REST API
00025  * </pre>
00026  */
00027 class MiMicRemoteMcu:public MiMic::Httpd
00028 {
00029 private:
00030     ModRomFiles modromfs; //ROM file module
00031     ModMiMicSetting mimicsetting; //mimic setting API
00032     ModRemoteMcu remotemcu; // remotemcu API
00033     ModLocalFileSystem modlocal; //FileSystem mounter
00034     ModLocalFileSystem modsd; //FileSystem mounter
00035     ModFileIo modfio;   //fileupload API
00036     ModUPnPDevice modupnp;
00037 public:
00038     MiMicRemoteMcu(NetConfig& i_cfg):Httpd(i_cfg.getHttpPort())
00039     {
00040         this->modromfs.setParam("rom",RMCU_FSDATA,18);
00041         this->mimicsetting.setParam("setup");
00042         this->remotemcu.setParam("mvm");
00043         this->modlocal.setParam("local");
00044         this->modsd.setParam("sd",ModLocalFileSystem::FST_SDFATFS);
00045         this->modfio.setParam("fio");
00046         this->modupnp.setParam(*net);
00047     }
00048     /**
00049      * Http handler
00050      */
00051     virtual void onRequest(HttpdConnection& i_connection)
00052     {
00053         //try to ModRomFS module.
00054         if(this->modromfs.execute(i_connection)){
00055             return;
00056         }
00057         //try to ModMiMicSetting module.
00058         if(this->mimicsetting.execute(i_connection)){
00059             return;
00060         }
00061         //try to ModRemoteMcu module.
00062         if(this->remotemcu.execute(i_connection)){
00063             return;
00064         }
00065         //try to ModLocalFileSystem
00066         if(this->modlocal.execute(i_connection)){
00067             return;
00068         }
00069         //try to ModLocalFileSystem(SD)
00070         if(this->modsd.execute(i_connection)){
00071             return;
00072         }
00073         //try to FileUpload
00074         if(this->modfio.execute(i_connection)){
00075             return;
00076         }
00077         //try to UPnP
00078         if(this->modupnp.execute(i_connection)){
00079             return;
00080         }
00081         
00082         //Otherwise, Send the redirect response to /rom/index.html
00083         i_connection.sendHeader(302,
00084             "text/html",
00085             "Status: 302:Moved Temporarily\r\n"
00086             "Location: /rom/index.html\r\n");        
00087         return;
00088     }
00089 };
00090 
00091 
00092 NetConfig cfg; //create network configulation  with onchip-setting.
00093 int main()
00094 {
00095     net=new Net();//Net constructor must be created after started RTOS
00096     //Prepare configulation.
00097     cfg.setUPnPIcon(64,64,8,"image/png","/rom/icon.png");
00098     cfg.setUPnPUdn(0xe29f7101,0x4ba2,0x01e0,0);
00099     cfg.setFriendlyName("MiMicRemoteMCU");
00100     cfg.setUPnPPresentationURL("/rom/index.html");
00101 
00102     //try to override setting by local file.
00103     if(!cfg.loadFromFile("/local/mimic.cfg")){
00104         Thread::wait(2000);//wait for SD card initialization.
00105         cfg.loadFromFile("/sd/mimic.cfg");
00106     }
00107     
00108     MiMicRemoteMcu httpd(cfg); //create a httpd instance.
00109     net->start(cfg);
00110     httpd.loop();  //start httpd loop.
00111     return 0;
00112 }