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:
Fri May 17 05:54:52 2013 +0000
Revision:
6:5909618469f8
Parent:
5:00daa91538bc
Child:
7:7720763e8918
bugfix

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 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 }