merged latest pxt
This commit is contained in:
		| @@ -2,5 +2,5 @@ | |||||||
|     (function(e,b){if(!b.__SV){var a,f,i,g;window.mixpanel=b;b._i=[];b.init=function(a,e,d){function f(b,h){var a=h.split(".");2==a.length&&(b=b[a[0]],h=a[1]);b[h]=function(){b.push([h].concat(Array.prototype.slice.call(arguments,0)))}}var c=b;"undefined"!==typeof d?c=b[d]=[]:d="mixpanel";c.people=c.people||[];c.toString=function(b){var a="mixpanel";"mixpanel"!==d&&(a+="."+d);b||(a+=" (stub)");return a};c.people.toString=function(){return c.toString(1)+".people (stub)"};i="disable time_event track track_pageview track_links track_forms register register_once alias unregister identify name_tag set_config reset people.set people.set_once people.increment people.append people.union people.track_charge people.clear_charges people.delete_user".split(" "); |     (function(e,b){if(!b.__SV){var a,f,i,g;window.mixpanel=b;b._i=[];b.init=function(a,e,d){function f(b,h){var a=h.split(".");2==a.length&&(b=b[a[0]],h=a[1]);b[h]=function(){b.push([h].concat(Array.prototype.slice.call(arguments,0)))}}var c=b;"undefined"!==typeof d?c=b[d]=[]:d="mixpanel";c.people=c.people||[];c.toString=function(b){var a="mixpanel";"mixpanel"!==d&&(a+="."+d);b||(a+=" (stub)");return a};c.people.toString=function(){return c.toString(1)+".people (stub)"};i="disable time_event track track_pageview track_links track_forms register register_once alias unregister identify name_tag set_config reset people.set people.set_once people.increment people.append people.union people.track_charge people.clear_charges people.delete_user".split(" "); | ||||||
|     for(g=0;g<i.length;g++)f(c,i[g]);b._i.push([a,e,d])};b.__SV=1.2;a=e.createElement("script");a.type="text/javascript";a.async=!0;a.src="undefined"!==typeof MIXPANEL_CUSTOM_LIB_URL?MIXPANEL_CUSTOM_LIB_URL:"file:"===e.location.protocol&&"//cdn.mxpnl.com/libs/mixpanel-2-latest.min.js".match(/^\/\//)?"https://cdn.mxpnl.com/libs/mixpanel-2-latest.min.js":"//cdn.mxpnl.com/libs/mixpanel-2-latest.min.js";f=e.getElementsByTagName("script")[0];f.parentNode.insertBefore(a,f)}})(document,window.mixpanel||[]); |     for(g=0;g<i.length;g++)f(c,i[g]);b._i.push([a,e,d])};b.__SV=1.2;a=e.createElement("script");a.type="text/javascript";a.async=!0;a.src="undefined"!==typeof MIXPANEL_CUSTOM_LIB_URL?MIXPANEL_CUSTOM_LIB_URL:"file:"===e.location.protocol&&"//cdn.mxpnl.com/libs/mixpanel-2-latest.min.js".match(/^\/\//)?"https://cdn.mxpnl.com/libs/mixpanel-2-latest.min.js":"//cdn.mxpnl.com/libs/mixpanel-2-latest.min.js";f=e.getElementsByTagName("script")[0];f.parentNode.insertBefore(a,f)}})(document,window.mixpanel||[]); | ||||||
|     mixpanel.init("762fef19c053a0ea4cec43d2fecae76e", { disable_persistence: true }); |     mixpanel.init("762fef19c053a0ea4cec43d2fecae76e", { disable_persistence: true }); | ||||||
|     if (pxtConfig) mixpanel.register({ target: pxtConfig.targetId, version: pxtConfig.targetVersion }); |     if (typeof pxtConfig !== "undefined") mixpanel.register({ target: pxtConfig.targetId, version: pxtConfig.targetVersion }); | ||||||
| </script> | </script> | ||||||
|   | |||||||
| @@ -2,5 +2,5 @@ | |||||||
|     (function(e,b){if(!b.__SV){var a,f,i,g;window.mixpanel=b;b._i=[];b.init=function(a,e,d){function f(b,h){var a=h.split(".");2==a.length&&(b=b[a[0]],h=a[1]);b[h]=function(){b.push([h].concat(Array.prototype.slice.call(arguments,0)))}}var c=b;"undefined"!==typeof d?c=b[d]=[]:d="mixpanel";c.people=c.people||[];c.toString=function(b){var a="mixpanel";"mixpanel"!==d&&(a+="."+d);b||(a+=" (stub)");return a};c.people.toString=function(){return c.toString(1)+".people (stub)"};i="disable time_event track track_pageview track_links track_forms register register_once alias unregister identify name_tag set_config reset people.set people.set_once people.increment people.append people.union people.track_charge people.clear_charges people.delete_user".split(" "); |     (function(e,b){if(!b.__SV){var a,f,i,g;window.mixpanel=b;b._i=[];b.init=function(a,e,d){function f(b,h){var a=h.split(".");2==a.length&&(b=b[a[0]],h=a[1]);b[h]=function(){b.push([h].concat(Array.prototype.slice.call(arguments,0)))}}var c=b;"undefined"!==typeof d?c=b[d]=[]:d="mixpanel";c.people=c.people||[];c.toString=function(b){var a="mixpanel";"mixpanel"!==d&&(a+="."+d);b||(a+=" (stub)");return a};c.people.toString=function(){return c.toString(1)+".people (stub)"};i="disable time_event track track_pageview track_links track_forms register register_once alias unregister identify name_tag set_config reset people.set people.set_once people.increment people.append people.union people.track_charge people.clear_charges people.delete_user".split(" "); | ||||||
|     for(g=0;g<i.length;g++)f(c,i[g]);b._i.push([a,e,d])};b.__SV=1.2;a=e.createElement("script");a.type="text/javascript";a.async=!0;a.src="undefined"!==typeof MIXPANEL_CUSTOM_LIB_URL?MIXPANEL_CUSTOM_LIB_URL:"file:"===e.location.protocol&&"//cdn.mxpnl.com/libs/mixpanel-2-latest.min.js".match(/^\/\//)?"https://cdn.mxpnl.com/libs/mixpanel-2-latest.min.js":"//cdn.mxpnl.com/libs/mixpanel-2-latest.min.js";f=e.getElementsByTagName("script")[0];f.parentNode.insertBefore(a,f)}})(document,window.mixpanel||[]); |     for(g=0;g<i.length;g++)f(c,i[g]);b._i.push([a,e,d])};b.__SV=1.2;a=e.createElement("script");a.type="text/javascript";a.async=!0;a.src="undefined"!==typeof MIXPANEL_CUSTOM_LIB_URL?MIXPANEL_CUSTOM_LIB_URL:"file:"===e.location.protocol&&"//cdn.mxpnl.com/libs/mixpanel-2-latest.min.js".match(/^\/\//)?"https://cdn.mxpnl.com/libs/mixpanel-2-latest.min.js":"//cdn.mxpnl.com/libs/mixpanel-2-latest.min.js";f=e.getElementsByTagName("script")[0];f.parentNode.insertBefore(a,f)}})(document,window.mixpanel||[]); | ||||||
|     mixpanel.init("762fef19c053a0ea4cec43d2fecae76e", { disable_persistence: true }); |     mixpanel.init("762fef19c053a0ea4cec43d2fecae76e", { disable_persistence: true }); | ||||||
|     if (pxtConfig) mixpanel.register({ target: pxtConfig.targetId, version: pxtConfig.targetVersion });     |     if (typeof pxtConfig !== "undefined") mixpanel.register({ target: pxtConfig.targetId, version: pxtConfig.targetVersion });     | ||||||
| </script> | </script> | ||||||
|   | |||||||
| @@ -10,6 +10,10 @@ input.onButtonPressed(Button.A, () => { | |||||||
| music.playTone(0, 0); | music.playTone(0, 0); | ||||||
| led.plot(0, 0); | led.plot(0, 0); | ||||||
| radio.sendNumber(0); | radio.sendNumber(0); | ||||||
|  | ``` | ||||||
|  | ## Advanced | ||||||
|  |  | ||||||
|  | ```namespaces | ||||||
| game.addScore(1); | game.addScore(1); | ||||||
| images.createImage(` | images.createImage(` | ||||||
| . . . . . | . . . . . | ||||||
| @@ -24,7 +28,8 @@ control.inBackground(() => { | |||||||
|      |      | ||||||
| }); | }); | ||||||
| ``` | ``` | ||||||
| ## Advanced |  | ||||||
|  | ## Bluetooth | ||||||
|    |    | ||||||
| ```namespaces | ```namespaces | ||||||
| devices.tellCameraTo(MesCameraEvent.TakePhoto); | devices.tellCameraTo(MesCameraEvent.TakePhoto); | ||||||
|   | |||||||
| @@ -110,6 +110,7 @@ enum EventBusValue { | |||||||
| }; | }; | ||||||
|  |  | ||||||
| //% weight=1 color="#333333" | //% weight=1 color="#333333" | ||||||
|  | //% advanced=true | ||||||
| namespace control { | namespace control { | ||||||
|     void fiberDone(void *a) |     void fiberDone(void *a) | ||||||
|     { |     { | ||||||
| @@ -131,7 +132,7 @@ namespace control { | |||||||
|      */ |      */ | ||||||
|     //% weight=30 async help=control/reset blockGap=8 |     //% weight=30 async help=control/reset blockGap=8 | ||||||
|     //% blockId="control_reset" block="reset" |     //% blockId="control_reset" block="reset" | ||||||
|     void reset() {  |     void reset() { | ||||||
|       microbit_reset(); |       microbit_reset(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -153,16 +154,16 @@ namespace control { | |||||||
|      */ |      */ | ||||||
|     //% weight=21 blockGap=12 blockId="control_raise_event" block="raise event|from source %src=control_event_source_id|with value %value=control_event_value_id" blockExternalInputs=1 |     //% weight=21 blockGap=12 blockId="control_raise_event" block="raise event|from source %src=control_event_source_id|with value %value=control_event_value_id" blockExternalInputs=1 | ||||||
|     //% mode.defl=CREATE_AND_FIRE |     //% mode.defl=CREATE_AND_FIRE | ||||||
|     void raiseEvent(int src, int value, EventCreationMode mode) {  |     void raiseEvent(int src, int value, EventCreationMode mode) { | ||||||
|         MicroBitEvent evt(src, value, (MicroBitEventLaunchMode)mode);  |         MicroBitEvent evt(src, value, (MicroBitEventLaunchMode)mode); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * Raises an event in the event bus. |      * Raises an event in the event bus. | ||||||
|      */ |      */ | ||||||
|     //% weight=20 blockGap=8 blockId="control_on_event" block="on event|from %src=control_event_source_id|with value %value=control_event_value_id"  |     //% weight=20 blockGap=8 blockId="control_on_event" block="on event|from %src=control_event_source_id|with value %value=control_event_value_id" | ||||||
|     //% blockExternalInputs=1 |     //% blockExternalInputs=1 | ||||||
|     void onEvent(int src, int value, Action handler) {  |     void onEvent(int src, int value, Action handler) { | ||||||
|         registerWithDal(src, value, handler); |         registerWithDal(src, value, handler); | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -174,7 +175,7 @@ namespace control { | |||||||
|     int eventValue() { |     int eventValue() { | ||||||
|         return pxt::lastEvent.value; |         return pxt::lastEvent.value; | ||||||
|     } |     } | ||||||
|      |  | ||||||
|     /** |     /** | ||||||
|     * Gets the timestamp of the last event executed on the bus |     * Gets the timestamp of the last event executed on the bus | ||||||
|     */ |     */ | ||||||
| @@ -183,15 +184,15 @@ namespace control { | |||||||
|     int eventTimestamp() { |     int eventTimestamp() { | ||||||
|         return pxt::lastEvent.timestamp; |         return pxt::lastEvent.timestamp; | ||||||
|     } |     } | ||||||
|      |  | ||||||
|     /** |     /** | ||||||
|      * Gets a friendly name for the device derived from the its serial number |      * Gets a friendly name for the device derived from the its serial number | ||||||
|      */ |      */ | ||||||
|     //% blockId="control_device_name" block="device name" weight=10 blockGap=8 |     //% blockId="control_device_name" block="device name" weight=10 blockGap=8 | ||||||
|     StringData* deviceName() { |     StringData* deviceName() { | ||||||
|         return ManagedString(microbit_friendly_name()).leakData();         |         return ManagedString(microbit_friendly_name()).leakData(); | ||||||
|     } |     } | ||||||
|      |  | ||||||
|     /** |     /** | ||||||
|     * Derive a unique, consistent serial number of this device from internal data. |     * Derive a unique, consistent serial number of this device from internal data. | ||||||
|     */ |     */ | ||||||
|   | |||||||
| @@ -2,6 +2,7 @@ | |||||||
| * Runtime and event utilities. | * Runtime and event utilities. | ||||||
| */ | */ | ||||||
| //% weight=1 color="#333333" | //% weight=1 color="#333333" | ||||||
|  | //% advanced=true | ||||||
| namespace control { | namespace control { | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|   | |||||||
| @@ -1,5 +1,5 @@ | |||||||
| enum Direction { | enum Direction { | ||||||
|     //% block=right     |     //% block=right | ||||||
|     Right, |     Right, | ||||||
|     //% block=left |     //% block=left | ||||||
|     Left |     Left | ||||||
| @@ -22,6 +22,7 @@ enum LedSpriteProperty { | |||||||
|  * A single-LED sprite game engine |  * A single-LED sprite game engine | ||||||
|  */ |  */ | ||||||
| //% color=#008272 weight=32 | //% color=#008272 weight=32 | ||||||
|  | //% advanced=true | ||||||
| namespace game { | namespace game { | ||||||
|     let _score: number = 0; |     let _score: number = 0; | ||||||
|     let _life: number = 3; |     let _life: number = 3; | ||||||
|   | |||||||
| @@ -4,6 +4,7 @@ | |||||||
| * Creation, manipulation and display of LED images. | * Creation, manipulation and display of LED images. | ||||||
| */ | */ | ||||||
| //% color=#5C2D91 weight=31 | //% color=#5C2D91 weight=31 | ||||||
|  | //% advanced=true | ||||||
| namespace images { | namespace images { | ||||||
|     /** |     /** | ||||||
|      * Creates an image that fits on the LED screen. |      * Creates an image that fits on the LED screen. | ||||||
| @@ -29,7 +30,7 @@ namespace images { | |||||||
| namespace ImageMethods { | namespace ImageMethods { | ||||||
|     /** |     /** | ||||||
|      * Plots the image at a given column to the screen |      * Plots the image at a given column to the screen | ||||||
|      */             |      */ | ||||||
|     //% help=images/plot-image |     //% help=images/plot-image | ||||||
|     //% parts="ledmatrix" |     //% parts="ledmatrix" | ||||||
|     void plotImage(Image i, int xOffset = 0) { |     void plotImage(Image i, int xOffset = 0) { | ||||||
| @@ -46,7 +47,7 @@ namespace ImageMethods { | |||||||
|     void showImage(Image sprite, int xOffset) { |     void showImage(Image sprite, int xOffset) { | ||||||
|       uBit.display.print(MicroBitImage(sprite), -xOffset, 0, 0); |       uBit.display.print(MicroBitImage(sprite), -xOffset, 0, 0); | ||||||
|     } |     } | ||||||
|      |  | ||||||
|     /** |     /** | ||||||
|      * Draws the ``index``-th frame of the image on the screen. |      * Draws the ``index``-th frame of the image on the screen. | ||||||
|      * @param xOffset column index to start displaying the image |      * @param xOffset column index to start displaying the image | ||||||
| @@ -57,7 +58,7 @@ namespace ImageMethods { | |||||||
|       // TODO showImage() used in original implementation |       // TODO showImage() used in original implementation | ||||||
|       plotImage(i, xOffset * 5); |       plotImage(i, xOffset * 5); | ||||||
|     } |     } | ||||||
|      |  | ||||||
|     /** |     /** | ||||||
|      * Scrolls an image . |      * Scrolls an image . | ||||||
|      * @param frameOffset x offset moved on each animation step, eg: 5, 1, -1 |      * @param frameOffset x offset moved on each animation step, eg: 5, 1, -1 | ||||||
|   | |||||||
| @@ -89,7 +89,7 @@ enum class Gesture { | |||||||
|      * Raised when the screen is pointing right |      * Raised when the screen is pointing right | ||||||
|      */ |      */ | ||||||
|     //% block="tilt right" |     //% block="tilt right" | ||||||
|     TiltRight = MICROBIT_ACCELEROMETER_EVT_TILT_RIGHT,     |     TiltRight = MICROBIT_ACCELEROMETER_EVT_TILT_RIGHT, | ||||||
|     /** |     /** | ||||||
|      * Raised when the board is falling! |      * Raised when the board is falling! | ||||||
|      */ |      */ | ||||||
| @@ -132,7 +132,7 @@ namespace input { | |||||||
|         if ((int)gesture == MICROBIT_ACCELEROMETER_EVT_3G && uBit.accelerometer.getRange() < 3) |         if ((int)gesture == MICROBIT_ACCELEROMETER_EVT_3G && uBit.accelerometer.getRange() < 3) | ||||||
|             uBit.accelerometer.setRange(4); |             uBit.accelerometer.setRange(4); | ||||||
|         else if ((int)gesture == MICROBIT_ACCELEROMETER_EVT_6G && uBit.accelerometer.getRange() < 6) |         else if ((int)gesture == MICROBIT_ACCELEROMETER_EVT_6G && uBit.accelerometer.getRange() < 6) | ||||||
|             uBit.accelerometer.setRange(8);             |             uBit.accelerometer.setRange(8); | ||||||
|         registerWithDal(MICROBIT_ID_GESTURE, (int)gesture, body); |         registerWithDal(MICROBIT_ID_GESTURE, (int)gesture, body); | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -159,6 +159,7 @@ namespace input { | |||||||
|      */ |      */ | ||||||
|     //% help=input/on-pin-released weight=6 blockGap=8 |     //% help=input/on-pin-released weight=6 blockGap=8 | ||||||
|     //% blockId=device_pin_released block="on pin %NAME|released" icon="\uf094" |     //% blockId=device_pin_released block="on pin %NAME|released" icon="\uf094" | ||||||
|  |     //% advanced=true | ||||||
|     void onPinReleased(TouchPin name, Action body) { |     void onPinReleased(TouchPin name, Action body) { | ||||||
|         auto pin = getPin((int)name); |         auto pin = getPin((int)name); | ||||||
|         if (!pin) return; |         if (!pin) return; | ||||||
| @@ -171,7 +172,7 @@ namespace input { | |||||||
|     /** |     /** | ||||||
|      * Get the button state (pressed or not) for ``A`` and ``B``. |      * Get the button state (pressed or not) for ``A`` and ``B``. | ||||||
|      */ |      */ | ||||||
|     //% help=input/button-is-pressed weight=57 |     //% help=input/button-is-pressed weight=60 | ||||||
|     //% block="button|%NAME|is pressed" |     //% block="button|%NAME|is pressed" | ||||||
|     //% blockId=device_get_button2 |     //% blockId=device_get_button2 | ||||||
|     //% icon="\uf192" blockGap=8 |     //% icon="\uf192" blockGap=8 | ||||||
| @@ -190,7 +191,7 @@ namespace input { | |||||||
|      * Get the pin state (pressed or not). Requires to hold the ground to close the circuit. |      * Get the pin state (pressed or not). Requires to hold the ground to close the circuit. | ||||||
|      * @param name pin used to detect the touch |      * @param name pin used to detect the touch | ||||||
|      */ |      */ | ||||||
|     //% help=input/pin-is-pressed weight=56 |     //% help=input/pin-is-pressed weight=58 | ||||||
|     //% blockId="device_pin_is_pressed" block="pin %NAME|is pressed" icon="\uf094" |     //% blockId="device_pin_is_pressed" block="pin %NAME|is pressed" icon="\uf094" | ||||||
|     //% blockGap=8 |     //% blockGap=8 | ||||||
|     bool pinIsPressed(TouchPin name) { |     bool pinIsPressed(TouchPin name) { | ||||||
| @@ -198,10 +199,44 @@ namespace input { | |||||||
|         return pin && pin->isTouched(); |         return pin && pin->isTouched(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     int getAccelerationStrength() { | ||||||
|  |         double x = uBit.accelerometer.getX(); | ||||||
|  |         double y = uBit.accelerometer.getY(); | ||||||
|  |         double z = uBit.accelerometer.getZ(); | ||||||
|  |         return (int)sqrt(x*x+y*y+z*z); | ||||||
|  |     }     | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * Get the acceleration value in milli-gravitys (when the board is laying flat with the screen up, x=0, y=0 and z=-1024) | ||||||
|  |      * @param dimension TODO | ||||||
|  |      */ | ||||||
|  |     //% help=input/acceleration weight=58 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(); | ||||||
|  |       case Dimension::Y: return uBit.accelerometer.getY(); | ||||||
|  |       case Dimension::Z: return uBit.accelerometer.getZ(); | ||||||
|  |       case Dimension::Strength: return getAccelerationStrength(); | ||||||
|  |       } | ||||||
|  |       return 0; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * Reads the light level applied to the LED screen in a range from ``0`` (dark) to ``255`` bright. | ||||||
|  |      */ | ||||||
|  |     //% help=input/light-level weight=57 | ||||||
|  |     //% blockId=device_get_light_level block="light level" blockGap=8 icon="\uf185" | ||||||
|  |     //% parts="ledmatrix" | ||||||
|  |     int lightLevel() { | ||||||
|  |         return uBit.display.readLightLevel(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * Get the current compass heading in degrees. |      * Get the current compass heading in degrees. | ||||||
|      */ |      */ | ||||||
|     //% help=input/compass-heading  |     //% help=input/compass-heading | ||||||
|     //% weight=56 icon="\uf14e" |     //% weight=56 icon="\uf14e" | ||||||
|     //% blockId=device_heading block="compass heading (°)" blockGap=8 |     //% blockId=device_heading block="compass heading (°)" blockGap=8 | ||||||
|     //% parts="compass" |     //% parts="compass" | ||||||
| @@ -221,54 +256,19 @@ namespace input { | |||||||
|         return uBit.thermometer.getTemperature(); |         return uBit.thermometer.getTemperature(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     int getAccelerationStrength() { |  | ||||||
|         double x = uBit.accelerometer.getX(); |  | ||||||
|         double y = uBit.accelerometer.getY(); |  | ||||||
|         double z = uBit.accelerometer.getZ(); |  | ||||||
|         return (int)sqrt(x*x+y*y+z*z); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     /** |  | ||||||
|      * Get the acceleration value in milli-gravitys (when the board is laying flat with the screen up, x=0, y=0 and z=-1024) |  | ||||||
|      * @param dimension TODO |  | ||||||
|      */ |  | ||||||
|     //% 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(); |  | ||||||
|       case Dimension::Y: return uBit.accelerometer.getY(); |  | ||||||
|       case Dimension::Z: return uBit.accelerometer.getZ(); |  | ||||||
|       case Dimension::Strength: return getAccelerationStrength(); |  | ||||||
|       } |  | ||||||
|       return 0; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|  |  | ||||||
|     /** |  | ||||||
|      * 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" |  | ||||||
|     //% parts="ledmatrix" |  | ||||||
|     int lightLevel() { |  | ||||||
|         return uBit.display.readLightLevel(); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * The pitch or roll of the device, rotation along the ``x-axis`` or ``y-axis``, in degrees. |      * The pitch or roll of the device, rotation along the ``x-axis`` or ``y-axis``, in degrees. | ||||||
|      * @param kind TODO |      * @param kind TODO | ||||||
|      */ |      */ | ||||||
|     //% help=input/rotation weight=52 |     //% help=input/rotation weight=52 | ||||||
|     //% blockId=device_get_rotation block="rotation (°)|%NAME" blockGap=8 icon="\uf197" |     //% blockId=device_get_rotation block="rotation (°)|%NAME" blockGap=8 icon="\uf197" | ||||||
|     //% parts="accelerometer" |     //% parts="accelerometer" advanced=true | ||||||
|     int rotation(Rotation kind) { |     int rotation(Rotation kind) { | ||||||
|       switch (kind) { |       switch (kind) { | ||||||
|       case Rotation::Pitch: return uBit.accelerometer.getPitch(); |       case Rotation::Pitch: return uBit.accelerometer.getPitch(); | ||||||
|       case Rotation::Roll: return uBit.accelerometer.getRoll(); |       case Rotation::Roll: return uBit.accelerometer.getRoll(); | ||||||
|       } |       } | ||||||
|       return 0;         |       return 0; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
| @@ -278,6 +278,7 @@ namespace input { | |||||||
|     //% help=input/magnetic-force weight=51 |     //% help=input/magnetic-force weight=51 | ||||||
|     //% blockId=device_get_magnetic_force block="magnetic force (µT)|%NAME" blockGap=8 icon="\uf076" |     //% blockId=device_get_magnetic_force block="magnetic force (µT)|%NAME" blockGap=8 icon="\uf076" | ||||||
|     //% parts="compass" |     //% parts="compass" | ||||||
|  |     //% advanced=true | ||||||
|     int magneticForce(Dimension dimension) { |     int magneticForce(Dimension dimension) { | ||||||
|       if (!uBit.compass.isCalibrated()) |       if (!uBit.compass.isCalibrated()) | ||||||
|         uBit.compass.calibrate(); |         uBit.compass.calibrate(); | ||||||
| @@ -296,6 +297,7 @@ namespace input { | |||||||
|      */ |      */ | ||||||
|     //% help=input/running-time weight=50 |     //% help=input/running-time weight=50 | ||||||
|     //% blockId=device_get_running_time block="running time (ms)" icon="\uf017" |     //% blockId=device_get_running_time block="running time (ms)" icon="\uf017" | ||||||
|  |     //% advanced=true | ||||||
|     int runningTime() { |     int runningTime() { | ||||||
|         return system_timer_current_time(); |         return system_timer_current_time(); | ||||||
|     } |     } | ||||||
| @@ -314,6 +316,7 @@ namespace input { | |||||||
|     //% blockId=device_set_accelerometer_range block="set accelerometer|range %range" icon="\uf135" |     //% blockId=device_set_accelerometer_range block="set accelerometer|range %range" icon="\uf135" | ||||||
|     //% weight=5 |     //% weight=5 | ||||||
|     //% parts="accelerometer" |     //% parts="accelerometer" | ||||||
|  |     //% advanced=true | ||||||
|     void setAccelerometerRange(AcceleratorRange range) { |     void setAccelerometerRange(AcceleratorRange range) { | ||||||
|         uBit.accelerometer.setRange((int)range); |         uBit.accelerometer.setRange((int)range); | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -19,7 +19,7 @@ namespace led { | |||||||
|     //% help=led/plot weight=78 |     //% help=led/plot weight=78 | ||||||
|     //% blockId=device_plot block="plot|x %x|y %y" icon="\uf205" blockGap=8 |     //% blockId=device_plot block="plot|x %x|y %y" icon="\uf205" blockGap=8 | ||||||
|     //% parts="ledmatrix" |     //% parts="ledmatrix" | ||||||
|     void plot(int x, int y) {  |     void plot(int x, int y) { | ||||||
|       uBit.display.image.setPixelValue(x, y, 1); |       uBit.display.image.setPixelValue(x, y, 1); | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -31,7 +31,7 @@ namespace led { | |||||||
|     //% help=led/unplot weight=77 |     //% help=led/unplot weight=77 | ||||||
|     //% blockId=device_unplot block="unplot|x %x|y %y" icon="\uf204" blockGap=8 |     //% blockId=device_unplot block="unplot|x %x|y %y" icon="\uf204" blockGap=8 | ||||||
|     //% parts="ledmatrix" |     //% parts="ledmatrix" | ||||||
|     void unplot(int x, int y) {  |     void unplot(int x, int y) { | ||||||
|       uBit.display.image.setPixelValue(x, y, 0); |       uBit.display.image.setPixelValue(x, y, 0); | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -54,6 +54,7 @@ namespace led { | |||||||
|     //% help=led/brightness weight=60 |     //% help=led/brightness weight=60 | ||||||
|     //% blockId=device_get_brightness block="brightness" icon="\uf042" blockGap=8 |     //% blockId=device_get_brightness block="brightness" icon="\uf042" blockGap=8 | ||||||
|     //% parts="ledmatrix" |     //% parts="ledmatrix" | ||||||
|  |     //% advanced=true | ||||||
|     int brightness() { |     int brightness() { | ||||||
|       return uBit.display.getBrightness(); |       return uBit.display.getBrightness(); | ||||||
|     } |     } | ||||||
| @@ -65,7 +66,8 @@ namespace led { | |||||||
|     //% help=led/set-brightness weight=59 |     //% help=led/set-brightness weight=59 | ||||||
|     //% blockId=device_set_brightness block="set brightness %value" icon="\uf042" |     //% blockId=device_set_brightness block="set brightness %value" icon="\uf042" | ||||||
|     //% parts="ledmatrix" |     //% parts="ledmatrix" | ||||||
|     void setBrightness(int value) {  |     //% advanced=true | ||||||
|  |     void setBrightness(int value) { | ||||||
|        uBit.display.setBrightness(value); |        uBit.display.setBrightness(value); | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -75,7 +77,8 @@ namespace led { | |||||||
|     //% weight=50 help=led/stop-animation |     //% weight=50 help=led/stop-animation | ||||||
|     //% blockId=device_stop_animation block="stop animation" icon="\uf04d" |     //% blockId=device_stop_animation block="stop animation" icon="\uf04d" | ||||||
|     //% parts="ledmatrix" |     //% parts="ledmatrix" | ||||||
|     void stopAnimation() {  |     //% advanced=true | ||||||
|  |     void stopAnimation() { | ||||||
|        uBit.display.stopAnimation(); |        uBit.display.stopAnimation(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -85,7 +88,7 @@ namespace led { | |||||||
|      */ |      */ | ||||||
|     //% weight=1 help=led/set-display-mode |     //% weight=1 help=led/set-display-mode | ||||||
|     //% parts="ledmatrix" |     //% parts="ledmatrix" | ||||||
|     void setDisplayMode(DisplayMode_ mode) {  |     void setDisplayMode(DisplayMode_ mode) { | ||||||
|         uBit.display.setDisplayMode((DisplayMode)mode); |         uBit.display.setDisplayMode((DisplayMode)mode); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -2,6 +2,7 @@ | |||||||
|  * Control currents in Pins for analog/digital signals, servos, i2c, ... |  * Control currents in Pins for analog/digital signals, servos, i2c, ... | ||||||
|  */ |  */ | ||||||
| //% color=#A80000 weight=30 | //% color=#A80000 weight=30 | ||||||
|  | //% advanced=true | ||||||
| namespace pins { | namespace pins { | ||||||
|     /** |     /** | ||||||
|      * Re-maps a number from one range to another. That is, a value of ``from low`` would get mapped to ``to low``, a value of ``from high`` to ``to high``, values in-between to values in-between, etc. |      * Re-maps a number from one range to another. That is, a value of ``from low`` would get mapped to ``to low``, a value of ``from high`` to ``to high``, values in-between to values in-between, etc. | ||||||
|   | |||||||
| @@ -20,9 +20,10 @@ enum class BaudRate { | |||||||
| }; | }; | ||||||
|  |  | ||||||
| //% weight=2 color=30 | //% weight=2 color=30 | ||||||
|  | //% advanced=true | ||||||
| namespace serial { | namespace serial { | ||||||
|     // note that at least one // followed by % is needed per declaration! |     // note that at least one // followed by % is needed per declaration! | ||||||
|      |  | ||||||
|     /** |     /** | ||||||
|      * Reads a line of text from the serial port. |      * Reads a line of text from the serial port. | ||||||
|      */ |      */ | ||||||
| @@ -39,10 +40,10 @@ namespace serial { | |||||||
|     //% help=serial/write-string |     //% help=serial/write-string | ||||||
|     //% weight=87 |     //% weight=87 | ||||||
|     //% blockId=serial_writestring block="serial write string %text" |     //% blockId=serial_writestring block="serial write string %text" | ||||||
|     void writeString(StringData *text) {  |     void writeString(StringData *text) { | ||||||
|       uBit.serial.send(ManagedString(text)); |       uBit.serial.send(ManagedString(text)); | ||||||
|     } |     } | ||||||
|      |  | ||||||
|     /** |     /** | ||||||
|     * Registers an event to be fired when one of the delimiter is matched |     * Registers an event to be fired when one of the delimiter is matched | ||||||
|     * @param delimiters the characters to match received characters against. eg:"\n" |     * @param delimiters the characters to match received characters against. eg:"\n" | ||||||
| @@ -53,7 +54,7 @@ namespace serial { | |||||||
|       uBit.serial.eventOn(ManagedString(delimiters)); |       uBit.serial.eventOn(ManagedString(delimiters)); | ||||||
|       registerWithDal(MICROBIT_ID_SERIAL, MICROBIT_SERIAL_EVT_DELIM_MATCH, body); |       registerWithDal(MICROBIT_ID_SERIAL, MICROBIT_SERIAL_EVT_DELIM_MATCH, body); | ||||||
|     } |     } | ||||||
|      |  | ||||||
|     /** |     /** | ||||||
|     * Dynamically configuring the serial instance to use pins other than USBTX and USBRX. |     * Dynamically configuring the serial instance to use pins other than USBTX and USBRX. | ||||||
|     * @param tx the new transmission pins |     * @param tx the new transmission pins | ||||||
|   | |||||||
| @@ -2,6 +2,7 @@ | |||||||
|  * Reading and writing data over a serial connection. |  * Reading and writing data over a serial connection. | ||||||
|  */ |  */ | ||||||
| //% weight=2 color=#002050 | //% weight=2 color=#002050 | ||||||
|  | //% advanced=true | ||||||
| namespace serial { | namespace serial { | ||||||
|     /** |     /** | ||||||
|      * Prints a line of text to the serial |      * Prints a line of text to the serial | ||||||
|   | |||||||
							
								
								
									
										68
									
								
								libs/core/shims.d.ts
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										68
									
								
								libs/core/shims.d.ts
									
									
									
									
										vendored
									
									
								
							| @@ -5,6 +5,7 @@ | |||||||
|      * Creation, manipulation and display of LED images. |      * Creation, manipulation and display of LED images. | ||||||
|      */ |      */ | ||||||
|     //% color=#5C2D91 weight=31 |     //% color=#5C2D91 weight=31 | ||||||
|  |     //% advanced=true | ||||||
| declare namespace images { | declare namespace images { | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
| @@ -254,13 +255,14 @@ declare namespace input { | |||||||
|      * @param body the code to run when the pin is released |      * @param body the code to run when the pin is released | ||||||
|      */ |      */ | ||||||
|     //% help=input/on-pin-released weight=6 blockGap=8 |     //% help=input/on-pin-released weight=6 blockGap=8 | ||||||
|     //% blockId=device_pin_released block="on pin %NAME|released" icon="\uf094" shim=input::onPinReleased |     //% blockId=device_pin_released block="on pin %NAME|released" icon="\uf094" | ||||||
|  |     //% advanced=true shim=input::onPinReleased | ||||||
|     function onPinReleased(name: TouchPin, body: () => void): void; |     function onPinReleased(name: TouchPin, body: () => void): void; | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * Get the button state (pressed or not) for ``A`` and ``B``. |      * Get the button state (pressed or not) for ``A`` and ``B``. | ||||||
|      */ |      */ | ||||||
|     //% help=input/button-is-pressed weight=57 |     //% help=input/button-is-pressed weight=60 | ||||||
|     //% block="button|%NAME|is pressed" |     //% block="button|%NAME|is pressed" | ||||||
|     //% blockId=device_get_button2 |     //% blockId=device_get_button2 | ||||||
|     //% icon="\uf192" blockGap=8 |     //% icon="\uf192" blockGap=8 | ||||||
| @@ -271,15 +273,32 @@ declare namespace input { | |||||||
|      * Get the pin state (pressed or not). Requires to hold the ground to close the circuit. |      * Get the pin state (pressed or not). Requires to hold the ground to close the circuit. | ||||||
|      * @param name pin used to detect the touch |      * @param name pin used to detect the touch | ||||||
|      */ |      */ | ||||||
|     //% help=input/pin-is-pressed weight=56 |     //% help=input/pin-is-pressed weight=58 | ||||||
|     //% blockId="device_pin_is_pressed" block="pin %NAME|is pressed" icon="\uf094" |     //% blockId="device_pin_is_pressed" block="pin %NAME|is pressed" icon="\uf094" | ||||||
|     //% blockGap=8 shim=input::pinIsPressed |     //% blockGap=8 shim=input::pinIsPressed | ||||||
|     function pinIsPressed(name: TouchPin): boolean; |     function pinIsPressed(name: TouchPin): boolean; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * Get the acceleration value in milli-gravitys (when the board is laying flat with the screen up, x=0, y=0 and z=-1024) | ||||||
|  |      * @param dimension TODO | ||||||
|  |      */ | ||||||
|  |     //% help=input/acceleration weight=58 icon="\uf135" | ||||||
|  |     //% 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=57 | ||||||
|  |     //% blockId=device_get_light_level block="light level" blockGap=8 icon="\uf185" | ||||||
|  |     //% parts="ledmatrix" shim=input::lightLevel | ||||||
|  |     function lightLevel(): number; | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * Get the current compass heading in degrees. |      * Get the current compass heading in degrees. | ||||||
|      */ |      */ | ||||||
|     //% help=input/compass-heading  |     //% help=input/compass-heading | ||||||
|     //% weight=56 icon="\uf14e" |     //% weight=56 icon="\uf14e" | ||||||
|     //% blockId=device_heading block="compass heading (°)" blockGap=8 |     //% blockId=device_heading block="compass heading (°)" blockGap=8 | ||||||
|     //% parts="compass" shim=input::compassHeading |     //% parts="compass" shim=input::compassHeading | ||||||
| @@ -294,30 +313,13 @@ declare namespace input { | |||||||
|     //% parts="thermometer" shim=input::temperature |     //% parts="thermometer" shim=input::temperature | ||||||
|     function temperature(): number; |     function temperature(): number; | ||||||
|  |  | ||||||
|     /** |  | ||||||
|      * Get the acceleration value in milli-gravitys (when the board is laying flat with the screen up, x=0, y=0 and z=-1024) |  | ||||||
|      * @param dimension TODO |  | ||||||
|      */ |  | ||||||
|     //% help=input/acceleration weight=54 icon="\uf135" |  | ||||||
|     //% 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" |  | ||||||
|     //% parts="ledmatrix" shim=input::lightLevel |  | ||||||
|     function lightLevel(): number; |  | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * The pitch or roll of the device, rotation along the ``x-axis`` or ``y-axis``, in degrees. |      * The pitch or roll of the device, rotation along the ``x-axis`` or ``y-axis``, in degrees. | ||||||
|      * @param kind TODO |      * @param kind TODO | ||||||
|      */ |      */ | ||||||
|     //% help=input/rotation weight=52 |     //% help=input/rotation weight=52 | ||||||
|     //% blockId=device_get_rotation block="rotation (°)|%NAME" blockGap=8 icon="\uf197" |     //% blockId=device_get_rotation block="rotation (°)|%NAME" blockGap=8 icon="\uf197" | ||||||
|     //% parts="accelerometer" shim=input::rotation |     //% parts="accelerometer" advanced=true shim=input::rotation | ||||||
|     function rotation(kind: Rotation): number; |     function rotation(kind: Rotation): number; | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
| @@ -326,14 +328,16 @@ declare namespace input { | |||||||
|      */ |      */ | ||||||
|     //% help=input/magnetic-force weight=51 |     //% help=input/magnetic-force weight=51 | ||||||
|     //% blockId=device_get_magnetic_force block="magnetic force (µT)|%NAME" blockGap=8 icon="\uf076" |     //% blockId=device_get_magnetic_force block="magnetic force (µT)|%NAME" blockGap=8 icon="\uf076" | ||||||
|     //% parts="compass" shim=input::magneticForce |     //% parts="compass" | ||||||
|  |     //% advanced=true shim=input::magneticForce | ||||||
|     function magneticForce(dimension: Dimension): number; |     function magneticForce(dimension: Dimension): number; | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * Gets the number of milliseconds elapsed since power on. |      * Gets the number of milliseconds elapsed since power on. | ||||||
|      */ |      */ | ||||||
|     //% help=input/running-time weight=50 |     //% help=input/running-time weight=50 | ||||||
|     //% blockId=device_get_running_time block="running time (ms)" icon="\uf017" shim=input::runningTime |     //% blockId=device_get_running_time block="running time (ms)" icon="\uf017" | ||||||
|  |     //% advanced=true shim=input::runningTime | ||||||
|     function runningTime(): number; |     function runningTime(): number; | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
| @@ -349,13 +353,15 @@ declare namespace input { | |||||||
|     //% help=input/set-accelerometer-range |     //% help=input/set-accelerometer-range | ||||||
|     //% blockId=device_set_accelerometer_range block="set accelerometer|range %range" icon="\uf135" |     //% blockId=device_set_accelerometer_range block="set accelerometer|range %range" icon="\uf135" | ||||||
|     //% weight=5 |     //% weight=5 | ||||||
|     //% parts="accelerometer" shim=input::setAccelerometerRange |     //% parts="accelerometer" | ||||||
|  |     //% advanced=true shim=input::setAccelerometerRange | ||||||
|     function setAccelerometerRange(range: AcceleratorRange): void; |     function setAccelerometerRange(range: AcceleratorRange): void; | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|     //% weight=1 color="#333333" |     //% weight=1 color="#333333" | ||||||
|  |     //% advanced=true | ||||||
| declare namespace control { | declare namespace control { | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
| @@ -393,7 +399,7 @@ declare namespace control { | |||||||
|     /** |     /** | ||||||
|      * Raises an event in the event bus. |      * Raises an event in the event bus. | ||||||
|      */ |      */ | ||||||
|     //% weight=20 blockGap=8 blockId="control_on_event" block="on event|from %src=control_event_source_id|with value %value=control_event_value_id"  |     //% weight=20 blockGap=8 blockId="control_on_event" block="on event|from %src=control_event_source_id|with value %value=control_event_value_id" | ||||||
|     //% blockExternalInputs=1 shim=control::onEvent |     //% blockExternalInputs=1 shim=control::onEvent | ||||||
|     function onEvent(src: number, value: number, handler: () => void): void; |     function onEvent(src: number, value: number, handler: () => void): void; | ||||||
|  |  | ||||||
| @@ -464,7 +470,8 @@ declare namespace led { | |||||||
|      */ |      */ | ||||||
|     //% help=led/brightness weight=60 |     //% help=led/brightness weight=60 | ||||||
|     //% blockId=device_get_brightness block="brightness" icon="\uf042" blockGap=8 |     //% blockId=device_get_brightness block="brightness" icon="\uf042" blockGap=8 | ||||||
|     //% parts="ledmatrix" shim=led::brightness |     //% parts="ledmatrix" | ||||||
|  |     //% advanced=true shim=led::brightness | ||||||
|     function brightness(): number; |     function brightness(): number; | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
| @@ -473,7 +480,8 @@ declare namespace led { | |||||||
|      */ |      */ | ||||||
|     //% help=led/set-brightness weight=59 |     //% help=led/set-brightness weight=59 | ||||||
|     //% blockId=device_set_brightness block="set brightness %value" icon="\uf042" |     //% blockId=device_set_brightness block="set brightness %value" icon="\uf042" | ||||||
|     //% parts="ledmatrix" shim=led::setBrightness |     //% parts="ledmatrix" | ||||||
|  |     //% advanced=true shim=led::setBrightness | ||||||
|     function setBrightness(value: number): void; |     function setBrightness(value: number): void; | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
| @@ -481,7 +489,8 @@ declare namespace led { | |||||||
|      */ |      */ | ||||||
|     //% weight=50 help=led/stop-animation |     //% weight=50 help=led/stop-animation | ||||||
|     //% blockId=device_stop_animation block="stop animation" icon="\uf04d" |     //% blockId=device_stop_animation block="stop animation" icon="\uf04d" | ||||||
|     //% parts="ledmatrix" shim=led::stopAnimation |     //% parts="ledmatrix" | ||||||
|  |     //% advanced=true shim=led::stopAnimation | ||||||
|     function stopAnimation(): void; |     function stopAnimation(): void; | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
| @@ -643,6 +652,7 @@ declare namespace pins { | |||||||
|  |  | ||||||
|  |  | ||||||
|     //% weight=2 color=30 |     //% weight=2 color=30 | ||||||
|  |     //% advanced=true | ||||||
| declare namespace serial { | declare namespace serial { | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|   | |||||||
| @@ -9,12 +9,12 @@ namespace radio { | |||||||
|  |  | ||||||
|     // ------------------------------------------------------------------------- |     // ------------------------------------------------------------------------- | ||||||
|     // Radio |     // Radio | ||||||
|     // -------------------------------------------------------------------------     |     // ------------------------------------------------------------------------- | ||||||
|     bool radioEnabled = false; |     bool radioEnabled = false; | ||||||
|     bool transmitSerialNumber = false; |     bool transmitSerialNumber = false; | ||||||
|      |  | ||||||
|     PacketBuffer packet; |     PacketBuffer packet; | ||||||
|      |  | ||||||
|     int radioEnable() { |     int radioEnable() { | ||||||
|         int r = uBit.radio.enable(); |         int r = uBit.radio.enable(); | ||||||
|         if (r != MICROBIT_OK) { |         if (r != MICROBIT_OK) { | ||||||
| @@ -32,7 +32,7 @@ namespace radio { | |||||||
|         if (radioEnable() != MICROBIT_OK) return; |         if (radioEnable() != MICROBIT_OK) return; | ||||||
|         uBit.radio.event.eventReceived(MicroBitEvent(MES_BROADCAST_GENERAL_ID, message, CREATE_ONLY)); |         uBit.radio.event.eventReceived(MicroBitEvent(MES_BROADCAST_GENERAL_ID, message, CREATE_ONLY)); | ||||||
|     } |     } | ||||||
|          |  | ||||||
|     void onBroadcastMessageReceived(int message, Action f) { |     void onBroadcastMessageReceived(int message, Action f) { | ||||||
|         if (radioEnable() != MICROBIT_OK) return; |         if (radioEnable() != MICROBIT_OK) return; | ||||||
|         registerWithDal(MES_BROADCAST_GENERAL_ID, message, f); |         registerWithDal(MES_BROADCAST_GENERAL_ID, message, f); | ||||||
| @@ -40,18 +40,18 @@ namespace radio { | |||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * Broadcasts a number over radio to any connected micro:bit in the group. |      * Broadcasts a number over radio to any connected micro:bit in the group. | ||||||
|      */     |      */ | ||||||
|     //% help=radio/send-number |     //% help=radio/send-number | ||||||
|     //% weight=60 |     //% weight=60 | ||||||
|     //% blockId=radio_datagram_send block="radio send number %value" blockGap=8 |     //% blockId=radio_datagram_send block="radio send number %value" blockGap=8 | ||||||
|     void sendNumber(int value) {  |     void sendNumber(int value) { | ||||||
|         if (radioEnable() != MICROBIT_OK) return;         |         if (radioEnable() != MICROBIT_OK) return; | ||||||
|         uint32_t t = system_timer_current_time(); |         uint32_t t = system_timer_current_time(); | ||||||
|         uint32_t sn = transmitSerialNumber ? microbit_serial_number() : 0; |         uint32_t sn = transmitSerialNumber ? microbit_serial_number() : 0; | ||||||
|         uint32_t buf[] = { (uint32_t)value, t, sn };         |         uint32_t buf[] = { (uint32_t)value, t, sn }; | ||||||
|         uBit.radio.datagram.send((uint8_t*)buf, 3*sizeof(uint32_t)); |         uBit.radio.datagram.send((uint8_t*)buf, 3*sizeof(uint32_t)); | ||||||
|     } |     } | ||||||
|      |  | ||||||
|     /** |     /** | ||||||
|     * Broadcasts a name / value pair along with the device serial number |     * Broadcasts a name / value pair along with the device serial number | ||||||
|     * and running time to any connected micro:bit in the group. |     * and running time to any connected micro:bit in the group. | ||||||
| @@ -64,8 +64,8 @@ namespace radio { | |||||||
|     void sendValue(StringData* name, int value) { |     void sendValue(StringData* name, int value) { | ||||||
|         if (radioEnable() != MICROBIT_OK) return; |         if (radioEnable() != MICROBIT_OK) return; | ||||||
|  |  | ||||||
|         ManagedString n(name);      |         ManagedString n(name); | ||||||
|         uint32_t t = system_timer_current_time();            |         uint32_t t = system_timer_current_time(); | ||||||
|         uint32_t sn = transmitSerialNumber ? microbit_serial_number() : 0; |         uint32_t sn = transmitSerialNumber ? microbit_serial_number() : 0; | ||||||
|         uint8_t buf[32]; |         uint8_t buf[32]; | ||||||
|         uint32_t* buf32 = (uint32_t*)buf; |         uint32_t* buf32 = (uint32_t*)buf; | ||||||
| @@ -75,28 +75,28 @@ namespace radio { | |||||||
|         buf32[2] = sn; // 4 bytes: serial number |         buf32[2] = sn; // 4 bytes: serial number | ||||||
|         uint8_t len = min(MAX_FIELD_NAME_LENGTH, n.length());          // 1 byte: string length |         uint8_t len = min(MAX_FIELD_NAME_LENGTH, n.length());          // 1 byte: string length | ||||||
|         if (len > 0) { |         if (len > 0) { | ||||||
|             buf[12] = len;                          //  |             buf[12] = len;                          // | ||||||
|             memcpy(buf + 13, n.toCharArray(), len); // 13-25: field name             |             memcpy(buf + 13, n.toCharArray(), len); // 13-25: field name | ||||||
|         } |         } | ||||||
|         uBit.radio.datagram.send(buf, 13 + len); |         uBit.radio.datagram.send(buf, 13 + len); | ||||||
|     } |     } | ||||||
|      |  | ||||||
|     /** |     /** | ||||||
|      * Broadcasts a number over radio to any connected micro:bit in the group. |      * Broadcasts a number over radio to any connected micro:bit in the group. | ||||||
|      */     |      */ | ||||||
|     //% help=radio/send-string |     //% help=radio/send-string | ||||||
|     //% weight=58 |     //% weight=58 | ||||||
|     //% blockId=radio_datagram_send_string block="radio send string %msg" |     //% blockId=radio_datagram_send_string block="radio send string %msg" | ||||||
|     void sendString(StringData* msg) { |     void sendString(StringData* msg) { | ||||||
|         if (radioEnable() != MICROBIT_OK) return;         |         if (radioEnable() != MICROBIT_OK) return; | ||||||
|          |  | ||||||
|         ManagedString s(msg); |         ManagedString s(msg); | ||||||
|         if (s.length() > MICROBIT_RADIO_MAX_PACKET_SIZE) |         if (s.length() > MICROBIT_RADIO_MAX_PACKET_SIZE) | ||||||
|             s = s.substring(0, MICROBIT_RADIO_MAX_PACKET_SIZE); |             s = s.substring(0, MICROBIT_RADIO_MAX_PACKET_SIZE); | ||||||
|          |  | ||||||
|         uBit.radio.datagram.send(s); |         uBit.radio.datagram.send(s); | ||||||
|     } |     } | ||||||
|              |  | ||||||
|     /** |     /** | ||||||
|     * Reads a value sent with `stream value` and writes it |     * Reads a value sent with `stream value` and writes it | ||||||
|     * to the serial stream as JSON |     * to the serial stream as JSON | ||||||
| @@ -104,29 +104,30 @@ namespace radio { | |||||||
|     //% help=radio/write-value-to-serial |     //% help=radio/write-value-to-serial | ||||||
|     //% weight=3 |     //% weight=3 | ||||||
|     //% blockId=radio_write_value_serial block="radio write value to serial" |     //% blockId=radio_write_value_serial block="radio write value to serial" | ||||||
|  |     //% advanced=true | ||||||
|     void writeValueToSerial() { |     void writeValueToSerial() { | ||||||
|         if (radioEnable() != MICROBIT_OK) return; |         if (radioEnable() != MICROBIT_OK) return; | ||||||
|         PacketBuffer p = uBit.radio.datagram.recv(); |         PacketBuffer p = uBit.radio.datagram.recv(); | ||||||
|         int length = p.length(); |         int length = p.length(); | ||||||
|         uint8_t* bytes = p.getBytes(); |         uint8_t* bytes = p.getBytes(); | ||||||
|         int value; |         int value; | ||||||
|          |  | ||||||
|         uBit.serial.send("{"); |         uBit.serial.send("{"); | ||||||
|         if (length >= 4) { |         if (length >= 4) { | ||||||
|             memcpy(&value, bytes, 4); |             memcpy(&value, bytes, 4); | ||||||
|             uBit.serial.send("\"v\":"); uBit.serial.send(value); |             uBit.serial.send("\"v\":"); uBit.serial.send(value); | ||||||
|             if(length >= 8) { |             if(length >= 8) { | ||||||
|                 memcpy(&value, bytes + 4, 4); |                 memcpy(&value, bytes + 4, 4); | ||||||
|                 uBit.serial.send(",\"t\":"); uBit.serial.send(value);                 |                 uBit.serial.send(",\"t\":"); uBit.serial.send(value); | ||||||
|                 if (length >= 12) { |                 if (length >= 12) { | ||||||
|                     memcpy(&value, bytes + 8, 4); |                     memcpy(&value, bytes + 8, 4); | ||||||
|                     uBit.serial.send(",\"s\":"); uBit.serial.send(value);                                     |                     uBit.serial.send(",\"s\":"); uBit.serial.send(value); | ||||||
|                     if (length >= 13) { |                     if (length >= 13) { | ||||||
|                         char name[MAX_FIELD_NAME_LENGTH+1]; |                         char name[MAX_FIELD_NAME_LENGTH+1]; | ||||||
|                         uint8_t len = min(MAX_FIELD_NAME_LENGTH, bytes[12]); |                         uint8_t len = min(MAX_FIELD_NAME_LENGTH, bytes[12]); | ||||||
|                         memcpy(name, bytes + 13, len); |                         memcpy(name, bytes + 13, len); | ||||||
|                         name[len] = 0; |                         name[len] = 0; | ||||||
|                         uBit.serial.send(",\"n\":\""); uBit.serial.send(name); uBit.serial.send("\"");                                     |                         uBit.serial.send(",\"n\":\""); uBit.serial.send(name); uBit.serial.send("\""); | ||||||
|                     } |                     } | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
| @@ -151,7 +152,7 @@ namespace radio { | |||||||
|         } |         } | ||||||
|         return 0; |         return 0; | ||||||
|     } |     } | ||||||
|      |  | ||||||
|     /** |     /** | ||||||
|      * Reads the next packet as a number from the radio queue. |      * Reads the next packet as a number from the radio queue. | ||||||
|      */ |      */ | ||||||
| @@ -173,12 +174,12 @@ namespace radio { | |||||||
|     //% blockId=radio_datagram_received_event block="radio on data received" blockGap=8 |     //% blockId=radio_datagram_received_event block="radio on data received" blockGap=8 | ||||||
|     void onDataReceived(Action body) { |     void onDataReceived(Action body) { | ||||||
|         if (radioEnable() != MICROBIT_OK) return; |         if (radioEnable() != MICROBIT_OK) return; | ||||||
|         registerWithDal(MICROBIT_ID_RADIO, MICROBIT_RADIO_EVT_DATAGRAM, body);     |         registerWithDal(MICROBIT_ID_RADIO, MICROBIT_RADIO_EVT_DATAGRAM, body); | ||||||
|         // make the the receive buffer has a free spot |         // make the the receive buffer has a free spot | ||||||
|         receiveNumber(); |         receiveNumber(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|      |  | ||||||
|     /** |     /** | ||||||
|     * Reads the next packet as a string and returns it. |     * Reads the next packet as a string and returns it. | ||||||
|     */ |     */ | ||||||
| @@ -188,9 +189,9 @@ namespace radio { | |||||||
|     StringData* receiveString() { |     StringData* receiveString() { | ||||||
|         if (radioEnable() != MICROBIT_OK) return ManagedString().leakData(); |         if (radioEnable() != MICROBIT_OK) return ManagedString().leakData(); | ||||||
|         packet = uBit.radio.datagram.recv(); |         packet = uBit.radio.datagram.recv(); | ||||||
|         return ManagedString(packet).leakData();         |         return ManagedString(packet).leakData(); | ||||||
|     } |     } | ||||||
|      |  | ||||||
|     /** |     /** | ||||||
|      * Gets the received signal strength indicator (RSSI) from the packet received by ``receive number``. Not supported in simulator. |      * Gets the received signal strength indicator (RSSI) from the packet received by ``receive number``. Not supported in simulator. | ||||||
|      * namespace=radio |      * namespace=radio | ||||||
| @@ -198,6 +199,7 @@ namespace radio { | |||||||
|     //% help=radio/received-signal-strength |     //% help=radio/received-signal-strength | ||||||
|     //% weight=40 |     //% weight=40 | ||||||
|     //% blockId=radio_datagram_rssi block="radio received signal strength" |     //% blockId=radio_datagram_rssi block="radio received signal strength" | ||||||
|  |     //% advanced=true | ||||||
|     int receivedSignalStrength() { |     int receivedSignalStrength() { | ||||||
|         if (radioEnable() != MICROBIT_OK) return 0; |         if (radioEnable() != MICROBIT_OK) return 0; | ||||||
|         return packet.getRSSI(); |         return packet.getRSSI(); | ||||||
| @@ -208,13 +210,13 @@ namespace radio { | |||||||
|      * @ param id the group id between ``0`` and ``255``, 1 eg |      * @ param id the group id between ``0`` and ``255``, 1 eg | ||||||
|      */ |      */ | ||||||
|     //% help=radio/set-group |     //% help=radio/set-group | ||||||
|     //% weight=10 blockGap=8 |     //% weight=10 blockGap=8 advanced=true | ||||||
|     //% blockId=radio_set_group block="radio set group %ID" |     //% blockId=radio_set_group block="radio set group %ID" | ||||||
|     void setGroup(int id) { |     void setGroup(int id) { | ||||||
|         if (radioEnable() != MICROBIT_OK) return; |         if (radioEnable() != MICROBIT_OK) return; | ||||||
|         uBit.radio.setGroup(id); |         uBit.radio.setGroup(id); | ||||||
|     } |     } | ||||||
|      |  | ||||||
|     /** |     /** | ||||||
|      * Change the output power level of the transmitter to the given value. |      * Change the output power level of the transmitter to the given value. | ||||||
|     * @param power a value in the range 0..7, where 0 is the lowest power and 7 is the highest. eg: 7 |     * @param power a value in the range 0..7, where 0 is the lowest power and 7 is the highest. eg: 7 | ||||||
| @@ -222,17 +224,20 @@ namespace radio { | |||||||
|     //% help=radio/set-transmit-power |     //% help=radio/set-transmit-power | ||||||
|     //% weight=9 blockGap=8 |     //% weight=9 blockGap=8 | ||||||
|     //% blockId=radio_set_transmit_power block="radio set transmit power %power" |     //% blockId=radio_set_transmit_power block="radio set transmit power %power" | ||||||
|  |     //% advanced=true | ||||||
|     void setTransmitPower(int power) { |     void setTransmitPower(int power) { | ||||||
|         if (radioEnable() != MICROBIT_OK) return; |         if (radioEnable() != MICROBIT_OK) return; | ||||||
|         uBit.radio.setTransmitPower(power); |         uBit.radio.setTransmitPower(power); | ||||||
|     } |     } | ||||||
|      |  | ||||||
|     /** |     /** | ||||||
|     * Set the radio to transmit the serial number in each message. |     * Set the radio to transmit the serial number in each message. | ||||||
|  |     * @param transmit value indicating if the serial number is transmitted, eg: true | ||||||
|     */ |     */ | ||||||
|     //% help=radio/set-transmit-serial-number |     //% help=radio/set-transmit-serial-number | ||||||
|     //% weight=8 blockGap=8 |     //% weight=8 blockGap=8 | ||||||
|     //% blockId=radio_set_transmit_serial_number block="radio set transmit serial number %transmit" |     //% blockId=radio_set_transmit_serial_number block="radio set transmit serial number %transmit" | ||||||
|  |     //% advanced=true | ||||||
|     void setTransmitSerialNumber(bool transmit) { |     void setTransmitSerialNumber(bool transmit) { | ||||||
|         if (radioEnable() != MICROBIT_OK) return; |         if (radioEnable() != MICROBIT_OK) return; | ||||||
|         transmitSerialNumber = transmit; |         transmitSerialNumber = transmit; | ||||||
|   | |||||||
							
								
								
									
										15
									
								
								libs/radio/shims.d.ts
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										15
									
								
								libs/radio/shims.d.ts
									
									
									
									
										vendored
									
									
								
							| @@ -38,7 +38,8 @@ declare namespace radio { | |||||||
|      */ |      */ | ||||||
|     //% help=radio/write-value-to-serial |     //% help=radio/write-value-to-serial | ||||||
|     //% weight=3 |     //% weight=3 | ||||||
|     //% blockId=radio_write_value_serial block="radio write value to serial" shim=radio::writeValueToSerial |     //% blockId=radio_write_value_serial block="radio write value to serial" | ||||||
|  |     //% advanced=true shim=radio::writeValueToSerial | ||||||
|     function writeValueToSerial(): void; |     function writeValueToSerial(): void; | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
| @@ -79,7 +80,8 @@ declare namespace radio { | |||||||
|      */ |      */ | ||||||
|     //% help=radio/received-signal-strength |     //% help=radio/received-signal-strength | ||||||
|     //% weight=40 |     //% weight=40 | ||||||
|     //% blockId=radio_datagram_rssi block="radio received signal strength" shim=radio::receivedSignalStrength |     //% blockId=radio_datagram_rssi block="radio received signal strength" | ||||||
|  |     //% advanced=true shim=radio::receivedSignalStrength | ||||||
|     function receivedSignalStrength(): number; |     function receivedSignalStrength(): number; | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
| @@ -87,7 +89,7 @@ declare namespace radio { | |||||||
|      * @ param id the group id between ``0`` and ``255``, 1 eg |      * @ param id the group id between ``0`` and ``255``, 1 eg | ||||||
|      */ |      */ | ||||||
|     //% help=radio/set-group |     //% help=radio/set-group | ||||||
|     //% weight=10 blockGap=8 |     //% weight=10 blockGap=8 advanced=true | ||||||
|     //% blockId=radio_set_group block="radio set group %ID" shim=radio::setGroup |     //% blockId=radio_set_group block="radio set group %ID" shim=radio::setGroup | ||||||
|     function setGroup(id: number): void; |     function setGroup(id: number): void; | ||||||
|  |  | ||||||
| @@ -97,15 +99,18 @@ declare namespace radio { | |||||||
|      */ |      */ | ||||||
|     //% help=radio/set-transmit-power |     //% help=radio/set-transmit-power | ||||||
|     //% weight=9 blockGap=8 |     //% weight=9 blockGap=8 | ||||||
|     //% blockId=radio_set_transmit_power block="radio set transmit power %power" shim=radio::setTransmitPower |     //% blockId=radio_set_transmit_power block="radio set transmit power %power" | ||||||
|  |     //% advanced=true shim=radio::setTransmitPower | ||||||
|     function setTransmitPower(power: number): void; |     function setTransmitPower(power: number): void; | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * Set the radio to transmit the serial number in each message. |      * Set the radio to transmit the serial number in each message. | ||||||
|  |      * @param transmit value indicating if the serial number is transmitted, eg: true | ||||||
|      */ |      */ | ||||||
|     //% help=radio/set-transmit-serial-number |     //% help=radio/set-transmit-serial-number | ||||||
|     //% weight=8 blockGap=8 |     //% weight=8 blockGap=8 | ||||||
|     //% blockId=radio_set_transmit_serial_number block="radio set transmit serial number %transmit" shim=radio::setTransmitSerialNumber |     //% blockId=radio_set_transmit_serial_number block="radio set transmit serial number %transmit" | ||||||
|  |     //% advanced=true shim=radio::setTransmitSerialNumber | ||||||
|     function setTransmitSerialNumber(transmit: boolean): void; |     function setTransmitSerialNumber(transmit: boolean): void; | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -29,6 +29,6 @@ | |||||||
|     "typescript": "^1.8.7" |     "typescript": "^1.8.7" | ||||||
|   }, |   }, | ||||||
|   "dependencies": { |   "dependencies": { | ||||||
|     "pxt-core": "0.4.51" |     "pxt-core": "0.4.52" | ||||||
|   } |   } | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user