Minecraft extension

Dependencies:   NySDFileSystem libMiMic mbed-rtos mbed registers

Fork of MiMicSimpleHttpd by Ryo Iizuka

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

Committer:
nyatla
Date:
Wed Oct 23 05:05:07 2013 +0000
Revision:
8:50f62d74fd75
Parent:
7:7720763e8918
update libMiMic; ;

Who changed what in which revision?

UserRevisionLine numberNew 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 7:7720763e8918 4 #include "fsdata.h"
nyatla 7:7720763e8918 5
nyatla 5:00daa91538bc 6 LocalFileSystem2 lf("local");
nyatla 0:ec1e45489427 7
nyatla 0:ec1e45489427 8
nyatla 5:00daa91538bc 9 class RedIoPin: public InOut
nyatla 5:00daa91538bc 10 {
nyatla 5:00daa91538bc 11 private:
nyatla 6:5909618469f8 12 bool _v_pin;
nyatla 6:5909618469f8 13 bool _v_rs;
nyatla 5:00daa91538bc 14 public:
nyatla 5:00daa91538bc 15 RedIoPin(char pin):InOut(pin,0)
nyatla 5:00daa91538bc 16 {
nyatla 5:00daa91538bc 17 //pull down
nyatla 5:00daa91538bc 18 this->mode(1);//pull down
nyatla 6:5909618469f8 19 //read from pin
nyatla 6:5909618469f8 20 this->setDirection(true);
nyatla 5:00daa91538bc 21 this->write(0);
nyatla 6:5909618469f8 22 this->setDirection(false);
nyatla 6:5909618469f8 23 //initialize pin and rs
nyatla 6:5909618469f8 24 this->_v_pin=this->read()!=0;
nyatla 6:5909618469f8 25 this->_v_rs=false;
nyatla 5:00daa91538bc 26 }
nyatla 5:00daa91538bc 27 /**
nyatla 5:00daa91538bc 28 * set RedStoneValue RedStone value
nyatla 6:5909618469f8 29 * @param v
nyatla 6:5909618469f8 30 * red stone value
nyatla 5:00daa91538bc 31 * @return
nyatla 6:5909618469f8 32 * current pin value
nyatla 5:00daa91538bc 33 */
nyatla 5:00daa91538bc 34 bool setRedValue(int v)
nyatla 5:00daa91538bc 35 {
nyatla 6:5909618469f8 36 //update red stone pattern
nyatla 6:5909618469f8 37 this->_v_rs=(v!=0);
nyatla 6:5909618469f8 38
nyatla 6:5909618469f8 39 //check pin value
nyatla 6:5909618469f8 40 this->setDirection(true);
nyatla 6:5909618469f8 41 this->write(0);
nyatla 5:00daa91538bc 42 this->setDirection(false);
nyatla 6:5909618469f8 43 this->_v_pin=(this->read()!=0);
nyatla 6:5909618469f8 44
nyatla 6:5909618469f8 45 //mix two values
nyatla 6:5909618469f8 46 if(this->_v_pin){
nyatla 6:5909618469f8 47 // set pin to Lv=H,dir=in
nyatla 6:5909618469f8 48 if(this->_v_rs){
nyatla 6:5909618469f8 49 //pin==1 && rs==1
nyatla 6:5909618469f8 50 this->setDirection(true);
nyatla 6:5909618469f8 51 this->write(1);
nyatla 6:5909618469f8 52 }else{
nyatla 6:5909618469f8 53 //pin==1 && rs==0
nyatla 6:5909618469f8 54 this->write(0);
nyatla 6:5909618469f8 55 }
nyatla 5:00daa91538bc 56 }else{
nyatla 6:5909618469f8 57 if(this->_v_rs){
nyatla 6:5909618469f8 58 //pin==0 && rs==1
nyatla 6:5909618469f8 59 this->setDirection(true);
nyatla 6:5909618469f8 60 this->write(1);
nyatla 6:5909618469f8 61 }else{
nyatla 6:5909618469f8 62 //pin==0 && rs==0
nyatla 6:5909618469f8 63 this->write(0);
nyatla 6:5909618469f8 64 }
nyatla 5:00daa91538bc 65 }
nyatla 6:5909618469f8 66 //actual pin value
nyatla 6:5909618469f8 67 return this->_v_pin;
nyatla 5:00daa91538bc 68 }
nyatla 5:00daa91538bc 69 };
nyatla 5:00daa91538bc 70 class RedIo
nyatla 5:00daa91538bc 71 {
nyatla 5:00daa91538bc 72 public:
nyatla 5:00daa91538bc 73 RedIoPin* io[30];
nyatla 5:00daa91538bc 74 RedIo()
nyatla 5:00daa91538bc 75 {
nyatla 5:00daa91538bc 76 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 77 for(int i=0;i<30;i++){
nyatla 5:00daa91538bc 78 this->io[i]=new RedIoPin(d[i]);
nyatla 5:00daa91538bc 79 }
nyatla 5:00daa91538bc 80 }
nyatla 5:00daa91538bc 81 virtual ~RedIo()
nyatla 5:00daa91538bc 82 {
nyatla 5:00daa91538bc 83 for(int i=0;i<30;i++){
nyatla 5:00daa91538bc 84 delete this->io[i];
nyatla 5:00daa91538bc 85 }
nyatla 5:00daa91538bc 86 }
nyatla 5:00daa91538bc 87 unsigned int update(unsigned int v)
nyatla 5:00daa91538bc 88 {
nyatla 5:00daa91538bc 89 unsigned int ret=0;
nyatla 5:00daa91538bc 90 for(int i=0;i<30;i++){
nyatla 5:00daa91538bc 91 ret=ret<<1;
nyatla 6:5909618469f8 92 ret=ret | ((this->io[29-i]->setRedValue((v>>(29-i))&0x00000001))?1:0);
nyatla 5:00daa91538bc 93 }
nyatla 5:00daa91538bc 94 return ret;
nyatla 5:00daa91538bc 95 }
nyatla 5:00daa91538bc 96 };
nyatla 0:ec1e45489427 97
nyatla 7:7720763e8918 98 Net* net;
nyatla 7:7720763e8918 99
nyatla 7:7720763e8918 100 class RedWireBridge:public MiMic::Httpd
nyatla 0:ec1e45489427 101 {
nyatla 0:ec1e45489427 102 private:
nyatla 0:ec1e45489427 103 ModUrl modurl; //basic URL parser
nyatla 7:7720763e8918 104 ModRomFiles modromfs; //ROM file module
nyatla 7:7720763e8918 105 ModUPnPDevice modupnp;
nyatla 5:00daa91538bc 106 RedIo rsio;
nyatla 0:ec1e45489427 107 public:
nyatla 7:7720763e8918 108 RedWireBridge(NetConfig& i_cfg):Httpd(i_cfg.getHttpPort())
nyatla 0:ec1e45489427 109 {
nyatla 7:7720763e8918 110 this->modromfs.setParam("rom",FSDATA,3);
nyatla 7:7720763e8918 111 //bind upnp service to module.
nyatla 7:7720763e8918 112 this->modupnp.setParam(*net);
nyatla 0:ec1e45489427 113 }
nyatla 0:ec1e45489427 114 virtual void onRequest(HttpdConnection& i_connection)
nyatla 0:ec1e45489427 115 {
nyatla 5:00daa91538bc 116 char url[64];
nyatla 0:ec1e45489427 117 int method;
nyatla 7:7720763e8918 118 //try to ModRomFS module. for icon,images.
nyatla 7:7720763e8918 119 if(this->modromfs.execute(i_connection)){
nyatla 7:7720763e8918 120 return;
nyatla 7:7720763e8918 121 }
nyatla 7:7720763e8918 122 //try to UPnP service. for descriptions.
nyatla 7:7720763e8918 123 if(this->modupnp.execute(i_connection)){
nyatla 7:7720763e8918 124 return;
nyatla 7:7720763e8918 125 }
nyatla 7:7720763e8918 126 //rsb CGI
nyatla 7:7720763e8918 127
nyatla 5:00daa91538bc 128
nyatla 2:28fd59d6be76 129 //call ModUrl module.
nyatla 5:00daa91538bc 130 if(!this->modurl.execute(i_connection,url,64,&method)){
nyatla 5:00daa91538bc 131 i_connection.sendHeader(400,"text/html",NULL);
nyatla 5:00daa91538bc 132 i_connection.sendBodyF("<html><body>Bad Request.</body></html>",url);
nyatla 0:ec1e45489427 133 return;
nyatla 0:ec1e45489427 134 }
nyatla 5:00daa91538bc 135 UrlReader r(url);
nyatla 5:00daa91538bc 136 if(!r.isPathEqual("/rsb/")){
nyatla 5:00daa91538bc 137 i_connection.sendHeader(403,"text/html",NULL);
nyatla 5:00daa91538bc 138 i_connection.sendBodyF("<html><body>Path must be '/rsb/?p=[:unsigned int:]'</body></html>",url);
nyatla 5:00daa91538bc 139 return;
nyatla 5:00daa91538bc 140 }
nyatla 5:00daa91538bc 141 unsigned int rsv;
nyatla 5:00daa91538bc 142 if(!r.getQueryUInt("p",rsv)){
nyatla 5:00daa91538bc 143 i_connection.sendHeader(400,"text/html",NULL);
nyatla 5:00daa91538bc 144 i_connection.sendBodyF("<html><body>p val must be unsigned int</body></html>",url);
nyatla 5:00daa91538bc 145 return;
nyatla 5:00daa91538bc 146 }
nyatla 5:00daa91538bc 147 i_connection.sendHeader(200,"text/html",NULL);
nyatla 5:00daa91538bc 148 i_connection.sendBodyF("%u",rsio.update(rsv));
nyatla 0:ec1e45489427 149 return;
nyatla 0:ec1e45489427 150 }
nyatla 0:ec1e45489427 151 };
nyatla 0:ec1e45489427 152
nyatla 0:ec1e45489427 153 int main()
nyatla 0:ec1e45489427 154 {
nyatla 7:7720763e8918 155 net=new Net(); //create a net instance.
nyatla 0:ec1e45489427 156 NetConfig cfg; //create network configulation
nyatla 7:7720763e8918 157 //Prepare configulation.
nyatla 7:7720763e8918 158 cfg.setUPnPIcon(64,64,8,"image/png","/rom/icon.png");//set upnp icon address
nyatla 7:7720763e8918 159 cfg.setUPnPUdn(0x0c9720e0,0x031e,0x11e3,0); //set application timebase-uuid time and sequence field.
nyatla 7:7720763e8918 160 cfg.setFriendlyName("RedWireBridge"); //set friendly name
nyatla 7:7720763e8918 161 cfg.setUPnPPresentationURL("/rom/index.html"); //set presentationURL
nyatla 7:7720763e8918 162 cfg.setZeroconf(true);//AutoIP enable
nyatla 7:7720763e8918 163
nyatla 5:00daa91538bc 164 //try to override setting by local file.
nyatla 5:00daa91538bc 165 cfg.loadFromFile("/local/mimic.cfg");
nyatla 5:00daa91538bc 166
nyatla 7:7720763e8918 167 RedWireBridge httpd(cfg); //create a httpd instance.
nyatla 7:7720763e8918 168 net->start(cfg);
nyatla 0:ec1e45489427 169 httpd.loop(); //start httpd loop.
nyatla 0:ec1e45489427 170 return 0;
nyatla 0:ec1e45489427 171 }