Update: 合并master分支提交记录

This commit is contained in:
王立帮
2024-12-20 20:49:36 +08:00
15 changed files with 65 additions and 85 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
<xml version="Mixly 3.0 rc0" board="Python ESP32-C2@MixGo MINI" shown="block"><block type="analog_ble_keyboard_init" id="hM)c[?2Wi#$sU(iiU;gm" x="-8" y="-1"><value name="kname"><shadow type="text" id="6;f$gC6Iksb7B{C0)$Zh"><field name="TEXT">ble_keyboard</field></shadow></value><next><block type="controls_whileUntil" id="gr([W7tV{b[n-L8~Svc}"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="GYqZ(GytsnLz*p0f:.Dp"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="system_print" id="+7pk-l-zaVsP~3E(mBmO"><value name="VAR"><shadow type="text" id="gT1S{,(SsSBq+D1eXAzk"><field name="TEXT">Mixly</field></shadow><block type="sensor_mixgo_pin_near_single" id="]*,VN]HkDOo:bsjbla8a"></block></value><next><block type="controls_if" id="X94+~x3lmk`EyStX28UL"><value name="IF0"><block type="logic_compare" id=")1h$w+;L7=GAohz{5kxt"><field name="OP">GT</field><value name="A"><block type="sensor_mixgo_pin_near_single" id="pYbpqoz1uIP2khKz!^Xo"></block></value><value name="B"><block type="math_number" id="S!YcLq/k-IInAOl;!#5M"><field name="NUM">100</field></block></value></block></value><statement name="DO0"><block type="analog_ble_keyboard_input" id="gkOVDjHZwy?n[CGH)4wT"><field name="release">True</field><value name="special"><block type="special_key" id="Wux*SK@=+t~73ze1;`nv"><field name="op">0x08</field></block></value><value name="general"><block type="general_key" id="L!S-,zf?X9dfHBPzv32v"><field name="op">0x07</field></block></value></block></statement><next><block type="controls_delay_new" id=".6:BN$LCGT9f5u*PToRx"><field name="Time">ms</field><value name="DELAY_TIME"><shadow type="math_number" id="FQ,**3YOtw_qwx,aBeIT"><field name="NUM">10</field></shadow></value></block></next></block></next></block></statement></block></next></block></xml><config>{}</config><code>ZnJvbSBibGVfaGlkX2tleWJvYXJkIGltcG9ydCBLZXlib2FyZAppbXBvcnQgbWFjaGluZQpmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfYWxzCmltcG9ydCB0aW1lCgoKYmxlX2tleWJvYXJkPUtleWJvYXJkKCdibGVfa2V5Ym9hcmQnKQp3aGlsZSBUcnVlOgogICAgcHJpbnQob25ib2FyZF9hbHMucHNfbmwoKSkKICAgIGlmIG9uYm9hcmRfYWxzLnBzX25sKCkgPiAxMDA6CiAgICAgICAgYmxlX2tleWJvYXJkLm5vdGlmeV9oaWQoMHgwOCwweDA3LFRydWUpCiAgICB0aW1lLnNsZWVwX21zKDEwKQo=</code>
<xml version="Mixly 3.0 rc0" board="Python ESP32-C2@MixGo MINI" shown="block"><block type="analog_ble_keyboard_init" id="10#lkmIHoEH3G,WJtzbM" x="0" y="0"><value name="kname"><shadow type="text" id="_}d.~jsr]rwag}G~cOh;"><field name="TEXT">ble_keyboard</field></shadow></value><next><block type="do_while" id="T589~[/#u`Dx;eocy@5R"><field name="type">true</field><statement name="input_data"><block type="display_scroll_string" id="EYn..n?~x2BCVyRmZU,v"><value name="data"><shadow type="text" id="76Q?i*5#vUdn+bI6*Q5x"><field name="TEXT">waitting</field></shadow></value></block></statement><value name="select_data"><block type="ble_keyboard_connect" id="lHRh=`vjZoBj*U(Q.Uha"></block></value><next><block type="esp32_onboard_music_pitch_with_time" id="viAjjNQ[EX#N2T/qN3tM"><value name="pitch"><shadow type="pins_tone_notes" id="AsYY_JwX+/}b`izqal=2"><field name="PIN">698</field></shadow></value><value name="time"><shadow type="math_number" id="(FS[T-Zb^wR*GjAMhesu"><field name="NUM">150</field></shadow></value><next><block type="esp32_onboard_music_pitch_with_time" id="AK2VkI=[B@iAv1L5Ucnt"><value name="pitch"><shadow type="pins_tone_notes" id="bFNek2T9?[Lu;$fg^}fT"><field name="PIN">523</field></shadow></value><value name="time"><shadow type="math_number" id="1gij.8pY)1iKZ+pV]Kjd"><field name="NUM">150</field></shadow></value><next><block type="controls_whileUntil" id="kEPWM4fvkz:SSKWvv7~|"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="wt(Kz3a|T+Nm[J2`C_sr"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="controls_if" id="hoF;u:`=ypocLVhn#}x2"><value name="IF0"><block type="logic_compare" id="d1z_ddGt!8fL.F~;~}6Y"><field name="OP">GT</field><value name="A"><block type="sensor_mixgo_pin_near_single" id="guN!PK4LmV/{Heu8gq:g"></block></value><value name="B"><block type="math_number" id="fn?So{65p.M*3PlAx=SI"><field name="NUM">100</field></block></value></block></value><statement name="DO0"><block type="analog_ble_keyboard_input" id="[mQ]yedR$-23N{B;lt-z"><field name="release">True</field><value name="special"><block type="special_key" id="qE$DAXH#j}hF.F?O=3tK"><field name="op">0x08</field></block></value><value name="general"><block type="general_key" id="~0xnO3RD[EM_l:C15vgQ"><field name="op">0x07</field></block></value><next><block type="controls_delay_new" id="zm,ft=_)0jM/@jHLp+,M"><field name="Time">ms</field><value name="DELAY_TIME"><shadow type="math_number" id="Kfx,[l^JV*S(aV!:ADnk"><field name="NUM">300</field></shadow></value></block></next></block></statement><next><block type="controls_delay_new" id=".@_rc=6`Cu#.UzIT=,v["><field name="Time">ms</field><value name="DELAY_TIME"><shadow type="math_number" id="mA|Bs0q_W{b}J4})hk(!"><field name="NUM">100</field></shadow></value></block></next></block></statement></block></next></block></next></block></next></block></next></block></xml><config>{}</config><code>ZnJvbSBibGVfaGlkX2tleWJvYXJkIGltcG9ydCBLZXlib2FyZApmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfbWF0cml4CmZyb20gbWl4Z29fbWluaSBpbXBvcnQgb25ib2FyZF9tdXNpYwpmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfYWxzCmltcG9ydCB0aW1lCgoKYmxlX2tleWJvYXJkPUtleWJvYXJkKCdibGVfa2V5Ym9hcmQnKQp3aGlsZSBUcnVlOgogICAgb25ib2FyZF9tYXRyaXguc2Nyb2xsKCd3YWl0dGluZycpCiAgICBpZiAoYmxlX2tleWJvYXJkLmlzX2Nvbm5lY3RlZCgpKToKICAgICAgICBicmVhawpvbmJvYXJkX211c2ljLnBpdGNoX3RpbWUoNjk4LCAxNTApCm9uYm9hcmRfbXVzaWMucGl0Y2hfdGltZSg1MjMsIDE1MCkKd2hpbGUgVHJ1ZToKICAgIGlmIG9uYm9hcmRfYWxzLnBzX25sKCkgPiAxMDA6CiAgICAgICAgYmxlX2tleWJvYXJkLm5vdGlmeV9oaWQoMHgwOCwweDA3LFRydWUpCiAgICAgICAgdGltZS5zbGVlcF9tcygzMDApCiAgICB0aW1lLnNsZWVwX21zKDEwMCkK</code>

