Minecraft extension
Dependencies: NySDFileSystem libMiMic mbed-rtos mbed registers
Fork of MiMicSimpleHttpd by
What is this?
This application works as a converter of the electronic circuit and Redstone circuit.
Getting started
http://nyatla.jp/mimic/wp/?p=617
main.cpp@6:5909618469f8, 2013-05-17 (annotated)
- Committer:
- nyatla
- Date:
- Fri May 17 05:54:52 2013 +0000
- Revision:
- 6:5909618469f8
- Parent:
- 5:00daa91538bc
- Child:
- 7:7720763e8918
bugfix
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 | 6:5909618469f8 | 10 | bool _v_pin; |
nyatla | 6:5909618469f8 | 11 | bool _v_rs; |
nyatla | 5:00daa91538bc | 12 | public: |
nyatla | 5:00daa91538bc | 13 | RedIoPin(char pin):InOut(pin,0) |
nyatla | 5:00daa91538bc | 14 | { |
nyatla | 5:00daa91538bc | 15 | //pull down |
nyatla | 5:00daa91538bc | 16 | this->mode(1);//pull down |
nyatla | 6:5909618469f8 | 17 | //read from pin |
nyatla | 6:5909618469f8 | 18 | this->setDirection(true); |
nyatla | 5:00daa91538bc | 19 | this->write(0); |
nyatla | 6:5909618469f8 | 20 | this->setDirection(false); |
nyatla | 6:5909618469f8 | 21 | //initialize pin and rs |
nyatla | 6:5909618469f8 | 22 | this->_v_pin=this->read()!=0; |
nyatla | 6:5909618469f8 | 23 | this->_v_rs=false; |
nyatla | 5:00daa91538bc | 24 | } |
nyatla | 5:00daa91538bc | 25 | /** |
nyatla | 5:00daa91538bc | 26 | * set RedStoneValue RedStone value |
nyatla | 6:5909618469f8 | 27 | * @param v |
nyatla | 6:5909618469f8 | 28 | * red stone value |
nyatla | 5:00daa91538bc | 29 | * @return |
nyatla | 6:5909618469f8 | 30 | * current pin value |
nyatla | 5:00daa91538bc | 31 | */ |
nyatla | 5:00daa91538bc | 32 | bool setRedValue(int v) |
nyatla | 5:00daa91538bc | 33 | { |
nyatla | 6:5909618469f8 | 34 | //update red stone pattern |
nyatla | 6:5909618469f8 | 35 | this->_v_rs=(v!=0); |
nyatla | 6:5909618469f8 | 36 | |
nyatla | 6:5909618469f8 | 37 | //check pin value |
nyatla | 6:5909618469f8 | 38 | this->setDirection(true); |
nyatla | 6:5909618469f8 | 39 | this->write(0); |
nyatla | 5:00daa91538bc | 40 | this->setDirection(false); |
nyatla | 6:5909618469f8 | 41 | this->_v_pin=(this->read()!=0); |
nyatla | 6:5909618469f8 | 42 | |
nyatla | 6:5909618469f8 | 43 | //mix two values |
nyatla | 6:5909618469f8 | 44 | if(this->_v_pin){ |
nyatla | 6:5909618469f8 | 45 | // set pin to Lv=H,dir=in |
nyatla | 6:5909618469f8 | 46 | if(this->_v_rs){ |
nyatla | 6:5909618469f8 | 47 | //pin==1 && rs==1 |
nyatla | 6:5909618469f8 | 48 | this->setDirection(true); |
nyatla | 6:5909618469f8 | 49 | this->write(1); |
nyatla | 6:5909618469f8 | 50 | }else{ |
nyatla | 6:5909618469f8 | 51 | //pin==1 && rs==0 |
nyatla | 6:5909618469f8 | 52 | this->write(0); |
nyatla | 6:5909618469f8 | 53 | } |
nyatla | 5:00daa91538bc | 54 | }else{ |
nyatla | 6:5909618469f8 | 55 | if(this->_v_rs){ |
nyatla | 6:5909618469f8 | 56 | //pin==0 && rs==1 |
nyatla | 6:5909618469f8 | 57 | this->setDirection(true); |
nyatla | 6:5909618469f8 | 58 | this->write(1); |
nyatla | 6:5909618469f8 | 59 | }else{ |
nyatla | 6:5909618469f8 | 60 | //pin==0 && rs==0 |
nyatla | 6:5909618469f8 | 61 | this->write(0); |
nyatla | 6:5909618469f8 | 62 | } |
nyatla | 5:00daa91538bc | 63 | } |
nyatla | 6:5909618469f8 | 64 | //actual pin value |
nyatla | 6:5909618469f8 | 65 | return this->_v_pin; |
nyatla | 5:00daa91538bc | 66 | } |
nyatla | 5:00daa91538bc | 67 | }; |
nyatla | 5:00daa91538bc | 68 | class RedIo |
nyatla | 5:00daa91538bc | 69 | { |
nyatla | 5:00daa91538bc | 70 | public: |
nyatla | 5:00daa91538bc | 71 | RedIoPin* io[30]; |
nyatla | 5:00daa91538bc | 72 | RedIo() |
nyatla | 5:00daa91538bc | 73 | { |
nyatla | 5:00daa91538bc | 74 | 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 | 75 | for(int i=0;i<30;i++){ |
nyatla | 5:00daa91538bc | 76 | this->io[i]=new RedIoPin(d[i]); |
nyatla | 5:00daa91538bc | 77 | } |
nyatla | 5:00daa91538bc | 78 | } |
nyatla | 5:00daa91538bc | 79 | virtual ~RedIo() |
nyatla | 5:00daa91538bc | 80 | { |
nyatla | 5:00daa91538bc | 81 | for(int i=0;i<30;i++){ |
nyatla | 5:00daa91538bc | 82 | delete this->io[i]; |
nyatla | 5:00daa91538bc | 83 | } |
nyatla | 5:00daa91538bc | 84 | } |
nyatla | 5:00daa91538bc | 85 | unsigned int update(unsigned int v) |
nyatla | 5:00daa91538bc | 86 | { |
nyatla | 5:00daa91538bc | 87 | unsigned int ret=0; |
nyatla | 5:00daa91538bc | 88 | for(int i=0;i<30;i++){ |
nyatla | 5:00daa91538bc | 89 | ret=ret<<1; |
nyatla | 6:5909618469f8 | 90 | ret=ret | ((this->io[29-i]->setRedValue((v>>(29-i))&0x00000001))?1:0); |
nyatla | 5:00daa91538bc | 91 | } |
nyatla | 5:00daa91538bc | 92 | return ret; |
nyatla | 5:00daa91538bc | 93 | } |
nyatla | 5:00daa91538bc | 94 | }; |
nyatla | 0:ec1e45489427 | 95 | |
nyatla | 0:ec1e45489427 | 96 | class MiMicRemoteMcu:public MiMic::Httpd |
nyatla | 0:ec1e45489427 | 97 | { |
nyatla | 0:ec1e45489427 | 98 | private: |
nyatla | 0:ec1e45489427 | 99 | ModUrl modurl; //basic URL parser |
nyatla | 5:00daa91538bc | 100 | RedIo rsio; |
nyatla | 0:ec1e45489427 | 101 | public: |
nyatla | 0:ec1e45489427 | 102 | MiMicRemoteMcu():Httpd(80) |
nyatla | 0:ec1e45489427 | 103 | { |
nyatla | 0:ec1e45489427 | 104 | } |
nyatla | 0:ec1e45489427 | 105 | virtual void onRequest(HttpdConnection& i_connection) |
nyatla | 0:ec1e45489427 | 106 | { |
nyatla | 5:00daa91538bc | 107 | char url[64]; |
nyatla | 0:ec1e45489427 | 108 | int method; |
nyatla | 5:00daa91538bc | 109 | |
nyatla | 2:28fd59d6be76 | 110 | //call ModUrl module. |
nyatla | 5:00daa91538bc | 111 | if(!this->modurl.execute(i_connection,url,64,&method)){ |
nyatla | 5:00daa91538bc | 112 | i_connection.sendHeader(400,"text/html",NULL); |
nyatla | 5:00daa91538bc | 113 | i_connection.sendBodyF("<html><body>Bad Request.</body></html>",url); |
nyatla | 0:ec1e45489427 | 114 | return; |
nyatla | 0:ec1e45489427 | 115 | } |
nyatla | 5:00daa91538bc | 116 | UrlReader r(url); |
nyatla | 5:00daa91538bc | 117 | if(!r.isPathEqual("/rsb/")){ |
nyatla | 5:00daa91538bc | 118 | i_connection.sendHeader(403,"text/html",NULL); |
nyatla | 5:00daa91538bc | 119 | i_connection.sendBodyF("<html><body>Path must be '/rsb/?p=[:unsigned int:]'</body></html>",url); |
nyatla | 5:00daa91538bc | 120 | return; |
nyatla | 5:00daa91538bc | 121 | } |
nyatla | 5:00daa91538bc | 122 | unsigned int rsv; |
nyatla | 5:00daa91538bc | 123 | if(!r.getQueryUInt("p",rsv)){ |
nyatla | 5:00daa91538bc | 124 | i_connection.sendHeader(400,"text/html",NULL); |
nyatla | 5:00daa91538bc | 125 | i_connection.sendBodyF("<html><body>p val must be unsigned int</body></html>",url); |
nyatla | 5:00daa91538bc | 126 | return; |
nyatla | 5:00daa91538bc | 127 | } |
nyatla | 5:00daa91538bc | 128 | i_connection.sendHeader(200,"text/html",NULL); |
nyatla | 5:00daa91538bc | 129 | i_connection.sendBodyF("%u",rsio.update(rsv)); |
nyatla | 0:ec1e45489427 | 130 | return; |
nyatla | 0:ec1e45489427 | 131 | } |
nyatla | 0:ec1e45489427 | 132 | }; |
nyatla | 0:ec1e45489427 | 133 | |
nyatla | 0:ec1e45489427 | 134 | int main() |
nyatla | 0:ec1e45489427 | 135 | { |
nyatla | 0:ec1e45489427 | 136 | NetConfig cfg; //create network configulation |
nyatla | 5:00daa91538bc | 137 | //try to override setting by local file. |
nyatla | 5:00daa91538bc | 138 | cfg.loadFromFile("/local/mimic.cfg"); |
nyatla | 5:00daa91538bc | 139 | |
nyatla | 0:ec1e45489427 | 140 | Net net(cfg); //create a net instance. |
nyatla | 0:ec1e45489427 | 141 | MiMicRemoteMcu httpd; //create a httpd instance. |
nyatla | 0:ec1e45489427 | 142 | httpd.loop(); //start httpd loop. |
nyatla | 0:ec1e45489427 | 143 | return 0; |
nyatla | 0:ec1e45489427 | 144 | } |