2 var DEV=LPCXpresso1769;
\r
5 var isUndef=MiMicLib.isUndef;
\r
12 function array2MimicDb(i_array)
\r
15 var dt=["0000000","000000","00000","0000","000","00","0",""];
\r
17 for(var i=0;i<i_array.length;i++){
\r
18 var v=(i_array[i]>>>0);
\r
19 var s=v.toString(16).toLowerCase();
\r
20 if(s.length<1 || s.length>8){
\r
21 throw new MiMicException(EE.NG);
\r
23 p+=dt[s.length-1]+s;
\r
27 throw new MiMicException(e);
\r
32 * PINの機能名を含むPin識別子を得る。
\r
34 function getPinByFuncName(i_name)
\r
37 function getPinByFName(i_pintbl,i_name)
\r
39 for(var i=0;i<i_pintbl.length;i++){
\r
40 if(i_pintbl[i]==null){
\r
43 if(DEV.hasPinFunctionName(i_pintbl[i],i_name)){
\r
49 var tbl=[DEV.P0,DEV.P1,DEV.P2,DEV.P3,DEV.P4];
\r
50 for(var i=0;i<tbl.length;i++){
\r
51 var pin=getPinByFName(tbl[i],i_name);
\r
56 throw new MiMicException("pin function '"+i_name+"' not found");
\r
58 throw new MiMicException(e);
\r
62 * PIN機能名から使用するペリフェラルシンボルを推定する。
64 function pinFuncName2PhlName(i_pinfuncname)
\r
67 //Pin function nameプレフィクスとペリフェラル名の対比表
\r
73 for(var key in TBL){
\r
74 if(i_pinfuncname.indexOf(key)==0){
\r
79 throw new MiMicException("Peripheral for "+i_pinfunction+" not found.");
\r
81 throw new MiMicException(e);
\r
88 DEV.Mcu=function Mcu(i_mimic_addr,i_is_activate)
\r
92 this._mif=new MiMicRemoteMcuInterface(i_mimic_addr);
\r
93 var ac=isUndef(i_is_activate)?true:i_is_activate;
\r
98 throw new MiMicException(e);
\r
110 isActive:function isActive()
\r
113 return this._mif.isConnected();
\r
115 throw new MiMicException(e);
\r
125 onActivateChanged:null
\r
128 * ペリフェラルオブジェクトのホルダ。ペリフェラル名をキーにした、ペリフェラルオブジェクトの連想配列。
\r
129 MCUが、自身のペリフェラルオブジェクトを管理する為に使う。
\r
135 getClockInfo:function getClockProperty()
\r
137 //CCLCK値(RemoteMCU側と合わせること。将来的にはactivateの時に決定する。)
\r
138 return {cclk:100*1000*1000};
\r
143 activate:function activate()
\r
148 if(this.isActive()){
\r
149 throw new MiMicException("Already activated!");
\r
156 if(_t.events.onActivateChanged!=null){
\r
157 _t.events.onActivateChanged(false);
\r
162 if(this.events.onActivateChanged!=null){
\r
163 this.events.onActivateChanged(true);
\r
166 throw new MiMicException(e);
\r
172 deactivate:function deactivate()
\r
175 if(!this.isActive()){
\r
176 throw new MiMicException("Already activated!");
\r
179 this._mif.disconnect();
\r
180 if(this.events.onActivateChanged!=null){
\r
181 this.events.onActivateChanged(false);
\r
184 throw new MiMicException(e);
\r
190 callMiMic:function callMiMic(/**/)
\r
194 switch(arguments.length){
\r
200 //mimicBC:string,db:array[int]
\r
201 bc=arguments[0]+array2MimicDb(arguments[1]);
\r
204 throw new MiMicException(e);
\r
206 return this._mif.execBc(bc);
\r
208 throw new MiMicException(e);
\r
214 callMiMicWithCheck:function execBc2WithException(/**/)
\r
217 var ret=this.callMiMic.apply(this,arguments);
\r
218 if(ret.result!=0x0){
\r
219 throw new MiMicException(EE.VM_RUNTIME,"Result="+ret.toString());
\r
223 throw new MiMicException(e);
\r
229 getPin:function getPin(/*...*/)
\r
231 switch(arguments.length){
\r
232 case 1://getPin:function getPin(i_pin_function)
\r
233 //pin_functionを持ってるPINを探す。
\r
234 var pin=getPinByFuncName(arguments[0]);
\r
235 //function名からペリフェラル名を得る。
\r
236 var phl_name=pinFuncName2PhlName(arguments[0]);
\r
237 //ピンコンストラクタとペリフェラルを使ってピンを生成。
\r
238 return this.getPeripheral(phl_name).getPin(pin);
\r
239 case 2://getPin:function getPin(i_pin,i_function_name)
\r
240 //function名からペリフェラル名を得る。(PINシンボル変換を流用)
\r
241 var phl_name=pinFuncName2PhlName(arguments[1]);
\r
242 return this.getPeripheral(phl_name).getPin(arguments[0]);
\r
244 throw new MiMicException();
\r
250 getPort:function getPort(i_port_name)
\r
252 throw new MiMicException("Not implemented.");
\r
257 getPeripheral:function getPeripheral(i_phl_symbol,i_opt)
\r
259 //ペリフェラルアイテムが生成済か確認
\r
260 if(isUndef(this._phl_holder[i_phl_symbol])){
\r
262 switch(i_phl_symbol){
\r
263 case "GPIO":new DEV.Gpio(this,i_opt);break;
\r
264 case "ADC":new DEV.Adc(this,i_opt);break;
\r
265 case "PWM":new DEV.Pwm(this,i_opt);break;
\r
267 throw new MiMicException("Unknown peripheral symbol "+i_phl_symbol);
\r
270 //2回目以降でi_optが設定されている?それはだめだよ。
\r
271 if(!isUndef(i_opt)){
\r
272 throw new MiMicException();
\r
275 //phlからregisterのコールバックがかかるはず。
\r
276 return this._phl_holder[i_phl_symbol];
\r
279 * [forSystem]システム関数。MCU依存のペリフェラルオブジェクトを登録する。
281 registerPhl:function registerPhl(i_phl,i_symbol)
\r
284 //登録済みのシンボルは登録できない。
\r
285 if(!isUndef(this._phl_holder[i_symbol])){
\r
286 throw new MiMicException("Peripheral symbol "+i_symbol+" is already exist on mcu.");
\r
288 this._phl_holder[i_symbol]=i_phl;
\r
290 throw new MiMicException(e);
\r