Files
2024-07-19 10:16:00 +08:00

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"
});
}