Files
mixly3-server/mixly/boards/default_src/micropython_nrf51822_microbit/converters/serial.js

161 lines
5.7 KiB
JavaScript

'use strict';
pbc.globalFunctionD['print'] = function(py2block, func, args, keywords, starargs, kwargs, node){
if (args.length === 1 && keywords.length === 1
&& py2block.identifier(keywords[0].arg) === "end"
&& keywords[0].value._astname === "Str"
&& py2block.Str_value(keywords[0].value) === ""
){
var argblock = py2block.convert(args[0]);
return [block("IO_print_inline", func.lineno, {}, {
'VAR':argblock
}, {
"inline": "false"
})];
}else if (args.length === 1 && keywords.length === 0) {
var argblock = py2block.convert(args[0]);
return [block("IO_print", func.lineno, {}, {
'VAR':argblock
}, {
"inline": "false"
})];
}else{
throw new Error("Incorrect number of arguments");
}
}
pbc.globalFunctionD['input'] = function(py2block, func, args, keywords, starargs, kwargs, node){
if (args.length !== 1) {
throw new Error("Incorrect number of arguments");
}
var argblock = py2block.convert(args[0]);
return block("IO_input", func.lineno, {}, {
'VAR':argblock
}, {
"inline": "false"
});
}
pbc.moduleFunctionD.get('uart')['init'] = function(py2block, func, args, keywords, starargs, kwargs, node){
if (args.length === 0 && keywords.length === 1
&& keywords[0].value._astname == "Num") { //uart.init(baudrate=9600)
if(py2block.identifier(keywords[0].arg) === "baudrate") {
return [block("serial_begin", func.lineno, {
"baudrate": py2block.Num_value(keywords[0].value)
}, {}, {
"inline": "true"
})];
}
}else if(args.length === 0 && keywords.length === 3) { //uart.init(rx=0, tx=1, baudrate=115200)
var rxblock = null;
var txblock = null;
var baudrate = null;
for (var i = 0; i < keywords.length; i++) {
var param = keywords[i];
var key = py2block.identifier(param.arg);
if (key === "rx") {
pbc.pinType = "pins_serial";
rxblock = py2block.convert(param.value);
pbc.pinType = null;
} else if (key === "tx") {
pbc.pinType = "pins_serial";
txblock = py2block.convert(param.value);
pbc.pinType = null;
} else if (key === "baudrate" && param.value._astname == "Num") {
baudrate = py2block.Num_value(param.value);
}
}
if (rxblock != null && txblock != null && baudrate != null) {
return [block("serial_softserial", func.lineno, {
"baudrate": baudrate
}, {
"RX":rxblock,
"TX":txblock
}, {
"inline": "true"
})];
}
}
throw new Error("Incorrect number of arguments");
}
pbc.moduleFunctionD.get('uart')['write'] = function(py2block, func, args, keywords, starargs, kwargs, node){
if (args.length !== 1) {
throw new Error("Incorrect number of arguments");
}
var astname = args[0]._astname;
if(astname === "Call"){
if(args[0].func._astname == "Name" && py2block.Name_str(args[0].func) === "str"){ //serial.write(str("XXX"))
return [block("serial_print", func.lineno, {}, {
"CONTENT":py2block.convert(args[0].args[0]),
}, {
"inline": "false"
})];
}
}else if(astname === "BinOp"){
if(args[0].op.name === "Add" && args[0].right._astname === "Str"
&& py2block.Str_value(args[0].right) === "\r\n"
&& args[0].left._astname === "Call" && args[0].left.func._astname == "Name"
&& py2block.Name_str(args[0].left.func) === "str"
){
if(args[0].left.args[0]._astname === "Call"
&& args[0].left.args[0].func._astname === "Name"
&& py2block.Name_str(args[0].left.args[0].func) === "hex"){ //serial.write(str(hex(XX)) + "\r\n")
pbc.inScope = "lcd_init";
var numblock=py2block.convert(args[0].left.args[0].args[0]);
pbc.inScope=null;
return [block("serial_print_hex", func.lineno, {}, {
"CONTENT": numblock,
}, {
"inline": "false"
})];
}else{
return [block("serial_println", func.lineno, {}, { //serial.write(str("XX") + "\r\n")
"CONTENT": py2block.convert(args[0].left.args[0]),
}, {
"inline": "false"
})];
}
}
}
return [block("serial_print", func.lineno, {}, {
"CONTENT":py2block.convert(args[0]),
}, {
"inline": "true"
})];
}
pbc.moduleFunctionD.get('uart')['any'] = function(py2block, func, args, keywords, starargs, kwargs, node){
if (args.length !== 0) {
throw new Error("Incorrect number of arguments");
}
return block("serial_any", func.lineno, {}, {}, {
"inline": "true"
});
}
pbc.moduleFunctionD.get('uart')['read'] = function(py2block, func, args, keywords, starargs, kwargs, node){
if (args.length !== 0) {
throw new Error("Incorrect number of arguments");
}
return block("serial_readstr", func.lineno, {}, {}, {
"inline": "true"
});
}
pbc.moduleFunctionD.get('uart')['readline'] = function(py2block, func, args, keywords, starargs, kwargs, node){
if (args.length !== 0) {
throw new Error("Incorrect number of arguments");
}
return block("serial_readline", func.lineno, {}, {}, {
"inline": "true"
});
}