2 * @fileOverview Memoryクラスを定義します。
\r
10 * <a href="https://mbed.org/handbook/Memory">mbed::Memory</a>と同等の機能を持ちます。
\r
11 * @name mbedJS.Memory
\r
13 * @param {mbedJS.Mcu} i_mcu
\r
14 * インスタンスをバインドするMCUオブジェクトです。
\r
15 * @param {HashMap|Generator} i_event
\r
16 * 非同期イベントハンドラの連想配列、又はGeneratorです。
\r
18 * 非同期イベントハンドラの場合、関数はイベントハンドラで結果を通知します。
\r
20 * <li>{function()} onNew -
\r
21 * インスタンスが使用可能になった時に呼び出されます。
\r
23 * <li>{function(v)} onRead -
\r
24 * read関数のコールバック関数です。
\r
26 * <li>{int} v - 現在のピンの値です。</li>
\r
29 * <li>{function()} onMode -
\r
30 * mode関数のコールバック関数です。
\r
34 * Generatorを指定した場合、コールバック関数の引数はyiledの戻り値として取得できます。
\r
36 * @return {mbedJS.Memory}
\r
37 * @example //Callback
\r
38 * @example //Generator
\r
40 var CLASS=function Memory(i_mcu,i_handler)
\r
46 if(MI.isGenerator(i_handler)){_t._gen=i_handler;}
\r
47 else if(i_handler){_t._event=i_handler}
\r
50 if(_t._event.onNew){_t._event.onNew();}
\r
51 if(_t._gen){_t._gen.next(_t);}
\r
54 return _t._mcu.rpc(_t.RPC_NS+":init","",cb);
\r
56 throw new MI.MiMicException(e);
\r
62 RPC_NS:"MiMic:Memory",
\r
63 /** @private 最後にコールしたAPIです。*/
\r
65 /** @private Generatorモードの場合にGeneratorオブジェクトを保持します。*/
\r
67 /** @private コールバック関数の連想配列です。要素はコンストラクタを参照してください。*/
\r
70 * Generatorモードのときに使用する関数です。
\r
71 * Generatorモードの時は、yieldと併用してnew Memory()の完了を待ちます。
\r
72 * @name mbedJS.Memory#waitForNew
\r
75 waitForNew:function Memory_waitForNew()
\r
78 if(this._lc!=CLASS){throw new MI.MiMicException(MI.Error.NG_ILLEGAL_CALL);}
\r
79 this._lc=CLASS.waitForNew;
\r
81 throw new MI.MiMicException(e);
\r
85 * 1バイト単位でメモリから読み込みます。
\r
86 * 関数の完了時にonReadイベントが発生します。
\r
87 * Generatorモードの時は、yieldと併用して完了を待機できます。
\r
88 * @name mbedJS.Memory#read
\r
90 * @param {int} i_addr
\r
92 * @param {int} i_size
\r
93 * (Optional) 読出しサイズです。省略時は1です。
\r
95 * Callbackモードの時はRPCメソッドのインデクスを返します。
\r
97 * Generatorモードの時はメモリ値を格納した配列を返します。
\r
99 read:function Memory_read(i_addr,i_size)
\r
102 //read(i_addr,i_len)
\r
105 if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
\r
107 var a=[i_addr,arguments.length<2?1:i_size];
\r
109 return _t._mcu.rpc(_t.RPC_NS+":read",a[0]+","+a[1],
\r
112 var v=MI.bstr2byteArray(j.result[0]);
\r
113 if(_t._event.onRead){_t._event.onRead(v);}
\r
114 if(_t._gen){_t._gen.next(v);}
\r
118 throw new MI.MiMicException(e);
\r
123 * 関数の完了時にonWriteイベントが発生します。
\r
124 * Generatorモードの時は、yieldと併用して完了を待機できます。
\r
125 * @name mbedJS.Memory#write
\r
127 * @param {int} i_addr
\r
128 * 書き込み先のメモリアドレスを指定します。
\r
129 * @param {int|int[]} i_v
\r
130 * 書き込むbyte配列、または数値を指定します。
\r
131 * 数値の場合は1バイトを書き込みます。最大長さは200byteくらいです。
\r
133 * Callbackモードの時はRPCメソッドのインデクスを返します。
\r
135 write:function Memory_write(i_addr,i_v)
\r
139 if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
\r
140 _t._lc=CLASS.write;
\r
141 MI.assertInt(i_addr);
\r
143 return _t._mcu.rpc(_t.RPC_NS+":write",i_addr+",\""+MI.byteArray2bstr(i_v)+"\"",
\r
146 if(_t._event.onWrite){_t._event.onWrite();}
\r
147 if(_t._gen){_t._gen.next();}
\r
152 throw new MI.MiMicException(e);
\r
156 * 4バイト単位でメモリから読み込みます。
\r
157 * 関数の完了時にonRead32イベントが発生します。
\r
158 * Generatorモードの時は、yieldと併用して完了を待機できます。
\r
159 * @name mbedJS.Memory#read32
\r
161 * @param {int} i_addr
\r
163 * @param {int} i_size
\r
164 * (Optional) 読出しサイズです。省略時は4です。4の倍数を指定してください。
\r
166 * Callbackモードの時はRPCメソッドのインデクスを返します。
\r
168 * Generatorモードの時はメモリ値を格納した配列を返します。
\r
170 read32:function Memory_read32(i_addr,i_size)
\r
173 //read(i_addr,i_len)
\r
176 if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
\r
177 _t._lc=CLASS.read32;
\r
178 var a=[i_addr,arguments.length<2?4:i_size];
\r
180 throw new MI.MiMicException(MI.Error.NG_INVALID_ARG);
\r
183 return _t._mcu.rpc(_t.RPC_NS+":read",a[0]+","+a[1],
\r
186 var v=MI.bstr2uintArray(j.result[0]);
\r
187 if(_t._event.onRead32){_t._event.onRead32(v);}
\r
188 if(_t._gen){_t._gen.next(v);}
\r
192 throw new MI.MiMicException(e);
\r
196 * 32bit unsigned intをメモリへ書き込みます。
\r
197 * 関数の完了時にonWrite32イベントが発生します。
\r
198 * Generatorモードの時は、yieldと併用して完了を待機できます。
\r
199 * @name mbedJS.Memory#write32
\r
201 * @param {int} i_addr
\r
202 * 書き込み先のメモリアドレスを指定します。
\r
203 * @param {int|int[]} i_v
\r
204 * 書き込むbyte配列、または数値を指定します。
\r
205 * 数値の場合は1バイトを書き込みます。最大長さは200byteくらいです。
\r
207 * Callbackモードの時はRPCメソッドのインデクスを返します。
\r
209 write32:function Memory_write32(i_addr,i_v)
\r
213 if(this._gen && this._lc){throw new MI.MiMicException(MI.Error.NG_YIELD_NOT_COMPLETED);}
\r
214 _t._lc=CLASS.write32;
\r
215 MI.assertInt(i_addr);
\r
217 return _t._mcu.rpc(_t.RPC_NS+":write",i_addr+",\""+MI.uintArray2bstr(i_v)+"\"",
\r
220 if(_t._event.onWrite){_t._event.onWrite32();}
\r
221 if(_t._gen){_t._gen.next();}
\r
226 throw new MI.MiMicException(e);
\r