From: nyatla Date: Sun, 24 Mar 2013 07:01:12 +0000 (+0000) Subject: MiMicVMの動作確認 X-Git-Tag: SVN-final~168 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=b62939971851ee0b318949b1dc43c1e60e792060;p=mimic%2FMiMicSDK.git MiMicVMの動作確認 git-svn-id: http://svn.osdn.jp/svnroot/mimic/trunk@203 47198e57-cb75-475f-84c4-a814cd6f29e0 --- diff --git a/lib/src/net/httpd/mod/NyLPC_cModRemoteMcu.c b/lib/src/net/httpd/mod/NyLPC_cModRemoteMcu.c index dda29b2..3bba965 100644 --- a/lib/src/net/httpd/mod/NyLPC_cModRemoteMcu.c +++ b/lib/src/net/httpd/mod/NyLPC_cModRemoteMcu.c @@ -32,7 +32,7 @@ #include "NyLPC_cHttpmodUtils_protected.h" #include "../../../mimicvm/NyLPC_cMiMicVM_protected.h" - +#define APPLICATION_VERSION "MiMicRemoteMCU/1.3" #define MVM_VERSION "MiMicVM/1.0;Json/1.0" #define SIZE_OF_IBUF 256 struct TModMiMicRemoteMcuHeader @@ -79,6 +79,7 @@ struct TModMiMicRemoteMcuHeader static void mvm(NyLPC_TcHttpdConnection_t* i_connection,const struct TModMiMicRemoteMcuHeader* i_rqh); +static void status(NyLPC_TcHttpdConnection_t* i_connection); static NyLPC_TBool messageHandler(NyLPC_TcHttpBasicHeaderParser_t* i_inst,const NyLPC_TChar* i_name,NyLPC_TChar i_c,struct NyLPC_THttpBasicHeader* o_out) @@ -161,7 +162,7 @@ static NyLPC_TBool urlHandler(NyLPC_TcHttpBasicHeaderParser_t* i_inst,NyLPC_TCha out->content.mvm.vm_instruction.db_len=0; out->content.mvm.vm_instruction.db_part=NULL; NyLPC_TUInt32ArrayPtr_setBuf(&out->_binarray,out->content.mvm.vm_instruction.bc_buf,SIZE_OF_IBUF); - out->content.mvm.o=QVAL_O_UNKNOWN; + out->content.mvm.o=QVAL_O_JSON; out->content.mvm.v=QVAL_V_UNKNOWN; break; default: @@ -288,6 +289,8 @@ static NyLPC_TBool urlHandler(NyLPC_TcHttpBasicHeaderParser_t* i_inst,NyLPC_TCha //ERROR NyLPC_OnErrorGoto(ERROR); } + out->content.mvm.vm_instruction.db_len=((NyLPC_TUInt8*)(out->_binarray.ptr)-(NyLPC_TUInt8*)(out->content.mvm.vm_instruction.db_part))/sizeof(NyLPC_TUInt32); + //終端しているなら、次のクエリへ out->_astate=ST_PARSE_QUERY_NAME; } @@ -383,6 +386,9 @@ NyLPC_TBool NyLPC_cModRemoteMcu_execute(NyLPC_TcModRemoteMcu_t* i_inst,NyLPC_TcH case CONTENT_ID_MVM: mvm(i_connection,&single_header); break; + case CONTENT_ID_STATUS: + status(i_connection); + break; default: NyLPC_OnErrorGoto(Error2); } @@ -470,7 +476,23 @@ static void mvmsleep(struct NyLPC_TcMiMicVM_TEvent* i_eh,NyLPC_TUInt32 i_sleep_i NyLPC_cThread_sleep(i_sleep_in_msec); } - +/** + * RemoteMCUのステータスを返す。基本的にjson + * { + * application:"[VERSION]" + * } + */ +static void status(NyLPC_TcHttpdConnection_t* i_connection) +{ + if(!NyLPC_cHttpdModUtils_sendJsonHeader(i_connection)){ + return; + } + //JSONを書く。 + if(!NyLPC_cHttpdConnection_sendResponseBodyF(i_connection,"{\"application\":\""APPLICATION_VERSION";%s\"}",NyLPC_cMiMicEnv_PlatformName)){ + return; + } + return; +} /** * MimicVMの起動と,ResponseJSONの起動 * @return diff --git a/lib/src/net/httpd/mod/NyLPC_cModRemoteMcu.h b/lib/src/net/httpd/mod/NyLPC_cModRemoteMcu.h index d7240d4..8319fb6 100644 --- a/lib/src/net/httpd/mod/NyLPC_cModRemoteMcu.h +++ b/lib/src/net/httpd/mod/NyLPC_cModRemoteMcu.h @@ -18,6 +18,11 @@ extern "C" { /** * URLが最大31文字までの、短いHttpリクエストを処理します。 * このクラスは、NyLPC_TBasicHttpHeader_tにキャストできます。 + * + * JSONAPIとして、以下のAPIを提供します。 + * ./mvm.api?o=[json|xml]&v=1&bc=[:MIMICBC:] + * MiMicBCを実行します。 + * oパラメータ省略時はjsonと解釈します。 */ typedef struct NyLPC_TcModRemoteMcu NyLPC_TcModRemoteMcu_t; diff --git a/misc/MiMicVM/api.js/MiMicCore.js b/misc/MiMicVM/api.js/MiMicCore.js index 79a51d3..f86a01d 100644 --- a/misc/MiMicVM/api.js/MiMicCore.js +++ b/misc/MiMicVM/api.js/MiMicCore.js @@ -11,7 +11,7 @@ var MiMicLib= /** * MiMicJsAPIのバージョン文字列。 */ - VERSION:"MiMicJsAPI/1.0.1", + VERSION:"MiMicJsAPI/1.0.2", /** * 現在の時刻を返す * @returns @@ -35,7 +35,7 @@ var MiMicLib= * @function * @param {object} a * 判定対象のオブジェクト - * @return {Boolean} + * @return {Boolean} * aがarrayであれば、trueである。 */ isArray:function isArray(a){ @@ -315,21 +315,25 @@ var MiMicRemoteMcuInterface; * インスタンス生成直後は、MiMicRemoteMcuとの接続は断状態である。connect関数を実行して、接続する必要がある。 * 通信仕様については、MiMicVM.pdf Appendix 1.MiMicVM HTTP Interfaceを参照すること。 * @constructor - * @param {string} server - * 接続するMiMicRemoteMcuのホストアドレスを指定する。IPアドレス、ホスト名等。 - * ex. “127.0.0.1” , “127.0.0.1:3939” + * @param {string} i_path + * 接続するMiMicRemoteMcuのホストパスを指定します。 + * MiMicVersion 1.4以降はMiMicサーバの/mvm/に割り当てられています。 + * ホストアドレスのみを指定した場合、"/mvm/"サフィックスを自動で追加します。 + * ex. + * "127.0.0.1" =< "127.0.0.1/mvm/"
+ * "127.0.0.1:3939/mvm/" =< "127.0.0.1:3939/mvm/" * @example * //create a controlable MCU via network. - * var mcu=new MiMicRemoteMcuInterface(“192.168.0.39”); + * var mcu=new MiMicRemoteMcuInterface(“192.168.0.39/mvm/”); */ - MiMicRemoteMcuInterface=function MiMicRemoteMcuInterface(server) + MiMicRemoteMcuInterface=function MiMicRemoteMcuInterface(i_path) { - this._mimic_host=server; + this._mimic_path=i_path+((i_path.indexOf("/")==-1)?"/mvm/":""); } MiMicRemoteMcuInterface.prototype= { - _mimic_host:null, + _mimic_path:null, _keep_alive:null, /** * 最後にXhrレスポンスを得た時刻 @@ -490,7 +494,7 @@ var MiMicRemoteMcuInterface; if(this._keep_alive==null){ throw new MiMicException(EE.NG,"disconnected"); } - var res=this._xhrGet("http://"+this._mimic_host+"/mvm.api?v=1&bc="+i_bc,false); + var res=this._xhrGet("http://"+this._mimic_path+"mvm.api?v=1&bc="+i_bc,false); if(res.status!=200){ throw new MiMicException(EE.HTTP,"i_bc="+i_bc+",XHR.status="+res.status); } @@ -526,7 +530,7 @@ var MiMicRemoteMcuInterface; function xhrStatus(i_is_async,i_cb) { try{ - return _t._xhrGet("http://"+_t._mimic_host+"/status.api",i_is_async,i_cb); + return _t._xhrGet("http://"+_t._mimic_path+"status.api",i_is_async,i_cb); }catch(e){ return null; } @@ -555,7 +559,7 @@ var MiMicRemoteMcuInterface; //1回目の接続確認(同期接続) var res=xhrStatus(false,null); if((res==null) || (!_t._isOnline_parseResponse(res))){ - throw new MiMicException("Bad response from "+this._mimic_host); + throw new MiMicException("Bad response from "+this._mimic_path); } //周期監視の開始 this._keep_alive={ diff --git a/misc/MiMicVM/api.js/demo/ad.html b/misc/MiMicVM/api.js/demo/ad.html index ad19d3f..d88a22a 100644 --- a/misc/MiMicVM/api.js/demo/ad.html +++ b/misc/MiMicVM/api.js/demo/ad.html @@ -20,7 +20,7 @@ function scroll() } function init(){ - var mcu=new LPCXpresso1769.Mcu("192.168.128.39"); + var mcu=new LPCXpresso1769.Mcu("192.168.0.39"); var pin=mcu.getPin(LPCXpresso1769.P0[23],"AD"); var i=0; setInterval(function(){ diff --git a/misc/MiMicVM/api.js/demo/ad_port.html b/misc/MiMicVM/api.js/demo/ad_port.html index 766f240..b5ed186 100644 --- a/misc/MiMicVM/api.js/demo/ad_port.html +++ b/misc/MiMicVM/api.js/demo/ad_port.html @@ -22,7 +22,7 @@ function scroll() } function init(){ - var mcu=new LPCXpresso1769.Mcu("192.168.128.39"); + var mcu=new LPCXpresso1769.Mcu("192.168.0.39"); var port=mcu.getPeripheral("ADC").getPort( [LPCXpresso1769.P0[23],LPCXpresso1769.P0[24]] ); diff --git a/misc/MiMicVM/api.js/demo/da.html b/misc/MiMicVM/api.js/demo/da.html index b6cea45..807a746 100644 --- a/misc/MiMicVM/api.js/demo/da.html +++ b/misc/MiMicVM/api.js/demo/da.html @@ -10,7 +10,7 @@ function init() var dacpin; try{ - var mcu=new LPCXpresso1769.Mcu("192.168.128.39",true); + var mcu=new LPCXpresso1769.Mcu("192.168.0.39",true); var dac=mcu.getPeripheral("DAC"); dacpin=dac.getPin(LPCXpresso1769.P0[26]); }catch(e){ diff --git a/misc/MiMicVM/api.js/demo/led_blink.html b/misc/MiMicVM/api.js/demo/led_blink.html index 6e8e9f5..4034b97 100644 --- a/misc/MiMicVM/api.js/demo/led_blink.html +++ b/misc/MiMicVM/api.js/demo/led_blink.html @@ -4,11 +4,11 @@ diff --git a/misc/MiMicVM/api.js/demo/memory_access.html b/misc/MiMicVM/api.js/demo/memory_access.html index 5431581..369d900 100644 --- a/misc/MiMicVM/api.js/demo/memory_access.html +++ b/misc/MiMicVM/api.js/demo/memory_access.html @@ -4,7 +4,7 @@