From 618bf4370833547f2a495cec6bfd6a582f66e6e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=AB=8B=E5=B8=AE?= <3294713004@qq.com> Date: Wed, 26 Mar 2025 21:12:57 +0800 Subject: [PATCH] =?UTF-8?q?feat(boards):=20=E8=B0=83=E6=95=B4micropython?= =?UTF-8?q?=E4=B8=8B=20`=E5=88=9B=E5=BB=BA=E5=9B=BE=E5=83=8F`=20=E5=9B=BE?= =?UTF-8?q?=E5=BD=A2=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../micropython/blocks/display_onboard.js | 72 +++++++++++++++ .../micropython/generators/display_onboard.js | 88 +++++++++++++++++++ .../micropython_educore/template.xml | 5 +- .../micropython_esp32/template.xml | 7 +- .../micropython_esp32c2/template.xml | 5 +- .../micropython_esp32c3/template.xml | 7 +- .../micropython_esp32s2/template.xml | 5 +- .../micropython_esp32s3/template.xml | 3 +- .../micropython_robot/template.xml | 2 +- 9 files changed, 174 insertions(+), 20 deletions(-) diff --git a/boards/default_src/micropython/blocks/display_onboard.js b/boards/default_src/micropython/blocks/display_onboard.js index b6f0ec79..f5c5316b 100644 --- a/boards/default_src/micropython/blocks/display_onboard.js +++ b/boards/default_src/micropython/blocks/display_onboard.js @@ -158,6 +158,24 @@ export const display_image_create = { } }; +export const display_bitmap_create = { + init: function () { + this.appendDummyInput('') + .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_CREATE_IMAGE) + this.appendDummyInput('') + .setAlign(Blockly.inputs.Align.CENTRE) + .appendField(new Blockly.FieldBitmap(display_bitmap_create.BITMAP, null, { + filledColor: '#000', + emptyColor: '#5ba5a5', + bgColor: '#e5e7f1' + }), 'BITMAP'); + this.setOutput(true); + this.setColour(DISPLAY_ONBOARD_HUE); + this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_Create_image1); + }, + BITMAP: Array.from({ length: 12 }, () => new Array(32).fill(0)) +}; + export const display_image_builtins = { init: function () { this.jsonInit({ @@ -373,6 +391,24 @@ export const mixgome_display_image_create = { } }; +export const mixgome_display_bitmap_create = { + init: function () { + this.appendDummyInput('') + .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_CREATE_IMAGE) + this.appendDummyInput('') + .setAlign(Blockly.inputs.Align.CENTRE) + .appendField(new Blockly.FieldBitmap(mixgome_display_bitmap_create.BITMAP, null, { + filledColor: '#000', + emptyColor: '#5ba5a5', + bgColor: '#e5e7f1' + }), 'BITMAP'); + this.setOutput(true); + this.setColour(DISPLAY_ONBOARD_HUE); + this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_Create_image1); + }, + BITMAP: Array.from({ length: 5 }, () => new Array(8).fill(0)) +}; + export const mixgomini_display_image_create = { init: function () { this.appendDummyInput('') @@ -392,6 +428,24 @@ export const mixgomini_display_image_create = { } }; +export const mixgomini_display_bitmap_create = { + init: function () { + this.appendDummyInput('') + .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_CREATE_IMAGE) + this.appendDummyInput('') + .setAlign(Blockly.inputs.Align.CENTRE) + .appendField(new Blockly.FieldBitmap(mixgomini_display_bitmap_create.BITMAP, null, { + filledColor: '#000', + emptyColor: '#5ba5a5', + bgColor: '#e5e7f1' + }), 'BITMAP'); + this.setOutput(true); + this.setColour(DISPLAY_ONBOARD_HUE); + this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_Create_image1); + }, + BITMAP: Array.from({ length: 8 }, () => new Array(12).fill(0)) +}; + export const mixgo_display_image_create_new = { init: function () { this.appendDummyInput('') @@ -411,6 +465,24 @@ export const mixgo_display_image_create_new = { } }; +export const mixgo_display_bitmap_create = { + init: function () { + this.appendDummyInput('') + .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_CREATE_IMAGE) + this.appendDummyInput('') + .setAlign(Blockly.inputs.Align.CENTRE) + .appendField(new Blockly.FieldBitmap(mixgo_display_bitmap_create.BITMAP, null, { + filledColor: '#000', + emptyColor: '#5ba5a5', + bgColor: '#e5e7f1' + }), 'BITMAP'); + this.setOutput(true); + this.setColour(DISPLAY_ONBOARD_HUE); + this.setTooltip(Blockly.Msg.MIXLY_MICROBIT_Create_image1); + }, + BITMAP: Array.from({ length: 8 }, () => new Array(16).fill(0)) +}; + export const mixgome_display_font = { init: function () { this.setColour(DISPLAY_ONBOARD_HUE); diff --git a/boards/default_src/micropython/generators/display_onboard.js b/boards/default_src/micropython/generators/display_onboard.js index 529b04cf..21d0dcf2 100644 --- a/boards/default_src/micropython/generators/display_onboard.js +++ b/boards/default_src/micropython/generators/display_onboard.js @@ -222,6 +222,29 @@ export const display_image_create = function (block, generator) { return [code, generator.ORDER_ATOMIC]; } +export const display_bitmap_create = function (block, generator) { + const BITMAP = block.getFieldValue('BITMAP'); + const data = []; + for (let i = 0; i < 12; i++) { + for (let j = 0; j < 4; j++) { + let temp = 0; + let str = ''; + for (let k = 0; k < 8; k++) { + if (!BITMAP[i][j * 8 + k]) { + continue; + } + temp |= BITMAP[i][j * 8 + k] << k; + } + str = temp.toString(16); + if (str.length == 1) { + str = '0' + str; + } + data.push('0x' + str); + } + } + return [`[${data.join(',')}]`, generator.ORDER_ATOMIC]; +} + export const display_clear = function (block, generator) { var version = Boards.getSelectedBoardKey().split(':')[2]; if (version == 'mpython') { @@ -382,6 +405,27 @@ export const mixgome_display_image_create = function (block, generator) { return [code, generator.ORDER_ATOMIC]; } +export const mixgome_display_bitmap_create = function (block, generator) { + const BITMAP = block.getFieldValue('BITMAP'); + const data = []; + for (let i = 0; i < 5; i++) { + let temp = 0; + let str = ''; + for (let k = 0; k < 8; k++) { + if (!BITMAP[i][k]) { + continue; + } + temp |= BITMAP[i][k] << k; + } + str = temp.toString(16); + if (str.length == 1) { + str = '0' + str; + } + data.push('\\x' + str); + } + return [`bytearray(b'${data.join('')}')`, generator.ORDER_ATOMIC]; +} + export const mixgomini_display_image_create = function (block, generator) { var blinkColor = '#ff0000'; var code = ''; @@ -400,6 +444,27 @@ export const mixgomini_display_image_create = function (block, generator) { return [code, generator.ORDER_ATOMIC]; } +export const mixgomini_display_bitmap_create = function (block, generator) { + const BITMAP = block.getFieldValue('BITMAP'); + const data = []; + for (let i = 0; i < 12; i++) { + let temp = 0; + let str = ''; + for (let k = 0; k < 8; k++) { + if (!BITMAP[k][i]) { + continue; + } + temp |= BITMAP[k][i] << k; + } + str = temp.toString(16); + if (str.length == 1) { + str = '0' + str; + } + data.push('\\x' + str); + } + return [`bytearray(b'${data.join('')}')`, generator.ORDER_ATOMIC]; +} + export const mixgome_display_font = function (a, generator) { var version = Boards.getSelectedBoardKey().split(':')[2]; generator.definitions_['import_' + version + '_onboard_matrix'] = "from " + version + " import onboard_matrix"; @@ -444,6 +509,29 @@ export const mixgo_display_image_create_new = function (block, generator) { return [code, generator.ORDER_ATOMIC]; } +export const mixgo_display_bitmap_create = function (block, generator) { + const BITMAP = block.getFieldValue('BITMAP'); + const data = []; + for (let i = 0; i < 8; i++) { + for (let j = 0; j < 2; j++) { + let temp = 0; + let str = ''; + for (let k = 0; k < 8; k++) { + if (!BITMAP[i][j * 8 + k]) { + continue; + } + temp |= BITMAP[i][j * 8 + k] << k; + } + str = temp.toString(16); + if (str.length == 1) { + str = '0' + str; + } + data.push('\\x' + str); + } + } + return [`bytearray(b'${data.join('')}')`, generator.ORDER_ATOMIC]; +} + //mpython export const mpython_pbm_image = function (_, generator) { const PIN_VALUE = this.getFieldValue('path'); diff --git a/boards/default_src/micropython_educore/template.xml b/boards/default_src/micropython_educore/template.xml index bc2bf6ce..d805df32 100644 --- a/boards/default_src/micropython_educore/template.xml +++ b/boards/default_src/micropython_educore/template.xml @@ -2001,7 +2001,7 @@ - + @@ -4986,8 +4986,7 @@ - - + diff --git a/boards/default_src/micropython_esp32/template.xml b/boards/default_src/micropython_esp32/template.xml index 560964bb..7f21cd6b 100644 --- a/boards/default_src/micropython_esp32/template.xml +++ b/boards/default_src/micropython_esp32/template.xml @@ -1777,8 +1777,8 @@ - - + + @@ -4813,8 +4813,7 @@ - - + diff --git a/boards/default_src/micropython_esp32c2/template.xml b/boards/default_src/micropython_esp32c2/template.xml index 8aaba470..de8ffb12 100644 --- a/boards/default_src/micropython_esp32c2/template.xml +++ b/boards/default_src/micropython_esp32c2/template.xml @@ -1825,7 +1825,7 @@ - + @@ -4671,8 +4671,7 @@ - - + diff --git a/boards/default_src/micropython_esp32c3/template.xml b/boards/default_src/micropython_esp32c3/template.xml index 6458df6f..ff702138 100644 --- a/boards/default_src/micropython_esp32c3/template.xml +++ b/boards/default_src/micropython_esp32c3/template.xml @@ -1769,8 +1769,8 @@ - - + + @@ -4621,8 +4621,7 @@ - - + diff --git a/boards/default_src/micropython_esp32s2/template.xml b/boards/default_src/micropython_esp32s2/template.xml index be548ef4..4d93b928 100644 --- a/boards/default_src/micropython_esp32s2/template.xml +++ b/boards/default_src/micropython_esp32s2/template.xml @@ -1714,7 +1714,7 @@ - + @@ -4347,8 +4347,7 @@ - - + diff --git a/boards/default_src/micropython_esp32s3/template.xml b/boards/default_src/micropython_esp32s3/template.xml index cf8c3e3f..e7acb3bf 100644 --- a/boards/default_src/micropython_esp32s3/template.xml +++ b/boards/default_src/micropython_esp32s3/template.xml @@ -5036,8 +5036,7 @@ - - + diff --git a/boards/default_src/micropython_robot/template.xml b/boards/default_src/micropython_robot/template.xml index ddf629b0..cdc688bf 100644 --- a/boards/default_src/micropython_robot/template.xml +++ b/boards/default_src/micropython_robot/template.xml @@ -3456,7 +3456,7 @@ - +