using System; using System.Collections.Generic; using System.Linq; namespace WebMrbc { public class I2cNewBlock : Block { public const string type_name = "i2c_new"; public I2cNewBlock() : base(type_name) { } public void init() { this.appendDummyInput() .appendField("I2Cの初期化") .appendField(GrPeach.I2CPorts(), "I2C_PORT_NO"); this.setInputsInline(true); this.setPreviousStatement(true, null); this.setNextStatement(true, null); this.setColour(160); this.setTooltip(""); this.setHelpUrl("http://www.example.com/"); } } public class I2cWriteBlock : Block { public const string type_name = "i2c_write"; public I2cWriteBlock() : base(type_name) { } public void init() { this.appendDummyInput() .appendField("I2Cへの書き込み") .appendField(GrPeach.I2CPorts(), "I2C_PORT_NO"); this.appendValueInput("DEVICEID") .setCheck("Number") .appendField("デバイスID"); this.appendValueInput("ADDRESS") .setCheck("Number") .appendField("アドレス"); this.appendValueInput("DATA") .setCheck("Number") .appendField("データ"); this.setInputsInline(true); this.setPreviousStatement(true, null); this.setNextStatement(true, null); this.setColour(160); this.setTooltip(""); this.setHelpUrl("http://www.example.com/"); } } public class I2cReadBlock : Block { public const string type_name = "i2c_read"; public I2cReadBlock() : base(type_name) { } public void init() { this.appendDummyInput() .appendField("I2Cからの読み込み") .appendField(GrPeach.I2CPorts(), "I2C_PORT_NO"); this.appendValueInput("DEVICEID") .setCheck("Number") .appendField("デバイスID"); this.appendValueInput("ADDRESS_L") .setCheck("Number") .appendField("下位アドレス"); this.appendValueInput("ADDRESS_H") .setCheck("Number") .appendField("上位アドレス"); this.setInputsInline(true); this.setOutput(true, "Number"); this.setColour(160); this.setTooltip(""); this.setHelpUrl("http://www.example.com/"); } } public class I2cBeginBlock : Block { public const string type_name = "i2c_begin"; public I2cBeginBlock() : base(type_name) { } public void init() { this.appendDummyInput() .appendField("I2Cの送信開始準備") .appendField(GrPeach.I2CPorts(), "I2C_PORT_NO"); this.appendValueInput("DEVICEID") .setCheck("Number") .appendField("デバイスID"); this.setInputsInline(true); this.setPreviousStatement(true, null); this.setNextStatement(true, null); this.setColour(160); this.setTooltip(""); this.setHelpUrl("http://www.example.com/"); } } public class I2cLwriteBlock : Block { public const string type_name = "i2c_lwrite"; public I2cLwriteBlock() : base(type_name) { } public void init() { this.appendDummyInput() .appendField("I2Cの送信バッファの末尾に数値を追加する") .appendField(GrPeach.I2CPorts(), "I2C_PORT_NO"); this.appendValueInput("DATA") .setCheck("Number") .appendField("データ"); this.setInputsInline(true); this.setOutput(true, "Number"); this.setColour(160); this.setTooltip(""); this.setHelpUrl("http://www.example.com/"); } } public class I2cEndBlock : Block { public const string type_name = "i2c_end"; public I2cEndBlock() : base(type_name) { } public void init() { this.appendDummyInput() .appendField("I2Cの送信シーケンスを発行する") .appendField(GrPeach.I2CPorts(), "I2C_PORT_NO"); this.appendDummyInput() .appendField("ストップコンディション発生") .appendField(new FieldCheckbox("TRUE"), "STOP"); this.setInputsInline(true); this.setOutput(true, "Number"); this.setColour(160); this.setTooltip(""); this.setHelpUrl("http://www.example.com/"); } } public class I2cRequestBlock : Block { public const string type_name = "i2c_request"; public I2cRequestBlock() : base(type_name) { } public void init() { this.appendDummyInput() .appendField("I2Cへ受信シーケンスを発行する") .appendField(GrPeach.I2CPorts(), "I2C_PORT_NO"); this.appendValueInput("ADDRESS") .setCheck("Number") .appendField("開始アドレス"); this.appendValueInput("COUNT") .setCheck("Number") .appendField("データ数"); this.setInputsInline(true); this.setOutput(true, "Number"); this.setColour(160); this.setTooltip(""); this.setHelpUrl("http://www.example.com/"); } } public class I2cLreadBlock : Block { public const string type_name = "i2c_lread"; public I2cLreadBlock() : base(type_name) { } public void init() { this.appendDummyInput() .appendField("I2Cへ受信シーケンスを発行しデータを読み出す") .appendField(GrPeach.I2CPorts(), "I2C_PORT_NO"); this.setInputsInline(true); this.setOutput(true, "Number"); this.setColour(160); this.setTooltip(""); this.setHelpUrl("http://www.example.com/"); } } public class I2cAvailableBlock : Block { public const string type_name = "i2c_available"; public I2cAvailableBlock() : base(type_name) { } public void init() { this.appendDummyInput() .appendField("I2Cの受信バッファ内にあるデータ数を調べる") .appendField(GrPeach.I2CPorts(), "I2C_PORT_NO"); this.setInputsInline(true); this.setOutput(true, "Number"); this.setColour(160); this.setTooltip(""); this.setHelpUrl("http://www.example.com/"); } } public class I2cFrequencyBlock : Block { public const string type_name = "i2c_frequency"; public I2cFrequencyBlock() : base(type_name) { } public void init() { this.appendDummyInput() .appendField("I2Cの周波数を変更する") .appendField(GrPeach.I2CPorts(), "I2C_PORT_NO"); this.appendValueInput("FREQUENCY") .setCheck("Number") .appendField("周波数"); this.setInputsInline(true); this.setPreviousStatement(true, null); this.setNextStatement(true, null); this.setColour(160); this.setTooltip(""); this.setHelpUrl("http://www.example.com/"); } } partial class Ruby { public node i2c_new(I2cNewBlock block) { var dropdown_i2c_port_no = block.getFieldValue("I2C_PORT_NO"); // $i2c0 = I2c.new(0) var a = new gvar_node(this, intern(GrPeach.I2CPortNameToVariable(dropdown_i2c_port_no))); var c = new const_node(this, intern("I2c")); var p = new node[] { new int_node(this, GrPeach.I2CPortNameToNum(dropdown_i2c_port_no)) }; return new asgn_node(this, a, new call_node(this, c, intern("new"), p, null)); } public node i2c_write(I2cWriteBlock block) { var dropdown_i2c_port_no = block.getFieldValue("I2C_PORT_NO"); var value_deviceid = valueToCode(block, "DEVICEID"); var value_address = valueToCode(block, "ADDRESS"); var value_data = valueToCode(block, "DATA"); // $i2c0.write(0, 0x00, 0x00) var a = new gvar_node(this, intern(GrPeach.I2CPortNameToVariable(dropdown_i2c_port_no))); var p = new node[] { value_deviceid, value_address, value_data }; return new call_node(this, a, intern("write"), p, null); } public node i2c_read(I2cReadBlock block) { var dropdown_i2c_port_no = block.getFieldValue("I2C_PORT_NO"); var value_deviceid = valueToCode(block, "DEVICEID"); var value_address_l = valueToCode(block, "ADDRESS_L"); var value_address_h = valueToCode(block, "ADDRESS_H"); // $i2c0.read(0, 0x00, 0x00) var a = new gvar_node(this, intern(GrPeach.I2CPortNameToVariable(dropdown_i2c_port_no))); var p = new node[] { value_deviceid, value_address_l }; if (value_address_h != null) { p.Push(value_address_h); } return new call_node(this, a, intern("write"), p, null); } public node i2c_begin(I2cBeginBlock block) { var dropdown_i2c_port_no = block.getFieldValue("I2C_PORT_NO"); var value_deviceid = valueToCode(block, "DEVICEID"); // $i2c0.begin(0) var a = new gvar_node(this, intern(GrPeach.I2CPortNameToVariable(dropdown_i2c_port_no))); var p = new node[] { value_deviceid, }; return new call_node(this, a, intern("begin"), p, null); } public node i2c_lwrite(I2cLwriteBlock block) { var dropdown_i2c_port_no = block.getFieldValue("I2C_PORT_NO"); var value_data = valueToCode(block, "DATA"); // $i2c0.lwrite(0x00) var a = new gvar_node(this, intern(GrPeach.I2CPortNameToVariable(dropdown_i2c_port_no))); var p = new node[0]; if (value_data != null) p.Push(value_data); return new call_node(this, a, intern("lwrite"), p, null); } public node i2c_end(I2cEndBlock block) { var dropdown_i2c_port_no = block.getFieldValue("I2C_PORT_NO"); var checkbox_stop = block.getFieldValue("STOP"); // $i2c0.lwrite(0x00) var a = new gvar_node(this, intern(GrPeach.I2CPortNameToVariable(dropdown_i2c_port_no))); var p = new node[0]; if (checkbox_stop != null) p.Push(checkbox_stop == "TRUE" ? (node)new true_node(this) : (node)new false_node(this)); return new call_node(this, a, intern("end"), p, null); } public node i2c_request(I2cRequestBlock block) { var dropdown_i2c_port_no = block.getFieldValue("I2C_PORT_NO"); var value_address = valueToCode(block, "ADDRESS"); var value_count = valueToCode(block, "COUNT"); // $i2c0.request(0x00, 1) var a = new gvar_node(this, intern(GrPeach.I2CPortNameToVariable(dropdown_i2c_port_no))); var p = new node[] { value_address, value_count }; return new call_node(this, a, intern("request"), p, null); } public node i2c_lread(I2cLreadBlock block) { var dropdown_i2c_port_no = block.getFieldValue("I2C_PORT_NO"); // $i2c0.lread() var a = new gvar_node(this, intern(GrPeach.I2CPortNameToVariable(dropdown_i2c_port_no))); var p = new node[0]; return new call_node(this, a, intern("lread"), p, null); } public node i2c_available(I2cAvailableBlock block) { var dropdown_i2c_port_no = block.getFieldValue("I2C_PORT_NO"); // $i2c0.available() var a = new gvar_node(this, intern(GrPeach.I2CPortNameToVariable(dropdown_i2c_port_no))); var p = new node[0]; return new call_node(this, a, intern("available"), p, null); } public node i2c_frequency(I2cFrequencyBlock block) { var dropdown_i2c_port_no = block.getFieldValue("I2C_PORT_NO"); var value_frequency = valueToCode(block, "FREQUENCY"); // $i2c0.frequency(0) var a = new gvar_node(this, intern(GrPeach.I2CPortNameToVariable(dropdown_i2c_port_no))); var p = new node[] { value_frequency }; return new call_node(this, a, intern("frequency"), p, null); } } }