+++ /dev/null
-/**\r
- * @fileOverview I2CSlaveクラスを定義します。\r
- */\r
-(function(){\r
-var NS=mbedJS;\r
-var MI=MiMicJS;\r
-\r
-/**\r
- * I2CSlaveクラスです。\r
- * <a href="https://mbed.org/handbook/I2CSlave">mbed::I2CSlave</a>と同等の機能を持ちます。\r
- * @constructor\r
- * @name mbedJS.I2CSlave\r
- * @param {mbedJS.Mcu} i_mcu\r
- * インスタンスをバインドするMCUオブジェクトです。\r
- * @param {[PinName,PinName]} i_params\r
- * i2Cバスを構成するピンIDを指定します。sda,sclの順番です。\r
- * @param {HashMap|Generator|function} i_handler\r
- * 非同期イベントハンドラの連想配列、Generator、コールバック関数の何れかを指定します。\r
- * <p>\r
- * 非同期イベントハンドラの場合、関数はイベントハンドラで結果を通知します。\r
- * <ul>\r
- * <li>{function()} onNew -\r
- * インスタンスが使用可能になった時に呼び出されます。\r
- * </li>\r
- * <li>{function()} onFrequency -\r
- * frequency関数が完了したときに呼び出されます。\r
- * </li>\r
- * <li>{function(ret,data)} onRead -\r
- * read関数が完了したときに呼び出されます。\r
- * <ul>\r
- * <li>ret {int}-は成功/失敗フラグを返します。read.1とread.2の場合で意味が異なります。\r
- * read.1の場合、 0:ACK(成功),1:NACK(失敗)です。read.2の場合、読みだした値です。</li>\r
- * <li>data {byte[]}-読みだしたデータの配列です。read.1の場合のみ有効です。</li>\r
- * </ul> \r
- * </li>\r
- * <li>{function(ret)} onWrite -\r
- * write関数が完了したときに呼び出されます。\r
- * <ul>\r
- * <li>ret {int}-成功/失敗フラグを返します。write.1とwrite.2の場合で意味が異なります。\r
- * write.1の場合、ACK:0(成功),NACK:それ以外です。write.2の場合、ACKを受信すると1を返します。</li>\r
- * </ul> \r
- * </li>\r
- * <li>{function(v)} onReceive -\r
- * receive関数が完了したときに呼び出されます。\r
- * <li>v {int}-受信ステータス値を返します。mbedJS.I2CSlave#RxStatusの値です。</li>\r
- * </ul> \r
- * </li>\r
- * <li>{function()} onStop -\r
- * stop関数が完了したときに呼び出されます。\r
- * </li>\r
- * <li>{function()} onAddress -\r
- * address関数が完了したときに呼び出されます。\r
- * </li>\r
- * </ul>\r
- * <p>\r
- * Generatorを指定した場合、コールバック関数の引数はyiledの戻り値として取得できます。\r
- * </p>\r
- * <p>\r
- * コールバック関数を指定した場合、RPCが完了したときに呼び出されます。メンバ関数のイベントハンドラは個別に設定する必要があります。\r
- * </p>\r
- * @return {mbedJS.I2CSlave}\r
- * @example //Callback\r
- * var mcu=new mbedJS.Mcu("192.168.128.39",\r
- * {\r
- * onNew:function(){\r
- * var i2c=new mbedJS.I2CSlave(mcu,[mbedJS.PinName.p28,mbedJS.PinName.p27],{\r
- * onNew:function(){\r
- * i2c.frequency(100000);\r
- * },\r
- * onFrequency:function()\r
- * {\r
- * i2c.address(1);\r
- * },\r
- * onAddress:function()\r
- * {\r
- * i2c.receive();\r
- * },\r
- * onReceive:function(){\r
- * st=0;\r
- * i2c.write(1);\r
- * },\r
- * onWrite:function(v){\r
- * if(st==0){\r
- * i2c.write([1,2,3]);\r
- * st++;\r
- * }else{\r
- * i2c.read();\r
- * st=0;\r
- * }\r
- * },\r
- * onRead:function(v){\r
- * if(st==0){\r
- * i2c.read(2,false);\r
- * st++;\r
- * }else{\r
- * log("[PASS]onRead:"+v.ret+":"+v.data);\r
- * i2c.stop();\r
- * }\r
- * },\r
- * onStop:function(){\r
- * mcu.close();\r
- * }\r
- * });\r
- * },\r
- * onClose:function(){\r
- * },\r
- * onError:function(){\r
- * alert("Error");\r
- * }\r
- * });\r
- * @example //Generator\r
- * var g=function*(){\r
- * try{\r
- * var v;\r
- * var mcu=new mbedJS.Mcu("192.168.128.39",g);\r
- * yield mcu.waitForNew();\r
- * var i2c=new mbedJS.I2CSlave(mcu,[mbedJS.PinName.p28,mbedJS.PinName.p27],g);\r
- * yield i2c.waitForNew();\r
- * yield i2c.frequency(100000);\r
- * yield i2c.address(1);\r
- * v=yield i2c.receive();\r
- * v=yield i2c.write(1);\r
- * v=yield i2c.write([1,2,3]);\r
- * v=yield i2c.read();\r
- * v=yield i2c.read(2,false);\r
- * log("[PASS]onRead:"+v.ret+":"+v.data);\r
- * yield i2c.stop();\r
- * yield mcu.close();\r
- * }catch(e){\r
- * mcu.shutdown();\r
- * alert(e);\r
- * throw e;\r
- * }\r
- * }();\r
- * g.next();\r
- * return;\r
- */\r
-var CLASS=function I2CSlave(i_mcu,i_params,i_handler)\r
-{\r
- try{\r
- var _t=this;\r
- _t._mcu=i_mcu;\r
- _t._lc=CLASS;\r
- var cb=MI._initHandler.call(_t,i_handler);\r
- MI.assertInt(i_params);\r
- _t._mcu.rpc(_t.RPC_NS+":_new1",i_params[0]+","+i_params[1],\r
- function(j)\r
- {\r
- _t._oid=j.result[0];\r
- if(cb){cb();}\r
- if(_t._gen){_t._gen.next(_t);}\r
- _t._lc=null;\r
- }\r
- );\r
- }catch(e){\r
- throw new MI.MiMicException(e);\r
- } \r
-}\r
-/**\r
- * mbedJS.Serial#receiveの戻り値の種類です。\r
- * NoData,ReadAddressed,WriteGeneral,WriteAddressedがあります。\r
- * @name mbedJS.I2CSlave#RxStatus\r
- */\r
-CLASS.RxStatus={\r
- NoData:0,ReadAddressed:1,WriteGeneral:2,WriteAddressed:3\r
-}\r
-CLASS.prototype={\r
- /** @private */\r
- RPC_NS:"mbedJS:I2CSlave",\r
- /** @private 最後にコールしたAPIです。*/\r
- _lc:null,\r
- /** @private Generatorモードの場合にGeneratorオブジェクトを保持します。*/\r
- _gen:null,\r
- /** @private コールバック関数の連想配列です。要素はコンストラクタを参照してください。*/\r
- _event:{},\r
- /** @private リモートインスタンスのオブジェクトIDです。*/\r
- _oid:null,\r
- /**\r
- * Generatorモードのときに使用する関数です。\r
- * Generatorモードの時は、yieldと併用してnew I2CSlave()の完了を待ちます。\r
- * @name mbedJS.I2CSlave#waitForNew\r
- * @function\r
- */\r
- waitForNew:function I2CSlave_waitForNew()\r
- {\r
- try{\r
- if(this._lc!=CLASS){throw new MI.MiMicException(MI.Error.NG_ILLEGAL_CALL);}\r
- this._lc=CLASS.waitForNew;\r
- }catch(e){\r
- throw new MI.MiMicException(e);\r
- }\r
- },\r
- /**\r
- * I2CSlaveのアドレスを設定します。\r
- * 関数の完了時にonAddressイベントが発生します。\r
- * Generatorモードの時は、yieldと併用して完了を待機できます。\r
- * @name mbedJS.I2CSlave#address\r
- * @function\r
- * @param {int} i_value\r
- * 8ビットのアドレス値です。\r
- * @return {int}\r
- * Callbackモードの時はRPCメソッドのインデクスを返します。\r
- */\r
- address:function I2CSlave_address(i_value)\r
- {\r
- try{\r
- var _t=this;\r
- var cb=MI._getCb(arguments,_t._event.onAddress);\r
- MI._assertYield.call(_t);\r
- _t._lc=CLASS.write;\r
- MI.assertInt(i_value);\r
- return _t._mcu.rpc(_t.RPC_NS+":address",_t._oid+","+i_value,\r
- function(j){\r
- if(cb){cb();}\r
- if(_t._gen){_t._gen.next();}\r
- _t._lc=null;\r
- }\r
- );\r
- }catch(e){\r
- throw new MI.MiMicException(e);\r
- } \r
- }, \r
- /**\r
- * Hz単位でバスの速度を指定します。\r
- * 関数の完了時にonFrequencyイベントが発生します。\r
- * Generatorモードの時は、yieldと併用して完了を待機できます。\r
- * @name mbedJS.I2CSlave#frequency\r
- * @function\r
- * @param {int} i_hz\r
- * Hz単位のバス速度です。\r
- * @return {int}\r
- * Callbackモードの時はRPCメソッドのインデクスを返します。\r
- */\r
- frequency:function I2CSlave_frequency(i_hz)\r
- {\r
- try{\r
- var _t=this;\r
- var cb=MI._getCb(arguments,_t._event.onFrequency);\r
- MI._assertYield.call(_t);\r
- _t._lc=CLASS.frequency;\r
- MI.assertInt(i_hz);\r
- return _t._mcu.rpc(_t.RPC_NS+":frequency",_t._oid+","+i_hz,\r
- function (j)\r
- {\r
- if(cb){cb();}\r
- if(_t._gen){_t._gen.next();}\r
- _t._lc=null;\r
- }\r
- );\r
- }catch(e){\r
- throw new MI.MiMicException(e);\r
- } \r
- },\r
- /**\r
- * 引数が2個の場合\r
- * @name mbedJS.I2CSlave#read:1\r
- * @function\r
- * @param {int} length\r
- * 読み出すデータの長さです。256未満の値を指定してください。\r
- * @return {int}\r
- * Callbackモードの時はRPCメソッドのインデクスを返します。\r
- * @return {HashMap}\r
- * {ret:int,data:[byte]}\r
- * Generatorの場合は戻り値オブジェクトを返します。\r
- * <ul>\r
- * <li>ret {int}- 成功フラグ 0:ACK(成功),1:NACK(失敗)</li>\r
- * <li>data {byte[]}- 読みだしたデータ</li>\r
- * </ul>\r
- */\r
- /**\r
- * 引数が0個の場合\r
- * @name mbedJS.I2CSlave#read:2\r
- * @function\r
- * @return {int}\r
- * Callbackモードの時はRPCメソッドのインデクスを返します。\r
- * @return {int}\r
- * Generatorモードの時は読みだした値を返します。\r
- */\r
- /**\r
- * バスから値を読み出します。\r
- * 関数の完了時にonReadイベントが発生します。\r
- * Generatorモードの時は、yieldと併用して完了を待機できます。\r
- * @name mbedJS.I2CSlave#read\r
- * @function\r
- * @param ...\r
- * 詳細はmbedJS.I2CSlave#read:Nを参照してください。\r
- */ \r
- read:function I2CSlave_read(/*...*/)\r
- {\r
- try{\r
- var _t=this;\r
- var cb=MI._getCb(arguments,_t._event.onRead);\r
- MI._assertYield.call(_t);\r
- _t._lc=CLASS.read;\r
- function rcb(j){\r
- var v=j.result.length>1?{ret:j.result[0],data:MI.bstr2byteArray(j.result[1])}:j.result[0];\r
- if(cb){cb(v);}\r
- if(_t._gen){_t._gen.next(v);}\r
- _t._lc=null;\r
- }\r
- if(MI._getBaseArgsLen(arguments)==0){\r
- return _t._mcu.rpc(_t.RPC_NS+":read2",_t._oid,rcb);\r
- }else{\r
- MI.assertInt(arguments[0]);\r
- return _t._mcu.rpc(_t.RPC_NS+":read1",_t._oid+","+arguments[0],rcb);\r
- }\r
- }catch(e){\r
- throw new MI.MiMicException(e);\r
- } \r
- },\r
- /**\r
- * I2CSlaveバスを開始状態にします。\r
- * 関数の完了時にonReceiveイベントが発生します。\r
- * Generatorモードの時は、yieldと併用して完了を待機できます。\r
- * @name mbedJS.I2CSlave#receive\r
- * @function\r
- * @return {int}\r
- * Callbackモードの時はRPCメソッドのインデクスを返します。\r
- * @return {int}\r
- * Generatorモードの時は受信ステータス値を返します。mbedJS.I2CSlave#RxStatusの値です。\r
- */\r
- receive:function I2CSlave_receive()\r
- {\r
- try{\r
- var _t=this;\r
- var cb=MI._getCb(arguments,_t._event.onReceive);\r
- MI._assertYield.call(_t);\r
- _t._lc=CLASS.start; \r
- return _t._mcu.rpc(_t.RPC_NS+":receive",_t._oid,\r
- function (j)\r
- {\r
- var v=j.result[0];\r
- if(cb){cb(v);}\r
- if(_t._gen){_t._gen.next(v);}\r
- _t._lc=null;\r
- }\r
- );\r
- }catch(e){\r
- throw new MI.MiMicException(e);\r
- } \r
- },\r
- /**\r
- * 引数が1個(byte array)の場合\r
- * @name mbedJS.I2CSlave#write:1\r
- * @function\r
- * @param {byte[]} data\r
- * 送信するデータを格納したバイト配列です。\r
- * @return {int}\r
- * Callbackモードの時はRPCメソッドのインデクスを返します。\r
- * @return {int}\r
- * Generatorモードの時は成功/失敗フラグを返します。ACK:0(成功),NACK:それ以外です。\r
- */\r
- /**\r
- * 引数が1個(int)の場合\r
- * @name mbedJS.I2CSlave#write:2\r
- * @function\r
- * @param {int} data\r
- * 送信データを指定します。\r
- * @return {int}\r
- * Callbackモードの時はRPCメソッドのインデクスを返します。\r
- * @return {int}\r
- * Generatorモードの時は成功/失敗フラグを返します。ACKを受信すると1を返します。\r
- */ \r
- /**\r
- * バスに値を書き込みます。\r
- * 関数の完了時にonWriteイベントが発生します。\r
- * Generatorモードの時は、yieldと併用して完了を待機できます。\r
- * @name mbedJS.I2CSlave#write\r
- * @function\r
- * @param ...\r
- * 詳細はmbedJS.I2CSlave#write:Nを参照してください。\r
- */ \r
- write:function I2CSlave_write(/*...*/)\r
- {\r
- try{\r
- var _t=this;\r
- var cb=MI._getCb(arguments,_t._event.onWrite);\r
- MI._assertYield.call(_t);\r
- _t._lc=CLASS.write;\r
- function rcb(j){\r
- var v=j.result[0];\r
- if(cb){cb(v);}\r
- if(_t._gen){_t._gen.next(v);}\r
- _t._lc=null;\r
- }\r
- if(!MI.isArray(arguments[0])){\r
- MI.assertInt(arguments[0]);\r
- return _t._mcu.rpc(_t.RPC_NS+":write2",_t._oid+","+arguments[0],rcb);\r
- }else{\r
- var a=arguments;\r
- return _t._mcu.rpc(_t.RPC_NS+":write1",_t._oid+",\""+MI.byteArray2bstr(a[0])+"\"",rcb);\r
- }\r
- }catch(e){\r
- throw new MI.MiMicException(e);\r
- } \r
- },\r
- /**\r
- * I2CSlaveを受信状態に戻します。\r
- * 関数の完了時にonStopイベントが発生します。\r
- * Generatorモードの時は、yieldと併用して完了を待機できます。\r
- * @name mbedJS.I2CSlave#stop\r
- * @function\r
- * @return {int}\r
- * Callbackモードの時はRPCメソッドのインデクスを返します。\r
- */\r
- stop:function I2CSlave_stop()\r
- {\r
- try{\r
- var _t=this;\r
- var cb=MI._getCb(arguments,_t._event.onStop);\r
- MI._assertYield.call(_t);\r
- _t._lc=CLASS.stop; \r
- return _t._mcu.rpc(_t.RPC_NS+":stop",_t._oid,\r
- function (j)\r
- {\r
- if(cb){cb();}\r
- if(_t._gen){_t._gen.next();}\r
- _t._lc=null;\r
- }\r
- );\r
- }catch(e){\r
- throw new MI.MiMicException(e);\r
- } \r
- },\r
- /**\r
- * MCUに生成されているオブジェクトを破棄します。\r
- * @name mbedJS.I2CSlave#dispose\r
- * @function\r
- */\r
- dispose:function IC2Slave_dispose()\r
- {\r
- return this._mcu._dispose.apply(this,arguments);\r
- }\r
- \r
-}\r
-NS.I2CSlave=CLASS;\r
-}());
\ No newline at end of file