Simplest UPnP basic device example. This program to run UPnP basic device on the mbed.
Dependencies: NyFileSystems libMiMic mbed-rtos mbed
Fork of MbedFileServer by
This is UPnP BasicDevice by MiMicSDK. BasicDevice is most simplest UPnP device.
How To Use
- Write firmware to your mbed.
- Reset mbed and update firmware.
- Check your "network computer" folder by Exproler. (in case of windows.)
- You can find UPnPBasicDevice hosted by mbed. (If you can not find device then reflesh exploler information.)
- If you double-click UPnPBasicDevice, the presentation page on device is opened.
Function
- AutoIP
- SSDP
- DeviceDescription hosting (Httpd)
- SOAP (not implemented)
- GENA (not implemented)
Source Code
It is simple and short!
/** * @file * Simplest UPnP basic device.<br/> * This program is upnp:BasicDeveice:1 template. * * <p> * After starting program, check "network" by Exproler. * MiMic basic device will be appeared. * </p> */ #include "mbed.h" #include "rtos.h" #include "SDFileSystem.h" #include "mimic.h" #include "utils/PlatformInfo.h" #include "fsdata.h" Net* net; /** * Httpd for UPnPService and presentation. */ class UPnPBasicDeviceHttpd:public MiMic::Httpd { private: ModUPnPDevice modupnp; ModRomFiles modromfs; //ROM file module public: UPnPBasicDeviceHttpd(NetConfig& i_cfg):Httpd(i_cfg.getHttpPort()) { //prepare fs data (presentation.html,icon,image.) this->modromfs.setParam("rom",FSDATA,3); //bind upnp service to module. this->modupnp.setParam(*net); } virtual void onRequest(HttpdConnection& i_connection) { //try to ModRomFS module. for icon,images. if(this->modromfs.execute(i_connection)){ return; } //try to UPnP service. for descriptions. if(this->modupnp.execute(i_connection)){ return; } //Otherwise, Send the redirect response to /rom/index.html i_connection.sendHeader(302, "text/html", "Status: 302:Moved Temporarily\r\n" "Location: /rom/index.html\r\n"); } }; NetConfig cfg; //create network configulation int main() { net=new Net();//Net constructor must be created after started RTOS //Prepare configulation. cfg.setUPnPIcon(64,64,8,"image/png","/rom/icon.png");//set upnp icon address cfg.setUPnPUdn(0xe29f7103,0x4ba2,0x01e0,0); //set application timebase-uuid time and sequence field. cfg.setFriendlyName("UPnPBasicDevice(LPC176x)"); //set friendly name cfg.setUPnPPresentationURL("/rom/index.html"); //set presentationURL cfg.setZeroconf(true);//AutoIP enable UPnPBasicDeviceHttpd httpd(cfg); //create a httpd instance. net->start(cfg); httpd.loop(); //start httpd loop. return 0; }
I think that this code helps to make Web connection to your application easily.
main.cpp@2:28fd59d6be76, 2013-04-06 (annotated)
- Committer:
- nyatla
- Date:
- Sat Apr 06 15:37:21 2013 +0000
- Revision:
- 2:28fd59d6be76
- Parent:
- 0:ec1e45489427
- Child:
- 3:77431c2bd9cb
fix comment;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
nyatla | 0:ec1e45489427 | 1 | #include "mimic.h" |
nyatla | 0:ec1e45489427 | 2 | |
nyatla | 0:ec1e45489427 | 3 | |
nyatla | 0:ec1e45489427 | 4 | |
nyatla | 0:ec1e45489427 | 5 | /** |
nyatla | 0:ec1e45489427 | 6 | * MiMic RemoteMCU httpd.<br/> |
nyatla | 0:ec1e45489427 | 7 | * <p>Service list</p> |
nyatla | 0:ec1e45489427 | 8 | * <pre> |
nyatla | 0:ec1e45489427 | 9 | * /rom/ - romfs |
nyatla | 0:ec1e45489427 | 10 | * /setup/ - MiMic configulation REST API. |
nyatla | 0:ec1e45489427 | 11 | * /local/ - mbed LocalFileSystem |
nyatla | 0:ec1e45489427 | 12 | * /mvm/ - MiMicVM REST API |
nyatla | 0:ec1e45489427 | 13 | * </pre> |
nyatla | 0:ec1e45489427 | 14 | */ |
nyatla | 0:ec1e45489427 | 15 | |
nyatla | 0:ec1e45489427 | 16 | class MiMicRemoteMcu:public MiMic::Httpd |
nyatla | 0:ec1e45489427 | 17 | { |
nyatla | 0:ec1e45489427 | 18 | private: |
nyatla | 0:ec1e45489427 | 19 | ModUrl modurl; //basic URL parser |
nyatla | 0:ec1e45489427 | 20 | public: |
nyatla | 0:ec1e45489427 | 21 | MiMicRemoteMcu():Httpd(80) |
nyatla | 0:ec1e45489427 | 22 | { |
nyatla | 0:ec1e45489427 | 23 | } |
nyatla | 0:ec1e45489427 | 24 | virtual void onRequest(HttpdConnection& i_connection) |
nyatla | 0:ec1e45489427 | 25 | { |
nyatla | 0:ec1e45489427 | 26 | char url[32]; |
nyatla | 0:ec1e45489427 | 27 | int method; |
nyatla | 2:28fd59d6be76 | 28 | //call ModUrl module. |
nyatla | 0:ec1e45489427 | 29 | if(this->modurl.execute(i_connection,url,32,&method)){ |
nyatla | 2:28fd59d6be76 | 30 | //send 200 OK and requested URL |
nyatla | 0:ec1e45489427 | 31 | i_connection.sendHeader(200,"text/html",NULL); |
nyatla | 0:ec1e45489427 | 32 | i_connection.sendBodyF("<html><body>Your Request path is %s.</body></html>",url); |
nyatla | 0:ec1e45489427 | 33 | return; |
nyatla | 0:ec1e45489427 | 34 | } |
nyatla | 0:ec1e45489427 | 35 | return; |
nyatla | 0:ec1e45489427 | 36 | } |
nyatla | 0:ec1e45489427 | 37 | }; |
nyatla | 0:ec1e45489427 | 38 | |
nyatla | 0:ec1e45489427 | 39 | int main() |
nyatla | 0:ec1e45489427 | 40 | { |
nyatla | 0:ec1e45489427 | 41 | NetConfig cfg; //create network configulation |
nyatla | 0:ec1e45489427 | 42 | Net net(cfg); //create a net instance. |
nyatla | 0:ec1e45489427 | 43 | MiMicRemoteMcu httpd; //create a httpd instance. |
nyatla | 0:ec1e45489427 | 44 | httpd.loop(); //start httpd loop. |
nyatla | 0:ec1e45489427 | 45 | return 0; |
nyatla | 0:ec1e45489427 | 46 | } |