View File

@@ -0,0 +1 @@
<xml version="Mixly 3.0 rc0" board="Python ESP32-C2@MixGo MINI" shown="block"><block type="analog_ble_keyboard_init" id="$#{W*PmG{S5Yw_rQkz7O" x="-47" y="4"><value name="kname"><shadow type="text" id="B~9/2K|h/gTWPzrQR|=u"><field name="TEXT">ble_keyboard</field></shadow></value><next><block type="do_while" id="VurGE57MFqhek1G!t9-{"><field name="type">true</field><statement name="input_data"><block type="display_scroll_string" id="!~H8f|W#7.FCTx!gg==k"><value name="data"><shadow type="text" id="|N:r#{Jh$6!v(mr1g6qW"><field name="TEXT">waitting</field></shadow></value></block></statement><value name="select_data"><block type="ble_keyboard_connect" id="ncq4!etx)VI8Y]m?AQf_"></block></value><next><block type="esp32_onboard_music_pitch_with_time" id="[+y?[s7aF@Xa|s/}X9!b"><value name="pitch"><shadow type="pins_tone_notes" id="JjS(SgfTlN!eC]_tNKs8"><field name="PIN">784</field></shadow></value><value name="time"><shadow type="math_number" id="B9QV`At_kWI7?!y@g:.K"><field name="NUM">150</field></shadow></value><next><block type="esp32_onboard_music_pitch_with_time" id="J^qR9)7YCg?)$qBcgyw|"><value name="pitch"><shadow type="pins_tone_notes" id="XT@kR}wJ@y6VB_)!TNJx"><field name="PIN">659</field></shadow></value><value name="time"><shadow type="math_number" id="b`CH16Le|V!}6M^@ZAQ;"><field name="NUM">150</field></shadow></value><next><block type="controls_whileUntil" id="U};S2}RdC2um|_A,-(!{"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="#dWZkQBGY}TzVkg==s9r"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="controls_if" id=")Zi(S,uU2q7SSYzVvl9C"><mutation elseif="1"></mutation><value name="IF0"><block type="sensor_mixgo_button_was_pressed" id="HUp9WD{$pP87S6]?Pct;"><value name="btn"><shadow type="pins_button" id="Kk*.,sS,!bbiRAnSZX90"><field name="PIN">A1key</field></shadow></value></block></value><statement name="DO0"><block type="analog_ble_keyboard_input" id="gXV=t/#tjCO0plT8fOT3"><field name="release">True</field><value name="special"><block type="special_key" id="Wk594}n]]ax|GwA$895."><field name="op">0x00</field></block></value><value name="general"><block type="general_key" id="B64|/5M3$R|vb5qPH_rh"><field name="op">0x52</field></block></value><next><block type="system_print" id="#hu?4Oktr1oe*lpuNMI4"><value name="VAR"><shadow type="text" id="bX$C3t[dK74D=Pd.v9oA"><field name="TEXT">Mixly</field></shadow></value></block></next></block></statement><value name="IF1"><block type="sensor_mixgo_button_was_pressed" id="o?gE2*xN-E)*1Q/d-#cm"><value name="btn"><shadow type="pins_button" id=",z{R3a?iJJT~8{asKk8("><field name="PIN">A3key</field></shadow></value></block></value><statement name="DO1"><block type="analog_ble_keyboard_input" id="*ZkPn^~f21@;Y(xA1PJ:"><field name="release">True</field><value name="special"><block type="special_key" id="Um.|*v1)OR57][w*j10d"><field name="op">0x00</field></block></value><value name="general"><block type="general_key" id="?~Py=~jz.zI!=H]IUVAx"><field name="op">0x51</field></block></value></block></statement><next><block type="controls_delay_new" id="3XNDj_Z=QFR$D6+wL0@:"><field name="Time">ms</field><value name="DELAY_TIME"><shadow type="math_number" id="LbVN^u/e`oaxP4(z+j~O"><field name="NUM">10</field></shadow></value></block></next></block></statement></block></next></block></next></block></next></block></next></block></xml><config>{}</config><code>ZnJvbSBibGVfaGlkX2tleWJvYXJkIGltcG9ydCBLZXlib2FyZApmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfbWF0cml4CmZyb20gbWl4Z29fbWluaSBpbXBvcnQgb25ib2FyZF9tdXNpYwppbXBvcnQgbWl4Z29fbWluaQppbXBvcnQgbWFjaGluZQppbXBvcnQgdGltZQoKCmJsZV9rZXlib2FyZD1LZXlib2FyZCgnYmxlX2tleWJvYXJkJykKd2hpbGUgVHJ1ZToKICAgIG9uYm9hcmRfbWF0cml4LnNjcm9sbCgnd2FpdHRpbmcnKQogICAgaWYgKGJsZV9rZXlib2FyZC5pc19jb25uZWN0ZWQoKSk6CiAgICAgICAgYnJlYWsKb25ib2FyZF9tdXNpYy5waXRjaF90aW1lKDc4NCwgMTUwKQpvbmJvYXJkX211c2ljLnBpdGNoX3RpbWUoNjU5LCAxNTApCndoaWxlIFRydWU6CiAgICBpZiBtaXhnb19taW5pLkExa2V5Lndhc19wcmVzc2VkKCk6CiAgICAgICAgYmxlX2tleWJvYXJkLm5vdGlmeV9oaWQoMHgwMCwweDUyLFRydWUpCiAgICAgICAgcHJpbnQoJ01peGx5JykKICAgIGVsaWYgbWl4Z29fbWluaS5BM2tleS53YXNfcHJlc3NlZCgpOgogICAgICAgIGJsZV9rZXlib2FyZC5ub3RpZnlfaGlkKDB4MDAsMHg1MSxUcnVlKQogICAgdGltZS5zbGVlcF9tcygxMCkK</code>

