diff --git a/libs/microbit/control.cpp b/libs/microbit/control.cpp index f228eb98..7556c3ae 100644 --- a/libs/microbit/control.cpp +++ b/libs/microbit/control.cpp @@ -155,4 +155,12 @@ namespace control { void onEvent(int src, int value, Action handler) { registerWithDal(src, value, handler); } + + /** + * Gets a friendly name for the device derived from the its serial number + */ + //% blockId="control_device_name" block="device name" weight=10 + StringData* deviceName() { + return ManagedString(microbit_friendly_name()).leakData(); + } } diff --git a/libs/microbit/shims.d.ts b/libs/microbit/shims.d.ts index 7c8abbb3..bf33e2be 100644 --- a/libs/microbit/shims.d.ts +++ b/libs/microbit/shims.d.ts @@ -342,6 +342,12 @@ declare namespace control { //% weight=20 blockGap=8 blockId="control_on_event" block="on event|from %src=control_event_source|with value %value=control_event_value" //% blockExternalInputs=1 shim=control::onEvent function onEvent(src: number, value: number, handler: () => void): void; + + /** + * Gets a friendly name for the device derived from the its serial number + */ + //% blockId="control_device_name" block="device name" weight=10 shim=control::deviceName + function deviceName(): string; } diff --git a/sim/libmbit.ts b/sim/libmbit.ts index b6bf8094..6c65f5b5 100644 --- a/sim/libmbit.ts +++ b/sim/libmbit.ts @@ -226,6 +226,13 @@ namespace pxsim.control { export function reset() { U.userError("reset not implemented in simulator yet") } + + export function deviceName() : string { + let b = board(); + return b && b.id + ? b.id.slice(0, 4) + : 'abcd'; + } export function onEvent(id: number, evid: number, handler: RefAction) { pxt.registerWithDal(id, evid, handler) diff --git a/sim/state.ts b/sim/state.ts index 7112d52f..18832f26 100644 --- a/sim/state.ts +++ b/sim/state.ts @@ -511,7 +511,7 @@ namespace pxsim { constructor() { super() - this.id = "b" + Math.random(); + this.id = "b" + Math.random().toString().slice(1); this.animationQ = new AnimationQueue(runtime); this.bus = new EventBus(runtime); this.radio = new RadioBus(runtime);