Httpdを非同期で動かすサンプル
Dependencies: NyFileSystems libMiMic mbed-rtos mbed
Fork of MiMicSimpleHttpd by
main.cpp@5:00daa91538bc, 2013-05-16 (annotated)
- Committer:
- nyatla
- Date:
- Thu May 16 16:07:17 2013 +0000
- Revision:
- 5:00daa91538bc
- Parent:
- 2:28fd59d6be76
- Child:
- 6:bcf3fe4d0ba1
initial version
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
nyatla | 0:ec1e45489427 | 1 | #include "mimic.h" |
nyatla | 5:00daa91538bc | 2 | #include "mbed.h" |
nyatla | 5:00daa91538bc | 3 | #include "InOut.h" |
nyatla | 5:00daa91538bc | 4 | LocalFileSystem2 lf("local"); |
nyatla | 0:ec1e45489427 | 5 | |
nyatla | 0:ec1e45489427 | 6 | |
nyatla | 5:00daa91538bc | 7 | class RedIoPin: public InOut |
nyatla | 5:00daa91538bc | 8 | { |
nyatla | 5:00daa91538bc | 9 | private: |
nyatla | 5:00daa91538bc | 10 | int _v; |
nyatla | 5:00daa91538bc | 11 | public: |
nyatla | 5:00daa91538bc | 12 | RedIoPin(char pin):InOut(pin,0) |
nyatla | 5:00daa91538bc | 13 | { |
nyatla | 5:00daa91538bc | 14 | //pull down |
nyatla | 5:00daa91538bc | 15 | this->mode(1);//pull down |
nyatla | 5:00daa91538bc | 16 | this->_v=0; |
nyatla | 5:00daa91538bc | 17 | this->write(0); |
nyatla | 5:00daa91538bc | 18 | } |
nyatla | 5:00daa91538bc | 19 | /** |
nyatla | 5:00daa91538bc | 20 | * set RedStoneValue RedStone value |
nyatla | 5:00daa91538bc | 21 | * @return |
nyatla | 5:00daa91538bc | 22 | * red stone value. |
nyatla | 5:00daa91538bc | 23 | */ |
nyatla | 5:00daa91538bc | 24 | bool setRedValue(int v) |
nyatla | 5:00daa91538bc | 25 | { |
nyatla | 5:00daa91538bc | 26 | //read real pin status,direction=in |
nyatla | 5:00daa91538bc | 27 | this->setDirection(false); |
nyatla | 5:00daa91538bc | 28 | if(this->read()!=0) |
nyatla | 5:00daa91538bc | 29 | { //real pin==1:out=1,in=0 |
nyatla | 5:00daa91538bc | 30 | this->_v=1; |
nyatla | 5:00daa91538bc | 31 | this->write(0); |
nyatla | 5:00daa91538bc | 32 | }else{ |
nyatla | 5:00daa91538bc | 33 | //real pin==0: direction=out,out=redstone value |
nyatla | 5:00daa91538bc | 34 | this->setDirection(true); |
nyatla | 5:00daa91538bc | 35 | int vt=v!=0?1:0; |
nyatla | 5:00daa91538bc | 36 | this->write(vt); |
nyatla | 5:00daa91538bc | 37 | this->_v=vt; |
nyatla | 5:00daa91538bc | 38 | } |
nyatla | 5:00daa91538bc | 39 | return this->_v; |
nyatla | 5:00daa91538bc | 40 | } |
nyatla | 5:00daa91538bc | 41 | }; |
nyatla | 5:00daa91538bc | 42 | class RedIo |
nyatla | 5:00daa91538bc | 43 | { |
nyatla | 5:00daa91538bc | 44 | public: |
nyatla | 5:00daa91538bc | 45 | RedIoPin* io[30]; |
nyatla | 5:00daa91538bc | 46 | RedIo() |
nyatla | 5:00daa91538bc | 47 | { |
nyatla | 5:00daa91538bc | 48 | 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}; |
nyatla | 5:00daa91538bc | 49 | for(int i=0;i<30;i++){ |
nyatla | 5:00daa91538bc | 50 | this->io[i]=new RedIoPin(d[i]); |
nyatla | 5:00daa91538bc | 51 | } |
nyatla | 5:00daa91538bc | 52 | } |
nyatla | 5:00daa91538bc | 53 | virtual ~RedIo() |
nyatla | 5:00daa91538bc | 54 | { |
nyatla | 5:00daa91538bc | 55 | for(int i=0;i<30;i++){ |
nyatla | 5:00daa91538bc | 56 | delete this->io[i]; |
nyatla | 5:00daa91538bc | 57 | } |
nyatla | 5:00daa91538bc | 58 | } |
nyatla | 5:00daa91538bc | 59 | unsigned int update(unsigned int v) |
nyatla | 5:00daa91538bc | 60 | { |
nyatla | 5:00daa91538bc | 61 | unsigned int ret=0; |
nyatla | 5:00daa91538bc | 62 | for(int i=0;i<30;i++){ |
nyatla | 5:00daa91538bc | 63 | ret=ret<<1; |
nyatla | 5:00daa91538bc | 64 | ret=ret | (this->io[29-i]->setRedValue((v>>(29-i))&0x00000001)?1:0); |
nyatla | 5:00daa91538bc | 65 | } |
nyatla | 5:00daa91538bc | 66 | return ret; |
nyatla | 5:00daa91538bc | 67 | } |
nyatla | 5:00daa91538bc | 68 | }; |
nyatla | 0:ec1e45489427 | 69 | |
nyatla | 0:ec1e45489427 | 70 | class MiMicRemoteMcu:public MiMic::Httpd |
nyatla | 0:ec1e45489427 | 71 | { |
nyatla | 0:ec1e45489427 | 72 | private: |
nyatla | 0:ec1e45489427 | 73 | ModUrl modurl; //basic URL parser |
nyatla | 5:00daa91538bc | 74 | RedIo rsio; |
nyatla | 0:ec1e45489427 | 75 | public: |
nyatla | 0:ec1e45489427 | 76 | MiMicRemoteMcu():Httpd(80) |
nyatla | 0:ec1e45489427 | 77 | { |
nyatla | 0:ec1e45489427 | 78 | } |
nyatla | 0:ec1e45489427 | 79 | virtual void onRequest(HttpdConnection& i_connection) |
nyatla | 0:ec1e45489427 | 80 | { |
nyatla | 5:00daa91538bc | 81 | char url[64]; |
nyatla | 0:ec1e45489427 | 82 | int method; |
nyatla | 5:00daa91538bc | 83 | |
nyatla | 2:28fd59d6be76 | 84 | //call ModUrl module. |
nyatla | 5:00daa91538bc | 85 | if(!this->modurl.execute(i_connection,url,64,&method)){ |
nyatla | 5:00daa91538bc | 86 | i_connection.sendHeader(400,"text/html",NULL); |
nyatla | 5:00daa91538bc | 87 | i_connection.sendBodyF("<html><body>Bad Request.</body></html>",url); |
nyatla | 0:ec1e45489427 | 88 | return; |
nyatla | 0:ec1e45489427 | 89 | } |
nyatla | 5:00daa91538bc | 90 | UrlReader r(url); |
nyatla | 5:00daa91538bc | 91 | if(!r.isPathEqual("/rsb/")){ |
nyatla | 5:00daa91538bc | 92 | i_connection.sendHeader(403,"text/html",NULL); |
nyatla | 5:00daa91538bc | 93 | i_connection.sendBodyF("<html><body>Path must be '/rsb/?p=[:unsigned int:]'</body></html>",url); |
nyatla | 5:00daa91538bc | 94 | return; |
nyatla | 5:00daa91538bc | 95 | } |
nyatla | 5:00daa91538bc | 96 | unsigned int rsv; |
nyatla | 5:00daa91538bc | 97 | if(!r.getQueryUInt("p",rsv)){ |
nyatla | 5:00daa91538bc | 98 | i_connection.sendHeader(400,"text/html",NULL); |
nyatla | 5:00daa91538bc | 99 | i_connection.sendBodyF("<html><body>p val must be unsigned int</body></html>",url); |
nyatla | 5:00daa91538bc | 100 | return; |
nyatla | 5:00daa91538bc | 101 | } |
nyatla | 5:00daa91538bc | 102 | i_connection.sendHeader(200,"text/html",NULL); |
nyatla | 5:00daa91538bc | 103 | i_connection.sendBodyF("%u",rsio.update(rsv)); |
nyatla | 0:ec1e45489427 | 104 | return; |
nyatla | 0:ec1e45489427 | 105 | } |
nyatla | 0:ec1e45489427 | 106 | }; |
nyatla | 0:ec1e45489427 | 107 | |
nyatla | 0:ec1e45489427 | 108 | int main() |
nyatla | 0:ec1e45489427 | 109 | { |
nyatla | 0:ec1e45489427 | 110 | NetConfig cfg; //create network configulation |
nyatla | 5:00daa91538bc | 111 | //try to override setting by local file. |
nyatla | 5:00daa91538bc | 112 | cfg.loadFromFile("/local/mimic.cfg"); |
nyatla | 5:00daa91538bc | 113 | |
nyatla | 0:ec1e45489427 | 114 | Net net(cfg); //create a net instance. |
nyatla | 0:ec1e45489427 | 115 | MiMicRemoteMcu httpd; //create a httpd instance. |
nyatla | 0:ec1e45489427 | 116 | httpd.loop(); //start httpd loop. |
nyatla | 0:ec1e45489427 | 117 | return 0; |
nyatla | 0:ec1e45489427 | 118 | } |