View File

@@ -216,6 +216,10 @@
"__file__": true,
"__name__": "23-2-蓝牙键鼠-无线键盘.mix"
},
"23-2-蓝牙键鼠-翻页笔.mix": {
"__file__": true,
"__name__": "23-2-蓝牙键鼠-翻页笔.mix"
},
"24-1-无线广播-通讯测试.mix": {
"__file__": true,
"__name__": "24-1-无线广播-通讯测试.mix"

View File

@@ -31,6 +31,41 @@ const Variables = {};
*/
Variables.NAME_TYPE = 'VARIABLE';
Variables.DATA_TYPE = [
[Blockly.Msg.LANG_MATH_INT, 'int'],
[Blockly.Msg.LANG_MATH_UNSIGNED_INT, 'unsigned int'],
[Blockly.Msg.LANG_MATH_WORD, 'word'],
[Blockly.Msg.LANG_MATH_LONG, 'long'],
[Blockly.Msg.LANG_MATH_UNSIGNED_LONG, 'unsigned long'],
[Blockly.Msg.LANG_MATH_FLOAT, 'float'],
[Blockly.Msg.LANG_MATH_DOUBLE, 'double'],
[Blockly.Msg.LANG_MATH_BOOLEAN, 'bool'],
[Blockly.Msg.LANG_MATH_BYTE, 'byte'],
[Blockly.Msg.LANG_MATH_CHAR, 'char'],
[Blockly.Msg.LANG_MATH_UNSIGNED_CHAR, 'unsigned char'],
[Blockly.Msg.LANG_MATH_STRING, 'String'],
['uint8_t', 'uint8_t'],
['uint16_t', 'uint16_t'],
['uint32_t', 'uint32_t'],
['uint64_t', 'uint64_t'],
['int*', 'int*'],
['unsigned int*', 'unsigned int*'],
['word*', 'word*'],
['long*', 'long*'],
['unsigned long*', 'unsigned long*'],
['float*', 'float*'],
['double*', 'double*'],
['bool*', 'bool*'],
['byte*', 'byte*'],
['char*', 'char*'],
['unsigned char*', 'unsigned char*'],
['String*', 'String*'],
['uint8_t*', 'uint8_t*'],
['uint16_t*', 'uint16_t*'],
['uint32_t*', 'uint32_t*'],
['uint64_t*', 'uint64_t*']
];
/**
* Find all user-created variables.
* @param {!Blockly.Block|!Blockly.Workspace} root Root block or workspace.

View File

@@ -443,25 +443,7 @@ export const procedures_defreturn = {
this.appendValueInput('RETURN')
.setAlign(Blockly.inputs.Align.RIGHT)
.appendField(Blockly.Msg['PROCEDURES_DEFRETURN_RETURN'])
.appendField(new Blockly.FieldDropdown([
[Blockly.Msg.LANG_MATH_INT, 'int'],
[Blockly.Msg.LANG_MATH_UNSIGNED_INT, 'unsigned int'],
[Blockly.Msg.LANG_MATH_WORD, 'word'],
[Blockly.Msg.LANG_MATH_LONG, 'long'],
[Blockly.Msg.LANG_MATH_UNSIGNED_LONG, 'unsigned long'],
[Blockly.Msg.LANG_MATH_FLOAT, 'float'],
[Blockly.Msg.LANG_MATH_DOUBLE, 'double'],
[Blockly.Msg.LANG_MATH_BOOLEAN, 'boolean'],
[Blockly.Msg.LANG_MATH_BYTE, 'byte'],
[Blockly.Msg.LANG_MATH_CHAR, 'char'],
[Blockly.Msg.LANG_MATH_UNSIGNED_CHAR, 'unsigned char'],
[Blockly.Msg.LANG_MATH_STRING, 'String'],
["char*", "char*"],
["uint8_t", "uint8_t"],
["uint16_t", "uint16_t"],
["uint32_t", "uint32_t"],
["uint64_t", "uint64_t"]
]), "TYPE");
.appendField(new Blockly.FieldDropdown(Variables.DATA_TYPE), "TYPE");
this.setMutator(new Blockly.icons.MutatorIcon(['procedures_mutatorarg'], this));
if ((this.workspace.options.comments ||
(this.workspace.options.parentWorkspace &&
@@ -540,25 +522,7 @@ export const procedures_mutatorarg = {
this.appendDummyInput()
.appendField(Blockly.Msg.PROCEDURES_BEFORE_PARAMS)
.appendField(new Blockly.FieldDropdown([
[Blockly.Msg.LANG_MATH_INT, 'int'],
[Blockly.Msg.LANG_MATH_UNSIGNED_INT, 'unsigned int'],
[Blockly.Msg.LANG_MATH_WORD, 'word'],
[Blockly.Msg.LANG_MATH_LONG, 'long'],
[Blockly.Msg.LANG_MATH_UNSIGNED_LONG, 'unsigned long'],
[Blockly.Msg.LANG_MATH_FLOAT, 'float'],
[Blockly.Msg.LANG_MATH_DOUBLE, 'double'],
[Blockly.Msg.LANG_MATH_BOOLEAN, 'boolean'],
[Blockly.Msg.LANG_MATH_BYTE, 'byte'],
[Blockly.Msg.LANG_MATH_CHAR, 'char'],
[Blockly.Msg.LANG_MATH_UNSIGNED_CHAR, 'unsigned char'],
[Blockly.Msg.LANG_MATH_STRING, 'String'],
["char*", "char*"],
["uint8_t", "uint8_t"],
["uint16_t", "uint16_t"],
["uint32_t", "uint32_t"],
["uint64_t", "uint64_t"]
]), "TYPEVAR")
.appendField(new Blockly.FieldDropdown(Variables.DATA_TYPE), "TYPEVAR")
.appendField(field, 'NAME');
this.setPreviousStatement(true);
this.setNextStatement(true);

View File

@@ -1,26 +1,9 @@
import * as Blockly from 'blockly/core';
import { Variables } from 'blockly/core';
const VARIABLES_HUE = 330;
var DATATYPES = [
[Blockly.Msg.LANG_MATH_INT, 'int'],
[Blockly.Msg.LANG_MATH_UNSIGNED_INT, 'unsigned int'],
[Blockly.Msg.LANG_MATH_WORD, 'word'],
[Blockly.Msg.LANG_MATH_LONG, 'long'],
[Blockly.Msg.LANG_MATH_UNSIGNED_LONG, 'unsigned long'],
[Blockly.Msg.LANG_MATH_FLOAT, 'float'],
[Blockly.Msg.LANG_MATH_DOUBLE, 'double'],
[Blockly.Msg.LANG_MATH_BOOLEAN, 'boolean'],
[Blockly.Msg.LANG_MATH_BYTE, 'byte'],
[Blockly.Msg.LANG_MATH_CHAR, 'char'],
[Blockly.Msg.LANG_MATH_UNSIGNED_CHAR, 'unsigned char'],
[Blockly.Msg.LANG_MATH_STRING, 'String'],
["char*", "char*"],
["uint8_t", "uint8_t"],
["uint16_t", "uint16_t"],
["uint32_t", "uint32_t"],
["uint64_t", "uint64_t"]
];
// ************************************************************************
// THIS SECTION IS INSERTED INTO BLOCKLY BY BLOCKLYDUINO.
export const variables_declare = {
@@ -32,7 +15,7 @@ export const variables_declare = {
.appendField(new Blockly.FieldDropdown([[Blockly.Msg.MIXLY_GLOBAL_VARIABLE, "global_variate"], [Blockly.Msg.MIXLY_LOCAL_VARIABLE, "local_variate"]]), "variables_type")
.appendField(new Blockly.FieldTextInput('item'), 'VAR')
.appendField(Blockly.Msg.MIXLY_AS)
.appendField(new Blockly.FieldDropdown(DATATYPES), "TYPE")
.appendField(new Blockly.FieldDropdown(Variables.DATA_TYPE), "TYPE")
.appendField(Blockly.Msg.MIXLY_VALUE);
this.setPreviousStatement(true);
this.setNextStatement(true);
@@ -101,22 +84,8 @@ export const variables_set = {
export const variables_change = {
init: function () {
this.setColour(VARIABLES_HUE);
var DATATYPES = [
[Blockly.Msg.LANG_MATH_INT, 'int'],
[Blockly.Msg.LANG_MATH_UNSIGNED_INT, 'unsigned int'],
[Blockly.Msg.LANG_MATH_WORD, 'word'],
[Blockly.Msg.LANG_MATH_LONG, 'long'],
[Blockly.Msg.LANG_MATH_UNSIGNED_LONG, 'unsigned long'],
[Blockly.Msg.LANG_MATH_FLOAT, 'float'],
[Blockly.Msg.LANG_MATH_DOUBLE, 'double'],
[Blockly.Msg.LANG_MATH_BOOLEAN, 'boolean'],
[Blockly.Msg.LANG_MATH_BYTE, 'byte'],
[Blockly.Msg.LANG_MATH_CHAR, 'char'],
[Blockly.Msg.LANG_MATH_UNSIGNED_CHAR, 'unsigned char'],
[Blockly.Msg.LANG_MATH_STRING, 'String']
];
this.appendValueInput('MYVALUE')
.appendField(new Blockly.FieldDropdown(DATATYPES), 'OP');
.appendField(new Blockly.FieldDropdown(Variables.DATA_TYPE), 'OP');
// Assign 'this' to a variable for use in the tooltip closure below.
this.setOutput(true);
this.setTooltip(Blockly.Msg.MIXLY_TOOLTIP_VARIABLES_CHANGE);

View File

@@ -1 +1 @@
<xml version="Mixly 3.0 rc0" board="Python ESP32-C2@MixGo MINI" shown="block"><block type="analog_ble_keyboard_init" id="hM)c[?2Wi#$sU(iiU;gm" x="-8" y="-1"><value name="kname"><shadow type="text" id="6;f$gC6Iksb7B{C0)$Zh"><field name="TEXT">ble_keyboard</field></shadow></value><next><block type="controls_whileUntil" id="gr([W7tV{b[n-L8~Svc}"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="GYqZ(GytsnLz*p0f:.Dp"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="system_print" id="+7pk-l-zaVsP~3E(mBmO"><value name="VAR"><shadow type="text" id="gT1S{,(SsSBq+D1eXAzk"><field name="TEXT">Mixly</field></shadow><block type="sensor_mixgo_pin_near_single" id="]*,VN]HkDOo:bsjbla8a"></block></value><next><block type="controls_if" id="X94+~x3lmk`EyStX28UL"><value name="IF0"><block type="logic_compare" id=")1h$w+;L7=GAohz{5kxt"><field name="OP">GT</field><value name="A"><block type="sensor_mixgo_pin_near_single" id="pYbpqoz1uIP2khKz!^Xo"></block></value><value name="B"><block type="math_number" id="S!YcLq/k-IInAOl;!#5M"><field name="NUM">100</field></block></value></block></value><statement name="DO0"><block type="analog_ble_keyboard_input" id="gkOVDjHZwy?n[CGH)4wT"><field name="release">True</field><value name="special"><block type="special_key" id="Wux*SK@=+t~73ze1;`nv"><field name="op">0x08</field></block></value><value name="general"><block type="general_key" id="L!S-,zf?X9dfHBPzv32v"><field name="op">0x07</field></block></value></block></statement><next><block type="controls_delay_new" id=".6:BN$LCGT9f5u*PToRx"><field name="Time">ms</field><value name="DELAY_TIME"><shadow type="math_number" id="FQ,**3YOtw_qwx,aBeIT"><field name="NUM">10</field></shadow></value></block></next></block></next></block></statement></block></next></block></xml><config>{}</config><code>ZnJvbSBibGVfaGlkX2tleWJvYXJkIGltcG9ydCBLZXlib2FyZAppbXBvcnQgbWFjaGluZQpmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfYWxzCmltcG9ydCB0aW1lCgoKYmxlX2tleWJvYXJkPUtleWJvYXJkKCdibGVfa2V5Ym9hcmQnKQp3aGlsZSBUcnVlOgogICAgcHJpbnQob25ib2FyZF9hbHMucHNfbmwoKSkKICAgIGlmIG9uYm9hcmRfYWxzLnBzX25sKCkgPiAxMDA6CiAgICAgICAgYmxlX2tleWJvYXJkLm5vdGlmeV9oaWQoMHgwOCwweDA3LFRydWUpCiAgICB0aW1lLnNsZWVwX21zKDEwKQo=</code>
<xml version="Mixly 3.0 rc0" board="Python ESP32-C2@MixGo MINI" shown="block"><block type="analog_ble_keyboard_init" id="10#lkmIHoEH3G,WJtzbM" x="0" y="0"><value name="kname"><shadow type="text" id="_}d.~jsr]rwag}G~cOh;"><field name="TEXT">ble_keyboard</field></shadow></value><next><block type="do_while" id="T589~[/#u`Dx;eocy@5R"><field name="type">true</field><statement name="input_data"><block type="display_scroll_string" id="EYn..n?~x2BCVyRmZU,v"><value name="data"><shadow type="text" id="76Q?i*5#vUdn+bI6*Q5x"><field name="TEXT">waitting</field></shadow></value></block></statement><value name="select_data"><block type="ble_keyboard_connect" id="lHRh=`vjZoBj*U(Q.Uha"></block></value><next><block type="esp32_onboard_music_pitch_with_time" id="viAjjNQ[EX#N2T/qN3tM"><value name="pitch"><shadow type="pins_tone_notes" id="AsYY_JwX+/}b`izqal=2"><field name="PIN">698</field></shadow></value><value name="time"><shadow type="math_number" id="(FS[T-Zb^wR*GjAMhesu"><field name="NUM">150</field></shadow></value><next><block type="esp32_onboard_music_pitch_with_time" id="AK2VkI=[B@iAv1L5Ucnt"><value name="pitch"><shadow type="pins_tone_notes" id="bFNek2T9?[Lu;$fg^}fT"><field name="PIN">523</field></shadow></value><value name="time"><shadow type="math_number" id="1gij.8pY)1iKZ+pV]Kjd"><field name="NUM">150</field></shadow></value><next><block type="controls_whileUntil" id="kEPWM4fvkz:SSKWvv7~|"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="wt(Kz3a|T+Nm[J2`C_sr"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="controls_if" id="hoF;u:`=ypocLVhn#}x2"><value name="IF0"><block type="logic_compare" id="d1z_ddGt!8fL.F~;~}6Y"><field name="OP">GT</field><value name="A"><block type="sensor_mixgo_pin_near_single" id="guN!PK4LmV/{Heu8gq:g"></block></value><value name="B"><block type="math_number" id="fn?So{65p.M*3PlAx=SI"><field name="NUM">100</field></block></value></block></value><statement name="DO0"><block type="analog_ble_keyboard_input" id="[mQ]yedR$-23N{B;lt-z"><field name="release">True</field><value name="special"><block type="special_key" id="qE$DAXH#j}hF.F?O=3tK"><field name="op">0x08</field></block></value><value name="general"><block type="general_key" id="~0xnO3RD[EM_l:C15vgQ"><field name="op">0x07</field></block></value><next><block type="controls_delay_new" id="zm,ft=_)0jM/@jHLp+,M"><field name="Time">ms</field><value name="DELAY_TIME"><shadow type="math_number" id="Kfx,[l^JV*S(aV!:ADnk"><field name="NUM">300</field></shadow></value></block></next></block></statement><next><block type="controls_delay_new" id=".@_rc=6`Cu#.UzIT=,v["><field name="Time">ms</field><value name="DELAY_TIME"><shadow type="math_number" id="mA|Bs0q_W{b}J4})hk(!"><field name="NUM">100</field></shadow></value></block></next></block></statement></block></next></block></next></block></next></block></next></block></xml><config>{}</config><code>ZnJvbSBibGVfaGlkX2tleWJvYXJkIGltcG9ydCBLZXlib2FyZApmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfbWF0cml4CmZyb20gbWl4Z29fbWluaSBpbXBvcnQgb25ib2FyZF9tdXNpYwpmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfYWxzCmltcG9ydCB0aW1lCgoKYmxlX2tleWJvYXJkPUtleWJvYXJkKCdibGVfa2V5Ym9hcmQnKQp3aGlsZSBUcnVlOgogICAgb25ib2FyZF9tYXRyaXguc2Nyb2xsKCd3YWl0dGluZycpCiAgICBpZiAoYmxlX2tleWJvYXJkLmlzX2Nvbm5lY3RlZCgpKToKICAgICAgICBicmVhawpvbmJvYXJkX211c2ljLnBpdGNoX3RpbWUoNjk4LCAxNTApCm9uYm9hcmRfbXVzaWMucGl0Y2hfdGltZSg1MjMsIDE1MCkKd2hpbGUgVHJ1ZToKICAgIGlmIG9uYm9hcmRfYWxzLnBzX25sKCkgPiAxMDA6CiAgICAgICAgYmxlX2tleWJvYXJkLm5vdGlmeV9oaWQoMHgwOCwweDA3LFRydWUpCiAgICAgICAgdGltZS5zbGVlcF9tcygzMDApCiAgICB0aW1lLnNsZWVwX21zKDEwMCkK</code>

View File

@@ -0,0 +1 @@
<xml version="Mixly 3.0 rc0" board="Python ESP32-C2@MixGo MINI" shown="block"><block type="analog_ble_keyboard_init" id="$#{W*PmG{S5Yw_rQkz7O" x="-47" y="4"><value name="kname"><shadow type="text" id="B~9/2K|h/gTWPzrQR|=u"><field name="TEXT">ble_keyboard</field></shadow></value><next><block type="do_while" id="VurGE57MFqhek1G!t9-{"><field name="type">true</field><statement name="input_data"><block type="display_scroll_string" id="!~H8f|W#7.FCTx!gg==k"><value name="data"><shadow type="text" id="|N:r#{Jh$6!v(mr1g6qW"><field name="TEXT">waitting</field></shadow></value></block></statement><value name="select_data"><block type="ble_keyboard_connect" id="ncq4!etx)VI8Y]m?AQf_"></block></value><next><block type="esp32_onboard_music_pitch_with_time" id="[+y?[s7aF@Xa|s/}X9!b"><value name="pitch"><shadow type="pins_tone_notes" id="JjS(SgfTlN!eC]_tNKs8"><field name="PIN">784</field></shadow></value><value name="time"><shadow type="math_number" id="B9QV`At_kWI7?!y@g:.K"><field name="NUM">150</field></shadow></value><next><block type="esp32_onboard_music_pitch_with_time" id="J^qR9)7YCg?)$qBcgyw|"><value name="pitch"><shadow type="pins_tone_notes" id="XT@kR}wJ@y6VB_)!TNJx"><field name="PIN">659</field></shadow></value><value name="time"><shadow type="math_number" id="b`CH16Le|V!}6M^@ZAQ;"><field name="NUM">150</field></shadow></value><next><block type="controls_whileUntil" id="U};S2}RdC2um|_A,-(!{"><field name="MODE">WHILE</field><value name="BOOL"><shadow type="logic_boolean" id="#dWZkQBGY}TzVkg==s9r"><field name="BOOL">TRUE</field></shadow></value><statement name="DO"><block type="controls_if" id=")Zi(S,uU2q7SSYzVvl9C"><mutation elseif="1"></mutation><value name="IF0"><block type="sensor_mixgo_button_was_pressed" id="HUp9WD{$pP87S6]?Pct;"><value name="btn"><shadow type="pins_button" id="Kk*.,sS,!bbiRAnSZX90"><field name="PIN">A1key</field></shadow></value></block></value><statement name="DO0"><block type="analog_ble_keyboard_input" id="gXV=t/#tjCO0plT8fOT3"><field name="release">True</field><value name="special"><block type="special_key" id="Wk594}n]]ax|GwA$895."><field name="op">0x00</field></block></value><value name="general"><block type="general_key" id="B64|/5M3$R|vb5qPH_rh"><field name="op">0x52</field></block></value><next><block type="system_print" id="#hu?4Oktr1oe*lpuNMI4"><value name="VAR"><shadow type="text" id="bX$C3t[dK74D=Pd.v9oA"><field name="TEXT">Mixly</field></shadow></value></block></next></block></statement><value name="IF1"><block type="sensor_mixgo_button_was_pressed" id="o?gE2*xN-E)*1Q/d-#cm"><value name="btn"><shadow type="pins_button" id=",z{R3a?iJJT~8{asKk8("><field name="PIN">A3key</field></shadow></value></block></value><statement name="DO1"><block type="analog_ble_keyboard_input" id="*ZkPn^~f21@;Y(xA1PJ:"><field name="release">True</field><value name="special"><block type="special_key" id="Um.|*v1)OR57][w*j10d"><field name="op">0x00</field></block></value><value name="general"><block type="general_key" id="?~Py=~jz.zI!=H]IUVAx"><field name="op">0x51</field></block></value></block></statement><next><block type="controls_delay_new" id="3XNDj_Z=QFR$D6+wL0@:"><field name="Time">ms</field><value name="DELAY_TIME"><shadow type="math_number" id="LbVN^u/e`oaxP4(z+j~O"><field name="NUM">10</field></shadow></value></block></next></block></statement></block></next></block></next></block></next></block></next></block></xml><config>{}</config><code>ZnJvbSBibGVfaGlkX2tleWJvYXJkIGltcG9ydCBLZXlib2FyZApmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfbWF0cml4CmZyb20gbWl4Z29fbWluaSBpbXBvcnQgb25ib2FyZF9tdXNpYwppbXBvcnQgbWl4Z29fbWluaQppbXBvcnQgbWFjaGluZQppbXBvcnQgdGltZQoKCmJsZV9rZXlib2FyZD1LZXlib2FyZCgnYmxlX2tleWJvYXJkJykKd2hpbGUgVHJ1ZToKICAgIG9uYm9hcmRfbWF0cml4LnNjcm9sbCgnd2FpdHRpbmcnKQogICAgaWYgKGJsZV9rZXlib2FyZC5pc19jb25uZWN0ZWQoKSk6CiAgICAgICAgYnJlYWsKb25ib2FyZF9tdXNpYy5waXRjaF90aW1lKDc4NCwgMTUwKQpvbmJvYXJkX211c2ljLnBpdGNoX3RpbWUoNjU5LCAxNTApCndoaWxlIFRydWU6CiAgICBpZiBtaXhnb19taW5pLkExa2V5Lndhc19wcmVzc2VkKCk6CiAgICAgICAgYmxlX2tleWJvYXJkLm5vdGlmeV9oaWQoMHgwMCwweDUyLFRydWUpCiAgICAgICAgcHJpbnQoJ01peGx5JykKICAgIGVsaWYgbWl4Z29fbWluaS5BM2tleS53YXNfcHJlc3NlZCgpOgogICAgICAgIGJsZV9rZXlib2FyZC5ub3RpZnlfaGlkKDB4MDAsMHg1MSxUcnVlKQogICAgdGltZS5zbGVlcF9tcygxMCkK</code>

View File

@@ -216,6 +216,10 @@
"__file__": true,
"__name__": "23-2-蓝牙键鼠-无线键盘.mix"
},
"23-2-蓝牙键鼠-翻页笔.mix": {
"__file__": true,
"__name__": "23-2-蓝牙键鼠-翻页笔.mix"
},
"24-1-无线广播-通讯测试.mix": {
"__file__": true,
"__name__": "24-1-无线广播-通讯测试.mix"

View File

@@ -217,6 +217,7 @@
}
.blocklyMenu > .blocklyMenuItem {
font-family: Lato, system-ui, -apple-system, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
margin: 0px 5px;
border-radius: 5px;
box-sizing: content-box;

View File

@@ -83,6 +83,7 @@ class Serial {
newOption.setAttribute('disabled', true);
$portSelector.append(newOption);
}
$portSelector.select2('close');
$portSelector.trigger('change');
let footerStatus = ports.length ? 'inline-flex' : 'none';
$('#mixly-footer-port-div').css('display', footerStatus);

View File

@@ -279,7 +279,7 @@ BU.burnWithEsptool = async (binFile, erase) => {
});
let chip = await esploader.main();
} catch (error) {
console.log(error);
Debug.error(error);
statusBarTerminal.addValue(`\n${error.toString()}\n`);
await transport.disconnect();
return;
@@ -330,7 +330,7 @@ BU.burnWithEsptool = async (binFile, erase) => {
await transport.disconnect();
} catch (error) {
layer.close(index);
console.log(error);
Debug.error(error);
}
});
try {
@@ -341,7 +341,7 @@ BU.burnWithEsptool = async (binFile, erase) => {
layer.msg(Msg.Lang['shell.burnSucc'], { time: 1000 });
statusBarTerminal.addValue(`==${Msg.Lang['shell.burnSucc']}==\n`);
} catch (error) {
console.log(error);
Debug.error(error);
statusBarTerminal.addValue(`==${Msg.Lang['shell.burnFailed']}==\n`);
} finally {
layer.close(index);
@@ -396,7 +396,7 @@ BU.burnWithAdafruitEsptool = async (binFile, erase) => {
await esploader.initialize();
espStub = await esploader.runStub();
} catch (error) {
console.log(error);
Debug.error(error);
statusBarTerminal.addValue(`\n${error.toString()}\n`);
await port.close();
return;
@@ -456,7 +456,7 @@ BU.burnWithAdafruitEsptool = async (binFile, erase) => {
layer.msg(Msg.Lang['shell.burnSucc'], { time: 1000 });
statusBarTerminal.addValue(`==${Msg.Lang['shell.burnSucc']}==\n`);
} catch (error) {
console.log(error);
Debug.error(error);
statusBarTerminal.addValue(`==${Msg.Lang['shell.burnFailed']}==\n`);
} finally {
layer.close(index);
@@ -724,7 +724,7 @@ BU.uploadWithAmpy = (portName) => {
} catch (error) {
ampy.dispose();
layer.close(index);
console.error(error);
Debug.error(error);
statusBarTerminal.addValue(`${error}\n`);
statusBarTerminal.addValue(`==${Msg.Lang['shell.uploadFailed']}==\n`);
}
@@ -794,7 +794,7 @@ BU.uploadWithEsptool = async (endType, obj, layerType) => {
Serial.reset(portName, 'upload');
mainStatusBarTabs.changeTo(portName);
} catch (error) {
console.log(error);
Debug.error(error);
layer.close(layerType);
statusBarTerminal.addValue(`==${Msg.Lang['shell.uploadFailed']}==\n`);
} finally {