pxt-ev3
Version:
LEGO MINDSTORMS EV3 for Microsoft MakeCode
1,403 lines • 53 kB
TypeScript
/// <reference path="../libs/core/dal.d.ts" />
declare namespace pxsim.input {
function onGesture(gesture: number, handler: RefAction): void;
function rotation(kind: number): number;
function setAccelerometerRange(range: number): void;
function acceleration(dimension: number): number;
}
declare namespace pxsim {
/**
* Co-ordinate systems that can be used.
* RAW: Unaltered data. Data will be returned directly from the accelerometer.
*
* SIMPLE_CARTESIAN: Data will be returned based on an easy to understand alignment, consistent with the cartesian system taught in schools.
* When held upright, facing the user:
*
* /
* +--------------------+ z
* | |
* | ..... |
* | * ..... * |
* ^ | ..... |
* | | |
* y +--------------------+ x-->
*
*
* NORTH_EAST_DOWN: Data will be returned based on the industry convention of the North East Down (NED) system.
* When held upright, facing the user:
*
* z
* +--------------------+ /
* | |
* | ..... |
* | * ..... * |
* ^ | ..... |
* | | |
* x +--------------------+ y-->
*
*/
enum MicroBitCoordinateSystem {
RAW = 0,
SIMPLE_CARTESIAN = 1,
NORTH_EAST_DOWN = 2
}
class Accelerometer {
runtime: Runtime;
private sigma;
private lastGesture;
private currentGesture;
private sample;
private shake;
private pitch;
private roll;
private id;
isActive: boolean;
sampleRange: number;
constructor(runtime: Runtime);
setSampleRange(range: number): void;
activate(): void;
/**
* Reads the acceleration data from the accelerometer, and stores it in our buffer.
* This is called by the tick() member function, if the interrupt is set!
*/
update(x: number, y: number, z: number): void;
instantaneousAccelerationSquared(): number;
/**
* Service function. Determines the best guess posture of the device based on instantaneous data.
* This makes no use of historic data (except for shake), and forms this input to the filter implemented in updateGesture().
*
* @return A best guess of the current posture of the device, based on instantaneous data.
*/
private instantaneousPosture;
updateGesture(): void;
/**
* Reads the X axis value of the latest update from the accelerometer.
* @param system The coordinate system to use. By default, a simple cartesian system is provided.
* @return The force measured in the X axis, in milli-g.
*
* Example:
* @code
* uBit.accelerometer.getX();
* uBit.accelerometer.getX(RAW);
* @endcode
*/
getX(system?: MicroBitCoordinateSystem): number;
/**
* Reads the Y axis value of the latest update from the accelerometer.
* @param system The coordinate system to use. By default, a simple cartesian system is provided.
* @return The force measured in the Y axis, in milli-g.
*
* Example:
* @code
* uBit.accelerometer.getY();
* uBit.accelerometer.getY(RAW);
* @endcode
*/
getY(system?: MicroBitCoordinateSystem): number;
/**
* Reads the Z axis value of the latest update from the accelerometer.
* @param system The coordinate system to use. By default, a simple cartesian system is provided.
* @return The force measured in the Z axis, in milli-g.
*
* Example:
* @code
* uBit.accelerometer.getZ();
* uBit.accelerometer.getZ(RAW);
* @endcode
*/
getZ(system?: MicroBitCoordinateSystem): number;
/**
* Provides a rotation compensated pitch of the device, based on the latest update from the accelerometer.
* @return The pitch of the device, in degrees.
*
* Example:
* @code
* uBit.accelerometer.getPitch();
* @endcode
*/
getPitch(): number;
getPitchRadians(): number;
/**
* Provides a rotation compensated roll of the device, based on the latest update from the accelerometer.
* @return The roll of the device, in degrees.
*
* Example:
* @code
* uBit.accelerometer.getRoll();
* @endcode
*/
getRoll(): number;
getRollRadians(): number;
/**
* Recalculate roll and pitch values for the current sample.
* We only do this at most once per sample, as the necessary trigonemteric functions are rather
* heavyweight for a CPU without a floating point unit...
*/
recalculatePitchRoll(): void;
}
class AccelerometerState {
accelerometer: Accelerometer;
useShake: boolean;
private tiltDecayer;
private element;
constructor(runtime: Runtime);
attachEvents(element: HTMLElement | SVGElement): void;
private updateTilt;
}
}
declare namespace pxsim {
interface AccelerometerBoard extends CommonBoard {
accelerometerState: AccelerometerState;
invertAccelerometerXAxis?: boolean;
invertAccelerometerYAxis?: boolean;
invertAccelerometerZAxis?: boolean;
}
function accelerometer(): AccelerometerState;
}
declare namespace pxsim {
interface EdgeConnectorBoard {
edgeConnectorState: EdgeConnectorState;
}
}
declare namespace pxsim.pxtcore {
function getPin(id: number): pxsim.Pin;
function lookupPinCfg(key: number): pxsim.Pin;
function getPinCfg(key: number): pxsim.Pin;
}
declare namespace pxsim.pxtcore {
function registerWithDal(id: number, evid: number, handler: RefAction, mode?: number): void;
function deepSleep(): void;
}
declare namespace pxsim.BufferMethods {
function hash(buf: RefBuffer, bits: number): number;
}
declare namespace pxsim.control {
let runInParallel: typeof thread.runInBackground;
let delay: typeof thread.pause;
function reset(): void;
function waitMicros(micros: number): void;
function deviceName(): string;
function _ramSize(): number;
function deviceSerialNumber(): number;
function deviceLongSerialNumber(): RefBuffer;
function deviceDalVersion(): string;
function internalOnEvent(id: number, evid: number, handler: RefAction): void;
function waitForEvent(id: number, evid: number): void;
function allocateNotifyEvent(): number;
function raiseEvent(id: number, evid: number, mode: number): void;
function millis(): number;
function micros(): number;
function delayMicroseconds(us: number): void;
function createBuffer(size: number): RefBuffer;
function dmesg(msg: string): void;
function setDebugFlags(flags: number): void;
function heapSnapshot(): void;
function dmesgPtr(msg: string, ptr: any): void;
function dmesgValue(ptr: any): void;
function gc(): void;
function profilingEnabled(): boolean;
function __log(priority: number, str: string): void;
function heapDump(): void;
function isUSBInitialized(): boolean;
}
declare namespace pxsim {
const enum PXT_PANIC {
PANIC_CODAL_OOM = 20,
PANIC_GC_OOM = 21,
PANIC_GC_TOO_BIG_ALLOCATION = 22,
PANIC_CODAL_HEAP_ERROR = 30,
PANIC_CODAL_NULL_DEREFERENCE = 40,
PANIC_CODAL_USB_ERROR = 50,
PANIC_CODAL_HARDWARE_CONFIGURATION_ERROR = 90,
PANIC_INVALID_BINARY_HEADER = 901,
PANIC_OUT_OF_BOUNDS = 902,
PANIC_REF_DELETED = 903,
PANIC_SIZE = 904,
PANIC_INVALID_VTABLE = 905,
PANIC_INTERNAL_ERROR = 906,
PANIC_NO_SUCH_CONFIG = 907,
PANIC_NO_SUCH_PIN = 908,
PANIC_INVALID_ARGUMENT = 909,
PANIC_MEMORY_LIMIT_EXCEEDED = 910,
PANIC_SCREEN_ERROR = 911,
PANIC_MISSING_PROPERTY = 912,
PANIC_INVALID_IMAGE = 913,
PANIC_CALLED_FROM_ISR = 914,
PANIC_HEAP_DUMPED = 915,
PANIC_CAST_FIRST = 980,
PANIC_CAST_FROM_UNDEFINED = 980,
PANIC_CAST_FROM_BOOLEAN = 981,
PANIC_CAST_FROM_NUMBER = 982,
PANIC_CAST_FROM_STRING = 983,
PANIC_CAST_FROM_OBJECT = 984,
PANIC_CAST_FROM_FUNCTION = 985,
PANIC_CAST_FROM_NULL = 989
}
}
declare namespace pxsim.pxtcore {
function sendMessage(channel: string, message: RefBuffer, parentOnly?: boolean): void;
function peekMessageChannel(): string;
function readMessageData(): RefBuffer;
}
declare namespace pxsim {
const CONTROL_MESSAGE_EVT_ID = 2999;
const CONTROL_MESSAGE_RECEIVED = 1;
class ControlMessageState {
private board;
messages: SimulatorControlMessage[];
enabled: boolean;
constructor(board: CommonBoard);
private messageHandler;
enqueue(message: SimulatorControlMessage): void;
peek(): SimulatorControlMessage;
read(): SimulatorControlMessage;
}
interface ControlMessageBoard extends CommonBoard {
controlMessageState: ControlMessageState;
}
function getControlMessageState(): ControlMessageState;
}
declare namespace pxsim {
interface CommonBoard extends CoreBoard, EdgeConnectorBoard, EventBusBoard {
bus: EventBus;
buttonState: CommonButtonState;
edgeConnectorState: EdgeConnectorState;
}
function board(): CommonBoard;
}
declare namespace pxsim.loops {
let pause: typeof thread.pause;
let forever: typeof thread.forever;
}
declare namespace pxsim.browserEvents {
function mouseX(): number;
function mouseY(): number;
function wheelDx(): number;
function wheelDy(): number;
function wheelDz(): number;
}
declare namespace pxsim.browserEvents {
enum Key {
Zero = 48,
One = 49,
Two = 50,
Three = 51,
Four = 52,
Five = 53,
Six = 54,
Seven = 55,
Eight = 56,
Nine = 57,
BackTick = 192,
Hyphen = 189,
Equals = 187,
Q = 81,
W = 87,
E = 69,
R = 82,
T = 84,
Y = 89,
U = 85,
I = 73,
O = 79,
P = 80,
OpenBracket = 219,
CloseBracket = 221,
BackSlash = 220,
A = 65,
S = 83,
D = 68,
F = 70,
G = 71,
H = 72,
Space = 32,
PageUp = 33,
J = 74,
K = 75,
L = 76,
SemiColon = 186,
Apostrophe = 222,
Z = 90,
X = 88,
C = 67,
V = 86,
B = 66,
N = 78,
M = 77,
Comma = 188,
Period = 190,
ForwardSlash = 191,
Shift = 16,
Enter = 13,
CapsLock = 20,
Tab = 9,
Control = 17,
Meta = 91,
Alt = 18,
ArrowUp = 38,
ArrowDown = 40,
ArrowLeft = 37,
ArrowRight = 39,
PageDown = 34,
End = 35,
Home = 36
}
function onKeyboardEvent(event: KeyboardEvent, pressed: boolean): void;
function getValueForKey(event: KeyboardEvent): 0 | Key;
}
declare namespace pxsim.browserEvents {
interface BrowserEventsBoard extends CommonBoard {
mouseState: MouseState;
}
type MouseEvent = "pointerdown" | "pointerup" | "pointermove" | "pointerleave" | "pointerenter" | "pointercancel" | "pointerover" | "pointerout";
class MouseState {
protected x: number;
protected y: number;
protected dx: number;
protected dy: number;
protected dz: number;
protected onMove: any;
protected onWheel: any;
onEvent(event: PointerEvent, x: number, y: number): void;
onWheelEvent(dx: number, dy: number, dz: number): void;
mouseX(): number;
mouseY(): number;
wheelDx(): number;
wheelDy(): number;
wheelDz(): number;
}
}
declare namespace pxsim {
class CommonButton extends Button {
private _pressedTime;
private _clickedTime;
private _wasPressed;
setPressed(p: boolean): void;
wasPressed(): boolean;
pressureLevel(): 0 | 512;
isPressed(): boolean;
}
class CommonButtonState {
usesButtonAB: boolean;
buttons: CommonButton[];
buttonsByPin: Map<CommonButton>;
constructor(buttons?: CommonButton[]);
}
}
declare namespace pxsim.pxtcore {
function getButtonByPin(pinId: number): CommonButton;
function getButtonByPinCfg(key: number): CommonButton;
function getButton(buttonId: number): CommonButton;
}
declare namespace pxsim.ButtonMethods {
function onEvent(button: pxsim.Button, ev: number, body: pxsim.RefAction): void;
function isPressed(button: pxsim.Button): boolean;
function pressureLevel(button: pxsim.Button): number;
function wasPressed(button: pxsim.Button): boolean;
function id(button: pxsim.Button): number;
}
declare namespace pxsim.DigitalInOutPinMethods {
function pushButton(pin: pins.DigitalInOutPin): Button;
}
declare namespace pxsim.network {
function cableSendPacket(buf: RefBuffer): void;
function cablePacket(): RefBuffer;
function onCablePacket(body: RefAction): void;
function onCableError(body: RefAction): void;
}
declare namespace pxsim {
class CableState {
packet: RefBuffer;
packetReceived: boolean;
PULSE_CABLE_COMPONENT_ID: number;
PULSE_PACKET_EVENT: number;
PULSE_PACKET_ERROR_EVENT: number;
send(buf: RefBuffer): void;
listen(body: RefAction): void;
listenError(body: RefAction): void;
receive(buf: RefBuffer): void;
}
interface CableBoard extends CommonBoard {
cableState: CableState;
}
function getCableState(): CableState;
}
declare namespace pxsim {
class AnalogSensorState {
id: number;
min: number;
max: number;
lowThreshold: number;
highThreshold: number;
sensorUsed: boolean;
private level;
private state;
constructor(id: number, min?: number, max?: number, lowThreshold?: number, highThreshold?: number);
setUsed(): void;
setLevel(level: number): void;
getLevel(): number;
setLowThreshold(value: number): void;
setHighThreshold(value: number): void;
private clampValue;
private setState;
}
}
declare namespace pxsim.visuals {
function mkBtnSvg(xy: Coord): SVGAndSize<SVGGElement>;
const BUTTON_PAIR_STYLE: string;
class ButtonPairView implements IBoardPart<ButtonPairState> {
element: SVGElement;
defs: SVGElement[];
style: string;
private state;
private bus;
private aBtn;
private bBtn;
private abBtn;
init(bus: EventBus, state: ButtonPairState): void;
moveToCoord(xy: Coord): void;
updateState(): void;
updateTheme(): void;
private mkBtns;
private attachEvents;
}
}
declare namespace pxsim {
enum PinFlags {
Unused = 0,
Digital = 1,
Analog = 2,
Input = 4,
Output = 8,
Touch = 16
}
class Pin {
id: number;
constructor(id: number);
touched: boolean;
value: number;
period: number;
servoAngle: number;
mode: PinFlags;
pitch: boolean;
pull: number;
eventMode: number;
used: boolean;
servoContinuous: boolean;
setValue(value: number): void;
digitalReadPin(): number;
digitalWritePin(value: number): void;
setPull(pull: number): void;
analogReadPin(): number;
analogWritePin(value: number): void;
analogSetPeriod(micros: number): void;
servoWritePin(value: number): void;
servoSetContinuous(continuous: boolean): void;
servoSetPulse(pinId: number, micros: number): void;
isTouched(): boolean;
onEvent(ev: number, handler: RefAction): void;
}
class SerialDevice {
tx: pins.DigitalInOutPin;
rx: pins.DigitalInOutPin;
private id;
private baudRate;
private rxBuffer;
private txBuffer;
constructor(tx: pins.DigitalInOutPin, rx: pins.DigitalInOutPin, id: number);
setTxBufferSize(size: number): void;
setRxBufferSize(size: number): void;
read(): number;
readBuffer(): RefBuffer;
writeBuffer(buffer: any): void;
setBaudRate(rate: number): void;
redirect(tx: pins.DigitalInOutPin, rx: pins.DigitalInOutPin, rate: number): void;
onEvent(event: number, handler: RefAction): void;
onDelimiterReceived(delimiter: number, handler: RefAction): void;
}
class SPI {
mosi: pins.DigitalInOutPin;
miso: pins.DigitalInOutPin;
sck: pins.DigitalInOutPin;
frequency: number;
mode: number;
constructor(mosi: pins.DigitalInOutPin, miso: pins.DigitalInOutPin, sck: pins.DigitalInOutPin);
write(value: number): number;
transfer(command: RefBuffer, response: RefBuffer): void;
setFrequency(frequency: number): void;
setMode(mode: number): void;
}
class I2C {
sda: pins.DigitalInOutPin;
scl: pins.DigitalInOutPin;
constructor(sda: pins.DigitalInOutPin, scl: pins.DigitalInOutPin);
readBuffer(address: number, size: number, repeat?: boolean): RefBuffer;
writeBuffer(address: number, buf: RefBuffer, repeat?: boolean): number;
}
interface EdgeConnectorProps {
pins: number[];
servos?: {
[name: string]: number;
};
}
class EdgeConnectorState {
props: EdgeConnectorProps;
pins: Pin[];
private _i2cs;
private _spis;
private _serials;
constructor(props: EdgeConnectorProps);
getPin(id: number): Pin;
createI2C(sda: pins.DigitalInOutPin, scl: pins.DigitalInOutPin): I2C;
createSPI(mosi: pins.DigitalInOutPin, miso: pins.DigitalInOutPin, sck: pins.DigitalInOutPin): SPI;
createSerialDevice(tx: pins.DigitalInOutPin, rx: pins.DigitalInOutPin, id: number): SerialDevice;
}
}
declare namespace pxsim.configStorage {
function setBuffer(key: string, value: RefBuffer): void;
function getBuffer(key: string): RefBuffer;
function removeItem(key: string): void;
function clear(): void;
}
declare namespace pxsim.visuals {
function mkLedPart(xy?: Coord): SVGElAndSize;
class LedView implements IBoardPart<EdgeConnectorState> {
element: SVGElement;
defs: SVGElement[];
private led;
private text;
private parsePinString;
private color;
private part;
private bus;
style: string;
private state;
private pin;
private currentValue;
private currentMode;
constructor(parsePinString: (s: string) => Pin);
init(bus: EventBus, state: EdgeConnectorState, svgEl: SVGSVGElement, otherParams: Map<string>): void;
initDom(): void;
moveToCoord(xy: Coord): void;
updateTheme(): void;
updateState(): void;
}
}
declare namespace pxsim.visuals {
function mkMicroServoPart(xy?: Coord): SVGElAndSize;
class MicroServoView implements IBoardPart<EdgeConnectorState> {
style: string;
overElement: SVGElement;
element: SVGElement;
defs: SVGElement[];
state: EdgeConnectorState;
bus: EventBus;
private currentAngle;
private targetAngle;
private lastAngleTime;
private pin;
private crankEl;
private crankTransform;
init(bus: EventBus, state: EdgeConnectorState, svgEl: SVGSVGElement, otherParams: Map<string>): void;
initDom(): void;
moveToCoord(xy: visuals.Coord): void;
updateState(): void;
private renderAngle;
updateTheme(): void;
}
}
declare namespace pxsim {
enum NeoPixelMode {
RGB = 1,
RGBW = 2,
RGB_RGB = 3,
DotStar = 4
}
class CommonNeoPixelState {
buffer: Uint8Array;
mode: number;
width: number;
get length(): number;
get stride(): 3 | 4;
pixelColor(pixel: number): number[];
}
interface CommonNeoPixelStateConstructor {
(pin: Pin): CommonNeoPixelState;
}
interface LightBoard {
tryGetNeopixelState(pinId: number): CommonNeoPixelState;
neopixelState(pinId: number): CommonNeoPixelState;
}
function neopixelState(pinId: number): CommonNeoPixelState;
function sendBufferAsm(buffer: RefBuffer, pin: number): void;
}
declare namespace pxsim.light {
function sendBuffer(pin: {
id: number;
}, clk: {
id: number;
}, mode: number, b: RefBuffer): void;
}
declare namespace pxsim.visuals {
function mkNeoPixelPart(xy?: Coord): SVGElAndSize;
class NeoPixel {
el: SVGElement;
cy: number;
constructor(xy?: Coord, width?: number);
setRgb(rgb: [number, number, number]): void;
}
class NeoPixelCanvas {
cols: number;
canvas: SVGSVGElement;
private pixels;
private viewBox;
private background;
constructor(pin: number, cols?: number);
private updateViewBox;
update(colors: number[][]): void;
setLoc(xy: Coord): void;
}
class NeoPixelView implements IBoardPart<CommonNeoPixelStateConstructor> {
parsePinString: (name: string) => Pin;
style: string;
element: SVGElement;
overElement: SVGElement;
defs: SVGElement[];
private state;
private canvas;
private part;
private stripGroup;
private lastLocation;
private pin;
constructor(parsePinString: (name: string) => Pin);
init(bus: EventBus, state: CommonNeoPixelStateConstructor, svgEl: SVGSVGElement, otherParams: Map<string>): void;
private makeCanvas;
moveToCoord(xy: Coord): void;
private updateStripLoc;
updateState(): void;
updateTheme(): void;
}
}
declare namespace pxsim.visuals {
function mkPhotoCellPart(xy?: Coord): SVGElAndSize;
class PhotoCellView implements IBoardPart<EdgeConnectorState> {
element: SVGElement;
defs: SVGElement[];
private text;
private parsePinString;
private color;
private part;
private bus;
style: string;
private pin;
private currentValue;
private currentMode;
constructor(parsePinString: (s: string) => Pin);
init(bus: EventBus, state: EdgeConnectorState, svgEl: SVGSVGElement, otherParams: Map<string>): void;
initDom(): void;
moveToCoord(xy: Coord): void;
updateTheme(): void;
updateState(): void;
}
}
declare namespace pxsim.pins {
class CommonPin extends Pin {
}
class DigitalInOutPin extends CommonPin {
}
class AnalogInOutPin extends CommonPin {
}
class PwmOnlyPin extends CommonPin {
}
class PwmPin extends CommonPin {
}
function markUsed(pin: Pin): void;
}
declare namespace pxsim.DigitalInOutPinMethods {
function digitalRead(name: pins.DigitalInOutPin): number;
/**
* Set a pin or connector value to either 0 or 1.
* @param value value to set on the pin, 1 eg,0
*/
function digitalWrite(name: pins.DigitalInOutPin, value: number): void;
/**
* Configures this pin to a digital input, and generates events where the timestamp is the duration
* that this pin was either ``high`` or ``low``.
*/
function onPulsed(name: pins.DigitalInOutPin, high: boolean, body: RefAction): void;
function onEvent(name: pins.DigitalInOutPin, ev: number, body: RefAction): void;
/**
* Returns the duration of a pulse in microseconds
* @param value the value of the pulse (default high)
* @param maximum duration in micro-seconds
*/
function pulseIn(name: pins.DigitalInOutPin, high: boolean, maxDuration?: number): number;
/**
* Configures the pull of this pin.
* @param pull one of the mbed pull configurations: PullUp, PullDown, PullNone
*/
function setPull(name: pins.DigitalInOutPin, pull: number): void;
/**
* Get the pin state (pressed or not). Requires to hold the ground to close the circuit.
* @param name pin used to detect the touch
*/
function isPressed(name: pins.DigitalInOutPin): boolean;
}
declare namespace pxsim.AnalogInPinMethods {
/**
* Read the connector value as analog, that is, as a value comprised between 0 and 1023.
*/
function analogRead(name: pins.AnalogInOutPin): number;
}
declare namespace pxsim.AnalogOutPinMethods {
/**
* Set the connector value as analog. Value must be comprised between 0 and 1023.
* @param value value to write to the pin between ``0`` and ``1023``. eg:1023,0
*/
function analogWrite(name: pins.AnalogInOutPin, value: number): void;
}
declare namespace pxsim.PwmOnlyPinMethods {
function analogSetPeriod(name: pins.PwmOnlyPin, micros: number): void;
function servoWrite(name: pins.PwmOnlyPin, value: number): void;
function servoSetContinuous(name: pins.PwmOnlyPin, continuous: boolean): void;
function servoSetPulse(name: pins.PwmOnlyPin, micros: number): void;
}
declare namespace pxsim.pins {
function pinByCfg(key: number): Pin;
function pulseDuration(): number;
function createBuffer(sz: number): RefBuffer;
function createI2C(sda: DigitalInOutPin, scl: DigitalInOutPin): I2C;
function createSPI(mosi: DigitalInOutPin, miso: DigitalInOutPin, sck: DigitalInOutPin): SPI;
}
declare namespace pxsim.I2CMethods {
function readBuffer(i2c: I2C, address: number, size: number, repeat?: boolean): RefBuffer;
function writeBuffer(i2c: I2C, address: number, buf: RefBuffer, repeat?: boolean): number;
}
declare namespace pxsim.SPIMethods {
function write(device: pxsim.SPI, value: number): number;
function transfer(device: pxsim.SPI, command: RefBuffer, response: RefBuffer): void;
function setFrequency(device: pxsim.SPI, frequency: number): void;
function setMode(device: pxsim.SPI, mode: number): void;
}
declare namespace pxsim.SerialDeviceMethods {
function setTxBufferSize(device: SerialDevice, size: number): void;
function setRxBufferSize(device: SerialDevice, size: number): void;
function read(device: SerialDevice): number;
function readBuffer(device: SerialDevice): RefBuffer;
function writeBuffer(device: SerialDevice, buffer: RefBuffer): void;
function setBaudRate(device: SerialDevice, rate: number): void;
function redirect(device: SerialDevice, tx: pins.DigitalInOutPin, rx: pins.DigitalInOutPin, rate: number): void;
function onEvent(device: SerialDevice, event: number, handler: RefAction): void;
function onDelimiterReceived(device: SerialDevice, delimiter: number, handler: RefAction): void;
}
declare namespace pxsim.serial {
function internalCreateSerialDevice(tx: pins.DigitalInOutPin, rx: pins.DigitalInOutPin, id: number): SerialDevice;
}
declare namespace pxsim.visuals {
function mkSideSwitchPart(xy?: Coord): SVGElAndSize;
class ToggleComponentVisual implements IBoardPart<ToggleStateConstructor> {
style: string;
element: SVGElement;
overElement: SVGElement;
defs: SVGElement[];
private onElement;
private offElement;
private state;
private currentlyOn;
private parsePinString;
constructor(parsePinString: (str: string) => Pin);
moveToCoord(xy: Coord): void;
init(bus: EventBus, state: ToggleStateConstructor, svgEl: SVGSVGElement, otherParams: Map<string>): void;
updateState(): void;
updateTheme(): void;
private initImage;
}
}
declare namespace pxsim {
class ToggleState {
private pin;
constructor(pin: Pin);
toggle(): void;
on(): boolean;
}
interface ToggleStateConstructor {
(pin: Pin): ToggleState;
}
}
declare namespace pxsim.info {
}
declare namespace pxsim.keymap {
enum Key {
None = 0,
Left = 1,
Up = 2,
Right = 3,
Down = 4,
A = 5,
B = 6,
Menu = 7,
Screenshot = -1,
Gif = -2,
Reset = -3,
TogglePause = -4
}
function _setPlayerKeys(player: number, // player number is 1-based
up: number, down: number, left: number, right: number, A: number, B: number): void;
function _setSystemKeys(screenshot: number, gif: number, menu: number, reset: number): void;
}
declare namespace pxsim {
import Key = pxsim.keymap.Key;
interface KeymapBoard extends EventBusBoard {
keymapState: KeymapState;
}
function getKeymapState(): KeymapState;
class KeymapState {
keymap: {
[keyCode: number]: Key;
};
altmap: {
[keyCode: number]: Key;
};
mappings: {
[name: string]: number[];
};
constructor();
setPlayerKeys(player: number, // player number is 1-based
up: number, down: number, left: number, right: number, A: number, B: number): void;
setSystemKeys(screenshot: number, gif: number, menu: number, reset: number): void;
getKey(keyCode: number): Key;
private saveMap;
private clearMap;
}
}
declare namespace pxsim.multiplayer {
function postImage(im: pxsim.RefImage): void;
function postIcon(iconType: IconType, slot: number, im: pxsim.RefImage): void;
function getCurrentImage(): pxsim.RefImage;
function setOrigin(origin: "client" | "server" | undefined): void;
function getOrigin(): string;
}
declare namespace pxsim {
interface MultiplayerBoard extends EventBusBoard {
multiplayerState: MultiplayerState;
}
function getMultiplayerState(): MultiplayerState;
interface SimulatorMultiplayerMessage extends SimulatorBroadcastMessage {
broadcast: true;
type: "multiplayer";
content: string;
origin?: "server" | "client";
clientNumber?: number;
id?: number;
}
interface MultiplayerImageMessage extends SimulatorMultiplayerMessage {
content: "Image";
image: RefBuffer;
palette: Uint8Array;
}
enum IconType {
Player = 0,
Reaction = 1
}
interface MultiplayerIconMessage extends SimulatorMultiplayerMessage {
content: "Icon";
icon: RefBuffer;
slot: number;
iconType: IconType;
palette: Uint8Array;
}
interface MultiplayerButtonEvent extends SimulatorMultiplayerMessage {
content: "Button";
button: number;
state: "Pressed" | "Released" | "Held";
}
interface MultiplayerAudioEvent extends SimulatorMultiplayerMessage {
content: "Audio";
instruction: "playinstructions" | "muteallchannels";
soundbuf?: Uint8Array;
}
interface MultiplayerConnectionEvent extends SimulatorMultiplayerMessage {
content: "Connection";
slot: number;
connected: boolean;
}
class MultiplayerState {
lastMessageId: number;
origin: string;
backgroundImage: RefImage;
constructor();
send(msg: SimulatorMultiplayerMessage): void;
init(origin: string): void;
setButton(key: number, isPressed: boolean): void;
registerConnectionState(player: number, connected: boolean): void;
protected messageHandler(msg: SimulatorMessage): void;
}
}
declare namespace pxsim.gamepad {
function setButton(index: number, up: boolean): void;
function move(index: number, x: number, y: number): void;
function setThrottle(index: number, value: number): void;
}
declare namespace pxsim {
}
declare namespace pxsim.network {
function infraredSendPacket(buf: RefBuffer): void;
function infraredPacket(): RefBuffer;
function onInfraredPacket(body: RefAction): void;
function onInfraredError(body: RefAction): void;
}
declare namespace pxsim {
class InfraredState {
private readonly board;
packet: RefBuffer;
packetReceived: boolean;
IR_COMPONENT_ID: number;
IR_PACKET_EVENT: number;
IR_PACKET_ERROR_EVENT: number;
constructor(board: BaseBoard);
private handleMessage;
send(buf: RefBuffer): void;
listen(body: RefAction): void;
listenError(body: RefAction): void;
receive(buf: Uint8Array): void;
}
interface InfraredBoard extends CommonBoard {
irState: InfraredState;
}
function getInfraredState(): InfraredState;
}
declare namespace pxsim.keyboard {
function __flush(): void;
function __type(s: string): void;
function __key(c: string, event: number): void;
function __mediaKey(key: number, event: number): void;
function __functionKey(key: number, event: number): void;
function __modifierKey(key: number, event: number): void;
}
declare namespace pxsim {
class LCDState {
lines: number;
columns: number;
cursorPos: [number, number];
text: string[];
backLightColor: string;
cursor: boolean;
display: boolean;
blink: boolean;
sensorUsed: boolean;
constructor(lines?: number, columns?: number);
clear(): void;
setUsed(): void;
}
interface LCDBoard extends CommonBoard {
lcdState: LCDState;
}
function lcdState(): LCDState;
}
declare namespace pxsim.lcd {
function __write8(value: number, char_mode: boolean): void;
}
declare namespace pxsim.visuals {
function mkLCDPart(xy?: Coord): SVGElAndSize;
class LCDView implements IBoardPart<LCDState> {
style: string;
element: SVGElement;
defs: SVGElement[];
image: SVGSVGElement;
private backlight;
private screen;
private part;
private bus;
private state;
constructor();
init(bus: EventBus, state: LCDState, svgEl: SVGSVGElement, otherParams: Map<string>): void;
initDom(): void;
setChar(column: number, line: number, value: string): void;
moveToCoord(xy: Coord): void;
updateTheme(): void;
updateState(): void;
}
}
declare namespace pxsim.input {
function lightLevel(): number;
function onLightConditionChanged(condition: number, body: RefAction): void;
function setLightThreshold(condition: number, value: number): void;
}
declare namespace pxsim {
interface LightSensorBoard extends CommonBoard {
lightSensorState: AnalogSensorState;
}
function lightSensorState(): AnalogSensorState;
}
declare namespace pxsim.input {
function soundLevel(): number;
function onLoudSound(body: RefAction): void;
function setLoudSoundThreshold(value: number): void;
}
declare namespace pxsim {
interface MicrophoneBoard {
microphoneState: MicrophoneState;
}
class MicrophoneState extends AnalogSensorState {
onSoundRegistered: boolean;
soundLevelRequested: boolean;
private pingUsed;
pingSoundLevel: () => void;
}
function microphoneState(): MicrophoneState;
}
declare namespace pxsim.music {
function playInstructions(b: RefBuffer): Promise<void>;
function queuePlayInstructions(when: number, b: RefBuffer): void;
function stopPlaying(): void;
function forceOutput(mode: number): void;
const SEQUENCER_STOP_MESSAGE = 3243;
const SEQUENCER_TICK_MESSAGE = 3244;
const SEQUENCER_STATE_CHANGE_MESSAGE = 3245;
const SEQUENCER_LOOPED_MESSAGE = 3246;
function _createSequencer(): Promise<number>;
function _sequencerState(id: number): string;
function _sequencerCurrentTick(id: number): number;
function _sequencerPlaySong(id: number, song: RefBuffer, loop: boolean): void;
function _sequencerStop(id: number): void;
function _sequencerSetVolume(id: number, volume: number): void;
function _sequencerSetVolumeForAll(volume: number): void;
function _sequencerSetTrackVolume(id: number, trackIndex: number, volume: number): void;
function _sequencerSetDrumTrackVolume(id: number, trackIndex: number, drumIndex: number, volume: number): void;
function _sequencerDispose(id: number): void;
}
declare namespace pxsim.mouse {
function setButton(button: number, down: boolean): void;
function move(x: number, y: number): void;
function turnWheel(w: number): void;
}
declare namespace pxsim {
class AudioState {
private playing;
outputDestination_: number;
pitchPin_: Pin;
volume: number;
constructor();
startPlaying(): void;
stopPlaying(): void;
isPlaying(): boolean;
}
}
declare namespace pxsim.music {
function noteFrequency(note: number): number;
function setOutput(mode: number): void;
function setVolume(volume: number): void;
function setPitchPin(pin: Pin): void;
function setTone(buffer: RefBuffer): void;
function enableAmp(enabled: number): void;
function playTone(frequency: number, ms: number): void;
}
declare namespace pxsim {
interface MusicBoard extends CommonBoard {
audioState: AudioState;
getDefaultPitchPin(): Pin;
}
function getAudioState(): AudioState;
}
declare namespace pxsim.radio {
function raiseEvent(id: number, eventid: number): void;
function setGroup(id: number): void;
function setTransmitPower(power: number): void;
function setFrequencyBand(band: number): void;
function sendRawPacket(buf: RefBuffer): void;
function readRawPacket(): RefBuffer;
function onDataReceived(handler: RefAction): void;
function off(): void;
function on(): void;
}
declare namespace pxsim {
interface RadioBoard extends EventBusBoard {
radioState: RadioState;
}
function getRadioState(): RadioState;
interface PacketBuffer {
payload: SimulatorRadioPacketPayload;
rssi: number;
serial: number;
time: number;
}
interface SimulatorRadioPacketPayload {
bufferData?: Uint8Array;
}
interface RadioDAL {
ID_RADIO: number;
RADIO_EVT_DATAGRAM: number;
}
class RadioDatagram {
private runtime;
dal: RadioDAL;
datagram: PacketBuffer[];
lastReceived: PacketBuffer;
private _rssi;
constructor(runtime: Runtime, dal: RadioDAL);
get rssi(): number;
set rssi(value: number);
queue(packet: PacketBuffer): void;
send(payload: SimulatorRadioPacketPayload): void;
recv(): PacketBuffer;
onReceived(handler: RefAction): void;
private static defaultPacket;
}
class RadioState {
private readonly runtime;
private readonly board;
power: number;
transmitSerialNumber: boolean;
datagram: RadioDatagram;
groupId: number;
band: number;
enable: boolean;
constructor(runtime: Runtime, board: BaseBoard, dal: RadioDAL);
private handleMessage;
setGroup(id: number): void;
setTransmitPower(power: number): void;
setTransmitSerialNumber(sn: boolean): void;
setFrequencyBand(band: number): void;
off(): void;
on(): void;
raiseEvent(id: number, eventid: number): void;
receivePacket(packet: SimulatorRadioPacketMessage): void;
}
}
declare namespace pxsim.encoders {
function createRotaryEncoder(pinA: Pin, pinB: Pin): RotaryEncoder;
class RotaryEncoder {
pinA: Pin;
pinB: Pin;
position: number;
constructor(pinA: Pin, pinB: Pin, position: number);
get id(): number;
onChanged(handler: RefAction): void;
}
}
declare namespace pxsim.RotaryEncoderMethods {
function onChanged(encoder: pxsim.encoders.RotaryEncoder, handler: RefAction): void;
function position(encoder: pxsim.encoders.RotaryEncoder): number;
}
declare namespace pxsim {
class RefImage extends RefObject {
_width: number;
_height: number;
_bpp: number;
data: Uint8Array;
isStatic: boolean;
revision: number;
constructor(w: number, h: number, bpp: number);
scan(mark: (path: string, v: any) => void): void;
gcKey(): string;
gcSize(): number;
gcIsStatic(): boolean;
pix(x: number, y: number): number;
inRange(x: number, y: number): boolean;
color(c: number): number;
clamp(x: number, y: number): number[];
makeWritable(): void;
toDebugString(): string;
}
}
declare namespace pxsim.ImageMethods {
function XX(x: number): number;
function YY(x: number): number;
function width(img: RefImage): number;
function height(img: RefImage): number;
function isMono(img: RefImage): boolean;
function isStatic(img: RefImage): boolean;
function revision(img: RefImage): number;
function setPixel(img: RefImage, x: number, y: number, c: number): void;
function getPixel(img: RefImage, x: number, y: number): number;
function fill(img: RefImage, c: number): void;
function fillRect(img: RefImage, x: number, y: number, w: number, h: number, c: number): void;
function _fillRect(img: RefImage, xy: number, wh: number, c: number): void;
function mapRect(img: RefImage, x: number, y: number, w: number, h: number, c: RefBuffer): void;
function _mapRect(img: RefImage, xy: number, wh: number, c: RefBuffer): void;
function equals(img: RefImage, other: RefImage): boolean;
function getRows(img: RefImage, x: number, dst: RefBuffer): void;
function setRows(img: RefImage, x: number, src: RefBuffer): void;
function clone(img: RefImage): RefImage;
function flipX(img: RefImage): void;
function flipY(img: RefImage): void;
function transposed(img: RefImage): RefImage;
function copyFrom(img: RefImage, from: RefImage): void;
function scroll(img: RefImage, dx: number, dy: number): void;
function replace(img: RefImage, from: number, to: number): void;
function doubledX(img: RefImage): RefImage;
function doubledY(img: RefImage): RefImage;
function doubled(img: RefImage): RefImage;
function drawImage(img: RefImage, from: RefImage, x: number, y: number): void;
function drawTransparentImage(img: RefImage, from: RefImage, x: number, y: number): void;
function overlapsWith(img: RefImage, other: RefImage, x: number, y: number): boolean;
function _drawLine(img: RefImage, xy: number, wh: number, c: number): void;
function drawLine(img: RefImage, x0: number, y0: number, x1: number, y1: number, c: number): void;
function drawIcon(img: RefImage, icon: RefBuffer, x: number, y: number, color: number): void;
function _drawIcon(img: RefImage, icon: RefBuffer, xy: number, color: number): void;
function fillCircle(img: RefImage, cx: number, cy: number, r: number, c: number): void;
function _fillCircle(img: RefImage, cxy: number, r: number, c: number): void;
function fillTriangle(img: RefImage, x0: number, y0: number, x1: number, y1: number, x2: number, y2: number, c: number): void;
function _fillTriangle(img: RefImage, args: RefCollection): void;
function fillPolygon4(img: RefImage, x0: number, y0: number, x1: number, y1: number, x2: number, y2: number, x3: number, y3: number, c: number): void;
function _fillPolygon4(img: RefImage, args: RefCollection): void;
function _blitRow(img: RefImage, xy: number, from: RefImage, xh: number): void;
function blitRow(img: RefImage, x: number, y: number, from: RefImage, fromX: number, fromH: number): void;
function _blit(img: RefImage, src: RefImage, args: RefCollection): boolean;
function blit(dst: RefImage, src: RefImage, args: RefCollection): boolean;
}
declare namespace pxsim.image {
function byteHeight(h: number, bpp: number): number;
function bufW(data: Uint8Array): number;
function bufH(data: Uint8Array): number;
function isValidImage(buf: RefBuffer): boolean;
function create(w: number, h: number): RefImage;
function ofBuffer(buf: RefBuffer): RefImage;
function toBuffer(img: RefImage): RefBuffer;
function doubledIcon(buf: RefBuffer): RefBuffer;
}
declare namespace pxsim.pxtcore {
function updateScreen(img: RefImage): void;
function updateStats(s: string): void;
function setPalette(b: RefBuffer): void;
function setupScreenStatusBar(barHeight: number): void;
function updateScreenStatusBar(img: RefImage): void;
function setScreenBrightness(b: number): void;
}
declare namespace pxsim {
class ScreenState {
width: number;
height: number;
screen: Uint32Array;
palette: Uint32Array;
lastImage: RefImage;
lastImageFlushTime: number;
changed: boolean;
stats: string;
brightness: number;
onChange: () => void;
constructor(paletteSrc: string[], w?: number, h?: number);
setScreenBrightness(b: number): void;
paletteToUint8Array(): Uint8Array;
setPaletteFromHtmlColors(src: string[]): void;
setPalette(buf: RefBuffer): void;
bpp(): 1 | 4;
didChange(): boolean;
maybeForceUpdate(): void;
showImage(img: RefImage): void;
updateStats(stats: string): void;
bindToSvgImage(lcd: SVGImageElement): void;
setupScreenStatusBar(barHeight: number): void;
updateScreenStatusBar(img: RefImage): void;
}
interface ScreenBoard extends CommonBoard {
screenState: ScreenState;
}
function getScreenState(): ScreenState;
}
declare namespace pxsim.visuals {
function mkScreenPart(xy?: Coord): SVGElAndSize;
class ScreenView implements IBoardPart<ScreenState> {
bus: pxsim.EventBus;
style: string;
element: SVGElement;
overElement?: SVGElement;
defs: SVGElement[];
state: ScreenState;
canvas: SVGImageElement;
lastLocation: Coord;
constructor();
init(bus: EventBus, state: ScreenState, svgEl: SVGSVGElement, otherParams: Map<string>): void;
moveToCoord(xy: visuals.Coord): void;
private updateLoc;
updateState(): void;
updateTheme(): void;
}
}
declare namespace pxsim.settings {
function _set(key: string, buf: RefBuffer): 0 | -1;
function _remove(key: string): 0 | -1;
function _exists(key: string): boolean;
function _get(key: string): RefBuffer;
function _userClean(): void;
function _list(prefix: string): RefCollection;
}
declare namespace pxsim.ShaderMethods {
function _mergeImage(dst: RefImage, src: RefImage, xy: number): void;
function _mapImage(dst: RefImage, src: RefImage, xy: number, buf: RefBuffer): void;
}
declare namespace pxsim {
class StorageState {
files: pxsim.Map<number[]>;
}
interface StorageBoard extends CommonBoard {
storageState: StorageState;
}
function storageState(): StorageState;
}
declare namespace pxsim.storage {
function init(): void;
function appendBuffer(filename: string, data: RefBuffer): void;
function overwriteWithBuffer(filename: string, data: RefBuffer): void;
function exists(filename: string): boolean;
function remove(filename: string): void;
function size(filename: string): number;
function readAsBuffer(filename: string): RefBuffer;
}
declare namespace pxsim {
interface SlideSwitchBoard extends CommonBoard {
slideSwitchState: SlideSwitchState;
}
}
declare namespace pxsim {
class SlideSwitchState {
static id: number;
private left;
setState(left: boolean): void;
isLeft(): boolean;
}
}
declare namespace pxsim.input {
function onSwitchMoved(direction: number, body: RefAction): void;
function switchRight(): boolean;
}
declare namespace pxsim.tts {
function _getLanguageCode(): string;
function _speakAsync(text: string, pitch?: number, rate?: number, volume?: number, language?: string, onStart?: RefAction, onBoundary?: RefAction): Promise<void>;
function _pause(): void;
function _isPaused(): boolean;
function _resume(): void;
function _cancel(): void;
}
declare namespace pxsim {
interface TemperatureBoard extends CommonBoard {
thermometerState: AnalogSensorState;
thermometerUnitState: TemperatureUnit;
}
function thermometerState(): AnalogSensorState;
function setThermometerUnit(unit: TemperatureUnit): void;
}
declare namespace pxsim {
enum TemperatureUnit {
Celsius = 0,
Fahrenheit = 1
}
}
declare namespace pxsim.input {
function temperature(unit: number): number;
function onTemperatureConditionChanged(condition: number, temperature: number, unit: number, body: RefAction): void;
}
declare namespace pxsim {
interface CapTouchBoard extends CommonBoard {
touchButtonState: TouchButtonState;
}
}
declare namespace pxsim {
class CapacitiveSensorState {
capacity: number[];
reading: boolean[];
mapping: Map<number>;
constructor(mapping: Map<number>);
private getCap;
readCap(pinId: number, samples: number): number;
isReadin