From 8b46698f50d60d091c0eca0c0a63ad128bce749a Mon Sep 17 00:00:00 2001 From: darzu Date: Mon, 22 Aug 2016 08:48:48 -0700 Subject: [PATCH] adds "parts" annotations... ...to libs/microbit and libs/microbit-bluetooth --- libs/microbit-bluetooth/bluetooth.cpp | 12 +++ libs/microbit-bluetooth/shims.d.ts | 36 ++++++--- libs/microbit/basic.cpp | 6 ++ libs/microbit/game.ts | 14 ++++ libs/microbit/images.cpp | 12 +++ libs/microbit/input.cpp | 12 ++- libs/microbit/led.cpp | 8 ++ libs/microbit/led.ts | 6 ++ libs/microbit/shims.d.ts | 108 +++++++++++++++++--------- 9 files changed, 165 insertions(+), 49 deletions(-) diff --git a/libs/microbit-bluetooth/bluetooth.cpp b/libs/microbit-bluetooth/bluetooth.cpp index 3d668351..da9b4eeb 100644 --- a/libs/microbit-bluetooth/bluetooth.cpp +++ b/libs/microbit-bluetooth/bluetooth.cpp @@ -32,6 +32,7 @@ namespace bluetooth { */ //% help=bluetooth/start-io-pin-service //% blockId=bluetooth_start_io_pin_service block="bluetooth io pin service" blockGap=8 + //% parts="bluetooth" void startIOPinService() { new MicroBitIOPinService(*uBit.ble, uBit.io); } @@ -41,6 +42,7 @@ namespace bluetooth { */ //% help=bluetooth/start-led-service //% blockId=bluetooth_start_led_service block="bluetooth led service" blockGap=8 + //% parts="bluetooth" void startLEDService() { new MicroBitLEDService(*uBit.ble, uBit.display); } @@ -50,6 +52,7 @@ namespace bluetooth { */ //% help=bluetooth/start-temperature-service //% blockId=bluetooth_start_temperature_service block="bluetooth temperature service" blockGap=8 + //% parts="bluetooth" void startTemperatureService() { new MicroBitTemperatureService(*uBit.ble, uBit.thermometer); } @@ -59,6 +62,7 @@ namespace bluetooth { */ //% help=bluetooth/start-magnetometer-service //% blockId=bluetooth_start_magnetometer_service block="bluetooth magnetometer service" blockGap=8 + //% parts="bluetooth" void startMagnetometerService() { new MicroBitMagnetometerService(*uBit.ble, uBit.compass); } @@ -68,6 +72,7 @@ namespace bluetooth { */ //% help=bluetooth/start-accelerometer-service //% blockId=bluetooth_start_accelerometer_service block="bluetooth accelerometer service" blockGap=8 + //% parts="bluetooth" void startAccelerometerService() { new MicroBitAccelerometerService(*uBit.ble, uBit.accelerometer); } @@ -77,6 +82,7 @@ namespace bluetooth { */ //% help=bluetooth/start-button-service //% blockId=bluetooth_start_button_service block="bluetooth button service" blockGap=8 + //% parts="bluetooth" void startButtonService() { new MicroBitButtonService(*uBit.ble); } @@ -86,6 +92,7 @@ namespace bluetooth { */ //% help=bluetooth/start-uart-service //% blockId=bluetooth_start_uart_service block="bluetooth uart service" blockGap=8 + //% parts="bluetooth" void startUartService() { if (uart) return; // 61 octet buffer size is 3 x (MTU - 3) + 1 @@ -99,6 +106,7 @@ namespace bluetooth { */ //% help=bluetooth/uart-write //% blockId=bluetooth_uart_write block="bluetooth uart write %data" blockGap=8 + //% parts="bluetooth" void uartWrite(StringData *data) { startUartService(); uart->send(ManagedString(data)); @@ -109,6 +117,7 @@ namespace bluetooth { */ //% help=bluetooth/uart-read //% blockId=bluetooth_uart_read block="bluetooth uart read %del=bluetooth_uart_delimiter_conv" blockGap=8 + //% parts="bluetooth" StringData* uartRead(StringData *del) { startUartService(); return uart->readUntil(ManagedString(del)).leakData(); @@ -119,6 +128,7 @@ namespace bluetooth { */ //% blockId="bluetooth_uart_delimiter_conv" block="%del" //% weight=1 + //% parts="bluetooth" StringData* delimiters(Delimiters del) { ManagedString c("\n\n,$:.#"[max(0, min(6, (int)del))]); return c.leakData(); @@ -129,6 +139,7 @@ namespace bluetooth { */ //% help=bluetooth/on-bluetooth-connected weight=20 //% blockId=bluetooth_on_connected block="on bluetooth connected" blockGap=8 + //% parts="bluetooth" void onBluetoothConnected(Action body) { registerWithDal(MICROBIT_ID_BLE, MICROBIT_BLE_EVT_CONNECTED, body); } @@ -139,6 +150,7 @@ namespace bluetooth { */ //% help=bluetooth/on-bluetooth-disconnected weight=19 //% blockId=bluetooth_on_disconnected block="on bluetooth disconnected" + //% parts="bluetooth" void onBluetoothDisconnected(Action body) { registerWithDal(MICROBIT_ID_BLE, MICROBIT_BLE_EVT_DISCONNECTED, body); } diff --git a/libs/microbit-bluetooth/shims.d.ts b/libs/microbit-bluetooth/shims.d.ts index 2cbc3c0c..f76076f1 100644 --- a/libs/microbit-bluetooth/shims.d.ts +++ b/libs/microbit-bluetooth/shims.d.ts @@ -11,70 +11,80 @@ declare namespace bluetooth { * Starts the Bluetooth IO pin service. */ //% help=bluetooth/start-io-pin-service - //% blockId=bluetooth_start_io_pin_service block="bluetooth io pin service" blockGap=8 shim=bluetooth::startIOPinService + //% blockId=bluetooth_start_io_pin_service block="bluetooth io pin service" blockGap=8 + //% parts="bluetooth" shim=bluetooth::startIOPinService function startIOPinService(): void; /** * Starts the Bluetooth LED service */ //% help=bluetooth/start-led-service - //% blockId=bluetooth_start_led_service block="bluetooth led service" blockGap=8 shim=bluetooth::startLEDService + //% blockId=bluetooth_start_led_service block="bluetooth led service" blockGap=8 + //% parts="bluetooth" shim=bluetooth::startLEDService function startLEDService(): void; /** * Starts the Bluetooth temperature service */ //% help=bluetooth/start-temperature-service - //% blockId=bluetooth_start_temperature_service block="bluetooth temperature service" blockGap=8 shim=bluetooth::startTemperatureService + //% blockId=bluetooth_start_temperature_service block="bluetooth temperature service" blockGap=8 + //% parts="bluetooth" shim=bluetooth::startTemperatureService function startTemperatureService(): void; /** * Starts the Bluetooth magnetometer service */ //% help=bluetooth/start-magnetometer-service - //% blockId=bluetooth_start_magnetometer_service block="bluetooth magnetometer service" blockGap=8 shim=bluetooth::startMagnetometerService + //% blockId=bluetooth_start_magnetometer_service block="bluetooth magnetometer service" blockGap=8 + //% parts="bluetooth" shim=bluetooth::startMagnetometerService function startMagnetometerService(): void; /** * Starts the Bluetooth accelerometer service */ //% help=bluetooth/start-accelerometer-service - //% blockId=bluetooth_start_accelerometer_service block="bluetooth accelerometer service" blockGap=8 shim=bluetooth::startAccelerometerService + //% blockId=bluetooth_start_accelerometer_service block="bluetooth accelerometer service" blockGap=8 + //% parts="bluetooth" shim=bluetooth::startAccelerometerService function startAccelerometerService(): void; /** * Starts the Bluetooth button service */ //% help=bluetooth/start-button-service - //% blockId=bluetooth_start_button_service block="bluetooth button service" blockGap=8 shim=bluetooth::startButtonService + //% blockId=bluetooth_start_button_service block="bluetooth button service" blockGap=8 + //% parts="bluetooth" shim=bluetooth::startButtonService function startButtonService(): void; /** * Starts the Bluetooth UART service */ //% help=bluetooth/start-uart-service - //% blockId=bluetooth_start_uart_service block="bluetooth uart service" blockGap=8 shim=bluetooth::startUartService + //% blockId=bluetooth_start_uart_service block="bluetooth uart service" blockGap=8 + //% parts="bluetooth" shim=bluetooth::startUartService function startUartService(): void; /** * Writes to the Bluetooth UART service buffer. From there the data is transmitted over Bluetooth to a connected device. */ //% help=bluetooth/uart-write - //% blockId=bluetooth_uart_write block="bluetooth uart write %data" blockGap=8 shim=bluetooth::uartWrite + //% blockId=bluetooth_uart_write block="bluetooth uart write %data" blockGap=8 + //% parts="bluetooth" shim=bluetooth::uartWrite function uartWrite(data: string): void; /** * Reads from the Bluetooth UART service buffer, returning its contents when the specified delimiter character is encountered. */ //% help=bluetooth/uart-read - //% blockId=bluetooth_uart_read block="bluetooth uart read %del=bluetooth_uart_delimiter_conv" blockGap=8 shim=bluetooth::uartRead + //% blockId=bluetooth_uart_read block="bluetooth uart read %del=bluetooth_uart_delimiter_conv" blockGap=8 + //% parts="bluetooth" shim=bluetooth::uartRead function uartRead(del: string): string; /** * Returns the delimiter corresponding string */ //% blockId="bluetooth_uart_delimiter_conv" block="%del" - //% weight=1 shim=bluetooth::delimiters + //% weight=1 + //% parts="bluetooth" shim=bluetooth::delimiters function delimiters(del: Delimiters): string; /** @@ -82,7 +92,8 @@ declare namespace bluetooth { * @param body Code to run when a Bluetooth connection is established */ //% help=bluetooth/on-bluetooth-connected weight=20 - //% blockId=bluetooth_on_connected block="on bluetooth connected" blockGap=8 shim=bluetooth::onBluetoothConnected + //% blockId=bluetooth_on_connected block="on bluetooth connected" blockGap=8 + //% parts="bluetooth" shim=bluetooth::onBluetoothConnected function onBluetoothConnected(body: () => void): void; /** @@ -90,7 +101,8 @@ declare namespace bluetooth { * @param body Code to run when a Bluetooth connection is lost */ //% help=bluetooth/on-bluetooth-disconnected weight=19 - //% blockId=bluetooth_on_disconnected block="on bluetooth disconnected" shim=bluetooth::onBluetoothDisconnected + //% blockId=bluetooth_on_disconnected block="on bluetooth disconnected" + //% parts="bluetooth" shim=bluetooth::onBluetoothDisconnected function onBluetoothDisconnected(body: () => void): void; } diff --git a/libs/microbit/basic.cpp b/libs/microbit/basic.cpp index 3a890bdb..44c577ba 100644 --- a/libs/microbit/basic.cpp +++ b/libs/microbit/basic.cpp @@ -15,6 +15,7 @@ namespace basic { //% weight=96 //% blockId=device_show_number block="show|number %number" blockGap=8 icon="\uf1ec" //% async + //% parts="ledmatrix" void showNumber(int value, int interval = 150) { if (interval < 0) return; @@ -37,6 +38,7 @@ namespace basic { //% imageLiteral=1 async //% blockId=device_show_leds //% block="show leds" icon="\uf00a" + //% parts="ledmatrix" void showLeds(ImageLiteral leds, int interval = 400) { uBit.display.print(MicroBitImage(imageBytes(leds)), 0, 0, 0, interval); } @@ -51,6 +53,7 @@ namespace basic { //% block="show|string %text" icon="\uf031" //% async //% blockId=device_print_message + //% parts="ledmatrix" void showString(StringData *text, int interval = 150) { if (interval < 0) return; @@ -71,6 +74,7 @@ namespace basic { */ //% help=basic/clear-screen weight=79 //% blockId=device_clear_display block="clear screen" icon="\uf12d" + //% parts="ledmatrix" void clearScreen() { uBit.display.image.clear(); } @@ -81,6 +85,7 @@ namespace basic { * @param interval time in milliseconds between each redraw */ //% help=basic/show-animation imageLiteral=1 async + //% parts="ledmatrix" void showAnimation(ImageLiteral leds, int interval = 400) { uBit.display.animate(MicroBitImage(imageBytes(leds)), interval, 5, 0); } @@ -90,6 +95,7 @@ namespace basic { * @param leds pattern of LEDs to turn on/off */ //% help=basic/plot-leds weight=80 + //% parts="ledmatrix" void plotLeds(ImageLiteral leds) { MicroBitImage i(imageBytes(leds)); uBit.display.print(i, 0, 0, 0, 0); diff --git a/libs/microbit/game.ts b/libs/microbit/game.ts index 408316e6..95d310bf 100644 --- a/libs/microbit/game.ts +++ b/libs/microbit/game.ts @@ -41,6 +41,7 @@ namespace game { */ //% weight=60 //% blockId=game_create_sprite block="create sprite at|x: %x|y: %y" + //% parts="ledmatrix" export function createSprite(x: number, y: number): LedSprite { init(); let p = new LedSprite(x, y); @@ -64,6 +65,7 @@ namespace game { */ //% weight=10 help=game/add-score //% blockId=game_add_score block="change score by|%points" blockGap=8 + //% parts="ledmatrix" export function addScore(points: number): void { setScore(_score + points); control.inBackground(() => { @@ -82,6 +84,7 @@ namespace game { */ //% weight=9 help=game/start-countdown //% blockId=game_start_countdown block="start countdown|(ms) %duration" blockGap=8 + //% parts="ledmatrix" export function startCountdown(ms: number): void { if (checkStart()) { basic.showAnimation(`1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 @@ -104,6 +107,7 @@ namespace game { */ //% weight=8 help=game/game-over //% blockId=game_game_over block="game over" + //% parts="ledmatrix" export function gameOver(): void { if (!_isGameOver) { _isGameOver = true; @@ -194,6 +198,7 @@ namespace game { * @param life TODO */ //% weight=10 + //% parts="ledmatrix" export function removeLife(life: number): void { setLife(_life - life); control.inBackground(() => { @@ -210,6 +215,7 @@ namespace game { * Increments the level and display a message. */ //% weight=10 + //% parts="ledmatrix" export function levelUp(): void { _level = _level + 1; basic.showString("LEVEL:", 150); @@ -246,6 +252,7 @@ namespace game { * Displays the score on the screen. */ //% weight=60 + //% parts="ledmatrix" export function showScore(): void { basic.showString(" SCORE ", 100); basic.showNumber(_score, 150); @@ -303,6 +310,7 @@ namespace game { */ //% weight=50 //% blockId=game_move_sprite block="%sprite|move by %leds" blockGap=8 + //% parts="ledmatrix" public move(leds: number): void { if (this._dir == 0) { this._y = this._y - leds; @@ -336,6 +344,7 @@ namespace game { * @param x TODO * @param y TODO */ + //% parts="ledmatrix" public goTo(x: number, y: number): void { this._x = x; this._y = y; @@ -350,6 +359,7 @@ namespace game { */ //% weight=18 //% blockId=game_sprite_bounce block="%sprite|if on edge, bounce" + //% parts="ledmatrix" public ifOnEdgeBounce(): void { if (this._dir == 0 && this._y == 0) { this._dir = 180; @@ -484,6 +494,7 @@ namespace game { * @param this TODO * @param degrees TODO */ + //% parts="ledmatrix" public setDirection(degrees: number): void { this._dir = ((degrees / 45) % 8) * 45; if (this._dir <= -180) { @@ -596,6 +607,7 @@ namespace game { * @param this TODO * @param brightness TODO */ + //% parts="ledmatrix" public setBrightness(brightness: number): void { this._brightness = Math.clamp(0, 255, brightness); plot(); @@ -664,6 +676,7 @@ namespace game { } //% weight=-1 + //% parts="ledmatrix" public _plot(now: number) { let ps = this if (ps._brightness > 0) { @@ -701,6 +714,7 @@ namespace game { /** * Plots the current sprites on the screen */ + //% parts="ledmatrix" function plot(): void { if (game.isGameOver()) { return; diff --git a/libs/microbit/images.cpp b/libs/microbit/images.cpp index 7c3e3983..3ee992d8 100644 --- a/libs/microbit/images.cpp +++ b/libs/microbit/images.cpp @@ -10,6 +10,7 @@ namespace images { */ //% weight=75 help=images/create-image //% blockId=device_build_image block="create image" + //% parts="ledmatrix" Image createImage(ImageLiteral leds) { return MicroBitImage(imageBytes(leds)).clone().leakData(); } @@ -19,6 +20,7 @@ namespace images { */ //% weight=74 help=images/create-big-image //% blockId=device_build_big_image block="create big image" imageLiteral=2 + //% parts="ledmatrix" Image createBigImage(ImageLiteral leds) { return createImage(leds); } @@ -29,6 +31,7 @@ namespace ImageMethods { * Plots the image at a given column to the screen */ //% help=images/plot-image + //% parts="ledmatrix" void plotImage(Image i, int xOffset = 0) { uBit.display.print(MicroBitImage(i), -xOffset, 0, 0, 0); } @@ -39,6 +42,7 @@ namespace ImageMethods { */ //% help=images/show-image weight=80 blockNamespace=images //% blockId=device_show_image_offset block="show image %sprite|at offset %offset" blockGap=8 + //% parts="ledmatrix" void showImage(Image sprite, int xOffset) { uBit.display.print(MicroBitImage(sprite), -xOffset, 0, 0); } @@ -48,6 +52,7 @@ namespace ImageMethods { * @param xOffset column index to start displaying the image */ //% help=images/plot-frame weight=80 + //% parts="ledmatrix" void plotFrame(Image i, int xOffset) { // TODO showImage() used in original implementation plotImage(i, xOffset * 5); @@ -60,6 +65,7 @@ namespace ImageMethods { */ //% help=images/show-image weight=79 async blockNamespace=images //% blockId=device_scroll_image block="scroll image %sprite|with offset %frameoffset|and interval (ms) %delay" blockGap=8 + //% parts="ledmatrix" void scrollImage(Image id, int frameOffset, int interval) { MicroBitImage i(id); if (i.getWidth() <= 5) @@ -73,6 +79,7 @@ namespace ImageMethods { * Sets all pixels off. */ //% help=images/clear + //% parts="ledmatrix" void clear(Image i) { MicroBitImage(i).clear(); } @@ -81,6 +88,7 @@ namespace ImageMethods { * Sets a specific pixel brightness at a given position */ //% + //% parts="ledmatrix" void setPixelBrightness(Image i, int x, int y, int value) { MicroBitImage(i).setPixelValue(x, y, value); } @@ -90,6 +98,7 @@ namespace ImageMethods { * Gets the pixel brightness ([0..255]) at a given position */ //% + //% parts="ledmatrix" int pixelBrightness(Image i, int x, int y) { int pix = MicroBitImage(i).getPixelValue(x, y); if (pix < 0) return 0; @@ -120,6 +129,7 @@ namespace ImageMethods { * @param value TODO */ //% help=images/set-pixel + //% parts="ledmatrix" void setPixel(Image i, int x, int y, bool value) { setPixelBrightness(i, x, y, value ? 255 : 0); } @@ -130,6 +140,7 @@ namespace ImageMethods { * @param y TODO */ //% help=images/pixel + //% parts="ledmatrix" bool pixel(Image i, int x, int y) { return pixelBrightness(i, x, y) > 0; } @@ -140,6 +151,7 @@ namespace ImageMethods { * @param frame TODO */ //% weight=70 help=images/show-frame + //% parts="ledmatrix" void showFrame(Image i, int frame) { showImage(i, frame * 5); } diff --git a/libs/microbit/input.cpp b/libs/microbit/input.cpp index 8380c25d..3a9cc8c2 100644 --- a/libs/microbit/input.cpp +++ b/libs/microbit/input.cpp @@ -116,6 +116,7 @@ namespace input { */ //% help=input/on-button-pressed weight=85 blockGap=8 //% blockId=device_button_event block="on button|%NAME|pressed" icon="\uf192" + //% parts="buttonpair" void onButtonPressed(Button button, Action body) { registerWithDal((int)button, MICROBIT_BUTTON_EVT_CLICK, body); } @@ -126,6 +127,7 @@ namespace input { */ //% help=input/on-gesture weight=84 blockGap=8 //% blockId=device_gesture_event block="on |%NAME" icon="\uf135" + //% parts="accelerometer" void onGesture(Gesture gesture, Action body) { if ((int)gesture == MICROBIT_ACCELEROMETER_EVT_3G && uBit.accelerometer.getRange() < 3) uBit.accelerometer.setRange(4); @@ -134,7 +136,7 @@ namespace input { registerWithDal(MICROBIT_ID_GESTURE, (int)gesture, body); } - /** + /** * Do something when a pin is pressed. * @param name the pin that needs to be pressed * @param body the code to run when the pin is pressed @@ -173,6 +175,7 @@ namespace input { //% block="button|%NAME|is pressed" //% blockId=device_get_button2 //% icon="\uf192" blockGap=8 + //% parts="buttonpair" bool buttonIsPressed(Button button) { if (button == Button::A) return uBit.buttonA.isPressed(); @@ -201,6 +204,7 @@ namespace input { //% help=input/compass-heading //% weight=56 icon="\uf14e" //% blockId=device_heading block="compass heading (°)" blockGap=8 + //% parts="compass" int compassHeading() { return uBit.compass.heading(); } @@ -212,6 +216,7 @@ namespace input { //% weight=55 icon="\uf06d" //% help=input/temperature //% blockId=device_temperature block="temperature (°C)" blockGap=8 + //% parts="thermometer" int temperature() { return uBit.thermometer.getTemperature(); } @@ -229,6 +234,7 @@ namespace input { */ //% help=input/acceleration weight=54 icon="\uf135" //% blockId=device_acceleration block="acceleration (mg)|%NAME" blockGap=8 + //% parts="accelerometer" int acceleration(Dimension dimension) { switch (dimension) { case Dimension::X: return uBit.accelerometer.getX(); @@ -245,6 +251,7 @@ namespace input { */ //% help=input/light-level weight=53 //% blockId=device_get_light_level block="light level" blockGap=8 icon="\uf185" + //% parts="ledmatrix" int lightLevel() { return uBit.display.readLightLevel(); } @@ -255,6 +262,7 @@ namespace input { */ //% help=input/rotation weight=52 //% blockId=device_get_rotation block="rotation (°)|%NAME" blockGap=8 icon="\uf197" + //% parts="accelerometer" int rotation(Rotation kind) { switch (kind) { case Rotation::Pitch: return uBit.accelerometer.getPitch(); @@ -269,6 +277,7 @@ namespace input { */ //% help=input/magnetic-force weight=51 //% blockId=device_get_magnetic_force block="magnetic force (µT)|%NAME" blockGap=8 icon="\uf076" + //% parts="compass" int magneticForce(Dimension dimension) { if (!uBit.compass.isCalibrated()) uBit.compass.calibrate(); @@ -304,6 +313,7 @@ namespace input { //% help=input/set-accelerometer-range //% blockId=device_set_accelerometer_range block="set accelerometer|range %range" icon="\uf135" //% weight=5 + //% parts="accelerometer" void setAccelerometerRange(AcceleratorRange range) { uBit.accelerometer.setRange((int)range); } diff --git a/libs/microbit/led.cpp b/libs/microbit/led.cpp index dfb452fc..66e0a708 100644 --- a/libs/microbit/led.cpp +++ b/libs/microbit/led.cpp @@ -18,6 +18,7 @@ namespace led { */ //% help=led/plot weight=78 //% blockId=device_plot block="plot|x %x|y %y" icon="\uf205" blockGap=8 + //% parts="ledmatrix" void plot(int x, int y) { uBit.display.image.setPixelValue(x, y, 1); } @@ -29,6 +30,7 @@ namespace led { */ //% help=led/unplot weight=77 //% blockId=device_unplot block="unplot|x %x|y %y" icon="\uf204" blockGap=8 + //% parts="ledmatrix" void unplot(int x, int y) { uBit.display.image.setPixelValue(x, y, 0); } @@ -40,6 +42,7 @@ namespace led { */ //% help=led/point weight=76 //% blockId=device_point block="point|x %x|y %y" icon="\uf10c" + //% parts="ledmatrix" bool point(int x, int y) { int pix = uBit.display.image.getPixelValue(x, y); return pix > 0; @@ -50,6 +53,7 @@ namespace led { */ //% help=led/brightness weight=60 //% blockId=device_get_brightness block="brightness" icon="\uf042" blockGap=8 + //% parts="ledmatrix" int brightness() { return uBit.display.getBrightness(); } @@ -60,6 +64,7 @@ namespace led { */ //% help=led/set-brightness weight=59 //% blockId=device_set_brightness block="set brightness %value" icon="\uf042" + //% parts="ledmatrix" void setBrightness(int value) { uBit.display.setBrightness(value); } @@ -69,6 +74,7 @@ namespace led { */ //% weight=50 help=led/stop-animation //% blockId=device_stop_animation block="stop animation" icon="\uf04d" + //% parts="ledmatrix" void stopAnimation() { uBit.display.stopAnimation(); } @@ -78,6 +84,7 @@ namespace led { * @param mode TODO */ //% weight=1 help=led/set-display-mode + //% parts="ledmatrix" void setDisplayMode(DisplayMode_ mode) { uBit.display.setDisplayMode((DisplayMode)mode); } @@ -86,6 +93,7 @@ namespace led { * Takes a screenshot of the LED screen and returns an image. */ //% help=led/screenshot + //% parts="ledmatrix" Image screenshot() { return uBit.display.screenShot().leakData(); /* diff --git a/libs/microbit/led.ts b/libs/microbit/led.ts index d4641b01..b7621efb 100644 --- a/libs/microbit/led.ts +++ b/libs/microbit/led.ts @@ -17,6 +17,7 @@ */ //% help=led/plot-bar-graph weight=20 //% blockId=device_plot_bar_graph block="plot bar graph of %value |up to %high" icon="\uf080" blockExternalInputs=true + //% parts="ledmatrix" export function plotBarGraph(value: number, high: number): void { let now = input.runningTime(); serial.writeString(value.toString() + "\r\n"); @@ -53,6 +54,7 @@ */ //% help=led/toggle weight=77 //% blockId=device_led_toggle block="toggle|x %x|y %y" icon="\uf204" blockGap=8 + //% parts="ledmatrix" export function toggle(x: number, y: number): void { if (led.point(x, y)) { led.unplot(x, y); @@ -65,6 +67,7 @@ * Turns all LEDS on */ //% help=led/plot-all + //% parts="ledmatrix" export function plotAll(): void { for (let i = 0; i < 5; i++) { for (let j = 0; j < 5; j++) { @@ -77,6 +80,7 @@ * Inverts the current LED display */ //% help=led/toggle-all + //% parts="ledmatrix" export function toggleAll(): void { for (let i = 0; i < 5; i++) { for (let j = 0; j < 5; j++) { @@ -90,6 +94,7 @@ * @param ms TODO */ //% help=led/fade-in + //% parts="ledmatrix" export function fadeIn(ms: number = 700): void { if (ms < 20) { led.setBrightness(255); @@ -112,6 +117,7 @@ * @param ms TODO */ //% help=led/fade-out + //% parts="ledmatrix" export function fadeOut(ms: number = 700): void { if (ms < 20) { led.setBrightness(0); diff --git a/libs/microbit/shims.d.ts b/libs/microbit/shims.d.ts index a2b71262..68751482 100644 --- a/libs/microbit/shims.d.ts +++ b/libs/microbit/shims.d.ts @@ -11,14 +11,16 @@ declare namespace images { * Creates an image that fits on the LED screen. */ //% weight=75 help=images/create-image - //% blockId=device_build_image block="create image" imageLiteral=1 shim=images::createImage + //% blockId=device_build_image block="create image" + //% parts="ledmatrix" imageLiteral=1 shim=images::createImage function createImage(leds: string): Image; /** * Creates an image with 2 frames. */ //% weight=74 help=images/create-big-image - //% blockId=device_build_big_image block="create big image" imageLiteral=2 shim=images::createBigImage + //% blockId=device_build_big_image block="create big image" imageLiteral=2 + //% parts="ledmatrix" shim=images::createBigImage function createBigImage(leds: string): Image; } @@ -27,7 +29,8 @@ declare interface Image { /** * Plots the image at a given column to the screen */ - //% help=images/plot-image xOffset.defl=0 shim=ImageMethods::plotImage + //% help=images/plot-image + //% parts="ledmatrix" xOffset.defl=0 shim=ImageMethods::plotImage plotImage(xOffset?: number): void; /** @@ -35,14 +38,16 @@ declare interface Image { * @param xOffset column index to start displaying the image */ //% help=images/show-image weight=80 blockNamespace=images - //% blockId=device_show_image_offset block="show image %sprite|at offset %offset" blockGap=8 shim=ImageMethods::showImage + //% blockId=device_show_image_offset block="show image %sprite|at offset %offset" blockGap=8 + //% parts="ledmatrix" shim=ImageMethods::showImage showImage(xOffset: number): void; /** * Draws the ``index``-th frame of the image on the screen. * @param xOffset column index to start displaying the image */ - //% help=images/plot-frame weight=80 shim=ImageMethods::plotFrame + //% help=images/plot-frame weight=80 + //% parts="ledmatrix" shim=ImageMethods::plotFrame plotFrame(xOffset: number): void; /** @@ -51,25 +56,29 @@ declare interface Image { * @param interval time between each animation step in milli seconds, eg: 200 */ //% help=images/show-image weight=79 async blockNamespace=images - //% blockId=device_scroll_image block="scroll image %sprite|with offset %frameoffset|and interval (ms) %delay" blockGap=8 shim=ImageMethods::scrollImage + //% blockId=device_scroll_image block="scroll image %sprite|with offset %frameoffset|and interval (ms) %delay" blockGap=8 + //% parts="ledmatrix" shim=ImageMethods::scrollImage scrollImage(frameOffset: number, interval: number): void; /** * Sets all pixels off. */ - //% help=images/clear shim=ImageMethods::clear + //% help=images/clear + //% parts="ledmatrix" shim=ImageMethods::clear clear(): void; /** * Sets a specific pixel brightness at a given position */ - //% shim=ImageMethods::setPixelBrightness + //% + //% parts="ledmatrix" shim=ImageMethods::setPixelBrightness setPixelBrightness(x: number, y: number, value: number): void; /** * Gets the pixel brightness ([0..255]) at a given position */ - //% shim=ImageMethods::pixelBrightness + //% + //% parts="ledmatrix" shim=ImageMethods::pixelBrightness pixelBrightness(x: number, y: number): number; /** @@ -90,7 +99,8 @@ declare interface Image { * @param y TODO * @param value TODO */ - //% help=images/set-pixel shim=ImageMethods::setPixel + //% help=images/set-pixel + //% parts="ledmatrix" shim=ImageMethods::setPixel setPixel(x: number, y: number, value: boolean): void; /** @@ -98,14 +108,16 @@ declare interface Image { * @param x TODO * @param y TODO */ - //% help=images/pixel shim=ImageMethods::pixel + //% help=images/pixel + //% parts="ledmatrix" shim=ImageMethods::pixel pixel(x: number, y: number): boolean; /** * Shows a particular frame of the image strip. * @param frame TODO */ - //% weight=70 help=images/show-frame shim=ImageMethods::showFrame + //% weight=70 help=images/show-frame + //% parts="ledmatrix" shim=ImageMethods::showFrame showFrame(frame: number): void; } @@ -123,7 +135,8 @@ declare namespace basic { //% help=basic/show-number //% weight=96 //% blockId=device_show_number block="show|number %number" blockGap=8 icon="\uf1ec" - //% async interval.defl=150 shim=basic::showNumber + //% async + //% parts="ledmatrix" interval.defl=150 shim=basic::showNumber function showNumber(value: number, interval?: number): void; /** @@ -135,7 +148,8 @@ declare namespace basic { //% weight=95 blockGap=8 //% imageLiteral=1 async //% blockId=device_show_leds - //% block="show leds" icon="\uf00a" interval.defl=400 shim=basic::showLeds + //% block="show leds" icon="\uf00a" + //% parts="ledmatrix" interval.defl=400 shim=basic::showLeds function showLeds(leds: string, interval?: number): void; /** @@ -147,14 +161,16 @@ declare namespace basic { //% weight=87 blockGap=8 //% block="show|string %text" icon="\uf031" //% async - //% blockId=device_print_message interval.defl=150 shim=basic::showString + //% blockId=device_print_message + //% parts="ledmatrix" interval.defl=150 shim=basic::showString function showString(text: string, interval?: number): void; /** * Turn off all LEDs */ //% help=basic/clear-screen weight=79 - //% blockId=device_clear_display block="clear screen" icon="\uf12d" shim=basic::clearScreen + //% blockId=device_clear_display block="clear screen" icon="\uf12d" + //% parts="ledmatrix" shim=basic::clearScreen function clearScreen(): void; /** @@ -162,14 +178,16 @@ declare namespace basic { * @param leds pattern of LEDs to turn on/off * @param interval time in milliseconds between each redraw */ - //% help=basic/show-animation imageLiteral=1 async interval.defl=400 shim=basic::showAnimation + //% help=basic/show-animation imageLiteral=1 async + //% parts="ledmatrix" interval.defl=400 shim=basic::showAnimation function showAnimation(leds: string, interval?: number): void; /** * Draws an image on the LED screen. * @param leds pattern of LEDs to turn on/off */ - //% help=basic/plot-leds weight=80 imageLiteral=1 shim=basic::plotLeds + //% help=basic/plot-leds weight=80 + //% parts="ledmatrix" imageLiteral=1 shim=basic::plotLeds function plotLeds(leds: string): void; /** @@ -201,7 +219,8 @@ declare namespace input { * @param body TODO */ //% help=input/on-button-pressed weight=85 blockGap=8 - //% blockId=device_button_event block="on button|%NAME|pressed" icon="\uf192" shim=input::onButtonPressed + //% blockId=device_button_event block="on button|%NAME|pressed" icon="\uf192" + //% parts="buttonpair" shim=input::onButtonPressed function onButtonPressed(button: Button, body: () => void): void; /** @@ -209,7 +228,8 @@ declare namespace input { * @param body TODO */ //% help=input/on-gesture weight=84 blockGap=8 - //% blockId=device_gesture_event block="on |%NAME" icon="\uf135" shim=input::onGesture + //% blockId=device_gesture_event block="on |%NAME" icon="\uf135" + //% parts="accelerometer" shim=input::onGesture function onGesture(gesture: Gesture, body: () => void): void; /** @@ -236,7 +256,8 @@ declare namespace input { //% help=input/button-is-pressed weight=57 //% block="button|%NAME|is pressed" //% blockId=device_get_button2 - //% icon="\uf192" blockGap=8 shim=input::buttonIsPressed + //% icon="\uf192" blockGap=8 + //% parts="buttonpair" shim=input::buttonIsPressed function buttonIsPressed(button: Button): boolean; /** @@ -253,7 +274,8 @@ declare namespace input { */ //% help=input/compass-heading //% weight=56 icon="\uf14e" - //% blockId=device_heading block="compass heading (°)" blockGap=8 shim=input::compassHeading + //% blockId=device_heading block="compass heading (°)" blockGap=8 + //% parts="compass" shim=input::compassHeading function compassHeading(): number; /** @@ -261,7 +283,8 @@ declare namespace input { */ //% weight=55 icon="\uf06d" //% help=input/temperature - //% blockId=device_temperature block="temperature (°C)" blockGap=8 shim=input::temperature + //% blockId=device_temperature block="temperature (°C)" blockGap=8 + //% parts="thermometer" shim=input::temperature function temperature(): number; /** @@ -269,14 +292,16 @@ declare namespace input { * @param dimension TODO */ //% help=input/acceleration weight=54 icon="\uf135" - //% blockId=device_acceleration block="acceleration (mg)|%NAME" blockGap=8 shim=input::acceleration + //% blockId=device_acceleration block="acceleration (mg)|%NAME" blockGap=8 + //% parts="accelerometer" shim=input::acceleration function acceleration(dimension: Dimension): number; /** * Reads the light level applied to the LED screen in a range from ``0`` (dark) to ``255`` bright. */ //% help=input/light-level weight=53 - //% blockId=device_get_light_level block="light level" blockGap=8 icon="\uf185" shim=input::lightLevel + //% blockId=device_get_light_level block="light level" blockGap=8 icon="\uf185" + //% parts="ledmatrix" shim=input::lightLevel function lightLevel(): number; /** @@ -284,7 +309,8 @@ declare namespace input { * @param kind TODO */ //% help=input/rotation weight=52 - //% blockId=device_get_rotation block="rotation (°)|%NAME" blockGap=8 icon="\uf197" shim=input::rotation + //% blockId=device_get_rotation block="rotation (°)|%NAME" blockGap=8 icon="\uf197" + //% parts="accelerometer" shim=input::rotation function rotation(kind: Rotation): number; /** @@ -292,7 +318,8 @@ declare namespace input { * @param dimension TODO */ //% help=input/magnetic-force weight=51 - //% blockId=device_get_magnetic_force block="magnetic force (µT)|%NAME" blockGap=8 icon="\uf076" shim=input::magneticForce + //% blockId=device_get_magnetic_force block="magnetic force (µT)|%NAME" blockGap=8 icon="\uf076" + //% parts="compass" shim=input::magneticForce function magneticForce(dimension: Dimension): number; /** @@ -314,7 +341,8 @@ declare namespace input { */ //% help=input/set-accelerometer-range //% blockId=device_set_accelerometer_range block="set accelerometer|range %range" icon="\uf135" - //% weight=5 shim=input::setAccelerometerRange + //% weight=5 + //% parts="accelerometer" shim=input::setAccelerometerRange function setAccelerometerRange(range: AcceleratorRange): void; } @@ -400,7 +428,8 @@ declare namespace led { * @param y TODO */ //% help=led/plot weight=78 - //% blockId=device_plot block="plot|x %x|y %y" icon="\uf205" blockGap=8 shim=led::plot + //% blockId=device_plot block="plot|x %x|y %y" icon="\uf205" blockGap=8 + //% parts="ledmatrix" shim=led::plot function plot(x: number, y: number): void; /** @@ -409,7 +438,8 @@ declare namespace led { * @param y TODO */ //% help=led/unplot weight=77 - //% blockId=device_unplot block="unplot|x %x|y %y" icon="\uf204" blockGap=8 shim=led::unplot + //% blockId=device_unplot block="unplot|x %x|y %y" icon="\uf204" blockGap=8 + //% parts="ledmatrix" shim=led::unplot function unplot(x: number, y: number): void; /** @@ -418,14 +448,16 @@ declare namespace led { * @param y TODO */ //% help=led/point weight=76 - //% blockId=device_point block="point|x %x|y %y" icon="\uf10c" shim=led::point + //% blockId=device_point block="point|x %x|y %y" icon="\uf10c" + //% parts="ledmatrix" shim=led::point function point(x: number, y: number): boolean; /** * Get the screen brightness from 0 (off) to 255 (full bright). */ //% help=led/brightness weight=60 - //% blockId=device_get_brightness block="brightness" icon="\uf042" blockGap=8 shim=led::brightness + //% blockId=device_get_brightness block="brightness" icon="\uf042" blockGap=8 + //% parts="ledmatrix" shim=led::brightness function brightness(): number; /** @@ -433,27 +465,31 @@ declare namespace led { * @param value the brightness value, eg:255, 127, 0 */ //% help=led/set-brightness weight=59 - //% blockId=device_set_brightness block="set brightness %value" icon="\uf042" shim=led::setBrightness + //% blockId=device_set_brightness block="set brightness %value" icon="\uf042" + //% parts="ledmatrix" shim=led::setBrightness function setBrightness(value: number): void; /** * Cancels the current animation and clears other pending animations. */ //% weight=50 help=led/stop-animation - //% blockId=device_stop_animation block="stop animation" icon="\uf04d" shim=led::stopAnimation + //% blockId=device_stop_animation block="stop animation" icon="\uf04d" + //% parts="ledmatrix" shim=led::stopAnimation function stopAnimation(): void; /** * Sets the display mode between black and white and greyscale for rendering LEDs. * @param mode TODO */ - //% weight=1 help=led/set-display-mode shim=led::setDisplayMode + //% weight=1 help=led/set-display-mode + //% parts="ledmatrix" shim=led::setDisplayMode function setDisplayMode(mode: DisplayMode): void; /** * Takes a screenshot of the LED screen and returns an image. */ - //% help=led/screenshot shim=led::screenshot + //% help=led/screenshot + //% parts="ledmatrix" shim=led::screenshot function screenshot(): Image; } declare namespace pins {