BangleApps/typescript/types/main.d.ts

13341 lines
525 KiB
TypeScript

// Type definitions for Espruino latest
// Project: http://www.espruino.com/, https://github.com/espruino/espruinotools// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
/// <reference path="other.d.ts" />
// TYPES
/**
* Menu item that holds a boolean value.
*/
type MenuBooleanItem = {
value: boolean;
format?: (value: boolean) => string;
onchange?: (value: boolean) => void;
};
/**
* Menu item that holds a numerical value.
*/
type MenuNumberItem = {
value: number;
format?: (value: number) => string;
onchange?: (value: number) => void;
step?: number;
min?: number;
max?: number;
wrap?: boolean;
};
/**
* Options passed to a menu.
*/
type MenuOptions = {
title?: string;
back?: () => void;
selected?: number;
fontHeight?: number;
scroll?: number;
x?: number;
y?: number;
x2?: number;
y2?: number;
cB?: number;
cF?: number;
cHB?: number;
cHF?: number;
predraw?: (g: Graphics) => void;
preflip?: (g: Graphics, less: boolean, more: boolean) => void;
};
/**
* Object containing data about a menu to pass to `E.showMenu`.
*/
type Menu = {
""?: MenuOptions;
[key: string]:
| MenuOptions
| (() => void)
| MenuBooleanItem
| MenuNumberItem
| { value: string; onchange?: () => void }
| undefined;
};
/**
* Menu instance.
*/
type MenuInstance = {
draw: () => void;
move: (n: number) => void;
select: () => void;
};
declare const BTN1: Pin;
declare const BTN2: Pin;
declare const BTN3: Pin;
declare const BTN4: Pin;
declare const BTN5: Pin;
declare const g: Graphics<false>;
type WidgetArea = "tl" | "tr" | "bl" | "br";
type Widget = {
area: WidgetArea;
width: number;
sortorder?: number;
draw: (this: Widget, w: Widget) => void;
x?: number;
y?: number;
};
declare const WIDGETS: { [key: string]: Widget };
type AccelData = {
x: number;
y: number;
z: number;
diff: number;
mag: number;
};
type HealthStatus = {
movement: number;
steps: number;
bpm: number;
bpmConfidence: number;
};
type CompassData = {
x: number;
y: number;
z: number;
dx: number;
dy: number;
dz: number;
heading: number;
};
type GPSFix = {
lat: number;
lon: number;
alt: number;
speed: number;
course: number;
time: Date;
satellites: number;
fix: number;
hdop: number
};
type PressureData = {
temperature: number;
pressure: number;
altitude: number;
}
type TapAxis = -2 | -1 | 0 | 1 | 2;
type SwipeCallback = (directionLR: -1 | 0 | 1, directionUD?: -1 | 0 | 1) => void;
type TouchCallback = (button: number, xy?: { x: number, y: number }) => void;
type DragCallback = (event: {
x: number;
y: number;
dx: number;
dy: number;
b: 1 | 0;
}) => void;
type LCDMode =
| "direct"
| "doublebuffered"
| "120x120"
| "80x80"
type BangleOptions = {
wakeOnBTN1: boolean;
wakeOnBTN2: boolean;
wakeOnBTN3: boolean;
wakeOnFaceUp: boolean;
wakeOnTouch: boolean;
wakeOnTwist: boolean;
twistThreshold: number;
twistMaxY: number;
twistTimeout: number;
gestureStartThresh: number;
gestureEndThresh: number;
gestureInactiveCount: number;
gestureMinLength: number;
powerSave: boolean;
lockTimeout: number;
lcdPowerTimeout: number;
backlightTimeout: number;
btnLoadTimeout: number;
};
type NRFFilters = {
services?: string[];
name?: string;
namePrefix?: string;
id?: string;
serviceData?: object;
manufacturerData?: object;
};
type NRFSecurityStatus = {
advertising: boolean,
} & (
{
connected: true,
encrypted: boolean,
mitm_protected: boolean,
bonded: boolean,
connected_addr?: string,
} | {
connected: false,
encrypted: false,
mitm_protected: false,
bonded: false,
}
);
type ImageObject = {
width: number;
height: number;
bpp?: number;
buffer: ArrayBuffer | string;
transparent?: number;
palette?: Uint16Array;
};
type Image = string | ImageObject | ArrayBuffer | Graphics<true>;
type ColorResolvable = number | `#${string}`;
type FontName =
| "4x4"
| "4x4Numeric"
| "4x5"
| "4x5Numeric"
| "4x8Numeric"
| "5x7Numeric7Seg"
| "5x9Numeric7Seg"
| "6x8"
| "6x12"
| "7x11Numeric7Seg"
| "8x12"
| "8x16"
| "Dennis8"
| "Cherry6x10"
| "Copasectic40x58Numeric"
| "Dylex7x13"
| "HaxorNarrow7x17"
| "Sinclair"
| "Teletext10x18Mode7"
| "Teletext5x9Ascii"
| "Teletext5x9Mode7"
| "Vector";
type FontNameWithScaleFactor =
| FontName
| `${FontName}:${number}`
| `${FontName}:${number}x${number}`;
type Theme = {
fg: number;
bg: number;
fg2: number;
bg2: number;
fgH: number;
bgH: number;
dark: boolean;
};
type PinMode =
| "analog"
| "input"
| "input_pullup"
| "input_pulldown"
| "output"
| "opendrain"
| "af_output"
| "af_opendrain";
interface ArrayLike<T> {
readonly length: number;
readonly [n: number]: T;
}
type ErrorFlag =
| "FIFO_FULL"
| "BUFFER_FULL"
| "CALLBACK"
| "LOW_MEMORY"
| "MEMORY"
| "UART_OVERFLOW";
type Flag =
| "deepSleep"
| "pretokenise"
| "unsafeFlash"
| "unsyncFiles";
type Uint8ArrayResolvable =
| number
| string
| Uint8ArrayResolvable[]
| ArrayBuffer
| ArrayBufferView
| { data: Uint8ArrayResolvable, count: number }
| { callback: () => Uint8ArrayResolvable }
type VariableSizeInformation = {
name: string;
size: number;
more?: VariableSizeInformation;
};
// CLASSES
/**
* A class to support some simple Queue handling for RTOS queues
* @url http://www.espruino.com/Reference#Queue
*/
declare class Queue {
/**
* Creates a Queue Object
* @constructor
*
* @param {any} queueName - Name of the queue
* @returns {any} A Queue object
* @url http://www.espruino.com/Reference#l_Queue_Queue
*/
static new(queueName: any): any;
/**
* reads one character from queue, if available
* @url http://www.espruino.com/Reference#l_Queue_read
*/
read(): void;
/**
* Writes one character to queue
*
* @param {any} char - char to be send
* @url http://www.espruino.com/Reference#l_Queue_writeChar
*/
writeChar(char: any): void;
/**
* logs list of queues
* @url http://www.espruino.com/Reference#l_Queue_log
*/
log(): void;
}
/**
* A class to support some simple Task handling for RTOS tasks
* @url http://www.espruino.com/Reference#Task
*/
declare class Task {
/**
* Creates a Task Object
* @constructor
*
* @param {any} taskName - Name of the task
* @returns {any} A Task object
* @url http://www.espruino.com/Reference#l_Task_Task
*/
static new(taskName: any): any;
/**
* Suspend task, be careful not to suspend Espruino task itself
* @url http://www.espruino.com/Reference#l_Task_suspend
*/
suspend(): void;
/**
* Resumes a suspended task
* @url http://www.espruino.com/Reference#l_Task_resume
*/
resume(): void;
/**
* returns name of actual task
* @returns {any} Name of current task
* @url http://www.espruino.com/Reference#l_Task_getCurrent
*/
getCurrent(): any;
/**
* Sends a binary notify to task
* @url http://www.espruino.com/Reference#l_Task_notify
*/
notify(): void;
/**
* logs list of tasks
* @url http://www.espruino.com/Reference#l_Task_log
*/
log(): void;
}
/**
* A class to handle Timer on base of ESP32 Timer
* @url http://www.espruino.com/Reference#Timer
*/
declare class Timer {
/**
* Creates a Timer Object
* @constructor
*
* @param {any} timerName - Timer Name
* @param {number} group - Timer group
* @param {number} index - Timer index
* @param {number} isrIndex - isr (0 = Espruino, 1 = test)
* @returns {any} A Timer Object
* @url http://www.espruino.com/Reference#l_Timer_Timer
*/
static new(timerName: any, group: number, index: number, isrIndex: number): any;
/**
* Starts a timer
*
* @param {number} duration - duration of timmer in micro secs
* @url http://www.espruino.com/Reference#l_Timer_start
*/
start(duration: number): void;
/**
* Reschedules a timer, needs to be started at least once
*
* @param {number} duration - duration of timmer in micro secs
* @url http://www.espruino.com/Reference#l_Timer_reschedule
*/
reschedule(duration: number): void;
/**
* logs list of timers
* @url http://www.espruino.com/Reference#l_Timer_log
*/
log(): void;
}
/**
* Class containing utility functions for the
* [ESP32](http://www.espruino.com/ESP32)
* @url http://www.espruino.com/Reference#ESP32
*/
declare class ESP32 {
/**
*
* @param {Pin} pin - Pin for Analog read
* @param {number} atten - Attenuate factor
* @url http://www.espruino.com/Reference#l_ESP32_setAtten
*/
static setAtten(pin: Pin, atten: number): void;
/**
* Perform a hardware reset/reboot of the ESP32.
* @url http://www.espruino.com/Reference#l_ESP32_reboot
*/
static reboot(): void;
/**
* Put device in deepsleep state for "us" microseconds.
*
* @param {number} us - Sleeptime in us
* @url http://www.espruino.com/Reference#l_ESP32_deepSleep
*/
static deepSleep(us: number): void;
/**
* Returns an object that contains details about the state of the ESP32 with the
* following fields:
* * `sdkVersion` - Version of the SDK.
* * `freeHeap` - Amount of free heap in bytes.
* * `BLE` - Status of BLE, enabled if true.
* * `Wifi` - Status of Wifi, enabled if true.
* * `minHeap` - Minimum heap, calculated by heap_caps_get_minimum_free_size
* @returns {any} The state of the ESP32
* @url http://www.espruino.com/Reference#l_ESP32_getState
*/
static getState(): any;
/**
*
* @param {number} level - which events should be shown (GAP=1, GATTS=2, GATTC=4). Use 255 for everything
* @url http://www.espruino.com/Reference#l_ESP32_setBLE_Debug
*/
static setBLE_Debug(level: number): void;
/**
* Switches Bluetooth off/on, removes saved code from Flash, resets the board, and
* on restart creates jsVars depending on available heap (actual additional 1800)
*
* @param {boolean} enable - switches Bluetooth on or off
* @url http://www.espruino.com/Reference#l_ESP32_enableBLE
*/
static enableBLE(enable: boolean): void;
/**
* Switches Wifi off/on, removes saved code from Flash, resets the board, and on
* restart creates jsVars depending on available heap (actual additional 3900)
*
* @param {boolean} enable - switches Wifi on or off
* @url http://www.espruino.com/Reference#l_ESP32_enableWifi
*/
static enableWifi(enable: boolean): void;
/**
* This function is useful for ESP32 [OTA Updates](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/system/ota.html)
* Normally Espruino is uploaded to the `factory` partition so this isn't so useful,
* but it is possible to upload Espruino to the `ota_0` partition (or ota_1 if a different table has been added).
* If this is the case, you can use this function to mark the currently running version of Espruino as good or bad.
* * If set as valid, Espruino will continue running, and the fact that everything is ok is written to flash
* * If set as invalid (false) Espruino will mark itself as not working properly and will reboot. The ESP32 bootloader
* will then start and will load any other partition it can find that is marked as ok.
*
* @param {boolean} isValid - Set whether this app is valid or not. If `isValid==false` the device will reboot.
* @url http://www.espruino.com/Reference#l_ESP32_setOTAValid
*/
static setOTAValid(isValid: boolean): void;
}
/**
* This is a built-in class to allow you to use the ESP8266 NodeMCU boards' pin
* namings to access pins. It is only available on ESP8266-based boards.
* @url http://www.espruino.com/Reference#NodeMCU
*/
declare class NodeMCU {
/**
* @returns {Pin} A Pin
* @url http://www.espruino.com/Reference#l_NodeMCU_A0
*/
static A0: Pin;
/**
* @returns {Pin} A Pin
* @url http://www.espruino.com/Reference#l_NodeMCU_D0
*/
static D0: Pin;
/**
* @returns {Pin} A Pin
* @url http://www.espruino.com/Reference#l_NodeMCU_D1
*/
static D1: Pin;
/**
* @returns {Pin} A Pin
* @url http://www.espruino.com/Reference#l_NodeMCU_D2
*/
static D2: Pin;
/**
* @returns {Pin} A Pin
* @url http://www.espruino.com/Reference#l_NodeMCU_D3
*/
static D3: Pin;
/**
* @returns {Pin} A Pin
* @url http://www.espruino.com/Reference#l_NodeMCU_D4
*/
static D4: Pin;
/**
* @returns {Pin} A Pin
* @url http://www.espruino.com/Reference#l_NodeMCU_D5
*/
static D5: Pin;
/**
* @returns {Pin} A Pin
* @url http://www.espruino.com/Reference#l_NodeMCU_D6
*/
static D6: Pin;
/**
* @returns {Pin} A Pin
* @url http://www.espruino.com/Reference#l_NodeMCU_D7
*/
static D7: Pin;
/**
* @returns {Pin} A Pin
* @url http://www.espruino.com/Reference#l_NodeMCU_D8
*/
static D8: Pin;
/**
* @returns {Pin} A Pin
* @url http://www.espruino.com/Reference#l_NodeMCU_D9
*/
static D9: Pin;
/**
* @returns {Pin} A Pin
* @url http://www.espruino.com/Reference#l_NodeMCU_D10
*/
static D10: Pin;
}
/**
* This is the built-in class for the Arduino-style pin namings on ST Nucleo boards
* @url http://www.espruino.com/Reference#Nucleo
*/
declare class Nucleo {
/**
* @returns {Pin} A Pin
* @url http://www.espruino.com/Reference#l_Nucleo_A0
*/
static A0: Pin;
/**
* @returns {Pin} A Pin
* @url http://www.espruino.com/Reference#l_Nucleo_A1
*/
static A1: Pin;
/**
* @returns {Pin} A Pin
* @url http://www.espruino.com/Reference#l_Nucleo_A2
*/
static A2: Pin;
/**
* @returns {Pin} A Pin
* @url http://www.espruino.com/Reference#l_Nucleo_A3
*/
static A3: Pin;
/**
* @returns {Pin} A Pin
* @url http://www.espruino.com/Reference#l_Nucleo_A4
*/
static A4: Pin;
/**
* @returns {Pin} A Pin
* @url http://www.espruino.com/Reference#l_Nucleo_A5
*/
static A5: Pin;
/**
* @returns {Pin} A Pin
* @url http://www.espruino.com/Reference#l_Nucleo_D0
*/
static D0: Pin;
/**
* @returns {Pin} A Pin
* @url http://www.espruino.com/Reference#l_Nucleo_D1
*/
static D1: Pin;
/**
* @returns {Pin} A Pin
* @url http://www.espruino.com/Reference#l_Nucleo_D2
*/
static D2: Pin;
/**
* @returns {Pin} A Pin
* @url http://www.espruino.com/Reference#l_Nucleo_D3
*/
static D3: Pin;
/**
* @returns {Pin} A Pin
* @url http://www.espruino.com/Reference#l_Nucleo_D4
*/
static D4: Pin;
/**
* @returns {Pin} A Pin
* @url http://www.espruino.com/Reference#l_Nucleo_D5
*/
static D5: Pin;
/**
* @returns {Pin} A Pin
* @url http://www.espruino.com/Reference#l_Nucleo_D6
*/
static D6: Pin;
/**
* @returns {Pin} A Pin
* @url http://www.espruino.com/Reference#l_Nucleo_D7
*/
static D7: Pin;
/**
* @returns {Pin} A Pin
* @url http://www.espruino.com/Reference#l_Nucleo_D8
*/
static D8: Pin;
/**
* @returns {Pin} A Pin
* @url http://www.espruino.com/Reference#l_Nucleo_D9
*/
static D9: Pin;
/**
* @returns {Pin} A Pin
* @url http://www.espruino.com/Reference#l_Nucleo_D10
*/
static D10: Pin;
/**
* @returns {Pin} A Pin
* @url http://www.espruino.com/Reference#l_Nucleo_D11
*/
static D11: Pin;
/**
* @returns {Pin} A Pin
* @url http://www.espruino.com/Reference#l_Nucleo_D12
*/
static D12: Pin;
/**
* @returns {Pin} A Pin
* @url http://www.espruino.com/Reference#l_Nucleo_D13
*/
static D13: Pin;
/**
* @returns {Pin} A Pin
* @url http://www.espruino.com/Reference#l_Nucleo_D14
*/
static D14: Pin;
/**
* @returns {Pin} A Pin
* @url http://www.espruino.com/Reference#l_Nucleo_D15
*/
static D15: Pin;
}
/**
* The NRF class is for controlling functionality of the Nordic nRF51/nRF52 chips.
* Most functionality is related to Bluetooth Low Energy, however there are also
* some functions related to NFC that apply to NRF52-based devices.
* @url http://www.espruino.com/Reference#NRF
*/
declare class NRF {
/**
* @returns {any} An object
* @url http://www.espruino.com/Reference#l_NRF_getSecurityStatus
*/
static getSecurityStatus(): NRFSecurityStatus;
/**
* @returns {any} An object
* @url http://www.espruino.com/Reference#l_NRF_getAddress
*/
static getAddress(): any;
/**
*
* @param {any} data - The service (and characteristics) to advertise
* @param {any} options - Optional object containing options
* @url http://www.espruino.com/Reference#l_NRF_setServices
*/
static setServices(data: any, options: any): void;
/**
*
* @param {any} data - The data to advertise as an object - see below for more info
* @param {any} [options] - [optional] An object of options
* @url http://www.espruino.com/Reference#l_NRF_setAdvertising
*/
static setAdvertising(data: any, options?: any): void;
/**
* Called when a host device connects to Espruino. The first argument contains the
* address.
* @param {string} event - The event to listen to.
* @param {(addr: any) => void} callback - A function that is executed when the event occurs. Its arguments are:
* * `addr` The address of the device that has connected
* @url http://www.espruino.com/Reference#l_NRF_connect
*/
static on(event: "connect", callback: (addr: any) => void): void;
/**
* Called when a host device disconnects from Espruino.
* The most common reason is:
* * 19 - `REMOTE_USER_TERMINATED_CONNECTION`
* * 22 - `LOCAL_HOST_TERMINATED_CONNECTION`
* @param {string} event - The event to listen to.
* @param {(reason: number) => void} callback - A function that is executed when the event occurs. Its arguments are:
* * `reason` The reason code reported back by the BLE stack - see Nordic's [`ble_hci.h` file](https://github.com/espruino/Espruino/blob/master/targetlibs/nrf5x_12/components/softdevice/s132/headers/ble_hci.h#L71) for more information
* @url http://www.espruino.com/Reference#l_NRF_disconnect
*/
static on(event: "disconnect", callback: (reason: number) => void): void;
/**
* Contains updates on the security of the current Bluetooth link.
* See Nordic's `ble_gap_evt_auth_status_t` structure for more information.
* @param {string} event - The event to listen to.
* @param {(status: any) => void} callback - A function that is executed when the event occurs. Its arguments are:
* * `status` An object containing `{auth_status,bonded,lv4,kdist_own,kdist_peer}
* @url http://www.espruino.com/Reference#l_NRF_security
*/
static on(event: "security", callback: (status: any) => void): void;
/**
* Called with a single byte value when Espruino is set up as a HID device and the
* computer it is connected to sends a HID report back to Espruino. This is usually
* used for handling indications such as the Caps Lock LED.
* @param {string} event - The event to listen to.
* @param {() => void} callback - A function that is executed when the event occurs.
* @url http://www.espruino.com/Reference#l_NRF_HID
*/
static on(event: "HID", callback: () => void): void;
/**
* Called with discovered services when discovery is finished
* @param {string} event - The event to listen to.
* @param {() => void} callback - A function that is executed when the event occurs.
* @url http://www.espruino.com/Reference#l_NRF_servicesDiscover
*/
static on(event: "servicesDiscover", callback: () => void): void;
/**
* Called with discovered characteristics when discovery is finished
* @param {string} event - The event to listen to.
* @param {() => void} callback - A function that is executed when the event occurs.
* @url http://www.espruino.com/Reference#l_NRF_characteristicsDiscover
*/
static on(event: "characteristicsDiscover", callback: () => void): void;
/**
* Called when an NFC field is detected
* @param {string} event - The event to listen to.
* @param {() => void} callback - A function that is executed when the event occurs.
* @url http://www.espruino.com/Reference#l_NRF_NFCon
*/
static on(event: "NFCon", callback: () => void): void;
/**
* Called when an NFC field is no longer detected
* @param {string} event - The event to listen to.
* @param {() => void} callback - A function that is executed when the event occurs.
* @url http://www.espruino.com/Reference#l_NRF_NFCoff
*/
static on(event: "NFCoff", callback: () => void): void;
/**
* When NFC is started with `NRF.nfcStart`, this is fired when NFC data is
* received. It doesn't get called if NFC is started with `NRF.nfcURL` or
* `NRF.nfcRaw`
* @param {string} event - The event to listen to.
* @param {(arr: any) => void} callback - A function that is executed when the event occurs. Its arguments are:
* * `arr` An ArrayBuffer containign the received data
* @url http://www.espruino.com/Reference#l_NRF_NFCrx
*/
static on(event: "NFCrx", callback: (arr: any) => void): void;
/**
* If a device is connected to Espruino, disconnect from it.
* @url http://www.espruino.com/Reference#l_NRF_disconnect
*/
static disconnect(): void;
/**
* Disable Bluetooth advertising and disconnect from any device that connected to
* Puck.js as a peripheral (this won't affect any devices that Puck.js initiated
* connections to).
* This makes Puck.js undiscoverable, so it can't be connected to.
* Use `NRF.wake()` to wake up and make Puck.js connectable again.
* @url http://www.espruino.com/Reference#l_NRF_sleep
*/
static sleep(): void;
/**
* Enable Bluetooth advertising (this is enabled by default), which allows other
* devices to discover and connect to Puck.js.
* Use `NRF.sleep()` to disable advertising.
* @url http://www.espruino.com/Reference#l_NRF_wake
*/
static wake(): void;
/**
* Restart the Bluetooth softdevice (if there is currently a BLE connection, it
* will queue a restart to be done when the connection closes).
* You shouldn't need to call this function in normal usage. However, Nordic's BLE
* softdevice has some settings that cannot be reset. For example there are only a
* certain number of unique UUIDs. Once these are all used the only option is to
* restart the softdevice to clear them all out.
*
* @param {any} [callback] - [optional] A function to be called while the softdevice is uninitialised. Use with caution - accessing console/bluetooth will almost certainly result in a crash.
* @url http://www.espruino.com/Reference#l_NRF_restart
*/
static restart(callback?: any): void;
/**
* Get this device's default Bluetooth MAC address.
* For Puck.js, the last 5 characters of this (e.g. `ee:ff`) are used in the
* device's advertised Bluetooth name.
* @returns {any} MAC address - a string of the form 'aa:bb:cc:dd:ee:ff'
* @url http://www.espruino.com/Reference#l_NRF_getAddress
*/
static getAddress(): any;
/**
* Set this device's default Bluetooth MAC address:
* ```
* NRF.setAddress("ff:ee:dd:cc:bb:aa random");
* ```
* Addresses take the form:
* * `"ff:ee:dd:cc:bb:aa"` or `"ff:ee:dd:cc:bb:aa public"` for a public address
* * `"ff:ee:dd:cc:bb:aa random"` for a random static address (the default for
* Espruino)
* This may throw a `INVALID_BLE_ADDR` error if the upper two bits of the address
* don't match the address type.
* To change the address, Espruino must restart the softdevice. It will only do so
* when it is disconnected from other devices.
*
* @param {any} addr - The address to use (as a string)
* @url http://www.espruino.com/Reference#l_NRF_setAddress
*/
static setAddress(addr: any): void;
/**
* Get the battery level in volts (the voltage that the NRF chip is running off
* of).
* This is the battery level of the device itself - it has nothing to with any
* device that might be connected.
* @returns {number} Battery level in volts
* @url http://www.espruino.com/Reference#l_NRF_getBattery
*/
static getBattery(): number;
/**
* Change the data that Espruino advertises.
* Data can be of the form `{ UUID : data_as_byte_array }`. The UUID should be a
* [Bluetooth Service
* ID](https://developer.bluetooth.org/gatt/services/Pages/ServicesHome.aspx).
* For example to return battery level at 95%, do:
* ```
* NRF.setAdvertising({
* 0x180F : [95] // Service data 0x180F = 95
* });
* ```
* Or you could report the current temperature:
* ```
* setInterval(function() {
* NRF.setAdvertising({
* 0x1809 : [Math.round(E.getTemperature())]
* });
* }, 30000);
* ```
* If you specify a value for the object key, Service Data is advertised. However
* if you specify `undefined`, the Service UUID is advertised:
* ```
* NRF.setAdvertising({
* 0x180D : undefined // Advertise service UUID 0x180D (HRM)
* });
* ```
* Service UUIDs can also be supplied in the second argument of `NRF.setServices`,
* but those go in the scan response packet.
* You can also supply the raw advertising data in an array. For example to
* advertise as an Eddystone beacon:
* ```
* NRF.setAdvertising([0x03, // Length of Service List
* 0x03, // Param: Service List
* 0xAA, 0xFE, // Eddystone ID
* 0x13, // Length of Service Data
* 0x16, // Service Data
* 0xAA, 0xFE, // Eddystone ID
* 0x10, // Frame type: URL
* 0xF8, // Power
* 0x03, // https://
* 'g','o','o','.','g','l','/','B','3','J','0','O','c'],
* {interval:100});
* ```
* (However for Eddystone we'd advise that you use the [Espruino Eddystone
* library](/Puck.js+Eddystone))
* **Note:** When specifying data as an array, certain advertising options such as
* `discoverable` and `showName` won't have any effect.
* **Note:** The size of Bluetooth LE advertising packets is limited to 31 bytes.
* If you want to advertise more data, consider using an array for `data` (See
* below), or `NRF.setScanResponse`.
* You can even specify an array of arrays or objects, in which case each
* advertising packet will be used in turn - for instance to make your device
* advertise battery level and its name as well as both Eddystone and iBeacon :
* ```
* NRF.setAdvertising([
* {0x180F : [Puck.getBatteryPercentage()]}, // normal advertising, with battery %
* require("ble_ibeacon").get(...), // iBeacon
* require("ble_eddystone").get(...), // eddystone
* ], {interval:300});
* ```
* `options` is an object, which can contain:
* ```
* {
* name: "Hello" // The name of the device
* showName: true/false // include full name, or nothing
* discoverable: true/false // general discoverable, or limited - default is limited
* connectable: true/false // whether device is connectable - default is true
* scannable : true/false // whether device can be scanned for scan response packets - default is true
* interval: 600 // Advertising interval in msec, between 20 and 10000 (default is 375ms)
* manufacturer: 0x0590 // IF sending manufacturer data, this is the manufacturer ID
* manufacturerData: [...] // IF sending manufacturer data, this is an array of data
* phy: "1mbps/2mbps/coded" // (NRF52840 only) use the long-range coded phy for transmission (1mbps default)
* }
* ```
* Setting `connectable` and `scannable` to false gives the lowest power
* consumption as the BLE radio doesn't have to listen after sending advertising.
* **NOTE:** Non-`connectable` advertising can't have an advertising interval less
* than 100ms according to the BLE spec.
* So for instance to set the name of Puck.js without advertising any other data
* you can just use the command:
* ```
* NRF.setAdvertising({},{name:"Hello"});
* ```
* You can also specify 'manufacturer data', which is another form of advertising
* data. We've registered the Manufacturer ID 0x0590 (as Pur3 Ltd) for use with
* *Official Espruino devices* - use it to advertise whatever data you'd like, but
* we'd recommend using JSON.
* For example by not advertising a device name you can send up to 24 bytes of JSON
* on Espruino's manufacturer ID:
* ```
* var data = {a:1,b:2};
* NRF.setAdvertising({},{
* showName:false,
* manufacturer:0x0590,
* manufacturerData:JSON.stringify(data)
* });
* ```
* If you're using [EspruinoHub](https://github.com/espruino/EspruinoHub) then it
* will automatically decode this into the following MQTT topics:
* * `/ble/advertise/ma:c_:_a:dd:re:ss/espruino` -> `{"a":10,"b":15}`
* * `/ble/advertise/ma:c_:_a:dd:re:ss/a` -> `1`
* * `/ble/advertise/ma:c_:_a:dd:re:ss/b` -> `2`
* Note that **you only have 24 characters available for JSON**, so try to use the
* shortest field names possible and avoid floating point values that can be very
* long when converted to a String.
*
* @param {any} data - The service data to advertise as an object - see below for more info
* @param {any} [options] - [optional] Object of options
* @url http://www.espruino.com/Reference#l_NRF_setAdvertising
*/
static setAdvertising(data: any, options?: any): void;
/**
* This is just like `NRF.setAdvertising`, except instead of advertising the data,
* it returns the packet that would be advertised as an array.
*
* @param {any} data - The data to advertise as an object
* @param {any} [options] - [optional] An object of options
* @returns {any} An array containing the advertising data
* @url http://www.espruino.com/Reference#l_NRF_getAdvertisingData
*/
static getAdvertisingData(data: any, options?: any): any;
/**
* The raw scan response data should be supplied as an array. For example to return
* "Sample" for the device name:
* ```
* NRF.setScanResponse([0x07, // Length of Data
* 0x09, // Param: Complete Local Name
* 'S', 'a', 'm', 'p', 'l', 'e']);
* ```
* **Note:** `NRF.setServices(..., {advertise:[ ... ]})` writes advertised services
* into the scan response - so you can't use both `advertise` and `NRF.setServices`
* or one will overwrite the other.
*
* @param {any} data - The data to for the scan response
* @url http://www.espruino.com/Reference#l_NRF_setScanResponse
*/
static setScanResponse(data: any): void;
/**
* Change the services and characteristics Espruino advertises.
* If you want to **change** the value of a characteristic, you need to use
* `NRF.updateServices()` instead
* To expose some information on Characteristic `ABCD` on service `BCDE` you could
* do:
* ```
* NRF.setServices({
* 0xBCDE : {
* 0xABCD : {
* value : "Hello",
* readable : true
* }
* }
* });
* ```
* Or to allow the 3 LEDs to be controlled by writing numbers 0 to 7 to a
* characteristic, you can do the following. `evt.data` is an ArrayBuffer.
* ```
* NRF.setServices({
* 0xBCDE : {
* 0xABCD : {
* writable : true,
* onWrite : function(evt) {
* digitalWrite([LED3,LED2,LED1], evt.data[0]);
* }
* }
* }
* });
* ```
* You can supply many different options:
* ```
* NRF.setServices({
* 0xBCDE : {
* 0xABCD : {
* value : "Hello", // optional
* maxLen : 5, // optional (otherwise is length of initial value)
* broadcast : false, // optional, default is false
* readable : true, // optional, default is false
* writable : true, // optional, default is false
* notify : true, // optional, default is false
* indicate : true, // optional, default is false
* description: "My Characteristic", // optional, default is null,
* security: { // optional - see NRF.setSecurity
* read: { // optional
* encrypted: false, // optional, default is false
* mitm: false, // optional, default is false
* lesc: false, // optional, default is false
* signed: false // optional, default is false
* },
* write: { // optional
* encrypted: true, // optional, default is false
* mitm: false, // optional, default is false
* lesc: false, // optional, default is false
* signed: false // optional, default is false
* }
* },
* onWrite : function(evt) { // optional
* console.log("Got ", evt.data); // an ArrayBuffer
* },
* onWriteDesc : function(evt) { // optional - called when the 'cccd' descriptor is written
* // for example this is called when notifications are requested by the client:
* console.log("Notifications enabled = ", evt.data[0]&1);
* }
* }
* // more characteristics allowed
* }
* // more services allowed
* });
* ```
* **Note:** UUIDs can be integers between `0` and `0xFFFF`, strings of the form
* `"ABCD"`, or strings of the form `"ABCDABCD-ABCD-ABCD-ABCD-ABCDABCDABCD"`
* `options` can be of the form:
* ```
* NRF.setServices(undefined, {
* hid : new Uint8Array(...), // optional, default is undefined. Enable BLE HID support
* uart : true, // optional, default is true. Enable BLE UART support
* advertise: [ '180D' ] // optional, list of service UUIDs to advertise
* ancs : true, // optional, Bangle.js-only, enable Apple ANCS support for notifications
* ams : true // optional, Bangle.js-only, enable Apple AMS support for media control
* });
* ```
* To enable BLE HID, you must set `hid` to an array which is the BLE report
* descriptor. The easiest way to do this is to use the `ble_hid_controls` or
* `ble_hid_keyboard` modules.
* **Note:** Just creating a service doesn't mean that the service will be
* advertised. It will only be available after a device connects. To advertise,
* specify the UUIDs you wish to advertise in the `advertise` field of the second
* `options` argument. For example this will create and advertise a heart rate
* service:
* ```
* NRF.setServices({
* 0x180D: { // heart_rate
* 0x2A37: { // heart_rate_measurement
* notify: true,
* value : [0x06, heartrate],
* }
* }
* }, { advertise: [ '180D' ] });
* ```
* You may specify 128 bit UUIDs to advertise, however you may get a `DATA_SIZE`
* exception because there is insufficient space in the Bluetooth LE advertising
* packet for the 128 bit UART UUID as well as the UUID you specified. In this case
* you can add `uart:false` after the `advertise` element to disable the UART,
* however you then be unable to connect to Puck.js's console via Bluetooth.
* If you absolutely require two or more 128 bit UUIDs then you will have to
* specify your own raw advertising data packets with `NRF.setAdvertising`
* **Note:** The services on Espruino can only be modified when there is no device
* connected to it as it requires a restart of the Bluetooth stack. **iOS devices
* will 'cache' the list of services** so apps like NRF Connect may incorrectly
* display the old services even after you have modified them. To fix this, disable
* and re-enable Bluetooth on your iOS device, or use an Android device to run NRF
* Connect.
* **Note:** Not all combinations of security configuration values are valid, the
* valid combinations are: encrypted, encrypted + mitm, lesc, signed, signed +
* mitm. See `NRF.setSecurity` for more information.
*
* @param {any} data - The service (and characteristics) to advertise
* @param {any} [options] - [optional] Object containing options
* @url http://www.espruino.com/Reference#l_NRF_setServices
*/
static setServices(data: { [key: number]: { [key: number]: { value?: string, maxLen?: number, broadcast?: boolean, readable?: boolean, writable?: boolean, notify?: boolean, indicate?: boolean, description?: string, security?: { read?: { encrypted?: boolean, mitm?: boolean, lesc?: boolean, signed?: boolean }, write?: { encrypted?: boolean, mitm?: boolean, lesc?: boolean, signed?: boolean } }, onWrite?: (evt: { data: ArrayBuffer }) => void } } }, options?: any): void;
/**
* Update values for the services and characteristics Espruino advertises. Only
* services and characteristics previously declared using `NRF.setServices` are
* affected.
* To update the '0xABCD' characteristic in the '0xBCDE' service:
* ```
* NRF.updateServices({
* 0xBCDE : {
* 0xABCD : {
* value : "World"
* }
* }
* });
* ```
* You can also use 128 bit UUIDs, for example
* `"b7920001-3c1b-4b40-869f-3c0db9be80c6"`.
* To define a service and characteristic and then notify connected clients of a
* change to it when a button is pressed:
* ```
* NRF.setServices({
* 0xBCDE : {
* 0xABCD : {
* value : "Hello",
* maxLen : 20,
* notify: true
* }
* }
* });
* setWatch(function() {
* NRF.updateServices({
* 0xBCDE : {
* 0xABCD : {
* value : "World!",
* notify: true
* }
* }
* });
* }, BTN, { repeat:true, edge:"rising", debounce: 50 });
* ```
* This only works if the characteristic was created with `notify: true` using
* `NRF.setServices`, otherwise the characteristic will be updated but no
* notification will be sent.
* Also note that `maxLen` was specified. If it wasn't then the maximum length of
* the characteristic would have been 5 - the length of `"Hello"`.
* To indicate (i.e. notify with ACK) connected clients of a change to the '0xABCD'
* characteristic in the '0xBCDE' service:
* ```
* NRF.updateServices({
* 0xBCDE : {
* 0xABCD : {
* value : "World",
* indicate: true
* }
* }
* });
* ```
* This only works if the characteristic was created with `indicate: true` using
* `NRF.setServices`, otherwise the characteristic will be updated but no
* notification will be sent.
* **Note:** See `NRF.setServices` for more information
*
* @param {any} data - The service (and characteristics) to update
* @url http://www.espruino.com/Reference#l_NRF_updateServices
*/
static updateServices(data: any): void;
/**
* Start/stop listening for BLE advertising packets within range. Returns a
* `BluetoothDevice` for each advertising packet. **By default this is not an active
* scan, so Scan Response advertising data is not included (see below)**
* ```
* // Start scanning
* packets=10;
* NRF.setScan(function(d) {
* packets--;
* if (packets<=0)
* NRF.setScan(); // stop scanning
* else
* console.log(d); // print packet info
* });
* ```
* Each `BluetoothDevice` will look a bit like:
* ```
* BluetoothDevice {
* "id": "aa:bb:cc:dd:ee:ff", // address
* "rssi": -89, // signal strength
* "services": [ "128bit-uuid", ... ], // zero or more service UUIDs
* "data": new Uint8Array([ ... ]).buffer, // ArrayBuffer of returned data
* "serviceData" : { "0123" : [ 1 ] }, // if service data is in 'data', it's extracted here
* "manufacturer" : 0x1234, // if manufacturer data is in 'data', the 16 bit manufacturer ID is extracted here
* "manufacturerData" : new Uint8Array([...]).buffer, // if manufacturer data is in 'data', the data is extracted here as an ArrayBuffer
* "name": "DeviceName" // the advertised device name
* }
* ```
* You can also supply a set of filters (as described in `NRF.requestDevice`) as a
* second argument, which will allow you to filter the devices you get a callback
* for. This helps to cut down on the time spent processing JavaScript code in
* areas with a lot of Bluetooth advertisements. For example to find only devices
* with the manufacturer data `0x0590` (Espruino's ID) you could do:
* ```
* NRF.setScan(function(d) {
* console.log(d.manufacturerData);
* }, { filters: [{ manufacturerData:{0x0590:{}} }] });
* ```
* You can also specify `active:true` in the second argument to perform active
* scanning (this requests scan response packets) from any devices it finds.
* **Note:** Using a filter in `setScan` filters each advertising packet
* individually. As a result, if you filter based on a service UUID and a device
* advertises with multiple packets (or a scan response when `active:true`) only
* the packets matching the filter are returned. To aggregate multiple packets you
* can use `NRF.findDevices`.
* **Note:** BLE advertising packets can arrive quickly - faster than you'll be
* able to print them to the console. It's best only to print a few, or to use a
* function like `NRF.findDevices(..)` which will collate a list of available
* devices.
* **Note:** Using setScan turns the radio's receive mode on constantly. This can
* draw a *lot* of power (12mA or so), so you should use it sparingly or you can
* run your battery down quickly.
*
* @param {any} callback - The callback to call with received advertising packets, or undefined to stop
* @param {any} [options] - [optional] An object `{filters: ...}` (as would be passed to `NRF.requestDevice`) to filter devices by
* @url http://www.espruino.com/Reference#l_NRF_setScan
*/
static setScan(callback: any, options?: any): void;
/**
* This function can be used to quickly filter through Bluetooth devices.
* For instance if you wish to scan for multiple different types of device at the
* same time then you could use `NRF.findDevices` with all the filters you're
* interested in. When scanning is finished you can then use `NRF.filterDevices` to
* pick out just the devices of interest.
* ```
* // the two types of device we're interested in
* var filter1 = [{serviceData:{"fe95":{}}}];
* var filter2 = [{namePrefix:"Pixl.js"}];
* // the following filter will return both types of device
* var allFilters = filter1.concat(filter2);
* // now scan for both types of device, and filter them out afterwards
* NRF.findDevices(function(devices) {
* var devices1 = NRF.filterDevices(devices, filter1);
* var devices2 = NRF.filterDevices(devices, filter2);
* // ...
* }, {filters : allFilters});
* ```
*
* @param {any} devices - An array of `BluetoothDevice` objects, from `NRF.findDevices` or similar
* @param {any} filters - A list of filters (as would be passed to `NRF.requestDevice`) to filter devices by
* @returns {any} An array of `BluetoothDevice` objects that match the given filters
* @url http://www.espruino.com/Reference#l_NRF_filterDevices
*/
static filterDevices(devices: any, filters: any): any;
/**
* Utility function to return a list of BLE devices detected in range. Behind the
* scenes, this uses `NRF.setScan(...)` and collates the results.
* ```
* NRF.findDevices(function(devices) {
* console.log(devices);
* }, 1000);
* ```
* prints something like:
* ```
* [
* BluetoothDevice {
* "id" : "e7:e0:57:ad:36:a2 random",
* "rssi": -45,
* "services": [ "4567" ],
* "serviceData" : { "0123" : [ 1 ] },
* "manufacturer" : 1424,
* "manufacturerData" : new Uint8Array([ ... ]).buffer,
* "data": new ArrayBuffer([ ... ]).buffer,
* "name": "Puck.js 36a2"
* },
* BluetoothDevice {
* "id": "c0:52:3f:50:42:c9 random",
* "rssi": -65,
* "data": new ArrayBuffer([ ... ]),
* "name": "Puck.js 8f57"
* }
* ]
* ```
* For more information on the structure returned, see `NRF.setScan`.
* If you want to scan only for specific devices you can replace the timeout with
* an object of the form `{filters: ..., timeout : ..., active: bool}` using the
* filters described in `NRF.requestDevice`. For example to search for devices with
* Espruino's `manufacturerData`:
* ```
* NRF.findDevices(function(devices) {
* ...
* }, {timeout : 2000, filters : [{ manufacturerData:{0x0590:{}} }] });
* ```
* You could then use
* [`BluetoothDevice.gatt.connect(...)`](/Reference#l_BluetoothRemoteGATTServer_connect)
* on the device returned to make a connection.
* You can also use [`NRF.connect(...)`](/Reference#l_NRF_connect) on just the `id`
* string returned, which may be useful if you always want to connect to a specific
* device.
* **Note:** Using findDevices turns the radio's receive mode on for 2000ms (or
* however long you specify). This can draw a *lot* of power (12mA or so), so you
* should use it sparingly or you can run your battery down quickly.
* **Note:** The 'data' field contains the data of *the last packet received*.
* There may have been more packets. To get data for each packet individually use
* `NRF.setScan` instead.
*
* @param {any} callback - The callback to call with received advertising packets (as `BluetoothDevice`), or undefined to stop
* @param {any} [options] - [optional] A time in milliseconds to scan for (defaults to 2000), Or an optional object `{filters: ..., timeout : ..., active: bool}` (as would be passed to `NRF.requestDevice`) to filter devices by
* @url http://www.espruino.com/Reference#l_NRF_findDevices
*/
static findDevices(callback: (devices: BluetoothDevice[]) => void, options?: number | { filters?: NRFFilters[], timeout?: number, active?: boolean }): void;
/**
* Start/stop listening for RSSI values on the currently active connection (where
* This device is a peripheral and is being connected to by a 'central' device)
* ```
* // Start scanning
* NRF.setRSSIHandler(function(rssi) {
* console.log(rssi); // prints -85 (or similar)
* });
* // Stop Scanning
* NRF.setRSSIHandler();
* ```
* RSSI is the 'Received Signal Strength Indication' in dBm
*
* @param {any} callback - The callback to call with the RSSI value, or undefined to stop
* @url http://www.espruino.com/Reference#l_NRF_setRSSIHandler
*/
static setRSSIHandler(callback: any): void;
/**
* Set the BLE radio transmit power. The default TX power is 0 dBm, and
*
* @param {number} power - Transmit power. Accepted values are -40(nRF52 only), -30(nRF51 only), -20, -16, -12, -8, -4, 0, and 4 dBm. On nRF52840 (eg Bangle.js 2) 5/6/7/8 dBm are available too. Others will give an error code.
* @url http://www.espruino.com/Reference#l_NRF_setTxPower
*/
static setTxPower(power: number): void;
/**
* **THIS IS DEPRECATED** - please use `NRF.setConnectionInterval` for peripheral
* and `NRF.connect(addr, options)`/`BluetoothRemoteGATTServer.connect(options)`
* for central connections.
* This sets the connection parameters - these affect the transfer speed and power
* usage when the device is connected.
* * When not low power, the connection interval is between 7.5 and 20ms
* * When low power, the connection interval is between 500 and 1000ms
* When low power connection is enabled, transfers of data over Bluetooth will be
* very slow, however power usage while connected will be drastically decreased.
* This will only take effect after the connection is disconnected and
* re-established.
*
* @param {boolean} lowPower - Whether the connection is low power or not
* @url http://www.espruino.com/Reference#l_NRF_setLowPowerConnection
*/
static setLowPowerConnection(lowPower: boolean): void;
/**
* Enables NFC and starts advertising the given URL. For example:
* ```
* NRF.nfcURL("http://espruino.com");
* ```
*
* @param {any} url - The URL string to expose on NFC, or `undefined` to disable NFC
* @url http://www.espruino.com/Reference#l_NRF_nfcURL
*/
static nfcURL(url: any): void;
/**
* Enables NFC and with an out of band 16 byte pairing key.
* For example the following will enable out of band pairing on BLE such that the
* device will pair when you tap the phone against it:
* ```
* var bleKey = [0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF, 0x99, 0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11, 0x00];
* NRF.on('security',s=>print("security",JSON.stringify(s)));
* NRF.nfcPair(bleKey);
* NRF.setSecurity({oob:bleKey, mitm:true});
* ```
*
* @param {any} key - 16 byte out of band key
* @url http://www.espruino.com/Reference#l_NRF_nfcPair
*/
static nfcPair(key: any): void;
/**
* Enables NFC with a record that will launch the given android app.
* For example:
* ```
* NRF.nfcAndroidApp("no.nordicsemi.android.nrftoolbox")
* ```
*
* @param {any} app - The unique identifier of the given Android App
* @url http://www.espruino.com/Reference#l_NRF_nfcAndroidApp
*/
static nfcAndroidApp(app: any): void;
/**
* Enables NFC and starts advertising with Raw data. For example:
* ```
* NRF.nfcRaw(new Uint8Array([193, 1, 0, 0, 0, 13, 85, 3, 101, 115, 112, 114, 117, 105, 110, 111, 46, 99, 111, 109]));
* // same as NRF.nfcURL("http://espruino.com");
* ```
*
* @param {any} payload - The NFC NDEF message to deliver to the reader
* @url http://www.espruino.com/Reference#l_NRF_nfcRaw
*/
static nfcRaw(payload: any): void;
/**
* **Advanced NFC Functionality.** If you just want to advertise a URL, use
* `NRF.nfcURL` instead.
* Enables NFC and starts advertising. `NFCrx` events will be fired when data is
* received.
* ```
* NRF.nfcStart();
* ```
*
* @param {any} payload - Optional 7 byte UID
* @returns {any} Internal tag memory (first 10 bytes of tag data)
* @url http://www.espruino.com/Reference#l_NRF_nfcStart
*/
static nfcStart(payload: any): any;
/**
* **Advanced NFC Functionality.** If you just want to advertise a URL, use
* `NRF.nfcURL` instead.
* Disables NFC.
* ```
* NRF.nfcStop();
* ```
*
* @url http://www.espruino.com/Reference#l_NRF_nfcStop
*/
static nfcStop(): void;
/**
* **Advanced NFC Functionality.** If you just want to advertise a URL, use
* `NRF.nfcURL` instead.
* Acknowledges the last frame and optionally transmits a response. If payload is
* an array, then a array.length byte nfc frame is sent. If payload is a int, then
* a 4bit ACK/NACK is sent. **Note:** ```nfcSend``` should always be called after
* an ```NFCrx``` event.
* ```
* NRF.nfcSend(new Uint8Array([0x01, 0x02, ...]));
* // or
* NRF.nfcSend(0x0A);
* // or
* NRF.nfcSend();
* ```
*
* @param {any} payload - Optional tx data
* @url http://www.espruino.com/Reference#l_NRF_nfcSend
*/
static nfcSend(payload: any): void;
/**
* Send a USB HID report. HID must first be enabled with `NRF.setServices({}, {hid:
* hid_report})`
*
* @param {any} data - Input report data as an array
* @param {any} callback - A callback function to be called when the data is sent
* @url http://www.espruino.com/Reference#l_NRF_sendHIDReport
*/
static sendHIDReport(data: any, callback: any): void;
/**
* Check if Apple Notification Center Service (ANCS) is currently active on the BLE
* connection
*
* @returns {boolean} True if Apple Notification Center Service (ANCS) has been initialised and is active
* @url http://www.espruino.com/Reference#l_NRF_ancsIsActive
*/
static ancsIsActive(): boolean;
/**
* Send an ANCS action for a specific Notification UID. Corresponds to
* posaction/negaction in the 'ANCS' event that was received
*
* @param {number} uid - The UID of the notification to respond to
* @param {boolean} positive - `true` for positive action, `false` for negative
* @url http://www.espruino.com/Reference#l_NRF_ancsAction
*/
static ancsAction(uid: number, positive: boolean): void;
/**
* Get ANCS info for a notification event received via `E.ANCS`, e.g.:
* ```
* E.on('ANCS', event => {
* NRF.ancsGetNotificationInfo( event.uid ).then(a=>print("Notify",E.toJS(a)));
* });
* ```
* Returns:
* ```
* {
* "uid" : integer,
* "appId": string,
* "title": string,
* "subtitle": string,
* "message": string,
* "messageSize": string,
* "date": string,
* "posAction": string,
* "negAction": string
* }
* ```
*
* @param {number} uid - The UID of the notification to get information for
* @returns {any} A `Promise` that is resolved (or rejected) when the connection is complete
* @url http://www.espruino.com/Reference#l_NRF_ancsGetNotificationInfo
*/
static ancsGetNotificationInfo(uid: number): Promise<void>;
/**
* Get ANCS info for an app (app id is available via `NRF.ancsGetNotificationInfo`)
* Promise returns:
* ```
* {
* "uid" : int,
* "appId" : string,
* "title" : string,
* "subtitle" : string,
* "message" : string,
* "messageSize" : string,
* "date" : string,
* "posAction" : string,
* "negAction" : string,
* "name" : string,
* }
* ```
*
* @param {any} id - The app ID to get information for
* @returns {any} A `Promise` that is resolved (or rejected) when the connection is complete
* @url http://www.espruino.com/Reference#l_NRF_ancsGetAppInfo
*/
static ancsGetAppInfo(id: any): Promise<void>;
/**
* Check if Apple Media Service (AMS) is currently active on the BLE connection
*
* @returns {boolean} True if Apple Media Service (AMS) has been initialised and is active
* @url http://www.espruino.com/Reference#l_NRF_amsIsActive
*/
static amsIsActive(): boolean;
/**
* Get Apple Media Service (AMS) info for the current media player. "playbackinfo"
* returns a concatenation of three comma-separated values:
* - PlaybackState: a string that represents the integer value of the playback
* state:
* - PlaybackStatePaused = 0
* - PlaybackStatePlaying = 1
* - PlaybackStateRewinding = 2
* - PlaybackStateFastForwarding = 3
* - PlaybackRate: a string that represents the floating point value of the
* playback rate.
* - ElapsedTime: a string that represents the floating point value of the elapsed
* time of the current track, in seconds
*
* @param {any} id - Either 'name', 'playbackinfo' or 'volume'
* @returns {any} A `Promise` that is resolved (or rejected) when the connection is complete
* @url http://www.espruino.com/Reference#l_NRF_amsGetPlayerInfo
*/
static amsGetPlayerInfo(id: any): Promise<void>;
/**
* Get Apple Media Service (AMS) info for the currently-playing track
*
* @param {any} id - Either 'artist', 'album', 'title' or 'duration'
* @returns {any} A `Promise` that is resolved (or rejected) when the connection is complete
* @url http://www.espruino.com/Reference#l_NRF_amsGetTrackInfo
*/
static amsGetTrackInfo(id: any): Promise<void>;
/**
* Send an AMS command to an Apple Media Service device to control music playback
* Command is one of play, pause, playpause, next, prev, volup, voldown, repeat,
* shuffle, skipforward, skipback, like, dislike, bookmark
*
* @param {any} id - For example, 'play', 'pause', 'volup' or 'voldown'
* @url http://www.espruino.com/Reference#l_NRF_amsCommand
*/
static amsCommand(id: any): void;
/**
* Search for available devices matching the given filters. Since we have no UI
* here, Espruino will pick the FIRST device it finds, or it'll call `catch`.
* `options` can have the following fields:
* * `filters` - a list of filters that a device must match before it is returned
* (see below)
* * `timeout` - the maximum time to scan for in milliseconds (scanning stops when
* a match is found. e.g. `NRF.requestDevice({ timeout:2000, filters: [ ... ] })`
* * `active` - whether to perform active scanning (requesting 'scan response'
* packets from any devices that are found). e.g. `NRF.requestDevice({ active:true,
* filters: [ ... ] })`
* * `phy` - (NRF52840 only) use the long-range coded phy (`"1mbps"` default, can
* be `"1mbps/2mbps/both/coded"`)
* * `extended` - (NRF52840 only) support receiving extended-length advertising
* packets (default=true if phy isn't `"1mbps"`)
* **NOTE:** `timeout` and `active` are not part of the Web Bluetooth standard.
* The following filter types are implemented:
* * `services` - list of services as strings (all of which must match). 128 bit
* services must be in the form '01230123-0123-0123-0123-012301230123'
* * `name` - exact device name
* * `namePrefix` - starting characters of device name
* * `id` - exact device address (`id:"e9:53:86:09:89:99 random"`) (this is
* Espruino-specific, and is not part of the Web Bluetooth spec)
* * `serviceData` - an object containing service characteristics which must all
* match (`serviceData:{"1809":{}}`). Matching of actual service data is not
* supported yet.
* * `manufacturerData` - an object containing manufacturer UUIDs which must all
* match (`manufacturerData:{0x0590:{}}`). Matching of actual manufacturer data
* is not supported yet.
* ```
* NRF.requestDevice({ filters: [{ namePrefix: 'Puck.js' }] }).then(function(device) { ... });
* // or
* NRF.requestDevice({ filters: [{ services: ['1823'] }] }).then(function(device) { ... });
* // or
* NRF.requestDevice({ filters: [{ manufacturerData:{0x0590:{}} }] }).then(function(device) { ... });
* ```
* As a full example, to send data to another Puck.js to turn an LED on:
* ```
* var gatt;
* NRF.requestDevice({ filters: [{ namePrefix: 'Puck.js' }] }).then(function(device) {
* return device.gatt.connect();
* }).then(function(g) {
* gatt = g;
* return gatt.getPrimaryService("6e400001-b5a3-f393-e0a9-e50e24dcca9e");
* }).then(function(service) {
* return service.getCharacteristic("6e400002-b5a3-f393-e0a9-e50e24dcca9e");
* }).then(function(characteristic) {
* return characteristic.writeValue("LED1.set()\n");
* }).then(function() {
* gatt.disconnect();
* console.log("Done!");
* });
* ```
* Or slightly more concisely, using ES6 arrow functions:
* ```
* var gatt;
* NRF.requestDevice({ filters: [{ namePrefix: 'Puck.js' }]}).then(
* device => device.gatt.connect()).then(
* g => (gatt=g).getPrimaryService("6e400001-b5a3-f393-e0a9-e50e24dcca9e")).then(
* service => service.getCharacteristic("6e400002-b5a3-f393-e0a9-e50e24dcca9e")).then(
* characteristic => characteristic.writeValue("LED1.reset()\n")).then(
* () => { gatt.disconnect(); console.log("Done!"); } );
* ```
* Note that you have to keep track of the `gatt` variable so that you can
* disconnect the Bluetooth connection when you're done.
* **Note:** Using a filter in `NRF.requestDevice` filters each advertising packet
* individually. As soon as a matching advertisement is received,
* `NRF.requestDevice` resolves the promise and stops scanning. This means that if
* you filter based on a service UUID and a device advertises with multiple packets
* (or a scan response when `active:true`) only the packet matching the filter is
* returned - you may not get the device's name is that was in a separate packet.
* To aggregate multiple packets you can use `NRF.findDevices`.
*
* @param {any} options - Options used to filter the device to use
* @returns {any} A `Promise` that is resolved (or rejected) when the connection is complete
* @url http://www.espruino.com/Reference#l_NRF_requestDevice
*/
static requestDevice(options?: { filters?: NRFFilters[], timeout?: number, active?: boolean, phy?: string, extended?: boolean }): Promise<any>;
/**
* Connect to a BLE device by MAC address. Returns a promise, the argument of which
* is the `BluetoothRemoteGATTServer` connection.
* ```
* NRF.connect("aa:bb:cc:dd:ee").then(function(server) {
* // ...
* });
* ```
* This has the same effect as calling `BluetoothDevice.gatt.connect` on a
* `BluetoothDevice` requested using `NRF.requestDevice`. It just allows you to
* specify the address directly (without having to scan).
* You can use it as follows - this would connect to another Puck device and turn
* its LED on:
* ```
* var gatt;
* NRF.connect("aa:bb:cc:dd:ee random").then(function(g) {
* gatt = g;
* return gatt.getPrimaryService("6e400001-b5a3-f393-e0a9-e50e24dcca9e");
* }).then(function(service) {
* return service.getCharacteristic("6e400002-b5a3-f393-e0a9-e50e24dcca9e");
* }).then(function(characteristic) {
* return characteristic.writeValue("LED1.set()\n");
* }).then(function() {
* gatt.disconnect();
* console.log("Done!");
* });
* ```
* **Note:** Espruino Bluetooth devices use a type of BLE address known as 'random
* static', which is different to a 'public' address. To connect to an Espruino
* device you'll need to use an address string of the form `"aa:bb:cc:dd:ee
* random"` rather than just `"aa:bb:cc:dd:ee"`. If you scan for devices with
* `NRF.findDevices`/`NRF.setScan` then addresses are already reported in the
* correct format.
*
* @param {any} mac - The MAC address to connect to
* @param {any} options - (Espruino-specific) An object of connection options (see `BluetoothRemoteGATTServer.connect` for full details)
* @returns {any} A `Promise` that is resolved (or rejected) when the connection is complete
* @url http://www.espruino.com/Reference#l_NRF_connect
*/
static connect(mac: any, options: any): Promise<void>;
/**
* If set to true, whenever a device bonds it will be added to the whitelist.
* When set to false, the whitelist is cleared and newly bonded devices will not be
* added to the whitelist.
* **Note:** This is remembered between `reset()`s but isn't remembered after
* power-on (you'll have to add it to `onInit()`.
*
* @param {boolean} whitelisting - Are we using a whitelist? (default false)
* @url http://www.espruino.com/Reference#l_NRF_setWhitelist
*/
static setWhitelist(whitelisting: boolean): void;
/**
* When connected, Bluetooth LE devices communicate at a set interval. Lowering the
* interval (e.g. more packets/second) means a lower delay when sending data, higher
* bandwidth, but also more power consumption.
* By default, when connected as a peripheral Espruino automatically adjusts the
* connection interval. When connected it's as fast as possible (7.5ms) but when
* idle for over a minute it drops to 200ms. On continued activity (>1 BLE
* operation) the interval is raised to 7.5ms again.
* The options for `interval` are:
* * `undefined` / `"auto"` : (default) automatically adjust connection interval
* * `100` : set min and max connection interval to the same number (between 7.5ms
* and 4000ms)
* * `{minInterval:20, maxInterval:100}` : set min and max connection interval as a
* range
* This configuration is not remembered during a `save()` - you will have to re-set
* it via `onInit`.
* **Note:** If connecting to another device (as Central), you can use an extra
* argument to `NRF.connect` or `BluetoothRemoteGATTServer.connect` to specify a
* connection interval.
* **Note:** This overwrites any changes imposed by the deprecated
* `NRF.setLowPowerConnection`
*
* @param {any} interval - The connection interval to use (see below)
* @url http://www.espruino.com/Reference#l_NRF_setConnectionInterval
*/
static setConnectionInterval(interval: any): void;
/**
* Sets the security options used when connecting/pairing. This applies to both
* central *and* peripheral mode.
* ```
* NRF.setSecurity({
* display : bool // default false, can this device display a passkey
* // - sent via the `BluetoothDevice.passkey` event
* keyboard : bool // default false, can this device enter a passkey
* // - request sent via the `BluetoothDevice.passkeyRequest` event
* bond : bool // default true, Perform bonding
* mitm : bool // default false, Man In The Middle protection
* lesc : bool // default false, LE Secure Connections
* passkey : // default "", or a 6 digit passkey to use
* oob : [0..15] // if specified, Out Of Band pairing is enabled and
* // the 16 byte pairing code supplied here is used
* encryptUart : bool // default false (unless oob or passkey specified)
* // This sets the BLE UART service such that it
* // is encrypted and can only be used from a bonded connection
* });
* ```
* **NOTE:** Some combinations of arguments will cause an error. For example
* supplying a passkey without `display:1` is not allowed. If `display:1` is set
* you do not require a physical display, the user just needs to know the passkey
* you supplied.
* For instance, to require pairing and to specify a passkey, use:
* ```
* NRF.setSecurity({passkey:"123456", mitm:1, display:1});
* ```
* However, while most devices will request a passkey for pairing at this point it
* is still possible for a device to connect without requiring one (e.g. using the
* 'NRF Connect' app).
* To force a passkey you need to protect each characteristic you define with
* `NRF.setSecurity`. For instance the following code will *require* that the
* passkey `123456` is entered before the characteristic
* `9d020002-bf5f-1d1a-b52a-fe52091d5b12` can be read.
* ```
* NRF.setSecurity({passkey:"123456", mitm:1, display:1});
* NRF.setServices({
* "9d020001-bf5f-1d1a-b52a-fe52091d5b12" : {
* "9d020002-bf5f-1d1a-b52a-fe52091d5b12" : {
* // readable always
* value : "Not Secret"
* },
* "9d020003-bf5f-1d1a-b52a-fe52091d5b12" : {
* // readable only once bonded
* value : "Secret",
* readable : true,
* security: {
* read: {
* mitm: true,
* encrypted: true
* }
* }
* },
* "9d020004-bf5f-1d1a-b52a-fe52091d5b12" : {
* // readable always
* // writable only once bonded
* value : "Readable",
* readable : true,
* writable : true,
* onWrite : function(evt) {
* console.log("Wrote ", evt.data);
* },
* security: {
* write: {
* mitm: true,
* encrypted: true
* }
* }
* }
* }
* });
* ```
* **Note:** If `passkey` or `oob` is specified, the Nordic UART service (if
* enabled) will automatically be set to require encryption, but otherwise it is
* open.
*
* @param {any} options - An object containing security-related options (see below)
* @url http://www.espruino.com/Reference#l_NRF_setSecurity
*/
static setSecurity(options: any): void;
/**
* Return an object with information about the security state of the current
* peripheral connection:
* ```
* {
* connected // The connection is active (not disconnected).
* encrypted // Communication on this link is encrypted.
* mitm_protected // The encrypted communication is also protected against man-in-the-middle attacks.
* bonded // The peer is bonded with us
* advertising // Are we currently advertising?
* connected_addr // If connected=true, the MAC address of the currently connected device
* }
* ```
* If there is no active connection, `{connected:false}` will be returned.
* See `NRF.setSecurity` for information about negotiating a secure connection.
* @returns {any} An object
* @url http://www.espruino.com/Reference#l_NRF_getSecurityStatus
*/
static getSecurityStatus(): NRFSecurityStatus;
/**
*
* @param {boolean} forceRepair - True if we should force repairing even if there is already valid pairing info
* @returns {any} A promise
* @url http://www.espruino.com/Reference#l_NRF_startBonding
*/
static startBonding(forceRepair: boolean): any;
}
/**
* This class provides functionality to recognise gestures drawn on a touchscreen.
* It is only built into Bangle.js 2.
* Usage:
* ```
* var strokes = {
* stroke1 : Unistroke.new(new Uint8Array([x1, y1, x2, y2, x3, y3, ...])),
* stroke2 : Unistroke.new(new Uint8Array([x1, y1, x2, y2, x3, y3, ...])),
* stroke3 : Unistroke.new(new Uint8Array([x1, y1, x2, y2, x3, y3, ...]))
* };
* var r = Unistroke.recognise(strokes,new Uint8Array([x1, y1, x2, y2, x3, y3, ...]))
* print(r); // stroke1/stroke2/stroke3
* ```
* @url http://www.espruino.com/Reference#Unistroke
*/
declare class Unistroke {
/**
* Create a new Unistroke based on XY coordinates
*
* @param {any} xy - An array of interleaved XY coordinates
* @returns {any} A string of data representing this unistroke
* @url http://www.espruino.com/Reference#l_Unistroke_new
*/
static new(xy: any): any;
/**
* Recognise based on an object of named strokes, and a list of XY coordinates
*
* @param {any} strokes - An object of named strokes : `{arrow:..., circle:...}`
* @param {any} xy - An array of interleaved XY coordinates
* @returns {any} The key name of the matched stroke
* @url http://www.espruino.com/Reference#l_Unistroke_recognise
*/
static recognise(strokes: any, xy: any): any;
}
/**
* Class containing AES encryption/decryption
* **Note:** This library is currently only included in builds for boards where
* there is space. For other boards there is `crypto.js` which implements SHA1 in
* JS.
* @url http://www.espruino.com/Reference#AES
*/
declare class AES {
/**
*
* @param {any} passphrase - Message to encrypt
* @param {any} key - Key to encrypt message - must be an ArrayBuffer of 128, 192, or 256 BITS
* @param {any} [options] - [optional] An object, may specify `{ iv : new Uint8Array(16), mode : 'CBC|CFB|CTR|OFB|ECB' }`
* @returns {any} Returns an ArrayBuffer
* @url http://www.espruino.com/Reference#l_AES_encrypt
*/
static encrypt(passphrase: any, key: any, options?: any): ArrayBuffer;
/**
*
* @param {any} passphrase - Message to decrypt
* @param {any} key - Key to encrypt message - must be an ArrayBuffer of 128, 192, or 256 BITS
* @param {any} [options] - [optional] An object, may specify `{ iv : new Uint8Array(16), mode : 'CBC|CFB|CTR|OFB|ECB' }`
* @returns {any} Returns an ArrayBuffer
* @url http://www.espruino.com/Reference#l_AES_decrypt
*/
static decrypt(passphrase: any, key: any, options?: any): ArrayBuffer;
}
/**
* Class containing utility functions for
* [Pixl.js](http://www.espruino.com/Pixl.js)
* @url http://www.espruino.com/Reference#Pixl
*/
declare class Pixl {
/**
* DEPRECATED - Please use `E.getBattery()` instead.
* Return an approximate battery percentage remaining based on a normal CR2032
* battery (2.8 - 2.2v)
* @returns {number} A percentage between 0 and 100
* @url http://www.espruino.com/Reference#l_Pixl_getBatteryPercentage
*/
static getBatteryPercentage(): number;
/**
* Set the LCD's contrast
*
* @param {number} c - Contrast between 0 and 1
* @url http://www.espruino.com/Reference#l_Pixl_setContrast
*/
static setContrast(c: number): void;
/**
* This function can be used to turn Pixl.js's LCD off or on.
* * With the LCD off, Pixl.js draws around 0.1mA
* * With the LCD on, Pixl.js draws around 0.25mA
*
* @param {boolean} isOn - True if the LCD should be on, false if not
* @url http://www.espruino.com/Reference#l_Pixl_setLCDPower
*/
static setLCDPower(isOn: boolean): void;
/**
* Writes a command directly to the ST7567 LCD controller
*
* @param {number} c
* @url http://www.espruino.com/Reference#l_Pixl_lcdw
*/
static lcdw(c: number): void;
/**
* Display a menu on Pixl.js's screen, and set up the buttons to navigate through
* it.
* DEPRECATED: Use `E.showMenu`
*
* @param {any} menu - An object containing name->function mappings to to be used in a menu
* @returns {any} A menu object with `draw`, `move` and `select` functions
* @url http://www.espruino.com/Reference#l_Pixl_menu
*/
static menu(menu: Menu): MenuInstance;
}
/**
* This class exists in order to interface Espruino with fast-moving trigger
* wheels. Trigger wheels are physical discs with evenly spaced teeth cut into
* them, and often with one or two teeth next to each other missing. A sensor sends
* a signal whenever a tooth passed by, and this allows a device to measure not
* only RPM, but absolute position.
* This class is currently in testing - it is NOT AVAILABLE on normal boards.
* @url http://www.espruino.com/Reference#Trig
*/
declare class Trig {
/**
* Get the position of the trigger wheel at the given time (from getTime)
*
* @param {number} time - The time at which to find the position
* @returns {number} The position of the trigger wheel in degrees - as a floating point number
* @url http://www.espruino.com/Reference#l_Trig_getPosAtTime
*/
static getPosAtTime(time: number): number;
/**
* Initialise the trigger class
*
* @param {Pin} pin - The pin to use for triggering
* @param {any} options - Additional options as an object. defaults are: ```{teethTotal:60,teethMissing:2,minRPM:30,keyPosition:0}```
* @url http://www.espruino.com/Reference#l_Trig_setup
*/
static setup(pin: Pin, options: any): void;
/**
* Set a trigger for a certain point in the cycle
*
* @param {number} num - The trigger number (0..7)
* @param {number} pos - The position (in degrees) to fire the trigger at
* @param {any} pins - An array of pins to pulse (max 4)
* @param {number} pulseLength - The time (in msec) to pulse for
* @url http://www.espruino.com/Reference#l_Trig_setTrigger
*/
static setTrigger(num: number, pos: number, pins: any, pulseLength: number): void;
/**
* Disable a trigger
*
* @param {number} num - The trigger number (0..7)
* @url http://www.espruino.com/Reference#l_Trig_killTrigger
*/
static killTrigger(num: number): void;
/**
* Get the current state of a trigger
*
* @param {number} num - The trigger number (0..7)
* @returns {any} A structure containing all information about the trigger
* @url http://www.espruino.com/Reference#l_Trig_getTrigger
*/
static getTrigger(num: number): any;
/**
* Get the RPM of the trigger wheel
* @returns {number} The current RPM of the trigger wheel
* @url http://www.espruino.com/Reference#l_Trig_getRPM
*/
static getRPM(): number;
/**
* Get the current error flags from the trigger wheel - and zero them
* @returns {number} The error flags
* @url http://www.espruino.com/Reference#l_Trig_getErrors
*/
static getErrors(): number;
/**
* Get the current error flags from the trigger wheel - and zero them
* @returns {any} An array of error strings
* @url http://www.espruino.com/Reference#l_Trig_getErrorArray
*/
static getErrorArray(): any;
}
/**
* This class helps to convert URLs into Objects of information ready for
* http.request/get
* @url http://www.espruino.com/Reference#url
*/
declare class url {
/**
* A utility function to split a URL into parts
* This is useful in web servers for instance when handling a request.
* For instance `url.parse("/a?b=c&d=e",true)` returns
* `{"method":"GET","host":"","path":"/a?b=c&d=e","pathname":"/a","search":"?b=c&d=e","port":80,"query":{"b":"c","d":"e"}}`
*
* @param {any} urlStr - A URL to be parsed
* @param {boolean} parseQuery - Whether to parse the query string into an object not (default = false)
* @returns {any} An object containing options for ```http.request``` or ```http.get```. Contains `method`, `host`, `path`, `pathname`, `search`, `port` and `query`
* @url http://www.espruino.com/Reference#l_url_parse
*/
static parse(urlStr: any, parseQuery: boolean): any;
}
/**
* The socket server created by `require('net').createServer`
* @url http://www.espruino.com/Reference#Server
*/
declare class Server {
/**
* Start listening for new connections on the given port
*
* @param {number} port - The port to listen on
* @returns {any} The HTTP server instance that 'listen' was called on
* @url http://www.espruino.com/Reference#l_Server_listen
*/
listen(port: number): any;
/**
* Stop listening for new connections
* @url http://www.espruino.com/Reference#l_Server_close
*/
close(): void;
}
/**
* An actual socket connection - allowing transmit/receive of TCP data
* @url http://www.espruino.com/Reference#Socket
*/
declare class Socket {
/**
* The 'data' event is called when data is received. If a handler is defined with
* `X.on('data', function(data) { ... })` then it will be called, otherwise data
* will be stored in an internal buffer, where it can be retrieved with `X.read()`
* @param {string} event - The event to listen to.
* @param {(data: any) => void} callback - A function that is executed when the event occurs. Its arguments are:
* * `data` A string containing one or more characters of received data
* @url http://www.espruino.com/Reference#l_Socket_data
*/
static on(event: "data", callback: (data: any) => void): void;
/**
* Called when the connection closes.
* @param {string} event - The event to listen to.
* @param {(had_error: any) => void} callback - A function that is executed when the event occurs. Its arguments are:
* * `had_error` A boolean indicating whether the connection had an error (use an error event handler to get error details).
* @url http://www.espruino.com/Reference#l_Socket_close
*/
static on(event: "close", callback: (had_error: any) => void): void;
/**
* There was an error on this socket and it is closing (or wasn't opened in the
* first place). If a "connected" event was issued on this socket then the error
* event is always followed by a close event. The error codes are:
* * -1: socket closed (this is not really an error and will not cause an error
* callback)
* * -2: out of memory (typically while allocating a buffer to hold data)
* * -3: timeout
* * -4: no route
* * -5: busy
* * -6: not found (DNS resolution)
* * -7: max sockets (... exceeded)
* * -8: unsent data (some data could not be sent)
* * -9: connection reset (or refused)
* * -10: unknown error
* * -11: no connection
* * -12: bad argument
* * -13: SSL handshake failed
* * -14: invalid SSL data
* @param {string} event - The event to listen to.
* @param {(details: any) => void} callback - A function that is executed when the event occurs. Its arguments are:
* * `details` An error object with an error code (a negative integer) and a message.
* @url http://www.espruino.com/Reference#l_Socket_error
*/
static on(event: "error", callback: (details: any) => void): void;
/**
* An event that is fired when the buffer is empty and it can accept more data to
* send.
* @param {string} event - The event to listen to.
* @param {() => void} callback - A function that is executed when the event occurs.
* @url http://www.espruino.com/Reference#l_Socket_drain
*/
static on(event: "drain", callback: () => void): void;
/**
* Return how many bytes are available to read. If there is already a listener for
* data, this will always return 0.
* @returns {number} How many bytes are available
* @url http://www.espruino.com/Reference#l_Socket_available
*/
available(): number;
/**
* Return a string containing characters that have been received
*
* @param {number} chars - The number of characters to read, or undefined/0 for all available
* @returns {any} A string containing the required bytes.
* @url http://www.espruino.com/Reference#l_Socket_read
*/
read(chars: number): any;
/**
* Pipe this to a stream (an object with a 'write' method)
*
* @param {any} destination - The destination file/stream that will receive content from the source.
* @param {any} [options]
* [optional] An object `{ chunkSize : int=32, end : bool=true, complete : function }`
* chunkSize : The amount of data to pipe from source to destination at a time
* complete : a function to call when the pipe activity is complete
* end : call the 'end' function on the destination when the source is finished
* @url http://www.espruino.com/Reference#l_Socket_pipe
*/
pipe(destination: any, options?: any): void;
/**
* This function writes the `data` argument as a string. Data that is passed in
* (including arrays) will be converted to a string with the normal JavaScript
* `toString` method.
* If you wish to send binary data then you need to convert that data directly to a
* String. This can be done with `String.fromCharCode`, however it's often easier
* and faster to use the Espruino-specific `E.toString`, which will read its
* arguments as an array of bytes and convert that to a String:
* ```
* socket.write(E.toString([0,1,2,3,4,5]));
* ```
* If you need to send something other than bytes, you can use 'Typed Arrays', or
* even `DataView`:
* ```
* var d = new DataView(new ArrayBuffer(8)); // 8 byte array buffer
* d.setFloat32(0, 765.3532564); // write float at bytes 0-3
* d.setInt8(4, 42); // write int8 at byte 4
* socket.write(E.toString(d.buffer))
* ```
*
* @param {any} data - A string containing data to send
* @returns {boolean} For node.js compatibility, returns the boolean false. When the send buffer is empty, a `drain` event will be sent
* @url http://www.espruino.com/Reference#l_Socket_write
*/
write(data: any): boolean;
/**
* Close this socket - optional data to append as an argument.
* See `Socket.write` for more information about the data argument
*
* @param {any} data - A string containing data to send
* @url http://www.espruino.com/Reference#l_Socket_end
*/
end(data: any): void;
}
/**
* An actual socket connection - allowing transmit/receive of TCP data
* @url http://www.espruino.com/Reference#dgramSocket
*/
declare class dgramSocket {
/**
* The 'message' event is called when a datagram message is received. If a handler
* is defined with `X.on('message', function(msg) { ... })` then it will be called`
* @param {string} event - The event to listen to.
* @param {(msg: any, rinfo: any) => void} callback - A function that is executed when the event occurs. Its arguments are:
* * `msg` A string containing the received message
* * `rinfo` Sender address,port containing information
* @url http://www.espruino.com/Reference#l_dgramSocket_message
*/
static on(event: "message", callback: (msg: any, rinfo: any) => void): void;
/**
* Called when the connection closes.
* @param {string} event - The event to listen to.
* @param {(had_error: any) => void} callback - A function that is executed when the event occurs. Its arguments are:
* * `had_error` A boolean indicating whether the connection had an error (use an error event handler to get error details).
* @url http://www.espruino.com/Reference#l_dgramSocket_close
*/
static on(event: "close", callback: (had_error: any) => void): void;
/**
*
* @param {any} buffer - A string containing message to send
* @param {any} offset - Offset in the passed string where the message starts [optional]
* @param {any} length - Number of bytes in the message [optional]
* @param {any} args - Destination port number, Destination IP address string
* @url http://www.espruino.com/Reference#l_dgramSocket_send
*/
send(buffer: any, offset: any, length: any, ...args: any[]): void;
/**
*
* @param {number} port - The port to bind at
* @param {any} callback - A function(res) that will be called when the socket is bound. You can then call `res.on('message', function(message, info) { ... })` and `res.on('close', function() { ... })` to deal with the response.
* @returns {any} The dgramSocket instance that 'bind' was called on
* @url http://www.espruino.com/Reference#l_dgramSocket_bind
*/
bind(port: number, callback: any): any;
/**
* Close the socket
* @url http://www.espruino.com/Reference#l_dgramSocket_close
*/
close(): void;
/**
*
* @param {any} group - A string containing the group ip to join
* @param {any} ip - A string containing the ip to join with
* @url http://www.espruino.com/Reference#l_dgramSocket_addMembership
*/
addMembership(group: any, ip: any): void;
}
/**
* The HTTP server created by `require('http').createServer`
* @url http://www.espruino.com/Reference#httpSrv
*/
declare class httpSrv {
/**
* Start listening for new HTTP connections on the given port
*
* @param {number} port - The port to listen on
* @returns {any} The HTTP server instance that 'listen' was called on
* @url http://www.espruino.com/Reference#l_httpSrv_listen
*/
listen(port: number): any;
/**
* Stop listening for new HTTP connections
* @url http://www.espruino.com/Reference#l_httpSrv_close
*/
close(): void;
}
/**
* The HTTP server request
* @url http://www.espruino.com/Reference#httpSRq
*/
declare class httpSRq {
/**
* The 'data' event is called when data is received. If a handler is defined with
* `X.on('data', function(data) { ... })` then it will be called, otherwise data
* will be stored in an internal buffer, where it can be retrieved with `X.read()`
* @param {string} event - The event to listen to.
* @param {(data: any) => void} callback - A function that is executed when the event occurs. Its arguments are:
* * `data` A string containing one or more characters of received data
* @url http://www.espruino.com/Reference#l_httpSRq_data
*/
static on(event: "data", callback: (data: any) => void): void;
/**
* Called when the connection closes.
* @param {string} event - The event to listen to.
* @param {() => void} callback - A function that is executed when the event occurs.
* @url http://www.espruino.com/Reference#l_httpSRq_close
*/
static on(event: "close", callback: () => void): void;
/**
* The headers to sent to the server with this HTTP request.
* @returns {any} An object mapping header name to value
* @url http://www.espruino.com/Reference#l_httpSRq_headers
*/
headers: any;
/**
* The HTTP method used with this request. Often `"GET"`.
* @returns {any} A string
* @url http://www.espruino.com/Reference#l_httpSRq_method
*/
method: any;
/**
* The URL requested in this HTTP request, for instance:
* * `"/"` - the main page
* * `"/favicon.ico"` - the web page's icon
* @returns {any} A string representing the URL
* @url http://www.espruino.com/Reference#l_httpSRq_url
*/
url: any;
/**
* Return how many bytes are available to read. If there is already a listener for
* data, this will always return 0.
* @returns {number} How many bytes are available
* @url http://www.espruino.com/Reference#l_httpSRq_available
*/
available(): number;
/**
* Return a string containing characters that have been received
*
* @param {number} chars - The number of characters to read, or undefined/0 for all available
* @returns {any} A string containing the required bytes.
* @url http://www.espruino.com/Reference#l_httpSRq_read
*/
read(chars: number): any;
/**
* Pipe this to a stream (an object with a 'write' method)
*
* @param {any} destination - The destination file/stream that will receive content from the source.
* @param {any} [options]
* [optional] An object `{ chunkSize : int=32, end : bool=true, complete : function }`
* chunkSize : The amount of data to pipe from source to destination at a time
* complete : a function to call when the pipe activity is complete
* end : call the 'end' function on the destination when the source is finished
* @url http://www.espruino.com/Reference#l_httpSRq_pipe
*/
pipe(destination: any, options?: any): void;
}
/**
* The HTTP server response
* @url http://www.espruino.com/Reference#httpSRs
*/
declare class httpSRs {
/**
* An event that is fired when the buffer is empty and it can accept more data to
* send.
* @param {string} event - The event to listen to.
* @param {() => void} callback - A function that is executed when the event occurs.
* @url http://www.espruino.com/Reference#l_httpSRs_drain
*/
static on(event: "drain", callback: () => void): void;
/**
* Called when the connection closes.
* @param {string} event - The event to listen to.
* @param {() => void} callback - A function that is executed when the event occurs.
* @url http://www.espruino.com/Reference#l_httpSRs_close
*/
static on(event: "close", callback: () => void): void;
/**
* The headers to send back along with the HTTP response.
* The default contents are:
* ```
* {
* "Connection": "close"
* }
* ```
* @returns {any} An object mapping header name to value
* @url http://www.espruino.com/Reference#l_httpSRs_headers
*/
headers: any;
/**
* This function writes the `data` argument as a string. Data that is passed in
* (including arrays) will be converted to a string with the normal JavaScript
* `toString` method. For more information about sending binary data see
* `Socket.write`
*
* @param {any} data - A string containing data to send
* @returns {boolean} For node.js compatibility, returns the boolean false. When the send buffer is empty, a `drain` event will be sent
* @url http://www.espruino.com/Reference#l_httpSRs_write
*/
write(data: any): boolean;
/**
* See `Socket.write` for more information about the data argument
*
* @param {any} data - A string containing data to send
* @url http://www.espruino.com/Reference#l_httpSRs_end
*/
end(data: any): void;
/**
* Send the given status code and headers. If not explicitly called this will be
* done automatically the first time data is written to the response.
* This cannot be called twice, or after data has already been sent in the
* response.
*
* @param {number} statusCode - The HTTP status code
* @param {any} headers - An object containing the headers
* @url http://www.espruino.com/Reference#l_httpSRs_writeHead
*/
writeHead(statusCode: number, headers: any): void;
/**
* Set a value to send in the header of this HTTP response. This updates the
* `httpSRs.headers` property.
* Any headers supplied to `writeHead` will overwrite any headers with the same
* name.
*
* @param {any} name - The name of the header as a String
* @param {any} value - The value of the header as a String
* @url http://www.espruino.com/Reference#l_httpSRs_setHeader
*/
setHeader(name: any, value: any): void;
}
/**
* The HTTP client request, returned by `http.request()` and `http.get()`.
* @url http://www.espruino.com/Reference#httpCRq
*/
declare class httpCRq {
/**
* An event that is fired when the buffer is empty and it can accept more data to
* send.
* @param {string} event - The event to listen to.
* @param {() => void} callback - A function that is executed when the event occurs.
* @url http://www.espruino.com/Reference#l_httpCRq_drain
*/
static on(event: "drain", callback: () => void): void;
/**
* An event that is fired if there is an error making the request and the response
* callback has not been invoked. In this case the error event concludes the
* request attempt. The error event function receives an error object as parameter
* with a `code` field and a `message` field.
* @param {string} event - The event to listen to.
* @param {() => void} callback - A function that is executed when the event occurs.
* @url http://www.espruino.com/Reference#l_httpCRq_error
*/
static on(event: "error", callback: () => void): void;
/**
* This function writes the `data` argument as a string. Data that is passed in
* (including arrays) will be converted to a string with the normal JavaScript
* `toString` method. For more information about sending binary data see
* `Socket.write`
*
* @param {any} data - A string containing data to send
* @returns {boolean} For node.js compatibility, returns the boolean false. When the send buffer is empty, a `drain` event will be sent
* @url http://www.espruino.com/Reference#l_httpCRq_write
*/
write(data: any): boolean;
/**
* Finish this HTTP request - optional data to append as an argument
* See `Socket.write` for more information about the data argument
*
* @param {any} data - A string containing data to send
* @url http://www.espruino.com/Reference#l_httpCRq_end
*/
end(data: any): void;
}
/**
* The HTTP client response, passed to the callback of `http.request()` an
* `http.get()`.
* @url http://www.espruino.com/Reference#httpCRs
*/
declare class httpCRs {
/**
* The 'data' event is called when data is received. If a handler is defined with
* `X.on('data', function(data) { ... })` then it will be called, otherwise data
* will be stored in an internal buffer, where it can be retrieved with `X.read()`
* @param {string} event - The event to listen to.
* @param {(data: any) => void} callback - A function that is executed when the event occurs. Its arguments are:
* * `data` A string containing one or more characters of received data
* @url http://www.espruino.com/Reference#l_httpCRs_data
*/
static on(event: "data", callback: (data: any) => void): void;
/**
* Called when the connection closes with one `hadError` boolean parameter, which
* indicates whether an error occurred.
* @param {string} event - The event to listen to.
* @param {() => void} callback - A function that is executed when the event occurs.
* @url http://www.espruino.com/Reference#l_httpCRs_close
*/
static on(event: "close", callback: () => void): void;
/**
* An event that is fired if there is an error receiving the response. The error
* event function receives an error object as parameter with a `code` field and a
* `message` field. After the error event the close even will also be triggered to
* conclude the HTTP request/response.
* @param {string} event - The event to listen to.
* @param {() => void} callback - A function that is executed when the event occurs.
* @url http://www.espruino.com/Reference#l_httpCRs_error
*/
static on(event: "error", callback: () => void): void;
/**
* The headers received along with the HTTP response
* @returns {any} An object mapping header name to value
* @url http://www.espruino.com/Reference#l_httpCRs_headers
*/
headers: any;
/**
* The HTTP response's status code - usually `"200"` if all went well
* @returns {any} The status code as a String
* @url http://www.espruino.com/Reference#l_httpCRs_statusCode
*/
statusCode: any;
/**
* The HTTP response's status message - Usually `"OK"` if all went well
* @returns {any} An String Status Message
* @url http://www.espruino.com/Reference#l_httpCRs_statusMessage
*/
statusMessage: any;
/**
* The HTTP version reported back by the server - usually `"1.1"`
* @returns {any} Th
* @url http://www.espruino.com/Reference#l_httpCRs_httpVersion
*/
httpVersion: any;
/**
* Return how many bytes are available to read. If there is a 'data' event handler,
* this will always return 0.
* @returns {number} How many bytes are available
* @url http://www.espruino.com/Reference#l_httpCRs_available
*/
available(): number;
/**
* Return a string containing characters that have been received
*
* @param {number} chars - The number of characters to read, or undefined/0 for all available
* @returns {any} A string containing the required bytes.
* @url http://www.espruino.com/Reference#l_httpCRs_read
*/
read(chars: number): any;
/**
* Pipe this to a stream (an object with a 'write' method)
*
* @param {any} destination - The destination file/stream that will receive content from the source.
* @param {any} [options]
* [optional] An object `{ chunkSize : int=32, end : bool=true, complete : function }`
* chunkSize : The amount of data to pipe from source to destination at a time
* complete : a function to call when the pipe activity is complete
* end : call the 'end' function on the destination when the source is finished
* @url http://www.espruino.com/Reference#l_httpCRs_pipe
*/
pipe(destination: any, options?: any): void;
}
/**
* An instantiation of an Ethernet network adaptor
* @url http://www.espruino.com/Reference#Ethernet
*/
declare class Ethernet {
/**
* Get the current IP address, subnet, gateway and mac address.
*
* @param {any} [options] - [optional] An `callback(err, ipinfo)` function to be called back with the IP information.
* @returns {any}
* @url http://www.espruino.com/Reference#l_Ethernet_getIP
*/
getIP(options?: any): any;
/**
* Set the current IP address or get an IP from DHCP (if no options object is
* specified)
* If 'mac' is specified as an option, it must be a string of the form
* `"00:01:02:03:04:05"` The default mac is 00:08:DC:01:02:03.
*
* @param {any} options - Object containing IP address options `{ ip : '1.2.3.4', subnet : '...', gateway: '...', dns:'...', mac:':::::' }`, or do not supply an object in order to force DHCP.
* @param {any} [callback] - [optional] An `callback(err)` function to invoke when ip is set. `err==null` on success, or a string on failure.
* @returns {boolean} True on success
* @url http://www.espruino.com/Reference#l_Ethernet_setIP
*/
setIP(options: any, callback?: any): boolean;
/**
* Set hostname used during the DHCP request. Minimum 8 and maximum 12 characters,
* best set before calling `eth.setIP()`. Default is WIZnet010203, 010203 is the
* default nic as part of the mac.
*
* @param {any} hostname - hostname as string
* @param {any} [callback] - [optional] An `callback(err)` function to be called back with null or error text.
* @returns {boolean} True on success
* @url http://www.espruino.com/Reference#l_Ethernet_setHostname
*/
setHostname(hostname: any, callback?: any): boolean;
/**
* Returns the hostname
*
* @param {any} [callback] - [optional] An `callback(err,hostname)` function to be called back with the status information.
* @returns {any}
* @url http://www.espruino.com/Reference#l_Ethernet_getHostname
*/
getHostname(callback?: any): any;
/**
* Get the current status of the ethernet device
*
* @param {any} [options] - [optional] An `callback(err, status)` function to be called back with the status information.
* @returns {any}
* @url http://www.espruino.com/Reference#l_Ethernet_getStatus
*/
getStatus(options?: any): any;
}
/**
* An instantiation of a WiFi network adaptor
* @url http://www.espruino.com/Reference#WLAN
*/
declare class WLAN {
/**
* Connect to a wireless network
*
* @param {any} ap - Access point name
* @param {any} key - WPA2 key (or undefined for unsecured connection)
* @param {any} callback - Function to call back with connection status. It has one argument which is one of 'connect'/'disconnect'/'dhcp'
* @returns {boolean} True if connection succeeded, false if it didn't.
* @url http://www.espruino.com/Reference#l_WLAN_connect
*/
connect(ap: any, key: any, callback: any): boolean;
/**
* Completely uninitialise and power down the CC3000. After this you'll have to use
* ```require("CC3000").connect()``` again.
* @url http://www.espruino.com/Reference#l_WLAN_disconnect
*/
disconnect(): void;
/**
* Completely uninitialise and power down the CC3000, then reconnect to the old
* access point.
* @url http://www.espruino.com/Reference#l_WLAN_reconnect
*/
reconnect(): void;
/**
* Get the current IP address
* @returns {any}
* @url http://www.espruino.com/Reference#l_WLAN_getIP
*/
getIP(): any;
/**
* Set the current IP address for get an IP from DHCP (if no options object is
* specified).
* **Note:** Changes are written to non-volatile memory, but will only take effect
* after calling `wlan.reconnect()`
*
* @param {any} options - Object containing IP address options `{ ip : '1,2,3,4', subnet, gateway, dns }`, or do not supply an object in otder to force DHCP.
* @returns {boolean} True on success
* @url http://www.espruino.com/Reference#l_WLAN_setIP
*/
setIP(options: any): boolean;
}
/**
* Class containing [micro:bit's](https://www.espruino.com/MicroBit) utility
* functions.
* @url http://www.espruino.com/Reference#Microbit
*/
declare class Microbit {
/**
* The micro:bit's speaker pin
* @returns {Pin}
* @url http://www.espruino.com/Reference#l_Microbit_SPEAKER
*/
static SPEAKER: Pin;
/**
* The micro:bit's microphone pin
* `MIC_ENABLE` should be set to 1 before using this
* @returns {Pin}
* @url http://www.espruino.com/Reference#l_Microbit_MIC
*/
static MIC: Pin;
/**
* The micro:bit's microphone enable pin
* @returns {Pin}
* @url http://www.espruino.com/Reference#l_Microbit_MIC_ENABLE
*/
static MIC_ENABLE: Pin;
/**
* Called when the Micro:bit is moved in a deliberate fashion, and includes data on
* the detected gesture.
* @param {string} event - The event to listen to.
* @param {(gesture: any) => void} callback - A function that is executed when the event occurs. Its arguments are:
* * `gesture` An Int8Array containing the accelerations (X,Y,Z) from the last gesture detected by the accelerometer
* @url http://www.espruino.com/Reference#l_Microbit_gesture
*/
static on(event: "gesture", callback: (gesture: any) => void): void;
/**
* @returns {any} An Object `{x,y,z}` of magnetometer readings as integers
* @url http://www.espruino.com/Reference#l_Microbit_mag
*/
static mag(): any;
/**
* @returns {any} An Object `{x,y,z}` of acceleration readings in G
* @url http://www.espruino.com/Reference#l_Microbit_accel
*/
static accel(): any;
/**
* **Note:** This function is only available on the [BBC micro:bit](/MicroBit)
* board
* Write the given value to the accelerometer
*
* @param {number} addr - Accelerometer address
* @param {number} data - Data to write
* @url http://www.espruino.com/Reference#l_Microbit_accelWr
*/
static accelWr(addr: number, data: number): void;
/**
* Turn on the accelerometer, and create `Microbit.accel` and `Microbit.gesture`
* events.
* **Note:** The accelerometer is currently always enabled - this code just
* responds to interrupts and reads
* @url http://www.espruino.com/Reference#l_Microbit_accelOn
*/
static accelOn(): void;
/**
* Turn off events from the accelerometer (started with `Microbit.accelOn`)
* @url http://www.espruino.com/Reference#l_Microbit_accelOff
*/
static accelOff(): void;
/**
* Play a waveform on the Micro:bit's speaker
*
* @param {any} waveform - An array of data to play (unsigned 8 bit)
* @param {any} samplesPerSecond - The number of samples per second for playback default is 4000
* @param {any} callback - A function to call when playback is finished
* @url http://www.espruino.com/Reference#l_Microbit_play
*/
static play(waveform: any, samplesPerSecond: any, callback: any): void;
/**
* Records sound from the micro:bit's onboard microphone and returns the result
*
* @param {any} samplesPerSecond - The number of samples per second for recording - 4000 is recommended
* @param {any} callback - A function to call with the result of recording (unsigned 8 bit ArrayBuffer)
* @param {any} [samples] - [optional] How many samples to record (6000 default)
* @url http://www.espruino.com/Reference#l_Microbit_record
*/
static record(samplesPerSecond: any, callback: any, samples?: any): void;
}
/**
* This is the File object - it allows you to stream data to and from files (As
* opposed to the `require('fs').readFile(..)` style functions that read an entire
* file).
* To create a File object, you must type ```var fd =
* E.openFile('filepath','mode')``` - see [E.openFile](#l_E_openFile) for more
* information.
* **Note:** If you want to remove an SD card after you have started using it, you
* *must* call `E.unmountSD()` or you may cause damage to the card.
* @url http://www.espruino.com/Reference#File
*/
declare class File {
/**
* Close an open file.
* @url http://www.espruino.com/Reference#l_File_close
*/
close(): void;
/**
* Write data to a file.
* **Note:** By default this function flushes all changes to the SD card, which
* makes it slow (but also safe!). You can use `E.setFlags({unsyncFiles:1})` to
* disable this behaviour and really speed up writes - but then you must be sure to
* close all files you are writing before power is lost or you will cause damage to
* your SD card's filesystem.
*
* @param {any} buffer - A string containing the bytes to write
* @returns {number} the number of bytes written
* @url http://www.espruino.com/Reference#l_File_write
*/
write(buffer: any): number;
/**
* Read data in a file in byte size chunks
*
* @param {number} length - is an integer specifying the number of bytes to read.
* @returns {any} A string containing the characters that were read
* @url http://www.espruino.com/Reference#l_File_read
*/
read(length: number): any;
/**
* Skip the specified number of bytes forward in the file
*
* @param {number} nBytes - is a positive integer specifying the number of bytes to skip forwards.
* @url http://www.espruino.com/Reference#l_File_skip
*/
skip(nBytes: number): void;
/**
* Seek to a certain position in the file
*
* @param {number} nBytes - is an integer specifying the number of bytes to skip forwards.
* @url http://www.espruino.com/Reference#l_File_seek
*/
seek(nBytes: number): void;
/**
* Pipe this file to a stream (an object with a 'write' method)
*
* @param {any} destination - The destination file/stream that will receive content from the source.
* @param {any} [options]
* [optional] An object `{ chunkSize : int=32, end : bool=true, complete : function }`
* chunkSize : The amount of data to pipe from source to destination at a time
* complete : a function to call when the pipe activity is complete
* end : call the 'end' function on the destination when the source is finished
* @url http://www.espruino.com/Reference#l_File_pipe
*/
pipe(destination: any, options?: any): void;
}
/**
* Class containing [Puck.js's](http://www.puck-js.com) utility functions.
* @url http://www.espruino.com/Reference#Puck
*/
declare class Puck {
/**
* Turn on the magnetometer, take a single reading, and then turn it off again.
* An object of the form `{x,y,z}` is returned containing magnetometer readings.
* Due to residual magnetism in the Puck and magnetometer itself, with no magnetic
* field the Puck will not return `{x:0,y:0,z:0}`.
* Instead, it's up to you to figure out what the 'zero value' is for your Puck in
* your location and to then subtract that from the value returned. If you're not
* trying to measure the Earth's magnetic field then it's a good idea to just take
* a reading at startup and use that.
* With the aerial at the top of the board, the `y` reading is vertical, `x` is
* horizontal, and `z` is through the board.
* Readings are in increments of 0.1 micro Tesla (uT). The Earth's magnetic field
* varies from around 25-60 uT, so the reading will vary by 250 to 600 depending on
* location.
* @returns {any} An Object `{x,y,z}` of magnetometer readings as integers
* @url http://www.espruino.com/Reference#l_Puck_mag
*/
static mag(): any;
/**
* Turn on the magnetometer, take a single temperature reading from the MAG3110
* chip, and then turn it off again.
* (If the magnetometer is already on, this just returns the last reading obtained)
* `E.getTemperature()` uses the microcontroller's temperature sensor, but this
* uses the magnetometer's.
* The reading obtained is an integer (so no decimal places), but the sensitivity
* is factory trimmed. to 1&deg;C, however the temperature offset isn't - so
* absolute readings may still need calibrating.
* @returns {number} Temperature in degrees C
* @url http://www.espruino.com/Reference#l_Puck_magTemp
*/
static magTemp(): number;
/**
* Called after `Puck.magOn()` every time magnetometer data is sampled. There is
* one argument which is an object of the form `{x,y,z}` containing magnetometer
* readings as integers (for more information see `Puck.mag()`).
* Check out [the Puck.js page on the
* magnetometer](http://www.espruino.com/Puck.js#on-board-peripherals) for more
* information.
* @param {string} event - The event to listen to.
* @param {() => void} callback - A function that is executed when the event occurs.
* @url http://www.espruino.com/Reference#l_Puck_mag
*/
static on(event: "mag", callback: () => void): void;
/**
* Only on Puck.js v2.0
* Called after `Puck.accelOn()` every time accelerometer data is sampled. There is
* one argument which is an object of the form `{acc:{x,y,z}, gyro:{x,y,z}}`
* containing the data.
* The data is as it comes off the accelerometer and is not scaled to 1g. For more
* information see `Puck.accel()` or [the Puck.js page on the
* magnetometer](http://www.espruino.com/Puck.js#on-board-peripherals).
* @param {string} event - The event to listen to.
* @param {() => void} callback - A function that is executed when the event occurs.
* @url http://www.espruino.com/Reference#l_Puck_accel
*/
static on(event: "accel", callback: () => void): void;
/**
* Turn the magnetometer on and start periodic sampling. Samples will then cause a
* 'mag' event on 'Puck':
* ```
* Puck.magOn();
* Puck.on('mag', function(xyz) {
* console.log(xyz);
* // {x:..., y:..., z:...}
* });
* // Turn events off with Puck.magOff();
* ```
* This call will be ignored if the sampling is already on.
* If given an argument, the sample rate is set (if not, it's at 0.63 Hz). The
* sample rate must be one of the following (resulting in the given power
* consumption):
* * 80 Hz - 900uA
* * 40 Hz - 550uA
* * 20 Hz - 275uA
* * 10 Hz - 137uA
* * 5 Hz - 69uA
* * 2.5 Hz - 34uA
* * 1.25 Hz - 17uA
* * 0.63 Hz - 8uA
* * 0.31 Hz - 8uA
* * 0.16 Hz - 8uA
* * 0.08 Hz - 8uA
* When the battery level drops too low while sampling is turned on, the
* magnetometer may stop sampling without warning, even while other Puck functions
* continue uninterrupted.
* Check out [the Puck.js page on the
* magnetometer](http://www.espruino.com/Puck.js#on-board-peripherals) for more
* information.
*
* @param {number} samplerate - The sample rate in Hz, or undefined
* @url http://www.espruino.com/Reference#l_Puck_magOn
*/
static magOn(samplerate: number): void;
/**
* Turn the magnetometer off
* @url http://www.espruino.com/Reference#l_Puck_magOff
*/
static magOff(): void;
/**
* Writes a register on the LIS3MDL / MAX3110 Magnetometer. Can be used for
* configuring advanced functions.
* Check out [the Puck.js page on the
* magnetometer](http://www.espruino.com/Puck.js#on-board-peripherals) for more
* information and links to modules that use this function.
*
* @param {number} reg
* @param {number} data
* @url http://www.espruino.com/Reference#l_Puck_magWr
*/
static magWr(reg: number, data: number): void;
/**
* Reads a register from the LIS3MDL / MAX3110 Magnetometer. Can be used for
* configuring advanced functions.
* Check out [the Puck.js page on the
* magnetometer](http://www.espruino.com/Puck.js#on-board-peripherals) for more
* information and links to modules that use this function.
*
* @param {number} reg
* @returns {number}
* @url http://www.espruino.com/Reference#l_Puck_magRd
*/
static magRd(reg: number): number;
/**
* On Puck.js v2.0 this will use the on-board PCT2075TP temperature sensor, but on
* Puck.js the less accurate on-chip Temperature sensor is used.
* @returns {number} Temperature in degrees C
* @url http://www.espruino.com/Reference#l_Puck_getTemperature
*/
static getTemperature(): number;
/**
* Accepted values are:
* * 1.6 Hz (no Gyro) - 40uA (2v05 and later firmware)
* * 12.5 Hz (with Gyro)- 350uA
* * 26 Hz (with Gyro) - 450 uA
* * 52 Hz (with Gyro) - 600 uA
* * 104 Hz (with Gyro) - 900 uA
* * 208 Hz (with Gyro) - 1500 uA
* * 416 Hz (with Gyro) (not recommended)
* * 833 Hz (with Gyro) (not recommended)
* * 1660 Hz (with Gyro) (not recommended)
* Once `Puck.accelOn()` is called, the `Puck.accel` event will be called each time
* data is received. `Puck.accelOff()` can be called to turn the accelerometer off.
* For instance to light the red LED whenever Puck.js is face up:
* ```
* Puck.on('accel', function(a) {
* digitalWrite(LED1, a.acc.z > 0);
* });
* Puck.accelOn();
* ```
* Check out [the Puck.js page on the
* accelerometer](http://www.espruino.com/Puck.js#on-board-peripherals) for more
* information.
*
* @param {number} samplerate - The sample rate in Hz, or undefined
* @url http://www.espruino.com/Reference#l_Puck_accelOn
*/
static accelOn(samplerate: number): void;
/**
* Turn the accelerometer off after it has been turned on by `Puck.accelOn()`.
* Check out [the Puck.js page on the
* accelerometer](http://www.espruino.com/Puck.js#on-board-peripherals) for more
* information.
* @url http://www.espruino.com/Reference#l_Puck_accelOff
*/
static accelOff(): void;
/**
* Turn on the accelerometer, take a single reading, and then turn it off again.
* The values reported are the raw values from the chip. In normal configuration:
* * accelerometer: full-scale (32768) is 4g, so you need to divide by 8192 to get
* correctly scaled values
* * gyro: full-scale (32768) is 245 dps, so you need to divide by 134 to get
* correctly scaled values
* If taking more than one reading, we'd suggest you use `Puck.accelOn()` and the
* `Puck.accel` event.
* @returns {any} An Object `{acc:{x,y,z}, gyro:{x,y,z}}` of accelerometer/gyro readings
* @url http://www.espruino.com/Reference#l_Puck_accel
*/
static accel(): any;
/**
* Writes a register on the LSM6DS3TR-C Accelerometer. Can be used for configuring
* advanced functions.
* Check out [the Puck.js page on the
* accelerometer](http://www.espruino.com/Puck.js#on-board-peripherals) for more
* information and links to modules that use this function.
*
* @param {number} reg
* @param {number} data
* @url http://www.espruino.com/Reference#l_Puck_accelWr
*/
static accelWr(reg: number, data: number): void;
/**
* Reads a register from the LSM6DS3TR-C Accelerometer. Can be used for configuring
* advanced functions.
* Check out [the Puck.js page on the
* accelerometer](http://www.espruino.com/Puck.js#on-board-peripherals) for more
* information and links to modules that use this function.
*
* @param {number} reg
* @returns {number}
* @url http://www.espruino.com/Reference#l_Puck_accelRd
*/
static accelRd(reg: number): number;
/**
* Transmit the given set of IR pulses - data should be an array of pulse times in
* milliseconds (as `[on, off, on, off, on, etc]`).
* For example `Puck.IR(pulseTimes)` - see http://www.espruino.com/Puck.js+Infrared
* for a full example.
* You can also attach an external LED to Puck.js, in which case you can just
* execute `Puck.IR(pulseTimes, led_cathode, led_anode)`
* It is also possible to just supply a single pin for IR transmission with
* `Puck.IR(pulseTimes, led_anode)` (on 2v05 and above).
*
* @param {any} data - An array of pulse lengths, in milliseconds
* @param {Pin} [cathode] - [optional] pin to use for IR LED cathode - if not defined, the built-in IR LED is used
* @param {Pin} [anode] - [optional] pin to use for IR LED anode - if not defined, the built-in IR LED is used
* @url http://www.espruino.com/Reference#l_Puck_IR
*/
static IR(data: any, cathode?: Pin, anode?: Pin): void;
/**
* Capacitive sense - the higher the capacitance, the higher the number returned.
* If called without arguments, a value depending on the capacitance of what is
* attached to pin D11 will be returned. If you attach a length of wire to D11,
* you'll be able to see a higher value returned when your hand is near the wire
* than when it is away.
* You can also supply pins to use yourself, however if you do this then the TX pin
* must be connected to RX pin and sense plate via a roughly 1MOhm resistor.
* When not supplying pins, Puck.js uses an internal resistor between D12(tx) and
* D11(rx).
*
* @param {Pin} tx
* @param {Pin} rx
* @returns {number} Capacitive sense counter
* @url http://www.espruino.com/Reference#l_Puck_capSense
*/
static capSense(tx: Pin, rx: Pin): number;
/**
* Return a light value based on the light the red LED is seeing.
* **Note:** If called more than 5 times per second, the received light value may
* not be accurate.
* @returns {number} A light value from 0 to 1
* @url http://www.espruino.com/Reference#l_Puck_light
*/
static light(): number;
/**
* DEPRECATED - Please use `E.getBattery()` instead.
* Return an approximate battery percentage remaining based on a normal CR2032
* battery (2.8 - 2.2v).
* @returns {number} A percentage between 0 and 100
* @url http://www.espruino.com/Reference#l_Puck_getBatteryPercentage
*/
static getBatteryPercentage(): number;
/**
* Run a self-test, and return true for a pass. This checks for shorts between
* pins, so your Puck shouldn't have anything connected to it.
* **Note:** This self-test auto starts if you hold the button on your Puck down
* while inserting the battery, leave it pressed for 3 seconds (while the green LED
* is lit) and release it soon after all LEDs turn on. 5 red blinks is a fail, 5
* green is a pass.
* If the self test fails, it'll set the Puck.js Bluetooth advertising name to
* `Puck.js !ERR` where ERR is a 3 letter error code.
* @returns {boolean} True if the self-test passed
* @url http://www.espruino.com/Reference#l_Puck_selfTest
*/
static selfTest(): boolean;
}
/**
* Class containing utility functions for the [Bangle.js Smart
* Watch](http://www.espruino.com/Bangle.js)
* @url http://www.espruino.com/Reference#Bangle
*/
declare class Bangle {
/**
* Accelerometer data available with `{x,y,z,diff,mag}` object as a parameter.
* * `x` is X axis (left-right) in `g`
* * `y` is Y axis (up-down) in `g`
* * `z` is Z axis (in-out) in `g`
* * `diff` is difference between this and the last reading in `g`
* * `mag` is the magnitude of the acceleration in `g`
* You can also retrieve the most recent reading with `Bangle.getAccel()`.
* @param {string} event - The event to listen to.
* @param {(xyz: any) => void} callback - A function that is executed when the event occurs. Its arguments are:
* * `xyz`
* @url http://www.espruino.com/Reference#l_Bangle_accel
*/
static on(event: "accel", callback: (xyz: AccelData) => void): void;
/**
* Called whenever a step is detected by Bangle.js's pedometer.
* @param {string} event - The event to listen to.
* @param {(up: number) => void} callback - A function that is executed when the event occurs. Its arguments are:
* * `up` The number of steps since Bangle.js was last reset
* @url http://www.espruino.com/Reference#l_Bangle_step
*/
static on(event: "step", callback: (up: number) => void): void;
/**
* See `Bangle.getHealthStatus()` for more information. This is used for health
* tracking to allow Bangle.js to record historical exercise data.
* @param {string} event - The event to listen to.
* @param {(info: any) => void} callback - A function that is executed when the event occurs. Its arguments are:
* * `info` An object containing the last 10 minutes health data
* @url http://www.espruino.com/Reference#l_Bangle_health
*/
static on(event: "health", callback: (info: HealthStatus) => void): void;
/**
* Has the watch been moved so that it is face-up, or not face up?
* @param {string} event - The event to listen to.
* @param {(up: boolean) => void} callback - A function that is executed when the event occurs. Its arguments are:
* * `up` `true` if face-up
* @url http://www.espruino.com/Reference#l_Bangle_faceUp
*/
static on(event: "faceUp", callback: (up: boolean) => void): void;
/**
* This event happens when the watch has been twisted around it's axis - for
* instance as if it was rotated so someone could look at the time.
* To tweak when this happens, see the `twist*` options in `Bangle.setOptions()`
* @param {string} event - The event to listen to.
* @param {() => void} callback - A function that is executed when the event occurs.
* @url http://www.espruino.com/Reference#l_Bangle_twist
*/
static on(event: "twist", callback: () => void): void;
/**
* Is the battery charging or not?
* @param {string} event - The event to listen to.
* @param {(charging: boolean) => void} callback - A function that is executed when the event occurs. Its arguments are:
* * `charging` `true` if charging
* @url http://www.espruino.com/Reference#l_Bangle_charging
*/
static on(event: "charging", callback: (charging: boolean) => void): void;
/**
* Magnetometer/Compass data available with `{x,y,z,dx,dy,dz,heading}` object as a
* parameter
* * `x/y/z` raw x,y,z magnetometer readings
* * `dx/dy/dz` readings based on calibration since magnetometer turned on
* * `heading` in degrees based on calibrated readings (will be NaN if magnetometer
* hasn't been rotated around 360 degrees).
* **Note:** In 2v15 firmware and earlier the heading is inverted (360-heading). There's
* a fix in the bootloader which will apply a fix for those headings, but old apps may
* still expect an inverted value.
* To get this event you must turn the compass on with `Bangle.setCompassPower(1)`.
* You can also retrieve the most recent reading with `Bangle.getCompass()`.
* @param {string} event - The event to listen to.
* @param {(xyz: any) => void} callback - A function that is executed when the event occurs. Its arguments are:
* * `xyz`
* @url http://www.espruino.com/Reference#l_Bangle_mag
*/
static on(event: "mag", callback: (xyz: CompassData) => void): void;
/**
* Raw NMEA GPS / u-blox data messages received as a string
* To get this event you must turn the GPS on with `Bangle.setGPSPower(1)`.
* @param {string} event - The event to listen to.
* @param {(nmea: any, dataLoss: boolean) => void} callback - A function that is executed when the event occurs. Its arguments are:
* * `nmea` A string containing the raw NMEA data from the GPS
* * `dataLoss` This is set to true if some lines of GPS data have previously been lost (eg because system was too busy to queue up a GPS-raw event)
* @url http://www.espruino.com/Reference#l_Bangle_GPS-raw
*/
static on(event: "GPS-raw", callback: (nmea: string, dataLoss: boolean) => void): void;
/**
* GPS data, as an object. Contains:
* ```
* { "lat": number, // Latitude in degrees
* "lon": number, // Longitude in degrees
* "alt": number, // altitude in M
* "speed": number, // Speed in kph
* "course": number, // Course in degrees
* "time": Date, // Current Time (or undefined if not known)
* "satellites": 7, // Number of satellites
* "fix": 1 // NMEA Fix state - 0 is no fix
* "hdop": number, // Horizontal Dilution of Precision
* }
* ```
* If a value such as `lat` is not known because there is no fix, it'll be `NaN`.
* `hdop` is a value from the GPS receiver that gives a rough idea of accuracy of
* lat/lon based on the geometry of the satellites in range. Multiply by 5 to get a
* value in meters. This is just a ballpark estimation and should not be considered
* remotely accurate.
* To get this event you must turn the GPS on with `Bangle.setGPSPower(1)`.
* @param {string} event - The event to listen to.
* @param {(fix: any) => void} callback - A function that is executed when the event occurs. Its arguments are:
* * `fix` An object with fix info (see below)
* @url http://www.espruino.com/Reference#l_Bangle_GPS
*/
static on(event: "GPS", callback: (fix: GPSFix) => void): void;
/**
* Heat rate data, as an object. Contains:
* ```
* { "bpm": number, // Beats per minute
* "confidence": number, // 0-100 percentage confidence in the heart rate
* "raw": Uint8Array, // raw samples from heart rate monitor
* }
* ```
* To get this event you must turn the heart rate monitor on with
* `Bangle.setHRMPower(1)`.
* @param {string} event - The event to listen to.
* @param {(hrm: any) => void} callback - A function that is executed when the event occurs. Its arguments are:
* * `hrm` An object with heart rate info (see below)
* @url http://www.espruino.com/Reference#l_Bangle_HRM
*/
static on(event: "HRM", callback: (hrm: { bpm: number, confidence: number, raw: Uint8Array }) => void): void;
/**
* Called when heart rate sensor data is available - see `Bangle.setHRMPower(1)`.
* `hrm` is of the form:
* ```
* { "raw": -1, // raw value from sensor
* "filt": -1, // bandpass-filtered raw value from sensor
* "bpm": 88.9, // last BPM value measured
* "confidence": 0 // confidence in the BPM value
* }
* ```
* @param {string} event - The event to listen to.
* @param {(hrm: any) => void} callback - A function that is executed when the event occurs. Its arguments are:
* * `hrm` A object containing instant readings from the heart rate sensor
* @url http://www.espruino.com/Reference#l_Bangle_HRM-raw
*/
static on(event: "HRM-raw", callback: (hrm: { raw: number, filt: number, bpm: number, confidence: number }) => void): void;
/**
* When `Bangle.setBarometerPower(true)` is called, this event is fired containing
* barometer readings.
* Same format as `Bangle.getPressure()`
* @param {string} event - The event to listen to.
* @param {(e: any) => void} callback - A function that is executed when the event occurs. Its arguments are:
* * `e` An object containing `{temperature,pressure,altitude}`
* @url http://www.espruino.com/Reference#l_Bangle_pressure
*/
static on(event: "pressure", callback: (e: PressureData) => void): void;
/**
* Has the screen been turned on or off? Can be used to stop tasks that are no
* longer useful if nothing is displayed. Also see `Bangle.isLCDOn()`
* @param {string} event - The event to listen to.
* @param {(on: boolean) => void} callback - A function that is executed when the event occurs. Its arguments are:
* * `on` `true` if screen is on
* @url http://www.espruino.com/Reference#l_Bangle_lcdPower
*/
static on(event: "lcdPower", callback: (on: boolean) => void): void;
/**
* Has the screen been locked? Also see `Bangle.isLocked()`
* @param {string} event - The event to listen to.
* @param {(on: boolean) => void} callback - A function that is executed when the event occurs. Its arguments are:
* * `on` `true` if screen is locked, `false` if it is unlocked and touchscreen/buttons will work
* @url http://www.espruino.com/Reference#l_Bangle_lock
*/
static on(event: "lock", callback: (on: boolean) => void): void;
/**
* If the watch is tapped, this event contains information on the way it was
* tapped.
* `dir` reports the side of the watch that was tapped (not the direction it was
* tapped in).
* ```
* {
* dir : "left/right/top/bottom/front/back",
* double : true/false // was this a double-tap?
* x : -2 .. 2, // the axis of the tap
* y : -2 .. 2, // the axis of the tap
* z : -2 .. 2 // the axis of the tap
* ```
* @param {string} event - The event to listen to.
* @param {(data: any) => void} callback - A function that is executed when the event occurs. Its arguments are:
* * `data` `{dir, double, x, y, z}`
* @url http://www.espruino.com/Reference#l_Bangle_tap
*/
static on(event: "tap", callback: (data: { dir: "left" | "right" | "top" | "bottom" | "front" | "back", double: boolean, x: TapAxis, y: TapAxis, z: TapAxis }) => void): void;
/**
* Emitted when a 'gesture' (fast movement) is detected
* @param {string} event - The event to listen to.
* @param {(xyz: any) => void} callback - A function that is executed when the event occurs. Its arguments are:
* * `xyz` An Int8Array of XYZXYZXYZ data
* @url http://www.espruino.com/Reference#l_Bangle_gesture
*/
static on(event: "gesture", callback: (xyz: Int8Array) => void): void;
/**
* Emitted when a 'gesture' (fast movement) is detected, and a Tensorflow model is
* in storage in the `".tfmodel"` file.
* If a `".tfnames"` file is specified as a comma-separated list of names, it will
* be used to decode `gesture` from a number into a string.
* @param {string} event - The event to listen to.
* @param {(gesture: any, weights: any) => void} callback - A function that is executed when the event occurs. Its arguments are:
* * `gesture` The name of the gesture (if '.tfnames' exists, or the index. 'undefined' if not matching
* * `weights` An array of floating point values output by the model
* @url http://www.espruino.com/Reference#l_Bangle_aiGesture
*/
static on(event: "aiGesture", callback: (gesture: string | undefined, weights: number[]) => void): void;
/**
* Emitted when a swipe on the touchscreen is detected (a movement from
* left->right, right->left, down->up or up->down)
* Bangle.js 1 is only capable of detecting left/right swipes as it only contains a
* 2 zone touchscreen.
* @param {string} event - The event to listen to.
* @param {(directionLR: number, directionUD: number) => void} callback - A function that is executed when the event occurs. Its arguments are:
* * `directionLR` `-1` for left, `1` for right, `0` for up/down
* * `directionUD` `-1` for up, `1` for down, `0` for left/right (Bangle.js 2 only)
* @url http://www.espruino.com/Reference#l_Bangle_swipe
*/
static on(event: "swipe", callback: SwipeCallback): void;
/**
* Emitted when the touchscreen is pressed
* @param {string} event - The event to listen to.
* @param {(button: number, xy: any) => void} callback - A function that is executed when the event occurs. Its arguments are:
* * `button` `1` for left, `2` for right
* * `xy` Object of form `{x,y}` containing touch coordinates (if the device supports full touch). Clipped to 0..175 (LCD pixel coordinates) on firmware 2v13 and later.
* @url http://www.espruino.com/Reference#l_Bangle_touch
*/
static on(event: "touch", callback: TouchCallback): void;
/**
* Emitted when the touchscreen is dragged or released
* The touchscreen extends past the edge of the screen and while `x` and `y`
* coordinates are arranged such that they align with the LCD's pixels, if your
* finger goes towards the edge of the screen, `x` and `y` could end up larger than
* 175 (the screen's maximum pixel coordinates) or smaller than 0. Coordinates from
* the `touch` event are clipped.
* @param {string} event - The event to listen to.
* @param {(event: any) => void} callback - A function that is executed when the event occurs. Its arguments are:
* * `event` Object of form `{x,y,dx,dy,b}` containing touch coordinates, difference in touch coordinates, and an integer `b` containing number of touch points (currently 1 or 0)
* @url http://www.espruino.com/Reference#l_Bangle_drag
*/
static on(event: "drag", callback: DragCallback): void;
/**
* Emitted when the touchscreen is dragged for a large enough distance to count as
* a gesture.
* If Bangle.strokes is defined and populated with data from `Unistroke.new`, the
* `event` argument will also contain a `stroke` field containing the most closely
* matching stroke name.
* For example:
* ```
* Bangle.strokes = {
* up : Unistroke.new(new Uint8Array([57, 151, ... 158, 137])),
* alpha : Unistroke.new(new Uint8Array([161, 55, ... 159, 161])),
* };
* Bangle.on('stroke',o=>{
* print(o.stroke);
* g.clear(1).drawPoly(o.xy);
* });
* // Might print something like
* {
* "xy": new Uint8Array([149, 50, ... 107, 136]),
* "stroke": "alpha"
* }
* ```
* @param {string} event - The event to listen to.
* @param {(event: any) => void} callback - A function that is executed when the event occurs. Its arguments are:
* * `event` Object of form `{xy:Uint8Array([x1,y1,x2,y2...])}` containing touch coordinates
* @url http://www.espruino.com/Reference#l_Bangle_stroke
*/
static on(event: "stroke", callback: (event: { xy: Uint8Array, stroke?: string }) => void): void;
/**
* Emitted at midnight (at the point the `day` health info is reset to 0).
* Can be used for housekeeping tasks that don't want to be run during the day.
* @param {string} event - The event to listen to.
* @param {() => void} callback - A function that is executed when the event occurs.
* @url http://www.espruino.com/Reference#l_Bangle_midnight
*/
static on(event: "midnight", callback: () => void): void;
/**
* This function can be used to turn Bangle.js's LCD off or on.
* This function resets the Bangle's 'activity timer' (like pressing a button or
* the screen would) so after a time period of inactivity set by
* `Bangle.setLCDTimeout` the screen will turn off.
* If you want to keep the screen on permanently (until apps are changed) you can
* do:
* ```
* Bangle.setLCDTimeout(0); // turn off the timeout
* Bangle.setLCDPower(1); // keep screen on
* ```
* **When on full, the LCD draws roughly 40mA.** You can adjust When brightness
* using `Bangle.setLCDBrightness`.
*
* @param {boolean} isOn - True if the LCD should be on, false if not
* @url http://www.espruino.com/Reference#l_Bangle_setLCDPower
*/
static setLCDPower(isOn: boolean): void;
/**
* This function can be used to adjust the brightness of Bangle.js's display, and
* hence prolong its battery life.
* Due to hardware design constraints, software PWM has to be used which means that
* the display may flicker slightly when Bluetooth is active and the display is not
* at full power.
* **Power consumption**
* * 0 = 7mA
* * 0.1 = 12mA
* * 0.2 = 18mA
* * 0.5 = 28mA
* * 0.9 = 40mA (switching overhead)
* * 1 = 40mA
*
* @param {number} brightness - The brightness of Bangle.js's display - from 0(off) to 1(on full)
* @url http://www.espruino.com/Reference#l_Bangle_setLCDBrightness
*/
static setLCDBrightness(brightness: number): void;
/**
* This function can be used to change the way graphics is handled on Bangle.js.
* Available options for `Bangle.setLCDMode` are:
* * `Bangle.setLCDMode()` or `Bangle.setLCDMode("direct")` (the default) - The
* drawable area is 240x240 16 bit. Unbuffered, so draw calls take effect
* immediately. Terminal and vertical scrolling work (horizontal scrolling
* doesn't).
* * `Bangle.setLCDMode("doublebuffered")` - The drawable area is 240x160 16 bit,
* terminal and scrolling will not work. `g.flip()` must be called for draw
* operations to take effect.
* * `Bangle.setLCDMode("120x120")` - The drawable area is 120x120 8 bit,
* `g.getPixel`, terminal, and full scrolling work. Uses an offscreen buffer
* stored on Bangle.js, `g.flip()` must be called for draw operations to take
* effect.
* * `Bangle.setLCDMode("80x80")` - The drawable area is 80x80 8 bit, `g.getPixel`,
* terminal, and full scrolling work. Uses an offscreen buffer stored on
* Bangle.js, `g.flip()` must be called for draw operations to take effect.
* You can also call `Bangle.setLCDMode()` to return to normal, unbuffered
* `"direct"` mode.
*
* @param {any} mode - The LCD mode (See below)
* @url http://www.espruino.com/Reference#l_Bangle_setLCDMode
*/
static setLCDMode(mode?: LCDMode): void;
/**
* The current LCD mode.
* See `Bangle.setLCDMode` for examples.
* @returns {any} The LCD mode as a String
* @url http://www.espruino.com/Reference#l_Bangle_getLCDMode
*/
static getLCDMode(): LCDMode;
/**
* This can be used to move the displayed memory area up or down temporarily. It's
* used for displaying notifications while keeping the main display contents
* intact.
*
* @param {number} y - The amount of pixels to shift the LCD up or down
* @url http://www.espruino.com/Reference#l_Bangle_setLCDOffset
*/
static setLCDOffset(y: number): void;
/**
* Overlay an image or graphics instance on top of the contents of the graphics buffer.
* This only works on Bangle.js 2 because Bangle.js 1 doesn't have an offscreen buffer accessible from the CPU.
* ```
* // display an alarm clock icon on the screen
* var img = require("heatshrink").decompress(atob(`lss4UBvvv///ovBlMyqoADv/VAwlV//1qtfAQX/BINXDoPVq/9DAP
* /AYIKDrWq0oREAYPW1QAB1IWCBQXaBQWq04WCAQP6BQeqA4P1AQPq1WggEK1WrBAIkBBQJsCBYO///fBQOoPAcqCwP3BQnwgECCwP9
* GwIKCngWC14sB7QKCh4CBCwN/64KDgfACwWn6vWGwYsBCwOputWJgYsCgGqytVBQYsCLYOlqtqwAsFEINVrR4BFgghBBQosDEINWIQ
* YsDEIQ3DFgYhCG4msSYeVFgnrFhMvOAgsEkE/FhEggYWCFgIhDkEACwQKBEIYKBCwSGFBQJxCQwYhBBQTKDqohCBQhCCEIJlDXwrKE
* BQoWHBQdaCwuqJoI4CCwgKECwJ9CJgIKDq+qBYUq1WtBQf+BYIAC3/VBQX/tQKDz/9BQY5BAAVV/4WCBQJcBKwVf+oHBv4wCAAYhB`));
* Bangle.setLCDOverlay(img,66,66);
* ```
* Or use a `Graphics` instance:
* ```
* var ovr = Graphics.createArrayBuffer(100,100,1,{msb:true}); // 1bpp
* ovr.drawLine(0,0,100,100);
* ovr.drawRect(0,0,99,99);
* Bangle.setLCDOverlay(ovr,38,38);
* ```
* Although `Graphics` can be specified directly, it can often make more sense to
* create an Image from the `Graphics` instance, as this gives you access
* to color palettes and transparent colors. For instance this will draw a colored
* overlay with rounded corners:
* ```
* var ovr = Graphics.createArrayBuffer(100,100,2,{msb:true});
* ovr.setColor(1).fillRect({x:0,y:0,w:99,h:99,r:8});
* ovr.setColor(3).fillRect({x:2,y:2,w:95,h:95,r:7});
* ovr.setColor(2).setFont("Vector:30").setFontAlign(0,0).drawString("Hi",50,50);
* Bangle.setLCDOverlay({
* width:ovr.getWidth(), height:ovr.getHeight(),
* bpp:2, transparent:0,
* palette:new Uint16Array([0,0,g.toColor("#F00"),g.toColor("#FFF")]),
* buffer:ovr.buffer
* },38,38);
* ```
*
* @param {any} img - An image
* @param {number} x - The X offset the graphics instance should be overlaid on the screen with
* @param {number} y - The Y offset the graphics instance should be overlaid on the screen with
* @url http://www.espruino.com/Reference#l_Bangle_setLCDOverlay
*/
static setLCDOverlay(img: any, x: number, y: number): void;
/**
* This function can be used to turn Bangle.js's LCD power saving on or off.
* With power saving off, the display will remain in the state you set it with
* `Bangle.setLCDPower`.
* With power saving on, the display will turn on if a button is pressed, the watch
* is turned face up, or the screen is updated (see `Bangle.setOptions` for
* configuration). It'll turn off automatically after the given timeout.
* **Note:** This function also sets the Backlight and Lock timeout (the time at
* which the touchscreen/buttons start being ignored). To set both separately, use
* `Bangle.setOptions`
*
* @param {number} isOn - The timeout of the display in seconds, or `0`/`undefined` to turn power saving off. Default is 10 seconds.
* @url http://www.espruino.com/Reference#l_Bangle_setLCDTimeout
*/
static setLCDTimeout(isOn: number): void;
/**
* Set how often the watch should poll for new acceleration/gyro data and kick the
* Watchdog timer. It isn't recommended that you make this interval much larger
* than 1000ms, but values up to 4000ms are allowed.
* Calling this will set `Bangle.setOptions({powerSave: false})` - disabling the
* dynamic adjustment of poll interval to save battery power when Bangle.js is
* stationary.
*
* @param {number} interval - Polling interval in milliseconds (Default is 80ms - 12.5Hz to match accelerometer)
* @url http://www.espruino.com/Reference#l_Bangle_setPollInterval
*/
static setPollInterval(interval: number): void;
/**
* Set internal options used for gestures, etc...
* * `wakeOnBTN1` should the LCD turn on when BTN1 is pressed? default = `true`
* * `wakeOnBTN2` (Bangle.js 1) should the LCD turn on when BTN2 is pressed?
* default = `true`
* * `wakeOnBTN3` (Bangle.js 1) should the LCD turn on when BTN3 is pressed?
* default = `true`
* * `wakeOnFaceUp` should the LCD turn on when the watch is turned face up?
* default = `false`
* * `wakeOnTouch` should the LCD turn on when the touchscreen is pressed? default
* = `false`
* * `wakeOnTwist` should the LCD turn on when the watch is twisted? default =
* `true`
* * `twistThreshold` How much acceleration to register a twist of the watch strap?
* Can be negative for opposite direction. default = `800`
* * `twistMaxY` Maximum acceleration in Y to trigger a twist (low Y means watch is
* facing the right way up). default = `-800`
* * `twistTimeout` How little time (in ms) must a twist take from low->high
* acceleration? default = `1000`
* * `gestureStartThresh` how big a difference before we consider a gesture
* started? default = `sqr(800)`
* * `gestureEndThresh` how small a difference before we consider a gesture ended?
* default = `sqr(2000)`
* * `gestureInactiveCount` how many samples do we keep after a gesture has ended?
* default = `4`
* * `gestureMinLength` how many samples must a gesture have before we notify about
* it? default = `10`
* * `powerSave` after a minute of not being moved, Bangle.js will change the
* accelerometer poll interval down to 800ms (10x accelerometer samples). On
* movement it'll be raised to the default 80ms. If `Bangle.setPollInterval` is
* used this is disabled, and for it to work the poll interval must be either
* 80ms or 800ms. default = `true`. Setting `powerSave:false` will disable this
* automatic power saving, but will **not** change the poll interval from its
* current value. If you desire a specific interval (e.g. the default 80ms) you
* must set it manually with `Bangle.setPollInterval(80)` after setting
* `powerSave:false`.
* * `lockTimeout` how many milliseconds before the screen locks
* * `lcdPowerTimeout` how many milliseconds before the screen turns off
* * `backlightTimeout` how many milliseconds before the screen's backlight turns
* off
* * `btnLoadTimeout` how many milliseconds does the home button have to be pressed
* for before the clock is reloaded? 1500ms default, or 0 means never.
* * `hrmPollInterval` set the requested poll interval (in milliseconds) for the
* heart rate monitor. On Bangle.js 2 only 10,20,40,80,160,200 ms are supported,
* and polling rate may not be exact. The algorithm's filtering is tuned for
* 20-40ms poll intervals, so higher/lower intervals may effect the reliability
* of the BPM reading.
* * `seaLevelPressure` (Bangle.js 2) Normally 1013.25 millibars - this is used for
* calculating altitude with the pressure sensor
* Where accelerations are used they are in internal units, where `8192 = 1g`
*
* @param {any} options
* @url http://www.espruino.com/Reference#l_Bangle_setOptions
*/
static setOptions(options: { [key in keyof BangleOptions]?: BangleOptions[key] }): void;
/**
* Return the current state of options as set by `Bangle.setOptions`
* @returns {any} The current state of all options
* @url http://www.espruino.com/Reference#l_Bangle_getOptions
*/
static getOptions(): BangleOptions;
/**
* Also see the `Bangle.lcdPower` event
* @returns {boolean} Is the display on or not?
* @url http://www.espruino.com/Reference#l_Bangle_isLCDOn
*/
static isLCDOn(): boolean;
/**
* This function can be used to lock or unlock Bangle.js (e.g. whether buttons and
* touchscreen work or not)
*
* @param {boolean} isLocked - `true` if the Bangle is locked (no user input allowed)
* @url http://www.espruino.com/Reference#l_Bangle_setLocked
*/
static setLocked(isLocked: boolean): void;
/**
* Also see the `Bangle.lock` event
* @returns {boolean} Is the screen locked or not?
* @url http://www.espruino.com/Reference#l_Bangle_isLocked
*/
static isLocked(): boolean;
/**
* @returns {boolean} Is the battery charging or not?
* @url http://www.espruino.com/Reference#l_Bangle_isCharging
*/
static isCharging(): boolean;
/**
* Writes a command directly to the ST7735 LCD controller
*
* @param {number} cmd
* @param {any} data
* @url http://www.espruino.com/Reference#l_Bangle_lcdWr
*/
static lcdWr(cmd: number, data: any): void;
/**
* Set the power to the Heart rate monitor
* When on, data is output via the `HRM` event on `Bangle`:
* ```
* Bangle.setHRMPower(true, "myapp");
* Bangle.on('HRM',print);
* ```
* *When on, the Heart rate monitor draws roughly 5mA*
*
* @param {boolean} isOn - True if the heart rate monitor should be on, false if not
* @param {any} appID - A string with the app's name in, used to ensure one app can't turn off something another app is using
* @returns {boolean} Is HRM on?
* @url http://www.espruino.com/Reference#l_Bangle_setHRMPower
*/
static setHRMPower(isOn: boolean, appID: string): boolean;
/**
* Is the Heart rate monitor powered?
* Set power with `Bangle.setHRMPower(...);`
* @returns {boolean} Is HRM on?
* @url http://www.espruino.com/Reference#l_Bangle_isHRMOn
*/
static isHRMOn(): boolean;
/**
* Set the power to the GPS.
* When on, data is output via the `GPS` event on `Bangle`:
* ```
* Bangle.setGPSPower(true, "myapp");
* Bangle.on('GPS',print);
* ```
* *When on, the GPS draws roughly 20mA*
*
* @param {boolean} isOn - True if the GPS should be on, false if not
* @param {any} appID - A string with the app's name in, used to ensure one app can't turn off something another app is using
* @returns {boolean} Is the GPS on?
* @url http://www.espruino.com/Reference#l_Bangle_setGPSPower
*/
static setGPSPower(isOn: boolean, appID: string): boolean;
/**
* Is the GPS powered?
* Set power with `Bangle.setGPSPower(...);`
* @returns {boolean} Is the GPS on?
* @url http://www.espruino.com/Reference#l_Bangle_isGPSOn
*/
static isGPSOn(): boolean;
/**
* Get the last available GPS fix info (or `undefined` if GPS is off).
* The fix info received is the same as you'd get from the `Bangle.GPS` event.
* @returns {any} A GPS fix object with `{lat,lon,...}`
* @url http://www.espruino.com/Reference#l_Bangle_getGPSFix
*/
static getGPSFix(): GPSFix;
/**
* Set the power to the Compass
* When on, data is output via the `mag` event on `Bangle`:
* ```
* Bangle.setCompassPower(true, "myapp");
* Bangle.on('mag',print);
* ```
* *When on, the compass draws roughly 2mA*
*
* @param {boolean} isOn - True if the Compass should be on, false if not
* @param {any} appID - A string with the app's name in, used to ensure one app can't turn off something another app is using
* @returns {boolean} Is the Compass on?
* @url http://www.espruino.com/Reference#l_Bangle_setCompassPower
*/
static setCompassPower(isOn: boolean, appID: string): boolean;
/**
* Is the compass powered?
* Set power with `Bangle.setCompassPower(...);`
* @returns {boolean} Is the Compass on?
* @url http://www.espruino.com/Reference#l_Bangle_isCompassOn
*/
static isCompassOn(): boolean;
/**
* Resets the compass minimum/maximum values. Can be used if the compass isn't
* providing a reliable heading any more.
*
* @url http://www.espruino.com/Reference#l_Bangle_resetCompass
*/
static resetCompass(): void;
/**
* Set the power to the barometer IC. Once enabled, `Bangle.pressure` events are
* fired each time a new barometer reading is available.
* When on, the barometer draws roughly 50uA
*
* @param {boolean} isOn - True if the barometer IC should be on, false if not
* @param {any} appID - A string with the app's name in, used to ensure one app can't turn off something another app is using
* @returns {boolean} Is the Barometer on?
* @url http://www.espruino.com/Reference#l_Bangle_setBarometerPower
*/
static setBarometerPower(isOn: boolean, appID: string): boolean;
/**
* Is the Barometer powered?
* Set power with `Bangle.setBarometerPower(...);`
* @returns {boolean} Is the Barometer on?
* @url http://www.espruino.com/Reference#l_Bangle_isBarometerOn
*/
static isBarometerOn(): boolean;
/**
* Returns the current amount of steps recorded by the step counter
* @returns {number} The number of steps recorded by the step counter
* @url http://www.espruino.com/Reference#l_Bangle_getStepCount
*/
static getStepCount(): number;
/**
* Sets the current value of the step counter
*
* @param {number} count - The value with which to reload the step counter
* @url http://www.espruino.com/Reference#l_Bangle_setStepCount
*/
static setStepCount(count: number): void;
/**
* Get the most recent Magnetometer/Compass reading. Data is in the same format as
* the `Bangle.on('mag',` event.
* Returns an `{x,y,z,dx,dy,dz,heading}` object
* * `x/y/z` raw x,y,z magnetometer readings
* * `dx/dy/dz` readings based on calibration since magnetometer turned on
* * `heading` in degrees based on calibrated readings (will be NaN if magnetometer
* hasn't been rotated around 360 degrees).
* **Note:** In 2v15 firmware and earlier the heading is inverted (360-heading). There's
* a fix in the bootloader which will apply a fix for those headings, but old apps may
* still expect an inverted value.
* To get this event you must turn the compass on with `Bangle.setCompassPower(1)`.
* @returns {any} An object containing magnetometer readings (as below)
* @url http://www.espruino.com/Reference#l_Bangle_getCompass
*/
static getCompass(): CompassData;
/**
* Get the most recent accelerometer reading. Data is in the same format as the
* `Bangle.on('accel',` event.
* * `x` is X axis (left-right) in `g`
* * `y` is Y axis (up-down) in `g`
* * `z` is Z axis (in-out) in `g`
* * `diff` is difference between this and the last reading in `g` (calculated by
* comparing vectors, not magnitudes)
* * `td` is the elapsed
* * `mag` is the magnitude of the acceleration in `g`
* @returns {any} An object containing accelerometer readings (as below)
* @url http://www.espruino.com/Reference#l_Bangle_getAccel
*/
static getAccel(): AccelData & { td: number };
/**
* `range` is one of:
* * `undefined` or `'10min'` - health data so far in this 10 minute block (eg. 9:00.00 - 9:09.59)
* * `'last'` - health data during the last 10 minute block
* * `'day'` - the health data so far for the day
* `getHealthStatus` returns an object containing:
* * `movement` is the 32 bit sum of all `acc.diff` readings since power on (and
* rolls over). It is the difference in accelerometer values as `g*8192`
* * `steps` is the number of steps during this period
* * `bpm` the best BPM reading from HRM sensor during this period
* * `bpmConfidence` best BPM confidence (0-100%) during this period
*
* @param {any} range - What time period to return data for, see below:
* @returns {any} Returns an object containing various health info
* @url http://www.espruino.com/Reference#l_Bangle_getHealthStatus
*/
static getHealthStatus(range?: "current" | "last" | "day"): HealthStatus;
/**
* Reads debug info. Exposes the current values of `accHistoryIdx`, `accGestureCount`, `accIdleCount` and `pollInterval`.
* @returns {any}
* @url http://www.espruino.com/Reference#l_Bangle_dbg
*/
static dbg(): any;
/**
* Writes a register on the accelerometer
*
* @param {number} reg
* @param {number} data
* @url http://www.espruino.com/Reference#l_Bangle_accelWr
*/
static accelWr(reg: number, data: number): void;
/**
* Reads a register from the accelerometer
* **Note:** On Espruino 2v06 and before this function only returns a number (`cnt`
* is ignored).
*
* @param {number} reg
* @param {number} cnt - If specified, returns an array of the given length (max 128). If not (or 0) it returns a number
* @returns {any}
* @url http://www.espruino.com/Reference#l_Bangle_accelRd
*/
static accelRd(reg: number, cnt?: 0): number;
static accelRd(reg: number, cnt: number): number[];
/**
* Writes a register on the barometer IC
*
* @param {number} reg
* @param {number} data
* @url http://www.espruino.com/Reference#l_Bangle_barometerWr
*/
static barometerWr(reg: number, data: number): void;
/**
* Reads a register from the barometer IC
*
* @param {number} reg
* @param {number} cnt - If specified, returns an array of the given length (max 128). If not (or 0) it returns a number
* @returns {any}
* @url http://www.espruino.com/Reference#l_Bangle_barometerRd
*/
static barometerRd(reg: number, cnt?: 0): number;
static barometerRd(reg: number, cnt: number): number[];
/**
* Writes a register on the Magnetometer/Compass
*
* @param {number} reg
* @param {number} data
* @url http://www.espruino.com/Reference#l_Bangle_compassWr
*/
static compassWr(reg: number, data: number): void;
/**
* Read a register on the Magnetometer/Compass
*
* @param {number} reg
* @param {number} cnt - If specified, returns an array of the given length (max 128). If not (or 0) it returns a number
* @returns {any}
* @url http://www.espruino.com/Reference#l_Bangle_compassRd
*/
static compassRd(reg: number, cnt?: 0): number;
static compassRd(reg: number, cnt: number): number[];
/**
* Writes a register on the Heart rate monitor
*
* @param {number} reg
* @param {number} data
* @url http://www.espruino.com/Reference#l_Bangle_hrmWr
*/
static hrmWr(reg: number, data: number): void;
/**
* Read a register on the Heart rate monitor
*
* @param {number} reg
* @param {number} cnt - If specified, returns an array of the given length (max 128). If not (or 0) it returns a number
* @returns {any}
* @url http://www.espruino.com/Reference#l_Bangle_hrmRd
*/
static hrmRd(reg: number, cnt?: 0): number;
static hrmRd(reg: number, cnt: number): number[];
/**
* Changes a pin state on the IO expander
*
* @param {number} mask
* @param {number} isOn
* @url http://www.espruino.com/Reference#l_Bangle_ioWr
*/
static ioWr(mask: number, isOn: number): void;
/**
* Read temperature, pressure and altitude data. A promise is returned which will
* be resolved with `{temperature, pressure, altitude}`.
* If the Barometer has been turned on with `Bangle.setBarometerPower` then this
* will return almost immediately with the reading. If the Barometer is off,
* conversions take between 500-750ms.
* Altitude assumes a sea-level pressure of 1013.25 hPa
* ```
* Bangle.getPressure().then(d=>{
* console.log(d);
* // {temperature, pressure, altitude}
* });
* ```
* @returns {any} A promise that will be resolved with `{temperature, pressure, altitude}`
* @url http://www.espruino.com/Reference#l_Bangle_getPressure
*/
static getPressure(): PressureData;
/**
* Perform a Spherical [Web Mercator
* projection](https://en.wikipedia.org/wiki/Web_Mercator_projection) of latitude
* and longitude into `x` and `y` coordinates, which are roughly equivalent to
* meters from `{lat:0,lon:0}`.
* This is the formula used for most online mapping and is a good way to compare
* GPS coordinates to work out the distance between them.
*
* @param {any} latlong - `{lat:..., lon:...}`
* @returns {any} {x:..., y:...}
* @url http://www.espruino.com/Reference#l_Bangle_project
*/
static project(latlong: { lat: number, lon: number }): { x: number, y: number };
/**
* Use the piezo speaker to Beep for a certain time period and frequency
*
* @param {number} [time] - [optional] Time in ms (default 200)
* @param {number} [freq] - [optional] Frequency in hz (default 4000)
* @returns {any} A promise, completed when beep is finished
* @url http://www.espruino.com/Reference#l_Bangle_beep
*/
static beep(time?: number, freq?: number): Promise<void>;
/**
* Use the vibration motor to buzz for a certain time period
*
* @param {number} [time] - [optional] Time in ms (default 200)
* @param {number} [strength] - [optional] Power of vibration from 0 to 1 (Default 1)
* @returns {any} A promise, completed when vibration is finished
* @url http://www.espruino.com/Reference#l_Bangle_buzz
*/
static buzz(time?: number, strength?: number): Promise<void>;
/**
* Turn Bangle.js off. It can only be woken by pressing BTN1.
* @url http://www.espruino.com/Reference#l_Bangle_off
*/
static off(): void;
/**
* Turn Bangle.js (mostly) off, but keep the CPU in sleep mode until BTN1 is
* pressed to preserve the RTC (current time).
* @url http://www.espruino.com/Reference#l_Bangle_softOff
*/
static softOff(): void;
/**
* * On platforms with an LCD of >=8bpp this is 222 x 104 x 2 bits
* * Otherwise it's 119 x 56 x 1 bits
* @returns {any} An image to be used with `g.drawImage` (as a String)
* @url http://www.espruino.com/Reference#l_Bangle_getLogo
*/
static getLogo(): string;
/**
* Load all widgets from flash Storage. Call this once at the beginning of your
* application if you want any on-screen widgets to be loaded.
* They will be loaded into a global `WIDGETS` array, and can be rendered with
* `Bangle.drawWidgets`.
* @url http://www.espruino.com/Reference#l_Bangle_loadWidgets
*/
static loadWidgets(): void;
/**
* Draw any onscreen widgets that were loaded with `Bangle.loadWidgets()`.
* Widgets should redraw themselves when something changes - you'll only need to
* call drawWidgets if you decide to clear the entire screen with `g.clear()`.
* @url http://www.espruino.com/Reference#l_Bangle_drawWidgets
*/
static drawWidgets(): void;
/**
* @url http://www.espruino.com/Reference#l_Bangle_drawWidgets
*/
static drawWidgets(): void;
/**
* Load the Bangle.js app launcher, which will allow the user to select an
* application to launch.
* @url http://www.espruino.com/Reference#l_Bangle_showLauncher
*/
static showLauncher(): void;
/**
* Load the Bangle.js clock - this has the same effect as calling `Bangle.load()`.
* @url http://www.espruino.com/Reference#l_Bangle_showClock
*/
static showClock(): void;
/**
* This behaves the same as the global `load()` function, but if fast
* loading is possible (`Bangle.setUI` was called with a `remove` handler)
* then instead of a complete reload, the `remove` handler will be
* called and the new app will be loaded straight after with `eval`.
* **This should only be used if the app being loaded also uses widgets**
* (eg it contains a `Bangle.loadWidgets()` call).
* `load()` is slower, but safer. As such, care should be taken
* when using `Bangle.load()` with `Bangle.setUI({..., remove:...})`
* as if your remove handler doesn't completely clean up after your app,
* memory leaks or other issues could occur - see `Bangle.setUI` for more
* information.
*
* @param {any} [file] - [optional] A string containing the file name for the app to be loaded
* @url http://www.espruino.com/Reference#l_Bangle_load
*/
static load(file: string): void;
static load(): void;
/**
* This puts Bangle.js into the specified UI input mode, and calls the callback
* provided when there is user input.
* Currently supported interface types are:
* * 'updown' - UI input with upwards motion `cb(-1)`, downwards motion `cb(1)`,
* and select `cb()`
* * Bangle.js 1 uses BTN1/3 for up/down and BTN2 for select
* * Bangle.js 2 uses touchscreen swipe up/down and tap
* * 'leftright' - UI input with left motion `cb(-1)`, right motion `cb(1)`, and
* select `cb()`
* * Bangle.js 1 uses BTN1/3 for left/right and BTN2 for select
* * Bangle.js 2 uses touchscreen swipe left/right and tap/BTN1 for select
* * 'clock' - called for clocks. Sets `Bangle.CLOCK=1` and allows a button to
* start the launcher
* * Bangle.js 1 BTN2 starts the launcher
* * Bangle.js 2 BTN1 starts the launcher
* * 'clockupdown' - called for clocks. Sets `Bangle.CLOCK=1`, allows a button to
* start the launcher, but also provides up/down functionality
* * Bangle.js 1 BTN2 starts the launcher, BTN1/BTN3 call `cb(-1)` and `cb(1)`
* * Bangle.js 2 BTN1 starts the launcher, touchscreen tap in top/bottom right
* hand side calls `cb(-1)` and `cb(1)`
* * `{mode:"custom", ...}` allows you to specify custom handlers for different
* interactions. See below.
* * `undefined` removes all user interaction code
* While you could use setWatch/etc manually, the benefit here is that you don't
* end up with multiple `setWatch` instances, and the actual input method (touch,
* or buttons) is implemented dependent on the watch (Bangle.js 1 or 2)
* **Note:** You can override this function in boot code to change the interaction
* mode with the watch. For instance you could make all clocks start the launcher
* with a swipe by using:
* ```
* (function() {
* var sui = Bangle.setUI;
* Bangle.setUI = function(mode, cb) {
* if (mode!="clock") return sui(mode,cb);
* sui(); // clear
* Bangle.CLOCK=1;
* Bangle.swipeHandler = Bangle.showLauncher;
* Bangle.on("swipe", Bangle.swipeHandler);
* };
* })();
* ```
* The first argument can also be an object, in which case more options can be
* specified:
* ```
* Bangle.setUI({
* mode : "custom",
* back : function() {}, // optional - add a 'back' icon in top-left widget area and call this function when it is pressed , also call it when the hardware button is clicked (does not override btn if defined)
* remove : function() {}, // optional - add a handler for when the UI should be removed (eg stop any intervals/timers here)
* touch : function(n,e) {}, // optional - handler for 'touch' events
* swipe : function(dir) {}, // optional - handler for 'swipe' events
* drag : function(e) {}, // optional - handler for 'drag' events (Bangle.js 2 only)
* btn : function(n) {}, // optional - handler for 'button' events (n==1 on Bangle.js 2, n==1/2/3 depending on button for Bangle.js 1)
* clock : 0 // optional - if set the behavior of 'clock' mode is added (does not override btn if defined)
* });
* ```
* If `remove` is specified, `Bangle.showLauncher`, `Bangle.showClock`, `Bangle.load` and some apps
* may choose to just call the `remove` function and then load a new app without resetting Bangle.js.
* As a result, **if you specify 'remove' you should make sure you test that after calling `Bangle.setUI()`
* without arguments your app is completely unloaded**, otherwise you may end up with memory leaks or
* other issues when switching apps.
*
* @param {any} type - The type of UI input: 'updown', 'leftright', 'clock', 'clockupdown' or undefined to cancel. Can also be an object (see below)
* @param {any} callback - A function with one argument which is the direction
* @url http://www.espruino.com/Reference#l_Bangle_setUI
*/
static setUI(type?: "updown" | "leftright" | "clock" | "clockupdown" | { mode: "custom"; back?: () => void; touch?: TouchCallback; swipe?: SwipeCallback; drag?: DragCallback; btn?: (n: number) => void, remove?: () => void, clock?: boolean }, callback?: (direction?: -1 | 1) => void): void;
/**
* @url http://www.espruino.com/Reference#l_Bangle_setUI
*/
static setUI(): void;
/**
* Erase all storage and reload it with the default contents.
* This is only available on Bangle.js 2.0. On Bangle.js 1.0 you need to use
* `Install Default Apps` under the `More...` tab of http://banglejs.com/apps
* @url http://www.espruino.com/Reference#l_Bangle_factoryReset
*/
static factoryReset(): void;
/**
* Returns the rectangle on the screen that is currently reserved for the app.
* @returns {any} An object of the form `{x,y,w,h,x2,y2}`
* @url http://www.espruino.com/Reference#l_Bangle_appRect
*/
static appRect: { x: number, y: number, w: number, h: number, x2: number, y2: number };
static CLOCK: boolean;
static strokes: undefined | { [key: string]: Unistroke };
}
/**
* Class containing utility functions for accessing IO on the hexagonal badge
* @url http://www.espruino.com/Reference#Badge
*/
declare class Badge {
/**
* Capacitive sense - the higher the capacitance, the higher the number returned.
* Supply a corner number between 1 and 6, and an integer value will be returned
* that is proportional to the capacitance
*
* @param {number} corner - The corner to use
* @returns {number} Capacitive sense counter
* @url http://www.espruino.com/Reference#l_Badge_capSense
*/
static capSense(corner: number): number;
/**
* Return an approximate battery percentage remaining based on a normal CR2032
* battery (2.8 - 2.2v)
* @returns {number} A percentage between 0 and 100
* @url http://www.espruino.com/Reference#l_Badge_getBatteryPercentage
*/
static getBatteryPercentage(): number;
/**
* Set the LCD's contrast
*
* @param {number} c - Contrast between 0 and 1
* @url http://www.espruino.com/Reference#l_Badge_setContrast
*/
static setContrast(c: number): void;
}
/**
* A Web Bluetooth-style device - you can request one using
* `NRF.requestDevice(address)`
* For example:
* ```
* var gatt;
* NRF.requestDevice({ filters: [{ name: 'Puck.js abcd' }] }).then(function(device) {
* console.log("found device");
* return device.gatt.connect();
* }).then(function(g) {
* gatt = g;
* console.log("connected");
* return gatt.startBonding();
* }).then(function() {
* console.log("bonded", gatt.getSecurityStatus());
* gatt.disconnect();
* }).catch(function(e) {
* console.log("ERROR",e);
* });
* ```
* @url http://www.espruino.com/Reference#BluetoothDevice
*/
declare class BluetoothDevice {
/**
* Called when the device gets disconnected.
* To connect and then print `Disconnected` when the device is disconnected, just
* do the following:
* ```
* var gatt;
* NRF.connect("aa:bb:cc:dd:ee:ff").then(function(gatt) {
* gatt.device.on('gattserverdisconnected', function(reason) {
* console.log("Disconnected ",reason);
* });
* });
* ```
* Or:
* ```
* var gatt;
* NRF.requestDevice(...).then(function(device) {
* device.on('gattserverdisconnected', function(reason) {
* console.log("Disconnected ",reason);
* });
* });
* ```
* @param {string} event - The event to listen to.
* @param {(reason: number) => void} callback - A function that is executed when the event occurs. Its arguments are:
* * `reason` The reason code reported back by the BLE stack - see Nordic's `ble_hci.h` file for more information
* @url http://www.espruino.com/Reference#l_BluetoothDevice_gattserverdisconnected
*/
static on(event: "gattserverdisconnected", callback: (reason: number) => void): void;
/**
* Called when the device pairs and sends a passkey that Espruino should display.
* For this to be used, you'll have to specify that there's a display using
* `NRF.setSecurity`
* **This is not part of the Web Bluetooth Specification.** It has been added
* specifically for Espruino.
* @param {string} event - The event to listen to.
* @param {(passkey: any) => void} callback - A function that is executed when the event occurs. Its arguments are:
* * `passkey` A 6 character numeric String to be displayed
* @url http://www.espruino.com/Reference#l_BluetoothDevice_passkey
*/
static on(event: "passkey", callback: (passkey: any) => void): void;
/**
* Called when the device pairs, displays a passkey, and wants Espruino to tell it
* what the passkey was.
* Respond with `BluetoothDevice.sendPasskey()` with a 6 character string
* containing only `0..9`.
* For this to be used, you'll have to specify that there's a keyboard using
* `NRF.setSecurity`
* **This is not part of the Web Bluetooth Specification.** It has been added
* specifically for Espruino.
* @param {string} event - The event to listen to.
* @param {() => void} callback - A function that is executed when the event occurs.
* @url http://www.espruino.com/Reference#l_BluetoothDevice_passkeyRequest
*/
static on(event: "passkeyRequest", callback: () => void): void;
/**
* @returns {any} A `BluetoothRemoteGATTServer` for this device
* @url http://www.espruino.com/Reference#l_BluetoothDevice_gatt
*/
gatt: any;
/**
* @returns {boolean} The last received RSSI (signal strength) for this device
* @url http://www.espruino.com/Reference#l_BluetoothDevice_rssi
*/
rssi: boolean;
/**
* To be used as a response when the event `BluetoothDevice.sendPasskey` has been
* received.
* **This is not part of the Web Bluetooth Specification.** It has been added
* specifically for Espruino.
*
* @param {any} passkey - A 6 character numeric String to be returned to the device
* @url http://www.espruino.com/Reference#l_BluetoothDevice_sendPasskey
*/
sendPasskey(passkey: any): void;
}
/**
* Web Bluetooth-style GATT server - get this using `NRF.connect(address)` or
* `NRF.requestDevice(options)` and `response.gatt.connect`
* https://webbluetoothcg.github.io/web-bluetooth/#bluetoothremotegattserver
* @url http://www.espruino.com/Reference#BluetoothRemoteGATTServer
*/
declare class BluetoothRemoteGATTServer {
/**
* Connect to a BLE device - returns a promise, the argument of which is the
* `BluetoothRemoteGATTServer` connection.
* See [`NRF.requestDevice`](/Reference#l_NRF_requestDevice) for usage examples.
* `options` is an optional object containing:
* ```
* {
* minInterval // min connection interval in milliseconds, 7.5 ms to 4 s
* maxInterval // max connection interval in milliseconds, 7.5 ms to 4 s
* }
* ```
* By default the interval is 20-200ms (or 500-1000ms if
* `NRF.setLowPowerConnection(true)` was called. During connection Espruino
* negotiates with the other device to find a common interval that can be used.
* For instance calling:
* ```
* NRF.requestDevice({ filters: [{ namePrefix: 'Pixl.js' }] }).then(function(device) {
* return device.gatt.connect({minInterval:7.5, maxInterval:7.5});
* }).then(function(g) {
* ```
* will force the connection to use the fastest connection interval possible (as
* long as the device at the other end supports it).
* **Note:** The Web Bluetooth spec states that if a device hasn't advertised its
* name, when connected to a device the central (in this case Espruino) should
* automatically retrieve the name from the corresponding characteristic (`0x2a00`
* on service `0x1800`). Espruino does not automatically do this.
*
* @param {any} [options] - [optional] (Espruino-specific) An object of connection options (see below)
* @returns {any} A `Promise` that is resolved (or rejected) when the connection is complete
* @url http://www.espruino.com/Reference#l_BluetoothRemoteGATTServer_connect
*/
connect(options?: any): Promise<void>;
/**
* @returns {boolean} Whether the device is connected or not
* @url http://www.espruino.com/Reference#l_BluetoothRemoteGATTServer_connected
*/
connected: boolean;
/**
* @returns {number} The handle to this device (if it is currently connected) - the handle is an internal value used by the Bluetooth Stack
* @url http://www.espruino.com/Reference#l_BluetoothRemoteGATTServer_handle
*/
handle: number;
/**
* Disconnect from a previously connected BLE device connected with
* `BluetoothRemoteGATTServer.connect` - this does not disconnect from something
* that has connected to the Espruino.
* **Note:** While `.disconnect` is standard Web Bluetooth, in the spec it returns
* undefined not a `Promise` for implementation reasons. In Espruino we return a
* `Promise` to make it easier to detect when Espruino is free to connect to
* something else.
* @returns {any} A `Promise` that is resolved (or rejected) when the disconnection is complete (non-standard)
* @url http://www.espruino.com/Reference#l_BluetoothRemoteGATTServer_disconnect
*/
disconnect(): Promise<void>;
/**
* Start negotiating bonding (secure communications) with the connected device, and
* return a Promise that is completed on success or failure.
* ```
* var gatt;
* NRF.requestDevice({ filters: [{ name: 'Puck.js abcd' }] }).then(function(device) {
* console.log("found device");
* return device.gatt.connect();
* }).then(function(g) {
* gatt = g;
* console.log("connected");
* return gatt.startBonding();
* }).then(function() {
* console.log("bonded", gatt.getSecurityStatus());
* gatt.disconnect();
* }).catch(function(e) {
* console.log("ERROR",e);
* });
* ```
* **This is not part of the Web Bluetooth Specification.** It has been added
* specifically for Espruino.
*
* @param {boolean} forceRePair - If the device is already bonded, re-pair it
* @returns {any} A `Promise` that is resolved (or rejected) when the bonding is complete
* @url http://www.espruino.com/Reference#l_BluetoothRemoteGATTServer_startBonding
*/
startBonding(forceRePair: boolean): Promise<void>;
/**
* Return an object with information about the security state of the current
* connection:
* ```
* {
* connected // The connection is active (not disconnected).
* encrypted // Communication on this link is encrypted.
* mitm_protected // The encrypted communication is also protected against man-in-the-middle attacks.
* bonded // The peer is bonded with us
* }
* ```
* See `BluetoothRemoteGATTServer.startBonding` for information about negotiating a
* secure connection.
* **This is not part of the Web Bluetooth Specification.** It has been added
* specifically for Puck.js.
* @returns {any} An object
* @url http://www.espruino.com/Reference#l_BluetoothRemoteGATTServer_getSecurityStatus
*/
getSecurityStatus(): NRFSecurityStatus;
/**
* See `NRF.connect` for usage examples.
*
* @param {any} service - The service UUID
* @returns {any} A `Promise` that is resolved (or rejected) when the primary service is found (the argument contains a `BluetoothRemoteGATTService`)
* @url http://www.espruino.com/Reference#l_BluetoothRemoteGATTServer_getPrimaryService
*/
getPrimaryService(service: any): Promise<void>;
/**
* @returns {any} A `Promise` that is resolved (or rejected) when the primary services are found (the argument contains an array of `BluetoothRemoteGATTService`)
* @url http://www.espruino.com/Reference#l_BluetoothRemoteGATTServer_getPrimaryServices
*/
getPrimaryServices(): Promise<void>;
/**
* Start/stop listening for RSSI values on the active GATT connection
* ```
* // Start listening for RSSI value updates
* gattServer.setRSSIHandler(function(rssi) {
* console.log(rssi); // prints -85 (or similar)
* });
* // Stop listening
* gattServer.setRSSIHandler();
* ```
* RSSI is the 'Received Signal Strength Indication' in dBm
*
* @param {any} callback - The callback to call with the RSSI value, or undefined to stop
* @url http://www.espruino.com/Reference#l_BluetoothRemoteGATTServer_setRSSIHandler
*/
setRSSIHandler(callback: any): void;
}
/**
* Web Bluetooth-style GATT service - get this using
* `BluetoothRemoteGATTServer.getPrimaryService(s)`
* https://webbluetoothcg.github.io/web-bluetooth/#bluetoothremotegattservice
* @url http://www.espruino.com/Reference#BluetoothRemoteGATTService
*/
declare class BluetoothRemoteGATTService {
/**
* @returns {any} The `BluetoothDevice` this Service came from
* @url http://www.espruino.com/Reference#l_BluetoothRemoteGATTService_device
*/
device: any;
/**
* See `NRF.connect` for usage examples.
*
* @param {any} characteristic - The characteristic UUID
* @returns {any} A `Promise` that is resolved (or rejected) when the characteristic is found (the argument contains a `BluetoothRemoteGATTCharacteristic`)
* @url http://www.espruino.com/Reference#l_BluetoothRemoteGATTService_getCharacteristic
*/
getCharacteristic(characteristic: any): Promise<void>;
/**
* @returns {any} A `Promise` that is resolved (or rejected) when the characteristic is found (the argument contains an array of `BluetoothRemoteGATTCharacteristic`)
* @url http://www.espruino.com/Reference#l_BluetoothRemoteGATTService_getCharacteristics
*/
getCharacteristics(): Promise<void>;
}
/**
* Web Bluetooth-style GATT characteristic - get this using
* `BluetoothRemoteGATTService.getCharacteristic(s)`
* https://webbluetoothcg.github.io/web-bluetooth/#bluetoothremotegattcharacteristic
* @url http://www.espruino.com/Reference#BluetoothRemoteGATTCharacteristic
*/
declare class BluetoothRemoteGATTCharacteristic {
/**
* Called when a characteristic's value changes, *after*
* `BluetoothRemoteGATTCharacteristic.startNotifications` has been called.
* ```
* ...
* return service.getCharacteristic("characteristic_uuid");
* }).then(function(c) {
* c.on('characteristicvaluechanged', function(event) {
* console.log("-> "+event.target.value);
* });
* return c.startNotifications();
* }).then(...
* ```
* The first argument is of the form `{target :
* BluetoothRemoteGATTCharacteristic}`, and
* `BluetoothRemoteGATTCharacteristic.value` will then contain the new value (as a
* DataView).
* @param {string} event - The event to listen to.
* @param {() => void} callback - A function that is executed when the event occurs.
* @url http://www.espruino.com/Reference#l_BluetoothRemoteGATTCharacteristic_characteristicvaluechanged
*/
static on(event: "characteristicvaluechanged", callback: () => void): void;
/**
* @returns {any} The `BluetoothRemoteGATTService` this Service came from
* @url http://www.espruino.com/Reference#l_BluetoothRemoteGATTCharacteristic_service
*/
service: any;
/**
* Write a characteristic's value
* ```
* var device;
* NRF.connect(device_address).then(function(d) {
* device = d;
* return d.getPrimaryService("service_uuid");
* }).then(function(s) {
* console.log("Service ",s);
* return s.getCharacteristic("characteristic_uuid");
* }).then(function(c) {
* return c.writeValue("Hello");
* }).then(function(d) {
* device.disconnect();
* }).catch(function() {
* console.log("Something's broken.");
* });
* ```
*
* @param {any} data - The data to write
* @returns {any} A `Promise` that is resolved (or rejected) when the characteristic is written
* @url http://www.espruino.com/Reference#l_BluetoothRemoteGATTCharacteristic_writeValue
*/
writeValue(data: any): Promise<void>;
/**
* Read a characteristic's value, return a promise containing a `DataView`
* ```
* var device;
* NRF.connect(device_address).then(function(d) {
* device = d;
* return d.getPrimaryService("service_uuid");
* }).then(function(s) {
* console.log("Service ",s);
* return s.getCharacteristic("characteristic_uuid");
* }).then(function(c) {
* return c.readValue();
* }).then(function(d) {
* console.log("Got:", JSON.stringify(d.buffer));
* device.disconnect();
* }).catch(function() {
* console.log("Something's broken.");
* });
* ```
* @returns {any} A `Promise` that is resolved (or rejected) with a `DataView` when the characteristic is read
* @url http://www.espruino.com/Reference#l_BluetoothRemoteGATTCharacteristic_readValue
*/
readValue(): Promise<void>;
/**
* Starts notifications - whenever this characteristic's value changes, a
* `characteristicvaluechanged` event is fired and `characteristic.value` will then
* contain the new value as a `DataView`.
* ```
* var device;
* NRF.connect(device_address).then(function(d) {
* device = d;
* return d.getPrimaryService("service_uuid");
* }).then(function(s) {
* console.log("Service ",s);
* return s.getCharacteristic("characteristic_uuid");
* }).then(function(c) {
* c.on('characteristicvaluechanged', function(event) {
* console.log("-> ",event.target.value); // this is a DataView
* });
* return c.startNotifications();
* }).then(function(d) {
* console.log("Waiting for notifications");
* }).catch(function() {
* console.log("Something's broken.");
* });
* ```
* For example, to listen to the output of another Puck.js's Nordic Serial port
* service, you can use:
* ```
* var gatt;
* NRF.connect("pu:ck:js:ad:dr:es random").then(function(g) {
* gatt = g;
* return gatt.getPrimaryService("6e400001-b5a3-f393-e0a9-e50e24dcca9e");
* }).then(function(service) {
* return service.getCharacteristic("6e400003-b5a3-f393-e0a9-e50e24dcca9e");
* }).then(function(characteristic) {
* characteristic.on('characteristicvaluechanged', function(event) {
* console.log("RX: "+JSON.stringify(event.target.value.buffer));
* });
* return characteristic.startNotifications();
* }).then(function() {
* console.log("Done!");
* });
* ```
* @returns {any} A `Promise` that is resolved (or rejected) with data when notifications have been added
* @url http://www.espruino.com/Reference#l_BluetoothRemoteGATTCharacteristic_startNotifications
*/
startNotifications(): Promise<void>;
/**
* Stop notifications (that were requested with
* `BluetoothRemoteGATTCharacteristic.startNotifications`)
* @returns {any} A `Promise` that is resolved (or rejected) with data when notifications have been removed
* @url http://www.espruino.com/Reference#l_BluetoothRemoteGATTCharacteristic_stopNotifications
*/
stopNotifications(): Promise<void>;
}
/**
* Class containing an instance of TFMicroInterpreter
* @url http://www.espruino.com/Reference#TFMicroInterpreter
*/
declare class TFMicroInterpreter {
/**
* @returns {any} An arraybuffer referencing the input data
* @url http://www.espruino.com/Reference#l_TFMicroInterpreter_getInput
*/
getInput(): ArrayBufferView;
/**
* @returns {any} An arraybuffer referencing the output data
* @url http://www.espruino.com/Reference#l_TFMicroInterpreter_getOutput
*/
getOutput(): ArrayBufferView;
/**
* @url http://www.espruino.com/Reference#l_TFMicroInterpreter_invoke
*/
invoke(): void;
}
/**
* This class provides Graphics operations that can be applied to a surface.
* Use Graphics.createXXX to create a graphics object that renders in the way you
* want. See [the Graphics page](https://www.espruino.com/Graphics) for more
* information.
* **Note:** On boards that contain an LCD, there is a built-in `g` object of
* type `Graphics`. For instance to draw a line you'd type:
* ```g.drawLine(0,0,100,100)```
* @url http://www.espruino.com/Reference#Graphics
*/
declare class Graphics<IsBuffer extends boolean = boolean> {
/**
* On devices like Pixl.js or HYSTM boards that contain a built-in display this
* will return an instance of the graphics class that can be used to access that
* display.
* Internally, this is stored as a member called `gfx` inside the 'hiddenRoot'.
* @returns {any} An instance of `Graphics` or undefined
* @url http://www.espruino.com/Reference#l_Graphics_getInstance
*/
static getInstance(): Graphics | undefined
/**
* Create a Graphics object that renders to an Array Buffer. This will have a field
* called 'buffer' that can get used to get at the buffer itself
*
* @param {number} width - Pixels wide
* @param {number} height - Pixels high
* @param {number} bpp - Number of bits per pixel
* @param {any} options
* An object of other options. `{ zigzag : true/false(default), vertical_byte : true/false(default), msb : true/false(default), color_order: 'rgb'(default),'bgr',etc }`
* `zigzag` = whether to alternate the direction of scanlines for rows
* `vertical_byte` = whether to align bits in a byte vertically or not
* `msb` = when bits<8, store pixels most significant bit first, when bits>8, store most significant byte first
* `interleavex` = Pixels 0,2,4,etc are from the top half of the image, 1,3,5,etc from the bottom half. Used for P3 LED panels.
* `color_order` = re-orders the colour values that are supplied via setColor
* @returns {any} The new Graphics object
* @url http://www.espruino.com/Reference#l_Graphics_createArrayBuffer
*/
static createArrayBuffer(width: number, height: number, bpp: number, options?: { zigzag?: boolean, vertical_byte?: boolean, msb?: boolean, color_order?: "rgb" | "rbg" | "brg" | "bgr" | "grb" | "gbr" }): Graphics<true>;
/**
* Create a Graphics object that renders by calling a JavaScript callback function
* to draw pixels
*
* @param {number} width - Pixels wide
* @param {number} height - Pixels high
* @param {number} bpp - Number of bits per pixel
* @param {any} callback - A function of the form ```function(x,y,col)``` that is called whenever a pixel needs to be drawn, or an object with: ```{setPixel:function(x,y,col),fillRect:function(x1,y1,x2,y2,col)}```. All arguments are already bounds checked.
* @returns {any} The new Graphics object
* @url http://www.espruino.com/Reference#l_Graphics_createCallback
*/
static createCallback(width: number, height: number, bpp: number, callback: ((x: number, y: number, col: number) => void) | { setPixel: (x: number, y: number, col: number) => void; fillRect: (x1: number, y1: number, x2: number, y2: number, col: number) => void }): Graphics<false>;
/**
* Create a Graphics object that renders to SDL window (Linux-based devices only)
*
* @param {number} width - Pixels wide
* @param {number} height - Pixels high
* @param {number} bpp - Bits per pixel (8,16,24 or 32 supported)
* @returns {any} The new Graphics object
* @url http://www.espruino.com/Reference#l_Graphics_createSDL
*/
static createSDL(width: number, height: number, bpp: number): Graphics;
/**
* Create a simple Black and White image for use with `Graphics.drawImage`.
* Use as follows:
* ```
* var img = Graphics.createImage(`
* XXXXXXXXX
* X X
* X X X
* X X X
* X X
* XXXXXXXXX
* `);
* g.drawImage(img, x,y);
* ```
* If the characters at the beginning and end of the string are newlines, they will
* be ignored. Spaces are treated as `0`, and any other character is a `1`
*
* @param {any} str - A String containing a newline-separated image - space is 0, anything else is 1
* @returns {any} An Image object that can be used with `Graphics.drawImage`
* @url http://www.espruino.com/Reference#l_Graphics_createImage
*/
static createImage(str: string): ImageObject;
/**
* Set the current font
*
* @param {number} [scale] - [optional] If >1 the font will be scaled up by that amount
* @returns {any} The instance of Graphics this was called on, to allow call chaining
* @url http://www.espruino.com/Reference#l_Graphics_setFont12x20
*/
setFont12x20(scale?: number): Graphics;
/**
* Set the current font
*
* @param {number} [scale] - [optional] If >1 the font will be scaled up by that amount
* @returns {any} The instance of Graphics this was called on, to allow call chaining
* @url http://www.espruino.com/Reference#l_Graphics_setFont6x15
*/
setFont6x15(scale?: number): Graphics;
/**
* On instances of graphics that drive a display with an offscreen buffer, calling
* this function will copy the contents of the offscreen buffer to the screen.
* Call this when you have drawn something to Graphics and you want it shown on the
* screen.
* If a display does not have an offscreen buffer, it may not have a `g.flip()`
* method.
* On Bangle.js 1, there are different graphics modes chosen with
* `Bangle.setLCDMode()`. The default mode is unbuffered and in this mode
* `g.flip()` does not affect the screen contents.
* On some devices, this command will attempt to only update the areas of the
* screen that have changed in order to increase speed. If you have accessed the
* `Graphics.buffer` directly then you may need to use `Graphics.flip(true)` to
* force a full update of the screen.
*
* @param {boolean} [all] - [optional] (only on some devices) If `true` then copy all pixels, not just those that have changed.
* @url http://www.espruino.com/Reference#l_Graphics_flip
*/
flip(all?: boolean): void;
/**
* On Graphics instances with an offscreen buffer, this is an `ArrayBuffer` that
* provides access to the underlying pixel data.
* ```
* g=Graphics.createArrayBuffer(8,8,8)
* g.drawLine(0,0,7,7)
* print(new Uint8Array(g.buffer))
* new Uint8Array([
* 255, 0, 0, 0, 0, 0, 0, 0,
* 0, 255, 0, 0, 0, 0, 0, 0,
* 0, 0, 255, 0, 0, 0, 0, 0,
* 0, 0, 0, 255, 0, 0, 0, 0,
* 0, 0, 0, 0, 255, 0, 0, 0,
* 0, 0, 0, 0, 0, 255, 0, 0,
* 0, 0, 0, 0, 0, 0, 255, 0,
* 0, 0, 0, 0, 0, 0, 0, 255])
* ```
* @returns {any} An ArrayBuffer (or not defined on Graphics instances not created with `Graphics.createArrayBuffer`)
* @url http://www.espruino.com/Reference#l_Graphics_buffer
*/
buffer: IsBuffer extends true ? ArrayBuffer : undefined
/**
* The width of this Graphics instance
* @returns {number} The width of this Graphics instance
* @url http://www.espruino.com/Reference#l_Graphics_getWidth
*/
getWidth(): number;
/**
* The height of this Graphics instance
* @returns {number} The height of this Graphics instance
* @url http://www.espruino.com/Reference#l_Graphics_getHeight
*/
getHeight(): number;
/**
* The number of bits per pixel of this Graphics instance
* **Note:** Bangle.js 2 behaves a little differently here. The display is 3 bit,
* so `getBPP` returns 3 and `asBMP`/`asImage`/etc return 3 bit images. However in
* order to allow dithering, the colors returned by `Graphics.getColor` and
* `Graphics.theme` are actually 16 bits.
* @returns {number} The bits per pixel of this Graphics instance
* @url http://www.espruino.com/Reference#l_Graphics_getBPP
*/
getBPP(): number;
/**
* Reset the state of Graphics to the defaults (e.g. Color, Font, etc) that would
* have been used when Graphics was initialised.
* @returns {any} The instance of Graphics this was called on, to allow call chaining
* @url http://www.espruino.com/Reference#l_Graphics_reset
*/
reset(): Graphics;
/**
* Clear the LCD with the Background Color
*
* @param {boolean} [reset] - [optional] If `true`, resets the state of Graphics to the default (eg. Color, Font, etc) as if calling `Graphics.reset`
* @returns {any} The instance of Graphics this was called on, to allow call chaining
* @url http://www.espruino.com/Reference#l_Graphics_clear
*/
clear(reset?: boolean): Graphics;
/**
* Fill a rectangular area in the Foreground Color
* On devices with enough memory, you can specify `{x,y,x2,y2,r}` as the first
* argument, which allows you to draw a rounded rectangle.
*
* @param {any} x1 - The left X coordinate OR an object containing `{x,y,x2,y2}` or `{x,y,w,h}`
* @param {number} y1 - The top Y coordinate
* @param {number} x2 - The right X coordinate
* @param {number} y2 - The bottom Y coordinate
* @returns {any} The instance of Graphics this was called on, to allow call chaining
* @url http://www.espruino.com/Reference#l_Graphics_fillRect
*/
fillRect(x1: number, y1: number, x2: number, y2: number): Graphics;
fillRect(rect: { x: number, y: number, x2: number, y2: number } | { x: number, y: number, w: number, h: number }): Graphics;
/**
* Fill a rectangular area in the Background Color
* On devices with enough memory, you can specify `{x,y,x2,y2,r}` as the first
* argument, which allows you to draw a rounded rectangle.
*
* @param {any} x1 - The left X coordinate OR an object containing `{x,y,x2,y2}` or `{x,y,w,h}`
* @param {number} y1 - The top Y coordinate
* @param {number} x2 - The right X coordinate
* @param {number} y2 - The bottom Y coordinate
* @returns {any} The instance of Graphics this was called on, to allow call chaining
* @url http://www.espruino.com/Reference#l_Graphics_clearRect
*/
clearRect(x1: number, y1: number, x2: number, y2: number): Graphics;
clearRect(rect: { x: number, y: number, x2: number, y2: number } | { x: number, y: number, w: number, h: number }): Graphics;
/**
* Draw an unfilled rectangle 1px wide in the Foreground Color
*
* @param {any} x1 - The left X coordinate OR an object containing `{x,y,x2,y2}` or `{x,y,w,h}`
* @param {number} y1 - The top Y coordinate
* @param {number} x2 - The right X coordinate
* @param {number} y2 - The bottom Y coordinate
* @returns {any} The instance of Graphics this was called on, to allow call chaining
* @url http://www.espruino.com/Reference#l_Graphics_drawRect
*/
drawRect(x1: number, y1: number, x2: number, y2: number): Graphics;
drawRect(rect: { x: number, y: number, x2: number, y2: number } | { x: number, y: number, w: number, h: number }): Graphics;
/**
* Draw a filled circle in the Foreground Color
*
* @param {number} x - The X axis
* @param {number} y - The Y axis
* @param {number} rad - The circle radius
* @returns {any} The instance of Graphics this was called on, to allow call chaining
* @url http://www.espruino.com/Reference#l_Graphics_fillCircle
*/
fillCircle(x: number, y: number, rad: number): Graphics;
/**
* Draw an unfilled circle 1px wide in the Foreground Color
*
* @param {number} x - The X axis
* @param {number} y - The Y axis
* @param {number} rad - The circle radius
* @returns {any} The instance of Graphics this was called on, to allow call chaining
* @url http://www.espruino.com/Reference#l_Graphics_drawCircle
*/
drawCircle(x: number, y: number, rad: number): Graphics;
/**
* Draw a circle, centred at (x,y) with radius r in the current foreground color
*
* @param {number} x - Centre x-coordinate
* @param {number} y - Centre y-coordinate
* @param {number} r - Radius
* @returns {any} The instance of Graphics this was called on, to allow call chaining
* @url http://www.espruino.com/Reference#l_Graphics_drawCircleAA
*/
drawCircleAA(x: number, y: number, r: number): Graphics;
/**
* Draw a filled ellipse in the Foreground Color
*
* @param {number} x1 - The left X coordinate
* @param {number} y1 - The top Y coordinate
* @param {number} x2 - The right X coordinate
* @param {number} y2 - The bottom Y coordinate
* @returns {any} The instance of Graphics this was called on, to allow call chaining
* @url http://www.espruino.com/Reference#l_Graphics_fillEllipse
*/
fillEllipse(x1: number, y1: number, x2: number, y2: number): Graphics;
/**
* Draw an ellipse in the Foreground Color
*
* @param {number} x1 - The left X coordinate
* @param {number} y1 - The top Y coordinate
* @param {number} x2 - The right X coordinate
* @param {number} y2 - The bottom Y coordinate
* @returns {any} The instance of Graphics this was called on, to allow call chaining
* @url http://www.espruino.com/Reference#l_Graphics_drawEllipse
*/
drawEllipse(x1: number, y1: number, x2: number, y2: number): Graphics;
/**
* Get a pixel's color
*
* @param {number} x - The left
* @param {number} y - The top
* @returns {number} The color
* @url http://www.espruino.com/Reference#l_Graphics_getPixel
*/
getPixel(x: number, y: number): number;
/**
* Set a pixel's color
*
* @param {number} x - The left
* @param {number} y - The top
* @param {any} col - The color (if `undefined`, the foreground color is useD)
* @returns {any} The instance of Graphics this was called on, to allow call chaining
* @url http://www.espruino.com/Reference#l_Graphics_setPixel
*/
setPixel(x: number, y: number, col?: ColorResolvable): Graphics;
/**
* Work out the color value to be used in the current bit depth based on the arguments.
* This is used internally by setColor and setBgColor
* ```
* // 1 bit
* g.toColor(1,1,1) => 1
* // 16 bit
* g.toColor(1,0,0) => 0xF800
* ```
*
* @param {any} r - Red (between 0 and 1) **OR** an integer representing the color in the current bit depth and color order **OR** a hexidecimal color string of the form `'#rrggbb' or `'#rgb'`
* @param {any} g - Green (between 0 and 1)
* @param {any} b - Blue (between 0 and 1)
* @returns {number} The color index represented by the arguments
* @url http://www.espruino.com/Reference#l_Graphics_toColor
*/
toColor(r: number, g: number, b: number): number;
toColor(col: ColorResolvable): number;
/**
* Blend between two colors, and return the result.
* ```
* // dark yellow - halfway between red and green
* var col = g.blendColor("#f00","#0f0", 0.5);
* // Get a color 25% brighter than the theme's background colour
* var col = g.blendColor(g.theme.fg,g.theme.bg, 0.75);
* // then...
* g.setColor(col).fillRect(10,10,100,100);
* ```
*
* @param {any} col_a - Color to blend from (either a single integer color value, or a string)
* @param {any} col_b - Color to blend to (either a single integer color value, or a string)
* @param {any} amt - The amount to blend. 0=col_a, 1=col_b, 0.5=halfway between (and so on)
* @returns {number} The color index represented by the blended colors
* @url http://www.espruino.com/Reference#l_Graphics_blendColor
*/
blendColor(col_a: ColorResolvable, col_b: ColorResolvable, amt: number): number;
/**
* Set the color to use for subsequent drawing operations.
* If just `r` is specified as an integer, the numeric value will be written directly into a pixel. eg. On a 24 bit `Graphics` instance you set bright blue with either `g.setColor(0,0,1)` or `g.setColor(0x0000FF)`.
* A good shortcut to ensure you get white on all platforms is to use `g.setColor(-1)`
* The mapping is as follows:
* * 32 bit: `r,g,b` => `0xFFrrggbb`
* * 24 bit: `r,g,b` => `0xrrggbb`
* * 16 bit: `r,g,b` => `0brrrrrggggggbbbbb` (RGB565)
* * Other bpp: `r,g,b` => white if `r+g+b > 50%`, otherwise black (use `r` on its own as an integer)
* If you specified `color_order` when creating the `Graphics` instance, `r`,`g` and `b` will be swapped as you specified.
* **Note:** On devices with low flash memory, `r` **must** be an integer representing the color in the current bit depth. It cannot
* be a floating point value, and `g` and `b` are ignored.
*
* @param {any} r - Red (between 0 and 1) **OR** an integer representing the color in the current bit depth and color order **OR** a hexidecimal color string of the form `'#012345'`
* @param {any} [g] - [optional] Green (between 0 and 1)
* @param {any} [b] - [optional] Blue (between 0 and 1)
* @returns {any} The instance of Graphics this was called on, to allow call chaining
* @url http://www.espruino.com/Reference#l_Graphics_setColor
*/
setColor(r: number, g: number, b: number): Graphics;
setColor(col: ColorResolvable): Graphics;
/**
* Set the background color to use for subsequent drawing operations.
* See `Graphics.setColor` for more information on the mapping of `r`, `g`, and `b` to pixel values.
* **Note:** On devices with low flash memory, `r` **must** be an integer representing the color in the current bit depth. It cannot
* be a floating point value, and `g` and `b` are ignored.
*
* @param {any} r - Red (between 0 and 1) **OR** an integer representing the color in the current bit depth and color order **OR** a hexidecimal color string of the form `'#012345'`
* @param {any} g - Green (between 0 and 1)
* @param {any} b - Blue (between 0 and 1)
* @returns {any} The instance of Graphics this was called on, to allow call chaining
* @url http://www.espruino.com/Reference#l_Graphics_setBgColor
*/
setBgColor(r: number, g: number, b: number): Graphics;
setBgColor(col: ColorResolvable): Graphics;
/**
* Get the color to use for subsequent drawing operations
* @returns {number} The integer value of the colour
* @url http://www.espruino.com/Reference#l_Graphics_getColor
*/
getColor(): number;
/**
* Get the background color to use for subsequent drawing operations
* @returns {number} The integer value of the colour
* @url http://www.espruino.com/Reference#l_Graphics_getBgColor
*/
getBgColor(): number;
/**
* This sets the 'clip rect' that subsequent drawing operations are clipped to sit
* between.
* These values are inclusive - e.g. `g.setClipRect(1,0,5,0)` will ensure that only
* pixel rows 1,2,3,4,5 are touched on column 0.
* **Note:** For maximum flexibility on Bangle.js 1, the values here are not range
* checked. For normal use, X and Y should be between 0 and
* `getWidth()-1`/`getHeight()-1`.
* **Note:** The x/y values here are rotated, so that if `Graphics.setRotation` is
* used they correspond to the coordinates given to the draw functions, *not to the
* physical device pixels*.
*
* @param {number} x1 - Top left X coordinate
* @param {number} y1 - Top left Y coordinate
* @param {number} x2 - Bottom right X coordinate
* @param {number} y2 - Bottom right Y coordinate
* @returns {any} The instance of Graphics this was called on, to allow call chaining
* @url http://www.espruino.com/Reference#l_Graphics_setClipRect
*/
setClipRect(x1: number, y1: number, x2: number, y2: number): Graphics;
/**
* Make subsequent calls to `drawString` use the built-in 4x6 pixel bitmapped Font
* It is recommended that you use `Graphics.setFont("4x6")` for more flexibility.
* @returns {any} The instance of Graphics this was called on, to allow call chaining
* @url http://www.espruino.com/Reference#l_Graphics_setFontBitmap
*/
setFontBitmap(): Graphics;
/**
* Make subsequent calls to `drawString` use a Vector Font of the given height.
* It is recommended that you use `Graphics.setFont("Vector", size)` for more
* flexibility.
*
* @param {number} size - The height of the font, as an integer
* @returns {any} The instance of Graphics this was called on, to allow call chaining
* @url http://www.espruino.com/Reference#l_Graphics_setFontVector
*/
setFontVector(size: number): Graphics;
/**
* Make subsequent calls to `drawString` use a Custom Font of the given height. See
* the [Fonts page](http://www.espruino.com/Fonts) for more information about
* custom fonts and how to create them.
* For examples of use, see the [font
* modules](https://www.espruino.com/Fonts#font-modules).
* **Note:** while you can specify the character code of the first character with
* `firstChar`, the newline character 13 will always be treated as a newline and
* not rendered.
*
* @param {any} bitmap - A column-first, MSB-first, 1bpp bitmap containing the font bitmap
* @param {number} firstChar - The first character in the font - usually 32 (space)
* @param {any} width - The width of each character in the font. Either an integer, or a string where each character represents the width
* @param {number} height - The height as an integer (max 255). Bits 8-15 represent the scale factor (eg. `2<<8` is twice the size). Bits 16-23 represent the BPP (0,1=1 bpp, 2=2 bpp, 4=4 bpp)
* @returns {any} The instance of Graphics this was called on, to allow call chaining
* @url http://www.espruino.com/Reference#l_Graphics_setFontCustom
*/
setFontCustom(bitmap: ArrayBuffer, firstChar: number, width: number | string, height: number): Graphics;
/**
* Set the alignment for subsequent calls to `drawString`
*
* @param {number} x - X alignment. -1=left (default), 0=center, 1=right
* @param {number} y - Y alignment. -1=top (default), 0=center, 1=bottom
* @param {number} rotation - Rotation of the text. 0=normal, 1=90 degrees clockwise, 2=180, 3=270
* @returns {any} The instance of Graphics this was called on, to allow call chaining
* @url http://www.espruino.com/Reference#l_Graphics_setFontAlign
*/
setFontAlign(x: -1 | 0 | 1, y?: -1 | 0 | 1, rotation?: 0 | 1 | 2 | 3): Graphics;
/**
* Set the font by name. Various forms are available:
* * `g.setFont("4x6")` - standard 4x6 bitmap font
* * `g.setFont("Vector:12")` - vector font 12px high
* * `g.setFont("4x6:2")` - 4x6 bitmap font, doubled in size
* * `g.setFont("6x8:2x3")` - 6x8 bitmap font, doubled in width, tripled in height
* You can also use these forms, but they are not recommended:
* * `g.setFont("Vector12")` - vector font 12px high
* * `g.setFont("4x6",2)` - 4x6 bitmap font, doubled in size
* `g.getFont()` will return the current font as a String.
* For a list of available font names, you can use `g.getFonts()`.
*
* @param {any} name - The name of the font to use (if undefined, the standard 4x6 font will be used)
* @param {number} size - The size of the font (or undefined)
* @returns {any} The instance of Graphics this was called on, to allow call chaining
* @url http://www.espruino.com/Reference#l_Graphics_setFont
*/
setFont(name: FontNameWithScaleFactor): Graphics;
setFont(name: FontName, size: number): Graphics;
/**
* Get the font by name - can be saved and used with `Graphics.setFont`.
* Normally this might return something like `"4x6"`, but if a scale factor is
* specified, a colon and then the size is reported, like "4x6:2"
* **Note:** For custom fonts, `Custom` is currently reported instead of the font
* name.
* @returns {any} Get the name of the current font
* @url http://www.espruino.com/Reference#l_Graphics_getFont
*/
getFont(): FontNameWithScaleFactor | "Custom"
/**
* Return an array of all fonts currently in the Graphics library.
* **Note:** Vector fonts are specified as `Vector#` where `#` is the font height.
* As there are effectively infinite fonts, just `Vector` is included in the list.
* @returns {any} And array of font names
* @url http://www.espruino.com/Reference#l_Graphics_getFonts
*/
getFonts(): FontName[];
/**
* Return the height in pixels of the current font
* @returns {number} The height in pixels of the current font
* @url http://www.espruino.com/Reference#l_Graphics_getFontHeight
*/
getFontHeight(): number;
/**
* Return the size in pixels of a string of text in the current font
*
* @param {any} str - The string
* @returns {number} The length of the string in pixels
* @url http://www.espruino.com/Reference#l_Graphics_stringWidth
*/
stringWidth(str: string): number;
/**
* Return the width and height in pixels of a string of text in the current font
*
* @param {any} str - The string
* @returns {any} An object containing `{width,height}` of the string
* @url http://www.espruino.com/Reference#l_Graphics_stringMetrics
*/
stringMetrics(str: string): { width: number, height: number };
/**
* Wrap a string to the given pixel width using the current font, and return the
* lines as an array.
* To render within the screen's width you can do:
* ```
* g.drawString(g.wrapString(text, g.getWidth()).join("\n")),
* ```
*
* @param {any} str - The string
* @param {number} maxWidth - The width in pixels
* @returns {any} An array of lines that are all less than `maxWidth`
* @url http://www.espruino.com/Reference#l_Graphics_wrapString
*/
wrapString(str: string, maxWidth: number): string[];
/**
* Draw a string of text in the current font.
* ```
* g.drawString("Hello World", 10, 10);
* ```
* Images may also be embedded inside strings (e.g. to render Emoji or characters
* not in the current font). To do this, just add `0` then the image string ([about
* Images](http://www.espruino.com/Graphics#images-bitmaps)) For example:
* ```
* g.drawString("Hi \0\7\5\1\x82 D\x17\xC0");
* // draws:
* // # # # # #
* // # # #
* // ### ## #
* // # # # # #
* // # # ### #####
* ```
*
* @param {any} str - The string
* @param {number} x - The X position of the leftmost pixel
* @param {number} y - The Y position of the topmost pixel
* @param {boolean} solid - For bitmap fonts, should empty pixels be filled with the background color?
* @returns {any} The instance of Graphics this was called on, to allow call chaining
* @url http://www.espruino.com/Reference#l_Graphics_drawString
*/
drawString(str: string, x: number, y: number, solid?: boolean): Graphics;
/**
* Return the current string as a series of polygons (using the current vector font). `options` is as follows:
* * `x` - X offset of font (default 0)
* * `y` - Y offset of font (default 0)
* * `w` - Width of font (default 256) - the actual width will likely be less than this as most characters are non-square
* * `h` - Height of font (default 256) - the actual height will likely be less than this as most characters don't fully fill the font box
* ```
* g.getVectorFontPolys("Hi", {x:-80,y:-128});
* ```
*
* @param {any} str - The string
* @param {any} [options] - [optional] `{x,y,w,h}` (see below)
* @returns {any} An array of Uint8Arrays for vector font polygons
* @url http://www.espruino.com/Reference#l_Graphics_getVectorFontPolys
*/
getVectorFontPolys(str: any, options?: any): any[];
/**
* Draw a line between x1,y1 and x2,y2 in the current foreground color
*
* @param {number} x1 - The left
* @param {number} y1 - The top
* @param {number} x2 - The right
* @param {number} y2 - The bottom
* @returns {any} The instance of Graphics this was called on, to allow call chaining
* @url http://www.espruino.com/Reference#l_Graphics_drawLine
*/
drawLine(x1: number, y1: number, x2: number, y2: number): Graphics;
/**
* Draw a line between x1,y1 and x2,y2 in the current foreground color
*
* @param {number} x1 - The left
* @param {number} y1 - The top
* @param {number} x2 - The right
* @param {number} y2 - The bottom
* @returns {any} The instance of Graphics this was called on, to allow call chaining
* @url http://www.espruino.com/Reference#l_Graphics_drawLineAA
*/
drawLineAA(x1: number, y1: number, x2: number, y2: number): Graphics;
/**
* Draw a line from the last position of `lineTo` or `moveTo` to this position
*
* @param {number} x - X value
* @param {number} y - Y value
* @returns {any} The instance of Graphics this was called on, to allow call chaining
* @url http://www.espruino.com/Reference#l_Graphics_lineTo
*/
lineTo(x: number, y: number): Graphics;
/**
* Move the cursor to a position - see lineTo
*
* @param {number} x - X value
* @param {number} y - Y value
* @returns {any} The instance of Graphics this was called on, to allow call chaining
* @url http://www.espruino.com/Reference#l_Graphics_moveTo
*/
moveTo(x: number, y: number): Graphics;
/**
* Draw a polyline (lines between each of the points in `poly`) in the current
* foreground color
* **Note:** there is a limit of 64 points (128 XY elements) for polygons
*
* @param {any} poly - An array of vertices, of the form ```[x1,y1,x2,y2,x3,y3,etc]```
* @param {boolean} closed - Draw another line between the last element of the array and the first
* @returns {any} The instance of Graphics this was called on, to allow call chaining
* @url http://www.espruino.com/Reference#l_Graphics_drawPoly
*/
drawPoly(poly: number[], closed?: boolean): Graphics;
/**
* Draw an **antialiased** polyline (lines between each of the points in `poly`) in
* the current foreground color
* **Note:** there is a limit of 64 points (128 XY elements) for polygons
*
* @param {any} poly - An array of vertices, of the form ```[x1,y1,x2,y2,x3,y3,etc]```
* @param {boolean} closed - Draw another line between the last element of the array and the first
* @returns {any} The instance of Graphics this was called on, to allow call chaining
* @url http://www.espruino.com/Reference#l_Graphics_drawPolyAA
*/
drawPolyAA(poly: number[], closed?: boolean): Graphics;
/**
* Draw a filled polygon in the current foreground color.
* ```
* g.fillPoly([
* 16, 0,
* 31, 31,
* 26, 31,
* 16, 12,
* 6, 28,
* 0, 27 ]);
* ```
* This fills from the top left hand side of the polygon (low X, low Y) *down to
* but not including* the bottom right. When placed together polygons will align
* perfectly without overdraw - but this will not fill the same pixels as
* `drawPoly` (drawing a line around the edge of the polygon).
* **Note:** there is a limit of 64 points (128 XY elements) for polygons
*
* @param {any} poly - An array of vertices, of the form ```[x1,y1,x2,y2,x3,y3,etc]```
* @returns {any} The instance of Graphics this was called on, to allow call chaining
* @url http://www.espruino.com/Reference#l_Graphics_fillPoly
*/
fillPoly(poly: number[]): Graphics;
/**
* Draw a filled polygon in the current foreground color.
* ```
* g.fillPolyAA([
* 16, 0,
* 31, 31,
* 26, 31,
* 16, 12,
* 6, 28,
* 0, 27 ]);
* ```
* This fills from the top left hand side of the polygon (low X, low Y) *down to
* but not including* the bottom right. When placed together polygons will align
* perfectly without overdraw - but this will not fill the same pixels as
* `drawPoly` (drawing a line around the edge of the polygon).
* **Note:** there is a limit of 64 points (128 XY elements) for polygons
*
* @param {any} poly - An array of vertices, of the form ```[x1,y1,x2,y2,x3,y3,etc]```
* @returns {any} The instance of Graphics this was called on, to allow call chaining
* @url http://www.espruino.com/Reference#l_Graphics_fillPolyAA
*/
fillPolyAA(poly: number[]): Graphics;
/**
* Set the current rotation of the graphics device.
*
* @param {number} rotation - The clockwise rotation. 0 for no rotation, 1 for 90 degrees, 2 for 180, 3 for 270
* @param {boolean} reflect - Whether to reflect the image
* @returns {any} The instance of Graphics this was called on, to allow call chaining
* @url http://www.espruino.com/Reference#l_Graphics_setRotation
*/
setRotation(rotation: 0 | 1 | 2 | 3, reflect?: boolean): Graphics;
/**
* Return the width and height in pixels of an image (either Graphics, Image
* Object, Image String or ArrayBuffer). Returns `undefined` if image couldn't be
* decoded.
* `frames` is also included is the image contains more information than you'd
* expect for a single bitmap. In this case the bitmap might be an animation with
* multiple frames
*
* @param {any} str - The string
* @returns {any} An object containing `{width,height,bpp,transparent}` for the image
* @url http://www.espruino.com/Reference#l_Graphics_imageMetrics
*/
imageMetrics(img: Image): { width: number, height: number, bpp: number, transparent: number, frames?: ArrayBuffer[] } | undefined;
/**
* Image can be:
* * An object with the following fields `{ width : int, height : int, bpp :
* optional int, buffer : ArrayBuffer/String, transparent: optional int,
* palette : optional Uint16Array(2/4/16) }`. bpp = bits per pixel (default is
* 1), transparent (if defined) is the colour that will be treated as
* transparent, and palette is a color palette that each pixel will be looked up
* in first
* * A String where the the first few bytes are:
* `width,height,bpp,[transparent,]image_bytes...`. If a transparent colour is
* specified the top bit of `bpp` should be set.
* * An ArrayBuffer Graphics object (if `bpp<8`, `msb:true` must be set) - this is
* disabled on devices without much flash memory available
* Draw an image at the specified position.
* * If the image is 1 bit, the graphics foreground/background colours will be
* used.
* * If `img.palette` is a Uint16Array or 2/4/16 elements, color data will be
* looked from the supplied palette
* * On Bangle.js, 2 bit images blend from background(0) to foreground(1) colours
* * On Bangle.js, 4 bit images use the Apple Mac 16 color palette
* * On Bangle.js, 8 bit images use the Web Safe 216 color palette
* * Otherwise color data will be copied as-is. Bitmaps are rendered MSB-first
* If `options` is supplied, `drawImage` will allow images to be rendered at any
* scale or angle. If `options.rotate` is set it will center images at `x,y`.
* `options` must be an object of the form:
* ```
* {
* rotate : float, // the amount to rotate the image in radians (default 0)
* scale : float, // the amount to scale the image up (default 1)
* frame : int // if specified and the image has frames of data
* // after the initial frame, draw one of those frames from the image
* }
* ```
* For example:
* ```
* // In the top left of the screen
* g.drawImage(img,0,0);
* // In the top left of the screen, twice as big
* g.drawImage(img,0,0,{scale:2});
* // In the center of the screen, twice as big, 45 degrees
* g.drawImage(img, g.getWidth()/2, g.getHeight()/2,
* {scale:2, rotate:Math.PI/4});
* ```
*
* @param {any} image - An image to draw, either a String or an Object (see below)
* @param {number} x - The X offset to draw the image
* @param {number} y - The Y offset to draw the image
* @param {any} options - options for scaling,rotation,etc (see below)
* @returns {any} The instance of Graphics this was called on, to allow call chaining
* @url http://www.espruino.com/Reference#l_Graphics_drawImage
*/
drawImage(image: Image, x: number, y: number, options?: { rotate?: number, scale?: number, frame?: number }): Graphics;
/**
* Draws multiple images *at once* - which avoids flicker on unbuffered systems
* like Bangle.js. Maximum layer count right now is 4.
* ```
* layers = [ {
* {x : int, // x start position
* y : int, // y start position
* image : string/object,
* scale : float, // scale factor, default 1
* rotate : float, // angle in radians
* center : bool // center on x,y? default is top left
* repeat : should this image be repeated (tiled?)
* nobounds : bool // if true, the bounds of the image are not used to work out the default area to draw
* }
* ]
* options = { // the area to render. Defaults to rendering just enough to cover what's requested
* x,y,
* width,height
* }
* ```
*
* @param {any} layers - An array of objects {x,y,image,scale,rotate,center} (up to 3)
* @param {any} options - options for rendering - see below
* @returns {any} The instance of Graphics this was called on, to allow call chaining
* @url http://www.espruino.com/Reference#l_Graphics_drawImages
*/
drawImages(layers: { x: number, y: number, image: Image, scale?: number, rotate?: number, center?: boolean, repeat?: boolean, nobounds?: boolean }[], options?: { x: number, y: number, width: number, height: number }): Graphics;
/**
* Return this Graphics object as an Image that can be used with
* `Graphics.drawImage`. Check out [the Graphics reference
* page](http://www.espruino.com/Graphics#images-bitmaps) for more information on
* images.
* Will return undefined if data can't be allocated for the image.
* The image data itself will be referenced rather than copied if:
* * An image `object` was requested (not `string`)
* * The Graphics instance was created with `Graphics.createArrayBuffer`
* * Is 8 bpp *OR* the `{msb:true}` option was given
* * No other format options (zigzag/etc) were given
* Otherwise data will be copied, which takes up more space and may be quite slow.
*
* @param {any} type - The type of image to return. Either `object`/undefined to return an image object, or `string` to return an image string
* @returns {any} An Image that can be used with `Graphics.drawImage`
* @url http://www.espruino.com/Reference#l_Graphics_asImage
*/
asImage(type?: "object"): ImageObject;
asImage(type: "string"): string;
/**
* Return the area of the Graphics canvas that has been modified, and optionally
* clear the modified area to 0.
* For instance if `g.setPixel(10,20)` was called, this would return `{x1:10,
* y1:20, x2:10, y2:20}`
*
* @param {boolean} reset - Whether to reset the modified area or not
* @returns {any} An object {x1,y1,x2,y2} containing the modified area, or undefined if not modified
* @url http://www.espruino.com/Reference#l_Graphics_getModified
*/
getModified(reset?: boolean): { x1: number, y1: number, x2: number, y2: number };
/**
* Scroll the contents of this graphics in a certain direction. The remaining area
* is filled with the background color.
* Note: This uses repeated pixel reads and writes, so will not work on platforms
* that don't support pixel reads.
*
* @param {number} x - X direction. >0 = to right
* @param {number} y - Y direction. >0 = down
* @returns {any} The instance of Graphics this was called on, to allow call chaining
* @url http://www.espruino.com/Reference#l_Graphics_scroll
*/
scroll(x: number, y: number): Graphics;
/**
* Blit one area of the screen (x1,y1 w,h) to another (x2,y2 w,h)
* ```
* g.blit({
* x1:0, y1:0,
* w:32, h:32,
* x2:100, y2:100,
* setModified : true // should we set the modified area?
* });
* ```
* Note: This uses repeated pixel reads and writes, so will not work on platforms
* that don't support pixel reads.
*
* @param {any} options - options - see below
* @returns {any} The instance of Graphics this was called on, to allow call chaining
* @url http://www.espruino.com/Reference#l_Graphics_blit
*/
blit(options: { x1: number, y1: number, x2: number, y2: number, w: number, h: number, setModified?: boolean }): Graphics;
/**
* Create a Windows BMP file from this Graphics instance, and return it as a
* String.
* @returns {any} A String representing the Graphics as a Windows BMP file (or 'undefined' if not possible)
* @url http://www.espruino.com/Reference#l_Graphics_asBMP
*/
asBMP(): string;
/**
* Create a URL of the form `data:image/bmp;base64,...` that can be pasted into the
* browser.
* The Espruino Web IDE can detect this data on the console and render the image
* inline automatically.
* @returns {any} A String representing the Graphics as a URL (or 'undefined' if not possible)
* @url http://www.espruino.com/Reference#l_Graphics_asURL
*/
asURL(): string;
/**
* Output this image as a bitmap URL of the form `data:image/bmp;base64,...`. The
* Espruino Web IDE will detect this on the console and will render the image
* inline automatically.
* This is identical to `console.log(g.asURL())` - it is just a convenient function
* for easy debugging and producing screenshots of what is currently in the
* Graphics instance.
* **Note:** This may not work on some bit depths of Graphics instances. It will
* also not work for the main Graphics instance of Bangle.js 1 as the graphics on
* Bangle.js 1 are stored in write-only memory.
* @url http://www.espruino.com/Reference#l_Graphics_dump
*/
dump(): void;
/**
* Calculate the square area under a Bezier curve.
* x0,y0: start point x1,y1: control point y2,y2: end point
* Max 10 points without start point.
*
* @param {any} arr - An array of three vertices, six enties in form of ```[x0,y0,x1,y1,x2,y2]```
* @param {any} options - number of points to calulate
* @returns {any} Array with calculated points
* @url http://www.espruino.com/Reference#l_Graphics_quadraticBezier
*/
quadraticBezier(arr: [number, number, number, number, number, number], options?: number): number[];
/**
* Transformation can be:
* * An object of the form
* ```
* {
* x: float, // x offset (default 0)
* y: float, // y offset (default 0)
* scale: float, // scale factor (default 1)
* rotate: float, // angle in radians (default 0)
* }
* ```
* * A six-element array of the form `[a,b,c,d,e,f]`, which represents the 2D transformation matrix
* ```
* a c e
* b d f
* 0 0 1
* ```
* Apply a transformation to an array of vertices.
*
* @param {any} verts - An array of vertices, of the form ```[x1,y1,x2,y2,x3,y3,etc]```
* @param {any} transformation - The transformation to apply, either an Object or an Array (see below)
* @returns {any} Array of transformed vertices
* @url http://www.espruino.com/Reference#l_Graphics_transformVertices
*/
transformVertices(arr: number[], transformation: { x?: number, y?: number, scale?: number, rotate?: number } | [number, number, number, number, number, number]): number[];
/**
* Returns an object of the form:
* ```
* {
* fg : 0xFFFF, // foreground colour
* bg : 0, // background colour
* fg2 : 0xFFFF, // accented foreground colour
* bg2 : 0x0007, // accented background colour
* fgH : 0xFFFF, // highlighted foreground colour
* bgH : 0x02F7, // highlighted background colour
* dark : true, // Is background dark (e.g. foreground should be a light colour)
* }
* ```
* These values can then be passed to `g.setColor`/`g.setBgColor` for example
* `g.setColor(g.theme.fg2)`. When the Graphics instance is reset, the background
* color is automatically set to `g.theme.bg` and foreground is set to
* `g.theme.fg`.
* On Bangle.js these values can be changed by writing updated values to `theme` in
* `settings.js` and reloading the app - or they can be changed temporarily by
* calling `Graphics.setTheme`
* @returns {any} An object containing the current 'theme' (see below)
* @url http://www.espruino.com/Reference#l_Graphics_theme
*/
theme: Theme;
/**
* Set the global colour scheme. On Bangle.js, this is reloaded from
* `settings.json` for each new app loaded.
* See `Graphics.theme` for the fields that can be provided. For instance you can
* change the background to red using:
* ```
* g.setTheme({bg:"#f00"});
* ```
*
* @param {any} theme - An object of the form returned by `Graphics.theme`
* @returns {any} The instance of Graphics this was called on, to allow call chaining
* @url http://www.espruino.com/Reference#l_Graphics_setTheme
*/
setTheme(theme: { [key in keyof Theme]?: Theme[key] extends number ? ColorResolvable : Theme[key] }): Graphics;
}
/**
* Class containing utility functions for the Seeed WIO LTE board
* @url http://www.espruino.com/Reference#WioLTE
*/
declare class WioLTE {
/**
* Set the WIO's LED
*
* @param {number} red - 0-255, red LED intensity
* @param {number} green - 0-255, green LED intensity
* @param {number} blue - 0-255, blue LED intensity
* @url http://www.espruino.com/Reference#l_WioLTE_LED
*/
static LED(red: number, green: number, blue: number): void;
/**
* Set the power of Grove connectors, except for `D38` and `D39` which are always
* on.
*
* @param {boolean} onoff - Whether to turn the Grove connectors power on or off (D38/D39 are always powered)
* @url http://www.espruino.com/Reference#l_WioLTE_setGrovePower
*/
static setGrovePower(onoff: boolean): void;
/**
* Turn power to the WIO's LED on or off.
* Turning the LED on won't immediately display a color - that must be done with
* `WioLTE.LED(r,g,b)`
*
* @param {boolean} onoff - true = on, false = off
* @url http://www.espruino.com/Reference#l_WioLTE_setLEDPower
*/
static setLEDPower(onoff: boolean): void;
/**
* @returns {any}
* @url http://www.espruino.com/Reference#l_WioLTE_D38
*/
static D38: any;
/**
* @returns {any}
* @url http://www.espruino.com/Reference#l_WioLTE_D20
*/
static D20: any;
/**
* @returns {any}
* @url http://www.espruino.com/Reference#l_WioLTE_A6
*/
static A6: any;
/**
* @returns {any}
* @url http://www.espruino.com/Reference#l_WioLTE_I2C
*/
static I2C: any;
/**
* @returns {any}
* @url http://www.espruino.com/Reference#l_WioLTE_UART
*/
static UART: any;
/**
* @returns {any}
* @url http://www.espruino.com/Reference#l_WioLTE_A4
*/
static A4: any;
}
/**
* This class handles waveforms. In Espruino, a Waveform is a set of data that you
* want to input or output.
* @url http://www.espruino.com/Reference#Waveform
*/
declare class Waveform {
/**
* Create a waveform class. This allows high speed input and output of waveforms.
* It has an internal variable called `buffer` (as well as `buffer2` when
* double-buffered - see `options` below) which contains the data to input/output.
* When double-buffered, a 'buffer' event will be emitted each time a buffer is
* finished with (the argument is that buffer). When the recording stops, a
* 'finish' event will be emitted (with the first argument as the buffer).
* @constructor
*
* @param {number} samples - The number of samples
* @param {any} options - Optional options struct `{doubleBuffer:bool, bits : 8/16}` where: `doubleBuffer` is whether to allocate two buffers or not (default false), and bits is the amount of bits to use (default 8).
* @returns {any} An Waveform object
* @url http://www.espruino.com/Reference#l_Waveform_Waveform
*/
static new(samples: number, options: any): any;
/**
* Will start outputting the waveform on the given pin - the pin must have
* previously been initialised with analogWrite. If not repeating, it'll emit a
* `finish` event when it is done.
*
* @param {Pin} output - The pin to output on
* @param {number} freq - The frequency to output each sample at
* @param {any} options - Optional options struct `{time:float,repeat:bool}` where: `time` is the that the waveform with start output at, e.g. `getTime()+1` (otherwise it is immediate), `repeat` is a boolean specifying whether to repeat the give sample
* @url http://www.espruino.com/Reference#l_Waveform_startOutput
*/
startOutput(output: Pin, freq: number, options: any): void;
/**
* Will start inputting the waveform on the given pin that supports analog. If not
* repeating, it'll emit a `finish` event when it is done.
*
* @param {Pin} output - The pin to output on
* @param {number} freq - The frequency to output each sample at
* @param {any} options - Optional options struct `{time:float,repeat:bool}` where: `time` is the that the waveform with start output at, e.g. `getTime()+1` (otherwise it is immediate), `repeat` is a boolean specifying whether to repeat the give sample
* @url http://www.espruino.com/Reference#l_Waveform_startInput
*/
startInput(output: Pin, freq: number, options: any): void;
/**
* Stop a waveform that is currently outputting
* @url http://www.espruino.com/Reference#l_Waveform_stop
*/
stop(): void;
}
interface DataViewConstructor {
/**
* Create a `DataView` object that can be used to access the data in an
* `ArrayBuffer`.
* ```
* var b = new ArrayBuffer(8)
* var v = new DataView(b)
* v.setUint16(0,"0x1234")
* v.setUint8(3,"0x56")
* console.log("0x"+v.getUint32(0).toString(16))
* // prints 0x12340056
* ```
* @constructor
*
* @param {any} buffer - The `ArrayBuffer` to base this on
* @param {number} [byteOffset] - [optional] The offset of this view in bytes
* @param {number} [byteLength] - [optional] The length in bytes
* @returns {any} A `DataView` object
* @url http://www.espruino.com/Reference#l_DataView_DataView
*/
new(buffer: ArrayBuffer, byteOffset?: number, byteLength?: number): DataView;
}
interface DataView {
/**
*
* @param {number} byteOffset - The offset in bytes to read from
* @param {boolean} [littleEndian] - [optional] Whether to read in little endian - if false or undefined data is read as big endian
* @returns {any} the index of the value in the array, or -1
* @url http://www.espruino.com/Reference#l_DataView_getFloat32
*/
getFloat32(byteOffset: number, littleEndian?: boolean): number;
/**
*
* @param {number} byteOffset - The offset in bytes to read from
* @param {boolean} [littleEndian] - [optional] Whether to read in little endian - if false or undefined data is read as big endian
* @returns {any} the index of the value in the array, or -1
* @url http://www.espruino.com/Reference#l_DataView_getFloat64
*/
getFloat64(byteOffset: number, littleEndian?: boolean): number;
/**
*
* @param {number} byteOffset - The offset in bytes to read from
* @param {boolean} [littleEndian] - [optional] Whether to read in little endian - if false or undefined data is read as big endian
* @returns {any} the index of the value in the array, or -1
* @url http://www.espruino.com/Reference#l_DataView_getInt8
*/
getInt8(byteOffset: number, littleEndian?: boolean): number;
/**
*
* @param {number} byteOffset - The offset in bytes to read from
* @param {boolean} [littleEndian] - [optional] Whether to read in little endian - if false or undefined data is read as big endian
* @returns {any} the index of the value in the array, or -1
* @url http://www.espruino.com/Reference#l_DataView_getInt16
*/
getInt16(byteOffset: number, littleEndian?: boolean): number;
/**
*
* @param {number} byteOffset - The offset in bytes to read from
* @param {boolean} [littleEndian] - [optional] Whether to read in little endian - if false or undefined data is read as big endian
* @returns {any} the index of the value in the array, or -1
* @url http://www.espruino.com/Reference#l_DataView_getInt32
*/
getInt32(byteOffset: number, littleEndian?: boolean): number;
/**
*
* @param {number} byteOffset - The offset in bytes to read from
* @param {boolean} [littleEndian] - [optional] Whether to read in little endian - if false or undefined data is read as big endian
* @returns {any} the index of the value in the array, or -1
* @url http://www.espruino.com/Reference#l_DataView_getUint8
*/
getUint8(byteOffset: number, littleEndian?: boolean): number;
/**
*
* @param {number} byteOffset - The offset in bytes to read from
* @param {boolean} [littleEndian] - [optional] Whether to read in little endian - if false or undefined data is read as big endian
* @returns {any} the index of the value in the array, or -1
* @url http://www.espruino.com/Reference#l_DataView_getUint16
*/
getUint16(byteOffset: number, littleEndian?: boolean): number;
/**
*
* @param {number} byteOffset - The offset in bytes to read from
* @param {boolean} [littleEndian] - [optional] Whether to read in little endian - if false or undefined data is read as big endian
* @returns {any} the index of the value in the array, or -1
* @url http://www.espruino.com/Reference#l_DataView_getUint32
*/
getUint32(byteOffset: number, littleEndian?: boolean): number;
/**
*
* @param {number} byteOffset - The offset in bytes to read from
* @param {any} value - The value to write
* @param {boolean} [littleEndian] - [optional] Whether to read in little endian - if false or undefined data is read as big endian
* @url http://www.espruino.com/Reference#l_DataView_setFloat32
*/
setFloat32(byteOffset: number, value: number, littleEndian?: boolean): void;
/**
*
* @param {number} byteOffset - The offset in bytes to read from
* @param {any} value - The value to write
* @param {boolean} [littleEndian] - [optional] Whether to read in little endian - if false or undefined data is read as big endian
* @url http://www.espruino.com/Reference#l_DataView_setFloat64
*/
setFloat64(byteOffset: number, value: number, littleEndian?: boolean): void;
/**
*
* @param {number} byteOffset - The offset in bytes to read from
* @param {any} value - The value to write
* @param {boolean} [littleEndian] - [optional] Whether to read in little endian - if false or undefined data is read as big endian
* @url http://www.espruino.com/Reference#l_DataView_setInt8
*/
setInt8(byteOffset: number, value: number, littleEndian?: boolean): void;
/**
*
* @param {number} byteOffset - The offset in bytes to read from
* @param {any} value - The value to write
* @param {boolean} [littleEndian] - [optional] Whether to read in little endian - if false or undefined data is read as big endian
* @url http://www.espruino.com/Reference#l_DataView_setInt16
*/
setInt16(byteOffset: number, value: number, littleEndian?: boolean): void;
/**
*
* @param {number} byteOffset - The offset in bytes to read from
* @param {any} value - The value to write
* @param {boolean} [littleEndian] - [optional] Whether to read in little endian - if false or undefined data is read as big endian
* @url http://www.espruino.com/Reference#l_DataView_setInt32
*/
setInt32(byteOffset: number, value: number, littleEndian?: boolean): void;
/**
*
* @param {number} byteOffset - The offset in bytes to read from
* @param {any} value - The value to write
* @param {boolean} [littleEndian] - [optional] Whether to read in little endian - if false or undefined data is read as big endian
* @url http://www.espruino.com/Reference#l_DataView_setUint8
*/
setUint8(byteOffset: number, value: number, littleEndian?: boolean): void;
/**
*
* @param {number} byteOffset - The offset in bytes to read from
* @param {any} value - The value to write
* @param {boolean} [littleEndian] - [optional] Whether to read in little endian - if false or undefined data is read as big endian
* @url http://www.espruino.com/Reference#l_DataView_setUint16
*/
setUint16(byteOffset: number, value: number, littleEndian?: boolean): void;
/**
*
* @param {number} byteOffset - The offset in bytes to read from
* @param {any} value - The value to write
* @param {boolean} [littleEndian] - [optional] Whether to read in little endian - if false or undefined data is read as big endian
* @url http://www.espruino.com/Reference#l_DataView_setUint32
*/
setUint32(byteOffset: number, value: number, littleEndian?: boolean): void;
}
/**
* This class helps
* @url http://www.espruino.com/Reference#DataView
*/
declare const DataView: DataViewConstructor
interface consoleConstructor {
/**
* Print the supplied string(s) to the console
* **Note:** If you're connected to a computer (not a wall adaptor) via USB but
* **you are not running a terminal app** then when you print data Espruino may
* pause execution and wait until the computer requests the data it is trying to
* print.
*
* @param {any} text - One or more arguments to print
* @url http://www.espruino.com/Reference#l_console_log
*/
log(...text: any[]): void;
}
interface console {
}
/**
* An Object that contains functions for writing to the interactive console
* @url http://www.espruino.com/Reference#console
*/
declare const console: consoleConstructor
interface ErrorConstructor {
/**
* Creates an Error object
* @constructor
*
* @param {any} [message] - [optional] An message string
* @returns {any} An Error object
* @url http://www.espruino.com/Reference#l_Error_Error
*/
new(message?: string): Error;
}
interface Error {
/**
* @returns {any} A String
* @url http://www.espruino.com/Reference#l_Error_toString
*/
toString(): string;
}
/**
* The base class for runtime errors
* @url http://www.espruino.com/Reference#Error
*/
declare const Error: ErrorConstructor
interface SyntaxErrorConstructor {
/**
* Creates a SyntaxError object
* @constructor
*
* @param {any} [message] - [optional] An message string
* @returns {any} A SyntaxError object
* @url http://www.espruino.com/Reference#l_SyntaxError_SyntaxError
*/
new(message?: string): SyntaxError;
}
interface SyntaxError {
/**
* @returns {any} A String
* @url http://www.espruino.com/Reference#l_SyntaxError_toString
*/
toString(): string;
}
/**
* The base class for syntax errors
* @url http://www.espruino.com/Reference#SyntaxError
*/
declare const SyntaxError: SyntaxErrorConstructor
interface TypeErrorConstructor {
/**
* Creates a TypeError object
* @constructor
*
* @param {any} [message] - [optional] An message string
* @returns {any} A TypeError object
* @url http://www.espruino.com/Reference#l_TypeError_TypeError
*/
new(message?: string): TypeError;
}
interface TypeError {
/**
* @returns {any} A String
* @url http://www.espruino.com/Reference#l_TypeError_toString
*/
toString(): string;
}
/**
* The base class for type errors
* @url http://www.espruino.com/Reference#TypeError
*/
declare const TypeError: TypeErrorConstructor
/**
* The base class for internal errors
* @url http://www.espruino.com/Reference#InternalError
*/
declare class InternalError {
/**
* Creates an InternalError object
* @constructor
*
* @param {any} [message] - [optional] An message string
* @returns {any} An InternalError object
* @url http://www.espruino.com/Reference#l_InternalError_InternalError
*/
static new(message?: string): InternalError;
/**
* @returns {any} A String
* @url http://www.espruino.com/Reference#l_InternalError_toString
*/
toString(): string;
}
interface ReferenceErrorConstructor {
/**
* Creates a ReferenceError object
* @constructor
*
* @param {any} [message] - [optional] An message string
* @returns {any} A ReferenceError object
* @url http://www.espruino.com/Reference#l_ReferenceError_ReferenceError
*/
new(message?: string): ReferenceError;
}
interface ReferenceError {
/**
* @returns {any} A String
* @url http://www.espruino.com/Reference#l_ReferenceError_toString
*/
toString(): string;
}
/**
* The base class for reference errors - where a variable which doesn't exist has
* been accessed.
* @url http://www.espruino.com/Reference#ReferenceError
*/
declare const ReferenceError: ReferenceErrorConstructor
interface ArrayBufferConstructor {
/**
* Create an Array Buffer object
* @constructor
*
* @param {number} byteLength - The length in Bytes
* @returns {any} An ArrayBuffer object
* @url http://www.espruino.com/Reference#l_ArrayBuffer_ArrayBuffer
*/
new(byteLength: number): ArrayBuffer;
}
interface ArrayBuffer {
/**
* The length, in bytes, of the `ArrayBuffer`
* @returns {number} The Length in bytes
* @url http://www.espruino.com/Reference#l_ArrayBuffer_byteLength
*/
byteLength: number;
}
/**
* This is the built-in JavaScript class for array buffers.
* If you want to access arrays of differing types of data you may also find
* `DataView` useful.
* @url http://www.espruino.com/Reference#ArrayBuffer
*/
declare const ArrayBuffer: ArrayBufferConstructor
/**
* This is the built-in JavaScript class that is the prototype for:
* * [Uint8Array](/Reference#Uint8Array)
* * [UintClamped8Array](/Reference#UintClamped8Array)
* * [Int8Array](/Reference#Int8Array)
* * [Uint16Array](/Reference#Uint16Array)
* * [Int16Array](/Reference#Int16Array)
* * [Uint24Array](/Reference#Uint24Array) (Espruino-specific - not standard JS)
* * [Uint32Array](/Reference#Uint32Array)
* * [Int32Array](/Reference#Int32Array)
* * [Float32Array](/Reference#Float32Array)
* * [Float64Array](/Reference#Float64Array)
* If you want to access arrays of differing types of data you may also find
* `DataView` useful.
* @url http://www.espruino.com/Reference#ArrayBufferView
*/
declare class ArrayBufferView<T = ArrayBuffer> {
/**
* The buffer this view references
* @returns {any} An ArrayBuffer object
* @url http://www.espruino.com/Reference#l_ArrayBufferView_buffer
*/
readonly buffer: T;
/**
* The length, in bytes, of the `ArrayBufferView`
* @returns {number} The Length
* @url http://www.espruino.com/Reference#l_ArrayBufferView_byteLength
*/
readonly byteLength: number;
/**
* The offset, in bytes, to the first byte of the view within the backing
* `ArrayBuffer`
* @returns {number} The byte Offset
* @url http://www.espruino.com/Reference#l_ArrayBufferView_byteOffset
*/
readonly byteOffset: number;
/**
* Copy the contents of `array` into this one, mapping `this[x+offset]=array[x];`
*
* @param {any} arr - Floating point index to access
* @param {number} [offset] - [optional] The offset in this array at which to write the values
* @url http://www.espruino.com/Reference#l_ArrayBufferView_set
*/
set(arr: ArrayLike<number>, offset: number): void
/**
* Return an array which is made from the following: ```A.map(function) =
* [function(A[0]), function(A[1]), ...]```
* **Note:** This returns an `ArrayBuffer` of the same type it was called on. To
* get an `Array`, use `Array.map`, e.g. `[].map.call(myArray, x=>x+1)`
*
* @param {any} function - Function used to map one item to another
* @param {any} [thisArg] - [optional] If specified, the function is called with 'this' set to thisArg
* @returns {any} An array containing the results
* @url http://www.espruino.com/Reference#l_ArrayBufferView_map
*/
map(callbackfn: (value: number, index: number, array: T) => number, thisArg?: any): T;
/**
* Returns a smaller part of this array which references the same data (it doesn't
* copy it).
*
* @param {number} begin - Element to begin at, inclusive. If negative, this is from the end of the array. The entire array is included if this isn't specified
* @param {any} end - Element to end at, exclusive. If negative, it is relative to the end of the array. If not specified the whole array is included
* @returns {any} An `ArrayBufferView` of the same type as this one, referencing the same data
* @url http://www.espruino.com/Reference#l_ArrayBufferView_subarray
*/
subarray(begin?: number, end?: number): T;
/**
* Return the index of the value in the array, or `-1`
*
* @param {any} value - The value to check for
* @param {number} [startIndex] - [optional] the index to search from, or 0 if not specified
* @returns {any} the index of the value in the array, or -1
* @url http://www.espruino.com/Reference#l_ArrayBufferView_indexOf
*/
indexOf(value: number, startIndex?: number): number;
/**
* Return `true` if the array includes the value, `false` otherwise
*
* @param {any} value - The value to check for
* @param {number} [startIndex] - [optional] the index to search from, or 0 if not specified
* @returns {boolean} `true` if the array includes the value, `false` otherwise
* @url http://www.espruino.com/Reference#l_ArrayBufferView_includes
*/
includes(value: number, startIndex?: number): boolean;
/**
* Join all elements of this array together into one string, using 'separator'
* between them. e.g. ```[1,2,3].join(' ')=='1 2 3'```
*
* @param {any} separator - The separator
* @returns {any} A String representing the Joined array
* @url http://www.espruino.com/Reference#l_ArrayBufferView_join
*/
join(separator?: string): string;
/**
* Do an in-place quicksort of the array
*
* @param {any} var - A function to use to compare array elements (or undefined)
* @returns {any} This array object
* @url http://www.espruino.com/Reference#l_ArrayBufferView_sort
*/
sort(compareFn?: (a: number, b: number) => number): this;
/**
* Executes a provided function once per array element.
*
* @param {any} function - Function to be executed
* @param {any} [thisArg] - [optional] If specified, the function is called with 'this' set to thisArg
* @url http://www.espruino.com/Reference#l_ArrayBufferView_forEach
*/
forEach(callbackfn: (value: number, index: number, array: T) => void, thisArg?: any): void;
/**
* Execute `previousValue=initialValue` and then `previousValue =
* callback(previousValue, currentValue, index, array)` for each element in the
* array, and finally return previousValue.
*
* @param {any} callback - Function used to reduce the array
* @param {any} initialValue - if specified, the initial value to pass to the function
* @returns {any} The value returned by the last function called
* @url http://www.espruino.com/Reference#l_ArrayBufferView_reduce
*/
reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: T) => number, initialValue?: number): number;
/**
* Fill this array with the given value, for every index `>= start` and `< end`
*
* @param {any} value - The value to fill the array with
* @param {number} start - Optional. The index to start from (or 0). If start is negative, it is treated as length+start where length is the length of the array
* @param {any} end - Optional. The index to end at (or the array length). If end is negative, it is treated as length+end.
* @returns {any} This array
* @url http://www.espruino.com/Reference#l_ArrayBufferView_fill
*/
fill(value: number, start?: number, end?: number): T;
/**
* Return an array which contains only those elements for which the callback
* function returns 'true'
*
* @param {any} function - Function to be executed
* @param {any} [thisArg] - [optional] If specified, the function is called with 'this' set to thisArg
* @returns {any} An array containing the results
* @url http://www.espruino.com/Reference#l_ArrayBufferView_filter
*/
filter(predicate: (value: number, index: number, array: T) => any, thisArg?: any): T;
/**
* Return the array element where `function` returns `true`, or `undefined` if it
* doesn't returns `true` for any element.
*
* @param {any} function - Function to be executed
* @returns {any} The array element where `function` returns `true`, or `undefined`
* @url http://www.espruino.com/Reference#l_ArrayBufferView_find
*/
find(predicate: (value: number, index: number, obj: T) => boolean, thisArg?: any): number | undefined;
/**
* Return the array element's index where `function` returns `true`, or `-1` if it
* doesn't returns `true` for any element.
*
* @param {any} function - Function to be executed
* @returns {any} The array element's index where `function` returns `true`, or `-1`
* @url http://www.espruino.com/Reference#l_ArrayBufferView_findIndex
*/
findIndex(predicate: (value: number, index: number, obj: T) => boolean, thisArg?: any): number;
/**
* Reverse the contents of this `ArrayBufferView` in-place
* @returns {any} This array
* @url http://www.espruino.com/Reference#l_ArrayBufferView_reverse
*/
reverse(): T
/**
* Return a copy of a portion of this array (in a new array).
* **Note:** This currently returns a normal `Array`, not an `ArrayBuffer`
*
* @param {number} start - Start index
* @param {any} [end] - [optional] End index
* @returns {any} A new array
* @url http://www.espruino.com/Reference#l_ArrayBufferView_slice
*/
slice(start?: number, end?: number): number[];
[index: number]: number
}
interface Uint8ArrayConstructor {
/**
* Create a typed array based on the given input. Either an existing Array Buffer,
* an Integer as a Length, or a simple array. If an `ArrayBufferView` (e.g.
* `Uint8Array` rather than `ArrayBuffer`) is given, it will be completely copied
* rather than referenced.
* @constructor
*
* @param {any} arr - The array or typed array to base this off, or an integer which is the array length
* @param {number} byteOffset - The byte offset in the ArrayBuffer (ONLY IF the first argument was an ArrayBuffer)
* @param {number} length - The length (ONLY IF the first argument was an ArrayBuffer)
* @returns {any} A typed array
* @url http://www.espruino.com/Reference#l_Uint8Array_Uint8Array
*/
new(length: number): Uint8Array;
new(array: ArrayLike<number>): Uint8Array;
new(buffer: ArrayBuffer, byteOffset?: number, length?: number): Uint8Array;
}
type Uint8Array = ArrayBufferView<Uint8Array>;
declare const Uint8Array: Uint8ArrayConstructor
interface Uint8ClampedArrayConstructor {
/**
* Create a typed array based on the given input. Either an existing Array Buffer,
* an Integer as a Length, or a simple array. If an `ArrayBufferView` (e.g.
* `Uint8Array` rather than `ArrayBuffer`) is given, it will be completely copied
* rather than referenced.
* Clamped arrays clamp their values to the allowed range, rather than 'wrapping'.
* e.g. after `a[0]=12345;`, `a[0]==255`.
* @constructor
*
* @param {any} arr - The array or typed array to base this off, or an integer which is the array length
* @param {number} byteOffset - The byte offset in the ArrayBuffer (ONLY IF the first argument was an ArrayBuffer)
* @param {number} length - The length (ONLY IF the first argument was an ArrayBuffer)
* @returns {any} A typed array
* @url http://www.espruino.com/Reference#l_Uint8ClampedArray_Uint8ClampedArray
*/
new(length: number): Uint8ClampedArray;
new(array: ArrayLike<number>): Uint8ClampedArray;
new(buffer: ArrayBuffer, byteOffset?: number, length?: number): Uint8ClampedArray;
}
type Uint8ClampedArray = ArrayBufferView<Uint8ClampedArray>;
declare const Uint8ClampedArray: Uint8ClampedArrayConstructor
interface Int8ArrayConstructor {
/**
* Create a typed array based on the given input. Either an existing Array Buffer,
* an Integer as a Length, or a simple array. If an `ArrayBufferView` (e.g.
* `Uint8Array` rather than `ArrayBuffer`) is given, it will be completely copied
* rather than referenced.
* @constructor
*
* @param {any} arr - The array or typed array to base this off, or an integer which is the array length
* @param {number} byteOffset - The byte offset in the ArrayBuffer (ONLY IF the first argument was an ArrayBuffer)
* @param {number} length - The length (ONLY IF the first argument was an ArrayBuffer)
* @returns {any} A typed array
* @url http://www.espruino.com/Reference#l_Int8Array_Int8Array
*/
new(length: number): Int8Array;
new(array: ArrayLike<number>): Int8Array;
new(buffer: ArrayBuffer, byteOffset?: number, length?: number): Int8Array;
}
type Int8Array = ArrayBufferView<Int8Array>;
declare const Int8Array: Int8ArrayConstructor
interface Uint16ArrayConstructor {
/**
* Create a typed array based on the given input. Either an existing Array Buffer,
* an Integer as a Length, or a simple array. If an `ArrayBufferView` (e.g.
* `Uint8Array` rather than `ArrayBuffer`) is given, it will be completely copied
* rather than referenced.
* @constructor
*
* @param {any} arr - The array or typed array to base this off, or an integer which is the array length
* @param {number} byteOffset - The byte offset in the ArrayBuffer (ONLY IF the first argument was an ArrayBuffer)
* @param {number} length - The length (ONLY IF the first argument was an ArrayBuffer)
* @returns {any} A typed array
* @url http://www.espruino.com/Reference#l_Uint16Array_Uint16Array
*/
new(length: number): Uint16Array;
new(array: ArrayLike<number>): Uint16Array;
new(buffer: ArrayBuffer, byteOffset?: number, length?: number): Uint16Array;
}
type Uint16Array = ArrayBufferView<Uint16Array>;
declare const Uint16Array: Uint16ArrayConstructor
interface Int16ArrayConstructor {
/**
* Create a typed array based on the given input. Either an existing Array Buffer,
* an Integer as a Length, or a simple array. If an `ArrayBufferView` (e.g.
* `Uint8Array` rather than `ArrayBuffer`) is given, it will be completely copied
* rather than referenced.
* @constructor
*
* @param {any} arr - The array or typed array to base this off, or an integer which is the array length
* @param {number} byteOffset - The byte offset in the ArrayBuffer (ONLY IF the first argument was an ArrayBuffer)
* @param {number} length - The length (ONLY IF the first argument was an ArrayBuffer)
* @returns {any} A typed array
* @url http://www.espruino.com/Reference#l_Int16Array_Int16Array
*/
new(length: number): Int16Array;
new(array: ArrayLike<number>): Int16Array;
new(buffer: ArrayBuffer, byteOffset?: number, length?: number): Int16Array;
}
type Int16Array = ArrayBufferView<Int16Array>;
declare const Int16Array: Int16ArrayConstructor
/**
* This is the built-in JavaScript class for a typed array of 24 bit unsigned
* integers.
* Instantiate this in order to efficiently store arrays of data (Espruino's normal
* arrays store data in a map, which is inefficient for non-sparse arrays).
* Arrays of this type include all the methods from
* [ArrayBufferView](/Reference#ArrayBufferView)
* @url http://www.espruino.com/Reference#Uint24Array
*/
declare class Uint24Array {
/**
* Create a typed array based on the given input. Either an existing Array Buffer,
* an Integer as a Length, or a simple array. If an `ArrayBufferView` (e.g.
* `Uint8Array` rather than `ArrayBuffer`) is given, it will be completely copied
* rather than referenced.
* @constructor
*
* @param {any} arr - The array or typed array to base this off, or an integer which is the array length
* @param {number} byteOffset - The byte offset in the ArrayBuffer (ONLY IF the first argument was an ArrayBuffer)
* @param {number} length - The length (ONLY IF the first argument was an ArrayBuffer)
* @returns {any} A typed array
* @url http://www.espruino.com/Reference#l_Uint24Array_Uint24Array
*/
static new(length: number): Uint24Array;
static new(array: ArrayLike<number>): Uint24Array;
static new(buffer: ArrayBuffer, byteOffset?: number, length?: number): Uint24Array;
}
interface Uint32ArrayConstructor {
/**
* Create a typed array based on the given input. Either an existing Array Buffer,
* an Integer as a Length, or a simple array. If an `ArrayBufferView` (e.g.
* `Uint8Array` rather than `ArrayBuffer`) is given, it will be completely copied
* rather than referenced.
* @constructor
*
* @param {any} arr - The array or typed array to base this off, or an integer which is the array length
* @param {number} byteOffset - The byte offset in the ArrayBuffer (ONLY IF the first argument was an ArrayBuffer)
* @param {number} length - The length (ONLY IF the first argument was an ArrayBuffer)
* @returns {any} A typed array
* @url http://www.espruino.com/Reference#l_Uint32Array_Uint32Array
*/
new(length: number): Uint32Array;
new(array: ArrayLike<number>): Uint32Array;
new(buffer: ArrayBuffer, byteOffset?: number, length?: number): Uint32Array;
}
type Uint32Array = ArrayBufferView<Uint32Array>;
declare const Uint32Array: Uint32ArrayConstructor
interface Int32ArrayConstructor {
/**
* Create a typed array based on the given input. Either an existing Array Buffer,
* an Integer as a Length, or a simple array. If an `ArrayBufferView` (e.g.
* `Uint8Array` rather than `ArrayBuffer`) is given, it will be completely copied
* rather than referenced.
* @constructor
*
* @param {any} arr - The array or typed array to base this off, or an integer which is the array length
* @param {number} byteOffset - The byte offset in the ArrayBuffer (ONLY IF the first argument was an ArrayBuffer)
* @param {number} length - The length (ONLY IF the first argument was an ArrayBuffer)
* @returns {any} A typed array
* @url http://www.espruino.com/Reference#l_Int32Array_Int32Array
*/
new(length: number): Int32Array;
new(array: ArrayLike<number>): Int32Array;
new(buffer: ArrayBuffer, byteOffset?: number, length?: number): Int32Array;
}
type Int32Array = ArrayBufferView<Int32Array>;
declare const Int32Array: Int32ArrayConstructor
interface Float32ArrayConstructor {
/**
* Create a typed array based on the given input. Either an existing Array Buffer,
* an Integer as a Length, or a simple array. If an `ArrayBufferView` (e.g.
* `Uint8Array` rather than `ArrayBuffer`) is given, it will be completely copied
* rather than referenced.
* @constructor
*
* @param {any} arr - The array or typed array to base this off, or an integer which is the array length
* @param {number} byteOffset - The byte offset in the ArrayBuffer (ONLY IF the first argument was an ArrayBuffer)
* @param {number} length - The length (ONLY IF the first argument was an ArrayBuffer)
* @returns {any} A typed array
* @url http://www.espruino.com/Reference#l_Float32Array_Float32Array
*/
new(length: number): Float32Array;
new(array: ArrayLike<number>): Float32Array;
new(buffer: ArrayBuffer, byteOffset?: number, length?: number): Float32Array;
}
type Float32Array = ArrayBufferView<Float32Array>;
declare const Float32Array: Float32ArrayConstructor
interface Float64ArrayConstructor {
/**
* Create a typed array based on the given input. Either an existing Array Buffer,
* an Integer as a Length, or a simple array. If an `ArrayBufferView` (e.g.
* `Uint8Array` rather than `ArrayBuffer`) is given, it will be completely copied
* rather than referenced.
* @constructor
*
* @param {any} arr - The array or typed array to base this off, or an integer which is the array length
* @param {number} byteOffset - The byte offset in the ArrayBuffer (ONLY IF the first argument was an ArrayBuffer)
* @param {number} length - The length (ONLY IF the first argument was an ArrayBuffer)
* @returns {any} A typed array
* @url http://www.espruino.com/Reference#l_Float64Array_Float64Array
*/
new(length: number): Float64Array;
new(array: ArrayLike<number>): Float64Array;
new(buffer: ArrayBuffer, byteOffset?: number, length?: number): Float64Array;
}
type Float64Array = ArrayBufferView<Float64Array>;
declare const Float64Array: Float64ArrayConstructor
interface DateConstructor {
/**
* Get the number of milliseconds elapsed since 1970 (or on embedded platforms,
* since startup)
* @returns {number}
* @url http://www.espruino.com/Reference#l_Date_now
*/
now(): number;
/**
* Parse a date string and return milliseconds since 1970. Data can be either
* '2011-10-20T14:48:00', '2011-10-20' or 'Mon, 25 Dec 1995 13:30:00 +0430'
*
* @param {any} str - A String
* @returns {number} The number of milliseconds since 1970
* @url http://www.espruino.com/Reference#l_Date_parse
*/
parse(str: string): number;
/**
* Creates a date object
* @constructor
*
* @param {any} args - Either nothing (current time), one numeric argument (milliseconds since 1970), a date string (see `Date.parse`), or [year, month, day, hour, minute, second, millisecond]
* @returns {any} A Date object
* @url http://www.espruino.com/Reference#l_Date_Date
*/
new(): Date;
new(value: number | string): Date;
new(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date;
}
interface Date {
/**
* This returns the time-zone offset from UTC, in minutes.
* @returns {number} The difference, in minutes, between UTC and local time
* @url http://www.espruino.com/Reference#l_Date_getTimezoneOffset
*/
getTimezoneOffset(): number;
/**
* This returns a boolean indicating whether daylight savings time is in effect.
* @returns {number} true if daylight savings time is in effect
* @url http://www.espruino.com/Reference#l_Date_getIsDST
*/
getIsDST(): boolean
/**
* Return the number of milliseconds since 1970
* @returns {number}
* @url http://www.espruino.com/Reference#l_Date_getTime
*/
getTime(): number;
/**
* Return the number of milliseconds since 1970
* @returns {number}
* @url http://www.espruino.com/Reference#l_Date_valueOf
*/
valueOf(): number;
/**
* Set the time/date of this Date class
*
* @param {number} timeValue - the number of milliseconds since 1970
* @returns {number} the number of milliseconds since 1970
* @url http://www.espruino.com/Reference#l_Date_setTime
*/
setTime(timeValue: number): number;
/**
* 0..23
* @returns {number}
* @url http://www.espruino.com/Reference#l_Date_getHours
*/
getHours(): number;
/**
* 0..59
* @returns {number}
* @url http://www.espruino.com/Reference#l_Date_getMinutes
*/
getMinutes(): number;
/**
* 0..59
* @returns {number}
* @url http://www.espruino.com/Reference#l_Date_getSeconds
*/
getSeconds(): number;
/**
* 0..999
* @returns {number}
* @url http://www.espruino.com/Reference#l_Date_getMilliseconds
*/
getMilliseconds(): number;
/**
* Day of the week (0=sunday, 1=monday, etc)
* @returns {number}
* @url http://www.espruino.com/Reference#l_Date_getDay
*/
getDay(): number;
/**
* Day of the month 1..31
* @returns {number}
* @url http://www.espruino.com/Reference#l_Date_getDate
*/
getDate(): number;
/**
* Month of the year 0..11
* @returns {number}
* @url http://www.espruino.com/Reference#l_Date_getMonth
*/
getMonth(): number;
/**
* The year, e.g. 2014
* @returns {number}
* @url http://www.espruino.com/Reference#l_Date_getFullYear
*/
getFullYear(): number;
/**
* 0..23
*
* @param {number} hoursValue - number of hours, 0..23
* @param {any} minutesValue - number of minutes, 0..59
* @param {any} [secondsValue] - [optional] number of seconds, 0..59
* @param {any} [millisecondsValue] - [optional] number of milliseconds, 0..999
* @returns {number} The number of milliseconds since 1970
* @url http://www.espruino.com/Reference#l_Date_setHours
*/
setHours(hoursValue: number, minutesValue?: number, secondsValue?: number, millisecondsValue?: number): number;
/**
* 0..59
*
* @param {number} minutesValue - number of minutes, 0..59
* @param {any} [secondsValue] - [optional] number of seconds, 0..59
* @param {any} [millisecondsValue] - [optional] number of milliseconds, 0..999
* @returns {number} The number of milliseconds since 1970
* @url http://www.espruino.com/Reference#l_Date_setMinutes
*/
setMinutes(minutesValue: number, secondsValue?: number, millisecondsValue?: number): number;
/**
* 0..59
*
* @param {number} secondsValue - number of seconds, 0..59
* @param {any} [millisecondsValue] - [optional] number of milliseconds, 0..999
* @returns {number} The number of milliseconds since 1970
* @url http://www.espruino.com/Reference#l_Date_setSeconds
*/
setSeconds(secondsValue: number, millisecondsValue?: number): number;
/**
*
* @param {number} millisecondsValue - number of milliseconds, 0..999
* @returns {number} The number of milliseconds since 1970
* @url http://www.espruino.com/Reference#l_Date_setMilliseconds
*/
setMilliseconds(millisecondsValue: number): number;
/**
* Day of the month 1..31
*
* @param {number} dayValue - the day of the month, between 0 and 31
* @returns {number} The number of milliseconds since 1970
* @url http://www.espruino.com/Reference#l_Date_setDate
*/
setDate(dayValue: number): number;
/**
* Month of the year 0..11
*
* @param {number} yearValue - The month, between 0 and 11
* @param {any} [dayValue] - [optional] the day, between 0 and 31
* @returns {number} The number of milliseconds since 1970
* @url http://www.espruino.com/Reference#l_Date_setMonth
*/
setMonth(yearValue: number, dayValue?: number): number;
/**
*
* @param {number} yearValue - The full year - eg. 1989
* @param {any} [monthValue] - [optional] the month, between 0 and 11
* @param {any} [dayValue] - [optional] the day, between 0 and 31
* @returns {number} The number of milliseconds since 1970
* @url http://www.espruino.com/Reference#l_Date_setFullYear
*/
setFullYear(yearValue: number, monthValue?: number, dayValue?: number): number;
/**
* Converts to a String, e.g: `Fri Jun 20 2014 14:52:20 GMT+0000`
* **Note:** This uses whatever timezone was set with `E.setTimeZone()` or
* `E.setDST()`
* @returns {any} A String
* @url http://www.espruino.com/Reference#l_Date_toString
*/
toString(): string;
/**
* Converts to a String, e.g: `Fri, 20 Jun 2014 14:52:20 GMT`
* **Note:** This always assumes a timezone of GMT
* @returns {any} A String
* @url http://www.espruino.com/Reference#l_Date_toUTCString
*/
toUTCString(): string;
/**
* Converts to a ISO 8601 String, e.g: `2014-06-20T14:52:20.123Z`
* **Note:** This always assumes a timezone of GMT
* @returns {any} A String
* @url http://www.espruino.com/Reference#l_Date_toISOString
*/
toISOString(): string;
/**
* Calls `Date.toISOString` to output this date to JSON
* @returns {any} A String
* @url http://www.espruino.com/Reference#l_Date_toJSON
*/
toJSON(): string;
/**
* Converts to a ISO 8601 String (with timezone information), e.g:
* `2014-06-20T14:52:20.123-0500`
* @returns {any} A String
* @url http://www.espruino.com/Reference#l_Date_toLocalISOString
*/
toLocalISOString(): string;
}
/**
* The built-in class for handling Dates.
* **Note:** By default the time zone is GMT+0, however you can change the timezone
* using the `E.setTimeZone(...)` function.
* For example `E.setTimeZone(1)` will be GMT+0100
* *However* if you have daylight savings time set with `E.setDST(...)` then the
* timezone set by `E.setTimeZone(...)` will be _ignored_.
* @url http://www.espruino.com/Reference#Date
*/
declare const Date: DateConstructor
interface MathConstructor {
/**
* @returns {number} The value of E - 2.718281828459045
* @url http://www.espruino.com/Reference#l_Math_E
*/
E: number;
/**
* @returns {number} The value of PI - 3.141592653589793
* @url http://www.espruino.com/Reference#l_Math_PI
*/
PI: number;
/**
* @returns {number} The natural logarithm of 2 - 0.6931471805599453
* @url http://www.espruino.com/Reference#l_Math_LN2
*/
LN2: number;
/**
* @returns {number} The natural logarithm of 10 - 2.302585092994046
* @url http://www.espruino.com/Reference#l_Math_LN10
*/
LN10: number;
/**
* @returns {number} The base 2 logarithm of e - 1.4426950408889634
* @url http://www.espruino.com/Reference#l_Math_LOG2E
*/
LOG2E: number;
/**
* @returns {number} The base 10 logarithm of e - 0.4342944819032518
* @url http://www.espruino.com/Reference#l_Math_LOG10E
*/
LOG10E: number;
/**
* @returns {number} The square root of 2 - 1.4142135623730951
* @url http://www.espruino.com/Reference#l_Math_SQRT2
*/
SQRT2: number;
/**
* @returns {number} The square root of 1/2 - 0.7071067811865476
* @url http://www.espruino.com/Reference#l_Math_SQRT1_2
*/
SQRT1_2: number;
/**
*
* @param {number} x - A floating point value
* @returns {number} The absolute value of x (eg, ```Math.abs(2)==2```, but also ```Math.abs(-2)==2```)
* @url http://www.espruino.com/Reference#l_Math_abs
*/
abs(x: number): number;
/**
*
* @param {number} x - The value to get the arc cosine of
* @returns {number} The arc cosine of x, between 0 and PI
* @url http://www.espruino.com/Reference#l_Math_acos
*/
acos(x: number): number;
/**
*
* @param {number} x - The value to get the arc sine of
* @returns {number} The arc sine of x, between -PI/2 and PI/2
* @url http://www.espruino.com/Reference#l_Math_asin
*/
asin(x: number): number;
/**
*
* @param {number} x - The value to get the arc tangent of
* @returns {number} The arc tangent of x, between -PI/2 and PI/2
* @url http://www.espruino.com/Reference#l_Math_atan
*/
atan(x: number): number;
/**
*
* @param {number} y - The Y-part of the angle to get the arc tangent of
* @param {number} x - The X-part of the angle to get the arc tangent of
* @returns {number} The arctangent of Y/X, between -PI and PI
* @url http://www.espruino.com/Reference#l_Math_atan2
*/
atan2(y: number, x: number): number;
/**
*
* @param {number} theta - The angle to get the cosine of
* @returns {number} The cosine of theta
* @url http://www.espruino.com/Reference#l_Math_cos
*/
cos(theta: number): number;
/**
*
* @param {number} x - The value to raise to the power
* @param {number} y - The power x should be raised to
* @returns {number} x raised to the power y (x^y)
* @url http://www.espruino.com/Reference#l_Math_pow
*/
pow(x: number, y: number): number;
/**
* @returns {number} A random number between 0 and 1
* @url http://www.espruino.com/Reference#l_Math_random
*/
random(): number;
/**
*
* @param {number} x - The value to round
* @returns {any} x, rounded to the nearest integer
* @url http://www.espruino.com/Reference#l_Math_round
*/
round(x: number): any;
/**
*
* @param {number} theta - The angle to get the sine of
* @returns {number} The sine of theta
* @url http://www.espruino.com/Reference#l_Math_sin
*/
sin(theta: number): number;
/**
*
* @param {number} theta - The angle to get the tangent of
* @returns {number} The tangent of theta
* @url http://www.espruino.com/Reference#l_Math_tan
*/
tan(theta: number): number;
/**
*
* @param {number} x - The value to take the square root of
* @returns {number} The square root of x
* @url http://www.espruino.com/Reference#l_Math_sqrt
*/
sqrt(x: number): number;
/**
*
* @param {number} x - The value to round up
* @returns {number} x, rounded upwards to the nearest integer
* @url http://www.espruino.com/Reference#l_Math_ceil
*/
ceil(x: number): number;
/**
*
* @param {number} x - The value to round down
* @returns {number} x, rounded downwards to the nearest integer
* @url http://www.espruino.com/Reference#l_Math_floor
*/
floor(x: number): number;
/**
*
* @param {number} x - The value raise E to the power of
* @returns {number} E^x
* @url http://www.espruino.com/Reference#l_Math_exp
*/
exp(x: number): number;
/**
*
* @param {number} x - The value to take the logarithm (base E) root of
* @returns {number} The log (base E) of x
* @url http://www.espruino.com/Reference#l_Math_log
*/
log(x: number): number;
/**
* DEPRECATED - Please use `E.clip()` instead. Clip a number to be between min and
* max (inclusive)
*
* @param {number} x - A floating point value to clip
* @param {number} min - The smallest the value should be
* @param {number} max - The largest the value should be
* @returns {number} The value of x, clipped so as not to be below min or above max.
* @url http://www.espruino.com/Reference#l_Math_clip
*/
clip(x: number, min: number, max: number): number;
/**
* DEPRECATED - This is not part of standard JavaScript libraries
* Wrap a number around if it is less than 0 or greater than or equal to max. For
* instance you might do: ```Math.wrap(angleInDegrees, 360)```
*
* @param {number} x - A floating point value to wrap
* @param {number} max - The largest the value should be
* @returns {number} The value of x, wrapped so as not to be below min or above max.
* @url http://www.espruino.com/Reference#l_Math_wrap
*/
wrap(x: number, max: number): number;
/**
* Find the minimum of a series of numbers
*
* @param {any} args - Floating point values to clip
* @returns {number} The minimum of the supplied values
* @url http://www.espruino.com/Reference#l_Math_min
*/
min(...args: any[]): number;
/**
* Find the maximum of a series of numbers
*
* @param {any} args - Floating point values to clip
* @returns {number} The maximum of the supplied values
* @url http://www.espruino.com/Reference#l_Math_max
*/
max(...args: any[]): number;
/**
*
* @param {number} x - The value to get the sign from
* @returns {number} sign on x - -1, 1, or 0
* @url http://www.espruino.com/Reference#l_Math_sign
*/
sign(x: number): number;
}
interface Math {
}
/**
* This is a standard JavaScript class that contains useful Maths routines
* @url http://www.espruino.com/Reference#Math
*/
declare const Math: MathConstructor
/**
* Built-in class that caches the modules used by the `require` command
* @url http://www.espruino.com/Reference#Modules
*/
declare class Modules {
/**
* Return an array of module names that have been cached
* @returns {any} An array of module names
* @url http://www.espruino.com/Reference#l_Modules_getCached
*/
static getCached(): any;
/**
* Remove the given module from the list of cached modules
*
* @param {any} id - The module name to remove
* @url http://www.espruino.com/Reference#l_Modules_removeCached
*/
static removeCached(id: any): void;
/**
* Remove all cached modules
* @url http://www.espruino.com/Reference#l_Modules_removeAllCached
*/
static removeAllCached(): void;
/**
* Add the given module to the cache
*
* @param {any} id - The module name to add
* @param {any} sourcecode - The module's sourcecode
* @url http://www.espruino.com/Reference#l_Modules_addCached
*/
static addCached(id: any, sourcecode: any): void;
}
/**
* This is the built-in JavaScript class for Espruino utility functions.
* @url http://www.espruino.com/Reference#E
*/
declare class E {
/**
* Display a menu on the screen, and set up the buttons to navigate through it.
* Supply an object containing menu items. When an item is selected, the function
* it references will be executed. For example:
* ```
* var boolean = false;
* var number = 50;
* // First menu
* var mainmenu = {
* "" : { "title" : "-- Main Menu --" },
* "Backlight On" : function() { LED1.set(); },
* "Backlight Off" : function() { LED1.reset(); },
* "Submenu" : function() { E.showMenu(submenu); },
* "A Boolean" : {
* value : boolean,
* format : v => v?"On":"Off",
* onchange : v => { boolean=v; }
* },
* "A Number" : {
* value : number,
* min:0,max:100,step:10,
* onchange : v => { number=v; }
* },
* "Exit" : function() { E.showMenu(); }, // remove the menu
* };
* // Submenu
* var submenu = {
* "" : { title : "-- SubMenu --",
* back : function() { E.showMenu(mainmenu); } },
* "One" : undefined, // do nothing
* "Two" : undefined // do nothing
* };
* // Actually display the menu
* E.showMenu(mainmenu);
* ```
* The menu will stay onscreen and active until explicitly removed, which you can
* do by calling `E.showMenu()` without arguments.
* See http://www.espruino.com/graphical_menu for more detailed information.
*
* @param {any} menu - An object containing name->function mappings to to be used in a menu
* @returns {any} A menu object with `draw`, `move` and `select` functions
* @url http://www.espruino.com/Reference#l_E_showMenu
*/
static showMenu(menu: Menu): MenuInstance;
static showMenu(): void;
/**
* A utility function for displaying a full screen message on the screen.
* Draws to the screen and returns immediately.
* ```
* E.showMessage("These are\nLots of\nLines","My Title")
* ```
*
* @param {any} message - A message to display. Can include newlines
* @param {any} [title] - [optional] a title for the message
* @url http://www.espruino.com/Reference#l_E_showMessage
*/
static showMessage(message: string, title?: string): void;
/**
* Displays a full screen prompt on the screen, with the buttons requested (or
* `Yes` and `No` for defaults).
* When the button is pressed the promise is resolved with the requested values
* (for the `Yes` and `No` defaults, `true` and `false` are returned).
* ```
* E.showPrompt("Do you like fish?").then(function(v) {
* if (v) print("'Yes' chosen");
* else print("'No' chosen");
* });
* // Or
* E.showPrompt("How many fish\ndo you like?",{
* title:"Fish",
* buttons : {"One":1,"Two":2,"Three":3}
* }).then(function(v) {
* print("You like "+v+" fish");
* });
* ```
* To remove the prompt, call `E.showPrompt()` with no arguments.
* The second `options` argument can contain:
* ```
* {
* title: "Hello", // optional Title
* buttons : {"Ok":true,"Cancel":false} // list of button text & return value
* }
* ```
*
* @param {any} message - A message to display. Can include newlines
* @param {any} [options] - [optional] an object of options (see below)
* @returns {any} A promise that is resolved when 'Ok' is pressed
* @url http://www.espruino.com/Reference#l_E_showPrompt
*/
static showPrompt<T = boolean>(message: string, options?: { title?: string, buttons?: { [key: string]: T } }): Promise<T>;
static showPrompt(): void;
/**
* Displays a full screen prompt on the screen, with a single 'Ok' button.
* When the button is pressed the promise is resolved.
* ```
* E.showAlert("Hello").then(function() {
* print("Ok pressed");
* });
* // or
* E.showAlert("These are\nLots of\nLines","My Title").then(function() {
* print("Ok pressed");
* });
* ```
* To remove the window, call `E.showAlert()` with no arguments.
*
* @param {any} message - A message to display. Can include newlines
* @param {any} [options] - [optional] a title for the message
* @returns {any} A promise that is resolved when 'Ok' is pressed
* @url http://www.espruino.com/Reference#l_E_showAlert
*/
static showAlert(message?: string, options?: string): Promise<void>;
/**
* Setup the filesystem so that subsequent calls to `E.openFile` and
* `require('fs').*` will use an SD card on the supplied SPI device and pin.
* It can even work using software SPI - for instance:
* ```
* // DI/CMD = C7
* // DO/DAT0 = C8
* // CK/CLK = C9
* // CD/CS/DAT3 = C6
* var spi = new SPI();
* spi.setup({mosi:C7, miso:C8, sck:C9});
* E.connectSDCard(spi, C6);
* console.log(require("fs").readdirSync());
* ```
* See [the page on File IO](http://www.espruino.com/File+IO) for more information.
* **Note:** We'd strongly suggest you add a pullup resistor from CD/CS pin to
* 3.3v. It is good practise to avoid accidental writes before Espruino is
* initialised, and some cards will not work reliably without one.
* **Note:** If you want to remove an SD card after you have started using it, you
* *must* call `E.unmountSD()` or you may cause damage to the card.
*
* @param {any} spi - The SPI object to use for communication
* @param {Pin} csPin - The pin to use for Chip Select
* @url http://www.espruino.com/Reference#l_E_connectSDCard
*/
static connectSDCard(spi: any, csPin: Pin): void;
/**
* Unmount the SD card, so it can be removed. If you remove the SD card without
* calling this you may cause corruption, and you will be unable to access another
* SD card until you reset Espruino or call `E.unmountSD()`.
* @url http://www.espruino.com/Reference#l_E_unmountSD
*/
static unmountSD(): void;
/**
* Open a file
*
* @param {any} path - the path to the file to open.
* @param {any} mode - The mode to use when opening the file. Valid values for mode are 'r' for read, 'w' for write new, 'w+' for write existing, and 'a' for append. If not specified, the default is 'r'.
* @returns {any} A File object
* @url http://www.espruino.com/Reference#l_E_openFile
*/
static openFile(path: any, mode: any): File;
/**
* Change the parameters used for the flash filesystem. The default address is the
* last 1Mb of 4Mb Flash, 0x300000, with total size of 1Mb.
* Before first use the media needs to be formatted.
* ```
* fs=require("fs");
* try {
* fs.readdirSync();
* } catch (e) { //'Uncaught Error: Unable to mount media : NO_FILESYSTEM'
* console.log('Formatting FS - only need to do once');
* E.flashFatFS({ format: true });
* }
* fs.writeFileSync("bang.txt", "This is the way the world ends\nnot with a bang but a whimper.\n");
* fs.readdirSync();
* ```
* This will create a drive of 100 * 4096 bytes at 0x300000. Be careful with the
* selection of flash addresses as you can overwrite firmware! You only need to
* format once, as each will erase the content.
* `E.flashFatFS({ addr:0x300000,sectors:100,format:true });`
*
* @param {any} [options]
* [optional] An object `{ addr : int=0x300000, sectors : int=256, format : bool=false }`
* addr : start address in flash
* sectors: number of sectors to use
* format: Format the media
* @returns {boolean} True on success, or false on failure
* @url http://www.espruino.com/Reference#l_E_flashFatFS
*/
static flashFatFS(options?: any): boolean;
/**
* Display a menu on the screen, and set up the buttons to navigate through it.
* Supply an object containing menu items. When an item is selected, the function
* it references will be executed. For example:
* ```
* var boolean = false;
* var number = 50;
* // First menu
* var mainmenu = {
* "" : { title : "-- Main Menu --" }, // options
* "LED On" : function() { LED1.set(); },
* "LED Off" : function() { LED1.reset(); },
* "Submenu" : function() { E.showMenu(submenu); },
* "A Boolean" : {
* value : boolean,
* format : v => v?"On":"Off",
* onchange : v => { boolean=v; }
* },
* "A Number" : {
* value : number,
* min:0,max:100,step:10,
* onchange : v => { number=v; }
* },
* "Exit" : function() { E.showMenu(); }, // remove the menu
* };
* // Submenu
* var submenu = {
* "" : { title : "-- SubMenu --",
* back : function() { E.showMenu(mainmenu); } },
* "One" : undefined, // do nothing
* "Two" : undefined // do nothing
* };
* // Actually display the menu
* E.showMenu(mainmenu);
* ```
* The menu will stay onscreen and active until explicitly removed, which you can
* do by calling `E.showMenu()` without arguments.
* See http://www.espruino.com/graphical_menu for more detailed information.
* On Bangle.js there are a few additions over the standard `graphical_menu`:
* * The options object can contain:
* * `back : function() { }` - add a 'back' button, with the function called when
* it is pressed
* * `remove : function() { }` - add a handler function to be called when the
* menu is removed
* * (Bangle.js 2) `scroll : int` - an integer specifying how much the initial
* menu should be scrolled by
* * The object returned by `E.showMenu` contains:
* * (Bangle.js 2) `scroller` - the object returned by `E.showScroller` -
* `scroller.scroll` returns the amount the menu is currently scrolled by
* * In the object specified for editable numbers:
* * (Bangle.js 2) the `format` function is called with `format(value)` in the
* main menu, `format(value,1)` when in a scrollable list, or `format(value,2)`
* when in a popup window.
* You can also specify menu items as an array (rather than an Object). This can be
* useful if you have menu items with the same title, or you want to `push` menu
* items onto an array:
* ```
* var menu = [
* { title:"Something", onchange:function() { print("selected"); } },
* { title:"On or Off", value:false, onchange: v => print(v) },
* { title:"A Value", value:3, min:0, max:10, onchange: v => print(v) },
* ];
* menu[""] = { title:"Hello" };
* E.showMenu(menu);
* ```
*
* @param {any} menu - An object containing name->function mappings to to be used in a menu
* @returns {any} A menu object with `draw`, `move` and `select` functions
* @url http://www.espruino.com/Reference#l_E_showMenu
*/
static showMenu(menu: Menu): MenuInstance;
static showMenu(): void;
/**
* A utility function for displaying a full screen message on the screen.
* Draws to the screen and returns immediately.
* ```
* E.showMessage("These are\nLots of\nLines","My Title")
* ```
* or to display an image as well as text:
* ```
* E.showMessage("Lots of text will wrap automatically",{
* title:"Warning",
* img:atob("FBQBAfgAf+Af/4P//D+fx/n+f5/v+f//n//5//+f//n////3//5/n+P//D//wf/4B/4AH4A=")
* })
* ```
*
* @param {any} message - A message to display. Can include newlines
* @param {any} [options] - [optional] a title for the message, or an object of options `{title:string, img:image_string}`
* @url http://www.espruino.com/Reference#l_E_showMessage
*/
static showMessage(message: string, title?: string | { title?: string, img?: string }): void;
/**
* Displays a full screen prompt on the screen, with the buttons requested (or
* `Yes` and `No` for defaults).
* When the button is pressed the promise is resolved with the requested values
* (for the `Yes` and `No` defaults, `true` and `false` are returned).
* ```
* E.showPrompt("Do you like fish?").then(function(v) {
* if (v) print("'Yes' chosen");
* else print("'No' chosen");
* });
* // Or
* E.showPrompt("How many fish\ndo you like?",{
* title:"Fish",
* buttons : {"One":1,"Two":2,"Three":3}
* }).then(function(v) {
* print("You like "+v+" fish");
* });
* // Or
* E.showPrompt("Continue?", {
* title:"Alert",
* img:atob("FBQBAfgAf+Af/4P//D+fx/n+f5/v+f//n//5//+f//n////3//5/n+P//D//wf/4B/4AH4A=")}).then(function(v) {
* if (v) print("'Yes' chosen");
* else print("'No' chosen");
* });
* ```
* To remove the prompt, call `E.showPrompt()` with no arguments.
* The second `options` argument can contain:
* ```
* {
* title: "Hello", // optional Title
* buttons : {"Ok":true,"Cancel":false}, // optional list of button text & return value
* img: "image_string" // optional image string to draw
* remove: function() { } // Bangle.js: optional function to be called when the prompt is removed
* }
* ```
*
* @param {any} message - A message to display. Can include newlines
* @param {any} [options] - [optional] an object of options (see below)
* @returns {any} A promise that is resolved when 'Ok' is pressed
* @url http://www.espruino.com/Reference#l_E_showPrompt
*/
static showPrompt<T = boolean>(message: string, options?: { title?: string, buttons?: { [key: string]: T }, image?: string, remove?: () => void }): Promise<T>;
static showPrompt(): void;
/**
* Display a scrollable menu on the screen, and set up the buttons/touchscreen to
* navigate through it and select items.
* Supply an object containing:
* ```
* {
* h : 24, // height of each menu item in pixels
* c : 10, // number of menu items
* // a function to draw a menu item
* draw : function(idx, rect) { ... }
* // a function to call when the item is selected, touch parameter is only relevant
* // for Bangle.js 2 and contains the coordinates touched inside the selected item
* select : function(idx, touch) { ... }
* // optional function to be called when 'back' is tapped
* back : function() { ...}
* // Bangle.js: optional function to be called when the scroller should be removed
* remove : function() {}
* }
* ```
* For example to display a list of numbers:
* ```
* E.showScroller({
* h : 40, c : 8,
* draw : (idx, r) => {
* g.setBgColor((idx&1)?"#666":"#999").clearRect(r.x,r.y,r.x+r.w-1,r.y+r.h-1);
* g.setFont("6x8:2").drawString("Item Number\n"+idx,r.x+10,r.y+4);
* },
* select : (idx) => console.log("You selected ", idx)
* });
* ```
* To remove the scroller, just call `E.showScroller()`
*
* @param {any} options - An object containing `{ h, c, draw, select, back, remove }` (see below)
* @returns {any} A menu object with `draw()` and `drawItem(itemNo)` functions
* @url http://www.espruino.com/Reference#l_E_showScroller
*/
static showScroller(options?: { h: number, c: number, draw: (idx: number, rect: { x: number, y: number, w: number, h: number }) => void, select: (idx: number, touch?: {x: number, y: number}) => void, back?: () => void, remove?: () => void }): { draw: () => void, drawItem: (itemNo: number) => void };
static showScroller(): void;
/**
* @url http://www.espruino.com/Reference#l_E_showMenu
*/
static showMenu(): void;
/**
* @url http://www.espruino.com/Reference#l_E_showMenu
*/
static showMenu(): void;
/**
* @url http://www.espruino.com/Reference#l_E_showPrompt
*/
static showPrompt(): void;
/**
* @url http://www.espruino.com/Reference#l_E_showScroller
*/
static showScroller(): void;
/**
* Displays a full screen prompt on the screen, with a single 'Ok' button.
* When the button is pressed the promise is resolved.
* ```
* E.showAlert("Hello").then(function() {
* print("Ok pressed");
* });
* // or
* E.showAlert("These are\nLots of\nLines","My Title").then(function() {
* print("Ok pressed");
* });
* ```
* To remove the window, call `E.showAlert()` with no arguments.
*
* @param {any} message - A message to display. Can include newlines
* @param {any} [options] - [optional] a title for the message or an object containing options
* @returns {any} A promise that is resolved when 'Ok' is pressed
* @url http://www.espruino.com/Reference#l_E_showAlert
*/
static showAlert(message?: string, options?: string): Promise<void>;
static showAlert(message?: string, options?: { title?: string, remove?: () => void }): Promise<void>;
/**
* Called when a notification arrives on an Apple iOS device Bangle.js is connected
* to
* ```
* {
* event:"add",
* uid:42,
* category:4,
* categoryCnt:42,
* silent:true,
* important:false,
* preExisting:true,
* positive:false,
* negative:true
* }
* ```
* You can then get more information with `NRF.ancsGetNotificationInfo`, for instance:
* ```
* E.on('ANCS', event => {
* NRF.ancsGetNotificationInfo( event.uid ).then(a=>print("Notify",E.toJS(a)));
* });
* ```
* @param {string} event - The event to listen to.
* @param {(info: any) => void} callback - A function that is executed when the event occurs. Its arguments are:
* * `info` An object (see below)
* @url http://www.espruino.com/Reference#l_E_ANCS
*/
static on(event: "ANCS", callback: (info: any) => void): void;
/**
* Called when a media event arrives on an Apple iOS device Bangle.js is connected
* to
* ```
* {
* id : "artist"/"album"/"title"/"duration",
* value : "Some text",
* truncated : bool // the 'value' was too big to be sent completely
* }
* ```
* @param {string} event - The event to listen to.
* @param {(info: any) => void} callback - A function that is executed when the event occurs. Its arguments are:
* * `info` An object (see below)
* @url http://www.espruino.com/Reference#l_E_AMS
*/
static on(event: "AMS", callback: (info: any) => void): void;
/**
* This event is called right after the board starts up, and has a similar effect
* to creating a function called `onInit`.
* For example to write `"Hello World"` every time Espruino starts, use:
* ```
* E.on('init', function() {
* console.log("Hello World!");
* });
* ```
* **Note:** that subsequent calls to `E.on('init', ` will **add** a new handler,
* rather than replacing the last one. This allows you to write modular code -
* something that was not possible with `onInit`.
* @param {string} event - The event to listen to.
* @param {() => void} callback - A function that is executed when the event occurs.
* @url http://www.espruino.com/Reference#l_E_init
*/
static on(event: "init", callback: () => void): void;
/**
* This event is called just before the device shuts down for commands such as
* `reset()`, `load()`, `save()`, `E.reboot()` or `Bangle.off()`
* For example to write `"Bye!"` just before shutting down use:
* ```
* E.on('kill', function() {
* console.log("Bye!");
* });
* ```
* **NOTE:** This event is not called when the device is 'hard reset' - for example
* by removing power, hitting an actual reset button, or via a Watchdog timer
* reset.
* @param {string} event - The event to listen to.
* @param {() => void} callback - A function that is executed when the event occurs.
* @url http://www.espruino.com/Reference#l_E_kill
*/
static on(event: "kill", callback: () => void): void;
/**
* This event is called when an error is created by Espruino itself (rather than JS
* code) which changes the state of the error flags reported by `E.getErrorFlags()`
* This could be low memory, full buffers, UART overflow, etc. `E.getErrorFlags()`
* has a full description of each type of error.
* This event will only be emitted when error flag is set. If the error flag was
* already set nothing will be emitted. To clear error flags so that you do get a
* callback each time a flag is set, call `E.getErrorFlags()`.
* @param {string} event - The event to listen to.
* @param {(errorFlags: any) => void} callback - A function that is executed when the event occurs. Its arguments are:
* * `errorFlags` An array of new error flags, as would be returned by `E.getErrorFlags()`. Error flags that were present before won't be reported.
* @url http://www.espruino.com/Reference#l_E_errorFlag
*/
static on(event: "errorFlag", callback: (errorFlags: ErrorFlag[]) => void): void;
/**
* This event is called when a full touchscreen device on an Espruino is interacted
* with.
* **Note:** This event is not implemented on Bangle.js because it only has a two
* area touchscreen.
* To use the touchscreen to draw lines, you could do:
* ```
* var last;
* E.on('touch',t=>{
* if (last) g.lineTo(t.x, t.y);
* else g.moveTo(t.x, t.y);
* last = t.b;
* });
* ```
* @param {string} event - The event to listen to.
* @param {(x: number, y: number, b: number) => void} callback - A function that is executed when the event occurs. Its arguments are:
* * `x` X coordinate in display coordinates
* * `y` Y coordinate in display coordinates
* * `b` Touch count - 0 for released, 1 for pressed
* @url http://www.espruino.com/Reference#l_E_touch
*/
static on(event: "touch", callback: (x: number, y: number, b: number) => void): void;
/**
* Use the microcontroller's internal thermistor to work out the temperature.
* On Puck.js v2.0 this will use the on-board PCT2075TP temperature sensor, but on
* other devices it may not be desperately well calibrated.
* While this is implemented on Espruino boards, it may not be implemented on other
* devices. If so it'll return NaN.
* **Note:** This is not entirely accurate and varies by a few degrees from chip
* to chip. It measures the **die temperature**, so when connected to USB it could
* be reading 10 over degrees C above ambient temperature. When running from
* battery with `setDeepSleep(true)` it is much more accurate though.
* @returns {number} The temperature in degrees C
* @url http://www.espruino.com/Reference#l_E_getTemperature
*/
static getTemperature(): number;
/**
* Check the internal voltage reference. To work out an actual voltage of an input
* pin, you can use `analogRead(pin)*E.getAnalogVRef()`
* **Note:** This value is calculated by reading the voltage on an internal
* voltage reference with the ADC. It will be slightly noisy, so if you need this
* for accurate measurements we'd recommend that you call this function several
* times and average the results.
* While this is implemented on Espruino boards, it may not be implemented on other
* devices. If so it'll return NaN.
* @returns {number} The voltage (in Volts) that a reading of 1 from `analogRead` actually represents - usually around 3.3v
* @url http://www.espruino.com/Reference#l_E_getAnalogVRef
*/
static getAnalogVRef(): number;
/**
* ADVANCED: This is a great way to crash Espruino if you're not sure what you are
* doing
* Create a native function that executes the code at the given address, e.g.
* `E.nativeCall(0x08012345,'double (double,double)')(1.1, 2.2)`
* If you're executing a thumb function, you'll almost certainly need to set the
* bottom bit of the address to 1.
* Note it's not guaranteed that the call signature you provide can be used - there
* are limits on the number of arguments allowed.
* When supplying `data`, if it is a 'flat string' then it will be used directly,
* otherwise it'll be converted to a flat string and used.
*
* @param {number} addr - The address in memory of the function (or offset in `data` if it was supplied
* @param {any} sig - The signature of the call, `returnType (arg1,arg2,...)`. Allowed types are `void`,`bool`,`int`,`double`,`Pin`,`JsVar`
* @param {any} data - (Optional) A string containing the function itself. If not supplied then 'addr' is used as an absolute address.
* @returns {any} The native function
* @url http://www.espruino.com/Reference#l_E_nativeCall
*/
static nativeCall(addr: number, sig: string, data?: string): any;
/**
* Clip a number to be between min and max (inclusive)
*
* @param {number} x - A floating point value to clip
* @param {number} min - The smallest the value should be
* @param {number} max - The largest the value should be
* @returns {number} The value of x, clipped so as not to be below min or above max.
* @url http://www.espruino.com/Reference#l_E_clip
*/
static clip(x: number, min: number, max: number): number;
/**
* Sum the contents of the given Array, String or ArrayBuffer and return the result
*
* @param {any} arr - The array to sum
* @returns {number} The sum of the given buffer
* @url http://www.espruino.com/Reference#l_E_sum
*/
static sum(arr: string | number[] | ArrayBuffer): number;
/**
* Work out the variance of the contents of the given Array, String or ArrayBuffer
* and return the result. This is equivalent to `v=0;for (i in arr)
* v+=Math.pow(mean-arr[i],2)`
*
* @param {any} arr - The array to work out the variance for
* @param {number} mean - The mean value of the array
* @returns {number} The variance of the given buffer
* @url http://www.espruino.com/Reference#l_E_variance
*/
static variance(arr: string | number[] | ArrayBuffer, mean: number): number;
/**
* Convolve arr1 with arr2. This is equivalent to `v=0;for (i in arr1) v+=arr1[i] *
* arr2[(i+offset) % arr2.length]`
*
* @param {any} arr1 - An array to convolve
* @param {any} arr2 - An array to convolve
* @param {number} offset - The mean value of the array
* @returns {number} The variance of the given buffer
* @url http://www.espruino.com/Reference#l_E_convolve
*/
static convolve(arr1: string | number[] | ArrayBuffer, arr2: string | number[] | ArrayBuffer, offset: number): number;
/**
* Performs a Fast Fourier Transform (FFT) in 32 bit floats on the supplied data
* and writes it back into the original arrays. Note that if only one array is
* supplied, the data written back is the modulus of the complex result
* `sqrt(r*r+i*i)`.
* In order to perform the FFT, there has to be enough room on the stack to
* allocate two arrays of 32 bit floating point numbers - this will limit the
* maximum size of FFT possible to around 1024 items on most platforms.
* **Note:** on the Original Espruino board, FFTs are performed in 64bit arithmetic
* as there isn't space to include the 32 bit maths routines (2x more RAM is
* required).
*
* @param {any} arrReal - An array of real values
* @param {any} arrImage - An array of imaginary values (or if undefined, all values will be taken to be 0)
* @param {boolean} inverse - Set this to true if you want an inverse FFT - otherwise leave as 0
* @url http://www.espruino.com/Reference#l_E_FFT
*/
static FFT(arrReal: string | number[] | ArrayBuffer, arrImage?: string | number[] | ArrayBuffer, inverse?: boolean): any;
/**
* Enable the watchdog timer. This will reset Espruino if it isn't able to return
* to the idle loop within the timeout.
* If `isAuto` is false, you must call `E.kickWatchdog()` yourself every so often
* or the chip will reset.
* ```
* E.enableWatchdog(0.5); // automatic mode
* while(1); // Espruino will reboot because it has not been idle for 0.5 sec
* ```
* ```
* E.enableWatchdog(1, false);
* setInterval(function() {
* if (everything_ok)
* E.kickWatchdog();
* }, 500);
* // Espruino will now reset if everything_ok is false,
* // or if the interval fails to be called
* ```
* **NOTE:** This is only implemented on STM32, nRF5x and ESP32 devices (all official
* Espruino boards).
* **NOTE:** On STM32 (Pico, WiFi, Original) with `setDeepSleep(1)` you need to
* explicitly wake Espruino up with an interval of less than the watchdog timeout
* or the watchdog will fire and the board will reboot. You can do this with
* `setInterval("", time_in_milliseconds)`.
* **NOTE:** On ESP32, the timeout will be rounded to the nearest second.
*
* @param {number} timeout - The timeout in seconds before a watchdog reset
* @param {any} isAuto - If undefined or true, the watchdog is kicked automatically. If not, you must call `E.kickWatchdog()` yourself
* @url http://www.espruino.com/Reference#l_E_enableWatchdog
*/
static enableWatchdog(timeout: number, isAuto?: boolean): void;
/**
* Kicks a Watchdog timer set up with `E.enableWatchdog(..., false)`. See
* `E.enableWatchdog` for more information.
* **NOTE:** This is only implemented on STM32 and nRF5x devices (all official
* Espruino boards).
* @url http://www.espruino.com/Reference#l_E_kickWatchdog
*/
static kickWatchdog(): void;
/**
* Get and reset the error flags. Returns an array that can contain:
* `'FIFO_FULL'`: The receive FIFO filled up and data was lost. This could be state
* transitions for setWatch, or received characters.
* `'BUFFER_FULL'`: A buffer for a stream filled up and characters were lost. This
* can happen to any stream - Serial,HTTP,etc.
* `'CALLBACK'`: A callback (`setWatch`, `setInterval`, `on('data',...)`) caused an
* error and so was removed.
* `'LOW_MEMORY'`: Memory is running low - Espruino had to run a garbage collection
* pass or remove some of the command history
* `'MEMORY'`: Espruino ran out of memory and was unable to allocate some data that
* it needed.
* `'UART_OVERFLOW'` : A UART received data but it was not read in time and was
* lost
* @returns {any} An array of error flags
* @url http://www.espruino.com/Reference#l_E_getErrorFlags
*/
static getErrorFlags(): ErrorFlag[]
/**
* Get Espruino's interpreter flags that control the way it handles your JavaScript
* code.
* * `deepSleep` - Allow deep sleep modes (also set by setDeepSleep)
* * `pretokenise` - When adding functions, pre-minify them and tokenise reserved
* words
* * `unsafeFlash` - Some platforms stop writes/erases to interpreter memory to
* stop you bricking the device accidentally - this removes that protection
* * `unsyncFiles` - When writing files, *don't* flush all data to the SD card
* after each command (the default is *to* flush). This is much faster, but can
* cause filesystem damage if power is lost without the filesystem unmounted.
* @returns {any} An object containing flag names and their values
* @url http://www.espruino.com/Reference#l_E_getFlags
*/
static getFlags(): { [key in Flag]: boolean }
/**
* Set the Espruino interpreter flags that control the way it handles your
* JavaScript code.
* Run `E.getFlags()` and check its description for a list of available flags and
* their values.
*
* @param {any} flags - An object containing flag names and boolean values. You need only specify the flags that you want to change.
* @url http://www.espruino.com/Reference#l_E_setFlags
*/
static setFlags(flags: { [key in Flag]?: boolean }): void
/**
*
* @param {any} source - The source file/stream that will send content.
* @param {any} destination - The destination file/stream that will receive content from the source.
* @param {any} [options]
* [optional] An object `{ chunkSize : int=64, end : bool=true, complete : function }`
* chunkSize : The amount of data to pipe from source to destination at a time
* complete : a function to call when the pipe activity is complete
* end : call the 'end' function on the destination when the source is finished
* @url http://www.espruino.com/Reference#l_E_pipe
*/
static pipe(source: any, destination: any, options?: { chunkSize?: number, end?: boolean, complete?: () => void }): void
/**
* Create an ArrayBuffer from the given string. This is done via a reference, not a
* copy - so it is very fast and memory efficient.
* Note that this is an ArrayBuffer, not a Uint8Array. To get one of those, do:
* `new Uint8Array(E.toArrayBuffer('....'))`.
*
* @param {any} str - The string to convert to an ArrayBuffer
* @returns {any} An ArrayBuffer that uses the given string
* @url http://www.espruino.com/Reference#l_E_toArrayBuffer
*/
static toArrayBuffer(str: string): ArrayBuffer;
/**
* Returns a 'flat' string representing the data in the arguments, or return
* `undefined` if a flat string cannot be created.
* This creates a string from the given arguments. If an argument is a String or an
* Array, each element is traversed and added as an 8 bit character. If it is
* anything else, it is converted to a character directly.
* In the case where there's one argument which is an 8 bit typed array backed by a
* flat string of the same length, the backing string will be returned without
* doing a copy or other allocation. The same applies if there's a single argument
* which is itself a flat string.
*
* @param {any} args - The arguments to convert to a String
* @returns {any} A String (or `undefined` if a Flat String cannot be created)
* @url http://www.espruino.com/Reference#l_E_toString
*/
static toString(...args: any[]): string | undefined;
/**
* This creates a Uint8Array from the given arguments. These are handled as
* follows:
* * `Number` -> read as an integer, using the lowest 8 bits
* * `String` -> use each character's numeric value (e.g.
* `String.charCodeAt(...)`)
* * `Array` -> Call itself on each element
* * `ArrayBuffer` or Typed Array -> use the lowest 8 bits of each element
* * `Object`:
* * `{data:..., count: int}` -> call itself `object.count` times, on
* `object.data`
* * `{callback : function}` -> call the given function, call itself on return
* value
* For example:
* ```
* E.toUint8Array([1,2,3])
* =new Uint8Array([1, 2, 3])
* E.toUint8Array([1,{data:2,count:3},3])
* =new Uint8Array([1, 2, 2, 2, 3])
* E.toUint8Array("Hello")
* =new Uint8Array([72, 101, 108, 108, 111])
* E.toUint8Array(["hi",{callback:function() { return [1,2,3] }}])
* =new Uint8Array([104, 105, 1, 2, 3])
* ```
*
* @param {any} args - The arguments to convert to a Uint8Array
* @returns {any} A Uint8Array
* @url http://www.espruino.com/Reference#l_E_toUint8Array
*/
static toUint8Array(...args: Uint8ArrayResolvable[]): Uint8Array;
/**
* This performs the same basic function as `JSON.stringify`, however
* `JSON.stringify` adds extra characters to conform to the JSON spec which aren't
* required if outputting JS.
* `E.toJS` will also stringify JS functions, whereas `JSON.stringify` ignores
* them.
* For example:
* * `JSON.stringify({a:1,b:2}) == '{"a":1,"b":2}'`
* * `E.toJS({a:1,b:2}) == '{a:1,b:2}'`
* **Note:** Strings generated with `E.toJS` can't be reliably parsed by
* `JSON.parse` - however they are valid JS so will work with `eval` (but this has
* security implications if you don't trust the source of the string).
* On the desktop [JSON5 parsers](https://github.com/json5/json5) will parse the
* strings produced by `E.toJS` without trouble.
*
* @param {any} arg - The JS variable to convert to a string
* @returns {any} A String
* @url http://www.espruino.com/Reference#l_E_toJS
*/
static toJS(arg: any): string;
/**
* This creates and returns a special type of string, which actually references a
* specific memory address. It can be used in order to use sections of Flash memory
* directly in Espruino (for example to execute code straight from flash memory
* with `eval(E.memoryArea( ... ))`)
* **Note:** This is only tested on STM32-based platforms (Espruino Original and
* Espruino Pico) at the moment.
*
* @param {number} addr - The address of the memory area
* @param {number} len - The length (in bytes) of the memory area
* @returns {any} A String
* @url http://www.espruino.com/Reference#l_E_memoryArea
*/
static memoryArea(addr: number, len: number): string;
/**
* This writes JavaScript code into Espruino's flash memory, to be executed on
* startup. It differs from `save()` in that `save()` saves the whole state of the
* interpreter, whereas this just saves JS code that is executed at boot.
* Code will be executed before `onInit()` and `E.on('init', ...)`.
* If `alwaysExec` is `true`, the code will be executed even after a call to
* `reset()`. This is useful if you're making something that you want to program,
* but you want some code that is always built in (for instance setting up a
* display or keyboard).
* To remove boot code that has been saved previously, use `E.setBootCode("")`
* **Note:** this removes any code that was previously saved with `save()`
*
* @param {any} code - The code to execute (as a string)
* @param {boolean} alwaysExec - Whether to always execute the code (even after a reset)
* @url http://www.espruino.com/Reference#l_E_setBootCode
*/
static setBootCode(code: string, alwaysExec?: boolean): void;
/**
* This sets the clock frequency of Espruino's processor. It will return `0` if it
* is unimplemented or the clock speed cannot be changed.
* **Note:** On pretty much all boards, UART, SPI, I2C, PWM, etc will change
* frequency and will need setting up again in order to work.
* ### STM32F4
* Options is of the form `{ M: int, N: int, P: int, Q: int }` - see the 'Clocks'
* section of the microcontroller's reference manual for what these mean.
* * System clock = 8Mhz * N / ( M * P )
* * USB clock (should be 48Mhz) = 8Mhz * N / ( M * Q )
* Optional arguments are:
* * `latency` - flash latency from 0..15
* * `PCLK1` - Peripheral clock 1 divisor (default: 2)
* * `PCLK2` - Peripheral clock 2 divisor (default: 4)
* The Pico's default is `{M:8, N:336, P:4, Q:7, PCLK1:2, PCLK2:4}`, use `{M:8,
* N:336, P:8, Q:7, PCLK:1, PCLK2:2}` to halve the system clock speed while keeping
* the peripherals running at the same speed (omitting PCLK1/2 will lead to the
* peripherals changing speed too).
* On STM32F4 boards (e.g. Espruino Pico), the USB clock needs to be kept at 48Mhz
* or USB will fail to work. You'll also experience USB instability if the
* processor clock falls much below 48Mhz.
* ### ESP8266
* Just specify an integer value, either 80 or 160 (for 80 or 160Mhz)
*
* @param {any} options - Platform-specific options for setting clock speed
* @returns {number} The actual frequency the clock has been set to
* @url http://www.espruino.com/Reference#l_E_setClock
*/
static setClock(options: number | { M: number, N: number, P: number, Q: number, latency?: number, PCLK?: number, PCLK2?: number }): number;
/**
* Changes the device that the JS console (otherwise known as the REPL) is attached
* to. If the console is on a device, that device can be used for programming
* Espruino.
* Rather than calling `Serial.setConsole` you can call
* `E.setConsole("DeviceName")`.
* This is particularly useful if you just want to remove the console.
* `E.setConsole(null)` will make the console completely inaccessible.
* `device` may be `"Serial1"`,`"USB"`,`"Bluetooth"`,`"Telnet"`,`"Terminal"`, any
* other *hardware* `Serial` device, or `null` to disable the console completely.
* `options` is of the form:
* ```
* {
* force : bool // default false, force the console onto this device so it does not move
* // if false, changes in connection state (e.g. USB/Bluetooth) can move
* // the console automatically.
* }
* ```
*
* @param {any} device
* @param {any} [options] - [optional] object of options, see below
* @url http://www.espruino.com/Reference#l_E_setConsole
*/
static setConsole(device: "Serial1" | "USB" | "Bluetooth" | "Telnet" | "Terminal" | Serial | null, options?: { force?: boolean }): void;
/**
* Returns the current console device - see `E.setConsole` for more information.
* @returns {any} The current console device as a string, or just `null` if the console is null
* @url http://www.espruino.com/Reference#l_E_getConsole
*/
static getConsole(): string | null
/**
* Reverse the 8 bits in a byte, swapping MSB and LSB.
* For example, `E.reverseByte(0b10010000) == 0b00001001`.
* Note that you can reverse all the bytes in an array with: `arr =
* arr.map(E.reverseByte)`
*
* @param {number} x - A byte value to reverse the bits of
* @returns {number} The byte with reversed bits
* @url http://www.espruino.com/Reference#l_E_reverseByte
*/
static reverseByte(x: number): number;
/**
* Output the current list of Utility Timer Tasks - for debugging only
* @url http://www.espruino.com/Reference#l_E_dumpTimers
*/
static dumpTimers(): void;
/**
* Dump any locked variables that aren't referenced from `global` - for debugging
* memory leaks only.
* @url http://www.espruino.com/Reference#l_E_dumpLockedVars
*/
static dumpLockedVars(): void;
/**
* Dump any locked variables that aren't referenced from `global` - for debugging
* memory leaks only.
* @url http://www.espruino.com/Reference#l_E_dumpFreeList
*/
static dumpFreeList(): void;
/**
* Show fragmentation.
* * ` ` is free space
* * `#` is a normal variable
* * `L` is a locked variable (address used, cannot be moved)
* * `=` represents data in a Flat String (must be contiguous)
* @url http://www.espruino.com/Reference#l_E_dumpFragmentation
*/
static dumpFragmentation(): void;
/**
* Dumps a comma-separated list of all allocated variables along with the variables
* they link to. Can be used to visualise where memory is used.
* @url http://www.espruino.com/Reference#l_E_dumpVariables
*/
static dumpVariables(): void;
/**
* BETA: defragment memory!
* @url http://www.espruino.com/Reference#l_E_defrag
*/
static defrag(): void;
/**
* Return the number of variable blocks used by the supplied variable. This is
* useful if you're running out of memory and you want to be able to see what is
* taking up most of the available space.
* If `depth>0` and the variable can be recursed into, an array listing all
* property names (including internal Espruino names) and their sizes is returned.
* If `depth>1` there is also a `more` field that inspects the objects' children's
* children.
* For instance `E.getSizeOf(function(a,b) { })` returns `5`.
* But `E.getSizeOf(function(a,b) { }, 1)` returns:
* ```
* [
* {
* "name": "a",
* "size": 1 },
* {
* "name": "b",
* "size": 1 },
* {
* "name": "\xFFcod",
* "size": 2 }
* ]
* ```
* In this case setting depth to `2` will make no difference as there are no more
* children to traverse.
* See http://www.espruino.com/Internals for more information
*
* @param {any} v - A variable to get the size of
* @param {number} depth - The depth that detail should be provided for. If depth<=0 or undefined, a single integer will be returned
* @returns {any} Information about the variable size - see below
* @url http://www.espruino.com/Reference#l_E_getSizeOf
*/
static getSizeOf(v: any, depth?: 0): number;
static getSizeOf(v: any, depth: number): VariableSizeInformation;
/**
* Return the address in memory of the given variable. This can then be used with
* `peek` and `poke` functions. However, changing data in JS variables directly
* (flatAddress=false) will most likely result in a crash.
* This functions exists to allow embedded targets to set up peripherals such as
* DMA so that they write directly to JS variables.
* See http://www.espruino.com/Internals for more information
*
* @param {any} v - A variable to get the address of
* @param {boolean} flatAddress - (boolean) If `true` and a Flat String or Flat ArrayBuffer is supplied, return the address of the data inside it - otherwise 0. If `false` (the default) return the address of the JsVar itself.
* @returns {number} The address of the given variable
* @url http://www.espruino.com/Reference#l_E_getAddressOf
*/
static getAddressOf(v: any, flatAddress: boolean): number;
/**
* Take each element of the `from` array, look it up in `map` (or call
* `map(value,index)` if it is a function), and write it into the corresponding
* element in the `to` array.
* You can use an array to map:
* ```
* var a = new Uint8Array([1,2,3,1,2,3]);
* var lut = new Uint8Array([128,129,130,131]);
* E.mapInPlace(a, a, lut);
* // a = [129, 130, 131, 129, 130, 131]
* ```
* Or `undefined` to pass straight through, or a function to do a normal 'mapping':
* ```
* var a = new Uint8Array([0x12,0x34,0x56,0x78]);
* var b = new Uint8Array(8);
* E.mapInPlace(a, b, undefined); // straight through
* // b = [0x12,0x34,0x56,0x78,0,0,0,0]
* E.mapInPlace(a, b, (value,index)=>index); // write the index in the first 4 (because a.length==4)
* // b = [0,1,2,3,4,0,0,0]
* E.mapInPlace(a, b, undefined, 4); // 4 bits from 8 bit input -> 2x as many outputs, msb-first
* // b = [1, 2, 3, 4, 5, 6, 7, 8]
* E.mapInPlace(a, b, undefined, -4); // 4 bits from 8 bit input -> 2x as many outputs, lsb-first
* // b = [2, 1, 4, 3, 6, 5, 8, 7]
* E.mapInPlace(a, b, a=>a+2, 4);
* // b = [3, 4, 5, 6, 7, 8, 9, 10]
* var b = new Uint16Array(4);
* E.mapInPlace(a, b, undefined, 12); // 12 bits from 8 bit input, msb-first
* // b = [0x123, 0x456, 0x780, 0]
* E.mapInPlace(a, b, undefined, -12); // 12 bits from 8 bit input, lsb-first
* // b = [0x412, 0x563, 0x078, 0]
* ```
*
* @param {any} from - An ArrayBuffer to read elements from
* @param {any} to - An ArrayBuffer to write elements too
* @param {any} map - An array or `function(value,index)` to use to map one element to another, or `undefined` to provide no mapping
* @param {number} bits - If specified, the number of bits per element (MSB first) - otherwise use a 1:1 mapping. If negative, use LSB first.
* @url http://www.espruino.com/Reference#l_E_mapInPlace
*/
static mapInPlace(from: ArrayBuffer, to: ArrayBuffer, map?: number[] | ((value: number, index: number) => number) | undefined, bits?: number): void;
/**
* Search in an Object, Array, or Function
*
* @param {any} haystack - The Array/Object/Function to search
* @param {any} needle - The key to search for
* @param {boolean} returnKey - If true, return the key, else return the value itself
* @returns {any} The value in the Object matching 'needle', or if `returnKey==true` the key's name - or undefined
* @url http://www.espruino.com/Reference#l_E_lookupNoCase
*/
static lookupNoCase(haystack: any[] | object | Function, needle: string, returnKey?: false): any;
static lookupNoCase<T>(haystack: any[] | object | Function, needle: T, returnKey: true): T | undefined;
/**
* Get the current interpreter state in a text form such that it can be copied to a
* new device
* @returns {any} A String
* @url http://www.espruino.com/Reference#l_E_dumpStr
*/
static dumpStr(): string;
/**
* Set the seed for the random number generator used by `Math.random()`.
*
* @param {number} v - The 32 bit integer seed to use for the random number generator
* @url http://www.espruino.com/Reference#l_E_srand
*/
static srand(v: number): void;
/**
* Unlike 'Math.random()' which uses a pseudo-random number generator, this method
* reads from the internal voltage reference several times, XOR-ing and rotating to
* try and make a relatively random value from the noise in the signal.
* @returns {number} A random number
* @url http://www.espruino.com/Reference#l_E_hwRand
*/
static hwRand(): number;
/**
* Perform a standard 32 bit CRC (Cyclic redundancy check) on the supplied data
* (one byte at a time) and return the result as an unsigned integer.
*
* @param {any} data - Iterable data to perform CRC32 on (each element treated as a byte)
* @returns {any} The CRC of the supplied data
* @url http://www.espruino.com/Reference#l_E_CRC32
*/
static CRC32(data: any): any;
/**
* Convert hue, saturation and brightness to red, green and blue (packed into an
* integer if `asArray==false` or an array if `asArray==true`).
* This replaces `Graphics.setColorHSB` and `Graphics.setBgColorHSB`. On devices
* with 24 bit colour it can be used as: `Graphics.setColor(E.HSBtoRGB(h, s, b))`,
* or on devices with 26 bit colour use `Graphics.setColor(E.HSBtoRGB(h, s, b, 16))`
* You can quickly set RGB items in an Array or Typed Array using
* `array.set(E.HSBtoRGB(h, s, b, true), offset)`, which can be useful with arrays
* used with `require("neopixel").write`.
*
* @param {number} hue - The hue, as a value between 0 and 1
* @param {number} sat - The saturation, as a value between 0 and 1
* @param {number} bri - The brightness, as a value between 0 and 1
* @param {number} format - If `true` or `1`, return an array of [R,G,B] values betwen 0 and 255. If `16`, return a 16 bit number. `undefined`/`24` is the same as normal (returning a 24 bit number)
* @returns {any} A 24 bit number containing bytes representing red, green, and blue `0xBBGGRR`. Or if `asArray` is true, an array `[R,G,B]`
* @url http://www.espruino.com/Reference#l_E_HSBtoRGB
*/
static HSBtoRGB(hue: number, sat: number, bri: number, format?: false): number;
static HSBtoRGB(hue: number, sat: number, bri: number, format: 16): number;
static HSBtoRGB(hue: number, sat: number, bri: number, format: 24): number;
static HSBtoRGB(hue: number, sat: number, bri: number, format: true): [number, number, number];
/**
* Set a password on the console (REPL). When powered on, Espruino will then demand
* a password before the console can be used. If you want to lock the console
* immediately after this you can call `E.lockConsole()`
* To remove the password, call this function with no arguments.
* **Note:** There is no protection against multiple password attempts, so someone
* could conceivably try every password in a dictionary.
* **Note:** This password is stored in memory in plain text. If someone is able to
* execute arbitrary JavaScript code on the device (e.g., you use `eval` on input
* from unknown sources) or read the device's firmware then they may be able to
* obtain it.
*
* @param {any} password - The password - max 20 chars
* @url http://www.espruino.com/Reference#l_E_setPassword
*/
static setPassword(password: string): void;
/**
* If a password has been set with `E.setPassword()`, this will lock the console so
* the password needs to be entered to unlock it.
* @url http://www.espruino.com/Reference#l_E_lockConsole
*/
static lockConsole(): void;
/**
* Set the time zone to be used with `Date` objects.
* For example `E.setTimeZone(1)` will be GMT+0100
* Note that `E.setTimeZone()` will have no effect when daylight savings time rules
* have been set with `E.setDST()`. The timezone value will be stored, but never
* used so long as DST settings are in effect.
* Time can be set with `setTime`.
*
* @param {number} zone - The time zone in hours
* @url http://www.espruino.com/Reference#l_E_setTimeZone
*/
static setTimeZone(zone: number): void;
/**
* Set the daylight savings time parameters to be used with `Date` objects.
* The parameters are
* - dstOffset: The number of minutes daylight savings time adds to the clock
* (usually 60) - set to 0 to disable DST
* - timezone: The time zone, in minutes, when DST is not in effect - positive east
* of Greenwich
* - startDowNumber: The index of the day-of-week in the month when DST starts - 0
* for first, 1 for second, 2 for third, 3 for fourth and 4 for last
* - startDow: The day-of-week for the DST start calculation - 0 for Sunday, 6 for
* Saturday
* - startMonth: The number of the month that DST starts - 0 for January, 11 for
* December
* - startDayOffset: The number of days between the selected day-of-week and the
* actual day that DST starts - usually 0
* - startTimeOfDay: The number of minutes elapsed in the day before DST starts
* - endDowNumber: The index of the day-of-week in the month when DST ends - 0 for
* first, 1 for second, 2 for third, 3 for fourth and 4 for last
* - endDow: The day-of-week for the DST end calculation - 0 for Sunday, 6 for
* Saturday
* - endMonth: The number of the month that DST ends - 0 for January, 11 for
* December
* - endDayOffset: The number of days between the selected day-of-week and the
* actual day that DST ends - usually 0
* - endTimeOfDay: The number of minutes elapsed in the day before DST ends
* To determine what the `dowNumber, dow, month, dayOffset, timeOfDay` parameters
* should be, start with a sentence of the form "DST starts on the last Sunday of
* March (plus 0 days) at 03:00". Since it's the last Sunday, we have
* startDowNumber = 4, and since it's Sunday, we have startDow = 0. That it is
* March gives us startMonth = 2, and that the offset is zero days, we have
* startDayOffset = 0. The time that DST starts gives us startTimeOfDay = 3*60.
* "DST ends on the Friday before the second Sunday in November at 02:00" would
* give us endDowNumber=1, endDow=0, endMonth=10, endDayOffset=-2 and
* endTimeOfDay=120.
* Using Ukraine as an example, we have a time which is 2 hours ahead of GMT in
* winter (EET) and 3 hours in summer (EEST). DST starts at 03:00 EET on the last
* Sunday in March, and ends at 04:00 EEST on the last Sunday in October. So
* someone in Ukraine might call `E.setDST(60,120,4,0,2,0,180,4,0,9,0,240);`
* Note that when DST parameters are set (i.e. when `dstOffset` is not zero),
* `E.setTimeZone()` has no effect.
*
* @param {any} params - An array containing the settings for DST
* @url http://www.espruino.com/Reference#l_E_setDST
*/
static setDST(dstOffset: number, timezone: number, startDowNumber: number, startDow: number, startMonth: number, startDayOffset: number, startTimeOfDay: number, endDowNumber: number, endDow: number, endMonth: number, endDayOffset: number, endTimeOfDay: number): void
/**
* Create an object where every field accesses a specific 32 bit address in the
* microcontroller's memory. This is perfect for accessing on-chip peripherals.
* ```
* // for NRF52 based chips
* var GPIO = E.memoryMap(0x50000000,{OUT:0x504, OUTSET:0x508, OUTCLR:0x50C, IN:0x510, DIR:0x514, DIRSET:0x518, DIRCLR:0x51C});
* GPIO.DIRSET = 1; // set GPIO0 to output
* GPIO.OUT ^= 1; // toggle the output state of GPIO0
* ```
*
* @param {any} baseAddress - The base address (added to every address in `registers`)
* @param {any} registers - An object containing `{name:address}`
* @returns {any} An object where each field is memory-mapped to a register.
* @url http://www.espruino.com/Reference#l_E_memoryMap
*/
static memoryMap<T extends string>(baseAddress: number, registers: { [key in T]: number }): { [key in T]: number };
/**
* Provide assembly to Espruino.
* **This function is not part of Espruino**. Instead, it is detected by the
* Espruino IDE (or command-line tools) at upload time and is replaced with machine
* code and an `E.nativeCall` call.
* See [the documentation on the Assembler](http://www.espruino.com/Assembler) for
* more information.
*
* @param {any} callspec - The arguments this assembly takes - e.g. `void(int)`
* @param {any} assemblycode - One of more strings of assembler code
* @url http://www.espruino.com/Reference#l_E_asm
*/
static asm(callspec: string, ...assemblycode: string[]): any;
/**
* Provides the ability to write C code inside your JavaScript file.
* **This function is not part of Espruino**. Instead, it is detected by the
* Espruino IDE (or command-line tools) at upload time, is sent to our web service
* to be compiled, and is replaced with machine code and an `E.nativeCall` call.
* See [the documentation on Inline C](http://www.espruino.com/InlineC) for more
* information and examples.
*
* @param {any} code - A Templated string of C code
* @url http://www.espruino.com/Reference#l_E_compiledC
*/
static compiledC(code: string): any;
/**
* Forces a hard reboot of the microcontroller - as close as possible to if the
* reset pin had been toggled.
* **Note:** This is different to `reset()`, which performs a software reset of
* Espruino (resetting the interpreter and pin states, but not all the hardware)
* @url http://www.espruino.com/Reference#l_E_reboot
*/
static reboot(): void;
/**
* USB HID will only take effect next time you unplug and re-plug your Espruino. If
* you're disconnecting it from power you'll have to make sure you have `save()`d
* after calling this function.
*
* @param {any} opts - An object containing at least reportDescriptor, an array representing the report descriptor. Pass undefined to disable HID.
* @url http://www.espruino.com/Reference#l_E_setUSBHID
*/
static setUSBHID(opts?: { reportDescriptor: any[] }): void;
/**
*
* @param {any} data - An array of bytes to send as a USB HID packet
* @returns {boolean} 1 on success, 0 on failure
* @url http://www.espruino.com/Reference#l_E_sendUSBHID
*/
static sendUSBHID(data: string | ArrayBuffer | number[]): boolean;
/**
* In devices that come with batteries, this function returns the battery charge
* percentage as an integer between 0 and 100.
* **Note:** this is an estimation only, based on battery voltage. The temperature
* of the battery (as well as the load being drawn from it at the time
* `E.getBattery` is called) will affect the readings.
* @returns {number} A percentage between 0 and 100
* @url http://www.espruino.com/Reference#l_E_getBattery
*/
static getBattery(): number;
/**
* Sets the RTC's prescaler's maximum value. This is the counter that counts up on
* each oscillation of the low speed oscillator. When the prescaler counts to the
* value supplied, one second is deemed to have passed.
* By default this is set to the oscillator's average speed as specified in the
* datasheet, and usually that is fine. However on early [Espruino Pico](/Pico)
* boards the STM32F4's internal oscillator could vary by as much as 15% from the
* value in the datasheet. In that case you may want to alter this value to reflect
* the true RTC speed for more accurate timekeeping.
* To change the RTC's prescaler value to a computed value based on comparing
* against the high speed oscillator, just run the following command, making sure
* it's done a few seconds after the board starts up:
* ```
* E.setRTCPrescaler(E.getRTCPrescaler(true));
* ```
* When changing the RTC prescaler, the RTC 'follower' counters are reset and it
* can take a second or two before readings from getTime are stable again.
* To test, you can connect an input pin to a known frequency square wave and then
* use `setWatch`. If you don't have a frequency source handy, you can check
* against the high speed oscillator:
* ```
* // connect pin B3 to B4
* analogWrite(B3, 0.5, {freq:0.5});
* setWatch(function(e) {
* print(e.time - e.lastTime);
* }, B4, {repeat:true});
* ```
* **Note:** This is only used on official Espruino boards containing an STM32
* microcontroller. Other boards (even those using an STM32) don't use the RTC and
* so this has no effect.
*
* @param {number} prescaler - The amount of counts for one second of the RTC - this is a 15 bit integer value (0..32767)
* @url http://www.espruino.com/Reference#l_E_setRTCPrescaler
*/
static setRTCPrescaler(prescaler: number): void;
/**
* Gets the RTC's current prescaler value if `calibrate` is undefined or false.
* If `calibrate` is true, the low speed oscillator's speed is calibrated against
* the high speed oscillator (usually +/- 20 ppm) and a suggested value to be fed
* into `E.setRTCPrescaler(...)` is returned.
* See `E.setRTCPrescaler` for more information.
*
* @param {boolean} calibrate - If `false`, the current value. If `true`, the calculated 'correct' value
* @returns {number} The RTC prescaler's current value
* @url http://www.espruino.com/Reference#l_E_getRTCPrescaler
*/
static getRTCPrescaler(calibrate: boolean): number;
/**
* Decode a UTF8 string.
* * Any decoded character less than 256 gets passed straight through
* * Otherwise if `lookup` is an array and an item with that char code exists in `lookup` then that is used
* * Otherwise if `lookup` is an object and an item with that char code (as lowercase hex) exists in `lookup` then that is used
* * Otherwise `replaceFn(charCode)` is called and the result used if `replaceFn` is a function
* * If `replaceFn` is a string, that is used
* * Or finally if nothing else matches, the character is ignored
* For instance:
* ```
* let unicodeRemap = {
* 0x20ac:"\u0080", // Euro symbol
* 0x2026:"\u0085", // Ellipsis
* };
* E.decodeUTF8("UTF-8 Euro: \u00e2\u0082\u00ac", unicodeRemap, '[?]') == "UTF-8 Euro: \u0080"
* ```
*
* @param {any} str - A string of UTF8-encoded data
* @param {any} lookup - An array containing a mapping of character code -> replacement string
* @param {any} replaceFn - If not in lookup, `replaceFn(charCode)` is called and the result used if it's a function, *or* if it's a string, the string value is used
* @returns {any} A string containing all UTF8 sequences flattened to 8 bits
* @url http://www.espruino.com/Reference#l_E_decodeUTF8
*/
static decodeUTF8(str: string, lookup: string[], replaceFn: string | ((charCode: number) => string)): string;
}
/**
* This class provides a software-defined OneWire master. It is designed to be
* similar to Arduino's OneWire library.
* @url http://www.espruino.com/Reference#OneWire
*/
declare class OneWire {
/**
* Create a software OneWire implementation on the given pin
* @constructor
*
* @param {Pin} pin - The pin to implement OneWire on
* @returns {any} A OneWire object
* @url http://www.espruino.com/Reference#l_OneWire_OneWire
*/
static new(pin: Pin): any;
/**
* Perform a reset cycle
* @returns {boolean} True is a device was present (it held the bus low)
* @url http://www.espruino.com/Reference#l_OneWire_reset
*/
reset(): boolean;
/**
* Select a ROM - always performs a reset first
*
* @param {any} rom - The device to select (get this using `OneWire.search()`)
* @url http://www.espruino.com/Reference#l_OneWire_select
*/
select(rom: any): void;
/**
* Skip a ROM
* @url http://www.espruino.com/Reference#l_OneWire_skip
*/
skip(): void;
/**
* Write one or more bytes
*
* @param {any} data - A byte (or array of bytes) to write
* @param {boolean} power - Whether to leave power on after write (default is false)
* @url http://www.espruino.com/Reference#l_OneWire_write
*/
write(data: any, power: boolean): void;
/**
* Read a byte
*
* @param {any} [count] - [optional] The amount of bytes to read
* @returns {any} The byte that was read, or a Uint8Array if count was specified and >=0
* @url http://www.espruino.com/Reference#l_OneWire_read
*/
read(count?: any): any;
/**
* Search for devices
*
* @param {number} command - (Optional) command byte. If not specified (or zero), this defaults to 0xF0. This can could be set to 0xEC to perform a DS18B20 'Alarm Search Command'
* @returns {any} An array of devices that were found
* @url http://www.espruino.com/Reference#l_OneWire_search
*/
search(command: number): any;
}
interface ObjectConstructor {
/**
* Return all enumerable keys of the given object
*
* @param {any} object - The object to return keys for
* @returns {any} An array of strings - one for each key on the given object
* @url http://www.espruino.com/Reference#l_Object_keys
*/
keys(object: any): Array<any>;
/**
* Returns an array of all properties (enumerable or not) found directly on a given
* object.
*
* @param {any} object - The Object to return a list of property names for
* @returns {any} An array of the Object's own properties
* @url http://www.espruino.com/Reference#l_Object_getOwnPropertyNames
*/
getOwnPropertyNames(object: any): Array<any>;
/**
* Return all enumerable values of the given object
*
* @param {any} object - The object to return values for
* @returns {any} An array of values - one for each key on the given object
* @url http://www.espruino.com/Reference#l_Object_values
*/
values(object: any): Array<any>;
/**
* Return all enumerable keys and values of the given object
*
* @param {any} object - The object to return values for
* @returns {any} An array of `[key,value]` pairs - one for each key on the given object
* @url http://www.espruino.com/Reference#l_Object_entries
*/
entries(object: any): Array<[string, any]>;
/**
* Transforms an array of key-value pairs into an object
*
* @param {any} entries - An array of `[key,value]` pairs to be used to create an object
* @returns {any} An object containing all the specified pairs
* @url http://www.espruino.com/Reference#l_Object_fromEntries
*/
fromEntries(entries: any): any;
/**
* Creates a new object with the specified prototype object and properties.
* properties are currently unsupported.
*
* @param {any} proto - A prototype object
* @param {any} propertiesObject - An object containing properties. NOT IMPLEMENTED
* @returns {any} A new object
* @url http://www.espruino.com/Reference#l_Object_create
*/
create(proto: any, propertiesObject: any): any;
/**
* Get information on the given property in the object, or undefined
*
* @param {any} obj - The object
* @param {any} name - The name of the property
* @returns {any} An object with a description of the property. The values of writable/enumerable/configurable may not be entirely correct due to Espruino's implementation.
* @url http://www.espruino.com/Reference#l_Object_getOwnPropertyDescriptor
*/
getOwnPropertyDescriptor(obj: any, name: any): any;
/**
* Get information on all properties in the object (from `Object.getOwnPropertyDescriptor`), or just `{}` if no properties
*
* @param {any} obj - The object
* @returns {any} An object containing all the property descriptors of an object
* @url http://www.espruino.com/Reference#l_Object_getOwnPropertyDescriptors
*/
getOwnPropertyDescriptors(obj: any): any;
/**
* Add a new property to the Object. 'Desc' is an object with the following fields:
* * `configurable` (bool = false) - can this property be changed/deleted (not
* implemented)
* * `enumerable` (bool = false) - can this property be enumerated (not
* implemented)
* * `value` (anything) - the value of this property
* * `writable` (bool = false) - can the value be changed with the assignment
* operator?
* * `get` (function) - the getter function, or undefined if no getter (only
* supported on some platforms)
* * `set` (function) - the setter function, or undefined if no setter (only
* supported on some platforms)
* **Note:** `configurable`, `enumerable` and `writable` are not implemented and
* will be ignored.
*
* @param {any} obj - An object
* @param {any} name - The name of the property
* @param {any} desc - The property descriptor
* @returns {any} The object, obj.
* @url http://www.espruino.com/Reference#l_Object_defineProperty
*/
defineProperty(obj: any, name: any, desc: any): any;
/**
* Adds new properties to the Object. See `Object.defineProperty` for more
* information
*
* @param {any} obj - An object
* @param {any} props - An object whose fields represent property names, and whose values are property descriptors.
* @returns {any} The object, obj.
* @url http://www.espruino.com/Reference#l_Object_defineProperties
*/
defineProperties(obj: any, props: any): any;
/**
* Get the prototype of the given object - this is like writing `object.__proto__`
* but is the 'proper' ES6 way of doing it
*
* @param {any} object - An object
* @returns {any} The prototype
* @url http://www.espruino.com/Reference#l_Object_getPrototypeOf
*/
getPrototypeOf(object: any): any;
/**
* Set the prototype of the given object - this is like writing `object.__proto__ =
* prototype` but is the 'proper' ES6 way of doing it
*
* @param {any} object - An object
* @param {any} prototype - The prototype to set on the object
* @returns {any} The object passed in
* @url http://www.espruino.com/Reference#l_Object_setPrototypeOf
*/
setPrototypeOf(object: any, prototype: any): any;
/**
* Appends all keys and values in any subsequent objects to the first object
* **Note:** Unlike the standard ES6 `Object.assign`, this will throw an exception
* if given raw strings, bools or numbers rather than objects.
*
* @param {any} args - The target object, then any items objects to use as sources of keys
* @returns {any} The target object
* @url http://www.espruino.com/Reference#l_Object_assign
*/
assign(...args: any[]): any;
/**
* Creates an Object from the supplied argument
* @constructor
*
* @param {any} value - A single value to be converted to an object
* @returns {any} An Object
* @url http://www.espruino.com/Reference#l_Object_Object
*/
new(value: any): any;
}
interface Object {
/**
* Find the length of the object
* @returns {any} The length of the object
* @url http://www.espruino.com/Reference#l_Object_length
*/
length: any;
/**
* Returns the primitive value of this object.
* @returns {any} The primitive value of this object
* @url http://www.espruino.com/Reference#l_Object_valueOf
*/
valueOf(): any;
/**
* Convert the Object to a string
*
* @param {any} [radix] - [optional] If the object is an integer, the radix (between 2 and 36) to use. NOTE: Setting a radix does not work on floating point numbers.
* @returns {any} A String representing the object
* @url http://www.espruino.com/Reference#l_Object_toString
*/
toString(radix?: any): string;
/**
* Copy this object completely
* @returns {any} A copy of this Object
* @url http://www.espruino.com/Reference#l_Object_clone
*/
clone(): any;
/**
* Return true if the object (not its prototype) has the given property.
* NOTE: This currently returns false-positives for built-in functions in
* prototypes
*
* @param {any} name - The name of the property to search for
* @returns {boolean} True if it exists, false if it doesn't
* @url http://www.espruino.com/Reference#l_Object_hasOwnProperty
*/
hasOwnProperty(name: any): boolean;
/**
* Register an event listener for this object, for instance `Serial1.on('data',
* function(d) {...})`.
* This is the same as Node.js's [EventEmitter](https://nodejs.org/api/events.html)
* but on Espruino the functionality is built into every object:
* * `Object.on`
* * `Object.emit`
* * `Object.removeListener`
* * `Object.removeAllListeners`
* ```
* var o = {}; // o can be any object...
* // call an arrow function when the 'answer' event is received
* o.on('answer', x => console.log(x));
* // call a named function when the 'answer' event is received
* function printAnswer(d) {
* console.log("The answer is", d);
* }
* o.on('answer', printAnswer);
* // emit the 'answer' event - functions added with 'on' will be executed
* o.emit('answer', 42);
* // prints: 42
* // prints: The answer is 42
* // If you have a named function, it can be removed by name
* o.removeListener('answer', printAnswer);
* // Now 'printAnswer' is removed
* o.emit('answer', 43);
* // prints: 43
* // Or you can remove all listeners for 'answer'
* o.removeAllListeners('answer')
* // Now nothing happens
* o.emit('answer', 44);
* // nothing printed
* ```
*
* @param {any} event - The name of the event, for instance 'data'
* @param {any} listener - The listener to call when this event is received
* @url http://www.espruino.com/Reference#l_Object_on
*/
on(event: any, listener: any): void;
/**
* Call any event listeners that were added to this object with `Object.on`, for
* instance `obj.emit('data', 'Foo')`.
* For more information see `Object.on`
*
* @param {any} event - The name of the event, for instance 'data'
* @param {any} args - Optional arguments
* @url http://www.espruino.com/Reference#l_Object_emit
*/
emit(event: any, ...args: any[]): void;
/**
* Removes the specified event listener.
* ```
* function foo(d) {
* console.log(d);
* }
* Serial1.on("data", foo);
* Serial1.removeListener("data", foo);
* ```
* For more information see `Object.on`
*
* @param {any} event - The name of the event, for instance 'data'
* @param {any} listener - The listener to remove
* @url http://www.espruino.com/Reference#l_Object_removeListener
*/
removeListener(event: any, listener: any): void;
/**
* Removes all listeners (if `event===undefined`), or those of the specified event.
* ```
* Serial1.on("data", function(data) { ... });
* Serial1.removeAllListeners("data");
* // or
* Serial1.removeAllListeners(); // removes all listeners for all event types
* ```
* For more information see `Object.on`
*
* @param {any} event - The name of the event, for instance `'data'`. If not specified *all* listeners are removed.
* @url http://www.espruino.com/Reference#l_Object_removeAllListeners
*/
removeAllListeners(event: any): void;
}
/**
* This is the built-in class for Objects
* @url http://www.espruino.com/Reference#Object
*/
declare const Object: ObjectConstructor
interface FunctionConstructor {
/**
* Creates a function
* @constructor
*
* @param {any} args - Zero or more arguments (as strings), followed by a string representing the code to run
* @returns {any} A Number object
* @url http://www.espruino.com/Reference#l_Function_Function
*/
new(...args: any[]): any;
}
interface Function {
/**
* This replaces the function with the one in the argument - while keeping the old
* function's scope. This allows inner functions to be edited, and is used when
* edit() is called on an inner function.
*
* @param {any} newFunc - The new function to replace this function with
* @url http://www.espruino.com/Reference#l_Function_replaceWith
*/
replaceWith(newFunc: any): void;
/**
* This executes the function with the supplied 'this' argument and parameters
*
* @param {any} thisArg - The value to use as the 'this' argument when executing the function
* @param {any} params - Optional Parameters
* @returns {any} The return value of executing this function
* @url http://www.espruino.com/Reference#l_Function_call
*/
call(thisArg: any, ...params: any[]): any;
/**
* This executes the function with the supplied 'this' argument and parameters
*
* @param {any} thisArg - The value to use as the 'this' argument when executing the function
* @param {any} args - Optional Array of Arguments
* @returns {any} The return value of executing this function
* @url http://www.espruino.com/Reference#l_Function_apply
*/
apply(thisArg: any, args: ArrayLike<any>): any;
/**
* This executes the function with the supplied 'this' argument and parameters
*
* @param {any} thisArg - The value to use as the 'this' argument when executing the function
* @param {any} params - Optional Default parameters that are prepended to the call
* @returns {any} The 'bound' function
* @url http://www.espruino.com/Reference#l_Function_bind
*/
bind(thisArg: any, ...params: any[]): any;
}
/**
* This is the built-in class for Functions
* @url http://www.espruino.com/Reference#Function
*/
declare const Function: FunctionConstructor
interface ArrayConstructor {
/**
* Returns true if the provided object is an array
*
* @param {any} var - The variable to be tested
* @returns {boolean} True if var is an array, false if not.
* @url http://www.espruino.com/Reference#l_Array_isArray
*/
isArray(arg: any): arg is any[];
/**
* Create an Array. Either give it one integer argument (>=0) which is the length
* of the array, or any number of arguments
* @constructor
*
* @param {any} args - The length of the array OR any number of items to add to the array
* @returns {any} An Array
* @url http://www.espruino.com/Reference#l_Array_Array
*/
new(arrayLength?: number): any[];
new<T>(arrayLength: number): T[];
new<T>(...items: T[]): T[];
(arrayLength?: number): any[];
<T>(arrayLength: number): T[];
<T>(...items: T[]): T[];
}
interface Array<T> {
/**
* Convert the Array to a string
*
* @param {any} radix - unused
* @returns {any} A String representing the array
* @url http://www.espruino.com/Reference#l_Array_toString
*/
toString(): string;
/**
* Find the length of the array
* @returns {any} The length of the array
* @url http://www.espruino.com/Reference#l_Array_length
*/
length: number;
/**
* Return the index of the value in the array, or -1
*
* @param {any} value - The value to check for
* @param {number} [startIndex] - [optional] the index to search from, or 0 if not specified
* @returns {any} the index of the value in the array, or -1
* @url http://www.espruino.com/Reference#l_Array_indexOf
*/
indexOf(value: T, startIndex?: number): number;
/**
* Return `true` if the array includes the value, `false` otherwise
*
* @param {any} value - The value to check for
* @param {number} [startIndex] - [optional] the index to search from, or 0 if not specified
* @returns {boolean} `true` if the array includes the value, `false` otherwise
* @url http://www.espruino.com/Reference#l_Array_includes
*/
includes(value: T, startIndex?: number): boolean;
/**
* Join all elements of this array together into one string, using 'separator'
* between them. e.g. ```[1,2,3].join(' ')=='1 2 3'```
*
* @param {any} separator - The separator
* @returns {any} A String representing the Joined array
* @url http://www.espruino.com/Reference#l_Array_join
*/
join(separator?: string): string;
/**
* Push a new value onto the end of this array'
* This is the opposite of `[1,2,3].unshift(0)`, which adds one or more elements to
* the beginning of the array.
*
* @param {any} arguments - One or more arguments to add
* @returns {number} The new size of the array
* @url http://www.espruino.com/Reference#l_Array_push
*/
push(...arguments: T[]): number;
/**
* Remove and return the value on the end of this array.
* This is the opposite of `[1,2,3].shift()`, which removes an element from the
* beginning of the array.
* @returns {any} The value that is popped off
* @url http://www.espruino.com/Reference#l_Array_pop
*/
pop(): T | undefined;
/**
* Return an array which is made from the following: ```A.map(function) =
* [function(A[0]), function(A[1]), ...]```
*
* @param {any} function - Function used to map one item to another
* @param {any} [thisArg] - [optional] If specified, the function is called with 'this' set to thisArg
* @returns {any} An array containing the results
* @url http://www.espruino.com/Reference#l_Array_map
*/
map<U>(callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any): U[];
/**
* Executes a provided function once per array element.
*
* @param {any} function - Function to be executed
* @param {any} [thisArg] - [optional] If specified, the function is called with 'this' set to thisArg
* @url http://www.espruino.com/Reference#l_Array_forEach
*/
forEach(callbackfn: (value: T, index: number, array: T[]) => void, thisArg?: any): void;
/**
* Return an array which contains only those elements for which the callback
* function returns 'true'
*
* @param {any} function - Function to be executed
* @param {any} [thisArg] - [optional] If specified, the function is called with 'this' set to thisArg
* @returns {any} An array containing the results
* @url http://www.espruino.com/Reference#l_Array_filter
*/
filter<S extends T>(predicate: (value: T, index: number, array: T[]) => value is S, thisArg?: any): S[];
filter(predicate: (value: T, index: number, array: T[]) => unknown, thisArg?: any): T[];
/**
* Return the array element where `function` returns `true`, or `undefined` if it
* doesn't returns `true` for any element.
* ```
* ["Hello","There","World"].find(a=>a[0]=="T")
* // returns "There"
* ```
*
* @param {any} function - Function to be executed
* @returns {any} The array element where `function` returns `true`, or `undefined`
* @url http://www.espruino.com/Reference#l_Array_find
*/
find<S extends T>(predicate: (this: void, value: T, index: number, obj: T[]) => value is S): S | undefined;
find(predicate: (value: T, index: number, obj: T[]) => unknown): T | undefined;
/**
* Return the array element's index where `function` returns `true`, or `-1` if it
* doesn't returns `true` for any element.
* ```
* ["Hello","There","World"].findIndex(a=>a[0]=="T")
* // returns 1
* ```
*
* @param {any} function - Function to be executed
* @returns {any} The array element's index where `function` returns `true`, or `-1`
* @url http://www.espruino.com/Reference#l_Array_findIndex
*/
findIndex(predicate: (value: T, index: number, obj: T[]) => unknown): number;
/**
* Return 'true' if the callback returns 'true' for any of the elements in the
* array
*
* @param {any} function - Function to be executed
* @param {any} [thisArg] - [optional] If specified, the function is called with 'this' set to thisArg
* @returns {any} A boolean containing the result
* @url http://www.espruino.com/Reference#l_Array_some
*/
some(predicate: (value: T, index: number, array: T[]) => unknown, thisArg?: any): boolean;
/**
* Return 'true' if the callback returns 'true' for every element in the array
*
* @param {any} function - Function to be executed
* @param {any} [thisArg] - [optional] If specified, the function is called with 'this' set to thisArg
* @returns {any} A boolean containing the result
* @url http://www.espruino.com/Reference#l_Array_every
*/
every(predicate: (value: T, index: number, array: T[]) => unknown, thisArg?: any): boolean;
/**
* Execute `previousValue=initialValue` and then `previousValue =
* callback(previousValue, currentValue, index, array)` for each element in the
* array, and finally return previousValue.
*
* @param {any} callback - Function used to reduce the array
* @param {any} initialValue - if specified, the initial value to pass to the function
* @returns {any} The value returned by the last function called
* @url http://www.espruino.com/Reference#l_Array_reduce
*/
reduce(callback: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T, initialValue?: T): T;
/**
* Both remove and add items to an array
*
* @param {number} index - Index at which to start changing the array. If negative, will begin that many elements from the end
* @param {any} howMany - An integer indicating the number of old array elements to remove. If howMany is 0, no elements are removed.
* @param {any} elements - One or more items to add to the array
* @returns {any} An array containing the removed elements. If only one element is removed, an array of one element is returned.
* @url http://www.espruino.com/Reference#l_Array_splice
*/
splice(index: number, howMany?: number, ...elements: T[]): T[];
/**
* Remove and return the first element of the array.
* This is the opposite of `[1,2,3].pop()`, which takes an element off the end.
*
* @returns {any} The element that was removed
* @url http://www.espruino.com/Reference#l_Array_shift
*/
shift(): T | undefined;
/**
* Add one or more items to the start of the array, and return its new length.
* This is the opposite of `[1,2,3].push(4)`, which puts one or more elements on
* the end.
*
* @param {any} elements - One or more items to add to the beginning of the array
* @returns {number} The new array length
* @url http://www.espruino.com/Reference#l_Array_unshift
*/
unshift(...elements: T[]): number;
/**
* Return a copy of a portion of this array (in a new array)
*
* @param {number} start - Start index
* @param {any} [end] - [optional] End index
* @returns {any} A new array
* @url http://www.espruino.com/Reference#l_Array_slice
*/
slice(start?: number, end?: number): T[];
/**
* Do an in-place quicksort of the array
*
* @param {any} var - A function to use to compare array elements (or undefined)
* @returns {any} This array object
* @url http://www.espruino.com/Reference#l_Array_sort
*/
sort(compareFn?: (a: T, b: T) => number): T[];
/**
* Create a new array, containing the elements from this one and any arguments, if
* any argument is an array then those elements will be added.
*
* @param {any} args - Any items to add to the array
* @returns {any} An Array
* @url http://www.espruino.com/Reference#l_Array_concat
*/
concat(...args: (T | T[])[]): T[];
/**
* Fill this array with the given value, for every index `>= start` and `< end`
*
* @param {any} value - The value to fill the array with
* @param {number} start - Optional. The index to start from (or 0). If start is negative, it is treated as length+start where length is the length of the array
* @param {any} end - Optional. The index to end at (or the array length). If end is negative, it is treated as length+end.
* @returns {any} This array
* @url http://www.espruino.com/Reference#l_Array_fill
*/
fill(value: T, start: number, end?: number): T[];
/**
* Reverse all elements in this array (in place)
* @returns {any} The array, but reversed.
* @url http://www.espruino.com/Reference#l_Array_reverse
*/
reverse(): T[];
[index: number]: T
}
/**
* This is the built-in JavaScript class for arrays.
* Arrays can be defined with ```[]```, ```new Array()```, or ```new
* Array(length)```
* @url http://www.espruino.com/Reference#Array
*/
declare const Array: ArrayConstructor
interface JSONConstructor {
/**
* Convert the given object into a JSON string which can subsequently be parsed
* with JSON.parse or eval.
* **Note:** This differs from JavaScript's standard `JSON.stringify` in that:
* * The `replacer` argument is ignored
* * Typed arrays like `new Uint8Array(5)` will be dumped as if they were arrays,
* not as if they were objects (since it is more compact)
*
* @param {any} data - The data to be converted to a JSON string
* @param {any} replacer - This value is ignored
* @param {any} space - The number of spaces to use for padding, a string, or null/undefined for no whitespace
* @returns {any} A JSON string
* @url http://www.espruino.com/Reference#l_JSON_stringify
*/
stringify(data: any, replacer: any, space: any): any;
/**
* Parse the given JSON string into a JavaScript object
* NOTE: This implementation uses eval() internally, and as such it is unsafe as it
* can allow arbitrary JS commands to be executed.
*
* @param {any} string - A JSON string
* @returns {any} The JavaScript object created by parsing the data string
* @url http://www.espruino.com/Reference#l_JSON_parse
*/
parse(string: any): any;
}
interface JSON {
}
/**
* An Object that handles conversion to and from the JSON data interchange format
* @url http://www.espruino.com/Reference#JSON
*/
declare const JSON: JSONConstructor
/**
* This class allows use of the built-in SPI ports. Currently it is SPI master
* only.
* @url http://www.espruino.com/Reference#SPI
*/
declare class SPI {
/**
* Try and find an SPI hardware device that will work on this pin (e.g. `SPI1`)
* May return undefined if no device can be found.
*
* @param {Pin} pin - A pin to search with
* @returns {any} An object of type `SPI`, or `undefined` if one couldn't be found.
* @url http://www.espruino.com/Reference#l_SPI_find
*/
static find(pin: Pin): any;
/**
* Create a software SPI port. This has limited functionality (no baud rate), but
* it can work on any pins.
* Use `SPI.setup` to configure this port.
* @constructor
* @returns {any} A SPI object
* @url http://www.espruino.com/Reference#l_SPI_SPI
*/
static new(): any;
/**
* Set up this SPI port as an SPI Master.
* Options can contain the following (defaults are shown where relevant):
* ```
* {
* sck:pin,
* miso:pin,
* mosi:pin,
* baud:integer=100000, // ignored on software SPI
* mode:integer=0, // between 0 and 3
* order:string='msb' // can be 'msb' or 'lsb'
* bits:8 // only available for software SPI
* }
* ```
* If `sck`,`miso` and `mosi` are left out, they will automatically be chosen.
* However if one or more is specified then the unspecified pins will not be set
* up.
* You can find out which pins to use by looking at [your board's reference
* page](#boards) and searching for pins with the `SPI` marker. Some boards such as
* those based on `nRF52` chips can have SPI on any pins, so don't have specific
* markings.
* The SPI `mode` is between 0 and 3 - see
* http://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus#Clock_polarity_and_phase
* On STM32F1-based parts, you cannot mix AF and non-AF pins (SPI pins are usually
* grouped on the chip - and you can't mix pins from two groups). Espruino will not
* warn you about this.
*
* @param {any} options - An Object containing extra information on initialising the SPI port
* @url http://www.espruino.com/Reference#l_SPI_setup
*/
setup(options: any): void;
/**
* Send data down SPI, and return the result. Sending an integer will return an
* integer, a String will return a String, and anything else will return a
* Uint8Array.
* Sending multiple bytes in one call to send is preferable as they can then be
* transmitted end to end. Using multiple calls to send() will result in
* significantly slower transmission speeds.
* For maximum speeds, please pass either Strings or Typed Arrays as arguments.
* Note that you can even pass arrays of arrays, like `[1,[2,3,4],5]`
*
* @param {any} data - The data to send - either an Integer, Array, String, or Object of the form `{data: ..., count:#}`
* @param {Pin} nss_pin - An nSS pin - this will be lowered before SPI output and raised afterwards (optional). There will be a small delay between when this is lowered and when sending starts, and also between sending finishing and it being raised.
* @returns {any} The data that was returned
* @url http://www.espruino.com/Reference#l_SPI_send
*/
send(data: any, nss_pin: Pin): any;
/**
* Write a character or array of characters to SPI - without reading the result
* back.
* For maximum speeds, please pass either Strings or Typed Arrays as arguments.
*
* @param {any} data
* One or more items to write. May be ints, strings, arrays, or special objects (see `E.toUint8Array` for more info).
* If the last argument is a pin, it is taken to be the NSS pin
* @url http://www.espruino.com/Reference#l_SPI_write
*/
write(...data: any[]): void;
/**
* Send data down SPI, using 4 bits for each 'real' bit (MSB first). This can be
* useful for faking one-wire style protocols
* Sending multiple bytes in one call to send is preferable as they can then be
* transmitted end to end. Using multiple calls to send() will result in
* significantly slower transmission speeds.
*
* @param {any} data - The data to send - either an integer, array, or string
* @param {number} bit0 - The 4 bits to send for a 0 (MSB first)
* @param {number} bit1 - The 4 bits to send for a 1 (MSB first)
* @param {Pin} nss_pin - An nSS pin - this will be lowered before SPI output and raised afterwards (optional). There will be a small delay between when this is lowered and when sending starts, and also between sending finishing and it being raised.
* @url http://www.espruino.com/Reference#l_SPI_send4bit
*/
send4bit(data: any, bit0: number, bit1: number, nss_pin: Pin): void;
/**
* Send data down SPI, using 8 bits for each 'real' bit (MSB first). This can be
* useful for faking one-wire style protocols
* Sending multiple bytes in one call to send is preferable as they can then be
* transmitted end to end. Using multiple calls to send() will result in
* significantly slower transmission speeds.
*
* @param {any} data - The data to send - either an integer, array, or string
* @param {number} bit0 - The 8 bits to send for a 0 (MSB first)
* @param {number} bit1 - The 8 bits to send for a 1 (MSB first)
* @param {Pin} nss_pin - An nSS pin - this will be lowered before SPI output and raised afterwards (optional). There will be a small delay between when this is lowered and when sending starts, and also between sending finishing and it being raised
* @url http://www.espruino.com/Reference#l_SPI_send8bit
*/
send8bit(data: any, bit0: number, bit1: number, nss_pin: Pin): void;
}
/**
* This class allows use of the built-in I2C ports. Currently it allows I2C Master
* mode only.
* All addresses are in 7 bit format. If you have an 8 bit address then you need to
* shift it one bit to the right.
* @url http://www.espruino.com/Reference#I2C
*/
declare class I2C {
/**
* Try and find an I2C hardware device that will work on this pin (e.g. `I2C1`)
* May return undefined if no device can be found.
*
* @param {Pin} pin - A pin to search with
* @returns {any} An object of type `I2C`, or `undefined` if one couldn't be found.
* @url http://www.espruino.com/Reference#l_I2C_find
*/
static find(pin: Pin): any;
/**
* Create a software I2C port. This has limited functionality (no baud rate), but
* it can work on any pins.
* Use `I2C.setup` to configure this port.
* @constructor
* @returns {any} An I2C object
* @url http://www.espruino.com/Reference#l_I2C_I2C
*/
static new(): any;
/**
* Set up this I2C port
* If not specified in options, the default pins are used (usually the lowest
* numbered pins on the lowest port that supports this peripheral)
*
* @param {any} [options]
* [optional] A structure containing extra information on initialising the I2C port
* ```{scl:pin, sda:pin, bitrate:100000}```
* You can find out which pins to use by looking at [your board's reference page](#boards) and searching for pins with the `I2C` marker. Note that 400kHz is the maximum bitrate for most parts.
* @url http://www.espruino.com/Reference#l_I2C_setup
*/
setup(options?: any): void;
/**
* Transmit to the slave device with the given address. This is like Arduino's
* beginTransmission, write, and endTransmission rolled up into one.
*
* @param {any} address - The 7 bit address of the device to transmit to, or an object of the form `{address:12, stop:false}` to send this data without a STOP signal.
* @param {any} data - One or more items to write. May be ints, strings, arrays, or special objects (see `E.toUint8Array` for more info).
* @url http://www.espruino.com/Reference#l_I2C_writeTo
*/
writeTo(address: any, ...data: any[]): void;
/**
* Request bytes from the given slave device, and return them as a Uint8Array
* (packed array of bytes). This is like using Arduino Wire's requestFrom,
* available and read functions. Sends a STOP
*
* @param {any} address - The 7 bit address of the device to request bytes from, or an object of the form `{address:12, stop:false}` to send this data without a STOP signal.
* @param {number} quantity - The number of bytes to request
* @returns {any} The data that was returned - as a Uint8Array
* @url http://www.espruino.com/Reference#l_I2C_readFrom
*/
readFrom(address: any, quantity: number): Uint8Array;
}
interface PromiseConstructor {
/**
* Return a new promise that is resolved when all promises in the supplied array
* are resolved.
*
* @param {any} promises - An array of promises
* @returns {any} A new Promise
* @url http://www.espruino.com/Reference#l_Promise_all
*/
all(promises: Promise<any>[]): Promise<void>;
/**
* Return a new promise that is already resolved (at idle it'll call `.then`)
*
* @param {any} promises - Data to pass to the `.then` handler
* @returns {any} A new Promise
* @url http://www.espruino.com/Reference#l_Promise_resolve
*/
resolve<T extends any>(promises: T): Promise<T>;
/**
* Return a new promise that is already rejected (at idle it'll call `.catch`)
*
* @param {any} promises - Data to pass to the `.catch` handler
* @returns {any} A new Promise
* @url http://www.espruino.com/Reference#l_Promise_reject
*/
reject(promises: any): any;
/**
* Create a new Promise. The executor function is executed immediately (before the
* constructor even returns) and
* @constructor
*
* @param {any} executor - A function of the form `function (resolve, reject)`
* @returns {any} A Promise
* @url http://www.espruino.com/Reference#l_Promise_Promise
*/
new<T>(executor: (resolve: (value: T) => void, reject: (reason?: any) => void) => void): Promise<T>;
}
interface Promise<T> {
/**
*
* @param {any} onFulfilled - A callback that is called when this promise is resolved
* @param {any} [onRejected] - [optional] A callback that is called when this promise is rejected (or nothing)
* @returns {any} The original Promise
* @url http://www.espruino.com/Reference#l_Promise_then
*/
then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | Promise<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | Promise<TResult2>) | undefined | null): Promise<TResult1 | TResult2>;
/**
*
* @param {any} onRejected - A callback that is called when this promise is rejected
* @returns {any} The original Promise
* @url http://www.espruino.com/Reference#l_Promise_catch
*/
catch(onRejected: any): any;
}
/**
* This is the built-in class for ES6 Promises
* @url http://www.espruino.com/Reference#Promise
*/
declare const Promise: PromiseConstructor
/**
* These objects are created from `require("Storage").open` and allow Storage items
* to be read/written.
* The `Storage` library writes into Flash memory (which can only be erased in
* chunks), and unlike a normal filesystem it allocates files in one long
* contiguous area to allow them to be accessed easily from Espruino.
* This presents a challenge for `StorageFile` which allows you to append to a
* file, so instead `StorageFile` stores files in chunks. It uses the last
* character of the filename to denote the chunk number (e.g. `"foobar\1"`,
* `"foobar\2"`, etc).
* This means that while `StorageFile` files exist in the same area as those from
* `Storage`, they should be read using `Storage.open` (and not `Storage.read`).
* ```
* f = s.open("foobar","w");
* f.write("Hell");
* f.write("o World\n");
* f.write("Hello\n");
* f.write("World 2\n");
* // there's no need to call 'close'
* // then
* f = s.open("foobar","r");
* f.read(13) // "Hello World\nH"
* f.read(13) // "ello\nWorld 2\n"
* f.read(13) // "Hello World 3"
* f.read(13) // "\n"
* f.read(13) // undefined
* // or
* f = s.open("foobar","r");
* f.readLine() // "Hello World\n"
* f.readLine() // "Hello\n"
* f.readLine() // "World 2\n"
* f.readLine() // "Hello World 3\n"
* f.readLine() // undefined
* // now get rid of file
* f.erase();
* ```
* **Note:** `StorageFile` uses the fact that all bits of erased flash memory are 1
* to detect the end of a file. As such you should not write character code 255
* (`"\xFF"`) to these files.
* @url http://www.espruino.com/Reference#StorageFile
*/
declare class StorageFile {
/**
* Read 'len' bytes of data from the file, and return a String containing those
* bytes.
* If the end of the file is reached, the String may be smaller than the amount of
* bytes requested, or if the file is already at the end, `undefined` is returned.
*
* @param {number} len - How many bytes to read
* @returns {any} A String, or undefined
* @url http://www.espruino.com/Reference#l_StorageFile_read
*/
read(len: number): string;
/**
* Read a line of data from the file (up to and including `"\n"`)
* @returns {any} A line of data
* @url http://www.espruino.com/Reference#l_StorageFile_readLine
*/
readLine(): string;
/**
* Return the length of the current file.
* This requires Espruino to read the file from scratch, which is not a fast
* operation.
* @returns {number} The current length in bytes of the file
* @url http://www.espruino.com/Reference#l_StorageFile_getLength
*/
getLength(): number;
/**
* Append the given data to a file. You should not attempt to append `"\xFF"`
* (character code 255).
*
* @param {any} data - The data to write. This should not include `'\xFF'` (character code 255)
* @url http://www.espruino.com/Reference#l_StorageFile_write
*/
write(data: string): void;
/**
* Erase this file
* @url http://www.espruino.com/Reference#l_StorageFile_erase
*/
erase(): void;
}
interface processConstructor {
/**
* This event is called when an exception gets thrown and isn't caught (e.g. it gets
* all the way back to the event loop).
* You can use this for logging potential problems that might occur during
* execution when you might not be able to see what is written to the console, for
* example:
* ```
* var lastError;
* process.on('uncaughtException', function(e) {
* lastError=e;
* print(e,e.stack?"\n"+e.stack:"")
* });
* function checkError() {
* if (!lastError) return print("No Error");
* print(lastError,lastError.stack?"\n"+lastError.stack:"")
* }
* ```
* **Note:** When this is used, exceptions will cease to be reported on the
* console - which may make debugging difficult!
* @param {string} event - The event to listen to.
* @param {(exception: any) => void} callback - A function that is executed when the event occurs. Its arguments are:
* * `exception` The uncaught exception
* @url http://www.espruino.com/Reference#l_process_uncaughtException
*/
on(event: "uncaughtException", callback: (exception: any) => void): void;
/**
* Returns the version of Espruino as a String
* @returns {any} The version of Espruino
* @url http://www.espruino.com/Reference#l_process_version
*/
version: any;
/**
* Returns an Object containing various pre-defined variables.
* * `VERSION` - is the Espruino version
* * `GIT_COMMIT` - is Git commit hash this firmware was built from
* * `BOARD` - the board's ID (e.g. `PUCKJS`)
* * `RAM` - total amount of on-chip RAM in bytes
* * `FLASH` - total amount of on-chip flash memory in bytes
* * `SPIFLASH` - (on Bangle.js) total amount of off-chip flash memory in bytes
* * `HWVERSION` - For Puck.js this is the board revision (1, 2, 2.1), or for
* Bangle.js it's 1 or 2
* * `STORAGE` - memory in bytes dedicated to the `Storage` module
* * `SERIAL` - the serial number of this chip
* * `CONSOLE` - the name of the current console device being used (`Serial1`,
* `USB`, `Bluetooth`, etc)
* * `MODULES` - a list of built-in modules separated by commas
* * `EXPTR` - The address of the `exportPtrs` structure in flash (this includes
* links to built-in functions that compiled JS code needs)
* * `APP_RAM_BASE` - On nRF5x boards, this is the RAM required by the Softdevice
* *if it doesn't exactly match what was allocated*. You can use this to update
* `LD_APP_RAM_BASE` in the `BOARD.py` file
* For example, to get a list of built-in modules, you can use
* `process.env.MODULES.split(',')`
* **Note:** `process.env` is not writeable - so as not to waste RAM, the contents
* are generated on demand. If you need to be able to change them, use `process.env=process.env;`
* first to ensure the values stay allocated.
* @returns {any} An object
* @url http://www.espruino.com/Reference#l_process_env
*/
env: any;
/**
* Run a Garbage Collection pass, and return an object containing information on
* memory usage.
* * `free` : Memory that is available to be used (in blocks)
* * `usage` : Memory that has been used (in blocks)
* * `total` : Total memory (in blocks)
* * `history` : Memory used for command history - that is freed if memory is low.
* Note that this is INCLUDED in the figure for 'free'
* * `gc` : Memory freed during the GC pass
* * `gctime` : Time taken for GC pass (in milliseconds)
* * `blocksize` : Size of a block (variable) in bytes
* * `stackEndAddress` : (on ARM) the address (that can be used with peek/poke/etc)
* of the END of the stack. The stack grows down, so unless you do a lot of
* recursion the bytes above this can be used.
* * `stackFree` : (on ARM) how many bytes of free execution stack are there
* at the point of execution.
* * `flash_start` : (on ARM) the address of the start of flash memory (usually
* `0x8000000`)
* * `flash_binary_end` : (on ARM) the address in flash memory of the end of
* Espruino's firmware.
* * `flash_code_start` : (on ARM) the address in flash memory of pages that store
* any code that you save with `save()`.
* * `flash_length` : (on ARM) the amount of flash memory this firmware was built
* for (in bytes). **Note:** Some STM32 chips actually have more memory than is
* advertised.
* Memory units are specified in 'blocks', which are around 16 bytes each
* (depending on your device). The actual size is available in `blocksize`. See
* http://www.espruino.com/Performance for more information.
* **Note:** To find free areas of flash memory, see `require('Flash').getFree()`
*
* @param {any} [gc] - [optional] A boolean. If `undefined` or `true` Garbage collection is performed, if `false` it is not
* @returns {any} Information about memory usage
* @url http://www.espruino.com/Reference#l_process_memory
*/
memory(gc?: any): any;
}
interface process {
}
/**
* This class contains information about Espruino itself
* @url http://www.espruino.com/Reference#process
*/
declare const process: processConstructor
/**
* This class allows use of the built-in USARTs
* Methods may be called on the `USB`, `Serial1`, `Serial2`, `Serial3`, `Serial4`,
* `Serial5` and `Serial6` objects. While different processors provide different
* numbers of USARTs, on official Espruino boards you can always rely on at least
* `Serial1` being available
* @url http://www.espruino.com/Reference#Serial
*/
declare class Serial {
/**
* The `data` event is called when data is received. If a handler is defined with
* `X.on('data', function(data) { ... })` then it will be called, otherwise data
* will be stored in an internal buffer, where it can be retrieved with `X.read()`
* @param {string} event - The event to listen to.
* @param {(data: any) => void} callback - A function that is executed when the event occurs. Its arguments are:
* * `data` A string containing one or more characters of received data
* @url http://www.espruino.com/Reference#l_Serial_data
*/
static on(event: "data", callback: (data: any) => void): void;
/**
* The `framing` event is called when there was activity on the input to the UART
* but the `STOP` bit wasn't in the correct place. This is either because there was
* noise on the line, or the line has been pulled to 0 for a long period of time.
* To enable this, you must initialise Serial with `SerialX.setup(..., { ...,
* errors:true });`
* **Note:** Even though there was an error, the byte will still be received and
* passed to the `data` handler.
* **Note:** This only works on STM32 and NRF52 based devices (e.g. all official
* Espruino boards)
* @param {string} event - The event to listen to.
* @param {() => void} callback - A function that is executed when the event occurs.
* @url http://www.espruino.com/Reference#l_Serial_framing
*/
static on(event: "framing", callback: () => void): void;
/**
* The `parity` event is called when the UART was configured with a parity bit, and
* this doesn't match the bits that have actually been received.
* To enable this, you must initialise Serial with `SerialX.setup(..., { ...,
* errors:true });`
* **Note:** Even though there was an error, the byte will still be received and
* passed to the `data` handler.
* **Note:** This only works on STM32 and NRF52 based devices (e.g. all official
* Espruino boards)
* @param {string} event - The event to listen to.
* @param {() => void} callback - A function that is executed when the event occurs.
* @url http://www.espruino.com/Reference#l_Serial_parity
*/
static on(event: "parity", callback: () => void): void;
/**
* Try and find a USART (Serial) hardware device that will work on this pin (e.g.
* `Serial1`)
* May return undefined if no device can be found.
*
* @param {Pin} pin - A pin to search with
* @returns {any} An object of type `Serial`, or `undefined` if one couldn't be found.
* @url http://www.espruino.com/Reference#l_Serial_find
*/
static find(pin: Pin): any;
/**
* Create a software Serial port. This has limited functionality (only low baud
* rates), but it can work on any pins.
* Use `Serial.setup` to configure this port.
* @constructor
* @returns {any} A Serial object
* @url http://www.espruino.com/Reference#l_Serial_Serial
*/
static new(): any;
/**
* Set this Serial port as the port for the JavaScript console (REPL).
* Unless `force` is set to true, changes in the connection state of the board (for
* instance plugging in USB) will cause the console to change.
* See `E.setConsole` for a more flexible version of this function.
*
* @param {boolean} force - Whether to force the console to this port
* @url http://www.espruino.com/Reference#l_Serial_setConsole
*/
setConsole(force: boolean): void;
/**
* Setup this Serial port with the given baud rate and options.
* e.g.
* ```
* Serial1.setup(9600,{rx:a_pin, tx:a_pin});
* ```
* The second argument can contain:
* ```
* {
* rx:pin, // Receive pin (data in to Espruino)
* tx:pin, // Transmit pin (data out of Espruino)
* ck:pin, // (default none) Clock Pin
* cts:pin, // (default none) Clear to Send Pin
* bytesize:8, // (default 8)How many data bits - 7 or 8
* parity:null/'none'/'o'/'odd'/'e'/'even',
* // (default none) Parity bit
* stopbits:1, // (default 1) Number of stop bits to use
* flow:null/undefined/'none'/'xon', // (default none) software flow control
* path:null/undefined/string // Linux Only - the path to the Serial device to use
* errors:false // (default false) whether to forward framing/parity errors
* }
* ```
* You can find out which pins to use by looking at [your board's reference
* page](#boards) and searching for pins with the `UART`/`USART` markers.
* If not specified in options, the default pins are used for rx and tx (usually
* the lowest numbered pins on the lowest port that supports this peripheral). `ck`
* and `cts` are not used unless specified.
* Note that even after changing the RX and TX pins, if you have called setup
* before then the previous RX and TX pins will still be connected to the Serial
* port as well - until you set them to something else using `digitalWrite` or
* `pinMode`.
* Flow control can be xOn/xOff (`flow:'xon'`) or hardware flow control (receive
* only) if `cts` is specified. If `cts` is set to a pin, the pin's value will be 0
* when Espruino is ready for data and 1 when it isn't.
* By default, framing or parity errors don't create `framing` or `parity` events
* on the `Serial` object because storing these errors uses up additional storage
* in the queue. If you're intending to receive a lot of malformed data then the
* queue might overflow `E.getErrorFlags()` would return `FIFO_FULL`. However if
* you need to respond to `framing` or `parity` errors then you'll need to use
* `errors:true` when initialising serial.
* On Linux builds there is no default Serial device, so you must specify a path to
* a device - for instance: `Serial1.setup(9600,{path:"/dev/ttyACM0"})`
* You can also set up 'software serial' using code like:
* ```
* var s = new Serial();
* s.setup(9600,{rx:a_pin, tx:a_pin});
* ```
* However software serial doesn't use `ck`, `cts`, `parity`, `flow` or `errors`
* parts of the initialisation object.
*
* @param {any} baudrate - The baud rate - the default is 9600
* @param {any} [options] - [optional] A structure containing extra information on initialising the serial port - see below.
* @url http://www.espruino.com/Reference#l_Serial_setup
*/
setup(baudrate: any, options?: any): void;
/**
* If the serial (or software serial) device was set up, uninitialise it.
* @url http://www.espruino.com/Reference#l_Serial_unsetup
*/
unsetup(): void;
/**
* Print a string to the serial port - without a line feed
* **Note:** This function replaces any occurrences of `\n` in the string with
* `\r\n`. To avoid this, use `Serial.write`.
*
* @param {any} string - A String to print
* @url http://www.espruino.com/Reference#l_Serial_print
*/
print(string: any): void;
/**
* Print a line to the serial port with a newline (`\r\n`) at the end of it.
* **Note:** This function converts data to a string first, e.g.
* `Serial.print([1,2,3])` is equivalent to `Serial.print("1,2,3"). If you'd like
* to write raw bytes, use `Serial.write`.
*
* @param {any} string - A String to print
* @url http://www.espruino.com/Reference#l_Serial_println
*/
println(string: any): void;
/**
* Write a character or array of data to the serial port
* This method writes unmodified data, e.g. `Serial.write([1,2,3])` is equivalent to
* `Serial.write("\1\2\3")`. If you'd like data converted to a string first, use
* `Serial.print`.
*
* @param {any} data - One or more items to write. May be ints, strings, arrays, or special objects (see `E.toUint8Array` for more info).
* @url http://www.espruino.com/Reference#l_Serial_write
*/
write(...data: any[]): void;
/**
* Add data to this device as if it came directly from the input - it will be
* returned via `serial.on('data', ...)`;
* ```
* Serial1.on('data', function(d) { print("Got",d); });
* Serial1.inject('Hello World');
* // prints "Got Hel","Got lo World" (characters can be split over multiple callbacks)
* ```
* This is most useful if you wish to send characters to Espruino's REPL (console)
* while it is on another device.
*
* @param {any} data - One or more items to write. May be ints, strings, arrays, or special objects (see `E.toUint8Array` for more info).
* @url http://www.espruino.com/Reference#l_Serial_inject
*/
inject(...data: any[]): void;
/**
* Return how many bytes are available to read. If there is already a listener for
* data, this will always return 0.
* @returns {number} How many bytes are available
* @url http://www.espruino.com/Reference#l_Serial_available
*/
available(): number;
/**
* Return a string containing characters that have been received
*
* @param {number} chars - The number of characters to read, or undefined/0 for all available
* @returns {any} A string containing the required bytes.
* @url http://www.espruino.com/Reference#l_Serial_read
*/
read(chars: number): any;
/**
* Pipe this USART to a stream (an object with a 'write' method)
*
* @param {any} destination - The destination file/stream that will receive content from the source.
* @param {any} [options]
* [optional] An object `{ chunkSize : int=32, end : bool=true, complete : function }`
* chunkSize : The amount of data to pipe from source to destination at a time
* complete : a function to call when the pipe activity is complete
* end : call the 'end' function on the destination when the source is finished
* @url http://www.espruino.com/Reference#l_Serial_pipe
*/
pipe(destination: any, options?: any): void;
}
interface StringConstructor {
/**
* Return the character(s) represented by the given character code(s).
*
* @param {any} code - One or more character codes to create a string from (range 0-255).
* @returns {any} The character
* @url http://www.espruino.com/Reference#l_String_fromCharCode
*/
fromCharCode(...code: any[]): any;
/**
* Create a new String
* @constructor
*
* @param {any} str - A value to turn into a string. If undefined or not supplied, an empty String is created.
* @returns {any} A String
* @url http://www.espruino.com/Reference#l_String_String
*/
new(...str: any[]): any;
}
interface String {
/**
* Find the length of the string
* @returns {any} The value of the string
* @url http://www.espruino.com/Reference#l_String_length
*/
length: any;
/**
* Return a single character at the given position in the String.
*
* @param {number} pos - The character number in the string. Negative values return characters from end of string (-1 = last char)
* @returns {any} The character in the string
* @url http://www.espruino.com/Reference#l_String_charAt
*/
charAt(pos: number): any;
/**
* Return the integer value of a single character at the given position in the
* String.
* Note that this returns 0 not 'NaN' for out of bounds characters
*
* @param {number} pos - The character number in the string. Negative values return characters from end of string (-1 = last char)
* @returns {number} The integer value of a character in the string
* @url http://www.espruino.com/Reference#l_String_charCodeAt
*/
charCodeAt(pos: number): number;
/**
* Return the index of substring in this string, or -1 if not found
*
* @param {any} substring - The string to search for
* @param {any} fromIndex - Index to search from
* @returns {number} The index of the string, or -1 if not found
* @url http://www.espruino.com/Reference#l_String_indexOf
*/
indexOf(substring: any, fromIndex: any): number;
/**
* Return the last index of substring in this string, or -1 if not found
*
* @param {any} substring - The string to search for
* @param {any} fromIndex - Index to search from
* @returns {number} The index of the string, or -1 if not found
* @url http://www.espruino.com/Reference#l_String_lastIndexOf
*/
lastIndexOf(substring: any, fromIndex: any): number;
/**
* Matches an occurrence `subStr` in the string.
* Returns `null` if no match, or:
* ```
* "abcdef".match("b") == [
* "b", // array index 0 - the matched string
* index: 1, // the start index of the match
* input: "b" // the input string
* ]
* "abcdefabcdef".match(/bcd/) == [
* "bcd", index: 1,
* input: "abcdefabcdef"
* ]
* ```
* 'Global' RegExp matches just return an array of matches (with no indices):
* ```
* "abcdefabcdef".match(/bcd/g) = [
* "bcd",
* "bcd"
* ]
* ```
*
* @param {any} substr - Substring or RegExp to match
* @returns {any} A match array or `null` (see below):
* @url http://www.espruino.com/Reference#l_String_match
*/
match(substr: any): any;
/**
* Search and replace ONE occurrence of `subStr` with `newSubStr` and return the
* result. This doesn't alter the original string. Regular expressions not
* supported.
*
* @param {any} subStr - The string to search for
* @param {any} newSubStr - The string to replace it with
* @returns {any} This string with `subStr` replaced
* @url http://www.espruino.com/Reference#l_String_replace
*/
replace(subStr: any, newSubStr: any): any;
/**
*
* @param {number} start - The start character index (inclusive)
* @param {any} end - The end character index (exclusive)
* @returns {any} The part of this string between start and end
* @url http://www.espruino.com/Reference#l_String_substring
*/
substring(start: number, end: any): any;
/**
*
* @param {number} start - The start character index
* @param {any} len - The number of characters
* @returns {any} Part of this string from start for len characters
* @url http://www.espruino.com/Reference#l_String_substr
*/
substr(start: number, len: any): any;
/**
*
* @param {number} start - The start character index, if negative it is from the end of the string
* @param {any} [end] - [optional] The end character index, if negative it is from the end of the string, and if omitted it is the end of the string
* @returns {any} Part of this string from start for len characters
* @url http://www.espruino.com/Reference#l_String_slice
*/
slice(start: number, end?: any): any;
/**
* Return an array made by splitting this string up by the separator. e.g.
* ```'1,2,3'.split(',')==['1', '2', '3']```
* Regular Expressions can also be used to split strings, e.g. `'1a2b3
* 4'.split(/[^0-9]/)==['1', '2', '3', '4']`.
*
* @param {any} separator - The separator `String` or `RegExp` to use
* @returns {any} Part of this string from start for len characters
* @url http://www.espruino.com/Reference#l_String_split
*/
split(separator: any): any;
/**
*
* @returns {any} The lowercase version of this string
* @url http://www.espruino.com/Reference#l_String_toLowerCase
*/
toLowerCase(): any;
/**
*
* @returns {any} The uppercase version of this string
* @url http://www.espruino.com/Reference#l_String_toUpperCase
*/
toUpperCase(): any;
/**
* Return a new string with any whitespace (tabs, space, form feed, newline,
* carriage return, etc) removed from the beginning and end.
* @returns {any} A String with Whitespace removed from the beginning and end
* @url http://www.espruino.com/Reference#l_String_trim
*/
trim(): string;
/**
* Append all arguments to this `String` and return the result. Does not modify the
* original `String`.
*
* @param {any} args - Strings to append
* @returns {any} The result of appending all arguments to this string
* @url http://www.espruino.com/Reference#l_String_concat
*/
concat(...args: any[]): any;
/**
*
* @param {any} searchString - The string to search for
* @param {number} position - The start character index (or 0 if not defined)
* @returns {boolean} `true` if the given characters are found at the beginning of the string, otherwise, `false`.
* @url http://www.espruino.com/Reference#l_String_startsWith
*/
startsWith(searchString: any, position: number): boolean;
/**
*
* @param {any} searchString - The string to search for
* @param {any} length - The 'end' of the string - if left off the actual length of the string is used
* @returns {boolean} `true` if the given characters are found at the end of the string, otherwise, `false`.
* @url http://www.espruino.com/Reference#l_String_endsWith
*/
endsWith(searchString: any, length: any): boolean;
/**
*
* @param {any} substring - The string to search for
* @param {any} fromIndex - The start character index (or 0 if not defined)
* @returns {boolean} `true` if the given characters are in the string, otherwise, `false`.
* @url http://www.espruino.com/Reference#l_String_includes
*/
includes(substring: any, fromIndex: any): boolean;
/**
* Repeat this string the given number of times.
*
* @param {number} count - An integer with the amount of times to repeat this String
* @returns {any} A string containing repetitions of this string
* @url http://www.espruino.com/Reference#l_String_repeat
*/
repeat(count: number): string;
/**
* Pad this string at the beginning to the required number of characters
* ```
* "Hello".padStart(10) == " Hello"
* "123".padStart(10,".-") == ".-.-.-.123"
* ```
*
* @param {number} targetLength - The length to pad this string to
* @param {any} [padString] - [optional] The string to pad with, default is `' '`
* @returns {any} A string containing this string padded to the correct length
* @url http://www.espruino.com/Reference#l_String_padStart
*/
padStart(targetLength: number, padString?: any): string;
/**
* Pad this string at the end to the required number of characters
* ```
* "Hello".padEnd(10) == "Hello "
* "123".padEnd(10,".-") == "123.-.-.-."
* ```
*
* @param {number} targetLength - The length to pad this string to
* @param {any} [padString] - [optional] The string to pad with, default is `' '`
* @returns {any} A string containing this string padded to the correct length
* @url http://www.espruino.com/Reference#l_String_padEnd
*/
padEnd(targetLength: number, padString?: any): string;
}
/**
* This is the built-in class for Text Strings.
* Text Strings in Espruino are not zero-terminated, so you can store zeros in
* them.
* @url http://www.espruino.com/Reference#String
*/
declare const String: StringConstructor
interface RegExpConstructor {
/**
* Creates a RegExp object, for handling Regular Expressions
* @constructor
*
* @param {any} regex - A regular expression as a string
* @param {any} flags - Flags for the regular expression as a string
* @returns {any} A RegExp object
* @url http://www.espruino.com/Reference#l_RegExp_RegExp
*/
new(regex: any, flags: any): RegExp;
}
interface RegExp {
/**
* Test this regex on a string - returns a result array on success, or `null`
* otherwise.
* `/Wo/.exec("Hello World")` will return:
* ```
* [
* "Wo",
* "index": 6,
* "input": "Hello World"
* ]
* ```
* Or with groups `/W(o)rld/.exec("Hello World")` returns:
* ```
* [
* "World",
* "o", "index": 6,
* "input": "Hello World"
* ]
* ```
*
* @param {any} str - A string to match on
* @returns {any} A result array, or null
* @url http://www.espruino.com/Reference#l_RegExp_exec
*/
exec(str: any): any;
/**
* Test this regex on a string - returns `true` on a successful match, or `false`
* otherwise
*
* @param {any} str - A string to match on
* @returns {boolean} true for a match, or false
* @url http://www.espruino.com/Reference#l_RegExp_test
*/
test(str: any): boolean;
}
/**
* The built-in class for handling Regular Expressions
* **Note:** Espruino's regular expression parser does not contain all the features
* present in a full ES6 JS engine. However it does contain support for the all the
* basics.
* @url http://www.espruino.com/Reference#RegExp
*/
declare const RegExp: RegExpConstructor
interface NumberConstructor {
/**
* @returns {number} Not a Number
* @url http://www.espruino.com/Reference#l_Number_NaN
*/
NaN: number;
/**
* @returns {number} Maximum representable value
* @url http://www.espruino.com/Reference#l_Number_MAX_VALUE
*/
MAX_VALUE: number;
/**
* @returns {number} Smallest representable value
* @url http://www.espruino.com/Reference#l_Number_MIN_VALUE
*/
MIN_VALUE: number;
/**
* @returns {number} Negative Infinity (-1/0)
* @url http://www.espruino.com/Reference#l_Number_NEGATIVE_INFINITY
*/
NEGATIVE_INFINITY: number;
/**
* @returns {number} Positive Infinity (1/0)
* @url http://www.espruino.com/Reference#l_Number_POSITIVE_INFINITY
*/
POSITIVE_INFINITY: number;
/**
* Creates a number
* @constructor
*
* @param {any} value - A single value to be converted to a number
* @returns {any} A Number object
* @url http://www.espruino.com/Reference#l_Number_Number
*/
new(...value: any[]): any;
}
interface Number {
/**
* Format the number as a fixed point number
*
* @param {number} decimalPlaces - A number between 0 and 20 specifying the number of decimal digits after the decimal point
* @returns {any} A string
* @url http://www.espruino.com/Reference#l_Number_toFixed
*/
toFixed(decimalPlaces: number): any;
}
/**
* This is the built-in JavaScript class for numbers.
* @url http://www.espruino.com/Reference#Number
*/
declare const Number: NumberConstructor
/**
* This is the built-in class for Pins, such as D0,D1,LED1, or BTN
* You can call the methods on Pin, or you can use Wiring-style functions such as
* digitalWrite
* @url http://www.espruino.com/Reference#Pin
*/
declare class Pin {
/**
* Creates a pin from the given argument (or returns undefined if no argument)
* @constructor
*
* @param {any} value - A value to be converted to a pin. Can be a number, pin, or String.
* @returns {any} A Pin object
* @url http://www.espruino.com/Reference#l_Pin_Pin
*/
static new(value: any): any;
/**
* Returns the input state of the pin as a boolean.
* **Note:** if you didn't call `pinMode` beforehand then this function will also
* reset the pin's state to `"input"`
* @returns {boolean} Whether pin is a logical 1 or 0
* @url http://www.espruino.com/Reference#l_Pin_read
*/
read(): boolean;
/**
* Sets the output state of the pin to a 1
* **Note:** if you didn't call `pinMode` beforehand then this function will also
* reset the pin's state to `"output"`
* @url http://www.espruino.com/Reference#l_Pin_set
*/
set(): void;
/**
* Sets the output state of the pin to a 0
* **Note:** if you didn't call `pinMode` beforehand then this function will also
* reset the pin's state to `"output"`
* @url http://www.espruino.com/Reference#l_Pin_reset
*/
reset(): void;
/**
* Sets the output state of the pin to the parameter given
* **Note:** if you didn't call `pinMode` beforehand then this function will also
* reset the pin's state to `"output"`
*
* @param {boolean} value - Whether to set output high (true/1) or low (false/0)
* @url http://www.espruino.com/Reference#l_Pin_write
*/
write(value: boolean): void;
/**
* Sets the output state of the pin to the parameter given at the specified time.
* **Note:** this **doesn't** change the mode of the pin to an output. To do that,
* you need to use `pin.write(0)` or `pinMode(pin, 'output')` first.
*
* @param {boolean} value - Whether to set output high (true/1) or low (false/0)
* @param {number} time - Time at which to write
* @url http://www.espruino.com/Reference#l_Pin_writeAtTime
*/
writeAtTime(value: boolean, time: number): void;
/**
* Return the current mode of the given pin. See `pinMode` for more information.
* @returns {any} The pin mode, as a string
* @url http://www.espruino.com/Reference#l_Pin_getMode
*/
getMode(): any;
/**
* Set the mode of the given pin. See [`pinMode`](#l__global_pinMode) for more
* information on pin modes.
*
* @param {any} mode - The mode - a string that is either 'analog', 'input', 'input_pullup', 'input_pulldown', 'output', 'opendrain', 'af_output' or 'af_opendrain'. Do not include this argument if you want to revert to automatic pin mode setting.
* @url http://www.espruino.com/Reference#l_Pin_mode
*/
mode(mode: any): void;
/**
* Toggles the state of the pin from off to on, or from on to off.
* **Note:** This method doesn't currently work on the ESP8266 port of Espruino.
* **Note:** if you didn't call `pinMode` beforehand then this function will also
* reset the pin's state to `"output"`
* @returns {boolean} True if the pin is high after calling the function
* @url http://www.espruino.com/Reference#l_Pin_toggle
*/
toggle(): boolean;
/**
* Get information about this pin and its capabilities. Of the form:
* ```
* {
* "port" : "A", // the Pin's port on the chip
* "num" : 12, // the Pin's number
* "in_addr" : 0x..., // (if available) the address of the pin's input address in bit-banded memory (can be used with peek)
* "out_addr" : 0x..., // (if available) the address of the pin's output address in bit-banded memory (can be used with poke)
* "analog" : { ADCs : [1], channel : 12 }, // If analog input is available
* "functions" : {
* "TIM1":{type:"CH1, af:0},
* "I2C3":{type:"SCL", af:1}
* }
* }
* ```
* Will return undefined if pin is not valid.
* @returns {any} An object containing information about this pins
* @url http://www.espruino.com/Reference#l_Pin_getInfo
*/
getInfo(): any;
}
interface BooleanConstructor {
/**
* Creates a boolean
* @constructor
*
* @param {any} value - A single value to be converted to a number
* @returns {boolean} A Boolean object
* @url http://www.espruino.com/Reference#l_Boolean_Boolean
*/
new(value: any): boolean;
}
interface Boolean {
}
declare const Boolean: BooleanConstructor
// GLOBALS
/**
* The pin marked SDA on the Arduino pin footprint. This is connected directly to
* pin A4.
* @returns {Pin}
* @url http://www.espruino.com/Reference#l__global_SDA
*/
declare const SDA: Pin;
/**
* The pin marked SDA on the Arduino pin footprint. This is connected directly to
* pin A5.
* @returns {Pin}
* @url http://www.espruino.com/Reference#l__global_SCL
*/
declare const SCL: Pin;
/**
* **Note:** This function is only available on the [BBC micro:bit](/MicroBit)
* board
* Show an image on the in-built 5x5 LED screen.
* Image can be:
* * A number where each bit represents a pixel (so 25 bits). e.g. `5` or
* `0x1FFFFFF`
* * A string, e.g: `show("10001")`. Newlines are ignored, and anything that is not
* a space or `0` is treated as a 1.
* * An array of 4 bytes (more will be ignored), e.g `show([1,2,3,0])`
* For instance the following works for images:
* ```
* show("# #"+
* " # "+
* " # "+
* "# #"+
* " ### ")
* ```
* This means you can also use Espruino's graphics library:
* ```
* var g = Graphics.createArrayBuffer(5,5,1)
* g.drawString("E",0,0)
* show(g.buffer)
* ```
*
* @param {any} image - The image to show
* @url http://www.espruino.com/Reference#l__global_show
*/
declare function show(image: any): void;
/**
* **Note:** This function is only available on the [BBC micro:bit](/MicroBit)
* board
* Get the current acceleration of the micro:bit from the on-board accelerometer
* **This is deprecated.** Please use `Microbit.accel` instead.
* @returns {any} An object with x, y, and z fields in it
* @url http://www.espruino.com/Reference#l__global_acceleration
*/
declare function acceleration(): any;
/**
* **Note:** This function is only available on the [BBC micro:bit](/MicroBit)
* board
* Get the current compass position for the micro:bit from the on-board
* magnetometer
* **This is deprecated.** Please use `Microbit.mag` instead.
* @returns {any} An object with x, y, and z fields in it
* @url http://www.espruino.com/Reference#l__global_compass
*/
declare function compass(): any;
/**
* On Puck.js V2 (not v1.0) this is the pin that controls the FET, for high-powered
* outputs.
* @returns {Pin}
* @url http://www.espruino.com/Reference#l__global_FET
*/
declare const FET: Pin;
/**
* The Bangle.js's vibration motor.
* @returns {Pin}
* @url http://www.espruino.com/Reference#l__global_VIBRATE
*/
declare const VIBRATE: Pin;
/**
* On most Espruino board there are LEDs, in which case `LED` will be an actual
* Pin.
* On Bangle.js there are no LEDs, so to remain compatible with example code that
* might expect an LED, this is an object that behaves like a pin, but which just
* displays a circle on the display
* @returns {any} A `Pin` object for a fake LED which appears on
* @url http://www.espruino.com/Reference#l__global_LED
*/
declare const LED: any;
/**
* On most Espruino board there are LEDs, in which case `LED1` will be an actual
* Pin.
* On Bangle.js there are no LEDs, so to remain compatible with example code that
* might expect an LED, this is an object that behaves like a pin, but which just
* displays a circle on the display
* @returns {any} A `Pin` object for a fake LED which appears on
* @url http://www.espruino.com/Reference#l__global_LED1
*/
declare const LED1: any;
/**
* On most Espruino board there are LEDs, in which case `LED2` will be an actual
* Pin.
* On Bangle.js there are no LEDs, so to remain compatible with example code that
* might expect an LED, this is an object that behaves like a pin, but which just
* displays a circle on the display
* @returns {any} A `Pin` object for a fake LED which appears on
* @url http://www.espruino.com/Reference#l__global_LED2
*/
declare const LED2: any;
/**
* The pin connected to the 'A' button. Reads as `1` when pressed, `0` when not
* @returns {Pin}
* @url http://www.espruino.com/Reference#l__global_BTNA
*/
declare const BTNA: Pin;
/**
* The pin connected to the 'B' button. Reads as `1` when pressed, `0` when not
* @returns {Pin}
* @url http://www.espruino.com/Reference#l__global_BTNB
*/
declare const BTNB: Pin;
/**
* The pin connected to the up button. Reads as `1` when pressed, `0` when not
* @returns {Pin}
* @url http://www.espruino.com/Reference#l__global_BTNU
*/
declare const BTNU: Pin;
/**
* The pin connected to the down button. Reads as `1` when pressed, `0` when not
* @returns {Pin}
* @url http://www.espruino.com/Reference#l__global_BTND
*/
declare const BTND: Pin;
/**
* The pin connected to the left button. Reads as `1` when pressed, `0` when not
* @returns {Pin}
* @url http://www.espruino.com/Reference#l__global_BTNL
*/
declare const BTNL: Pin;
/**
* The pin connected to the right button. Reads as `1` when pressed, `0` when not
* @returns {Pin}
* @url http://www.espruino.com/Reference#l__global_BTNR
*/
declare const BTNR: Pin;
/**
* The pin connected to Corner #1
* @returns {Pin}
* @url http://www.espruino.com/Reference#l__global_CORNER1
*/
declare const CORNER1: Pin;
/**
* The pin connected to Corner #2
* @returns {Pin}
* @url http://www.espruino.com/Reference#l__global_CORNER2
*/
declare const CORNER2: Pin;
/**
* The pin connected to Corner #3
* @returns {Pin}
* @url http://www.espruino.com/Reference#l__global_CORNER3
*/
declare const CORNER3: Pin;
/**
* The pin connected to Corner #4
* @returns {Pin}
* @url http://www.espruino.com/Reference#l__global_CORNER4
*/
declare const CORNER4: Pin;
/**
* The pin connected to Corner #5
* @returns {Pin}
* @url http://www.espruino.com/Reference#l__global_CORNER5
*/
declare const CORNER5: Pin;
/**
* The pin connected to Corner #6
* @returns {Pin}
* @url http://www.espruino.com/Reference#l__global_CORNER6
*/
declare const CORNER6: Pin;
/**
* The Bluetooth Serial port - used when data is sent or received over Bluetooth
* Smart on nRF51/nRF52 chips.
* @url http://www.espruino.com/Reference#l__global_Bluetooth
*/
declare const Bluetooth: Serial;
/**
* @returns {Pin} A Pin
* @url http://www.espruino.com/Reference#l__global_MOS1
*/
declare const MOS1: Pin;
/**
* @returns {Pin} A Pin
* @url http://www.espruino.com/Reference#l__global_MOS2
*/
declare const MOS2: Pin;
/**
* @returns {Pin} A Pin
* @url http://www.espruino.com/Reference#l__global_MOS3
*/
declare const MOS3: Pin;
/**
* @returns {Pin} A Pin
* @url http://www.espruino.com/Reference#l__global_MOS4
*/
declare const MOS4: Pin;
/**
* @returns {Pin} A Pin
* @url http://www.espruino.com/Reference#l__global_IOEXT0
*/
declare const IOEXT0: Pin;
/**
* @returns {Pin} A Pin
* @url http://www.espruino.com/Reference#l__global_IOEXT1
*/
declare const IOEXT1: Pin;
/**
* @returns {Pin} A Pin
* @url http://www.espruino.com/Reference#l__global_IOEXT2
*/
declare const IOEXT2: Pin;
/**
* @returns {Pin} A Pin
* @url http://www.espruino.com/Reference#l__global_IOEXT3
*/
declare const IOEXT3: Pin;
/**
* A simple VT100 terminal emulator.
* When data is sent to the `Terminal` object, `Graphics.getInstance()` is called
* and if an instance of `Graphics` is found then characters are written to it.
* @url http://www.espruino.com/Reference#l__global_Terminal
*/
declare const Terminal: Serial;
declare const global: {
SDA: typeof SDA;
SCL: typeof SCL;
show: typeof show;
acceleration: typeof acceleration;
compass: typeof compass;
FET: typeof FET;
VIBRATE: typeof VIBRATE;
LED: typeof LED;
LED1: typeof LED1;
LED2: typeof LED2;
BTNA: typeof BTNA;
BTNB: typeof BTNB;
BTNU: typeof BTNU;
BTND: typeof BTND;
BTNL: typeof BTNL;
BTNR: typeof BTNR;
CORNER1: typeof CORNER1;
CORNER2: typeof CORNER2;
CORNER3: typeof CORNER3;
CORNER4: typeof CORNER4;
CORNER5: typeof CORNER5;
CORNER6: typeof CORNER6;
Bluetooth: typeof Bluetooth;
MOS1: typeof MOS1;
MOS2: typeof MOS2;
MOS3: typeof MOS3;
MOS4: typeof MOS4;
IOEXT0: typeof IOEXT0;
IOEXT1: typeof IOEXT1;
IOEXT2: typeof IOEXT2;
IOEXT3: typeof IOEXT3;
Terminal: typeof Terminal;
global: typeof global;
setBusyIndicator: typeof setBusyIndicator;
setSleepIndicator: typeof setSleepIndicator;
setDeepSleep: typeof setDeepSleep;
dump: typeof dump;
load: typeof load;
save: typeof save;
reset: typeof reset;
edit: typeof edit;
echo: typeof echo;
getTime: typeof getTime;
setTime: typeof setTime;
getSerial: typeof getSerial;
setInterval: typeof setInterval;
setTimeout: typeof setTimeout;
clearInterval: typeof clearInterval;
clearTimeout: typeof clearTimeout;
changeInterval: typeof changeInterval;
peek8: typeof peek8;
poke8: typeof poke8;
peek16: typeof peek16;
poke16: typeof poke16;
peek32: typeof peek32;
poke32: typeof poke32;
analogRead: typeof analogRead;
analogWrite: typeof analogWrite;
digitalPulse: typeof digitalPulse;
digitalWrite: typeof digitalWrite;
digitalRead: typeof digitalRead;
pinMode: typeof pinMode;
getPinMode: typeof getPinMode;
shiftOut: typeof shiftOut;
setWatch: typeof setWatch;
clearWatch: typeof clearWatch;
arguments: typeof arguments;
eval: typeof eval;
parseInt: typeof parseInt;
parseFloat: typeof parseFloat;
isFinite: typeof isFinite;
isNaN: typeof isNaN;
btoa: typeof btoa;
atob: typeof atob;
encodeURIComponent: typeof encodeURIComponent;
decodeURIComponent: typeof decodeURIComponent;
trace: typeof trace;
print: typeof print;
require: typeof require;
__FILE__: typeof __FILE__;
SPI1: typeof SPI1;
SPI2: typeof SPI2;
SPI3: typeof SPI3;
I2C1: typeof I2C1;
I2C2: typeof I2C2;
I2C3: typeof I2C3;
USB: typeof USB;
Serial1: typeof Serial1;
Serial2: typeof Serial2;
Serial3: typeof Serial3;
Serial4: typeof Serial4;
Serial5: typeof Serial5;
Serial6: typeof Serial6;
LoopbackA: typeof LoopbackA;
LoopbackB: typeof LoopbackB;
Telnet: typeof Telnet;
NaN: typeof NaN;
Infinity: typeof Infinity;
HIGH: typeof HIGH;
LOW: typeof LOW;
[key: string]: any;
}
/**
* When Espruino is busy, set the pin specified here high. Set this to undefined to
* disable the feature.
*
* @param {any} pin
* @url http://www.espruino.com/Reference#l__global_setBusyIndicator
*/
declare function setBusyIndicator(pin: any): void;
/**
* When Espruino is asleep, set the pin specified here low (when it's awake, set it
* high). Set this to undefined to disable the feature.
* Please see http://www.espruino.com/Power+Consumption for more details on this.
*
* @param {any} pin
* @url http://www.espruino.com/Reference#l__global_setSleepIndicator
*/
declare function setSleepIndicator(pin: any): void;
/**
* Set whether we can enter deep sleep mode, which reduces power consumption to
* around 100uA. This only works on STM32 Espruino Boards (nRF52 boards sleep
* automatically).
* Please see http://www.espruino.com/Power+Consumption for more details on this.
*
* @param {boolean} sleep
* @url http://www.espruino.com/Reference#l__global_setDeepSleep
*/
declare function setDeepSleep(sleep: boolean): void;
/**
* Output current interpreter state in a text form such that it can be copied to a
* new device
* Espruino keeps its current state in RAM (even if the function code is stored in
* Flash). When you type `dump()` it dumps the current state of code in RAM plus
* the hardware state, then if there's code saved in flash it writes "// Code saved
* with E.setBootCode" and dumps that too.
* **Note:** 'Internal' functions are currently not handled correctly. You will
* need to recreate these in the `onInit` function.
* @url http://www.espruino.com/Reference#l__global_dump
*/
declare function dump(): void;
/**
* Restart and load the program out of flash - this has an effect similar to
* completely rebooting Espruino (power off/power on), but without actually
* performing a full reset of the hardware.
* This command only executes when the Interpreter returns to the Idle state - for
* instance ```a=1;load();a=2;``` will still leave 'a' as undefined (or what it was
* set to in the saved program).
* Espruino will resume from where it was when you last typed `save()`. If you want
* code to be executed right after loading (for instance to initialise devices
* connected to Espruino), add an `init` event handler to `E` with `E.on('init',
* function() { ... your_code ... });`. This will then be automatically executed by
* Espruino every time it starts.
* **If you specify a filename in the argument then that file will be loaded from
* Storage after reset** in much the same way as calling `reset()` then
* `eval(require("Storage").read(filename))`
*
* @param {any} [filename] - [optional] The name of a text JS file to load from Storage after reset
* @url http://www.espruino.com/Reference#l__global_load
*/
declare function load(filename?: any): void;
/**
* Save the state of the interpreter into flash (including the results of calling
* `setWatch`, `setInterval`, `pinMode`, and any listeners). The state will then be
* loaded automatically every time Espruino powers on or is hard-reset. To see what
* will get saved you can call `dump()`.
* **Note:** If you set up intervals/etc in `onInit()` and you have already called
* `onInit` before running `save()`, when Espruino resumes there will be two copies
* of your intervals - the ones from before the save, and the ones from after -
* which may cause you problems.
* For more information about this and other options for saving, please see the
* [Saving code on Espruino](https://www.espruino.com/Saving) page.
* This command only executes when the Interpreter returns to the Idle state - for
* instance ```a=1;save();a=2;``` will save 'a' as 2.
* When Espruino powers on, it will resume from where it was when you typed
* `save()`. If you want code to be executed right after loading (for instance to
* initialise devices connected to Espruino), add a function called `onInit`, or
* add a `init` event handler to `E` with `E.on('init', function() { ... your_code
* ... });`. This will then be automatically executed by Espruino every time it
* starts.
* In order to stop the program saved with this command being loaded automatically,
* check out [the Troubleshooting
* guide](https://www.espruino.com/Troubleshooting#espruino-stopped-working-after-i-typed-save-)
* @url http://www.espruino.com/Reference#l__global_save
*/
declare function save(): void;
/**
* Reset the interpreter - clear program memory in RAM, and do not load a saved
* program from flash. This does NOT reset the underlying hardware (which allows
* you to reset the device without it disconnecting from USB).
* This command only executes when the Interpreter returns to the Idle state - for
* instance ```a=1;reset();a=2;``` will still leave 'a' as undefined.
* The safest way to do a full reset is to hit the reset button.
* If `reset()` is called with no arguments, it will reset the board's state in RAM
* but will not reset the state in flash. When next powered on (or when `load()` is
* called) the board will load the previously saved code.
* Calling `reset(true)` will cause *all saved code in flash memory to be cleared
* as well*.
*
* @param {boolean} clearFlash - Remove saved code from flash as well
* @url http://www.espruino.com/Reference#l__global_reset
*/
declare function reset(clearFlash: boolean): void;
/**
* Fill the console with the contents of the given function, so you can edit it.
* NOTE: This is a convenience function - it will not edit 'inner functions'. For
* that, you must edit the 'outer function' and re-execute it.
*
* @param {any} funcName - The name of the function to edit (either a string or just the unquoted name)
* @url http://www.espruino.com/Reference#l__global_edit
*/
declare function edit(funcName: any): void;
/**
* Should Espruino echo what you type back to you? true = yes (Default), false =
* no. When echo is off, the result of executing a command is not returned.
* Instead, you must use 'print' to send output.
*
* @param {boolean} echoOn
* @url http://www.espruino.com/Reference#l__global_echo
*/
declare function echo(echoOn: boolean): void;
/**
* Return the current system time in Seconds (as a floating point number)
* @returns {number}
* @url http://www.espruino.com/Reference#l__global_getTime
*/
declare function getTime(): number;
/**
* Set the current system time in seconds (`time` can be a floating point value).
* This is used with `getTime`, the time reported from `setWatch`, as well as when
* using `new Date()`.
* `Date.prototype.getTime()` reports the time in milliseconds, so you can set the
* time to a `Date` object using:
* ```
* setTime((new Date("Tue, 19 Feb 2019 10:57")).getTime()/1000)
* ```
* To set the timezone for all new Dates, use `E.setTimeZone(hours)`.
*
* @param {number} time
* @url http://www.espruino.com/Reference#l__global_setTime
*/
declare function setTime(time: number): void;
/**
* Get the serial number of this board
* @returns {any} The board's serial number
* @url http://www.espruino.com/Reference#l__global_getSerial
*/
declare function getSerial(): any;
/**
* Call the function (or evaluate the string) specified REPEATEDLY after the
* timeout in milliseconds.
* For instance:
* ```
* setInterval(function () {
* console.log("Hello World");
* }, 1000);
* // or
* setInterval('console.log("Hello World");', 1000);
* // both print 'Hello World' every second
* ```
* You can also specify extra arguments that will be sent to the function when it
* is executed. For example:
* ```
* setInterval(function (a,b) {
* console.log(a+" "+b);
* }, 1000, "Hello", "World");
* // prints 'Hello World' every second
* ```
* If you want to stop your function from being called, pass the number that was
* returned by `setInterval` into the `clearInterval` function.
* **Note:** If `setDeepSleep(true)` has been called and the interval is greater
* than 5 seconds, Espruino may execute the interval up to 1 second late. This is
* because Espruino can only wake from deep sleep every second - and waking early
* would cause Espruino to waste power while it waited for the correct time.
*
* @param {any} function - A Function or String to be executed
* @param {number} timeout - The time between calls to the function (max 3153600000000 = 100 years
* @param {any} args - Optional arguments to pass to the function when executed
* @returns {any} An ID that can be passed to clearInterval
* @url http://www.espruino.com/Reference#l__global_setInterval
*/
declare function setInterval(func: any, timeout: number, ...args: any[]): any;
/**
* Call the function (or evaluate the string) specified ONCE after the timeout in
* milliseconds.
* For instance:
* ```
* setTimeout(function () {
* console.log("Hello World");
* }, 1000);
* // or
* setTimeout('console.log("Hello World");', 1000);
* // both print 'Hello World' after a second
* ```
* You can also specify extra arguments that will be sent to the function when it
* is executed. For example:
* ```
* setTimeout(function (a,b) {
* console.log(a+" "+b);
* }, 1000, "Hello", "World");
* // prints 'Hello World' after 1 second
* ```
* If you want to stop the function from being called, pass the number that was
* returned by `setTimeout` into the `clearTimeout` function.
* **Note:** If `setDeepSleep(true)` has been called and the interval is greater
* than 5 seconds, Espruino may execute the interval up to 1 second late. This is
* because Espruino can only wake from deep sleep every second - and waking early
* would cause Espruino to waste power while it waited for the correct time.
*
* @param {any} function - A Function or String to be executed
* @param {number} timeout - The time until the function will be executed (max 3153600000000 = 100 years
* @param {any} args - Optional arguments to pass to the function when executed
* @returns {any} An ID that can be passed to clearTimeout
* @url http://www.espruino.com/Reference#l__global_setTimeout
*/
declare function setTimeout(func: any, timeout: number, ...args: any[]): any;
/**
* Clear the Interval that was created with `setInterval`, for example:
* ```var id = setInterval(function () { print('foo'); }, 1000);```
* ```clearInterval(id);```
* If no argument is supplied, all timeouts and intervals are stopped.
* To avoid accidentally deleting all Intervals, if a parameter is supplied but is `undefined` then an Exception will be thrown.
*
* @param {any} id - The id returned by a previous call to setInterval. **Only one argument is allowed.**
* @url http://www.espruino.com/Reference#l__global_clearInterval
*/
declare function clearInterval(...id: any[]): void;
/**
* Clear the Timeout that was created with `setTimeout`, for example:
* ```var id = setTimeout(function () { print('foo'); }, 1000);```
* ```clearTimeout(id);```
* If no argument is supplied, all timeouts and intervals are stopped.
* To avoid accidentally deleting all Timeouts, if a parameter is supplied but is `undefined` then an Exception will be thrown.
*
* @param {any} id - The id returned by a previous call to setTimeout. **Only one argument is allowed.**
* @url http://www.espruino.com/Reference#l__global_clearTimeout
*/
declare function clearTimeout(...id: any[]): void;
/**
* Change the Interval on a callback created with `setInterval`, for example:
* ```var id = setInterval(function () { print('foo'); }, 1000); // every second```
* ```changeInterval(id, 1500); // now runs every 1.5 seconds```
* This takes effect immediately and resets the timeout, so in the example above,
* regardless of when you call `changeInterval`, the next interval will occur
* 1500ms after it.
*
* @param {any} id - The id returned by a previous call to setInterval
* @param {number} time - The new time period in ms
* @url http://www.espruino.com/Reference#l__global_changeInterval
*/
declare function changeInterval(id: any, time: number): void;
/**
* Read 8 bits of memory at the given location - DANGEROUS!
*
* @param {number} addr - The address in memory to read
* @param {number} [count] - [optional] the number of items to read. If >1 a Uint8Array will be returned.
* @returns {any} The value of memory at the given location
* @url http://www.espruino.com/Reference#l__global_peek8
*/
declare function peek8(addr: number, count?: 1): number;
declare function peek8(addr: number, count: number): Uint8Array;
/**
* Write 8 bits of memory at the given location - VERY DANGEROUS!
*
* @param {number} addr - The address in memory to write
* @param {any} value - The value to write, or an array of values
* @url http://www.espruino.com/Reference#l__global_poke8
*/
declare function poke8(addr: number, value: number | number[]): void;
/**
* Read 16 bits of memory at the given location - DANGEROUS!
*
* @param {number} addr - The address in memory to read
* @param {number} [count] - [optional] the number of items to read. If >1 a Uint16Array will be returned.
* @returns {any} The value of memory at the given location
* @url http://www.espruino.com/Reference#l__global_peek16
*/
declare function peek16(addr: number, count?: 1): number;
declare function peek16(addr: number, count: number): Uint8Array;
/**
* Write 16 bits of memory at the given location - VERY DANGEROUS!
*
* @param {number} addr - The address in memory to write
* @param {any} value - The value to write, or an array of values
* @url http://www.espruino.com/Reference#l__global_poke16
*/
declare function poke16(addr: number, value: number | number[]): void;
/**
* Read 32 bits of memory at the given location - DANGEROUS!
*
* @param {number} addr - The address in memory to read
* @param {number} [count] - [optional] the number of items to read. If >1 a Uint32Array will be returned.
* @returns {any} The value of memory at the given location
* @url http://www.espruino.com/Reference#l__global_peek32
*/
declare function peek32(addr: number, count?: 1): number;
declare function peek32(addr: number, count: number): Uint8Array;
/**
* Write 32 bits of memory at the given location - VERY DANGEROUS!
*
* @param {number} addr - The address in memory to write
* @param {any} value - The value to write, or an array of values
* @url http://www.espruino.com/Reference#l__global_poke32
*/
declare function poke32(addr: number, value: number | number[]): void;
/**
* Get the analogue value of the given pin
* This is different to Arduino which only returns an integer between 0 and 1023
* However only pins connected to an ADC will work (see the datasheet)
* **Note:** if you didn't call `pinMode` beforehand then this function will also
* reset pin's state to `"analog"`
*
* @param {Pin} pin
* The pin to use
* You can find out which pins to use by looking at [your board's reference page](#boards) and searching for pins with the `ADC` markers.
* @returns {number} The analog Value of the Pin between 0 and 1
* @url http://www.espruino.com/Reference#l__global_analogRead
*/
declare function analogRead(pin: Pin): number;
/**
* Set the analog Value of a pin. It will be output using PWM.
* Objects can contain:
* * `freq` - pulse frequency in Hz, e.g. ```analogWrite(A0,0.5,{ freq : 10 });``` -
* specifying a frequency will force PWM output, even if the pin has a DAC
* * `soft` - boolean, If true software PWM is used if hardware is not available.
* * `forceSoft` - boolean, If true software PWM is used even if hardware PWM or a
* DAC is available
* **Note:** if you didn't call `pinMode` beforehand then this function will also
* reset pin's state to `"output"`
*
* @param {Pin} pin
* The pin to use
* You can find out which pins to use by looking at [your board's reference page](#boards) and searching for pins with the `PWM` or `DAC` markers.
* @param {number} value - A value between 0 and 1
* @param {any} options
* An object containing options for analog output - see below
* @url http://www.espruino.com/Reference#l__global_analogWrite
*/
declare function analogWrite(pin: Pin, value: number, options?: { freq?: number, soft?: boolean, forceSoft?: boolean }): void;
/**
* Pulse the pin with the value for the given time in milliseconds. It uses a
* hardware timer to produce accurate pulses, and returns immediately (before the
* pulse has finished). Use `digitalPulse(A0,1,0)` to wait until a previous pulse
* has finished.
* e.g. `digitalPulse(A0,1,5);` pulses A0 high for 5ms.
* `digitalPulse(A0,1,[5,2,4]);` pulses A0 high for 5ms, low for 2ms, and high for
* 4ms
* **Note:** if you didn't call `pinMode` beforehand then this function will also
* reset pin's state to `"output"`
* digitalPulse is for SHORT pulses that need to be very accurate. If you're doing
* anything over a few milliseconds, use setTimeout instead.
*
* @param {Pin} pin - The pin to use
* @param {boolean} value - Whether to pulse high (true) or low (false)
* @param {any} time - A time in milliseconds, or an array of times (in which case a square wave will be output starting with a pulse of 'value')
* @url http://www.espruino.com/Reference#l__global_digitalPulse
*/
declare function digitalPulse(pin: Pin, value: boolean, time: number | number[]): void;
/**
* Set the digital value of the given pin.
* **Note:** if you didn't call `pinMode` beforehand then this function will also
* reset pin's state to `"output"`
* If pin argument is an array of pins (e.g. `[A2,A1,A0]`) the value argument will
* be treated as an array of bits where the last array element is the least
* significant bit.
* In this case, pin values are set least significant bit first (from the
* right-hand side of the array of pins). This means you can use the same pin
* multiple times, for example `digitalWrite([A1,A1,A0,A0],0b0101)` would pulse A0
* followed by A1.
* If the pin argument is an object with a `write` method, the `write` method will
* be called with the value passed through.
*
* @param {any} pin - The pin to use
* @param {number} value - Whether to pulse high (true) or low (false)
* @url http://www.espruino.com/Reference#l__global_digitalWrite
*/
declare function digitalWrite(pin: Pin, value: boolean): void;
/**
* Get the digital value of the given pin.
* **Note:** if you didn't call `pinMode` beforehand then this function will also
* reset pin's state to `"input"`
* If the pin argument is an array of pins (e.g. `[A2,A1,A0]`) the value returned
* will be an number where the last array element is the least significant bit, for
* example if `A0=A1=1` and `A2=0`, `digitalRead([A2,A1,A0]) == 0b011`
* If the pin argument is an object with a `read` method, the `read` method will be
* called and the integer value it returns passed back.
*
* @param {any} pin - The pin to use
* @returns {number} The digital Value of the Pin
* @url http://www.espruino.com/Reference#l__global_digitalRead
*/
declare function digitalRead(pin: Pin): number;
/**
* Set the mode of the given pin.
* * `auto`/`undefined` - Don't change state, but allow `digitalWrite`/etc to
* automatically change state as appropriate
* * `analog` - Analog input
* * `input` - Digital input
* * `input_pullup` - Digital input with internal ~40k pull-up resistor
* * `input_pulldown` - Digital input with internal ~40k pull-down resistor
* * `output` - Digital output
* * `opendrain` - Digital output that only ever pulls down to 0v. Sending a
* logical `1` leaves the pin open circuit
* * `opendrain_pullup` - Digital output that pulls down to 0v. Sending a logical
* `1` enables internal ~40k pull-up resistor
* * `af_output` - Digital output from built-in peripheral
* * `af_opendrain` - Digital output from built-in peripheral that only ever pulls
* down to 0v. Sending a logical `1` leaves the pin open circuit
* **Note:** `digitalRead`/`digitalWrite`/etc set the pin mode automatically
* *unless* `pinMode` has been called first. If you want `digitalRead`/etc to set
* the pin mode automatically after you have called `pinMode`, simply call it again
* with no mode argument (`pinMode(pin)`), `auto` as the argument (`pinMode(pin,
* "auto")`), or with the 3rd 'automatic' argument set to true (`pinMode(pin,
* "output", true)`).
*
* @param {Pin} pin - The pin to set pin mode for
* @param {any} mode - The mode - a string that is either 'analog', 'input', 'input_pullup', 'input_pulldown', 'output', 'opendrain', 'af_output' or 'af_opendrain'. Do not include this argument or use 'auto' if you want to revert to automatic pin mode setting.
* @param {boolean} automatic - Optional, default is false. If true, subsequent commands will automatically change the state (see notes below)
* @url http://www.espruino.com/Reference#l__global_pinMode
*/
declare function pinMode(pin: Pin, mode?: PinMode | "auto", automatic?: boolean): void;
/**
* Return the current mode of the given pin. See `pinMode` for more information on
* returned values.
*
* @param {Pin} pin - The pin to check
* @returns {any} The pin mode, as a string
* @url http://www.espruino.com/Reference#l__global_getPinMode
*/
declare function getPinMode(pin: Pin): PinMode;
/**
* Shift an array of data out using the pins supplied *least significant bit
* first*, for example:
* ```
* // shift out to single clk+data
* shiftOut(A0, { clk : A1 }, [1,0,1,0]);
* ```
* ```
* // shift out a whole byte (like software SPI)
* shiftOut(A0, { clk : A1, repeat: 8 }, [1,2,3,4]);
* ```
* ```
* // shift out via 4 data pins
* shiftOut([A3,A2,A1,A0], { clk : A4 }, [1,2,3,4]);
* ```
* `options` is an object of the form:
* ```
* {
* clk : pin, // a pin to use as the clock (undefined = no pin)
* clkPol : bool, // clock polarity - default is 0 (so 1 normally, pulsing to 0 to clock data in)
* repeat : int, // number of clocks per array item
* }
* ```
* Each item in the `data` array will be output to the pins, with the first pin in
* the array being the MSB and the last the LSB, then the clock will be pulsed in
* the polarity given.
* `repeat` is the amount of times shift data out for each array item. For instance
* we may want to shift 8 bits out through 2 pins - in which case we need to set
* repeat to 4.
*
* @param {any} pins - A pin, or an array of pins to use
* @param {any} options - Options, for instance the clock (see below)
* @param {any} data - The data to shift out (see `E.toUint8Array` for info on the forms this can take)
* @url http://www.espruino.com/Reference#l__global_shiftOut
*/
declare function shiftOut(pins: Pin | Pin[], options: { clk?: Pin, clkPol?: boolean, repeat?: number }, data: Uint8ArrayResolvable): void;
/**
* Call the function specified when the pin changes. Watches set with `setWatch`
* can be removed using `clearWatch`.
* If the `options` parameter is an object, it can contain the following
* information (all optional):
* ```
* {
* // Whether to keep producing callbacks, or remove the watch after the first callback
* repeat: true/false(default),
* // Trigger on the rising or falling edge of the signal. Can be a string, or 1='rising', -1='falling', 0='both'
* edge:'rising'(default for built-in buttons)/'falling'/'both'(default for pins),
* // Use software-debouncing to stop multiple calls if a switch bounces
* // This is the time in milliseconds to wait for bounces to subside, or 0 to disable
* debounce:10 (0 is default for pins, 25 is default for built-in buttons),
* // Advanced: If the function supplied is a 'native' function (compiled or assembly)
* // setting irq:true will call that function in the interrupt itself
* irq : false(default)
* // Advanced: If specified, the given pin will be read whenever the watch is called
* // and the state will be included as a 'data' field in the callback
* data : pin
* // Advanced: On Nordic devices, a watch may be 'high' or 'low' accuracy. By default low
* // accuracy is used (which is better for power consumption), but this means that
* // high speed pulses (less than 25us) may not be reliably received. Setting hispeed=true
* // allows for detecting high speed pulses at the expense of higher idle power consumption
* hispeed : true
* }
* ```
* The `function` callback is called with an argument, which is an object of type
* `{state:bool, time:float, lastTime:float}`.
* * `state` is whether the pin is currently a `1` or a `0`
* * `time` is the time in seconds at which the pin changed state
* * `lastTime` is the time in seconds at which the **pin last changed state**.
* When using `edge:'rising'` or `edge:'falling'`, this is not the same as when
* the function was last called.
* * `data` is included if `data:pin` was specified in the options, and can be
* used for reading in clocked data
* For instance, if you want to measure the length of a positive pulse you could
* use `setWatch(function(e) { console.log(e.time-e.lastTime); }, BTN, {
* repeat:true, edge:'falling' });`. This will only be called on the falling edge
* of the pulse, but will be able to measure the width of the pulse because
* `e.lastTime` is the time of the rising edge.
* Internally, an interrupt writes the time of the pin's state change into a queue
* with the exact time that it happened, and the function supplied to `setWatch` is
* executed only from the main message loop. However, if the callback is a native
* function `void (bool state)` then you can add `irq:true` to options, which will
* cause the function to be called from within the IRQ. When doing this, interrupts
* will happen on both edges and there will be no debouncing.
* **Note:** if you didn't call `pinMode` beforehand then this function will reset
* pin's state to `"input"`
* **Note:** The STM32 chip (used in the [Espruino Board](/EspruinoBoard) and
* [Pico](/Pico)) cannot watch two pins with the same number - e.g. `A0` and `B0`.
* **Note:** On nRF52 chips (used in Puck.js, Pixl.js, MDBT42Q) `setWatch` disables
* the GPIO output on that pin. In order to be able to write to the pin again you
* need to disable the watch with `clearWatch`.
*
* @param {any} function - A Function or String to be executed
* @param {Pin} pin - The pin to watch
* @param {any} options - If a boolean or integer, it determines whether to call this once (false = default) or every time a change occurs (true). Can be an object of the form `{ repeat: true/false(default), edge:'rising'/'falling'/'both'(default), debounce:10}` - see below for more information.
* @returns {any} An ID that can be passed to clearWatch
* @url http://www.espruino.com/Reference#l__global_setWatch
*/
declare function setWatch(func: ((arg: { state: boolean, time: number, lastTime: number }) => void) | string, pin: Pin, options?: boolean | { repeat?: boolean, edge?: "rising" | "falling" | "both", debounce?: number, irq?: boolean, data?: Pin, hispeed?: boolean }): number;
/**
* Clear the Watch that was created with setWatch. If no parameter is supplied, all watches will be removed.
* To avoid accidentally deleting all Watches, if a parameter is supplied but is `undefined` then an Exception will be thrown.
*
* @param {any} id - The id returned by a previous call to setWatch. **Only one argument is allowed.**
* @url http://www.espruino.com/Reference#l__global_clearWatch
*/
declare function clearWatch(id: number): void;
/**
* A variable containing the arguments given to the function:
* ```
* function hello() {
* console.log(arguments.length, JSON.stringify(arguments));
* }
* hello() // 0 []
* hello("Test") // 1 ["Test"]
* hello(1,2,3) // 3 [1,2,3]
* ```
* **Note:** Due to the way Espruino works this is doesn't behave exactly the same
* as in normal JavaScript. The length of the arguments array will never be less
* than the number of arguments specified in the function declaration:
* `(function(a){ return arguments.length; })() == 1`. Normal JavaScript
* interpreters would return `0` in the above case.
* @returns {any} An array containing all the arguments given to the function
* @url http://www.espruino.com/Reference#l__global_arguments
*/
declare const arguments: any;
/**
* Evaluate a string containing JavaScript code
*
* @param {any} code
* @returns {any} The result of evaluating the string
* @url http://www.espruino.com/Reference#l__global_eval
*/
declare function eval(code: any): any;
/**
* Convert a string representing a number into an integer
*
* @param {any} string
* @param {any} [radix] - [optional] The Radix of the string
* @returns {any} The integer value of the string (or NaN)
* @url http://www.espruino.com/Reference#l__global_parseInt
*/
declare function parseInt(string: any, radix?: any): any;
/**
* Convert a string representing a number into an float
*
* @param {any} string
* @returns {number} The value of the string
* @url http://www.espruino.com/Reference#l__global_parseFloat
*/
declare function parseFloat(string: any): number;
/**
* Is the parameter a finite number or not? If needed, the parameter is first
* converted to a number.
*
* @param {any} x
* @returns {boolean} True is the value is a Finite number, false if not.
* @url http://www.espruino.com/Reference#l__global_isFinite
*/
declare function isFinite(x: any): boolean;
/**
* Whether the x is NaN (Not a Number) or not
*
* @param {any} x
* @returns {boolean} True is the value is NaN, false if not.
* @url http://www.espruino.com/Reference#l__global_isNaN
*/
declare function isNaN(x: any): boolean;
/**
* Encode the supplied string (or array) into a base64 string
*
* @param {any} binaryData - A string of data to encode
* @returns {any} A base64 encoded string
* @url http://www.espruino.com/Reference#l__global_btoa
*/
declare function btoa(binaryData: any): any;
/**
* Decode the supplied base64 string into a normal string
*
* @param {any} base64Data - A string of base64 data to decode
* @returns {any} A string containing the decoded data
* @url http://www.espruino.com/Reference#l__global_atob
*/
declare function atob(base64Data: any): any;
/**
* Convert a string with any character not alphanumeric or `- _ . ! ~ * ' ( )`
* converted to the form `%XY` where `XY` is its hexadecimal representation
*
* @param {any} str - A string to encode as a URI
* @returns {any} A string containing the encoded data
* @url http://www.espruino.com/Reference#l__global_encodeURIComponent
*/
declare function encodeURIComponent(str: any): any;
/**
* Convert any groups of characters of the form '%ZZ', into characters with hex
* code '0xZZ'
*
* @param {any} str - A string to decode from a URI
* @returns {any} A string containing the decoded data
* @url http://www.espruino.com/Reference#l__global_decodeURIComponent
*/
declare function decodeURIComponent(str: any): any;
/**
* Output debugging information
* Note: This is not included on boards with low amounts of flash memory, or the
* Espruino board.
*
* @param {any} root - The symbol to output (optional). If nothing is specified, everything will be output
* @url http://www.espruino.com/Reference#l__global_trace
*/
declare function trace(root: any): void;
/**
* Print the supplied string(s) to the console
* **Note:** If you're connected to a computer (not a wall adaptor) via USB but
* **you are not running a terminal app** then when you print data Espruino may
* pause execution and wait until the computer requests the data it is trying to
* print.
*
* @param {any} text
* @url http://www.espruino.com/Reference#l__global_print
*/
declare function print(...text: any[]): void;
declare function require(moduleName: "ESP8266"): typeof import("ESP8266");
declare function require(moduleName: "crypto"): typeof import("crypto");
declare function require(moduleName: "neopixel"): typeof import("neopixel");
declare function require(moduleName: "net"): typeof import("net");
declare function require(moduleName: "dgram"): typeof import("dgram");
declare function require(moduleName: "tls"): typeof import("tls");
declare function require(moduleName: "Wifi"): typeof import("Wifi");
declare function require(moduleName: "NetworkJS"): typeof import("NetworkJS");
declare function require(moduleName: "http"): typeof import("http");
declare function require(moduleName: "WIZnet"): typeof import("WIZnet");
declare function require(moduleName: "CC3000"): typeof import("CC3000");
declare function require(moduleName: "TelnetServer"): typeof import("TelnetServer");
declare function require(moduleName: "fs"): typeof import("fs");
declare function require(moduleName: "tv"): typeof import("tv");
declare function require(moduleName: "tensorflow"): typeof import("tensorflow");
declare function require(moduleName: "heatshrink"): typeof import("heatshrink");
declare function require(moduleName: "Flash"): typeof import("Flash");
declare function require(moduleName: "Storage"): typeof import("Storage");
declare function require(moduleName: string): any;
/**
* The filename of the JavaScript that is currently executing.
* If `load` has been called with a filename (eg `load("myfile.js")`) then
* `__FILE__` is set to that filename. Otherwise (eg `load()`) or immediately
* after booting, `__FILE__` is not set.
* @returns {any} The filename of the JavaScript that is currently executing
* @url http://www.espruino.com/Reference#l__global___FILE__
*/
declare const __FILE__: any;
/**
* The first SPI port
* @url http://www.espruino.com/Reference#l__global_SPI1
*/
declare const SPI1: SPI;
/**
* The second SPI port
* @url http://www.espruino.com/Reference#l__global_SPI2
*/
declare const SPI2: SPI;
/**
* The third SPI port
* @url http://www.espruino.com/Reference#l__global_SPI3
*/
declare const SPI3: SPI;
/**
* The first I2C port
* @url http://www.espruino.com/Reference#l__global_I2C1
*/
declare const I2C1: I2C;
/**
* The second I2C port
* @url http://www.espruino.com/Reference#l__global_I2C2
*/
declare const I2C2: I2C;
/**
* The third I2C port
* @url http://www.espruino.com/Reference#l__global_I2C3
*/
declare const I2C3: I2C;
/**
* The USB Serial port
* @url http://www.espruino.com/Reference#l__global_USB
*/
declare const USB: Serial;
/**
* The first Serial (USART) port
* @url http://www.espruino.com/Reference#l__global_Serial1
*/
declare const Serial1: Serial;
/**
* The second Serial (USART) port
* @url http://www.espruino.com/Reference#l__global_Serial2
*/
declare const Serial2: Serial;
/**
* The third Serial (USART) port
* @url http://www.espruino.com/Reference#l__global_Serial3
*/
declare const Serial3: Serial;
/**
* The fourth Serial (USART) port
* @url http://www.espruino.com/Reference#l__global_Serial4
*/
declare const Serial4: Serial;
/**
* The fifth Serial (USART) port
* @url http://www.espruino.com/Reference#l__global_Serial5
*/
declare const Serial5: Serial;
/**
* The sixth Serial (USART) port
* @url http://www.espruino.com/Reference#l__global_Serial6
*/
declare const Serial6: Serial;
/**
* A loopback serial device. Data sent to `LoopbackA` comes out of `LoopbackB` and
* vice versa
* @url http://www.espruino.com/Reference#l__global_LoopbackA
*/
declare const LoopbackA: Serial;
/**
* A loopback serial device. Data sent to `LoopbackA` comes out of `LoopbackB` and
* vice versa
* @url http://www.espruino.com/Reference#l__global_LoopbackB
*/
declare const LoopbackB: Serial;
/**
* A telnet serial device that maps to the built-in telnet console server (devices
* that have built-in wifi only).
* @url http://www.espruino.com/Reference#l__global_Telnet
*/
declare const Telnet: Serial;
/**
* @returns {number} Not a Number
* @url http://www.espruino.com/Reference#l__global_NaN
*/
declare const NaN: number;
/**
* @returns {number} Positive Infinity (1/0)
* @url http://www.espruino.com/Reference#l__global_Infinity
*/
declare const Infinity: number;
/**
* @returns {number} Logic 1 for Arduino compatibility - this is the same as just typing `1`
* @url http://www.espruino.com/Reference#l__global_HIGH
*/
declare const HIGH: true;
/**
* @returns {number} Logic 0 for Arduino compatibility - this is the same as just typing `0`
* @url http://www.espruino.com/Reference#l__global_LOW
*/
declare const LOW: false;
// LIBRARIES
/**
* The ESP8266 library is specific to the ESP8266 version of Espruino, i.e.,
* running Espruino on an ESP8266 module (not to be confused with using the ESP8266
* as Wifi add-on to an Espruino board). This library contains functions to handle
* ESP8266-specific actions. For example: `var esp8266 = require('ESP8266');
* esp8266.reboot();` performs a hardware reset of the module.
* @url http://www.espruino.com/Reference#ESP8266
*/
declare module "ESP8266" {
/**
* Perform a hardware reset/reboot of the esp8266.
* @url http://www.espruino.com/Reference#l_ESP8266_reboot
*/
function reboot(): void;
/**
* At boot time the esp8266's firmware captures the cause of the reset/reboot. This
* function returns this information in an object with the following fields:
* * `reason`: "power on", "wdt reset", "exception", "soft wdt", "restart", "deep
* sleep", or "reset pin"
* * `exccause`: exception cause
* * `epc1`, `epc2`, `epc3`: instruction pointers
* * `excvaddr`: address being accessed
* * `depc`: (?)
* @returns {any} An object with the reset cause information
* @url http://www.espruino.com/Reference#l_ESP8266_getResetInfo
*/
function getResetInfo(): any;
/**
* Enable or disable the logging of debug information. A value of `true` enables
* debug logging while a value of `false` disables debug logging. Debug output is
* sent to UART1 (gpio2).
*
* @param {boolean} enable - Enable or disable the debug logging.
* @url http://www.espruino.com/Reference#l_ESP8266_logDebug
*/
function logDebug(enable: boolean): void;
/**
* Set the debug logging mode. It can be disabled (which frees ~1.2KB of heap),
* enabled in-memory only, or in-memory and output to a UART.
*
* @param {number} mode - Debug log mode: 0=off, 1=in-memory only, 2=in-mem and uart0, 3=in-mem and uart1.
* @url http://www.espruino.com/Reference#l_ESP8266_setLog
*/
function setLog(mode: number): void;
/**
* Prints the contents of the debug log to the console.
* @url http://www.espruino.com/Reference#l_ESP8266_printLog
*/
function printLog(): void;
/**
* Returns one line from the log or up to 128 characters.
* @url http://www.espruino.com/Reference#l_ESP8266_readLog
*/
function readLog(): void;
/**
* Dumps info about all sockets to the log. This is for troubleshooting the socket
* implementation.
* @url http://www.espruino.com/Reference#l_ESP8266_dumpSocketInfo
*/
function dumpSocketInfo(): void;
/**
* **Note:** This is deprecated. Use `E.setClock(80/160)` **Note:** Set the
* operating frequency of the ESP8266 processor. The default is 160Mhz.
* **Warning**: changing the cpu frequency affects the timing of some I/O
* operations, notably of software SPI and I2C, so things may be a bit slower at
* 80Mhz.
*
* @param {any} freq - Desired frequency - either 80 or 160.
* @url http://www.espruino.com/Reference#l_ESP8266_setCPUFreq
*/
function setCPUFreq(freq: any): void;
/**
* Returns an object that contains details about the state of the ESP8266 with the
* following fields:
* * `sdkVersion` - Version of the SDK.
* * `cpuFrequency` - CPU operating frequency in Mhz.
* * `freeHeap` - Amount of free heap in bytes.
* * `maxCon` - Maximum number of concurrent connections.
* * `flashMap` - Configured flash size&map: '512KB:256/256' .. '4MB:512/512'
* * `flashKB` - Configured flash size in KB as integer
* * `flashChip` - Type of flash chip as string with manufacturer & chip, ex: '0xEF
* 0x4016`
* @returns {any} The state of the ESP8266
* @url http://www.espruino.com/Reference#l_ESP8266_getState
*/
function getState(): any;
/**
* **Note:** This is deprecated. Use `require("Flash").getFree()`
* @returns {any} Array of objects with `addr` and `length` properties describing the free flash areas available
* @url http://www.espruino.com/Reference#l_ESP8266_getFreeFlash
*/
function getFreeFlash(): any;
/**
*
* @param {any} arrayOfData - Array of data to CRC
* @returns {any} 32-bit CRC
* @url http://www.espruino.com/Reference#l_ESP8266_crc32
*/
function crc32(arrayOfData: any): any;
/**
* **This function is deprecated.** Please use `require("neopixel").write(pin,
* data)` instead
*
* @param {Pin} pin - Pin for output signal.
* @param {any} arrayOfData - Array of LED data.
* @url http://www.espruino.com/Reference#l_ESP8266_neopixelWrite
*/
function neopixelWrite(pin: Pin, arrayOfData: any): void;
/**
* Put the ESP8266 into 'deep sleep' for the given number of microseconds, reducing
* power consumption drastically.
* meaning of option values:
* 0 - the 108th Byte of init parameter decides whether RF calibration will be
* performed or not.
* 1 - run RF calibration after waking up. Power consumption is high.
* 2 - no RF calibration after waking up. Power consumption is low.
* 4 - no RF after waking up. Power consumption is the lowest.
* **Note:** unlike normal Espruino boards' 'deep sleep' mode, ESP8266 deep sleep
* actually turns off the processor. After the given number of microseconds have
* elapsed, the ESP8266 will restart as if power had been turned off and then back
* on. *All contents of RAM will be lost*. Connect GPIO 16 to RST to enable wakeup.
* **Special:** 0 microseconds cause sleep forever until external wakeup RST pull
* down occurs.
*
* @param {any} micros - Number of microseconds to sleep.
* @param {any} option - posible values are 0, 1, 2 or 4
* @url http://www.espruino.com/Reference#l_ESP8266_deepSleep
*/
function deepSleep(micros: any, option: any): void;
/**
* **DEPRECATED** - please use `Wifi.ping` instead.
* Perform a network ping request. The parameter can be either a String or a
* numeric IP address.
*
* @param {any} ipAddr - A string representation of an IP address.
* @param {any} pingCallback - Optional callback function.
* @url http://www.espruino.com/Reference#l_ESP8266_ping
*/
function ping(ipAddr: any, pingCallback: any): void;
}
/**
* Cryptographic functions
* **Note:** This library is currently only included in builds for boards where
* there is space. For other boards there is `crypto.js` which implements SHA1 in
* JS.
* @url http://www.espruino.com/Reference#crypto
*/
declare module "crypto" {
/**
* Class containing AES encryption/decryption
* @returns {any}
* @url http://www.espruino.com/Reference#l_crypto_AES
*/
const AES: AES;
/**
* Performs a SHA1 hash and returns the result as a 20 byte ArrayBuffer.
* **Note:** On some boards (currently only Espruino Original) there isn't space
* for a fully unrolled SHA1 implementation so a slower all-JS implementation is
* used instead.
*
* @param {any} message - The message to apply the hash to
* @returns {any} Returns a 20 byte ArrayBuffer
* @url http://www.espruino.com/Reference#l_crypto_SHA1
*/
function SHA1(message: any): ArrayBuffer;
/**
* Performs a SHA224 hash and returns the result as a 28 byte ArrayBuffer
*
* @param {any} message - The message to apply the hash to
* @returns {any} Returns a 20 byte ArrayBuffer
* @url http://www.espruino.com/Reference#l_crypto_SHA224
*/
function SHA224(message: any): ArrayBuffer;
/**
* Performs a SHA256 hash and returns the result as a 32 byte ArrayBuffer
*
* @param {any} message - The message to apply the hash to
* @returns {any} Returns a 20 byte ArrayBuffer
* @url http://www.espruino.com/Reference#l_crypto_SHA256
*/
function SHA256(message: any): ArrayBuffer;
/**
* Performs a SHA384 hash and returns the result as a 48 byte ArrayBuffer
*
* @param {any} message - The message to apply the hash to
* @returns {any} Returns a 20 byte ArrayBuffer
* @url http://www.espruino.com/Reference#l_crypto_SHA384
*/
function SHA384(message: any): ArrayBuffer;
/**
* Performs a SHA512 hash and returns the result as a 64 byte ArrayBuffer
*
* @param {any} message - The message to apply the hash to
* @returns {any} Returns a 32 byte ArrayBuffer
* @url http://www.espruino.com/Reference#l_crypto_SHA512
*/
function SHA512(message: any): ArrayBuffer;
/**
* Password-Based Key Derivation Function 2 algorithm, using SHA512
*
* @param {any} passphrase - Passphrase
* @param {any} salt - Salt for turning passphrase into a key
* @param {any} options - Object of Options, `{ keySize: 8 (in 32 bit words), iterations: 10, hasher: 'SHA1'/'SHA224'/'SHA256'/'SHA384'/'SHA512' }`
* @returns {any} Returns an ArrayBuffer
* @url http://www.espruino.com/Reference#l_crypto_PBKDF2
*/
function PBKDF2(passphrase: any, salt: any, options: any): ArrayBuffer;
}
/**
* This library allows you to write to Neopixel/WS281x/APA10x/SK6812 LED strips
* These use a high speed single-wire protocol which needs platform-specific
* implementation on some devices - hence this library to simplify things.
* @url http://www.espruino.com/Reference#neopixel
*/
declare module "neopixel" {
/**
* Write to a strip of NeoPixel/WS281x/APA104/APA106/SK6812-style LEDs attached to
* the given pin.
* ```
* // set just one pixel, red, green, blue
* require("neopixel").write(B15, [255,0,0]);
* ```
* ```
* // Produce an animated rainbow over 25 LEDs
* var rgb = new Uint8ClampedArray(25*3);
* var pos = 0;
* function getPattern() {
* pos++;
* for (var i=0;i<rgb.length;) {
* rgb[i++] = (1 + Math.sin((i+pos)*0.1324)) * 127;
* rgb[i++] = (1 + Math.sin((i+pos)*0.1654)) * 127;
* rgb[i++] = (1 + Math.sin((i+pos)*0.1)) * 127;
* }
* return rgb;
* }
* setInterval(function() {
* require("neopixel").write(B15, getPattern());
* }, 100);
* ```
* **Note:**
* * Different types of LED have the data in different orders - so don't be
* surprised by RGB or BGR orderings!
* * Some LED strips (SK6812) actually take 4 bytes per LED (red, green, blue and
* white). These are still supported but the array of data supplied must still be a
* multiple of 3 bytes long. Just round the size up - it won't cause any problems.
* * On some platforms like STM32, pins capable of hardware SPI MOSI are required.
* * Espruino devices tend to have 3.3v IO, while WS2812/etc run off of 5v. Many
* WS2812 will only register a logic '1' at 70% of their input voltage - so if
* powering them off 5v you will not be able to send them data reliably. You can
* work around this by powering the LEDs off a lower voltage (for example 3.7v from
* a LiPo battery), can put the output into the `af_opendrain` state and use a
* pullup resistor to 5v on STM32 based boards (nRF52 are not 5v tolerant so you
* can't do this), or can use a level shifter to shift the voltage up into the 5v
* range.
*
* @param {Pin} pin - The Pin the LEDs are connected to
* @param {any} data - The data to write to the LED strip (must be a multiple of 3 bytes long)
* @url http://www.espruino.com/Reference#l_neopixel_write
*/
function write(pin: Pin, data: any): void;
}
/**
* This library allows you to create TCPIP servers and clients
* In order to use this, you will need an extra module to get network connectivity.
* This is designed to be a cut-down version of the [node.js
* library](http://nodejs.org/api/net.html). Please see the [Internet](/Internet)
* page for more information on how to use it.
* @url http://www.espruino.com/Reference#net
*/
declare module "net" {
/**
* Create a Server
* When a request to the server is made, the callback is called. In the callback
* you can use the methods on the connection to send data. You can also add
* `connection.on('data',function() { ... })` to listen for received data
*
* @param {any} callback - A `function(connection)` that will be called when a connection is made
* @returns {any} Returns a new Server Object
* @url http://www.espruino.com/Reference#l_net_createServer
*/
function createServer(callback: any): Server;
/**
* Create a TCP socket connection
*
* @param {any} options - An object containing host,port fields
* @param {any} callback - A `function(sckt)` that will be called with the socket when a connection is made. You can then call `sckt.write(...)` to send data, and `sckt.on('data', function(data) { ... })` and `sckt.on('close', function() { ... })` to deal with the response.
* @returns {any} Returns a new net.Socket object
* @url http://www.espruino.com/Reference#l_net_connect
*/
function connect(options: any, callback: any): Socket;
}
/**
* This library allows you to create UDP/DATAGRAM servers and clients
* In order to use this, you will need an extra module to get network connectivity.
* This is designed to be a cut-down version of the [node.js
* library](http://nodejs.org/api/dgram.html). Please see the [Internet](/Internet)
* page for more information on how to use it.
* @url http://www.espruino.com/Reference#dgram
*/
declare module "dgram" {
/**
* Create a UDP socket
*
* @param {any} type - Socket type to create e.g. 'udp4'. Or options object { type: 'udp4', reuseAddr: true, recvBufferSize: 1024 }
* @param {any} callback - A `function(sckt)` that will be called with the socket when a connection is made. You can then call `sckt.send(...)` to send data, and `sckt.on('message', function(data) { ... })` and `sckt.on('close', function() { ... })` to deal with the response.
* @returns {any} Returns a new dgram.Socket object
* @url http://www.espruino.com/Reference#l_dgram_createSocket
*/
function createSocket(type: any, callback: any): dgramSocket;
}
/**
* This library allows you to create TCPIP servers and clients using TLS encryption
* In order to use this, you will need an extra module to get network connectivity.
* This is designed to be a cut-down version of the [node.js
* library](http://nodejs.org/api/tls.html). Please see the [Internet](/Internet)
* page for more information on how to use it.
* @url http://www.espruino.com/Reference#tls
*/
declare module "tls" {
/**
* Create a socket connection using TLS
* Options can have `ca`, `key` and `cert` fields, which should be the decoded
* content of the certificate.
* ```
* var options = url.parse("localhost:1234");
* options.key = atob("MIIJKQ ... OZs08C");
* options.cert = atob("MIIFi ... Uf93rN+");
* options.ca = atob("MIIFgDCC ... GosQML4sc=");
* require("tls").connect(options, ... );
* ```
* If you have the certificates as `.pem` files, you need to load these files, take
* the information between the lines beginning with `----`, remove the newlines
* from it so you have raw base64, and then feed it into `atob` as above.
* You can also:
* * Just specify the filename (<=100 characters) and it will be loaded and parsed
* if you have an SD card connected. For instance `options.key = "key.pem";`
* * Specify a function, which will be called to retrieve the data. For instance
* `options.key = function() { eeprom.load_my_info(); };
* For more information about generating and using certificates, see:
* https://engineering.circle.com/https-authorized-certs-with-node-js/
* (You'll need to use 2048 bit certificates as opposed to 4096 bit shown above)
*
* @param {any} options - An object containing host,port fields
* @param {any} callback - A function(res) that will be called when a connection is made. You can then call `res.on('data', function(data) { ... })` and `res.on('close', function() { ... })` to deal with the response.
* @returns {any} Returns a new net.Socket object
* @url http://www.espruino.com/Reference#l_tls_connect
*/
function connect(options: any, callback: any): Socket;
}
/**
* The Wifi library is designed to control the Wifi interface. It supports
* functionality such as connecting to wifi networks, getting network information,
* starting an access point, etc.
* It is available on these devices:
* * [Espruino WiFi](http://www.espruino.com/WiFi#using-wifi)
* * [ESP8266](http://www.espruino.com/EspruinoESP8266)
* * [ESP32](http://www.espruino.com/ESP32)
* **Certain features may or may not be implemented on your device** however we
* have documented what is available and what isn't.
* If you're not using one of the devices above, a separate WiFi library is
* provided. For instance:
* * An [ESP8266 connected to an Espruino
* board](http://www.espruino.com/ESP8266#software)
* * An [CC3000 WiFi Module](http://www.espruino.com/CC3000)
* [Other ways of connecting to the
* net](http://www.espruino.com/Internet#related-pages) such as GSM, Ethernet and
* LTE have their own libraries.
* You can use the WiFi library as follows:
* ```
* var wifi = require("Wifi");
* wifi.connect("my-ssid", {password:"my-pwd"}, function(ap){ console.log("connected:", ap); });
* ```
* On ESP32/ESP8266 if you want the connection to happen automatically at boot, add
* `wifi.save();`. On other platforms, place `wifi.connect` in a function called
* `onInit`.
* @url http://www.espruino.com/Reference#Wifi
*/
declare module "Wifi" {
/**
* The 'associated' event is called when an association with an access point has
* succeeded, i.e., a connection to the AP's network has been established.
* On ESP32/ESP8266 there is a `details` parameter which includes:
* * ssid - The SSID of the access point to which the association was established
* * mac - The BSSID/mac address of the access point
* * channel - The wifi channel used (an integer, typ 1..14)
* @param {string} event - The event to listen to.
* @param {(details: any) => void} callback - A function that is executed when the event occurs. Its arguments are:
* * `details` An object with event details
* @url http://www.espruino.com/Reference#l_Wifi_associated
*/
function on(event: "associated", callback: (details: any) => void): void;
/**
* The 'disconnected' event is called when an association with an access point has
* been lost.
* On ESP32/ESP8266 there is a `details` parameter which includes:
* * ssid - The SSID of the access point from which the association was lost
* * mac - The BSSID/mac address of the access point
* * reason - The reason for the disconnection (string)
* @param {string} event - The event to listen to.
* @param {(details: any) => void} callback - A function that is executed when the event occurs. Its arguments are:
* * `details` An object with event details
* @url http://www.espruino.com/Reference#l_Wifi_disconnected
*/
function on(event: "disconnected", callback: (details: any) => void): void;
/**
* The 'auth_change' event is called when the authentication mode with the
* associated access point changes. The details include:
* * oldMode - The old auth mode (string: open, wep, wpa, wpa2, wpa_wpa2)
* * newMode - The new auth mode (string: open, wep, wpa, wpa2, wpa_wpa2)
* @param {string} event - The event to listen to.
* @param {(details: any) => void} callback - A function that is executed when the event occurs. Its arguments are:
* * `details` An object with event details
* @url http://www.espruino.com/Reference#l_Wifi_auth_change
*/
function on(event: "auth_change", callback: (details: any) => void): void;
/**
* The 'dhcp_timeout' event is called when a DHCP request to the connected access
* point fails and thus no IP address could be acquired (or renewed).
* @param {string} event - The event to listen to.
* @param {() => void} callback - A function that is executed when the event occurs.
* @url http://www.espruino.com/Reference#l_Wifi_dhcp_timeout
*/
function on(event: "dhcp_timeout", callback: () => void): void;
/**
* The 'connected' event is called when the connection with an access point is
* ready for traffic. In the case of a dynamic IP address configuration this is
* when an IP address is obtained, in the case of static IP address allocation this
* happens when an association is formed (in that case the 'associated' and
* 'connected' events are fired in rapid succession).
* On ESP32/ESP8266 there is a `details` parameter which includes:
* * ip - The IP address obtained as string
* * netmask - The network's IP range mask as string
* * gw - The network's default gateway as string
* @param {string} event - The event to listen to.
* @param {(details: any) => void} callback - A function that is executed when the event occurs. Its arguments are:
* * `details` An object with event details
* @url http://www.espruino.com/Reference#l_Wifi_connected
*/
function on(event: "connected", callback: (details: any) => void): void;
/**
* The 'sta_joined' event is called when a station establishes an association (i.e.
* connects) with the esp8266's access point. The details include:
* * mac - The MAC address of the station in string format (00:00:00:00:00:00)
* @param {string} event - The event to listen to.
* @param {(details: any) => void} callback - A function that is executed when the event occurs. Its arguments are:
* * `details` An object with event details
* @url http://www.espruino.com/Reference#l_Wifi_sta_joined
*/
function on(event: "sta_joined", callback: (details: any) => void): void;
/**
* The 'sta_left' event is called when a station disconnects from the esp8266's
* access point (or its association times out?). The details include:
* * mac - The MAC address of the station in string format (00:00:00:00:00:00)
* @param {string} event - The event to listen to.
* @param {(details: any) => void} callback - A function that is executed when the event occurs. Its arguments are:
* * `details` An object with event details
* @url http://www.espruino.com/Reference#l_Wifi_sta_left
*/
function on(event: "sta_left", callback: (details: any) => void): void;
/**
* The 'probe_recv' event is called when a probe request is received from some
* station by the esp8266's access point. The details include:
* * mac - The MAC address of the station in string format (00:00:00:00:00:00)
* * rssi - The signal strength in dB of the probe request
* @param {string} event - The event to listen to.
* @param {(details: any) => void} callback - A function that is executed when the event occurs. Its arguments are:
* * `details` An object with event details
* @url http://www.espruino.com/Reference#l_Wifi_probe_recv
*/
function on(event: "probe_recv", callback: (details: any) => void): void;
/**
* Disconnect the wifi station from an access point and disable the station mode.
* It is OK to call `disconnect` to turn off station mode even if no connection
* exists (for example, connection attempts may be failing). Station mode can be
* re-enabled by calling `connect` or `scan`.
*
* @param {any} [callback] - [optional] An `callback()` function to be called back on disconnection. The callback function receives no argument.
* @url http://www.espruino.com/Reference#l_Wifi_disconnect
*/
function disconnect(callback?: any): void;
/**
* Stop being an access point and disable the AP operation mode. AP mode can be
* re-enabled by calling `startAP`.
*
* @param {any} [callback] - [optional] An `callback()` function to be called back on successful stop. The callback function receives no argument.
* @url http://www.espruino.com/Reference#l_Wifi_stopAP
*/
function stopAP(callback?: any): void;
/**
* Connect to an access point as a station. If there is an existing connection to
* an AP it is first disconnected if the SSID or password are different from those
* passed as parameters. Put differently, if the passed SSID and password are
* identical to the currently connected AP then nothing is changed. When the
* connection attempt completes the callback function is invoked with one `err`
* parameter, which is NULL if there is no error and a string message if there is
* an error. If DHCP is enabled the callback occurs once an IP address has been
* obtained, if a static IP is set the callback occurs once the AP's network has
* been joined. The callback is also invoked if a connection already exists and
* does not need to be changed.
* The options properties may contain:
* * `password` - Password string to be used to access the network.
* * `dnsServers` (array of String) - An array of up to two DNS servers in dotted
* decimal format string.
* * `channel` - Wifi channel of the access point (integer, typ 0..14, 0 means any
* channel), only on ESP8266.
* * `bssid` - Mac address of the access point (string, type "00:00:00:00:00:00"),
* only on ESP8266.
* Notes:
* * the options should include the ability to set a static IP and associated
* netmask and gateway, this is a future enhancement.
* * the only error reported in the callback is "Bad password", all other errors
* (such as access point not found or DHCP timeout) just cause connection
* retries. If the reporting of such temporary errors is desired, the caller must
* use its own timeout and the `getDetails().status` field.
* * the `connect` call automatically enabled station mode, it can be disabled
* again by calling `disconnect`.
*
* @param {any} ssid - The access point network id.
* @param {any} [options] - [optional] Connection options.
* @param {any} callback - A `callback(err)` function to be called back on completion. `err` is null on success, or contains an error string on failure.
* @url http://www.espruino.com/Reference#l_Wifi_connect
*/
function connect(ssid: string, options?: { password?: string, dnsServers?: string[], authMode?: string, channel?: number, bssid?: string }, callback?: (err: string | null) => void): void;
/**
* Perform a scan for access points. This will enable the station mode if it is not
* currently enabled. Once the scan is complete the callback function is called
* with an array of APs found, each AP is an object with:
* * `ssid`: SSID string.
* * `mac`: access point MAC address in 00:00:00:00:00:00 format.
* * `authMode`: `open`, `wep`, `wpa`, `wpa2`, or `wpa_wpa2`.
* * `channel`: wifi channel 1..13.
* * `hidden`: true if the SSID is hidden (ESP32/ESP8266 only)
* * `rssi`: signal strength in dB in the range -110..0.
* Notes:
* * in order to perform the scan the station mode is turned on and remains on, use
* Wifi.disconnect() to turn it off again, if desired.
* * only one scan can be in progress at a time.
*
* @param {any} callback - A `callback(err, ap_list)` function to be called back on completion. `err==null` and `ap_list` is an array on success, or `err` is an error string and `ap_list` is undefined on failure.
* @url http://www.espruino.com/Reference#l_Wifi_scan
*/
function scan(callback: any): void;
/**
* Create a WiFi access point allowing stations to connect. If the password is NULL
* or an empty string the access point is open, otherwise it is encrypted. The
* callback function is invoked once the access point is set-up and receives one
* `err` argument, which is NULL on success and contains an error message string
* otherwise.
* The `options` object can contain the following properties.
* * `authMode` - The authentication mode to use. Can be one of "open", "wpa2",
* "wpa", "wpa_wpa2". The default is open (but open access points are not
* recommended).
* * `password` - The password for connecting stations if authMode is not open.
* * `channel` - The channel to be used for the access point in the range 1..13. If
* the device is also connected to an access point as a station then that access
* point determines the channel.
* * `hidden` - The flag if visible or not (0:visible, 1:hidden), default is
* visible.
* Notes:
* * the options should include the ability to set the AP IP and associated
* netmask, this is a future enhancement.
* * the `startAP` call automatically enables AP mode. It can be disabled again by
* calling `stopAP`.
*
* @param {any} ssid - The network id.
* @param {any} [options] - [optional] Configuration options.
* @param {any} callback - Optional `callback(err)` function to be called when the AP is successfully started. `err==null` on success, or an error string on failure.
* @url http://www.espruino.com/Reference#l_Wifi_startAP
*/
function startAP(ssid: string, options?: { password?: string, authMode?: "open" | "wpa2" | "wpa" | "wpa_wpa2", channel?: number, hidden?: boolean }, callback?: (err: string | null) => void): void;
/**
* Retrieve the current overall WiFi configuration. This call provides general
* information that pertains to both station and access point modes. The getDetails
* and getAPDetails calls provide more in-depth information about the station and
* access point configurations, respectively. The status object has the following
* properties:
* * `station` - Status of the wifi station: `off`, `connecting`, ...
* * `ap` - Status of the wifi access point: `disabled`, `enabled`.
* * `mode` - The current operation mode: `off`, `sta`, `ap`, `sta+ap`.
* * `phy` - Modulation standard configured: `11b`, `11g`, `11n` (the esp8266 docs
* are not very clear, but it is assumed that 11n means b/g/n). This setting
* limits the modulations that the radio will use, it does not indicate the
* current modulation used with a specific access point.
* * `powersave` - Power saving mode: `none` (radio is on all the time), `ps-poll`
* (radio is off between beacons as determined by the access point's DTIM
* setting). Note that in 'ap' and 'sta+ap' modes the radio is always on, i.e.,
* no power saving is possible.
* * `savedMode` - The saved operation mode which will be applied at boot time:
* `off`, `sta`, `ap`, `sta+ap`.
*
* @param {any} callback - Optional `callback(status)` function to be called back with the current Wifi status, i.e. the same object as returned directly.
* @returns {any} An object representing the current WiFi status, if available immediately.
* @url http://www.espruino.com/Reference#l_Wifi_getStatus
*/
function getStatus(callback: any): any;
/**
* Sets a number of global wifi configuration settings. All parameters are optional
* and which are passed determines which settings are updated. The settings
* available are:
* * `phy` - Modulation standard to allow: `11b`, `11g`, `11n` (the esp8266 docs
* are not very clear, but it is assumed that 11n means b/g/n).
* * `powersave` - Power saving mode: `none` (radio is on all the time), `ps-poll`
* (radio is off between beacons as determined by the access point's DTIM
* setting). Note that in 'ap' and 'sta+ap' modes the radio is always on, i.e.,
* no power saving is possible.
* Note: esp8266 SDK programmers may be missing an "opmode" option to set the
* sta/ap/sta+ap operation mode. Please use connect/scan/disconnect/startAP/stopAP,
* which all set the esp8266 opmode indirectly.
*
* @param {any} settings - An object with the configuration settings to change.
* @url http://www.espruino.com/Reference#l_Wifi_setConfig
*/
function setConfig(settings: any): void;
/**
* Retrieve the wifi station configuration and status details. The details object
* has the following properties:
* * `status` - Details about the wifi station connection, one of `off`,
* `connecting`, `wrong_password`, `no_ap_found`, `connect_fail`, or `connected`.
* The off, bad_password and connected states are stable, the other states are
* transient. The connecting state will either result in connected or one of the
* error states (bad_password, no_ap_found, connect_fail) and the no_ap_found and
* connect_fail states will result in a reconnection attempt after some interval.
* * `rssi` - signal strength of the connected access point in dB, typically in the
* range -110 to 0, with anything greater than -30 being an excessively strong
* signal.
* * `ssid` - SSID of the access point.
* * `password` - the password used to connect to the access point.
* * `authMode` - the authentication used: `open`, `wpa`, `wpa2`, `wpa_wpa2` (not
* currently supported).
* * `savedSsid` - the SSID to connect to automatically at boot time, null if none.
*
* @param {any} [callback] - [optional] An `callback(details)` function to be called back with the wifi details, i.e. the same object as returned directly.
* @returns {any} An object representing the wifi station details, if available immediately.
* @url http://www.espruino.com/Reference#l_Wifi_getDetails
*/
function getDetails(callback?: any): any;
/**
* Retrieve the current access point configuration and status. The details object
* has the following properties:
* * `status` - Current access point status: `enabled` or `disabled`
* * `stations` - an array of the stations connected to the access point. This
* array may be empty. Each entry in the array is an object describing the
* station which, at a minimum contains `ip` being the IP address of the station.
* * `ssid` - SSID to broadcast.
* * `password` - Password for authentication.
* * `authMode` - the authentication required of stations: `open`, `wpa`, `wpa2`,
* `wpa_wpa2`.
* * `hidden` - True if the SSID is hidden, false otherwise.
* * `maxConn` - Max number of station connections supported.
* * `savedSsid` - the SSID to broadcast automatically at boot time, null if the
* access point is to be disabled at boot.
*
* @param {any} [callback] - [optional] A `callback(details)` function to be called back with the current access point details, i.e. the same object as returned directly.
* @returns {any} An object representing the current access point details, if available immediately.
* @url http://www.espruino.com/Reference#l_Wifi_getAPDetails
*/
function getAPDetails(callback?: any): any;
/**
* On boards where this is not available, just issue the `connect` commands you
* need to run at startup from an `onInit` function.
* Save the current wifi configuration (station and access point) to flash and
* automatically apply this configuration at boot time, unless `what=="clear"`, in
* which case the saved configuration is cleared such that wifi remains disabled at
* boot. The saved configuration includes:
* * mode (off/sta/ap/sta+ap)
* * SSIDs & passwords
* * phy (11b/g/n)
* * powersave setting
* * DHCP hostname
*
* @param {any} what - An optional parameter to specify what to save, on the esp8266 the two supported values are `clear` and `sta+ap`. The default is `sta+ap`
* @url http://www.espruino.com/Reference#l_Wifi_save
*/
function save(what: any): void;
/**
* Restores the saved Wifi configuration from flash. See `Wifi.save()`.
* @url http://www.espruino.com/Reference#l_Wifi_restore
*/
function restore(): void;
/**
* Return the station IP information in an object as follows:
* * ip - IP address as string (e.g. "192.168.1.5")
* * netmask - The interface netmask as string (ESP8266/ESP32 only)
* * gw - The network gateway as string (ESP8266/ESP32 only)
* * mac - The MAC address as string of the form 00:00:00:00:00:00
* Note that the `ip`, `netmask`, and `gw` fields are omitted if no connection is established:
*
* @param {any} [callback] - [optional] A `callback(err, ipinfo)` function to be called back with the IP information.
* @returns {any} An object representing the station IP information, if available immediately (**ONLY** on ESP8266/ESP32).
* @url http://www.espruino.com/Reference#l_Wifi_getIP
*/
function getIP(callback?: any): any;
/**
* Return the access point IP information in an object which contains:
* * ip - IP address as string (typ "192.168.4.1")
* * netmask - The interface netmask as string
* * gw - The network gateway as string
* * mac - The MAC address as string of the form 00:00:00:00:00:00
*
* @param {any} [callback] - [optional] A `callback(err, ipinfo)` function to be called back with the the IP information.
* @returns {any} An object representing the esp8266's Access Point IP information, if available immediately (**ONLY** on ESP8266/ESP32).
* @url http://www.espruino.com/Reference#l_Wifi_getAPIP
*/
function getAPIP(callback?: any): any;
/**
* Lookup the hostname and invoke a callback with the IP address as integer
* argument. If the lookup fails, the callback is invoked with a null argument.
* **Note:** only a single hostname lookup can be made at a time, concurrent
* lookups are not supported.
*
* @param {any} hostname - The hostname to lookup.
* @param {any} callback - The `callback(ip)` to invoke when the IP is returned. `ip==null` on failure.
* @url http://www.espruino.com/Reference#l_Wifi_getHostByName
*/
function getHostByName(hostname: any, callback: any): void;
/**
* Returns the hostname announced to the DHCP server and broadcast via mDNS when
* connecting to an access point.
*
* @param {any} [callback] - [optional] A `callback(hostname)` function to be called back with the hostname.
* @returns {any} The currently configured hostname, if available immediately.
* @url http://www.espruino.com/Reference#l_Wifi_getHostname
*/
function getHostname(callback?: any): any;
/**
* Set the hostname. Depending on implementation, the hostname is sent with every
* DHCP request and is broadcast via mDNS. The DHCP hostname may be visible in the
* access point and may be forwarded into DNS as hostname.local. If a DHCP lease
* currently exists changing the hostname will cause a disconnect and reconnect in
* order to transmit the change to the DHCP server. The mDNS announcement also
* includes an announcement for the "espruino" service.
*
* @param {any} hostname - The new hostname.
* @param {any} [callback] - [optional] A `callback()` function to be called back when the hostname is set
* @url http://www.espruino.com/Reference#l_Wifi_setHostname
*/
function setHostname(hostname: any, callback?: any): void;
/**
* Starts the SNTP (Simple Network Time Protocol) service to keep the clock
* synchronized with the specified server. Note that the time zone is really just
* an offset to UTC and doesn't handle daylight savings time. The interval
* determines how often the time server is queried and Espruino's time is
* synchronized. The initial synchronization occurs asynchronously after setSNTP
* returns.
*
* @param {any} server - The NTP server to query, for example, `us.pool.ntp.org`
* @param {any} tz_offset - Local time zone offset in the range -11..13.
* @url http://www.espruino.com/Reference#l_Wifi_setSNTP
*/
function setSNTP(server: any, tz_offset: any): void;
/**
* The `settings` object must contain the following properties.
* * `ip` IP address as string (e.g. "192.168.5.100")
* * `gw` The network gateway as string (e.g. "192.168.5.1")
* * `netmask` The interface netmask as string (e.g. "255.255.255.0")
*
* @param {any} settings - Configuration settings
* @param {any} callback - A `callback(err)` function to invoke when ip is set. `err==null` on success, or a string on failure.
* @url http://www.espruino.com/Reference#l_Wifi_setIP
*/
function setIP(settings: any, callback: any): void;
/**
* The `settings` object must contain the following properties.
* * `ip` IP address as string (e.g. "192.168.5.100")
* * `gw` The network gateway as string (e.g. "192.168.5.1")
* * `netmask` The interface netmask as string (e.g. "255.255.255.0")
*
* @param {any} settings - Configuration settings
* @param {any} callback - A `callback(err)` function to invoke when ip is set. `err==null` on success, or a string on failure.
* @url http://www.espruino.com/Reference#l_Wifi_setAPIP
*/
function setAPIP(settings: any, callback: any): void;
/**
* Issues a ping to the given host, and calls a callback with the time when the
* ping is received.
*
* @param {any} hostname - The host to ping
* @param {any} callback - A `callback(time)` function to invoke when a ping is received
* @url http://www.espruino.com/Reference#l_Wifi_ping
*/
function ping(hostname: any, callback: any): void;
/**
* Switch to using a higher communication speed with the WiFi module.
* * `true` = 921600 baud
* * `false` = 115200
* * `1843200` (or any number) = use a specific baud rate. * e.g.
* `wifi.turbo(true,callback)` or `wifi.turbo(1843200,callback)`
*
* @param {any} enable - true (or a baud rate as a number) to enable, false to disable
* @param {any} callback - A `callback()` function to invoke when turbo mode has been set
* @url http://www.espruino.com/Reference#l_Wifi_turbo
*/
function turbo(enable: any, callback: any): void;
}
/**
* Library that initialises a network device that calls into JavaScript
* @url http://www.espruino.com/Reference#NetworkJS
*/
declare module "NetworkJS" {
/**
* Initialise the network using the callbacks given and return the first argument.
* For instance:
* ```
* require("NetworkJS").create({
* create : function(host, port, socketType, options) {
* // Create a socket and return its index, host is a string, port is an integer.
* // If host isn't defined, create a server socket
* console.log("Create",host,port);
* return 1;
* },
* close : function(sckt) {
* // Close the socket. returns nothing
* },
* accept : function(sckt) {
* // Accept the connection on the server socket. Returns socket number or -1 if no connection
* return -1;
* },
* recv : function(sckt, maxLen, socketType) {
* // Receive data. Returns a string (even if empty).
* // If non-string returned, socket is then closed
* return null;//or "";
* },
* send : function(sckt, data, socketType) {
* // Send data (as string). Returns the number of bytes sent - 0 is ok.
* // Less than 0
* return data.length;
* }
* });
* ```
* `socketType` is an integer - 2 for UDP, or see SocketType in
* https://github.com/espruino/Espruino/blob/master/libs/network/network.h for more
* information.
*
* @param {any} obj - An object containing functions to access the network device
* @returns {any} The object passed in
* @url http://www.espruino.com/Reference#l_NetworkJS_create
*/
function create(obj: any): any;
}
/**
* This library allows you to create http servers and make http requests
* In order to use this, you will need an extra module to get network connectivity
* such as the [TI CC3000](/CC3000) or [WIZnet W5500](/WIZnet).
* This is designed to be a cut-down version of the [node.js
* library](http://nodejs.org/api/http.html). Please see the [Internet](/Internet)
* page for more information on how to use it.
* @url http://www.espruino.com/Reference#http
*/
declare module "http" {
/**
* Create an HTTP Server
* When a request to the server is made, the callback is called. In the callback
* you can use the methods on the response (`httpSRs`) to send data. You can also
* add `request.on('data',function() { ... })` to listen for POSTed data
*
* @param {any} callback - A function(request,response) that will be called when a connection is made
* @returns {any} Returns a new httpSrv object
* @url http://www.espruino.com/Reference#l_http_createServer
*/
function createServer(callback: any): httpSrv;
/**
* Create an HTTP Request - `end()` must be called on it to complete the operation.
* `options` is of the form:
* ```
* var options = {
* host: 'example.com', // host name
* port: 80, // (optional) port, defaults to 80
* path: '/', // path sent to server
* method: 'GET', // HTTP command sent to server (must be uppercase 'GET', 'POST', etc)
* protocol: 'http:', // optional protocol - https: or http:
* headers: { key : value, key : value } // (optional) HTTP headers
* };
* var req = require("http").request(options, function(res) {
* res.on('data', function(data) {
* console.log("HTTP> "+data);
* });
* res.on('close', function(data) {
* console.log("Connection closed");
* });
* });
* // You can req.write(...) here if your request requires data to be sent.
* req.end(); // called to finish the HTTP request and get the response
* ```
* You can easily pre-populate `options` from a URL using `var options =
* url.parse("http://www.example.com/foo.html")`
* There's an example of using [`http.request` for HTTP POST
* here](/Internet#http-post)
* **Note:** if TLS/HTTPS is enabled, options can have `ca`, `key` and `cert`
* fields. See `tls.connect` for more information about these and how to use them.
*
* @param {any} options - An object containing host,port,path,method,headers fields (and also ca,key,cert if HTTPS is enabled)
* @param {any} callback - A function(res) that will be called when a connection is made. You can then call `res.on('data', function(data) { ... })` and `res.on('close', function() { ... })` to deal with the response.
* @returns {any} Returns a new httpCRq object
* @url http://www.espruino.com/Reference#l_http_request
*/
function request(options: any, callback: any): httpCRq;
/**
* Request a webpage over HTTP - a convenience function for `http.request()` that
* makes sure the HTTP command is 'GET', and that calls `end` automatically.
* ```
* require("http").get("http://pur3.co.uk/hello.txt", function(res) {
* res.on('data', function(data) {
* console.log("HTTP> "+data);
* });
* res.on('close', function(data) {
* console.log("Connection closed");
* });
* });
* ```
* See `http.request()` and [the Internet page](/Internet) and ` for more usage
* examples.
*
* @param {any} options - A simple URL, or an object containing host,port,path,method fields
* @param {any} callback - A function(res) that will be called when a connection is made. You can then call `res.on('data', function(data) { ... })` and `res.on('close', function() { ... })` to deal with the response.
* @returns {any} Returns a new httpCRq object
* @url http://www.espruino.com/Reference#l_http_get
*/
function get(options: any, callback: any): httpCRq;
}
/**
* Library for communication with the WIZnet Ethernet module
* @url http://www.espruino.com/Reference#WIZnet
*/
declare module "WIZnet" {
/**
* Initialise the WIZnet module and return an Ethernet object
*
* @param {any} spi - Device to use for SPI (or undefined to use the default)
* @param {Pin} cs - The pin to use for Chip Select
* @returns {any} An Ethernet Object
* @url http://www.espruino.com/Reference#l_WIZnet_connect
*/
function connect(spi: any, cs: Pin): Ethernet;
}
/**
* @url http://www.espruino.com/Reference#CC3000
*/
declare module "CC3000" {
/**
* Initialise the CC3000 and return a WLAN object
*
* @param {any} spi - Device to use for SPI (or undefined to use the default). SPI should be 1,000,000 baud, and set to 'mode 1'
* @param {Pin} cs - The pin to use for Chip Select
* @param {Pin} en - The pin to use for Enable
* @param {Pin} irq - The pin to use for Interrupts
* @returns {any} A WLAN Object
* @url http://www.espruino.com/Reference#l_CC3000_connect
*/
function connect(spi: any, cs: Pin, en: Pin, irq: Pin): WLAN;
}
/**
* This library implements a telnet console for the Espruino interpreter. It
* requires a network connection, e.g. Wifi, and **currently only functions on the
* ESP8266 and on Linux **. It uses port 23 on the ESP8266 and port 2323 on Linux.
* **Note:** To enable on Linux, run `./espruino --telnet`
* @url http://www.espruino.com/Reference#TelnetServer
*/
declare module "TelnetServer" {
/**
*
* @param {any} options - Options controlling the telnet console server `{ mode : 'on|off'}`
* @url http://www.espruino.com/Reference#l_TelnetServer_setOptions
*/
function setOptions(options: any): void;
}
/**
* This library handles interfacing with a FAT32 filesystem on an SD card. The API
* is designed to be similar to node.js's - However Espruino does not currently
* support asynchronous file IO, so the functions behave like node.js's xxxxSync
* functions. Versions of the functions with 'Sync' after them are also provided
* for compatibility.
* To use this, you must type ```var fs = require('fs')``` to get access to the
* library
* See [the page on File IO](http://www.espruino.com/File+IO) for more information,
* and for examples on wiring up an SD card if your device doesn't come with one.
* **Note:** If you want to remove an SD card after you have started using it, you
* *must* call `E.unmountSD()` or you may cause damage to the card.
* @url http://www.espruino.com/Reference#fs
*/
declare module "fs" {
/**
* List all files in the supplied directory, returning them as an array of strings.
* NOTE: Espruino does not yet support Async file IO, so this function behaves like
* the 'Sync' version.
*
* @param {any} path - The path of the directory to list. If it is not supplied, '' is assumed, which will list the root directory
* @returns {any} An array of filename strings (or undefined if the directory couldn't be listed)
* @url http://www.espruino.com/Reference#l_fs_readdir
*/
function readdir(path: any): any;
/**
* List all files in the supplied directory, returning them as an array of strings.
*
* @param {any} path - The path of the directory to list. If it is not supplied, '' is assumed, which will list the root directory
* @returns {any} An array of filename strings (or undefined if the directory couldn't be listed)
* @url http://www.espruino.com/Reference#l_fs_readdirSync
*/
function readdirSync(path: any): any;
/**
* Write the data to the given file
* NOTE: Espruino does not yet support Async file IO, so this function behaves like
* the 'Sync' version.
*
* @param {any} path - The path of the file to write
* @param {any} data - The data to write to the file
* @returns {boolean} True on success, false on failure
* @url http://www.espruino.com/Reference#l_fs_writeFile
*/
function writeFile(path: any, data: any): boolean;
/**
* Write the data to the given file
*
* @param {any} path - The path of the file to write
* @param {any} data - The data to write to the file
* @returns {boolean} True on success, false on failure
* @url http://www.espruino.com/Reference#l_fs_writeFileSync
*/
function writeFileSync(path: any, data: any): boolean;
/**
* Append the data to the given file, created a new file if it doesn't exist
* NOTE: Espruino does not yet support Async file IO, so this function behaves like
* the 'Sync' version.
*
* @param {any} path - The path of the file to write
* @param {any} data - The data to write to the file
* @returns {boolean} True on success, false on failure
* @url http://www.espruino.com/Reference#l_fs_appendFile
*/
function appendFile(path: any, data: any): boolean;
/**
* Append the data to the given file, created a new file if it doesn't exist
*
* @param {any} path - The path of the file to write
* @param {any} data - The data to write to the file
* @returns {boolean} True on success, false on failure
* @url http://www.espruino.com/Reference#l_fs_appendFileSync
*/
function appendFileSync(path: any, data: any): boolean;
/**
* Read all data from a file and return as a string
* NOTE: Espruino does not yet support Async file IO, so this function behaves like
* the 'Sync' version.
*
* @param {any} path - The path of the file to read
* @returns {any} A string containing the contents of the file (or undefined if the file doesn't exist)
* @url http://www.espruino.com/Reference#l_fs_readFile
*/
function readFile(path: any): any;
/**
* Read all data from a file and return as a string.
* **Note:** The size of files you can load using this method is limited by the
* amount of available RAM. To read files a bit at a time, see the `File` class.
*
* @param {any} path - The path of the file to read
* @returns {any} A string containing the contents of the file (or undefined if the file doesn't exist)
* @url http://www.espruino.com/Reference#l_fs_readFileSync
*/
function readFileSync(path: any): any;
/**
* Delete the given file
* NOTE: Espruino does not yet support Async file IO, so this function behaves like
* the 'Sync' version.
*
* @param {any} path - The path of the file to delete
* @returns {boolean} True on success, or false on failure
* @url http://www.espruino.com/Reference#l_fs_unlink
*/
function unlink(path: any): boolean;
/**
* Delete the given file
*
* @param {any} path - The path of the file to delete
* @returns {boolean} True on success, or false on failure
* @url http://www.espruino.com/Reference#l_fs_unlinkSync
*/
function unlinkSync(path: any): boolean;
/**
* Return information on the given file. This returns an object with the following
* fields:
* size: size in bytes dir: a boolean specifying if the file is a directory or not
* mtime: A Date structure specifying the time the file was last modified
*
* @param {any} path - The path of the file to get information on
* @returns {any} An object describing the file, or undefined on failure
* @url http://www.espruino.com/Reference#l_fs_statSync
*/
function statSync(path: any): any;
/**
* Create the directory
* NOTE: Espruino does not yet support Async file IO, so this function behaves like
* the 'Sync' version.
*
* @param {any} path - The name of the directory to create
* @returns {boolean} True on success, or false on failure
* @url http://www.espruino.com/Reference#l_fs_mkdir
*/
function mkdir(path: any): boolean;
/**
* Create the directory
*
* @param {any} path - The name of the directory to create
* @returns {boolean} True on success, or false on failure
* @url http://www.espruino.com/Reference#l_fs_mkdirSync
*/
function mkdirSync(path: any): boolean;
/**
*
* @param {any} source - The source file/stream that will send content.
* @param {any} destination - The destination file/stream that will receive content from the source.
* @param {any} [options]
* [optional] An object `{ chunkSize : int=64, end : bool=true, complete : function }`
* chunkSize : The amount of data to pipe from source to destination at a time
* complete : a function to call when the pipe activity is complete
* end : call the 'end' function on the destination when the source is finished
* @url http://www.espruino.com/Reference#l_fs_pipe
*/
function pipe(source: any, destination: any, options?: any): void;
}
/**
* This library provides TV out capability on the Espruino and Espruino Pico.
* See the [Television](/Television) page for more information.
* @url http://www.espruino.com/Reference#tv
*/
declare module "tv" {
/**
* This initialises the TV output. Options for PAL are as follows:
* ```
* var g = require('tv').setup({ type : "pal",
* video : A7, // Pin - SPI MOSI Pin for Video output (MUST BE SPI1)
* sync : A6, // Pin - Timer pin to use for video sync
* width : 384,
* height : 270, // max 270
* });
* ```
* and for VGA:
* ```
* var g = require('tv').setup({ type : "vga",
* video : A7, // Pin - SPI MOSI Pin for Video output (MUST BE SPI1)
* hsync : A6, // Pin - Timer pin to use for video sync
* vsync : A5, // Pin - pin to use for video sync
* width : 220,
* height : 240,
* repeat : 2, // amount of times to repeat each line
* });
* ```
* or
* ```
* var g = require('tv').setup({ type : "vga",
* video : A7, // Pin - SPI MOSI Pin for Video output (MUST BE SPI1)
* hsync : A6, // Pin - Timer pin to use for video sync
* vsync : A5, // Pin - pin to use for video sync
* width : 220,
* height : 480,
* repeat : 1, // amount of times to repeat each line
* });
* ```
* See the [Television](/Television) page for more information.
*
* @param {any} options - Various options for the TV output
* @param {number} width
* @returns {any} A graphics object
* @url http://www.espruino.com/Reference#l_tv_setup
*/
function setup(options: any, width: number): any;
}
/**
* @url http://www.espruino.com/Reference#tensorflow
*/
declare module "tensorflow" {
/**
*
* @param {number} arenaSize - The TensorFlow Arena size
* @param {any} model - The model to use - this should be a flat array/string
* @returns {any} A tensorflow instance
* @url http://www.espruino.com/Reference#l_tensorflow_create
*/
function create(arenaSize: number, model: any): TFMicroInterpreter;
}
/**
* Simple library for compression/decompression using
* [heatshrink](https://github.com/atomicobject/heatshrink), an
* [LZSS](https://en.wikipedia.org/wiki/Lempel%E2%80%93Ziv%E2%80%93Storer%E2%80%93Szymanski)
* compression tool.
* Espruino uses heatshrink internally to compress RAM down to fit in Flash memory
* when `save()` is used. This just exposes that functionality.
* Functions here take and return buffers of data. There is no support for
* streaming, so both the compressed and decompressed data must be able to fit in
* memory at the same time.
* @url http://www.espruino.com/Reference#heatshrink
*/
declare module "heatshrink" {
/**
*
* @param {any} data - The data to compress
* @returns {any} Returns the result as an ArrayBuffer
* @url http://www.espruino.com/Reference#l_heatshrink_compress
*/
function compress(data: any): ArrayBuffer;
/**
*
* @param {any} data - The data to decompress
* @returns {any} Returns the result as an ArrayBuffer
* @url http://www.espruino.com/Reference#l_heatshrink_decompress
*/
function decompress(data: any): ArrayBuffer;
}
/**
* This module allows you to read and write the nonvolatile flash memory of your
* device.
* Also see the `Storage` library, which provides a safer file-like interface to
* nonvolatile storage.
* It should be used with extreme caution, as it is easy to overwrite parts of
* Flash memory belonging to Espruino or even its bootloader. If you damage the
* bootloader then you may need external hardware such as a USB-TTL converter to
* restore it. For more information on restoring the bootloader see `Advanced
* Reflashing` in your board's reference pages.
* To see which areas of memory you can and can't overwrite, look at the values
* reported by `process.memory()`.
* **Note:** On Nordic platforms there are checks in place to help you avoid
* 'bricking' your device be damaging the bootloader. You can disable these with
* `E.setFlags({unsafeFlash:1})`
* @url http://www.espruino.com/Reference#Flash
*/
declare module "Flash" {
/**
* Returns the start and length of the flash page containing the given address.
*
* @param {number} addr - An address in memory
* @returns {any} An object of the form `{ addr : #, length : #}`, where `addr` is the start address of the page, and `length` is the length of it (in bytes). Returns undefined if no page at address
* @url http://www.espruino.com/Reference#l_Flash_getPage
*/
function getPage(addr: number): any;
/**
* This method returns an array of objects of the form `{addr : #, length : #}`,
* representing contiguous areas of flash memory in the chip that are not used for
* anything.
* The memory areas returned are on page boundaries. This means that you can safely
* erase the page containing any address here, and you won't risk deleting part of
* the Espruino firmware.
* @returns {any} Array of objects with `addr` and `length` properties
* @url http://www.espruino.com/Reference#l_Flash_getFree
*/
function getFree(): any;
/**
* Erase a page of flash memory
*
* @param {any} addr - An address in the page that is to be erased
* @url http://www.espruino.com/Reference#l_Flash_erasePage
*/
function erasePage(addr: any): void;
/**
* Write data into memory at the given address
* In flash memory you may only turn bits that are 1 into bits that are 0. If
* you're writing data into an area that you have already written (so `read`
* doesn't return all `0xFF`) you'll need to call `erasePage` to clear the entire
* page.
*
* @param {any} data - The data to write
* @param {number} addr - The address to start writing from
* @url http://www.espruino.com/Reference#l_Flash_write
*/
function write(data: any, addr: number): void;
/**
* Read flash memory from the given address
*
* @param {number} length - The amount of data to read (in bytes)
* @param {number} addr - The address to start reading from
* @returns {any} A Uint8Array of data
* @url http://www.espruino.com/Reference#l_Flash_read
*/
function read(length: number, addr: number): any;
}
/**
* This module allows you to read and write part of the nonvolatile flash memory of
* your device using a filesystem-like API.
* Also see the `Flash` library, which provides a low level, more dangerous way to
* access all parts of your flash memory.
* The `Storage` library provides two distinct types of file:
* * `require("Storage").write(...)`/`require("Storage").read(...)`/etc create
* simple contiguous files of fixed length. This is the recommended file type.
* * `require("Storage").open(...)` creates a `StorageFile`, which stores the file
* in numbered chunks (`"filename\1"`/`"filename\2"`/etc). It allows data to be
* appended and for the file to be read line by line.
* You must read a file using the same method you used to write it - e.g. you can't
* create a file with `require("Storage").open(...)` and then read it with
* `require("Storage").read(...)`.
* **Note:** In firmware 2v05 and later, the maximum length for filenames is 28
* characters. However in 2v04 and earlier the max length is 8.
* @url http://www.espruino.com/Reference#Storage
*/
declare module "Storage" {
/**
* Erase the flash storage area. This will remove all files created with
* `require("Storage").write(...)` as well as any code saved with `save()` or
* `E.setBootCode()`.
* @url http://www.espruino.com/Reference#l_Storage_eraseAll
*/
function eraseAll(): void;
/**
* Erase a single file from the flash storage area.
* **Note:** This function should be used with normal files, and not `StorageFile`s
* created with `require("Storage").open(filename, ...)`
*
* @param {any} name - The filename - max 28 characters (case sensitive)
* @url http://www.espruino.com/Reference#l_Storage_erase
*/
function erase(name: string): void;
/**
* Read a file from the flash storage area that has been written with
* `require("Storage").write(...)`.
* This function returns a memory-mapped String that points to the actual memory
* area in read-only memory, so it won't use up RAM.
* As such you can check if a file exists efficiently using
* `require("Storage").read(filename)!==undefined`.
* If you evaluate this string with `eval`, any functions contained in the String
* will keep their code stored in flash memory.
* **Note:** This function should be used with normal files, and not `StorageFile`s
* created with `require("Storage").open(filename, ...)`
*
* @param {any} name - The filename - max 28 characters (case sensitive)
* @param {number} [offset] - [optional] The offset in bytes to start from
* @param {number} [length] - [optional] The length to read in bytes (if <=0, the entire file is read)
* @returns {any} A string of data, or `undefined` if the file is not found
* @url http://www.espruino.com/Reference#l_Storage_read
*/
function read(name: string, offset?: number, length?: number): string | undefined;
/**
* Read a file from the flash storage area that has been written with
* `require("Storage").write(...)`, and parse JSON in it into a JavaScript object.
* This is identical to `JSON.parse(require("Storage").read(...))`. It will throw
* an exception if the data in the file is not valid JSON.
* **Note:** This function should be used with normal files, and not `StorageFile`s
* created with `require("Storage").open(filename, ...)`
*
* @param {any} name - The filename - max 28 characters (case sensitive)
* @param {boolean} noExceptions - If true and the JSON is not valid, just return `undefined` - otherwise an `Exception` is thrown
* @returns {any} An object containing parsed JSON from the file, or undefined
* @url http://www.espruino.com/Reference#l_Storage_readJSON
*/
function readJSON(name: string, noExceptions: boolean): any;
/**
* Read a file from the flash storage area that has been written with
* `require("Storage").write(...)`, and return the raw binary data as an
* ArrayBuffer.
* This can be used:
* * In a `DataView` with `new DataView(require("Storage").readArrayBuffer("x"))`
* * In a `Uint8Array/Float32Array/etc` with `new
* Uint8Array(require("Storage").readArrayBuffer("x"))`
* **Note:** This function should be used with normal files, and not `StorageFile`s
* created with `require("Storage").open(filename, ...)`
*
* @param {any} name - The filename - max 28 characters (case sensitive)
* @returns {any} An ArrayBuffer containing data from the file, or undefined
* @url http://www.espruino.com/Reference#l_Storage_readArrayBuffer
*/
function readArrayBuffer(name: string): ArrayBuffer | undefined;
/**
* Write/create a file in the flash storage area. This is nonvolatile and will not
* disappear when the device resets or power is lost.
* Simply write `require("Storage").write("MyFile", "Some data")` to write a new
* file, and `require("Storage").read("MyFile")` to read it.
* If you supply:
* * A String, it will be written as-is
* * An array, will be written as a byte array (but read back as a String)
* * An object, it will automatically be converted to a JSON string before being
* written.
* **Note:** If an array is supplied it will not be converted to JSON. To be
* explicit about the conversion you can use `Storage.writeJSON`
* You may also create a file and then populate data later **as long as you don't
* try and overwrite data that already exists**. For instance:
* ```
* var f = require("Storage");
* f.write("a","Hello",0,14);
* f.write("a"," ",5);
* f.write("a","World!!!",6);
* print(f.read("a")); // "Hello World!!!"
* f.write("a"," ",0); // Writing to location 0 again will cause the file to be re-written
* print(f.read("a")); // " "
* ```
* This can be useful if you've got more data to write than you have RAM
* available - for instance the Web IDE uses this method to write large files into
* onboard storage.
* **Note:** This function should be used with normal files, and not `StorageFile`s
* created with `require("Storage").open(filename, ...)`
*
* @param {any} name - The filename - max 28 characters (case sensitive)
* @param {any} data - The data to write
* @param {number} [offset] - [optional] The offset within the file to write
* @param {number} [size] - [optional] The size of the file (if a file is to be created that is bigger than the data)
* @returns {boolean} True on success, false on failure
* @url http://www.espruino.com/Reference#l_Storage_write
*/
function write(name: string | ArrayBuffer | ArrayBufferView | number[] | object, data: any, offset?: number, size?: number): boolean;
/**
* Write/create a file in the flash storage area. This is nonvolatile and will not
* disappear when the device resets or power is lost.
* Simply write `require("Storage").writeJSON("MyFile", [1,2,3])` to write a new
* file, and `require("Storage").readJSON("MyFile")` to read it.
* This is equivalent to: `require("Storage").write(name, JSON.stringify(data))`
* **Note:** This function should be used with normal files, and not `StorageFile`s
* created with `require("Storage").open(filename, ...)`
*
* @param {any} name - The filename - max 28 characters (case sensitive)
* @param {any} data - The JSON data to write
* @returns {boolean} True on success, false on failure
* @url http://www.espruino.com/Reference#l_Storage_writeJSON
*/
function writeJSON(name: string, data: any): boolean;
/**
* List all files in the flash storage area. An array of Strings is returned.
* By default this lists files created by `StorageFile` (`require("Storage").open`)
* which have a file number (`"\1"`/`"\2"`/etc) appended to them.
* ```
* // All files
* require("Storage").list()
* // Files ending in '.js'
* require("Storage").list(/\.js$/)
* // All Storage Files
* require("Storage").list(undefined, {sf:true})
* // All normal files (e.g. created with Storage.write)
* require("Storage").list(undefined, {sf:false})
* ```
* **Note:** This will output system files (e.g. saved code) as well as files that
* you may have written.
*
* @param {any} [regex] - [optional] If supplied, filenames are checked against this regular expression (with `String.match(regexp)`) to see if they match before being returned
* @param {any} [filter] - [optional] If supplied, File Types are filtered based on this: `{sf:true}` or `{sf:false}` for whether to show StorageFile
* @returns {any} An array of filenames
* @url http://www.espruino.com/Reference#l_Storage_list
*/
function list(regex?: RegExp, filter?: { sf: boolean }): string[];
/**
* List all files in the flash storage area matching the specified regex (ignores
* StorageFiles), and then hash their filenames *and* file locations.
* Identical files may have different hashes (e.g. if Storage is compacted and the
* file moves) but the changes of different files having the same hash are
* extremely small.
* ```
* // Hash files
* require("Storage").hash()
* // Files ending in '.boot.js'
* require("Storage").hash(/\.boot\.js$/)
* ```
* **Note:** This function is used by Bangle.js as a way to cache files. For
* instance the bootloader will add all `.boot.js` files together into a single
* `.boot0` file, but it needs to know quickly whether anything has changed.
*
* @param {any} [regex] - [optional] If supplied, filenames are checked against this regular expression (with `String.match(regexp)`) to see if they match before being hashed
* @returns {number} A hash of the files matching
* @url http://www.espruino.com/Reference#l_Storage_hash
*/
function hash(regex: RegExp): number;
/**
* The Flash Storage system is journaling. To make the most of the limited write
* cycles of Flash memory, Espruino marks deleted/replaced files as garbage and
* moves on to a fresh part of flash memory. Espruino only fully erases those files
* when it is running low on flash, or when `compact` is called.
* `compact` may fail if there isn't enough RAM free on the stack to use as swap
* space, however in this case it will not lose data.
* **Note:** `compact` rearranges the contents of memory. If code is referencing
* that memory (e.g. functions that have their code stored in flash) then they may
* become garbled when compaction happens. To avoid this, call `eraseFiles` before
* uploading data that you intend to reference to ensure that uploaded files are
* right at the start of flash and cannot be compacted further.
* @url http://www.espruino.com/Reference#l_Storage_compact
*/
function compact(): void;
/**
* This writes information about all blocks in flash memory to the console - and is
* only useful for debugging flash storage.
* @url http://www.espruino.com/Reference#l_Storage_debug
*/
function debug(): void;
/**
* Return the amount of free bytes available in Storage. Due to fragmentation there
* may be more bytes available, but this represents the maximum size of file that
* can be written.
* @returns {number} The amount of free bytes
* @url http://www.espruino.com/Reference#l_Storage_getFree
*/
function getFree(): number;
/**
* Returns:
* ```
* {
* totalBytes // Amount of bytes in filesystem
* freeBytes // How many bytes are left at the end of storage?
* fileBytes // How many bytes of allocated files do we have?
* fileCount // How many allocated files do we have?
* trashBytes // How many bytes of trash files do we have?
* trashCount // How many trash files do we have?
* }
* ```
* @returns {any} An object containing info about the current Storage system
* @url http://www.espruino.com/Reference#l_Storage_getStats
*/
function getStats(): any;
/**
* Writes a lookup table for files into Bangle.js's storage. This allows any file
* stored up to that point to be accessed quickly.
* @url http://www.espruino.com/Reference#l_Storage_optimise
*/
function optimise(): void;
/**
* Open a file in the Storage area. This can be used for appending data
* (normal read/write operations only write the entire file).
* Please see `StorageFile` for more information (and examples).
* **Note:** These files write through immediately - they do not need closing.
*
* @param {any} name - The filename - max **27** characters (case sensitive)
* @param {any} mode - The open mode - must be either `'r'` for read,`'w'` for write , or `'a'` for append
* @returns {any} An object containing {read,write,erase}
* @url http://www.espruino.com/Reference#l_Storage_open
*/
function open(name: string, mode: "r" | "w" | "a"): StorageFile;
}