Fix(boards): 修复mp下无线广播块在接收特定消息时有时生成的回调函数名异常
This commit is contained in:
@@ -394,7 +394,7 @@ export const network_espnow_recv_handle = function (block, generator) {
|
||||
//radio
|
||||
export const espnow_radio_channel = function (block, generator) {
|
||||
generator.definitions_['import_radio'] = "import radio";
|
||||
generator.definitions_['ESPNow_radio_initialize'] = "ESPNow_radio=radio.ESPNow()";
|
||||
generator.definitions_['var_declare_ESPNow_radio'] = "ESPNow_radio=radio.ESPNow()";
|
||||
var varName = generator.valueToCode(this, 'CHNL', generator.ORDER_ATOMIC);
|
||||
var code = "ESPNow_radio.set_channel(channel=" + varName + ")\n";
|
||||
return code;
|
||||
@@ -402,7 +402,7 @@ export const espnow_radio_channel = function (block, generator) {
|
||||
|
||||
export const espnow_radio_txpower = function (block, generator) {
|
||||
generator.definitions_['import_radio'] = "import radio";
|
||||
generator.definitions_['ESPNow_radio_initialize'] = "ESPNow_radio=radio.ESPNow()";
|
||||
generator.definitions_['var_declare_ESPNow_radio'] = "ESPNow_radio=radio.ESPNow()";
|
||||
var power = this.getFieldValue('op');
|
||||
var code = "ESPNow_radio.set_channel(txpower=" + power + ")\n";
|
||||
return code;
|
||||
@@ -411,7 +411,7 @@ export const espnow_radio_txpower = function (block, generator) {
|
||||
export const espnow_radio_channel_new = function (block, generator) {
|
||||
generator.definitions_['import_radio'] = "import radio";
|
||||
var varName2 = generator.valueToCode(this, 'DB', generator.ORDER_ATOMIC);
|
||||
generator.definitions_['ESPNow_radio_initialize'] = "ESPNow_radio=radio.ESPNow(channel=1,txpower=" + varName2 + ")";
|
||||
generator.definitions_['var_declare_ESPNow_radio'] = "ESPNow_radio=radio.ESPNow(channel=1,txpower=" + varName2 + ")";
|
||||
var varName = generator.valueToCode(this, 'CHNL', generator.ORDER_ATOMIC);
|
||||
var code = "ESPNow_radio.set_channel(" + varName + ")\n";
|
||||
return code;
|
||||
@@ -419,7 +419,7 @@ export const espnow_radio_channel_new = function (block, generator) {
|
||||
|
||||
export const espnow_radio_on_off = function (block, generator) {
|
||||
generator.definitions_['import_radio'] = "import radio";
|
||||
generator.definitions_['ESPNow_radio_initialize'] = "ESPNow_radio=radio.ESPNow()";
|
||||
generator.definitions_['var_declare_ESPNow_radio'] = 'ESPNow_radio = radio.ESPNow()';
|
||||
var op = this.getFieldValue('on_off');
|
||||
var code = "ESPNow_radio.active(" + op + ")\n";
|
||||
return code;
|
||||
@@ -427,7 +427,7 @@ export const espnow_radio_on_off = function (block, generator) {
|
||||
|
||||
export const espnow_radio_send = function (block, generator) {
|
||||
generator.definitions_['import_radio'] = "import radio";
|
||||
generator.definitions_['ESPNow_radio_initialize'] = "ESPNow_radio=radio.ESPNow()";
|
||||
generator.definitions_['var_declare_ESPNow_radio'] = 'ESPNow_radio = radio.ESPNow()';
|
||||
var varName = generator.valueToCode(this, 'send', generator.ORDER_ATOMIC);
|
||||
var code = 'ESPNow_radio.send("ffffffffffff",' + varName + ")\n";
|
||||
return code;
|
||||
@@ -435,7 +435,7 @@ export const espnow_radio_send = function (block, generator) {
|
||||
|
||||
export const espnow_radio_rec = function (block, generator) {
|
||||
generator.definitions_['import_radio'] = "import radio";
|
||||
generator.definitions_['ESPNow_radio_initialize'] = "ESPNow_radio=radio.ESPNow()";
|
||||
generator.definitions_['var_declare_ESPNow_radio'] = 'ESPNow_radio = radio.ESPNow()';
|
||||
var code = "ESPNow_radio.recv()";
|
||||
return [code, generator.ORDER_ATOMIC];
|
||||
}
|
||||
@@ -448,7 +448,7 @@ export const espnow_radio_recv_msg = function (block, generator) {
|
||||
export const espnow_radio_recv = function (block, generator) {
|
||||
generator.definitions_['import_radio'] = "import radio";
|
||||
generator.definitions_['import_ubinascii'] = 'import ubinascii';
|
||||
generator.definitions_['ESPNow_radio_initialize'] = "ESPNow_radio=radio.ESPNow()";
|
||||
generator.definitions_['var_declare_ESPNow_radio'] = 'ESPNow_radio = radio.ESPNow()';
|
||||
var doCode = generator.statementToCode(block, 'DO') || generator.PASS;
|
||||
generator.definitions_['def_ESPNow_radio_recv'] = 'def ESPNow_radio_recv(mac,ESPNow_radio_msg):\n' + doCode;
|
||||
generator.definitions_['def_ESPNow_radio_recv_all'] = '_radio_msg_list = []\n' + 'def ESPNow_radio_recv_callback(mac,ESPNow_radio_msg):\n' + ' global _radio_msg_list\n' + ' try: ESPNow_radio_recv(mac,ESPNow_radio_msg)\n' + ' except: pass\n' + ' if str(ESPNow_radio_msg) in _radio_msg_list:\n' + " eval('radio_recv_' + bytes.decode(ubinascii.hexlify(ESPNow_radio_msg)) + '()')\n";
|
||||
@@ -504,7 +504,7 @@ var toUTF8Hex = function (str) {
|
||||
export const espnow_radio_recv_certain_msg = function (block, generator) {
|
||||
generator.definitions_['import_radio'] = "import radio";
|
||||
generator.definitions_['import_ubinascii'] = 'import ubinascii';
|
||||
generator.definitions_['ESPNow_radio_initialize'] = "ESPNow_radio=radio.ESPNow()";
|
||||
generator.definitions_['var_declare_ESPNow_radio'] = 'ESPNow_radio = radio.ESPNow()';
|
||||
var doCode = generator.statementToCode(block, 'DO') || generator.PASS;
|
||||
generator.definitions_['def_ESPNow_radio_recv_all'] = '_radio_msg_list = []\n' + 'def ESPNow_radio_recv_callback(mac,ESPNow_radio_msg):\n' + ' global _radio_msg_list\n' + ' try: ESPNow_radio_recv(mac,ESPNow_radio_msg)\n' + ' except: pass\n' + ' if str(ESPNow_radio_msg) in _radio_msg_list:\n' + " eval('radio_recv_' + bytes.decode(ubinascii.hexlify(ESPNow_radio_msg)) + '()')\n";
|
||||
generator.definitions_['ESPNow_radio_recv_callback'] = "ESPNow_radio.recv_cb(ESPNow_radio_recv_callback)\n";
|
||||
@@ -517,27 +517,21 @@ export const espnow_radio_recv_certain_msg = function (block, generator) {
|
||||
}
|
||||
|
||||
export const espnow_radio_recv_new = function (block, generator) {
|
||||
generator.definitions_['import_radio'] = "import radio";
|
||||
generator.definitions_['ESPNow_radio_initialize'] = "ESPNow_radio=radio.ESPNow()";
|
||||
generator.definitions_['ESPNow_radio_handlelist'] = "handle_list=[]";
|
||||
generator.definitions_['import_radio'] = 'import radio';
|
||||
generator.definitions_['var_declare_ESPNow_radio'] = 'ESPNow_radio = radio.ESPNow()';
|
||||
var doCode = generator.statementToCode(block, 'DO') || generator.PASS;
|
||||
generator.definitions_['def_ESPNow_radio_recv'] = 'def ESPNow_radio_recv(mac,ESPNow_radio_msg):\n' + doCode;
|
||||
generator.definitions_['ESPNow_radio_handlelist_append'] = 'if not ESPNow_radio_recv in handle_list:\n handle_list.append(ESPNow_radio_recv)';
|
||||
generator.definitions_['ESPNow_radio_recv_callback'] = "ESPNow_radio.recv_cb(handle_list)\n";
|
||||
|
||||
generator.definitions_['def_ESPNow_radio_recv'] = 'def ESPNow_radio_recv(mac, ESPNow_radio_msg):\n'
|
||||
+ `${doCode}\nESPNow_radio.recv_cb("__all__", ESPNow_radio_recv)\n`;
|
||||
return '';
|
||||
}
|
||||
|
||||
export const espnow_radio_recv_certain_msg_new = function (block, generator) {
|
||||
generator.definitions_['import_radio'] = "import radio";
|
||||
generator.definitions_['ESPNow_radio_initialize'] = "ESPNow_radio=radio.ESPNow()";
|
||||
generator.definitions_['ESPNow_radio_handlelist'] = "handle_list=[]";
|
||||
generator.definitions_['import_radio'] = 'import radio';
|
||||
generator.definitions_['var_declare_ESPNow_radio'] = 'ESPNow_radio = radio.ESPNow()';
|
||||
var doCode = generator.statementToCode(block, 'DO') || generator.PASS;
|
||||
var message = block.getFieldValue('msg');
|
||||
generator.definitions_['def_ESPNow_radio_recv__' + message] = 'def ESPNow_radio_recv__' + message + '(mac,ESPNow_radio_msg):\n' + doCode;
|
||||
generator.definitions_['ESPNow_radio_handlelist_append__' + message] = 'if not ESPNow_radio_recv__' + message + ' in handle_list:\n handle_list.append(ESPNow_radio_recv__' + message + ')';
|
||||
generator.definitions_['ESPNow_radio_recv_callback__' + message] = "ESPNow_radio.recv_cb(handle_list)\n";
|
||||
|
||||
generator.definitions_['def_ESPNow_radio_recv_' + message] = 'def ESPNow_radio_recv(mac, ESPNow_radio_msg):\n'
|
||||
+ `${doCode}\nESPNow_radio.recv_cb("${message}", ESPNow_radio_recv)\n`;
|
||||
return '';
|
||||
}
|
||||
|
||||
|
||||
@@ -658,7 +658,7 @@
|
||||
"espnow"
|
||||
],
|
||||
"__file__": true,
|
||||
"__size__": 4526,
|
||||
"__size__": 5431,
|
||||
"__name__": "radio.py"
|
||||
},
|
||||
"rc522": {
|
||||
|
||||
@@ -20,6 +20,7 @@ class ESPNow(espnow.ESPNow):
|
||||
self.active(True)
|
||||
self._channel = channel
|
||||
self._txpower = txpower
|
||||
self._on_handle = {}
|
||||
self._nic = network.WLAN(network.STA_IF) #if version else network.WLAN(network.AP_IF)
|
||||
self._nic.active(True)
|
||||
self._nic.config(channel=self._channel, txpower=self._txpower)
|
||||
@@ -77,6 +78,13 @@ class ESPNow(espnow.ESPNow):
|
||||
func(hexlify(data[0]).decode(), data[1].decode())
|
||||
else:
|
||||
func(hexlify(data[0]).decode(), data[1].decode())
|
||||
elif isinstance(self._on_handle, dict):
|
||||
mac = hexlify(data[0]).decode()
|
||||
decoded_msg = str(data[1].decode())
|
||||
if '__all__' in self._on_handle:
|
||||
self._on_handle['__all__'](mac, decoded_msg)
|
||||
if decoded_msg in self._on_handle:
|
||||
self._on_handle[decoded_msg](mac, decoded_msg)
|
||||
else:
|
||||
self._on_handle(hexlify(data[0]).decode(), data[1].decode())
|
||||
|
||||
@@ -93,13 +101,23 @@ class ESPNow(espnow.ESPNow):
|
||||
func(hexlify(host).decode(), msg.decode())
|
||||
else:
|
||||
func(hexlify(host).decode(), msg.decode())
|
||||
elif isinstance(self._on_handle, dict):
|
||||
mac = hexlify(host).decode()
|
||||
decoded_msg = str(msg.decode())
|
||||
if '__all__' in self._on_handle:
|
||||
self._on_handle['__all__'](mac, decoded_msg)
|
||||
if decoded_msg in self._on_handle:
|
||||
self._on_handle[decoded_msg](mac, decoded_msg)
|
||||
else:
|
||||
self._on_handle(hexlify(host).decode(), msg.decode())
|
||||
|
||||
def recv_cb(self, recv_cbs):
|
||||
def recv_cb(self, *args):
|
||||
'''Receive callback'''
|
||||
self._on_handle = recv_cbs
|
||||
if recv_cbs:
|
||||
if isinstance(args[0], str):
|
||||
self._on_handle[args[0]] = args[1]
|
||||
else:
|
||||
self._on_handle = args[0]
|
||||
if args[0]:
|
||||
if version == 0:
|
||||
self.irq(self._cb_handle0)
|
||||
else:
|
||||
|
||||
@@ -145,20 +145,42 @@ Python.finish = function (code) {
|
||||
code = code.replace(/\n/g, '\n');
|
||||
code = code.replace(/\n\s+$/, '\n');
|
||||
}
|
||||
var definitions = [];
|
||||
for (var name in Python.definitions_) {
|
||||
definitions.push(Python.definitions_[name]);
|
||||
var imports = [];
|
||||
var definitions_var = []; //变量定义
|
||||
var definitions_fun = []; //函数定义
|
||||
for (var name in this.definitions_) {
|
||||
var def = this.definitions_[name];
|
||||
if (name.indexOf('import') === 0) {
|
||||
imports.push(def);
|
||||
} else if (name.indexOf('var_declare') === 0) {
|
||||
definitions_var.push(def);
|
||||
} else {
|
||||
definitions_fun.push(def);
|
||||
}
|
||||
}
|
||||
if (imports.length) {
|
||||
imports.push('\n\n');
|
||||
}
|
||||
if (definitions_var.length) {
|
||||
definitions_var.push('\n\n');
|
||||
}
|
||||
if (definitions_fun.length) {
|
||||
definitions_fun.push('\n\n');
|
||||
}
|
||||
var functions = [];
|
||||
for (var name in Python.functions_) {
|
||||
functions.push(Python.functions_[name]);
|
||||
}
|
||||
if (functions.length) {
|
||||
functions.push('\n\n');
|
||||
}
|
||||
var setups = [];
|
||||
for (var name in Python.setups_) {
|
||||
setups.push(Python.setups_[name]);
|
||||
}
|
||||
if (setups.length !== 0)
|
||||
setups.push('\n');
|
||||
if (setups.length) {
|
||||
setups.push('\n\n');
|
||||
}
|
||||
var loops = [];
|
||||
for (var name in Python.loops_) {
|
||||
loops.push(Python.loops_[name]);
|
||||
@@ -167,15 +189,15 @@ Python.finish = function (code) {
|
||||
for (var name in Python.codeEnd_) {
|
||||
codeEnd.push(Python.codeEnd_[name]);
|
||||
}
|
||||
if (codeEnd.length !== 0)
|
||||
if (codeEnd.length !== 0) {
|
||||
codeEnd.push('\n');
|
||||
// Clean up temporary data.
|
||||
//delete Python.definitions_;
|
||||
//delete Python.functionNames_;
|
||||
//Python.variableDB_.reset();
|
||||
if (loops.length > 0)
|
||||
return definitions.join('\n') + '\n' + functions.join('\n') + '\n' + setups.join('') + '\n' + code + 'while True:\n' + loops.join('') + codeEnd.join('\n');
|
||||
return definitions.join('\n') + '\n' + functions.join('\n') + '\n' + setups.join('') + '\n' + code + codeEnd.join('\n');
|
||||
}
|
||||
if (loops.length > 0) {
|
||||
return imports.join('\n') + definitions_var.join('\n') + definitions_fun.join('\n')
|
||||
+ functions.join('\n') + setups.join('') + code + 'while True:\n' + loops.join('') + codeEnd.join('\n');
|
||||
}
|
||||
return imports.join('\n') + definitions_var.join('\n') + definitions_fun.join('\n')
|
||||
+ functions.join('\n') + setups.join('') + code + codeEnd.join('\n');
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user