diff --git a/libs/microbit-devices/devices.cpp b/libs/microbit-devices/devices.cpp index fa2c5f00..06d6263d 100644 --- a/libs/microbit-devices/devices.cpp +++ b/libs/microbit-devices/devices.cpp @@ -1,6 +1,8 @@ -#include "BitVM.h" +#include "kindscript.h" #include "MESEvents.h" +using namespace kindscript; + enum class MesCameraEvent { //% block="take photo" TakePhoto = MES_CAMERA_EVT_TAKE_PHOTO, @@ -119,3 +121,96 @@ enum class MesDpadButtonInfo { }; +//% color=156 weight=80 +namespace devices { + static void genEvent(int id, int event) { + MicroBitEvent e(id, event); + } + + /** + * Sends a ``camera`` command to the parent device. + * @param event TODO + */ + //% weight=30 help=devices/tell-camera-to + //% blockId=devices_camera icon="\uf030" block="tell camera to|%property" blockGap=8 + void tellCameraTo(MesCameraEvent event) { + genEvent(MES_CAMERA_ID, (int)event); + } + + /** + * Sends a ``remote control`` command to the parent device. + * @param event TODO + */ + //% weight=29 help=devices/tell-remote-control-to + //% blockId=devices_remote_control block="tell remote control to|%property" blockGap=14 icon="\uf144" + void tellRemoteControlTo(MesRemoteControlEvent event) { + genEvent(MES_REMOTE_CONTROL_ID, (int)event); + } + + /** + * Sends an ``alert`` command to the parent device. + * @param event TODO + */ + //% weight=27 help=devices/raise-alert-to + //% blockId=devices_alert block="raise alert to|%property" icon="\uf0f3" + void raiseAlertTo(MesAlertEvent event) { + genEvent(MES_ALERTS_ID, (int)event); + } + + /** + * Registers code to run when the device notifies about a particular event. + * @param event TODO + * @param body TODO + */ + //% help=devices/on-notified weight=26 + //% blockId=devices_device_info_event block="on notified" icon="\uf10a" + void onNotified(MesDeviceInfo event, Action body) { + registerWithDal(MES_DEVICE_INFO_ID, (int)event, body); + } + + /** + * Register code to run when the micro:bit receives a command from the paired gamepad. + * @param name TODO + * @param body TODO + */ + //% help=devices/on-gamepad-button weight=40 shim=micro_bit::onGamepadButton + //% weight=25 + //% blockId=devices_gamepad_event block="on gamepad button|%NAME" icon="\uf11b" + void onGamepadButton(MesDpadButtonInfo name, Action body) { + registerWithDal(MES_DPAD_CONTROLLER_ID, (int)name, body); + } + + static int _signalStrength = -1; + static void signalStrengthHandler(MicroBitEvent ev) { + // keep in sync with MESEvents.h + _signalStrength = ev.value - 1; + } + static void initSignalStrength() { + if (_signalStrength < 0) { + _signalStrength = 0; + uBit.MessageBus.listen(MES_SIGNAL_STRENGTH_ID, MICROBIT_EVT_ANY, signalStrengthHandler); + } + } + + /** + * Returns the last signal strength reported by the paired device. + */ + //% help=devices/signal-strength weight=24 + //% blockId=devices_signal_strength block="signal strength" blockGap=14 icon="\uf012" blockGap=14 + int signalStrength() { + initSignalStrength(); + return _signalStrength; + } + + /** + * Registers code to run when the device notifies about a change of signal strength. + * @param body TODO + */ + //% shim=micro_bit::onSignalStrengthChanged weight=23 help=devices/on-signal-strength-changed + //% blockId=devices_signal_strength_changed_event block="on signal strength changed" icon="\uf012" + void onSignalStrengthChanged(Action body) { + initSignalStrength(); + registerWithDal(MES_SIGNAL_STRENGTH_ID, MICROBIT_EVT_ANY, body); + } +} + diff --git a/libs/microbit-devices/enums.d.ts b/libs/microbit-devices/enums.d.ts index fc3805e7..57b6132e 100644 --- a/libs/microbit-devices/enums.d.ts +++ b/libs/microbit-devices/enums.d.ts @@ -121,5 +121,7 @@ //% block="4 up" _4Up = 16, // MES_DPAD_BUTTON_4_UP } +declare namespace devices { +} // Auto-generated. Do not edit. Really. diff --git a/libs/microbit-devices/kind.json b/libs/microbit-devices/kind.json index 2bd40e7f..422f08af 100644 --- a/libs/microbit-devices/kind.json +++ b/libs/microbit-devices/kind.json @@ -4,8 +4,8 @@ "files": [ "README.md", "enums.d.ts", - "devices.cpp", - "devices.ts" + "shims.d.ts", + "devices.cpp" ], "public": true, "dependencies": { diff --git a/libs/microbit-devices/devices.ts b/libs/microbit-devices/shims.d.ts similarity index 55% rename from libs/microbit-devices/devices.ts rename to libs/microbit-devices/shims.d.ts index 4ef9b0da..a8ef14f4 100644 --- a/libs/microbit-devices/devices.ts +++ b/libs/microbit-devices/shims.d.ts @@ -1,38 +1,42 @@ -//% color=156 weight=80 -namespace devices { +// Auto-generated. Do not edit. + + + + //% color=156 weight=80 +declare namespace devices { + /** * Sends a ``camera`` command to the parent device. * @param event TODO */ - //% weight=30 help=devices/tell-camera-to shim=micro_bit::devices::camera - //% blockId=devices_camera icon="\uf030" block="tell camera to|%property" blockGap=8 - export function tellCameraTo(event: MesCameraEvent): void { } + //% weight=30 help=devices/tell-camera-to + //% blockId=devices_camera icon="\uf030" block="tell camera to|%property" blockGap=8 shim=devices::tellCameraTo + function tellCameraTo(event: MesCameraEvent): void; /** * Sends a ``remote control`` command to the parent device. * @param event TODO */ - //% weight=29 help=devices/tell-remote-control-to shim=micro_bit::devices::remote_control - //% blockId=devices_remote_control block="tell remote control to|%property" blockGap=14 icon="\uf144" - export function tellRemoteControlTo(event: MesRemoteControlEvent): void { } + //% weight=29 help=devices/tell-remote-control-to + //% blockId=devices_remote_control block="tell remote control to|%property" blockGap=14 icon="\uf144" shim=devices::tellRemoteControlTo + function tellRemoteControlTo(event: MesRemoteControlEvent): void; /** * Sends an ``alert`` command to the parent device. * @param event TODO */ - //% weight=27 help=devices/raise-alert-to shim=micro_bit::devices::alert - //% blockId=devices_alert block="raise alert to|%property" icon="\uf0f3" - export function raiseAlertTo(event: MesAlertEvent): void { } + //% weight=27 help=devices/raise-alert-to + //% blockId=devices_alert block="raise alert to|%property" icon="\uf0f3" shim=devices::raiseAlertTo + function raiseAlertTo(event: MesAlertEvent): void; /** * Registers code to run when the device notifies about a particular event. * @param event TODO * @param body TODO */ - //% shim=micro_bit::onDeviceInfo help=devices/on-notified - //% weight=26 - //% blockId=devices_device_info_event block="on notified" icon="\uf10a" - export function onNotified(event: MesDeviceInfo, body: Action): void { } + //% help=devices/on-notified weight=26 + //% blockId=devices_device_info_event block="on notified" icon="\uf10a" shim=devices::onNotified + function onNotified(event: MesDeviceInfo, body: () => void): void; /** * Register code to run when the micro:bit receives a command from the paired gamepad. @@ -41,24 +45,23 @@ namespace devices { */ //% help=devices/on-gamepad-button weight=40 shim=micro_bit::onGamepadButton //% weight=25 - //% blockId=devices_gamepad_event block="on gamepad button|%NAME" icon="\uf11b" - export function onGamepadButton(name: MesDpadButtonInfo, body: Action): void { } + //% blockId=devices_gamepad_event block="on gamepad button|%NAME" icon="\uf11b" shim=devices::onGamepadButton + function onGamepadButton(name: MesDpadButtonInfo, body: () => void): void; /** * Returns the last signal strength reported by the paired device. */ - //% help=devices/signal-strength weight=24 shim=micro_bit::signalStrength - //% blockId=devices_signal_strength block="signal strength" blockGap=14 icon="\uf012" blockGap=14 - export function signalStrength(): number { - return 0; - } + //% help=devices/signal-strength weight=24 + //% blockId=devices_signal_strength block="signal strength" blockGap=14 icon="\uf012" blockGap=14 shim=devices::signalStrength + function signalStrength(): number; /** * Registers code to run when the device notifies about a change of signal strength. * @param body TODO */ //% shim=micro_bit::onSignalStrengthChanged weight=23 help=devices/on-signal-strength-changed - //% blockId=devices_signal_strength_changed_event block="on signal strength changed" icon="\uf012" - export function onSignalStrengthChanged(body: Action): void { } + //% blockId=devices_signal_strength_changed_event block="on signal strength changed" icon="\uf012" shim=devices::onSignalStrengthChanged + function onSignalStrengthChanged(body: () => void): void; } +// Auto-generated. Do not edit. Really.