Compare commits

...

8 Commits

Author SHA1 Message Date
Peli de Halleux
3bf6f9a2ae typo 2018-02-13 08:00:45 -08:00
Peli de Halleux
74f38d41a3 upgrading pxt 2018-02-13 07:58:00 -08:00
Peli de Halleux
34af44d299 badge does not work 2017-12-15 14:54:29 -08:00
Peli de Halleux
1199845c52 added build status 2017-12-15 14:53:51 -08:00
Peli de Halleux
003150643d run latest bump build until live 2017-12-15 14:49:36 -08:00
Peli de Halleux
500de7fb13 1.0.20 2017-12-15 14:47:23 -08:00
Peli de Halleux
88934881f9 upgrading various simulator parts 2017-12-15 14:45:38 -08:00
Peli de Halleux
433e8c8805 adding neopixel/microturtle 2017-12-15 14:42:11 -08:00
7 changed files with 73 additions and 33 deletions

View File

@@ -2,7 +2,6 @@
This target is hosted at https://makecode.calliope.cc. This target is hosted at https://makecode.calliope.cc.
## Hosted editor and build ## Hosted editor and build
Jenkins build: https://ci2.dot.net/job/Private/job/pxt_project_teal/job/master/ Jenkins build: https://ci2.dot.net/job/Private/job/pxt_project_teal/job/master/

View File

@@ -1,3 +1,3 @@
{ {
"appref": "v1.0.13" "appref": "v"
} }

View File

