Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: NyFileSystems libMiMic mbed-rtos mbed
Fork of MiMicSimpleHttpd by
Diff: main.cpp
- Revision:
- 5:00daa91538bc
- Parent:
- 2:28fd59d6be76
- Child:
- 6:bcf3fe4d0ba1
--- a/main.cpp Tue May 14 13:14:42 2013 +0000
+++ b/main.cpp Thu May 16 16:07:17 2013 +0000
@@ -1,37 +1,106 @@
#include "mimic.h"
-
+#include "mbed.h"
+#include "InOut.h"
+LocalFileSystem2 lf("local");
-/**
- * MiMic RemoteMCU httpd.<br/>
- * <p>Service list</p>
- * <pre>
- * /rom/ - romfs
- * /setup/ - MiMic configulation REST API.
- * /local/ - mbed LocalFileSystem
- * /mvm/ - MiMicVM REST API
- * </pre>
- */
+class RedIoPin: public InOut
+{
+private:
+ int _v;
+public:
+ RedIoPin(char pin):InOut(pin,0)
+ {
+ //pull down
+ this->mode(1);//pull down
+ this->_v=0;
+ this->write(0);
+ }
+ /**
+ * set RedStoneValue RedStone value
+ * @return
+ * red stone value.
+ */
+ bool setRedValue(int v)
+ {
+ //read real pin status,direction=in
+ this->setDirection(false);
+ if(this->read()!=0)
+ { //real pin==1:out=1,in=0
+ this->_v=1;
+ this->write(0);
+ }else{
+ //real pin==0: direction=out,out=redstone value
+ this->setDirection(true);
+ int vt=v!=0?1:0;
+ this->write(vt);
+ this->_v=vt;
+ }
+ return this->_v;
+ }
+};
+class RedIo
+{
+public:
+ RedIoPin* io[30];
+ RedIo()
+ {
+ const char d[]={LED1,LED2,LED3,LED4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30};
+ for(int i=0;i<30;i++){
+ this->io[i]=new RedIoPin(d[i]);
+ }
+ }
+ virtual ~RedIo()
+ {
+ for(int i=0;i<30;i++){
+ delete this->io[i];
+ }
+ }
+ unsigned int update(unsigned int v)
+ {
+ unsigned int ret=0;
+ for(int i=0;i<30;i++){
+ ret=ret<<1;
+ ret=ret | (this->io[29-i]->setRedValue((v>>(29-i))&0x00000001)?1:0);
+ }
+ return ret;
+ }
+};
class MiMicRemoteMcu:public MiMic::Httpd
{
private:
ModUrl modurl; //basic URL parser
+ RedIo rsio;
public:
MiMicRemoteMcu():Httpd(80)
{
}
virtual void onRequest(HttpdConnection& i_connection)
{
- char url[32];
+ char url[64];
int method;
+
//call ModUrl module.
- if(this->modurl.execute(i_connection,url,32,&method)){
- //send 200 OK and requested URL
- i_connection.sendHeader(200,"text/html",NULL);
- i_connection.sendBodyF("<html><body>Your Request path is %s.</body></html>",url);
+ if(!this->modurl.execute(i_connection,url,64,&method)){
+ i_connection.sendHeader(400,"text/html",NULL);
+ i_connection.sendBodyF("<html><body>Bad Request.</body></html>",url);
return;
}
+ UrlReader r(url);
+ if(!r.isPathEqual("/rsb/")){
+ i_connection.sendHeader(403,"text/html",NULL);
+ i_connection.sendBodyF("<html><body>Path must be '/rsb/?p=[:unsigned int:]'</body></html>",url);
+ return;
+ }
+ unsigned int rsv;
+ if(!r.getQueryUInt("p",rsv)){
+ i_connection.sendHeader(400,"text/html",NULL);
+ i_connection.sendBodyF("<html><body>p val must be unsigned int</body></html>",url);
+ return;
+ }
+ i_connection.sendHeader(200,"text/html",NULL);
+ i_connection.sendBodyF("%u",rsio.update(rsv));
return;
}
};
@@ -39,6 +108,9 @@
int main()
{
NetConfig cfg; //create network configulation
+ //try to override setting by local file.
+ cfg.loadFromFile("/local/mimic.cfg");
+
Net net(cfg); //create a net instance.
MiMicRemoteMcu httpd; //create a httpd instance.
httpd.loop(); //start httpd loop.
