a mini-console support with scroll up / down (#112)
* a mini-console support with scroll up / down * fix compile error
This commit is contained in:
parent
0529759a80
commit
60bf3a17d3
@ -123,11 +123,6 @@
|
|||||||
"String.substr": "Return a substring of the current string.",
|
"String.substr": "Return a substring of the current string.",
|
||||||
"String.substr|param|length": "number of characters to extract",
|
"String.substr|param|length": "number of characters to extract",
|
||||||
"String.substr|param|start": "first character index; can be negative from counting from the end, eg:0",
|
"String.substr|param|start": "first character index; can be negative from counting from the end, eg:0",
|
||||||
"console": "Reading and writing data to the console output.",
|
|
||||||
"console.log": "Write a line of text to the console output.",
|
|
||||||
"console.logValue": "Write a name:value pair as a line of text to the console output.",
|
|
||||||
"console.logValue|param|name": "name of the value stream, eg: \"x\"",
|
|
||||||
"console.logValue|param|value": "to write",
|
|
||||||
"control": "Program controls and events.",
|
"control": "Program controls and events.",
|
||||||
"control.AnimationQueue.cancel": "Cancels the current running animation and clears the queue",
|
"control.AnimationQueue.cancel": "Cancels the current running animation and clears the queue",
|
||||||
"control.AnimationQueue.runUntilDone": "Runs 'render' in a loop until it returns false or the 'stop' function is called",
|
"control.AnimationQueue.runUntilDone": "Runs 'render' in a loop until it returns false or the 'stop' function is called",
|
||||||
|
@ -19,9 +19,6 @@
|
|||||||
"String.length|block": "length of %VALUE",
|
"String.length|block": "length of %VALUE",
|
||||||
"String.substr|block": "substring of %this=text|from %start|of length %length",
|
"String.substr|block": "substring of %this=text|from %start|of length %length",
|
||||||
"String|block": "String",
|
"String|block": "String",
|
||||||
"console.logValue|block": "console|log value %name|= %value",
|
|
||||||
"console.log|block": "console|log %text",
|
|
||||||
"console|block": "console",
|
|
||||||
"control.assert|block": "assert %cond|with value %code",
|
"control.assert|block": "assert %cond|with value %code",
|
||||||
"control.deviceSerialNumber|block": "device serial number",
|
"control.deviceSerialNumber|block": "device serial number",
|
||||||
"control.millis|block": "millis (ms)",
|
"control.millis|block": "millis (ms)",
|
||||||
@ -46,7 +43,6 @@
|
|||||||
"{id:category}Arrays": "Arrays",
|
"{id:category}Arrays": "Arrays",
|
||||||
"{id:category}Boolean": "Boolean",
|
"{id:category}Boolean": "Boolean",
|
||||||
"{id:category}Buffer": "Buffer",
|
"{id:category}Buffer": "Buffer",
|
||||||
"{id:category}Console": "Console",
|
|
||||||
"{id:category}Control": "Control",
|
"{id:category}Control": "Control",
|
||||||
"{id:category}Helpers": "Helpers",
|
"{id:category}Helpers": "Helpers",
|
||||||
"{id:category}Loops": "Loops",
|
"{id:category}Loops": "Loops",
|
||||||
|
@ -17,8 +17,7 @@
|
|||||||
"control.cpp",
|
"control.cpp",
|
||||||
"control.ts",
|
"control.ts",
|
||||||
"serial.cpp",
|
"serial.cpp",
|
||||||
"serial.ts",
|
"serial.ts"
|
||||||
"console.ts"
|
|
||||||
],
|
],
|
||||||
"testFiles": [
|
"testFiles": [
|
||||||
"test.ts"
|
"test.ts"
|
||||||
|
@ -43,6 +43,13 @@
|
|||||||
"brick.setStatusLight|param|pattern": "the lights pattern to use.",
|
"brick.setStatusLight|param|pattern": "the lights pattern to use.",
|
||||||
"brick.showImage": "Shows an image on screen",
|
"brick.showImage": "Shows an image on screen",
|
||||||
"brick.showImage|param|image": "image to draw",
|
"brick.showImage|param|image": "image to draw",
|
||||||
|
"console": "Reading and writing data to the console output.\r\n\r\nReading and writing data to the console output.",
|
||||||
|
"console.addListener": "Adds a listener for the log messages",
|
||||||
|
"console.log": "Write a line of text to the console output.",
|
||||||
|
"console.logValue": "Write a name:value pair as a line of text to the console output.",
|
||||||
|
"console.logValue|param|name": "name of the value stream, eg: \"x\"",
|
||||||
|
"console.logValue|param|value": "to write",
|
||||||
|
"console.sendToScreen": "Sends the log messages to the brick screen and uses the brick up and down buttons to scroll.",
|
||||||
"control": "Program controls and events.",
|
"control": "Program controls and events.",
|
||||||
"control.allocateNotifyEvent": "Allocates the next user notification event",
|
"control.allocateNotifyEvent": "Allocates the next user notification event",
|
||||||
"control.deviceFirmwareVersion": "Determine the version of system software currently running.",
|
"control.deviceFirmwareVersion": "Determine the version of system software currently running.",
|
||||||
|
@ -41,6 +41,10 @@
|
|||||||
"brick.setStatusLight|block": "set `icons.brickButtons` to %pattern=led_pattern",
|
"brick.setStatusLight|block": "set `icons.brickButtons` to %pattern=led_pattern",
|
||||||
"brick.showImage|block": "`icons.brickDisplay` show image %image=screen_image_picker",
|
"brick.showImage|block": "`icons.brickDisplay` show image %image=screen_image_picker",
|
||||||
"brick|block": "brick",
|
"brick|block": "brick",
|
||||||
|
"console.logValue|block": "console|log value %name|= %value",
|
||||||
|
"console.log|block": "console|log %text",
|
||||||
|
"console.sendToScreen|block": "send console to screen",
|
||||||
|
"console|block": "console",
|
||||||
"control.raiseEvent|block": "raise event|from %src|with value %value",
|
"control.raiseEvent|block": "raise event|from %src|with value %value",
|
||||||
"control|block": "control",
|
"control|block": "control",
|
||||||
"motors.Motor.move|block": "move `icons.motorLarge` %motor|for %value|%unit|at %speed|%",
|
"motors.Motor.move|block": "move `icons.motorLarge` %motor|for %value|%unit|at %speed|%",
|
||||||
@ -71,6 +75,7 @@
|
|||||||
"sensors|block": "sensors",
|
"sensors|block": "sensors",
|
||||||
"serial|block": "serial",
|
"serial|block": "serial",
|
||||||
"{id:category}Brick": "Brick",
|
"{id:category}Brick": "Brick",
|
||||||
|
"{id:category}Console": "Console",
|
||||||
"{id:category}Control": "Control",
|
"{id:category}Control": "Control",
|
||||||
"{id:category}Image": "Image",
|
"{id:category}Image": "Image",
|
||||||
"{id:category}Images": "Images",
|
"{id:category}Images": "Images",
|
||||||
|
107
libs/core/console.ts
Normal file
107
libs/core/console.ts
Normal file
@ -0,0 +1,107 @@
|
|||||||
|
/// <reference no-default-lib="true"/>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reading and writing data to the console output.
|
||||||
|
*/
|
||||||
|
//% weight=12 color=#002050 icon="\uf120"
|
||||||
|
//% advanced=true
|
||||||
|
namespace console {
|
||||||
|
type Listener = (text: string) => void;
|
||||||
|
|
||||||
|
const listeners: Listener[] = [
|
||||||
|
(text: string) => serial.writeLine(text)
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Write a line of text to the console output.
|
||||||
|
* @param value to send
|
||||||
|
*/
|
||||||
|
//% weight=90
|
||||||
|
//% help=console/log blockGap=8
|
||||||
|
//% blockId=console_log block="console|log %text"
|
||||||
|
export function log(text: string): void {
|
||||||
|
for (let i = 0; i < listeners.length; ++i)
|
||||||
|
listeners[i](text);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Write a name:value pair as a line of text to the console output.
|
||||||
|
* @param name name of the value stream, eg: "x"
|
||||||
|
* @param value to write
|
||||||
|
*/
|
||||||
|
//% weight=88 blockGap=8
|
||||||
|
//% help=console/log-value
|
||||||
|
//% blockId=console_log_value block="console|log value %name|= %value"
|
||||||
|
export function logValue(name: string, value: number): void {
|
||||||
|
log(`${name}: ${value}`)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a listener for the log messages
|
||||||
|
* @param listener
|
||||||
|
*/
|
||||||
|
//%
|
||||||
|
export function addListener(listener: (text: string) => void) {
|
||||||
|
if (!listener) return;
|
||||||
|
listeners.push(listener);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends the log messages to the brick screen and uses the brick up and down buttons to scroll.
|
||||||
|
*/
|
||||||
|
//% blockId=logsendtostreen block="send console to screen"
|
||||||
|
//% weight=1
|
||||||
|
export function sendToScreen(): void {
|
||||||
|
console.screen.attach();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace console.screen {
|
||||||
|
const maxLines = 100;
|
||||||
|
const screenLines = 8;
|
||||||
|
const lineHeight = 12;
|
||||||
|
let lines: string[];
|
||||||
|
let scrollPosition = 0;
|
||||||
|
|
||||||
|
export function attach() {
|
||||||
|
if (!lines) {
|
||||||
|
lines = [];
|
||||||
|
console.addListener(log);
|
||||||
|
brick.buttonUp.onEvent(ButtonEvent.Click, () => scroll(1))
|
||||||
|
brick.buttonDown.onEvent(ButtonEvent.Click, () => scroll(-1))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function printLog() {
|
||||||
|
brick.clearScreen()
|
||||||
|
if (!lines) return;
|
||||||
|
for (let i = 0; i < screenLines; ++i) {
|
||||||
|
const line = lines[i + scrollPosition];
|
||||||
|
if (line)
|
||||||
|
brick.print(line, 0, 4 + i * lineHeight)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function scroll(pos: number) {
|
||||||
|
if (!pos) return;
|
||||||
|
|
||||||
|
scrollPosition += pos >> 0;
|
||||||
|
if (scrollPosition >= lines.length) scrollPosition = lines.length - 1;
|
||||||
|
if (scrollPosition < 0) scrollPosition = 0;
|
||||||
|
printLog();
|
||||||
|
}
|
||||||
|
|
||||||
|
function log(msg: string): void {
|
||||||
|
lines.push(msg);
|
||||||
|
if (lines.length + 5 > maxLines) {
|
||||||
|
lines.splice(0, maxLines - lines.length);
|
||||||
|
scrollPosition = Math.min(scrollPosition, lines.length - 1)
|
||||||
|
}
|
||||||
|
// move down scroll once it gets large than the screen
|
||||||
|
if (lines.length > screenLines
|
||||||
|
&& lines.length >= scrollPosition + screenLines) {
|
||||||
|
scrollPosition++;
|
||||||
|
}
|
||||||
|
printLog();
|
||||||
|
}
|
||||||
|
}
|
@ -10,6 +10,7 @@
|
|||||||
"linux.cpp",
|
"linux.cpp",
|
||||||
"mmap.cpp",
|
"mmap.cpp",
|
||||||
"control.cpp",
|
"control.cpp",
|
||||||
|
"console.ts",
|
||||||
"serialnumber.cpp",
|
"serialnumber.cpp",
|
||||||
"buttons.ts",
|
"buttons.ts",
|
||||||
"png.cpp",
|
"png.cpp",
|
||||||
|
Loading…
Reference in New Issue
Block a user