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
- Committer:
- nyatla
- Date:
- 2013-05-17
- Revision:
- 6:5909618469f8
- Parent:
- 5:00daa91538bc
- Child:
- 7:7720763e8918
File content as of revision 6:5909618469f8:
#include "mimic.h" #include "mbed.h" #include "InOut.h" LocalFileSystem2 lf("local"); class RedIoPin: public InOut { private: bool _v_pin; bool _v_rs; public: RedIoPin(char pin):InOut(pin,0) { //pull down this->mode(1);//pull down //read from pin this->setDirection(true); this->write(0); this->setDirection(false); //initialize pin and rs this->_v_pin=this->read()!=0; this->_v_rs=false; } /** * set RedStoneValue RedStone value * @param v * red stone value * @return * current pin value */ bool setRedValue(int v) { //update red stone pattern this->_v_rs=(v!=0); //check pin value this->setDirection(true); this->write(0); this->setDirection(false); this->_v_pin=(this->read()!=0); //mix two values if(this->_v_pin){ // set pin to Lv=H,dir=in if(this->_v_rs){ //pin==1 && rs==1 this->setDirection(true); this->write(1); }else{ //pin==1 && rs==0 this->write(0); } }else{ if(this->_v_rs){ //pin==0 && rs==1 this->setDirection(true); this->write(1); }else{ //pin==0 && rs==0 this->write(0); } } //actual pin value return this->_v_pin; } }; 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[64]; int method; //call ModUrl module. 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; } }; 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. return 0; }