@@ -1,6 +1,6 @@
{ {
"name": "pxt-calliope", "name": "pxt-calliope",
"version": "1.0.19", "version": "1.0.20",
"description": "Calliope Mini editor for PXT", "description": "Calliope Mini editor for PXT",
"keywords": [ "keywords": [
"JavaScript", "JavaScript",
@@ -36,7 +36,7 @@
"semantic-ui-less": "^2.2.4" "semantic-ui-less": "^2.2.4"
}, },
"dependencies": { "dependencies": {
"pxt-core": "0.14.32" "pxt-core": "0.17.4"
}, },
"scripts": { "scripts": {
"test": "node node_modules/pxt-core/built/pxt.js travis" "test": "node node_modules/pxt-core/built/pxt.js travis"

View File

@@ -18,6 +18,9 @@ namespace pxsim {
speakerState: SpeakerState; speakerState: SpeakerState;
fileSystem: FileSystemState; fileSystem: FileSystemState;
// visual
view: SVGElement;
constructor() { constructor() {
super() super()
@@ -94,7 +97,7 @@ namespace pxsim {
break; break;
case "serial": case "serial":
let data = (<SimulatorSerialMessage>msg).data || ""; let data = (<SimulatorSerialMessage>msg).data || "";
this.serialState.recieveData(data); this.serialState.receiveData(data);
break; break;
case "radiopacket": case "radiopacket":
let packet = <SimulatorRadioPacketMessage>msg; let packet = <SimulatorRadioPacketMessage>msg;
@@ -121,16 +124,22 @@ namespace pxsim {
fnArgs: fnArgs, fnArgs: fnArgs,
maxWidth: "100%", maxWidth: "100%",
maxHeight: "100%", maxHeight: "100%",
highContrast: msg.highContrast
}; };
const viewHost = new visuals.BoardHost(pxsim.visuals.mkBoardView({ const viewHost = new visuals.BoardHost(pxsim.visuals.mkBoardView({
visual: boardDef.visual visual: boardDef.visual,
highContrast: msg.highContrast
}), opts); }), opts);
document.body.innerHTML = ""; // clear children document.body.innerHTML = ""; // clear children
document.body.appendChild(viewHost.getView()); document.body.appendChild(this.view = viewHost.getView());
return Promise.resolve(); return Promise.resolve();
} }
screenshot(): string {
return svg.toDataUri(new XMLSerializer().serializeToString(this.view));
}
} }
export function initRuntimeWithDalBoard() { export function initRuntimeWithDalBoard() {

View File

@@ -28,7 +28,7 @@ namespace pxsim {
this.data = data; this.data = data;
} }
public print() { public print() {
console.log(`Image id:${this.id} refs:${this.refcnt} size:${this.width}x${Image.height}`) // console.debug(`Image id:${this.id} refs:${this.refcnt} size:${this.width}x${Image.height}`)
} }
public get(x: number, y: number): number { public get(x: number, y: number): number {
if (x < 0 || x >= this.width || y < 0 || y >= 5) return 0; if (x < 0 || x >= this.width || y < 0 || y >= 5) return 0;
@@ -131,15 +131,33 @@ namespace pxsim.images {
namespace pxsim.ImageMethods { namespace pxsim.ImageMethods {
export function showImage(leds: Image, offset: number, interval: number) { export function showImage(leds: Image, offset: number, interval: number) {
pxtrt.nullCheck(leds) pxtrt.nullCheck(leds)
let cb = getResume();
let first = true;
board().ledMatrixState.animationQ.enqueue({
interval,
frame: () => {
if (first) {
leds.copyTo(offset, 5, board().ledMatrixState.image, 0) leds.copyTo(offset, 5, board().ledMatrixState.image, 0)
runtime.queueDisplayUpdate() first = false;
basic.pause(interval); return true;
}
return false;
},
whenDone: cb
})
} }
export function plotImage(leds: Image, offset: number): void { export function plotImage(leds: Image, offset: number): void {
pxtrt.nullCheck(leds) pxtrt.nullCheck(leds)
board().ledMatrixState.animationQ.enqueue({
interval: 0,
frame: () => {
leds.copyTo(offset, 5, board().ledMatrixState.image, 0) leds.copyTo(offset, 5, board().ledMatrixState.image, 0)
runtime.queueDisplayUpdate() return false;
}
})
} }
export function height(leds: Image): number { export function height(leds: Image): number {
@@ -216,15 +234,16 @@ namespace pxsim.ImageMethods {
namespace pxsim.basic { namespace pxsim.basic {
export function showNumber(x: number, interval: number) { export function showNumber(x: number, interval: number) {
if (interval < 0) return; if (interval <= 0)
interval = 1;
let leds = createImageFromString(x.toString()); let leds = createImageFromString(x.toString());
if (x < 0 || x >= 10) ImageMethods.scrollImage(leds, 1, interval); if (x < 0 || x >= 10) ImageMethods.scrollImage(leds, 1, interval);
else showLeds(leds, interval * 5); else showLeds(leds, interval * 5);
} }
export function showString(s: string, interval: number) { export function showString(s: string, interval: number) {
if (interval < 0) return; if (interval <= 0)
interval = 1;
if (s.length == 0) { if (s.length == 0) {
clearScreen(); clearScreen();
pause(interval * 5); pause(interval * 5);
@@ -254,7 +273,16 @@ namespace pxsim.basic {
namespace pxsim.led { namespace pxsim.led {
export function plot(x: number, y: number) { export function plot(x: number, y: number) {
board().ledMatrixState.image.set(x, y, 255); board().ledMatrixState.image.set(x, y, 0xff);
runtime.queueDisplayUpdate()
}
export function plotBrightness(x: number, y: number, brightness: number) {
const state = board().ledMatrixState;
brightness = Math.max(0, Math.min(0xff, brightness));
if (brightness != 0 && brightness != 0xff && state.displayMode != DisplayMode.greyscale)
state.displayMode = DisplayMode.greyscale;
state.image.set(x, y, brightness);
runtime.queueDisplayUpdate() runtime.queueDisplayUpdate()
} }
@@ -272,7 +300,7 @@ namespace pxsim.led {
} }
export function setBrightness(value: number): void { export function setBrightness(value: number): void {
board().ledMatrixState.brigthness = value; board().ledMatrixState.brigthness = Math.max(0, Math.min(255, value));
runtime.queueDisplayUpdate() runtime.queueDisplayUpdate()
} }
@@ -286,7 +314,7 @@ namespace pxsim.led {
runtime.queueDisplayUpdate() runtime.queueDisplayUpdate()
} }
export function displayMode() : DisplayMode { export function displayMode(): DisplayMode {
return board().ledMatrixState.displayMode; return board().ledMatrixState.displayMode;
} }

View File

@@ -1,8 +1,9 @@
namespace pxsim { namespace pxsim {
const SERIAL_BUFFER_LENGTH = 16;
export class SerialState { export class SerialState {
serialIn: string[] = []; serialIn: string[] = [];
public recieveData(data: string) { public receiveData(data: string) {
this.serialIn.push(); this.serialIn.push();
} }
@@ -13,18 +14,15 @@ namespace pxsim {
serialOutBuffer: string = ""; serialOutBuffer: string = "";
writeSerial(s: string) { writeSerial(s: string) {
for (let i = 0; i < s.length; ++i) { this.serialOutBuffer += s;
let c = s[i]; if (/\n/.test(this.serialOutBuffer) || this.serialOutBuffer.length > SERIAL_BUFFER_LENGTH) {
this.serialOutBuffer += c;
if (c == "\n") {
Runtime.postMessage(<SimulatorSerialMessage>{ Runtime.postMessage(<SimulatorSerialMessage>{
type: "serial", type: 'serial',
data: this.serialOutBuffer, data: this.serialOutBuffer,
id: runtime.id id: runtime.id,
sim: true
}) })
this.serialOutBuffer = "" this.serialOutBuffer = '';
break;
}
} }
} }
} }
@@ -51,4 +49,8 @@ namespace pxsim.serial {
export function redirect(tx: number, rx: number, rate: number) { export function redirect(tx: number, rx: number, rate: number) {
// TODO? // TODO?
} }
export function redirectToUSB() {
// TODO
}
} }

View File

@@ -11,6 +11,8 @@
"Tinkertanker/pxt-ssd1306-microbit" "Tinkertanker/pxt-ssd1306-microbit"
], ],
"preferredRepos": [ "preferredRepos": [
"Microsoft/pxt-neopixel",
"Microsoft/pxt-microturtle",
"calliope-mini/pxt-calliope-modem", "calliope-mini/pxt-calliope-modem",
"calliope-mini/pxt-calliope-bc95", "calliope-mini/pxt-calliope-bc95",
"calliope-mini/pxt-calliope-esp", "calliope-mini/pxt-calliope-esp",