264 lines
9.0 KiB
JavaScript
264 lines
9.0 KiB
JavaScript
'use strict';
|
|
var pbc = Py2blockConfig.prototype;
|
|
|
|
pbc.moduleFunctionD.get('radio')['on'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
|
if (args.length !== 0) {
|
|
throw new Error("Incorrect number of arguments");
|
|
}
|
|
return [block("radio_ons", func.lineno, {"type": "on"}, {}, {
|
|
"inline": "true"
|
|
})];
|
|
}
|
|
|
|
|
|
pbc.moduleFunctionD.get('radio')['off'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
|
if (args.length !== 0) {
|
|
throw new Error("Incorrect number of arguments");
|
|
}
|
|
return [block("radio_ons", func.lineno, {"type": "off"}, {}, {
|
|
"inline": "true"
|
|
})];
|
|
}
|
|
|
|
|
|
pbc.moduleFunctionD.get('radio')['reset'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
|
if (args.length !== 0) {
|
|
throw new Error("Incorrect number of arguments");
|
|
}
|
|
return [block("radio_ons", func.lineno, {"type": "reset"}, {}, {
|
|
"inline": "true"
|
|
})];
|
|
}
|
|
|
|
|
|
pbc.moduleFunctionD.get('radio')['config'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
|
if (args.length !== 0 || keywords.length !== 7) { //length=32, queue=3, channel=7, power=6, address=0x75626974, group=0, data_rate=radio.RATE_1MBIT
|
|
throw new Error("Incorrect number of arguments");
|
|
}
|
|
var lengthblock = null;
|
|
var queueblock = null;
|
|
var channelblock = null;
|
|
var powerblock = null;
|
|
var addressblock = null;
|
|
var groupblock = null;
|
|
var datarateblock = null;
|
|
// var baudrate = null;
|
|
for (var i = 0; i < keywords.length; i++) {
|
|
var param = keywords[i];
|
|
var key = py2block.identifier(param.arg);
|
|
if (key === "length") {
|
|
lengthblock = py2block.convert(param.value);
|
|
} else if (key === "queue") {
|
|
queueblock = py2block.convert(param.value);
|
|
} else if (key === "channel") {
|
|
channelblock = py2block.convert(param.value);
|
|
} else if (key === "power") {
|
|
powerblock = py2block.convert(param.value);
|
|
} else if (key === "address") {
|
|
addressblock = py2block.convert(param.value);
|
|
} else if (key === "group") {
|
|
groupblock = py2block.convert(param.value);
|
|
} else if (key === "data_rate") {
|
|
datarateblock = py2block.convert(param.value);
|
|
}
|
|
}
|
|
if (lengthblock != null && queueblock != null && channelblock != null && powerblock != null && addressblock != null && groupblock != null/*&& data_rate!=null*/) {
|
|
return [block("microbit_radio_config", func.lineno, {}, {
|
|
"length": lengthblock,
|
|
"queue": queueblock,
|
|
"channel": channelblock,
|
|
"power": powerblock,
|
|
"address": addressblock,
|
|
"group": groupblock,
|
|
"data_rate": datarateblock,
|
|
}, {
|
|
"inline": "true"
|
|
})];
|
|
}
|
|
}
|
|
|
|
|
|
pbc.moduleFunctionD.get('radio')['send'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
|
if (args.length === 0) {
|
|
throw new Error("Incorrect number of arguments");
|
|
}
|
|
return [block("radio_send_string", func.lineno, {}, {
|
|
"data": py2block.convert(args[0]),
|
|
}, {
|
|
"inline": "true"
|
|
})];
|
|
}
|
|
|
|
pbc.moduleFunctionD.get('radio')['send_bytes'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
|
if (args.length === 0) {
|
|
throw new Error("Incorrect number of arguments");
|
|
}
|
|
return [block("radio_send_string", func.lineno, {"type": "send_bytes"}, {
|
|
"data": py2block.convert(args[0]),
|
|
}, {
|
|
"inline": "true"
|
|
})];
|
|
}
|
|
|
|
pbc.moduleFunctionD.get('radio')['receive'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
|
if (args.length !== 0) {
|
|
throw new Error("Incorrect number of arguments");
|
|
}
|
|
return block("radio_receive_string", func.lineno, {}, {}, {
|
|
"inline": "true"
|
|
});
|
|
}
|
|
|
|
pbc.moduleFunctionD.get('radio')['receive_bytes'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
|
if (args.length !== 0) {
|
|
throw new Error("Incorrect number of arguments");
|
|
}
|
|
return block("radio_receive_string", func.lineno, {"type": "receive_bytes"}, {}, {
|
|
"inline": "true"
|
|
});
|
|
}
|
|
|
|
pbc.moduleFunctionD.get('radio')['receive_full'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
|
if (args.length !== 0) {
|
|
throw new Error("Incorrect number of arguments");
|
|
}
|
|
return block("radio_receive_string", func.lineno, {"type": "receive_full"}, {}, {
|
|
"inline": "true"
|
|
});
|
|
}
|
|
|
|
|
|
pbc.moduleFunctionD.get('i2c')['init'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
|
if (args.length !== 0 || keywords.length !== 3) { //i2c.init(sda=20, scl=19, freq=10000)
|
|
throw new Error("Incorrect number of arguments");
|
|
}
|
|
var sdablock = null;
|
|
var sclblock = null;
|
|
var freqblock = null;
|
|
for (var i = 0; i < keywords.length; i++) {
|
|
var param = keywords[i];
|
|
var key = py2block.identifier(param.arg);
|
|
if (key === "sda") {
|
|
pbc.inScope = "i2c_init";
|
|
pbc.pinType = "pins_digital";
|
|
sdablock = py2block.convert(param.value);
|
|
pbc.pinType = null;
|
|
pbc.inScope = null;
|
|
} else if (key === "scl") {
|
|
pbc.inScope = "i2c_init";
|
|
pbc.pinType = "pins_digital";
|
|
sclblock = py2block.convert(param.value);
|
|
pbc.pinType = null;
|
|
pbc.inScope = null;
|
|
} else if (key === "freq") {
|
|
freqblock = py2block.convert(param.value);
|
|
}
|
|
}
|
|
if (sdablock != null && sclblock != null && freqblock != null) {
|
|
return [block("i2c_init", func.lineno, {}, {
|
|
'RX': sdablock,
|
|
'TX': sclblock,
|
|
"freq": freqblock
|
|
}, {
|
|
"inline": "true"
|
|
})];
|
|
}
|
|
}
|
|
|
|
pbc.moduleFunctionD.get('i2c')['read'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
|
if (args.length !== 3 || args[2]._astname != "Name") {
|
|
throw new Error("Incorrect number of arguments");
|
|
}
|
|
var adblock = py2block.convert(args[0]);
|
|
var dtblock = py2block.convert(args[1]);
|
|
return block("i2c_read", func.lineno, {
|
|
'is_repeated': py2block.Name_str(args[2])
|
|
}, {
|
|
'address': adblock,
|
|
'data': dtblock,
|
|
}, {
|
|
"inline": "true"
|
|
});
|
|
}
|
|
|
|
|
|
|
|
pbc.moduleFunctionD.get('i2c')['write'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
|
if (args.length !== 3 || args[2]._astname != "Name") {
|
|
throw new Error("Incorrect number of arguments");
|
|
}
|
|
var adblock = py2block.convert(args[0]);
|
|
var dtblock = py2block.convert(args[1]);
|
|
return [block("i2c_write", func.lineno, {
|
|
'is_repeated': py2block.Name_str(args[2])
|
|
}, {
|
|
'address': adblock,
|
|
'data': dtblock,
|
|
}, {
|
|
"inline": "true"
|
|
})];
|
|
}
|
|
|
|
pbc.moduleFunctionD.get('spi')['init'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
|
if (args.length !== 0 || keywords.length !== 6
|
|
|| keywords[0].value._astname != "Num"
|
|
|| keywords[1].value._astname != "Num"
|
|
|| keywords[2].value._astname != "Num"
|
|
|| keywords[3].value._astname != "Num"
|
|
|| keywords[4].value._astname != "Num"
|
|
|| keywords[5].value._astname != "Num"
|
|
) { //(baudrate=1000000, bits=8, mode=0, mosi=15, miso= 14, sclk=13)
|
|
throw new Error("Incorrect number of arguments");
|
|
}
|
|
var baudrate = null;
|
|
var bitsblock = null;
|
|
var modeblock = null;
|
|
var mosiblock = null;
|
|
var misoblock = null;
|
|
var sclkblock = null;
|
|
|
|
for (var i = 0; i < keywords.length; i++) {
|
|
var param = keywords[i];
|
|
var key = py2block.identifier(param.arg);
|
|
if (key === "baudrate") {
|
|
baudrate = py2block.Num_value(param.value);
|
|
} else if (key === "bits") {
|
|
bitsblock = py2block.Num_value(param.value);
|
|
} else if (key === "mode") {
|
|
modeblock = py2block.Num_value(param.value);
|
|
} else if (key === "mosi") {
|
|
mosiblock = py2block.Num_value(param.value);
|
|
} else if (key === "miso") {
|
|
misoblock = py2block.Num_value(param.value);
|
|
} else if (key === "sclk") {
|
|
sclkblock = py2block.Num_value(param.value);
|
|
}
|
|
}
|
|
if (bitsblock != null && modeblock != null && baudrate != null
|
|
&& mosiblock != null && misoblock != null && sclkblock != null) {
|
|
return [block("spi_init", func.lineno, {
|
|
"freq": baudrate,
|
|
"bits": bitsblock,
|
|
"mode": modeblock,
|
|
"mosi": mosiblock,
|
|
"miso": misoblock,
|
|
"sck": sclkblock//
|
|
}, {}, {
|
|
"inline": "false"
|
|
})];
|
|
}
|
|
}
|
|
|
|
|
|
pbc.moduleFunctionD.get('spi')['write'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
|
if (args.length === 0) {
|
|
throw new Error("Incorrect number of arguments");
|
|
}
|
|
return block("spi_write", func.lineno, {}, {
|
|
'data': py2block.convert(args[0]),
|
|
}, {
|
|
"inline": "true"
|
|
});
|
|
}
|
|
|