/**\r
- * LPCXPresso1769用の高レベルMiMicAPI\r
- MiMicCoreの関数を必要とします。
+ * LPCXPresso1769用の高レベルAPIのネームスペースである。\r
+ * MCU,Pin,peripheralのクラスと、識別子を定義する。\r
+ * このネームスペースのにある宣言は、LPC1769プロセッサに依存する。\r
+ * @namespace\r
*/\r
var LPCXpresso1769;\r
\r
(function(){\r
var isUndef=MiMicLib.isUndef;\r
- \r
var DEV=\r
{\r
/**\r
* エラーIDテーブルの拡張\r
+ * @private\r
*/\r
_EE:function(i_base){\r
return{\r
VM_RUNTIME :[i_base|0x04,"MVM runtime error"],\r
};}(MiMicError.NG[0]|MiMicError.MID_MiMic|MiMicError.CAID_LPCXPresso1769),\r
/**\r
- * BCフラグメント・ライブラリ
+ * BCフラグメント・ライブラリ\r
+ * @private
*/\r
_BCF:{\r
/**\r
* ([i_addr]&(~(i_mask<<i_shl))|((i_mask & i_val)<<i_shl)を実行するMimicBCを生成する。\r
- [S0]のアドレスのメモリ値に[S1]の値でマスクして,[S2]の値とORして[S0]に書き戻す。\r
- SGET #0;\r
- SGET #1;\r
- SGET #2;\r
- MGET #7,#0;\r
- AND #7,#1;\r
- OR #7,#2;\r
- MPUT #7,#0;\r
- @param i_mask\r
- ビットマスク\r
- @param i_val\r
- ビット値\r
+ * [S0]のアドレスのメモリ値に[S1]の値でマスクして,[S2]の値とORして[S0]に書き戻す。\r
+ * <pre>\r
+ * SGET #0;\r
+ * SGET #1;\r
+ * SGET #2;\r
+ * MGET #7,#0;\r
+ * AND #7,#1;\r
+ * OR #7,#2;\r
+ * MPUT #7,#0;\r
+ * </pre>\r
+ * @private\r
+ * @param i_mask\r
+ * ビットマスク\r
+ * @param i_val\r
+ * ビット値\r
*/\r
setBit:function setBit(i_addr,i_mask,i_val,i_shl,i_db)\r
{\r
},\r
/**\r
* 値をメモリに設定する。\r
- SGET #0\r
- SGET #1\r
- MPUT #1,#0\r
+ * <pre>\r
+ * SGET #0\r
+ * SGET #1\r
+ * MPUT #1,#0\r
+ * </pre>\r
+ * @private\r
*/\r
setMem:function setMem(i_addr,i_val,i_db)\r
{\r
throw new MiMicException(e);\r
} \r
},\r
- /* メモリを32bit読む\r
- SGET #0\r
- MGET #0,#0\r
- SPUT #0\r
+ /**\r
+ * メモリを32bit読む\r
+ * <pre>\r
+ * SGET #0\r
+ * MGET #0,#0\r
+ * SPUT #0\r
+ * </pre>\r
+ * @private\r
*/ \r
getMem:function getMem(i_addr,i_db)\r
{\r
throw new MiMicException(e);\r
} \r
},\r
- /* メモリを32bit読む\r
- SGET #0\r
- MGET #0,#0\r
- SPUT #0\r
+ /**\r
+ * メモリを32bit読む\r
+ * <pre>\r
+ * SGET #0\r
+ * MGET #0,#0\r
+ * SPUT #0\r
+ * </pre>\r
+ @private\r
*/\r
READMEM:"EA00DB0000EE00",\r
\r
/**\r
* BCフラグメントを終了する。\r
- EXIT;\r
- .END\r
+ * <pre>\r
+ * EXIT;\r
+ * .END\r
+ * </pre>\r
+ @private\r
*/\r
END:"ZZ.E" \r
},\r
/**\r
- * @see API manual\r
+ * 機能名のテーブル。\r
+ * 機能名として使用できる文字列の一覧表である。機能名は、機能を識別する目的で定義する。\r
+ * この値は一覧の定義のみであるので、使用することは無い。\r
+ * <ul>\r
+ * <li>GPIO - GPIO機能を表す。</li>\r
+ * <li>AD - AD convert機能を表す。</li>\r
+ * <li>DA - DA convert機能を表す。</li>\r
+ * <li>PWM - PWM機能を表す。</li>\r
+ * </ul>\r
+ * @name LPCXpresso1769#FUNC_NAME\r
+ * @constant\r
+ * @field\r
*/\r
FUNC_NAME:[\r
"GPIO","AD","DA","PWM"\r
],\r
/**\r
- * @see API manual\r
+ * ペリフェラル名のテーブル。\r
+ * ペリフェラル名として使用できる文字列の一覧表である。ペリフェラル名は、ペリフェラルを識別する目的で定義する。\r
+ * この値は一覧の定義のみであるので、使用することは無い。
+ * <ul>\r
+ * <li>GPIO - GPIO peripheral</li>\r
+ * <li>ADC - AD peripheral</li>\r
+ * <li>DAC - DA peripheral</li>\r
+ * <li>PWM - PWM peripheral</li>\r
+ * </ul>\r
+ * @name LPCXpresso1769#PHL_NAME\r
+ * @constant\r
+ * @field\r
*/\r
PHL_NAME:[\r
"GPIO","ADC","DAC","PWM"\r
],\r
/**\r
- * @see API manual\r
- PHL:{PHL_NAME:[PCLKSELreg#PCLKSELbit,PCONPbit]}\r
+ * LPCXpressoのPeripheralパラメタを格納したテーブルである。要素はペリフェラル識別子である。\r
+ * UM10360のChapter 4: LPC17xx Clocking and power controlを元に定義している。\r
+ * ペリフェラル識別子はペリフェラルのレジスタ番号とビット番号を格納した配列である。\r
+ * <pre>\r
+ * PHL:{PHL_NAME:[PCLKSELreg#,PCLKSELbit#,PCONPbit#]}\r
+ * </pre>\r
+ * nullはそのビットが無効であることを示す。\r
+ * @name LPCXpresso1769#PHL\r
+ * @constant\r
+ * @field\r
+ * @example\r
+ * LPCXpresso1796.PHLADC //ADC peripheral\r
*/\r
PHL:{\r
WDT: [0,0,null],\r
USB:[null,null,31]\r
},\r
/**\r
- * @see API Manual
+ * PCXpressoのPINに対応する識別子のテーブルである。要素はPIN識別子である。テーブルは、P0[n]~p4[m]まで存在する。\r
+ * ピン識別子は、ピンP?[?]を、P0[0]のように表現する。これは、UM10360のTable 73. Pin descriptionのSymbol P?[?]に対応している。\r
+ * Pn[m]のn,mの使用できる値は、Table 73. Pin descriptionに一致する。\r
+ * PIN識別子から値を取り出すときは、専用の関数を使用するべきである。\r
+ * ピン識別子は、ピンを制御するレジスタ番号とビット番号を格納した配列である。\r
+ * <pre>\r
+ * Pn:[[PINSELreg#,PINMODEreg#,PINMODEODreg#,bitidx,[ピン機能名]]]\r
+ * </pre>\r
+ * <ul>\r
+ * <li>PINFUNC,PINMODEのビット位置は、(bitidx%16)*2で計算する。ODRegについては、そのままの数値を使う。</li>\r
+ * <li>[ピン機能名]は、PINSEL設定値に対応するテーブルである。配列のインデクス値が、そのままPINSELの値に対応する。</li>\r
+ * <li>設定できない値のフィールドはnullである。ピン機能名はPin Function Select registerのテーブルの定義値そのもである。ただし、GPIOについては"GPIO Port "を"GPIO"に省略していることに注意。</li>\r
+ * <li>nullはそのビットが無効であることを示す。</li>\r
+ * </ul>\r
+ * @name LPCXpresso1769#P0\r
+ * @constant\r
+ * @field\r
+ * @example\r
+ * //1\r
+ * LPCXpresso1796.P0[0]; //P0[0]\r
+ * LPCXpresso1796.P1[1]; //P0[01]\r
+ * //2\r
+ * var mcu=new LPCXpresso1769.Mcu(“192.168.0.39”);\r
+ * var gpiopin=mcu.getPin(LPCXpresso1769.P0[0],"GPIO");//bind P0[0] with GPIO function
*/\r
P0:[\r
[0,0,0,0,["GPIO0.0","RD1","TXD3","SDA1"]],//0\r
[1,null,0,29,["GPIO0.29","USB_D+",null,null]],//29\r
[1,null,0,30,["GPIO0.30","USB_D-",null,null]],//30\r
],\r
+ /**\r
+ * P1に対する定義である。詳細はP0のドキュメントを参照。
+ * @name LPCXpresso1769#P1\r
+ * @constant\r
+ * @field\r
+ * @see LPCXpresso1769#P0
+ */\r
P1:[ //P1[x]\r
[2,2,1,0,["GPIO1.0","ENET_TXD0",null,null]],//0\r
[2,2,1,1,["GPIO1.1","ENET_TXD1",null,null]],//1\r
[3,3,1,30,["GPIO1.30",null,"VBUS","AD0.4"]],//30\r
[3,3,1,31,["GPIO1.31",null,"SCK1","AD0.5"]],//31\r
],\r
+ /**\r
+ * P2に対する定義である。詳細はP0のドキュメントを参照。\r
+ * @name LPCXpresso1769#P2\r
+ * @constant\r
+ * @field\r
+ * @see LPCXpresso1769#P0\r
+ */\r
P2:[ //P2[x]\r
[4,4,2,0,["GPIO2.0","PWM1.1","TXD1",null]],//0\r
[4,4,2,1,["GPIO2.1","PWM1.2","RXD1",null]],//1\r
[4,4,2,12,["GPIO2.12","EINT2",null,"I2STX_WS"]],//12\r
[4,4,2,13,["GPIO2.13","EINT3",null,"I2STX_SDA"]],//13\r
],\r
+ /**\r
+ * P3に対する定義である。詳細はP0のドキュメントを参照。\r
+ * @name LPCXpresso1769#P3\r
+ * @constant\r
+ * @field\r
+ * @see LPCXpresso1769#P0\r
+ */\r
P3:[ //P3[x]\r
null/* 0*/,null/* 1*/,null/* 2*/,null/* 3*/,null/* 4*/,null/* 5*/,null/* 6*/,null/* 7*/,null/* 8*/,null/* 9*/,\r
null/*10*/,null/*11*/,null/*12*/,null/*13*/,null/*14*/,null/*15*/,null/*16*/,null/*17*/,null/*18*/,null/*19*/,\r
[7,7,3,25,["GPIO3.25",null,"MAT0.0","PWM1.2"]],//25\r
[7,7,3,26,["GPIO3.26","STCLK","MAT0.1","PWM1.3"]],//26\r
],\r
+ /**\r
+ * P4に対する定義である。詳細はP0のドキュメントを参照。\r
+ * @name LPCXpresso1769#P4\r
+ * @constant\r
+ * @field\r
+ * @see LPCXpresso1769#P0\r
+ */\r
P4:[ //P4[x]\r
null/* 0*/,null/* 1*/,null/* 2*/,null/* 3*/,null/* 4*/,null/* 5*/,null/* 6*/,null/* 7*/,null/* 8*/,null/* 9*/,\r
null/*10*/,null/*11*/,null/*12*/,null/*13*/,null/*14*/,null/*15*/,null/*16*/,null/*17*/,null/*18*/,null/*19*/,\r
],\r
/**\r
* [forSystem]ピン識別子のアクセス関数である。\r
- ピン機能シンボルのプレフィクス(機能シンボル)を、 ピン識別子を元に、完全な名称に変換する。\r
- ピンにFunctionが含まれているか調べることが出来る。\r
+ * ピン機能シンボルのプレフィクス(機能シンボル)を、 ピン識別子を元に、完全な名称に変換する。\r
+ * ピンにFunctionが含まれているか調べることが出来る。\r
+ * @private\r
*/\r
completePinFunctionName:function completePinFunctionName(i_pin,i_prefix)\r
{\r
},\r
/**\r
* [forSystem]ピン識別子のアクセス関数。\r
- ピン識別値から、Pinレジスタの番号と、ビット位置を取り出す。\r
- @return\r
- {s:pinselのレジスタ番号、m:modeのレジスタ番号、,o:odのレジスタ番号,sbm:mode,selのビット位置,ob:odのビット位置}
+ * ピン識別値から、Pinレジスタの番号と、ビット位置を取り出す。\r
+ * @private\r
+ * @return\r
+ * {s:pinselのレジスタ番号、m:modeのレジスタ番号、,o:odのレジスタ番号,sbm:mode,selのビット位置,ob:odのビット位置}
*/\r
getPinRegInfo:function getPinRegInfo(i_pin)\r
{\r
},\r
/**\r
* [forSystem]ピン識別子のアクセス関数。\r
- PIN機能名に一致するPinsel値を取り出す。\r
+ * PIN機能名に一致するPinsel値を取り出す。\r
+ * @private\r
*/\r
getPinSelByFunctionName:function getPinSelByFunctionName(i_pin,i_name)\r
{\r
},\r
/**\r
* [forSystem]ピンが、ピン機能シンボルを持つか返す。\r
+ * @private\r
*/\r
hasPinFunctionName:function hasPinFunctionName(i_pin,i_name)\r
{\r
}\r
}\r
\r
-\r
+/**\r
+ * @private
+ */\r
DEV.I2c=function I2c()\r
{\r
throw new MiMicException("Not imprement.");\r
}\r
\r
+/**\r
+ * @private\r
+ */\r
DEV.Dma=function Dma()\r
{\r
throw new MiMicException("Not imprement.");\r
}\r
+/**\r
+ * @private\r
+ */\r
DEV.Uart=function Uart()\r
{\r
throw new MiMicException("Not imprement.");\r
}\r
+/**\r
+ * @private\r
+ */\r
DEV.Usb=function Usb()\r
{\r
throw new MiMicException("Not imprement.");\r
}());\r
\r
(function(){\r
+ /** @ignore */\r
var DEV=LPCXpresso1769;\r
var BCF=DEV._BCF;\r
var EE=DEV._EE;\r
\r
/**\r
* 配列をMiMicDBへ変換する。\r
+ @private\r
@throws\r
変換失敗時は例外\r
*/\r
\r
/**\r
* PINの機能名を含むPin識別子を得る。\r
+ @private\r
*/\r
function getPinByFuncName(i_name)\r
{\r
}\r
}\r
/**\r
- * PIN機能名から使用するペリフェラルシンボルを推定する。
+ * PIN機能名から使用するペリフェラルシンボルを推定する。\r
+ @private
*/\r
function pinFuncName2PhlName(i_pinfuncname)\r
{\r
}\r
\r
/**\r
- * @see API Manual\r
+ * LPCXPresso1769.MCU(MCU)クラスのコンストラクタ。\r
+ * MCUクラスは、物理MCUとのインタフェイスを定義する。MiMicRemoteMcuInterfaceの管理機能と、MCUの物理機能への接続手段を定義する。\r
+ * 提供する機能は次のリストである。\r
+ * <ul>\r
+ * <li>物理MCUとの接続管理機能。\r
+ * <li>MCUの管理するペリフェラル操作インスタンスの生存管理機能。\r
+ * <li>MCUの持つ物理デバイスの操作オブジェクト(Pin,Peripheral等)の生成機能(インテリジェント接続)。\r
+ * </ul>\r
+ * @name LPCXpresso1769.Mcu\r
+ * @constructor\r
+ * @param {string} i_mimic_addr\r
+ * 接続するMiMicRemoteMcuのホストアドレスを指定する。IPアドレス、ホスト名等。\r
+ * <pre>ex. “127.0.0.1” , “127.0.0.1:3939”</pre>\r
+ * @param {boolean} i_is_activate\r
+ * インスタンス生成と同時にMiMicRemoteMcuとの接続を確立するかのフラグ。省略時はtrueとみなす。\r
+ * trueの場合、関数は即座にMiMicRemoteMCUに接続する。このとき、events.onActivateChangedをハンドリングすることが出来ないので注意すること。ハンドリングが必要なら、falseを指定して、改めてactivate関数をコールする。\r
+ * @example\r
+ * //create a controlable MCU via network.\r
+ * var mcu=new LPCXpresso1769.Mcu(“192.168.0.39”);\r
*/\r
DEV.Mcu=function Mcu(i_mimic_addr,i_is_activate)\r
{\r
try{\r
+ //メンバの初期化\r
+ this.events={onActivateChanged:null};\r
+ this._phl_holder=[];\r
//リモートインタフェイスの取得\r
this._mif=new MiMicRemoteMcuInterface(i_mimic_addr);\r
var ac=isUndef(i_is_activate)?true:i_is_activate;\r
throw new MiMicException(e);\r
}\r
};\r
+\r
DEV.Mcu.prototype=\r
{\r
/**\r
- * MiMicInterface
+ * MiMicInterface\r
+ @private
*/\r
_mif:null,\r
/**\r
- * @see API manual
+ * インスタンスがMCUと接続されているかをtrue/falseで返す。\r
+ * @name LPCXpresso1769.Mcu#isActive\r
+ * @function\r
+ * @return {boolean}\r
+ * インスタンスが接続中ならtrue\r
+ * @example\r
+ * var mcu=new LPCXpresso1769.Mcu(“192.168.0.39”,false);\r
+ * mcu.events.onActivateChanged=function(f){\r
+ * if(!f){alert(f)};\r
+ * }\r
+ * mcu.activate(); \r
*/\r
isActive:function isActive()\r
{\r
throw new MiMicException(e);\r
}\r
},\r
+ \r
/**\r
- * @see API manual
+ * イベントハンドラの連想配列。メンバにイベントハンドラ関数を格納する。\r
+ イベントハンドラは以下の通り。\r
+ <ul>\r
+ <li>onActivateChanged as function(f:boolean) - インスタンスのアクティブ状態が変化したときに呼び出されるイベントである。fパラメータには、状態変化後のアクティブ状態値が入る。このハンドラが呼び出されるのは、ユーザが状態を切り替えたときと、システムが状態を維持できなくなったとき(例えばMCUが応答しない)である。</li>\r
+ </ul>\r
+ * @name LPCXpresso1769.Mcu#events\r
+ * @field\r
+ * @example\r
+ * //show that MCU became active. \r
+ * var mcu=new LPCXpresso1769.Mcu("192.168.0.39",false);\r
+ * mcu.events.onActivateChanged=function(f){\r
+ * if(!f){alert(f)};\r
+ * }\r
+ * mcu.activate(); \r
*/\r
- events:{\r
- /**\r
- * @see API manual\r
- */\r
- onActivateChanged:null\r
- },\r
+ events:null,\r
/**\r
* ペリフェラルオブジェクトのホルダ。ペリフェラル名をキーにした、ペリフェラルオブジェクトの連想配列。\r
- MCUが、自身のペリフェラルオブジェクトを管理する為に使う。\r
+ * MCUが、自身のペリフェラルオブジェクトを管理する為に使う。\r
+ * @private\r
*/\r
- _phl_holder:[],\r
+ _phl_holder:null,\r
/**\r
- * Clockに関する情報を返す。
+ * SystemClockに関する情報を返す。\r
+ * @name LPCXpresso1769.Mcu#getClockInfo\r
+ * @function\r
+ * @return {cclk:MCUクロック [Hz] as int}\r
+ * クロック値を格納した連想配列である。\r
+ * @example\r
+ * // alert MCU clock\r
+ * var mcu=new LPCXpresso1769.Mcu("192.168.0.39");\r
+ * alert(mcu.getClockInfo().cclk);\r
*/\r
- getClockInfo:function getClockProperty()\r
+ getClockInfo:function getClockInfo()\r
{\r
//CCLCK値(RemoteMCU側と合わせること。将来的にはactivateの時に決定する。)\r
return {cclk:100*1000*1000};\r
},\r
/**\r
- * @see API manual
+ * インスタンスの状態をアクティブに切り替える。\r
+ * アクティブ化に成功すると、インスタンスは物理MCUと接続状態になる。\r
+ * コンストラクタで生成と同時にアクティブ化した場合は、コンストラクタ内で自動的にコールされる。\r
+ * 既にアクティブの場合、アクティブ化に失敗した場合に例外が発生する。\r
+ * @name LPCXpresso1769.Mcu#activate\r
+ * @function\r
+ * @example\r
+ * // MCU will be active.\r
+ * var mcu=new LPCXpresso1769.Mcu("192.168.0.39",false);\r
+ * mcu.activate();\r
*/\r
activate:function activate()\r
{\r
}\r
},\r
/**\r
- * @see API manual
+ * インスタンスの状態を非アクティブに切り替える。\r
+ * 成功すると、インスタンスと物理MCUは切断状態になる。\r
+ * 既に非アクティブの場合、例外が発生する。\r
+ * @name LPCXpresso1769.Mcu#deactivate\r
+ * @function\r
+ * @example\r
+ * // MCU will be deactive.\r
+ * var mcu=new LPCXpresso1769.Mcu(“192.168.0.39”);\r
+ * mcu.events.onActivateChanged=function(f){\r
+ * if(!f){alert(f)};\r
+ * }\r
+ * mcu.deactivate();\r
*/\r
deactivate:function deactivate()\r
{\r
}\r
},\r
/**\r
- * @see API manual
+ * 整形済みのMiMicBCを送信する。整形済みのMiMicBCは、MiMicTXT,MiMicDBを連結した文字列である。固定命令を送信するときに使う。\r
+ * @name LPCXpresso1769.Mcu#callMiMic^2\r
+ * @function\r
+ * @param {string} i_mimicbc\r
+ * MiMicBC。MiMicBCのフォーマットは、MiMicVM.pdf MiMicBCで定義する。\r
+ * @return {object as {MiMic result}}\r
+ * @example\r
+ * //send MiMic operations.\r
+ * var mcu=new LPCXpresso1769.Mcu(“192.168.0.39”);\r
+ * mcu.callMiMic(“ZAZZ.E”);//NOP .END \r
+ */\r
+ /**\r
+ * 整形済みのMiMicTXTと、数値配列のMiMicDBを連結して送信する。固定命令+パラメータで擬似関数を実現するときに便利である。
+ * @name LPCXpresso1769.Mcu#callMiMic^3\r
+ * @function\r
+ * @param {string} i_mimictxt\r
+ * MiMicTXT。MiMicTXTのフォーマットは、MiMicVM.pdf MiMicBCで定義する。\r
+ * @param {Array[int]} mimicdb\r
+ * 配列のINT値。値は関数によりMiMicDBに変換され、MiMicTXTに連結され、送信される。 \r
+ * @return {object as {MiMic result}}\r
+ * @example\r
+ * //send MiMic operations.\r
+ * var mcu=new LPCXpresso1769.Mcu(“192.168.0.39”);\r
+ * mcu.callMiMic(“ZAZZ.E”,[]); //NOP .END\r
+ */\r
+ /**\r
+ * MiMicBCをリンクしているMCUへMiMic Low level APIで同期送信し、結果を取得する。\r
+ * MiMic Low level APIのresult値が得られない場合、例外が発生する。この状況は、TCP/IPエラー、HTTPエラー、HTTPステータスエラー、MiMicVMのラインタイムエラー、MiMicRemoteMCUのフォールト等の原因で発生する。\r
+ * 関数が値を返した場合は、MiMicRemoteMCUが処理を完了し、正しい形式のステータスを受信できた場合である。例外が発生した場合は、リンクが破壊されている場合がある。リンクが破壊された場合は、1分以内にアクティブ状態が変化するので、それを検出して判断する。<br/>\r
+ * 引数の違いにより、数種類の呼び出し方がある。詳細は、callMiMic^nを参照。\r
+ * @name LPCXpresso1769.Mcu#callMiMic^1\r
+ * @function\r
+ * @param ...\r
+ * LPCXpresso1769.Mcu#callMiMic^nを参照\r
+ * @return {object as {MiMic result}}\r
+ * 応答値を格納した連想配列である。\r
+ * 詳細は 低レベルAPI。MiMicRemoteMcuInterface.execBc関数、または、MiMicVM.pdf Appendix 1. MiMicVM HTTP Interfaceを参照。 \r
*/\r
callMiMic:function callMiMic(/**/)\r
{\r
}\r
},\r
/**\r
- * @see API manual\r
+ * callMiMic関数のラッパーである。\r
+ * callMiMic関数成功後に、resultが成功(MVM_OK=0x0)であるかを確認し、それ以外であれば例外を発生させる。\r
+ * resultが0以外想定されないMiMicBCを実行するときに、便利である。<br/>\r
+ * 引数、戻り値については、callMiMic関数を参照。\r
+ * @name LPCXpresso1769.Mcu#callMiMicWithCheck\r
+ * @function\r
+ * @example\r
+ * //send 2 MiMic operations.\r
+ * var mcu=new LPCXpresso1769.Mcu(“192.168.0.39”);\r
+ * mcu.callMiMicWithCheck(“ZAZZ.E”,[]);\r
+ * mcu.callMiMicWithCheck(“ZAZZ.ENOOOO”);//exception!\r
*/\r
callMiMicWithCheck:function execBc2WithException(/**/)\r
{\r
}\r
},\r
/**\r
- * @see API manual
+ * ピン機能名から、Pinインスタンスを生成する。\r
+ * 生成されたピンは、ピン機能名の割り当てられている物理ピンで実現される。\r
+ * ピン機能名は、 LPCXpresso1769.P?[?]の[ピン機能名]で定義する文字列である。これは、UM10360 3.1.2.3 Chapter 8: LPC17xx Pin connect blockのfunction nameで定義される、PINSELレジスタに設定する文字列と一致する。
+ * @name LPCXpresso1769.Mcu#getPin^2\r
+ * @function\r
+ * @param {string} i_pin_function_name\r
+ * ピン機能名の文字列。 ex. “GPIO0.0” ,”AD0.0”\r
+ * GPIOについては、”GPIO Port 0.0”を”GPIO0.0”のように、省略すること。 \r
+ * @return {object as PinObject}\r
+ * @example\r
+ * var mcu=new LPCXpresso1769.Mcu(“192.168.0.39”);\r
+ * //create gpio pin at PIN0[0]\r
+ * var gpiopin1=mcu.getPin("GPIO0.0");\r
+ */\r
+ /**\r
+ * ピン識別子と機能名から、機能を割り当てたピンを生成する。組み合せにより、ピンを生成できない可能性もある。\r
+ * 組み合わせは、UM10360 3.1.2.3 Chapter 8: LPC17xx Pin connect blockを参照すること。\r
+ * @name LPCXpresso1769.Mcu#getPin^3\r
+ * @function\r
+ * @param {object as pin識別子} i_pin\r
+ * ピン識別子。指定できるのは、LPCXpresso1796.P?[?]である。\r
+ * @param {string as 機能名} i_function_name\r
+ * 機能名は文字列である。 指定できる文字列は、LPCXpresso1769.FUNC_NAMEで定義する。\r
+ * @return {object as PinObject}\r
+ * @example\r
+ * var mcu=new LPCXpresso1769.Mcu(“192.168.0.39”);\r
+ *\r
+ * //create gpio pin at PIN0[1]\r
+ * var gpiopin2=mcu.getPin(LPCXpresso1769.P0[1],"GPIO");\r
+ * //or mcu.getPin(LPCXpresso1769.P0[1],LPCXpresso1769.FUNC_SYMBOL.GPIO);\r
+ *\r
+ * //create AD at PIN0[23]\r
+ * var adpin1=mcu.getPin(LPCXpresso1769.P0[23],"AD"); \r
+ * //or mcu.getPin(LPCXpresso1769.P0[23],LPCXpresso1769.FUNC_SYMBOL.AD);\r
+ *\r
+ * //create AD at PIN0[3] (exception)\r
+ * var adpin2=mcu.getPin(LPCXpresso1769.P0[3],"AD");\r
+ */\r
+ /**\r
+ * 物理ピンを制御するPinインスタンスを得る。\r
+ * 制御ペリフェラル、Pinを順に生成する方法と異なり、機能の実現に必要なインスタンスを自動的に準備できる。\r
+ * Pinが生成できない場合、例外が発生する。\r
+ * ペリフェラルが自動生成された場合、そのオプションはデフォルト値が採用される。既に生成済みのペリフェラルの場合は何もしない。PINのオプションは、デフォルト値が採用される。\r
+ * 引数の違いにより、数種類の呼び出し方がある。\r
+ * @name LPCXpresso1769.Mcu#getPin^1\r
+ * @function\r
+ * @param ...\r
+ * LPCXpresso1769.Mcu#getPin^nを参照\r
+ * @return {object as PinObject}\r
+ * 返却されるPinインスタンスの型は、機能により異なる。機能とPinインスタンスのクラスの対応は、以下の通りである。\r
+ * <ul>\r
+ * <li>GPIO - LPCXpresso1769.GpioPin</li>\r
+ * <li>AD - LPCXpresso1769.AdcPin</li>\r
+ * <li>PWM - LPCXpresso1769.PwmPin</li>\r
+ * </ul>\r
*/\r
getPin:function getPin(/*...*/)\r
{\r
}\r
},\r
/**\r
- * @see API manual\r
+ * 未実装である。\r
+ * ポート(複数ピンで構成するIO)を制御するPortインスタンスを得るする。\r
+ * 制御ペリフェラル、Portを順に生成する方法と異なり、機能の実現に必要なインスタンスを自動的に生成する。\r
+ * Portが生成できない場合、例外が発生する。\r
+ * @name LPCXpresso1769.Mcu#getPort\r
+ * @function \r
*/\r
getPort:function getPort(i_port_name)\r
{\r
throw new MiMicException("Not implemented.");\r
},\r
/**\r
- * @see API manual
+ * ペリフェラル名から、ペリフェラルオブジェクトを得る。\r
+ * 関数は、初めて要求されたペリフェラルについては、オブジェクトを生成し、MCUインスタンスに保存する。同じ名前のペリフェラルが再度要求されると、過去に生成したペリフェラルを返す。\r
+ * @name LPCXpresso1769.Mcu#getPeripheral\r
+ * @function\r
+ * @param {string as ペリフェラル名} i_phl_name\r
+ * ペリフェラル名は文字列である。指定できる文字列は、LPCXpresso1769.PHL_NAMEで定義する。\r
+ * @param {object as ペリフェラルオプション} i_opt\r
+ * ペリフェラルに渡すオプション値である。省略可能。ペリフェラルが新しく生成される場合(はじめてペリフェラルが設定されようとしているとき)に、コンストラクタのi_optに設定する。2回目以降の参照で設定されると、例外を発生する。値の構文は、取得しようとするペリフェラルのsetOpt関数のi_optパラメータの説明を参照すること。 \r
+ * @return {object as Peripheral}\r
+ * 返却されるインスタンスのクラスは、ペリフェラル名により異なる。その対応は以下の通りである。\r
+ * <ul>\r
+ * <li>GPIO - LPCXpresso1769.Gpio</li>\r
+ * <li>ADC - LPCXpresso1769.Adc</li>\r
+ * <li>PWM - LPCXpresso1769.Pwm</li>\r
+ * </ul>\r
+ * @example\r
+ * //get GPIO peripheral\r
+ * var mcu=new LPCXpresso1769.Mcu(“192.168.0.39”);\r
+ * var gpio=mcu.getPeripheral(“GPIO”); \r
*/\r
getPeripheral:function getPeripheral(i_phl_symbol,i_opt)\r
{\r
return this._phl_holder[i_phl_symbol];\r
},\r
/**\r
- * [forSystem]システム関数。MCU依存のペリフェラルオブジェクトを登録する。
+ * [forSystem]システム関数。MCU依存のペリフェラルオブジェクトを登録する。\r
+ @private
*/\r
registerPhl:function registerPhl(i_phl,i_symbol)\r
{\r
var EE=DEV._EE;\r
var isUndef=MiMicLib.isUndef;\r
/**\r
- * @see API manual\r
+ * LPCXPresso1769.Memory (Memory)クラスのコンストラクタ。\r
+ * Memoryクラスは、MCUのメモリ空間へアクセスする手段を提供する。\r
+ * このクラスは、メモリアクセス対してなんら保護機能を持たない。MCUのメモリマップに十分に注意する必要がある。\r
+ * @name LPCXpresso1769.Memory\r
+ * @constructor\r
+ * @param {object as LPCXpresso1769.Mcu} i_mcu\r
+ * インスタンスを結びつけるMcuオブジェクト。\r
+ * @param {int} i_base\r
+ * メモリにアクセスするときのベースアドレス。省略可能である。省略時は0x0とみなす。4バイト境界でなければならない。クラスの提供する関数でアドレスを指定した時には、全てこの値が加算される。\r
+ * @example\r
+ * //create a controlable MCU via network.\r
+ * var mcu=new LPCXpresso1769.Mcu(“192.168.0.39”);\r
+ * var memory=new LPCXpresso1769.Memory(mcu); \r
*/\r
DEV.Memory=function Memory(i_mcu,i_base)\r
{\r
_base:0x00000000,\r
_mcu:null,\r
/**\r
- *@see API manual
+ * 指定したアドレスの32ビット値を取得する。\r
+ * @name LPCXpresso1769.Memory#read32^2\r
+ * @function\r
+ * @param {int} i_offset\r
+ * コンストラクタで指定したアドレスからのオフセット位置を指定する。4バイト境界でなければならない。\r
+ * @return {int}\r
+ * 1個のint値。\r
+ * @example\r
+ * var mcu=new LPCXpresso1769.Mcu("192.168.0.39");\r
+ * var mem=new LPCXpresso1769.Memory(mcu); //create instance\r
+ * alert(mem.read32(0x00000000)); //show 1 value \r
+ */\r
+ /**\r
+ * 指定したオフセットから、i_sizeバイトのメモリに格納した値を、それぞれ32ビット単位で値を取得する。i_offsetの位置から、32bit単位でi_size/4個の値を取得することになる。シーケンシャルアクセスに使用する。\r
+ * @name LPCXpresso1769.Memory#read32^3\r
+ * @function\r
+ * @param {int} i_offset\r
+ * コンストラクタで指定したアドレスからのオフセット位置を指定する。4バイト境界でなければならない。\r
+ * @param {int} i_size\r
+ * 取得するバイト数を指定する。4バイト単位でなければならない。 \r
+ * @return {int | Array[int]}\r
+ * 取得する値の個数は、i_size/4個である。個数により、戻り値の型が異なるので注意すること。\r
+ * @example\r
+ * var mcu=new LPCXpresso1769.Mcu("192.168.0.39");\r
+ * var mem=new LPCXpresso1769.Memory(mcu); //create instance\r
+ * mem.read32(0x0,8); //return 2 values.\r
+ */\r
+ /**\r
+ * オフセットの配列要素に対応した値を、それぞれ32ビット単位で取得する。\r
+ * ランダムアクセスに使用する。\r
+ * @name LPCXpresso1769.Memory#read32^4\r
+ * @function\r
+ * @param {array[int]} i_offsets\r
+ * オフセットアドレスの配列。それぞれ4バイト境界でなければならない。\r
+ * @return {int | Array[int]}\r
+ * 返却される値の個数は、i_offsetの長さと同じになる。個数により、戻り値の型が異なるので注意すること。\r
+ * @example\r
+ * var mcu=new LPCXpresso1769.Mcu("192.168.0.39");\r
+ * var mem=new LPCXpresso1769.Memory(mcu); //create instance\r
+ * mem.read32([0x0,0x14,0x08]); //return 3 values by specified order.\r
+ */\r
+ /**\r
+ * メモリから値を読み出して、値セットの配列、又は値を返す。\r
+ * 関数はバイト単位のアライメントでメモリにアクセスする。メモリアドレス、取得サイズは4バイト境界に一致させなければならない。\r
+ * 引数の違いにより、数種類の呼び出し方がある。\r
+ * @name LPCXpresso1769.Memory#read32^1\r
+ * @function\r
+ * @param ...\r
+ * 詳細は、read32^nを参照。\r
+ * @return {int | Array[int]}\r
+ * 返却値の数により、型が異なる。1個の場合はint値、複数の場合はint型の配列である。
*/\r
read32:function read32(/*arguments*/)\r
{\r
{\r
try{\r
this._mcu=i_mcu;\r
- //phl値の決定\r
- var phlopt=this._PHL_DEF;\r
- //optにphlが指定されていたら、それを採用。\r
- if(!isUndef(i_opt) && !isUndef(i_opt.phl)){\r
- phlopt=i_opt.phl;\r
- }\r
//PHL生成。\r
this._phl=new DEV.Peripheral(i_mcu,DEV.PHL.ADC);\r
+ //設定値のロード\r
+ var opt=isUndef(i_opt)?{phl:{}}:\r
+ {//i_optある。\r
+ phl:isUndef(i_opt.phl)?{}:cloneAssoc(i_opt.phl),\r
+ };\r
+ //デフォルト値設定\r
+ if(isUndef(opt.phl.power)){opt.phl.power=1;};\r
+\r
//初期化。\r
var bc="";\r
var db=new Array();\r
- bc+=this._phl.BCF_setOpt(phlopt,db);\r
+ bc+=this._phl.BCF_setOpt(opt,db);\r
//0x00210000(PDN,BURSTを1)\r
bc+=BCF.setMem(this._AD0CR,0x00200400,db);\r
bc+=BCF.setMem(this._AD0CR,0x00210400,db);\r
_AD0DR:[0x40034010,0x40034014,0x40034018,0x4003401C,0x40034020,0x40034024,0x40034028,0x4003402C],\r
_phl:null,\r
_mcu:null,\r
+\r
+ BCF_setOpt:function BCF_setOpt(i_opt,i_db)\r
+ {\r
+ try{\r
+ var bc="";\r
+ if(!isUndef(i_opt.phl)){\r
+ bc+=this._phl.BCF_setOpt(i_opt.phl,i_db);\r
+ }\r
+ return bc;\r
+ }catch(e){\r
+ throw new MiMicException(e);\r
+ }\r
+ },\r
/**\r
* AD0CRのSELフィールドの値を更新するBC\r
*/\r
}\r
},\r
/**\r
+ * See API manual.\r
+ */\r
+ setOpt:function setOpt(i_opt)\r
+ {\r
+ try{\r
+ var db=new Array();\r
+ var bc=this.BCF_setOpt(i_opt,db);\r
+ this._mcu.callMiMicWithCheck(bc+BCF.END,db);\r
+ }catch(e){\r
+ throw new MiMicException(e);\r
+ }\r
+ }, \r
+ /**\r
* see
*/\r
getPin:function getPin(i_pin,i_opt)\r
}\r
},\r
/**\r
- * {sel:1bit,pin:{pin option}}
+ * see API manual
*/\r
setOpt:function setOpt(i_opt)\r
{\r
if(!isUndef(i_opt.pin)){\r
bc+=this._pin.BCF_setOpt(i_opt.pin,db);\r
}\r
- //enable\r
+ //隠し\r
if(!isUndef(i_opt.sel)){\r
bc+=this._adc.BCF_setSel(this._adinfo.ch,i_opt.sel,db);\r
}\r
\r
\r
/**\r
- * このクラスは、PWMペリフェラルを管理します。\r
- @param i_opt\r
- オプション値です。\r
- {\r
- freq:100,\r
- phl:{power:1,clock:0}\r
- }\r
+ * see API manual
*/\r
DEV.Pwm=function Pwm(i_mcu,i_opt)\r
{\r
_MRn:[0x40018018,0x4001801C,0x40018020,0x40018024,0x40018040,0x40018044,0x40018048],\r
_phl:null,\r
_mcu:null,\r
+\r
/**\r
- * {phl:{object},(freq:int|mr0:int)}
+ * {phl:{object},(freq:int)}
*/\r
BCF_setOpt:function BCF_setOpt(i_opt,i_db)\r
{\r
}\r
},\r
/**\r
+ * See API manual.\r
+ */\r
+ setOpt:function setOpt(i_opt)\r
+ {\r
+ try{\r
+ var db=new Array();\r
+ var bc=this.BCF_setOpt(i_opt,db);\r
+ this._mcu.callMiMicWithCheck(bc+BCF.END,db);\r
+ }catch(e){\r
+ throw new MiMicException(e);\r
+ }\r
+ }, \r
+ /**\r
* see API manual\r
*/\r
getPin:function getPin(i_pin,i_opt)\r
{\r
try{\r
this._mcu=i_mcu;\r
- //phl値の決定\r
- var phlopt=this._PHL_DEF;\r
- //optにphlが指定されていたら、それを採用。\r
- if(!isUndef(i_opt) && !isUndef(i_opt.phl)){\r
- phlopt=i_opt.phl;\r
- }\r
//PHL生成。\r
this._phl=new DEV.Peripheral(i_mcu,DEV.PHL.ADC);\r
+ //設定値のロード\r
+ var opt=isUndef(i_opt)?{phl:{}}:\r
+ {//i_optある。\r
+ phl:isUndef(i_opt.phl)?{}:cloneAssoc(i_opt.phl),\r
+ };\r
+ //デフォルト値設定\r
+ if(isUndef(opt.phl.power)){opt.phl.power=1;};\r
+\r
//初期化。\r
var bc="";\r
var db=new Array();\r
- bc+=this._phl.BCF_setOpt(phlopt,db);\r
+ bc+=this._phl.BCF_setOpt(opt,db);\r
//0x00210000(PDN,BURSTを1)\r
bc+=BCF.setMem(this._AD0CR,0x00200400,db);\r
bc+=BCF.setMem(this._AD0CR,0x00210400,db);\r
_AD0DR:[0x40034010,0x40034014,0x40034018,0x4003401C,0x40034020,0x40034024,0x40034028,0x4003402C],\r
_phl:null,\r
_mcu:null,\r
+\r
+ BCF_setOpt:function BCF_setOpt(i_opt,i_db)\r
+ {\r
+ try{\r
+ var bc="";\r
+ if(!isUndef(i_opt.phl)){\r
+ bc+=this._phl.BCF_setOpt(i_opt.phl,i_db);\r
+ }\r
+ return bc;\r
+ }catch(e){\r
+ throw new MiMicException(e);\r
+ }\r
+ },\r
/**\r
* AD0CRのSELフィールドの値を更新するBC\r
*/\r
}\r
},\r
/**\r
+ * See API manual.\r
+ */\r
+ setOpt:function setOpt(i_opt)\r
+ {\r
+ try{\r
+ var db=new Array();\r
+ var bc=this.BCF_setOpt(i_opt,db);\r
+ this._mcu.callMiMicWithCheck(bc+BCF.END,db);\r
+ }catch(e){\r
+ throw new MiMicException(e);\r
+ }\r
+ }, \r
+ /**\r
* see
*/\r
getPin:function getPin(i_pin,i_opt)\r
}\r
},\r
/**\r
- * {sel:1bit,pin:{pin option}}
+ * see API manual
*/\r
setOpt:function setOpt(i_opt)\r
{\r
if(!isUndef(i_opt.pin)){\r
bc+=this._pin.BCF_setOpt(i_opt.pin,db);\r
}\r
- //enable\r
+ //隠し\r
if(!isUndef(i_opt.sel)){\r
bc+=this._adc.BCF_setSel(this._adinfo.ch,i_opt.sel,db);\r
}\r
(function(){\r
+ /** @ignore */\r
var DEV=LPCXpresso1769;\r
var BCF=DEV._BCF;\r
var EE=DEV._EE;\r
\r
/**\r
* 配列をMiMicDBへ変換する。\r
+ @private\r
@throws\r
変換失敗時は例外\r
*/\r
\r
/**\r
* PINの機能名を含むPin識別子を得る。\r
+ @private\r
*/\r
function getPinByFuncName(i_name)\r
{\r
}\r
}\r
/**\r
- * PIN機能名から使用するペリフェラルシンボルを推定する。
+ * PIN機能名から使用するペリフェラルシンボルを推定する。\r
+ @private
*/\r
function pinFuncName2PhlName(i_pinfuncname)\r
{\r
}\r
\r
/**\r
- * @see API Manual\r
+ * LPCXPresso1769.MCU(MCU)クラスのコンストラクタ。\r
+ * MCUクラスは、物理MCUとのインタフェイスを定義する。MiMicRemoteMcuInterfaceの管理機能と、MCUの物理機能への接続手段を定義する。\r
+ * 提供する機能は次のリストである。\r
+ * <ul>\r
+ * <li>物理MCUとの接続管理機能。\r
+ * <li>MCUの管理するペリフェラル操作インスタンスの生存管理機能。\r
+ * <li>MCUの持つ物理デバイスの操作オブジェクト(Pin,Peripheral等)の生成機能(インテリジェント接続)。\r
+ * </ul>\r
+ * @name LPCXpresso1769.Mcu\r
+ * @constructor\r
+ * @param {string} i_mimic_addr\r
+ * 接続するMiMicRemoteMcuのホストアドレスを指定する。IPアドレス、ホスト名等。\r
+ * <pre>ex. “127.0.0.1” , “127.0.0.1:3939”</pre>\r
+ * @param {boolean} i_is_activate\r
+ * インスタンス生成と同時にMiMicRemoteMcuとの接続を確立するかのフラグ。省略時はtrueとみなす。\r
+ * trueの場合、関数は即座にMiMicRemoteMCUに接続する。このとき、events.onActivateChangedをハンドリングすることが出来ないので注意すること。ハンドリングが必要なら、falseを指定して、改めてactivate関数をコールする。\r
+ * @example\r
+ * //create a controlable MCU via network.\r
+ * var mcu=new LPCXpresso1769.Mcu(“192.168.0.39”);\r
*/\r
DEV.Mcu=function Mcu(i_mimic_addr,i_is_activate)\r
{\r
try{\r
+ //メンバの初期化\r
+ this.events={onActivateChanged:null};\r
+ this._phl_holder=[];\r
//リモートインタフェイスの取得\r
this._mif=new MiMicRemoteMcuInterface(i_mimic_addr);\r
var ac=isUndef(i_is_activate)?true:i_is_activate;\r
throw new MiMicException(e);\r
}\r
};\r
+\r
DEV.Mcu.prototype=\r
{\r
/**\r
- * MiMicInterface
+ * MiMicInterface\r
+ @private
*/\r
_mif:null,\r
/**\r
- * @see API manual
+ * インスタンスがMCUと接続されているかをtrue/falseで返す。\r
+ * @name LPCXpresso1769.Mcu#isActive\r
+ * @function\r
+ * @return {boolean}\r
+ * インスタンスが接続中ならtrue\r
+ * @example\r
+ * var mcu=new LPCXpresso1769.Mcu(“192.168.0.39”,false);\r
+ * mcu.events.onActivateChanged=function(f){\r
+ * if(!f){alert(f)};\r
+ * }\r
+ * mcu.activate(); \r
*/\r
isActive:function isActive()\r
{\r
throw new MiMicException(e);\r
}\r
},\r
+ \r
/**\r
- * @see API manual
+ * イベントハンドラの連想配列。メンバにイベントハンドラ関数を格納する。\r
+ イベントハンドラは以下の通り。\r
+ <ul>\r
+ <li>onActivateChanged as function(f:boolean) - インスタンスのアクティブ状態が変化したときに呼び出されるイベントである。fパラメータには、状態変化後のアクティブ状態値が入る。このハンドラが呼び出されるのは、ユーザが状態を切り替えたときと、システムが状態を維持できなくなったとき(例えばMCUが応答しない)である。</li>\r
+ </ul>\r
+ * @name LPCXpresso1769.Mcu#events\r
+ * @field\r
+ * @example\r
+ * //show that MCU became active. \r
+ * var mcu=new LPCXpresso1769.Mcu("192.168.0.39",false);\r
+ * mcu.events.onActivateChanged=function(f){\r
+ * if(!f){alert(f)};\r
+ * }\r
+ * mcu.activate(); \r
*/\r
- events:{\r
- /**\r
- * @see API manual\r
- */\r
- onActivateChanged:null\r
- },\r
+ events:null,\r
/**\r
* ペリフェラルオブジェクトのホルダ。ペリフェラル名をキーにした、ペリフェラルオブジェクトの連想配列。\r
- MCUが、自身のペリフェラルオブジェクトを管理する為に使う。\r
+ * MCUが、自身のペリフェラルオブジェクトを管理する為に使う。\r
+ * @private\r
*/\r
- _phl_holder:[],\r
+ _phl_holder:null,\r
/**\r
- * Clockに関する情報を返す。
+ * SystemClockに関する情報を返す。\r
+ * @name LPCXpresso1769.Mcu#getClockInfo\r
+ * @function\r
+ * @return {cclk:MCUクロック [Hz] as int}\r
+ * クロック値を格納した連想配列である。\r
+ * @example\r
+ * // alert MCU clock\r
+ * var mcu=new LPCXpresso1769.Mcu("192.168.0.39");\r
+ * alert(mcu.getClockInfo().cclk);\r
*/\r
- getClockInfo:function getClockProperty()\r
+ getClockInfo:function getClockInfo()\r
{\r
//CCLCK値(RemoteMCU側と合わせること。将来的にはactivateの時に決定する。)\r
return {cclk:100*1000*1000};\r
},\r
/**\r
- * @see API manual
+ * インスタンスの状態をアクティブに切り替える。\r
+ * アクティブ化に成功すると、インスタンスは物理MCUと接続状態になる。\r
+ * コンストラクタで生成と同時にアクティブ化した場合は、コンストラクタ内で自動的にコールされる。\r
+ * 既にアクティブの場合、アクティブ化に失敗した場合に例外が発生する。\r
+ * @name LPCXpresso1769.Mcu#activate\r
+ * @function\r
+ * @example\r
+ * // MCU will be active.\r
+ * var mcu=new LPCXpresso1769.Mcu("192.168.0.39",false);\r
+ * mcu.activate();\r
*/\r
activate:function activate()\r
{\r
}\r
},\r
/**\r
- * @see API manual
+ * インスタンスの状態を非アクティブに切り替える。\r
+ * 成功すると、インスタンスと物理MCUは切断状態になる。\r
+ * 既に非アクティブの場合、例外が発生する。\r
+ * @name LPCXpresso1769.Mcu#deactivate\r
+ * @function\r
+ * @example\r
+ * // MCU will be deactive.\r
+ * var mcu=new LPCXpresso1769.Mcu(“192.168.0.39”);\r
+ * mcu.events.onActivateChanged=function(f){\r
+ * if(!f){alert(f)};\r
+ * }\r
+ * mcu.deactivate();\r
*/\r
deactivate:function deactivate()\r
{\r
}\r
},\r
/**\r
- * @see API manual
+ * 整形済みのMiMicBCを送信する。整形済みのMiMicBCは、MiMicTXT,MiMicDBを連結した文字列である。固定命令を送信するときに使う。\r
+ * @name LPCXpresso1769.Mcu#callMiMic^2\r
+ * @function\r
+ * @param {string} i_mimicbc\r
+ * MiMicBC。MiMicBCのフォーマットは、MiMicVM.pdf MiMicBCで定義する。\r
+ * @return {object as {MiMic result}}\r
+ * @example\r
+ * //send MiMic operations.\r
+ * var mcu=new LPCXpresso1769.Mcu(“192.168.0.39”);\r
+ * mcu.callMiMic(“ZAZZ.E”);//NOP .END \r
+ */\r
+ /**\r
+ * 整形済みのMiMicTXTと、数値配列のMiMicDBを連結して送信する。固定命令+パラメータで擬似関数を実現するときに便利である。
+ * @name LPCXpresso1769.Mcu#callMiMic^3\r
+ * @function\r
+ * @param {string} i_mimictxt\r
+ * MiMicTXT。MiMicTXTのフォーマットは、MiMicVM.pdf MiMicBCで定義する。\r
+ * @param {Array[int]} mimicdb\r
+ * 配列のINT値。値は関数によりMiMicDBに変換され、MiMicTXTに連結され、送信される。 \r
+ * @return {object as {MiMic result}}\r
+ * @example\r
+ * //send MiMic operations.\r
+ * var mcu=new LPCXpresso1769.Mcu(“192.168.0.39”);\r
+ * mcu.callMiMic(“ZAZZ.E”,[]); //NOP .END\r
+ */\r
+ /**\r
+ * MiMicBCをリンクしているMCUへMiMic Low level APIで同期送信し、結果を取得する。\r
+ * MiMic Low level APIのresult値が得られない場合、例外が発生する。この状況は、TCP/IPエラー、HTTPエラー、HTTPステータスエラー、MiMicVMのラインタイムエラー、MiMicRemoteMCUのフォールト等の原因で発生する。\r
+ * 関数が値を返した場合は、MiMicRemoteMCUが処理を完了し、正しい形式のステータスを受信できた場合である。例外が発生した場合は、リンクが破壊されている場合がある。リンクが破壊された場合は、1分以内にアクティブ状態が変化するので、それを検出して判断する。<br/>\r
+ * 引数の違いにより、数種類の呼び出し方がある。詳細は、callMiMic^nを参照。\r
+ * @name LPCXpresso1769.Mcu#callMiMic^1\r
+ * @function\r
+ * @param ...\r
+ * LPCXpresso1769.Mcu#callMiMic^nを参照\r
+ * @return {object as {MiMic result}}\r
+ * 応答値を格納した連想配列である。\r
+ * 詳細は 低レベルAPI。MiMicRemoteMcuInterface.execBc関数、または、MiMicVM.pdf Appendix 1. MiMicVM HTTP Interfaceを参照。 \r
*/\r
callMiMic:function callMiMic(/**/)\r
{\r
}\r
},\r
/**\r
- * @see API manual\r
+ * callMiMic関数のラッパーである。\r
+ * callMiMic関数成功後に、resultが成功(MVM_OK=0x0)であるかを確認し、それ以外であれば例外を発生させる。\r
+ * resultが0以外想定されないMiMicBCを実行するときに、便利である。<br/>\r
+ * 引数、戻り値については、callMiMic関数を参照。\r
+ * @name LPCXpresso1769.Mcu#callMiMicWithCheck\r
+ * @function\r
+ * @example\r
+ * //send 2 MiMic operations.\r
+ * var mcu=new LPCXpresso1769.Mcu(“192.168.0.39”);\r
+ * mcu.callMiMicWithCheck(“ZAZZ.E”,[]);\r
+ * mcu.callMiMicWithCheck(“ZAZZ.ENOOOO”);//exception!\r
*/\r
callMiMicWithCheck:function execBc2WithException(/**/)\r
{\r
}\r
},\r
/**\r
- * @see API manual
+ * ピン機能名から、Pinインスタンスを生成する。\r
+ * 生成されたピンは、ピン機能名の割り当てられている物理ピンで実現される。\r
+ * ピン機能名は、 LPCXpresso1769.P?[?]の[ピン機能名]で定義する文字列である。これは、UM10360 3.1.2.3 Chapter 8: LPC17xx Pin connect blockのfunction nameで定義される、PINSELレジスタに設定する文字列と一致する。
+ * @name LPCXpresso1769.Mcu#getPin^2\r
+ * @function\r
+ * @param {string} i_pin_function_name\r
+ * ピン機能名の文字列。 ex. “GPIO0.0” ,”AD0.0”\r
+ * GPIOについては、”GPIO Port 0.0”を”GPIO0.0”のように、省略すること。 \r
+ * @return {object as PinObject}\r
+ * @example\r
+ * var mcu=new LPCXpresso1769.Mcu(“192.168.0.39”);\r
+ * //create gpio pin at PIN0[0]\r
+ * var gpiopin1=mcu.getPin("GPIO0.0");\r
+ */\r
+ /**\r
+ * ピン識別子と機能名から、機能を割り当てたピンを生成する。組み合せにより、ピンを生成できない可能性もある。\r
+ * 組み合わせは、UM10360 3.1.2.3 Chapter 8: LPC17xx Pin connect blockを参照すること。\r
+ * @name LPCXpresso1769.Mcu#getPin^3\r
+ * @function\r
+ * @param {object as pin識別子} i_pin\r
+ * ピン識別子。指定できるのは、LPCXpresso1796.P?[?]である。\r
+ * @param {string as 機能名} i_function_name\r
+ * 機能名は文字列である。 指定できる文字列は、LPCXpresso1769.FUNC_NAMEで定義する。\r
+ * @return {object as PinObject}\r
+ * @example\r
+ * var mcu=new LPCXpresso1769.Mcu(“192.168.0.39”);\r
+ *\r
+ * //create gpio pin at PIN0[1]\r
+ * var gpiopin2=mcu.getPin(LPCXpresso1769.P0[1],"GPIO");\r
+ * //or mcu.getPin(LPCXpresso1769.P0[1],LPCXpresso1769.FUNC_SYMBOL.GPIO);\r
+ *\r
+ * //create AD at PIN0[23]\r
+ * var adpin1=mcu.getPin(LPCXpresso1769.P0[23],"AD"); \r
+ * //or mcu.getPin(LPCXpresso1769.P0[23],LPCXpresso1769.FUNC_SYMBOL.AD);\r
+ *\r
+ * //create AD at PIN0[3] (exception)\r
+ * var adpin2=mcu.getPin(LPCXpresso1769.P0[3],"AD");\r
+ */\r
+ /**\r
+ * 物理ピンを制御するPinインスタンスを得る。\r
+ * 制御ペリフェラル、Pinを順に生成する方法と異なり、機能の実現に必要なインスタンスを自動的に準備できる。\r
+ * Pinが生成できない場合、例外が発生する。\r
+ * ペリフェラルが自動生成された場合、そのオプションはデフォルト値が採用される。既に生成済みのペリフェラルの場合は何もしない。PINのオプションは、デフォルト値が採用される。\r
+ * 引数の違いにより、数種類の呼び出し方がある。\r
+ * @name LPCXpresso1769.Mcu#getPin^1\r
+ * @function\r
+ * @param ...\r
+ * LPCXpresso1769.Mcu#getPin^nを参照\r
+ * @return {object as PinObject}\r
+ * 返却されるPinインスタンスの型は、機能により異なる。機能とPinインスタンスのクラスの対応は、以下の通りである。\r
+ * <ul>\r
+ * <li>GPIO - LPCXpresso1769.GpioPin</li>\r
+ * <li>AD - LPCXpresso1769.AdcPin</li>\r
+ * <li>PWM - LPCXpresso1769.PwmPin</li>\r
+ * </ul>\r
*/\r
getPin:function getPin(/*...*/)\r
{\r
}\r
},\r
/**\r
- * @see API manual\r
+ * 未実装である。\r
+ * ポート(複数ピンで構成するIO)を制御するPortインスタンスを得るする。\r
+ * 制御ペリフェラル、Portを順に生成する方法と異なり、機能の実現に必要なインスタンスを自動的に生成する。\r
+ * Portが生成できない場合、例外が発生する。\r
+ * @name LPCXpresso1769.Mcu#getPort\r
+ * @function \r
*/\r
getPort:function getPort(i_port_name)\r
{\r
throw new MiMicException("Not implemented.");\r
},\r
/**\r
- * @see API manual
+ * ペリフェラル名から、ペリフェラルオブジェクトを得る。\r
+ * 関数は、初めて要求されたペリフェラルについては、オブジェクトを生成し、MCUインスタンスに保存する。同じ名前のペリフェラルが再度要求されると、過去に生成したペリフェラルを返す。\r
+ * @name LPCXpresso1769.Mcu#getPeripheral\r
+ * @function\r
+ * @param {string as ペリフェラル名} i_phl_name\r
+ * ペリフェラル名は文字列である。指定できる文字列は、LPCXpresso1769.PHL_NAMEで定義する。\r
+ * @param {object as ペリフェラルオプション} i_opt\r
+ * ペリフェラルに渡すオプション値である。省略可能。ペリフェラルが新しく生成される場合(はじめてペリフェラルが設定されようとしているとき)に、コンストラクタのi_optに設定する。2回目以降の参照で設定されると、例外を発生する。値の構文は、取得しようとするペリフェラルのsetOpt関数のi_optパラメータの説明を参照すること。 \r
+ * @return {object as Peripheral}\r
+ * 返却されるインスタンスのクラスは、ペリフェラル名により異なる。その対応は以下の通りである。\r
+ * <ul>\r
+ * <li>GPIO - LPCXpresso1769.Gpio</li>\r
+ * <li>ADC - LPCXpresso1769.Adc</li>\r
+ * <li>PWM - LPCXpresso1769.Pwm</li>\r
+ * </ul>\r
+ * @example\r
+ * //get GPIO peripheral\r
+ * var mcu=new LPCXpresso1769.Mcu(“192.168.0.39”);\r
+ * var gpio=mcu.getPeripheral(“GPIO”); \r
*/\r
getPeripheral:function getPeripheral(i_phl_symbol,i_opt)\r
{\r
return this._phl_holder[i_phl_symbol];\r
},\r
/**\r
- * [forSystem]システム関数。MCU依存のペリフェラルオブジェクトを登録する。
+ * [forSystem]システム関数。MCU依存のペリフェラルオブジェクトを登録する。\r
+ @private
*/\r
registerPhl:function registerPhl(i_phl,i_symbol)\r
{\r
var EE=DEV._EE;\r
var isUndef=MiMicLib.isUndef;\r
/**\r
- * @see API manual\r
+ * LPCXPresso1769.Memory (Memory)クラスのコンストラクタ。\r
+ * Memoryクラスは、MCUのメモリ空間へアクセスする手段を提供する。\r
+ * このクラスは、メモリアクセス対してなんら保護機能を持たない。MCUのメモリマップに十分に注意する必要がある。\r
+ * @name LPCXpresso1769.Memory\r
+ * @constructor\r
+ * @param {object as LPCXpresso1769.Mcu} i_mcu\r
+ * インスタンスを結びつけるMcuオブジェクト。\r
+ * @param {int} i_base\r
+ * メモリにアクセスするときのベースアドレス。省略可能である。省略時は0x0とみなす。4バイト境界でなければならない。クラスの提供する関数でアドレスを指定した時には、全てこの値が加算される。\r
+ * @example\r
+ * //create a controlable MCU via network.\r
+ * var mcu=new LPCXpresso1769.Mcu(“192.168.0.39”);\r
+ * var memory=new LPCXpresso1769.Memory(mcu); \r
*/\r
DEV.Memory=function Memory(i_mcu,i_base)\r
{\r
_base:0x00000000,\r
_mcu:null,\r
/**\r
- *@see API manual
+ * 指定したアドレスの32ビット値を取得する。\r
+ * @name LPCXpresso1769.Memory#read32^2\r
+ * @function\r
+ * @param {int} i_offset\r
+ * コンストラクタで指定したアドレスからのオフセット位置を指定する。4バイト境界でなければならない。\r
+ * @return {int}\r
+ * 1個のint値。\r
+ * @example\r
+ * var mcu=new LPCXpresso1769.Mcu("192.168.0.39");\r
+ * var mem=new LPCXpresso1769.Memory(mcu); //create instance\r
+ * alert(mem.read32(0x00000000)); //show 1 value \r
+ */\r
+ /**\r
+ * 指定したオフセットから、i_sizeバイトのメモリに格納した値を、それぞれ32ビット単位で値を取得する。i_offsetの位置から、32bit単位でi_size/4個の値を取得することになる。シーケンシャルアクセスに使用する。\r
+ * @name LPCXpresso1769.Memory#read32^3\r
+ * @function\r
+ * @param {int} i_offset\r
+ * コンストラクタで指定したアドレスからのオフセット位置を指定する。4バイト境界でなければならない。\r
+ * @param {int} i_size\r
+ * 取得するバイト数を指定する。4バイト単位でなければならない。 \r
+ * @return {int | Array[int]}\r
+ * 取得する値の個数は、i_size/4個である。個数により、戻り値の型が異なるので注意すること。\r
+ * @example\r
+ * var mcu=new LPCXpresso1769.Mcu("192.168.0.39");\r
+ * var mem=new LPCXpresso1769.Memory(mcu); //create instance\r
+ * mem.read32(0x0,8); //return 2 values.\r
+ */\r
+ /**\r
+ * オフセットの配列要素に対応した値を、それぞれ32ビット単位で取得する。\r
+ * ランダムアクセスに使用する。\r
+ * @name LPCXpresso1769.Memory#read32^4\r
+ * @function\r
+ * @param {array[int]} i_offsets\r
+ * オフセットアドレスの配列。それぞれ4バイト境界でなければならない。\r
+ * @return {int | Array[int]}\r
+ * 返却される値の個数は、i_offsetの長さと同じになる。個数により、戻り値の型が異なるので注意すること。\r
+ * @example\r
+ * var mcu=new LPCXpresso1769.Mcu("192.168.0.39");\r
+ * var mem=new LPCXpresso1769.Memory(mcu); //create instance\r
+ * mem.read32([0x0,0x14,0x08]); //return 3 values by specified order.\r
+ */\r
+ /**\r
+ * メモリから値を読み出して、値セットの配列、又は値を返す。\r
+ * 関数はバイト単位のアライメントでメモリにアクセスする。メモリアドレス、取得サイズは4バイト境界に一致させなければならない。\r
+ * 引数の違いにより、数種類の呼び出し方がある。\r
+ * @name LPCXpresso1769.Memory#read32^1\r
+ * @function\r
+ * @param ...\r
+ * 詳細は、read32^nを参照。\r
+ * @return {int | Array[int]}\r
+ * 返却値の数により、型が異なる。1個の場合はint値、複数の場合はint型の配列である。
*/\r
read32:function read32(/*arguments*/)\r
{\r
\r
\r
/**\r
- * このクラスは、PWMペリフェラルを管理します。\r
- @param i_opt\r
- オプション値です。\r
- {\r
- freq:100,\r
- phl:{power:1,clock:0}\r
- }\r
+ * see API manual
*/\r
DEV.Pwm=function Pwm(i_mcu,i_opt)\r
{\r
_MRn:[0x40018018,0x4001801C,0x40018020,0x40018024,0x40018040,0x40018044,0x40018048],\r
_phl:null,\r
_mcu:null,\r
+\r
/**\r
- * {phl:{object},(freq:int|mr0:int)}
+ * {phl:{object},(freq:int)}
*/\r
BCF_setOpt:function BCF_setOpt(i_opt,i_db)\r
{\r
}\r
},\r
/**\r
+ * See API manual.\r
+ */\r
+ setOpt:function setOpt(i_opt)\r
+ {\r
+ try{\r
+ var db=new Array();\r
+ var bc=this.BCF_setOpt(i_opt,db);\r
+ this._mcu.callMiMicWithCheck(bc+BCF.END,db);\r
+ }catch(e){\r
+ throw new MiMicException(e);\r
+ }\r
+ }, \r
+ /**\r
* see API manual\r
*/\r
getPin:function getPin(i_pin,i_opt)\r
/**\r
- * LPCXPresso1769用の高レベルMiMicAPI\r
- MiMicCoreの関数を必要とします。
+ * LPCXPresso1769用の高レベルAPIのネームスペースである。\r
+ * MCU,Pin,peripheralのクラスと、識別子を定義する。\r
+ * このネームスペースのにある宣言は、LPC1769プロセッサに依存する。\r
+ * @namespace\r
*/\r
var LPCXpresso1769;\r
\r
(function(){\r
var isUndef=MiMicLib.isUndef;\r
- \r
var DEV=\r
{\r
/**\r
* エラーIDテーブルの拡張\r
+ * @private\r
*/\r
_EE:function(i_base){\r
return{\r
VM_RUNTIME :[i_base|0x04,"MVM runtime error"],\r
};}(MiMicError.NG[0]|MiMicError.MID_MiMic|MiMicError.CAID_LPCXPresso1769),\r
/**\r
- * BCフラグメント・ライブラリ
+ * BCフラグメント・ライブラリ\r
+ * @private
*/\r
_BCF:{\r
/**\r
* ([i_addr]&(~(i_mask<<i_shl))|((i_mask & i_val)<<i_shl)を実行するMimicBCを生成する。\r
- [S0]のアドレスのメモリ値に[S1]の値でマスクして,[S2]の値とORして[S0]に書き戻す。\r
- SGET #0;\r
- SGET #1;\r
- SGET #2;\r
- MGET #7,#0;\r
- AND #7,#1;\r
- OR #7,#2;\r
- MPUT #7,#0;\r
- @param i_mask\r
- ビットマスク\r
- @param i_val\r
- ビット値\r
+ * [S0]のアドレスのメモリ値に[S1]の値でマスクして,[S2]の値とORして[S0]に書き戻す。\r
+ * <pre>\r
+ * SGET #0;\r
+ * SGET #1;\r
+ * SGET #2;\r
+ * MGET #7,#0;\r
+ * AND #7,#1;\r
+ * OR #7,#2;\r
+ * MPUT #7,#0;\r
+ * </pre>\r
+ * @private\r
+ * @param i_mask\r
+ * ビットマスク\r
+ * @param i_val\r
+ * ビット値\r
*/\r
setBit:function setBit(i_addr,i_mask,i_val,i_shl,i_db)\r
{\r
},\r
/**\r
* 値をメモリに設定する。\r
- SGET #0\r
- SGET #1\r
- MPUT #1,#0\r
+ * <pre>\r
+ * SGET #0\r
+ * SGET #1\r
+ * MPUT #1,#0\r
+ * </pre>\r
+ * @private\r
*/\r
setMem:function setMem(i_addr,i_val,i_db)\r
{\r
throw new MiMicException(e);\r
} \r
},\r
- /* メモリを32bit読む\r
- SGET #0\r
- MGET #0,#0\r
- SPUT #0\r
+ /**\r
+ * メモリを32bit読む\r
+ * <pre>\r
+ * SGET #0\r
+ * MGET #0,#0\r
+ * SPUT #0\r
+ * </pre>\r
+ * @private\r
*/ \r
getMem:function getMem(i_addr,i_db)\r
{\r
throw new MiMicException(e);\r
} \r
},\r
- /* メモリを32bit読む\r
- SGET #0\r
- MGET #0,#0\r
- SPUT #0\r
+ /**\r
+ * メモリを32bit読む\r
+ * <pre>\r
+ * SGET #0\r
+ * MGET #0,#0\r
+ * SPUT #0\r
+ * </pre>\r
+ @private\r
*/\r
READMEM:"EA00DB0000EE00",\r
\r
/**\r
* BCフラグメントを終了する。\r
- EXIT;\r
- .END\r
+ * <pre>\r
+ * EXIT;\r
+ * .END\r
+ * </pre>\r
+ @private\r
*/\r
END:"ZZ.E" \r
},\r
/**\r
- * @see API manual\r
+ * 機能名のテーブル。\r
+ * 機能名として使用できる文字列の一覧表である。機能名は、機能を識別する目的で定義する。\r
+ * この値は一覧の定義のみであるので、使用することは無い。\r
+ * <ul>\r
+ * <li>GPIO - GPIO機能を表す。</li>\r
+ * <li>AD - AD convert機能を表す。</li>\r
+ * <li>DA - DA convert機能を表す。</li>\r
+ * <li>PWM - PWM機能を表す。</li>\r
+ * </ul>\r
+ * @name LPCXpresso1769#FUNC_NAME\r
+ * @constant\r
+ * @field\r
*/\r
FUNC_NAME:[\r
"GPIO","AD","DA","PWM"\r
],\r
/**\r
- * @see API manual\r
+ * ペリフェラル名のテーブル。\r
+ * ペリフェラル名として使用できる文字列の一覧表である。ペリフェラル名は、ペリフェラルを識別する目的で定義する。\r
+ * この値は一覧の定義のみであるので、使用することは無い。
+ * <ul>\r
+ * <li>GPIO - GPIO peripheral</li>\r
+ * <li>ADC - AD peripheral</li>\r
+ * <li>DAC - DA peripheral</li>\r
+ * <li>PWM - PWM peripheral</li>\r
+ * </ul>\r
+ * @name LPCXpresso1769#PHL_NAME\r
+ * @constant\r
+ * @field\r
*/\r
PHL_NAME:[\r
"GPIO","ADC","DAC","PWM"\r
],\r
/**\r
- * @see API manual\r
- PHL:{PHL_NAME:[PCLKSELreg#PCLKSELbit,PCONPbit]}\r
+ * LPCXpressoのPeripheralパラメタを格納したテーブルである。要素はペリフェラル識別子である。\r
+ * UM10360のChapter 4: LPC17xx Clocking and power controlを元に定義している。\r
+ * ペリフェラル識別子はペリフェラルのレジスタ番号とビット番号を格納した配列である。\r
+ * <pre>\r
+ * PHL:{PHL_NAME:[PCLKSELreg#,PCLKSELbit#,PCONPbit#]}\r
+ * </pre>\r
+ * nullはそのビットが無効であることを示す。\r
+ * @name LPCXpresso1769#PHL\r
+ * @constant\r
+ * @field\r
+ * @example\r
+ * LPCXpresso1796.PHLADC //ADC peripheral\r
*/\r
PHL:{\r
WDT: [0,0,null],\r
USB:[null,null,31]\r
},\r
/**\r
- * @see API Manual
+ * PCXpressoのPINに対応する識別子のテーブルである。要素はPIN識別子である。テーブルは、P0[n]~p4[m]まで存在する。\r
+ * ピン識別子は、ピンP?[?]を、P0[0]のように表現する。これは、UM10360のTable 73. Pin descriptionのSymbol P?[?]に対応している。\r
+ * Pn[m]のn,mの使用できる値は、Table 73. Pin descriptionに一致する。\r
+ * PIN識別子から値を取り出すときは、専用の関数を使用するべきである。\r
+ * ピン識別子は、ピンを制御するレジスタ番号とビット番号を格納した配列である。\r
+ * <pre>\r
+ * Pn:[[PINSELreg#,PINMODEreg#,PINMODEODreg#,bitidx,[ピン機能名]]]\r
+ * </pre>\r
+ * <ul>\r
+ * <li>PINFUNC,PINMODEのビット位置は、(bitidx%16)*2で計算する。ODRegについては、そのままの数値を使う。</li>\r
+ * <li>[ピン機能名]は、PINSEL設定値に対応するテーブルである。配列のインデクス値が、そのままPINSELの値に対応する。</li>\r
+ * <li>設定できない値のフィールドはnullである。ピン機能名はPin Function Select registerのテーブルの定義値そのもである。ただし、GPIOについては"GPIO Port "を"GPIO"に省略していることに注意。</li>\r
+ * <li>nullはそのビットが無効であることを示す。</li>\r
+ * </ul>\r
+ * @name LPCXpresso1769#P0\r
+ * @constant\r
+ * @field\r
+ * @example\r
+ * //1\r
+ * LPCXpresso1796.P0[0]; //P0[0]\r
+ * LPCXpresso1796.P1[1]; //P0[01]\r
+ * //2\r
+ * var mcu=new LPCXpresso1769.Mcu(“192.168.0.39”);\r
+ * var gpiopin=mcu.getPin(LPCXpresso1769.P0[0],"GPIO");//bind P0[0] with GPIO function
*/\r
P0:[\r
[0,0,0,0,["GPIO0.0","RD1","TXD3","SDA1"]],//0\r
[1,null,0,29,["GPIO0.29","USB_D+",null,null]],//29\r
[1,null,0,30,["GPIO0.30","USB_D-",null,null]],//30\r
],\r
+ /**\r
+ * P1に対する定義である。詳細はP0のドキュメントを参照。
+ * @name LPCXpresso1769#P1\r
+ * @constant\r
+ * @field\r
+ * @see LPCXpresso1769#P0
+ */\r
P1:[ //P1[x]\r
[2,2,1,0,["GPIO1.0","ENET_TXD0",null,null]],//0\r
[2,2,1,1,["GPIO1.1","ENET_TXD1",null,null]],//1\r
[3,3,1,30,["GPIO1.30",null,"VBUS","AD0.4"]],//30\r
[3,3,1,31,["GPIO1.31",null,"SCK1","AD0.5"]],//31\r
],\r
+ /**\r
+ * P2に対する定義である。詳細はP0のドキュメントを参照。\r
+ * @name LPCXpresso1769#P2\r
+ * @constant\r
+ * @field\r
+ * @see LPCXpresso1769#P0\r
+ */\r
P2:[ //P2[x]\r
[4,4,2,0,["GPIO2.0","PWM1.1","TXD1",null]],//0\r
[4,4,2,1,["GPIO2.1","PWM1.2","RXD1",null]],//1\r
[4,4,2,12,["GPIO2.12","EINT2",null,"I2STX_WS"]],//12\r
[4,4,2,13,["GPIO2.13","EINT3",null,"I2STX_SDA"]],//13\r
],\r
+ /**\r
+ * P3に対する定義である。詳細はP0のドキュメントを参照。\r
+ * @name LPCXpresso1769#P3\r
+ * @constant\r
+ * @field\r
+ * @see LPCXpresso1769#P0\r
+ */\r
P3:[ //P3[x]\r
null/* 0*/,null/* 1*/,null/* 2*/,null/* 3*/,null/* 4*/,null/* 5*/,null/* 6*/,null/* 7*/,null/* 8*/,null/* 9*/,\r
null/*10*/,null/*11*/,null/*12*/,null/*13*/,null/*14*/,null/*15*/,null/*16*/,null/*17*/,null/*18*/,null/*19*/,\r
[7,7,3,25,["GPIO3.25",null,"MAT0.0","PWM1.2"]],//25\r
[7,7,3,26,["GPIO3.26","STCLK","MAT0.1","PWM1.3"]],//26\r
],\r
+ /**\r
+ * P4に対する定義である。詳細はP0のドキュメントを参照。\r
+ * @name LPCXpresso1769#P4\r
+ * @constant\r
+ * @field\r
+ * @see LPCXpresso1769#P0\r
+ */\r
P4:[ //P4[x]\r
null/* 0*/,null/* 1*/,null/* 2*/,null/* 3*/,null/* 4*/,null/* 5*/,null/* 6*/,null/* 7*/,null/* 8*/,null/* 9*/,\r
null/*10*/,null/*11*/,null/*12*/,null/*13*/,null/*14*/,null/*15*/,null/*16*/,null/*17*/,null/*18*/,null/*19*/,\r
],\r
/**\r
* [forSystem]ピン識別子のアクセス関数である。\r
- ピン機能シンボルのプレフィクス(機能シンボル)を、 ピン識別子を元に、完全な名称に変換する。\r
- ピンにFunctionが含まれているか調べることが出来る。\r
+ * ピン機能シンボルのプレフィクス(機能シンボル)を、 ピン識別子を元に、完全な名称に変換する。\r
+ * ピンにFunctionが含まれているか調べることが出来る。\r
+ * @private\r
*/\r
completePinFunctionName:function completePinFunctionName(i_pin,i_prefix)\r
{\r
},\r
/**\r
* [forSystem]ピン識別子のアクセス関数。\r
- ピン識別値から、Pinレジスタの番号と、ビット位置を取り出す。\r
- @return\r
- {s:pinselのレジスタ番号、m:modeのレジスタ番号、,o:odのレジスタ番号,sbm:mode,selのビット位置,ob:odのビット位置}
+ * ピン識別値から、Pinレジスタの番号と、ビット位置を取り出す。\r
+ * @private\r
+ * @return\r
+ * {s:pinselのレジスタ番号、m:modeのレジスタ番号、,o:odのレジスタ番号,sbm:mode,selのビット位置,ob:odのビット位置}
*/\r
getPinRegInfo:function getPinRegInfo(i_pin)\r
{\r
},\r
/**\r
* [forSystem]ピン識別子のアクセス関数。\r
- PIN機能名に一致するPinsel値を取り出す。\r
+ * PIN機能名に一致するPinsel値を取り出す。\r
+ * @private\r
*/\r
getPinSelByFunctionName:function getPinSelByFunctionName(i_pin,i_name)\r
{\r
},\r
/**\r
* [forSystem]ピンが、ピン機能シンボルを持つか返す。\r
+ * @private\r
*/\r
hasPinFunctionName:function hasPinFunctionName(i_pin,i_name)\r
{\r
}\r
}\r
\r
-\r
+/**\r
+ * @private
+ */\r
DEV.I2c=function I2c()\r
{\r
throw new MiMicException("Not imprement.");\r
}\r
\r
+/**\r
+ * @private\r
+ */\r
DEV.Dma=function Dma()\r
{\r
throw new MiMicException("Not imprement.");\r
}\r
+/**\r
+ * @private\r
+ */\r
DEV.Uart=function Uart()\r
{\r
throw new MiMicException("Not imprement.");\r
}\r
+/**\r
+ * @private\r
+ */\r
DEV.Usb=function Usb()\r
{\r
throw new MiMicException("Not imprement.");\r
\r
\r
/**\r
- * MiMic関数ライブラリ\r
+ * MiMicが使用する関数、定数を定義する。\r
+ * @namespace\r
*/\r
var MiMicLib=\r
{\r
- isUndef:function isUndef(a){return typeof a==="undefined"},\r
+ /**\r
+ * aがundefinedであるかを真偽値で返す。\r
+ * @function\r
+ * @param {object} a\r
+ * 判定対象のオブジェクト\r
+ * @return {Boolean}\r
+ * aがundefinedであれば、trueである。\r
+ */ \r
+ isUndef:function isUndef(a){\r
+ return typeof a==="undefined"\r
+ },\r
+ /**\r
+ * 連想配列をシャローコピーして複製する。\r
+ * @function\r
+ * @param {object} a\r
+ * 複製元のオブジェクトである。\r
+ * @return {object}\r
+ * 複製したオブジェクトである。\r
+ */ \r
cloneAssoc:function cloneAssoc(a)\r
{\r
var r={};\r
}\r
}\r
\r
-\r
-\r
/**\r
- * @see API manual\r
+ * MiMicExceptionが使用するエラーコードと、その判定関数を定義する。\r
+ * エラーコードは、以下の形式の配列オブジェクトで表現する。\r
+ * <pre>\r
+ * [code:int,message:string]\r
+ * </pre>\r
+ * \r
+ * codeは31ビットのエラーコードである。ビットフィールドの意味は以下の通りである。\r
+ * <table>\r
+ * <tr><th>bit</th><th>name</th><th>discription</th></tr>\r
+ * <tr><td>30</td><td>ErrorBit</td><td>Error:1,OK:0</td></tr>\r
+ * <tr><td>29-24</td><td>Reserved</td><td>-</td></tr>\r
+ * <tr><td>23-16</td><td>ModuleID</td><td>0x00:unknown<br/>0x39:MiMic<br/>0xF0-0xFF: user define<br/>Other:Reserved<br/></td></tr>\r
+ * <tr><td>15-8</td><td>ClassID</td><td>0x00:unknown</td></tr>\r
+ * <tr><td>7-0</td><td>ErrorID</td><td></td></tr>\r
+ * </table>\r
+ * @namespace\r
+ * @example\r
+ * throw new MiMicException(MiMicError.NG);\r
*/\r
var MiMicError=\r
{\r
+ /** 成功を示すエラー値\r
+ * @constant*/ \r
OK:[0x00000000,"OK"],\r
- NG:[0x40000000,"NG"], //汎用NG\r
+ /** 失敗を示すエラー値。不明な場所で、不明な何かが、不明なエラーを起こしたことを示す。\r
+ * @constant*/ \r
+ NG:[0x40000000,"NG"],\r
/**\r
- * エラーコードがOKか調べる。
+ * エラーコードがOKか調べる。\r
+ * @function\r
+ * @param {Object as [MiMicErrorCode]} v\r
+ * 評価するオブジェクト\r
+ * @return {Boolean}\r
+ * エラーコードでなければ、trueを返す。\r
+ * @example\r
+ * MiMicError.isOK(MiMicError.OK);//true\r
*/\r
isOK:function(v){\r
return (0x40000000 & v)==0x00000000;\r
},\r
- /**\r
+ /*\r
* 定数定義
*/\r
+ /** @private*/\r
MID_MiMic:0x00390000,\r
+ /** @private*/\r
CAID_RemoteMCU :0x0100, //\r
+ /** @private*/\r
CAID_LPCXPresso1769:0x0200 //リモートAPI\r
\r
}\r
\r
+\r
+/**\r
+ * 引数が1個のパターン。\r
+ * @name MiMicException.2\r
+ * @function\r
+ * @param {object} e\r
+ * eのクラスにより、動作が異なる。\r
+ * <ul>\r
+ * <li>{string} - MiMicException(MiMicError.NG,e)と等価である。</li>\r
+ * <li>{object as [MiMicErrorCode]} - エラーコードを指定して例外を生成する。エラーコードについては、MiMicErrorを参照</li>\r
+ * <li>{object} - MiMicException(MiMicError.NG,e.toString())と等価である。objectを文字列化して例外を生成する。</li>\r
+ * <li>{MiMicException} - codeとmessageを継承して例外を生成する。コールスタックを生成するときは、このパターンを使うこと。</li>\r
+ * </ul>\r
+ * @example\r
+ * throw new MiMicException(MiMicError.NG);\r
+ * throw new MiMicException("Error");\r
+ * try{\r
+ * throw new MiMicException("Error");\r
+ * }catch(e){\r
+ * throw new MiMicException(e);\r
+ * }\r
+ */\r
/**\r
- * @see API manual
+ * 引数が2個のパターン。追加メッセージを含めることが出来る。\r
+ * @name MiMicException.3\r
+ * @function\r
+ * @param {object} e\r
+ * eのクラスにより、動作が異なる。\r
+ * <ul>\r
+ * <li>{MiMicErrorCode} - エラーコードを指定して例外を生成する。</li>\r
+ * <li>{MiMicException} - codeとmessageを継承して例外を生成する。コールスタックを生成するときは、このパターンを使うこと。</li>\r
+ * </ul>\r
+ * @param {string} s\r
+ * 追加するエラーメッセージ。\r
+ */\r
+/**\r
+ * MiMic javascript APIが生成する例外クラスのコンストラクタである。関数ごとにMiMicExceptionを使ったtry-catchを導入することにより、例外発生時にスタックトレースメッセージを得ることが出来る。\r
+ * スタックトレースは改行で連結された文字列である。messageプロパティに格納される。alert関数で表示することで、効率的なデバックが可能である。\r
+ * 引数の違いにより、数種類の呼び出し方がある。\r
+ * @constructor\r
+ * @param ...\r
+ * 詳細は、MiMicException.nを参照。\r
*/\r
function MiMicException(/*...*/)\r
{\r
}\r
throw new MiMicException("Invalid MiMicException argument.");\r
}\r
+\r
MiMicException.prototype={\r
+ /**\r
+ * MiMicErrorCode形式のエラーコードを保持する。\r
+ * @field {object as MiMicErrorCode}
+ */\r
code:MiMicError.OK,\r
+ /**\r
+ * エラーメッセージを保持する。この値は、改行区切りのコールスタックである。\r
+ * @field {string}
+ */\r
message:"",\r
+ /**\r
+ * messageフィールドをalertで表示する。\r
+ * @function\r
+ * @example\r
+ * try{\r
+ * throw new MiMicException();\r
+ * }catch(e){\r
+ * e.alert();\r
+ * }
+ */\r
alert:function(){\r
alert(this.message);\r
},\r
+ /**\r
+ * toStringを上書きする。オブジェクトを文字列化する。\r
+ * 文字列は例外のコールスタックであり、デバックで役立つ。\r
+ * @function\r
+ * @return {string}\r
+ * 現在のオブジェクトの状態(例外のコールスタック)\r
+ * @example\r
+ * try{\r
+ * throw new MiMicException();\r
+ * }catch(e){\r
+ * alert(e.toString());\r
+ * }
+ */\r
toString:function()\r
{\r
return "MiMicException:"+this.message;\r
\r
(function(){\r
/**\r
- * エラーID定義
+ * エラーID定義\r
+ * @private
*/\r
var EE=function(i_base)\r
{\r
TCP_CONNECT:[i_base|0x01,"TCP CONNECT FAILED"],//接続エラー\r
HTTP :[i_base|0x02,"HTTP FAILED"]}//HTTPエラー\r
}(MiMicError.NG[0]|MiMicError.MID_MiMic|MiMicError.CAID_RemoteMCU);\r
-\r
+ /**\r
+ * MiMicRemoteMcuInterfaceクラスのコンストラクタ。\r
+ * MiMicRemoteMcuInterfaceクラスは、MCUで動作するMiMicRemoteMcuとの通信機能と、接続状態の監視機能を提供する。低レベルAPI全てを実装する。\r
+ * 低レベルAPIは、MiMicRemoteMcuとの通信を、関数コールに変換する。\r
+ * インスタンス生成直後は、MiMicRemoteMcuとの接続は断状態である。connect関数を実行して、接続する必要がある。\r
+ * 通信仕様については、MiMicVM.pdf Appendix 1.MiMicVM HTTP Interfaceを参照すること。\r
+ * @constructor\r
+ * @param {string} server\r
+ * 接続するMiMicRemoteMcuのホストアドレスを指定する。IPアドレス、ホスト名等。\r
+ * ex. “127.0.0.1” , “127.0.0.1:3939”\r
+ * @example\r
+ * //create a controlable MCU via network.\r
+ * var mcu=new MiMicRemoteMcuInterface(“192.168.0.39”);
+ */\r
MiMicRemoteMcuInterface=function MiMicRemoteMcuInterface(server)\r
{\r
this._mimic_host=server;\r
_keep_alive:null, \r
/**\r
* XmlHttpRequestを実行する。\r
- @return\r
- 取得したデータ。\r
- @throws\r
- 取得失敗時(例外発生の場合)\r
+ * @private\r
+ * @return\r
+ * 取得したデータ。\r
+ * @throws\r
+ * 取得失敗時(例外発生の場合)\r
*/\r
_xhrGet:function(i_url,i_async,i_callback)\r
{\r
},\r
/**\r
* MiMicの応答から、オンラインチェックを実行します。\r
- @param res\r
- レスポンスを格納済みのXHRオブジェクト\r
- @return\r
- オンラインならtrue\r
- 入力文章から状態が判定できなかった場合、false\r
+ * @private\r
+ * @param res\r
+ * レスポンスを格納済みのXHRオブジェクト\r
+ * @return\r
+ * オンラインならtrue\r
+ * 入力文章から状態が判定できなかった場合、false\r
*/\r
_isOnline_parseResponse: function(res)\r
{\r
},\r
/**\r
* MvmのレスポンスをJSOにする。\r
- @return\r
- 成功時はjson\r
- @throws\r
- JSONが得られない場合\r
+ * @private\r
+ * @return\r
+ * 成功時はjson\r
+ * @throws\r
+ * JSONが得られない場合\r
*/\r
_parseMvmResult:function(i_mvmresult)\r
{\r
throw new MiMicException(EE.NG);\r
},\r
/**\r
- * @see API manual\r
+ * 接続状態を真偽値で返す。\r
+ * 接続状態の場合、execBc等の低レベルAPIを使用できる。\r
+ * 状態は、インスタンスが定期的に実行するプローブ信号でチェックされ、更新される。\r
+ * @function\r
+ * @return {boolean}\r
+ * 接続状態。trueなら、MCUインタフェイスは利用可能。\r
+ * @example\r
+ * //show connection status\r
+ * var mri=new MiMicRemoteMcuInterface(“192.168.0.1”);\r
+ * alert(mri.isConnected());
*/\r
isConnected:function isConnected()\r
{\r
return this._keep_alive!=null;\r
},\r
/**\r
- * MiMicBCを実行する。\r
- 実行中は、関数はブロックします。\r
- @return\r
- Response JSONを返します。\r
- {version:JSONバージョン文字列,result:実行結果,stream:[]}\r
- Appendix 1. MiMicVM HTTP Interfaceを参照してください。\r
- @throws\r
- Response Jsonが得られないとき.\r
+ * 接続中のMiMicremoteMCUへ、整形済みのMiMicBCを送信する。\r
+ * 関数の利用前に、connect関数でMiMicremoteMCUへ接続する必要がある。\r
+ * 何らかのエラーが発生してMiMicRemoteMCUからの応答が得られない場合、関数は例外を発生する。\r
+ * この状況は、TCP/IPエラー、HTTPエラー、HTTPステータスエラー、MiMicVMのラインタイムエラー、MiMicRemoteMCUのフォールト等の原因で発生する。<br/>\r
+ * 関数は同期実行でのため、RemoteMCUが応答しないと制御がブロックする。非同期関数は今後実装する。\r
+ * @function\r
+ * @param {string} i_bc\r
+ * 整形済みのMiMicBC文字列。MiMicBCについては、MiMicVM.pdf の、MiMicBCの章を参照。\r
+ * @return\r
+ * MiMicVMのパース済みJavascriptObjectである。\r
+ * 形式は以下の通り。\r
+ * <pre>\r
+ * {version: string,result: int,stream int[]}\r
+ * </pre>\r
+ * 詳細は、 MiMicVM.pdf Appendix 1. MiMicVM HTTP Interfaceを参照。\r
+ * @example\r
+ * //execute NOP.\r
+ * var mri=new MiMicRemoteMcuInterface(“192.168.0.1”);\r
+ * mri.connect(function(){});\r
+ * mri.execBc(“ZAZZ.E”);//NOP;EXIT; \r
*/\r
execBc:function execBc(i_bc)\r
{\r
},\r
\r
/**\r
- * RemoteMCUに接続します。\r
- 既に接続済みの場合はなにもしません。\r
- @param i_callback\r
- コールバック関数 f(b)を指定します。非同期\r
- @throws\r
- 接続処理に失敗した場合\r
+ * MiMicRemoteMCUへ接続する。\r
+ * 既に接続済みの場合は何もしない。\r
+ * @function\r
+ * @param {function} i_callback\r
+ * 回線状態を定期的に通知するコールバックハンドラ。\r
+ * <pre>function(b:{boolean})</pre>\r
+ * disconnect関数を呼び出すまでの間、回線の状態を定期的に受け取る。\r
+ * bは接続状態を表す真偽値である。trueの時、接続中である。falseの場合、外部要因により切断されている。\r
+ * falseが通知されるのは、disconnectが呼び出されるまでに非同期切断を検出したときだけである。disconnectで切断した場合には呼び出されない。 \r
+ * @example\r
+ * //show connection status\r
+ * var mri=new MiMicRemoteMcuInterface(“192.168.0.1”);\r
+ * mri.connect(function(b){if(!b){alert(“disconnected!”);}}); \r
*/\r
connect:function connect(i_callback)\r
{\r
return;\r
},\r
/**\r
- * RemoteMCUから切断します。\r
- 既に切断済みなら何もしません。この関数は、非同期チェックをキャンセルします。\r
+ * 接続中のMiMicRemoteMCUから切断する。接続されていなければ何もしない。\r
+ * @function\r
+ * @example\r
+ * //connect and disconnect\r
+ * var mri=new MiMicRemoteMcuInterface(“192.168.0.1”);\r
+ * mri.connect(function(b){if(!b){alert(“disconnected!”);}});\r
+ * mri.disconnect(); \r
*/\r
disconnect:function disconnect()\r
{\r
+"LPCXPresso1769.Gpio.js" ^\r
+"LPCXPresso1769.Pwm.js" ^\r
"LPCXPresso1769.All.js"\r
+\r
+java -jar D:\application.files\yuicompressor-2.4.6\build\yuicompressor-2.4.6.jar -o LPCXPresso1769.All-mini.js "LPCXPresso1769.All.js\r
+\r
+\r
+ \r
\r