* <pre>{sel,mode,od}</pre>\r
* <ul>\r
* <li>sel:int - 2bitのint値。 PINSEL? レジスタに指定する値。UM10360 Chapter8.LPC17xx Pin connect block を参照。</li>\r
- * <li>mode:int - 1bitのint値。PINMODE? レジスタに指定する値。UM10360 Chapter8.LPC17xx Pin connect block を参照。</li>\r
+ * <li>mode:int - 2bitのint値。PINMODE? レジスタに指定する値。UM10360 Chapter8.LPC17xx Pin connect block を参照。</li>\r
* <li>od:int - 1bitのbit値 PINMODE_OD? レジスタに指定する値。UM10360 Chapter8.LPC17xx Pin connect block を参照。</li>\r
* </ul>\r
* @example\r
* Dac機能を割り当てるPINの識別子である。値は、LPC1769.Pn[m]のメンバ変数である。\r
* @param {associative array} i_opt\r
* DacPinのコンストラクタに渡すオプション値。省略時はundefinedである。詳細はLPC1769.DacPinを参照。\r
- * @return {object as LPC1769.AdcPin}\r
+ * @return {object as LPC1769.DacPin}\r
* LPC1769.DacPinクラスのオブジェクトである。\r
* @example\r
* //create DacPin\r
},\r
/**\r
* DACRのBiasフィールドの値を更新するBC\r
- @param i_val\r
- 0 or 1\r
- @private\r
+ * @param i_val\r
+ * 0 or 1\r
+ * @private\r
*/\r
BCF_setBias:function BCF_setBias(i_mask,i_val,i_db)\r
{\r
},\r
/**\r
* DACRのVALUEフィールドを更新するBC
+ * @private\r
*/\r
BCF_setValue:function BCF_setValue(i_val,i_db)\r
{\r
},\r
/**\r
* ポートへ値を出力する。\r
- * @name LPC1769.AdcPort#setValues\r
+ * @name LPC1769.DacPort#setValues\r
* @function\r
* @param {array[int]} i_values\r
* 10bitのDA変換値の配列である。値の意味は、UM10360 Chapter 30: LPC17xx Digital-to-Analog Converter (DAC)を参照。\r
* Dacペリフェラルオブジェクトにピン識別子で指定されたピンを関連付けて、DA機能を持つピンを生成する。\r
* 関数は、ピン識別子を元に、そのピンがDA機能に接続できるかを調べる。ピンにDA機能を割り当てられない場合、例外が発生する。どのピンにDA機能が割り当てられるかは、MCUのスペックシートを参照すること。\r
* @constructor\r
- * @name LPC1769.AdcPin\r
+ * @name LPC1769.DacPin\r
* @param {object as LPC1769.Dac} i_dac\r
* インスタンスを結びつけるDacオブジェクト。\r
* @param {object as pin識別子} i_pin\r
* <pre>{sel,mode,od}</pre>\r
* <ul>\r
* <li>sel:int - 2bitのint値。 PINSEL? レジスタに指定する値。UM10360 Chapter8.LPC17xx Pin connect block を参照。</li>\r
- * <li>mode:int - 1bitのint値。PINMODE? レジスタに指定する値。UM10360 Chapter8.LPC17xx Pin connect block を参照。</li>\r
+ * <li>mode:int - 2bitのint値。PINMODE? レジスタに指定する値。UM10360 Chapter8.LPC17xx Pin connect block を参照。</li>\r
* <li>od:int - 1bitのbit値 PINMODE_OD? レジスタに指定する値。UM10360 Chapter8.LPC17xx Pin connect block を参照。</li>\r
* </ul>\r
* @example\r
* <pre>{sel,mode,od}</pre>\r
* <ul>\r
* <li>sel:int - 2bitのint値。 PINSEL? レジスタに指定する値。UM10360 Chapter8.LPC17xx Pin connect block を参照。</li>\r
- * <li>mode:int - 1bitのint値。PINMODE? レジスタに指定する値。UM10360 Chapter8.LPC17xx Pin connect block を参照。</li>\r
+ * <li>mode:int - 2bitのint値。PINMODE? レジスタに指定する値。UM10360 Chapter8.LPC17xx Pin connect block を参照。</li>\r
* <li>od:int - 1bitのbit値 PINMODE_OD? レジスタに指定する値。UM10360 Chapter8.LPC17xx Pin connect block を参照。</li>\r
* </ul>\r
* @example\r
* Dac機能を割り当てるPINの識別子である。値は、LPC1769.Pn[m]のメンバ変数である。\r
* @param {associative array} i_opt\r
* DacPinのコンストラクタに渡すオプション値。省略時はundefinedである。詳細はLPC1769.DacPinを参照。\r
- * @return {object as LPC1769.AdcPin}\r
+ * @return {object as LPC1769.DacPin}\r
* LPC1769.DacPinクラスのオブジェクトである。\r
* @example\r
* //create DacPin\r
},\r
/**\r
* DACRのBiasフィールドの値を更新するBC\r
- @param i_val\r
- 0 or 1\r
- @private\r
+ * @param i_val\r
+ * 0 or 1\r
+ * @private\r
*/\r
BCF_setBias:function BCF_setBias(i_mask,i_val,i_db)\r
{\r
},\r
/**\r
* DACRのVALUEフィールドを更新するBC
+ * @private\r
*/\r
BCF_setValue:function BCF_setValue(i_val,i_db)\r
{\r
},\r
/**\r
* ポートへ値を出力する。\r
- * @name LPC1769.AdcPort#setValues\r
+ * @name LPC1769.DacPort#setValues\r
* @function\r
* @param {array[int]} i_values\r
* 10bitのDA変換値の配列である。値の意味は、UM10360 Chapter 30: LPC17xx Digital-to-Analog Converter (DAC)を参照。\r
* Dacペリフェラルオブジェクトにピン識別子で指定されたピンを関連付けて、DA機能を持つピンを生成する。\r
* 関数は、ピン識別子を元に、そのピンがDA機能に接続できるかを調べる。ピンにDA機能を割り当てられない場合、例外が発生する。どのピンにDA機能が割り当てられるかは、MCUのスペックシートを参照すること。\r
* @constructor\r
- * @name LPC1769.AdcPin\r
+ * @name LPC1769.DacPin\r
* @param {object as LPC1769.Dac} i_dac\r
* インスタンスを結びつけるDacオブジェクト。\r
* @param {object as pin識別子} i_pin\r
* <pre>{sel,mode,od}</pre>\r
* <ul>\r
* <li>sel:int - 2bitのint値。 PINSEL? レジスタに指定する値。UM10360 Chapter8.LPC17xx Pin connect block を参照。</li>\r
- * <li>mode:int - 1bitのint値。PINMODE? レジスタに指定する値。UM10360 Chapter8.LPC17xx Pin connect block を参照。</li>\r
+ * <li>mode:int - 2bitのint値。PINMODE? レジスタに指定する値。UM10360 Chapter8.LPC17xx Pin connect block を参照。</li>\r
* <li>od:int - 1bitのbit値 PINMODE_OD? レジスタに指定する値。UM10360 Chapter8.LPC17xx Pin connect block を参照。</li>\r
* </ul>\r
* @example\r
* Dac機能を割り当てるPINの識別子である。値は、LPC1769.Pn[m]のメンバ変数である。\r
* @param {associative array} i_opt\r
* DacPinのコンストラクタに渡すオプション値。省略時はundefinedである。詳細はLPC1769.DacPinを参照。\r
- * @return {object as LPC1769.AdcPin}\r
+ * @return {object as LPC1769.DacPin}\r
* LPC1769.DacPinクラスのオブジェクトである。\r
* @example\r
* //create DacPin\r
},\r
/**\r
* DACRのBiasフィールドの値を更新するBC\r
- @param i_val\r
- 0 or 1\r
- @private\r
+ * @param i_val\r
+ * 0 or 1\r
+ * @private\r
*/\r
BCF_setBias:function BCF_setBias(i_mask,i_val,i_db)\r
{\r
},\r
/**\r
* DACRのVALUEフィールドを更新するBC
+ * @private\r
*/\r
BCF_setValue:function BCF_setValue(i_val,i_db)\r
{\r
},\r
/**\r
* ポートへ値を出力する。\r
- * @name LPC1769.AdcPort#setValues\r
+ * @name LPC1769.DacPort#setValues\r
* @function\r
* @param {array[int]} i_values\r
* 10bitのDA変換値の配列である。値の意味は、UM10360 Chapter 30: LPC17xx Digital-to-Analog Converter (DAC)を参照。\r
* Dacペリフェラルオブジェクトにピン識別子で指定されたピンを関連付けて、DA機能を持つピンを生成する。\r
* 関数は、ピン識別子を元に、そのピンがDA機能に接続できるかを調べる。ピンにDA機能を割り当てられない場合、例外が発生する。どのピンにDA機能が割り当てられるかは、MCUのスペックシートを参照すること。\r
* @constructor\r
- * @name LPC1769.AdcPin\r
+ * @name LPC1769.DacPin\r
* @param {object as LPC1769.Dac} i_dac\r
* インスタンスを結びつけるDacオブジェクト。\r
* @param {object as pin識別子} i_pin\r
var MiMicLib=\r
{\r
/**\r
+ * MiMicJsAPIのバージョン文字列。\r
+ */\r
+ VERSION:"MiMicJsAPI/1.0.1",\r
+ /**\r
+ * 現在の時刻を返す\r
+ * @returns\r
+ */\r
+ getNow:function getNow(){\r
+ return (new Date()).getTime();\r
+ },\r
+ /**\r
* aがundefinedであるかを真偽値で返す。\r
* @function\r
* @param {object} a\r
MiMicRemoteMcuInterface.prototype=\r
{\r
_mimic_host:null,\r
- _keep_alive:null, \r
+ _keep_alive:null,\r
+ /**\r
+ * 最後にXhrレスポンスを得た時刻\r
+ */\r
+ _last_xhr_res_time:0,\r
/**\r
* XmlHttpRequestを実行する。\r
* @private\r
if(i_async){\r
xhr.onreadystatechange = function(){\r
if (xhr.readyState == 4){\r
- i_callback(xhr); \r
+ //最終受信時刻を記録\r
+ this._last_xhr_res_time=MiMicLib.getNow();\r
+ i_callback(xhr);\r
}\r
}\r
- }\r
+ }\r
xhr.open("GET",i_url,i_async);\r
prog=1;\r
xhr.send(null); \r
- prog=2;\r
+ if(!i_async){\r
+ //最終受信時刻を記録\r
+ this._last_xhr_res_time=MiMicLib.getNow();\r
+ }\r
+ prog=2; \r
} catch (e){\r
throw new MiMicException(\r
function(){\r
execBc:function execBc(i_bc)\r
{\r
try{\r
+ if(this._keep_alive==null){\r
+ throw new MiMicException(EE.NG,"disconnected");\r
+ }\r
var res=this._xhrGet("http://"+this._mimic_host+"/mvm.api?v=1&bc="+i_bc,false);\r
if(res.status!=200){\r
throw new MiMicException(EE.HTTP,"i_bc="+i_bc+",XHR.status="+res.status);\r
if(this._keep_alive!=null){\r
return;\r
}\r
- function checkProc(i_res)\r
+ function xhrStatus(i_is_async,i_cb)\r
+ {\r
+ try{\r
+ return _t._xhrGet("http://"+_t._mimic_host+"/status.api",i_is_async,i_cb);\r
+ }catch(e){\r
+ return null;\r
+ }\r
+ };\r
+ function intervalProc()\r
{\r
- //結果の確認\r
- if(!_t._isOnline_parseResponse(i_res)){\r
+ //現在時刻を計算\r
+ var now=MiMicLib.getNow();\r
+ //最後に通信に成功した時刻からの経過時間を計算\r
+ var lt=now-_t._last_xhr_res_time;\r
+ if(lt<3000){\r
+ return;\r
+ }\r
+ //最後の通信からの経過時間がNを超えていたら通信チェック\r
+ var res=xhrStatus(false,null);\r
+ if((res==null) || (!_t._isOnline_parseResponse(res))){\r
if(_t._keep_alive!=null){\r
+ //Intrervalを中断\r
+ clearInterval(_t._keep_alive.tid);\r
_t._keep_alive=null;\r
i_callback(false);\r
}\r
- }else{\r
- i_callback(true);\r
- startCheck();\r
- }\r
- return;\r
- }\r
- function startCheck()\r
- {\r
- _t._keep_alive={\r
- tid:setTimeout(function(){_t._keep_alive.xhr=_t._xhrGet("http://"+_t._mimic_host+"/status.api",true,checkProc);},5000),\r
- xhr:null};\r
+ } \r
+ i_callback(true);\r
};\r
- //同期チェック\r
- var res=this._xhrGet("http://"+this._mimic_host+"/status.api",false,null);\r
- if(!this._isOnline_parseResponse(res)){\r
+ //1回目の接続確認(同期接続)\r
+ var res=xhrStatus(false,null);\r
+ if((res==null) || (!_t._isOnline_parseResponse(res))){\r
throw new MiMicException("Bad response from "+this._mimic_host);\r
- } \r
- //非同期監視の開始\r
- startCheck();\r
+ }\r
+ //周期監視の開始\r
+ this._keep_alive={\r
+ tid:setInterval(intervalProc,500)\r
+ };\r
}catch(e){\r
throw new MiMicException(e);\r
}\r
{\r
try{\r
if(this._keep_alive!=null){\r
- clearTimeout(this._keep_alive.tid);\r
- var xhr=this._keep_alive.xhr;\r
+ clearInterval(this._keep_alive.tid);\r
this._keep_alive=null;//abortによるコールバックを抑制\r
- if(xhr!=null){\r
- xhr.abort();\r
- }\r
}\r
}catch(e){\r
throw new MiMicException(e);\r
\r
try{\r
var mcu=new LPCXpresso1769.Mcu("192.168.128.39",true);\r
+ mcu.events.onActivateChanged=function(t){alert(t);};\r
var pwm=mcu.getPeripheral("PWM",{freq:100});\r
pwmpin=pwm.getPin(LPCXpresso1769.P2[0]);\r
}catch(e){\r
<html>\r
<head>\r
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">\r
-<script src="MiMicCore.js"></script> \r
-<script src="LPC1769.js"></script> \r
-<script src="LPC1769.Mcu.js"></script> \r
-<script src="LPC1769769.Memory.js"></script> \r
-<script src="LPC1769.Port.js"></script>\r
-<script src="LPC1769.Pin.js"></script>\r
-<script src="LPC1769.Gpio.js"></script>\r
-<script src="LPC1769.Peripheral.js"></script> \r
-<script src="LPC1769.Adc.js"></script> \r
-<script src="LPC1769.Dac.js"></script> \r
-<script src="LPC1769.Pwm.js"></script> \r
-<script src="LPC1769.NativeInterface.js"></script>\r
-<script src="MbedM3.js"></script>\r
+<script src="../api.js/MiMicCore.js"></script> \r
+<script src="../api.js/LPC1769.js"></script> \r
+<script src="../api.js/LPC1769.Mcu.js"></script> \r
+<script src="../api.js/LPC1769769.Memory.js"></script> \r
+<script src="../api.js/LPC1769.Port.js"></script>\r
+<script src="../api.js/LPC1769.Pin.js"></script>\r
+<script src="../api.js/LPC1769.Gpio.js"></script>\r
+<script src="../api.js/LPC1769.Peripheral.js"></script> \r
+<script src="../api.js/LPC1769.Adc.js"></script> \r
+<script src="../api.js/LPC1769.Dac.js"></script> \r
+<script src="../api.js/LPC1769.Pwm.js"></script> \r
+<script src="../api.js/LPC1769.NativeInterface.js"></script>\r
+<script src="../api.js/MbedM3.js"></script>\r
\r
<script type="text/javascript">\r
function Logger(i_tag)\r