Compare commits

..

9 Commits

Author SHA1 Message Date
Peli de Halleux
5344717749 slow down device poller 2019-10-12 22:29:33 -07:00
Peli de Halleux
1bbf8a4473 set mode then poke 2019-10-12 22:19:18 -07:00
Peli de Halleux
f1d9075c9d more logging 2019-10-12 18:42:12 -07:00
Peli de Halleux
cffbdb9eae more logging 2019-10-12 18:39:11 -07:00
Peli de Halleux
cc75ae57da indent issue 2019-10-12 15:38:19 -07:00
Peli de Halleux
068300c5f5 typo 2019-10-12 15:08:49 -07:00
Peli de Halleux
251f198441 fix console for mode 2019-10-12 15:06:13 -07:00
Peli de Halleux
fe39902d10 reading nxt analog sensor dev type 2019-10-11 22:20:16 -07:00
Peli de Halleux
030cd46c5f add constants 2019-10-11 22:06:47 -07:00
17 changed files with 97 additions and 158 deletions

View File

@@ -1,12 +0,0 @@
name: Compress images
on: pull_request
jobs:
build:
name: calibreapp/image-actions
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
- name: calibreapp/image-actions
uses: calibreapp/image-actions@master
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View File

@@ -73,12 +73,6 @@ Verify that the program you just created shows eyes on the Brick Display, and th
**Well done!** **Well done!**
## Run it Again
![EV3 Brick with Try in BrkProg_Save Folder in File Manager](/static/getting-started/try-in-file-manager.png)
Use the Brick Buttons and navigate to the File Manager tab. Open the **BrkProg_SAVE** folder, select **Try** and click the center button to run it again.
## Connect a Large Motor @unplugged ## Connect a Large Motor @unplugged
Now you will learn to control the Large Motor. Now you will learn to control the Large Motor.

View File

@@ -1,3 +1,3 @@
{ {
"appref": "v1.2.26" "appref": "v1.2.22"
} }

View File

@@ -388,12 +388,12 @@
} }
function downloadWin64() { function downloadWin64() {
// TODO: Keep this link up-to-date with the desired release version // TODO: Keep this link up-to-date with the desired release version
window.open("https://makecode.com/api/release/ev3/v1.2.26/win64"); window.open("https://makecode.com/api/release/ev3/v1.2.22/win64");
tickEvent("offlineapp.download", { "target": "ev3", "platform": "win64" }); tickEvent("offlineapp.download", { "target": "ev3", "platform": "win64" });
} }
function downloadMac64() { function downloadMac64() {
// TODO: Keep this link up-to-date with the desired release version // TODO: Keep this link up-to-date with the desired release version
window.open("https://makecode.com/api/release/ev3/v1.2.26/mac64"); window.open("https://makecode.com/api/release/ev3/v1.2.22/mac64");
tickEvent("offlineapp.download", { "target": "ev3", "platform": "mac64" }); tickEvent("offlineapp.download", { "target": "ev3", "platform": "mac64" });
} }
</script> </script>

View File

@@ -1,3 +0,0 @@
{
"appref": "v1.2"
}

View File

@@ -1,6 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" id="svg4487" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.4" clip-rule="evenodd" version="1.1" width="32" height="32" viewBox="0 0 32 32">
<path id="path4485" fill="#696969" d="M16.1 2.7a13.8 13.8 0 00-4.4 27c.7 0 1-.4 1-.7v-2.4c-3.9.9-4.7-1.8-4.7-1.8-.6-1.6-1.5-2-1.5-2-1.3-1 0-.9 0-.9 1.4.1 2.2 1.4 2.2 1.4 1.2 2.1 3.2 1.5 4 1.2a3 3 0 01.9-1.9c-3.1-.3-6.3-1.5-6.3-6.8 0-1.5.5-2.7 1.4-3.7a5 5 0 01.1-3.7s1.2-.3 3.8 1.4a13.2 13.2 0 013.5-.4c1.2 0 2.4.1 3.5.4 2.6-1.7 3.8-1.4 3.8-1.4a5 5 0 01.1 3.7c.9 1 1.4 2.2 1.4 3.7 0 5.3-3.2 6.5-6.3 6.8.5.5 1 1.3 1 2.6V29c0 .4.2.8.9.6a13.8 13.8 0 00-4.4-27"/>
<g id="text4497" fill="#000" fill-opacity="1" stroke="none" stroke-width=".7" aria-label="v" font-family="consolas" font-size="26.6" font-stretch="normal" font-style="normal" font-variant="normal" font-weight="400" letter-spacing="0" style="line-height:1.25;-inkscape-font-specification:consolas" transform="rotate(14.1)" word-spacing="0">
<path id="path4499" stroke-width=".7" d="M21.4-1.7l2.9 8 3-8.3.8-1.5q.4-.4 1-.4.8 0 1.2.5.5.4.5 1v.6l-.3.5-.2.7-3.4 8.4-.4 1-.5 1-.7.5q-.4.2-1 .2-.8 0-1.2-.3-.5-.3-.7-.8l-.7-1.6-3.4-8.3q0-.4-.2-.7l-.2-.6-.1-.6.2-.7.6-.6q.4-.2.9-.2.9 0 1.2.5l.7 1.7z" font-family="Arial Rounded MT Bold" font-stretch="normal" font-style="normal" font-variant="normal" font-weight="400" style="-inkscape-font-specification:'Arial Rounded MT Bold, '"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.4 KiB

View File

@@ -1,18 +1,16 @@
# Troubleshooting # Troubleshooting download problems
## Download issues
If you're having trouble getting your code onto the EV3 Brick, try these steps to see if you can fix the problem. If you're having trouble getting your code onto the EV3 Brick, try these steps to see if you can fix the problem.
### Check your **@drivename@** firmware ## Check your **@drivename@** firmware
MakeCode needs a firmware version of **1.10E** or higher installed on your brick. MakeCode needs a firmware version of **1.10E** or higher installed on your brick.
#### ~hint ### ~hint
Firmware is the software that runs all the basic operations on your EV3 Brick. Your programs and the firmware work together to make the EV3 Brick do all things you want it to. Your EV3 Brick comes with firmware pre-installed, but it may need to be updated to work properly with MakeCode. Firmware is the software that runs all the basic operations on your EV3 Brick. Your programs and the firmware work together to make the EV3 Brick do all things you want it to. Your EV3 Brick comes with firmware pre-installed, but it may need to be updated to work properly with MakeCode.
#### ~ ### ~
To check the the firmware version on your EV3 Brick: To check the the firmware version on your EV3 Brick:
@@ -27,15 +25,15 @@ To check the the firmware version on your EV3 Brick:
If you can't find the **Brick Info** or you see that the version is less than **1.10E**, **you need to upgrade your firmware**. If you can't find the **Brick Info** or you see that the version is less than **1.10E**, **you need to upgrade your firmware**.
### Upgrade your **@drivename@** ## Upgrade your **@drivename@**
If your a firmware version level is less than **1.10E**, you need to install an upgraded version. You can upgrade the firmware with the **EV3 Lab** or **EV3 Programming** software. Also, you can do a manual upgrade by downloading the firmware install file. See the [Firmware Update](https://education.lego.com/en-us/support/mindstorms-ev3/firmware-update) support page to learn about the upgrade process. If your a firmware version level is less than **1.10E**, you need to install an upgraded version. You can upgrade the firmware with the **EV3 Lab** or **EV3 Programming** software. Also, you can do a manual upgrade by downloading the firmware install file. See the [Firmware Update](https://education.lego.com/en-us/support/mindstorms-ev3/firmware-update) support page to learn about the upgrade process.
#### ~ hint ### ~ hint
**Recommended:** Upgrade with the **[EV3 Device Manager](https://ev3manager.education.lego.com/)** **Recommended:** Upgrade with the **[EV3 Device Manager](https://ev3manager.education.lego.com/)**
#### ~ ### ~
## Can I see the **@drivename@** drive on my computer? ## Can I see the **@drivename@** drive on my computer?
@@ -47,24 +45,14 @@ On Windows, it looks like this in Explorer:
If you don't see the **@drivename@** drive, make sure your brick is powered on and check that your USB connection is good. If you don't see the **@drivename@** drive, make sure your brick is powered on and check that your USB connection is good.
### The display on the EV3 Brick is blank ## The display on the EV3 Brick is blank
Make sure your EV3 Brick is charged and powered on. If your it doesn't turn on, find the charger and plug it into wall power, then connect it to your EV3 Brick. Does it turn on and start up? Make sure your EV3 Brick is charged and powered on. If your it doesn't turn on, find the charger and plug it into wall power, then connect it to your EV3 Brick. Does it turn on and start up?
### I still can't see my @drivename@ drive ## I still can't see my @drivename@ drive
Make sure that one end of your USB cable is firmly inserted into a USB port on the computer and the other end is connected to the EV3 Brick. If you still can't see the **@drivename@** drive, try a different port on the computer. If that doesn't work then maybe your cable is faulty or you need to reset the EV3 Brick. Make sure that one end of your USB cable is firmly inserted into a USB port on the computer and the other end is connected to the EV3 Brick. If you still can't see the **@drivename@** drive, try a different port on the computer. If that doesn't work then maybe your cable is faulty or you need to reset the EV3 Brick.
## Why can't I delete my program (*.uf2) files from the Brick? #deletefiles
There's a bug in the firmware which prevents you from deleting the programs (``*.uf2`` files) from your EV3 Brick. There isn't a firmware update to fix this yet.
We have prepared a special program that lets you delete UF2 files from the brick.
Download [these PDF instructions](/file-manager.pdf) and drop the PDF on the brick drive.
This will present you with an menu for deleting files.
For other common questions, try the FAQ page https://makecode.mindstorms.com/faq.
## How do I reset my EV3 Brick? ## How do I reset my EV3 Brick?
If you think your USB connection is good and you still can't see your **@drivename@** drive, try giving the EV3 Brick a reset. You can follow these steps to reset: If you think your USB connection is good and you still can't see your **@drivename@** drive, try giving the EV3 Brick a reset. You can follow these steps to reset:

View File

@@ -1,4 +1,5 @@
const enum ColorSensorMode { const enum ColorSensorMode {
None = 0,
//% block="reflected light intensity" //% block="reflected light intensity"
ReflectedLightIntensity = 0, ReflectedLightIntensity = 0,
//% block="ambient light intensity" //% block="ambient light intensity"
@@ -60,6 +61,7 @@ namespace sensors {
super(port) super(port)
this.thresholdDetector = new sensors.ThresholdDetector(this.id()); this.thresholdDetector = new sensors.ThresholdDetector(this.id());
this.calibrating = false; this.calibrating = false;
this.setMode(ColorSensorMode.ReflectedLightIntensity);
} }
_colorEventValue(value: number) { _colorEventValue(value: number) {
@@ -174,27 +176,11 @@ namespace sensors {
//% group="Color Sensor" //% group="Color Sensor"
//% blockGap=8 //% blockGap=8
color(): ColorSensorColor { color(): ColorSensorColor {
this.poke();
this.setMode(ColorSensorMode.Color) this.setMode(ColorSensorMode.Color)
this.poke();
return this.getNumber(NumberFormat.UInt8LE, 0) return this.getNumber(NumberFormat.UInt8LE, 0)
} }
/**
* Checks the color is being detected
* @param color the color to detect
*/
//% help=sensors/color-sensor/is-color-detected
//% block="is **color sensor** %this|detected|%color=colorEnumPicker"
//% blockId=colorisColorDetectedDetected
//% parts="colorsensor"
//% blockNamespace=sensors
//% this.fieldEditor="ports"
//% weight=99 blockGap=8
//% group="Color Sensor"
isColorDetected(color: number) {
return this.color() == color;
}
/** /**
* Get the current raw rgb values as an array from the color sensor. * Get the current raw rgb values as an array from the color sensor.
* @param sensor the color sensor to query the request * @param sensor the color sensor to query the request
@@ -208,8 +194,8 @@ namespace sensors {
//% group="Color Sensor" //% group="Color Sensor"
//% blockGap=8 //% blockGap=8
rgbRaw(): number[] { rgbRaw(): number[] {
this.poke();
this.setMode(ColorSensorMode.RgbRaw); this.setMode(ColorSensorMode.RgbRaw);
this.poke();
return [this.getNumber(NumberFormat.UInt16LE, 0), this.getNumber(NumberFormat.UInt16LE, 2), this.getNumber(NumberFormat.UInt16LE, 4)]; return [this.getNumber(NumberFormat.UInt16LE, 0), this.getNumber(NumberFormat.UInt16LE, 2), this.getNumber(NumberFormat.UInt16LE, 4)];
} }
@@ -262,8 +248,8 @@ namespace sensors {
//% weight=87 blockGap=8 //% weight=87 blockGap=8
//% group="Color Sensor" //% group="Color Sensor"
light(mode: LightIntensityMode) { light(mode: LightIntensityMode) {
this.poke();
this.setMode(<ColorSensorMode><number>mode) this.setMode(<ColorSensorMode><number>mode)
this.poke();
switch (mode) { switch (mode) {
case LightIntensityMode.ReflectedRaw: case LightIntensityMode.ReflectedRaw:
return this.reflectedLightRaw(); return this.reflectedLightRaw();
@@ -293,8 +279,8 @@ namespace sensors {
*/ */
//% //%
reflectedLightRaw(): number { reflectedLightRaw(): number {
this.poke();
this.setMode(ColorSensorMode.RefRaw); this.setMode(ColorSensorMode.RefRaw);
this.poke();
return this.getNumber(NumberFormat.UInt16LE, 0); return this.getNumber(NumberFormat.UInt16LE, 0);
} }

View File

@@ -1,30 +0,0 @@
# Is Color Detected
Checks the color is detected
```sig
let b = sensors.color1.isColorDetected(ColorSensorColor.Blue)
```
The [color](/reference/sensors/color) you choose to look for is one of the colors that the sensor can detect. If you want to use colors for tracking, it's best to use a color that is the same or very close to the ones the sensor detects.
## Parameters
* **color**: the [color](/reference/sensors/color) to watch for.
## Example
Wait for the sensor to see ``blue``. Then, show an expression on the screen.
```blocks
brick.showString("Waiting for blue", 1)
while(!sensors.color1.isColorDetected(ColorSensorColor.Blue)) {
pause(20)
}
brick.clearScreen()
brick.showImage(images.expressionsSick)
```
## See also
[on color detected](/reference/sensors/color-sensor/on-color-detected), [color](/reference/sensors/color)

2
libs/core/dal.d.ts vendored
View File

@@ -309,6 +309,8 @@ declare const enum DAL {
DEVICE_TYPE_NXT_LIGHT = 2, DEVICE_TYPE_NXT_LIGHT = 2,
DEVICE_TYPE_NXT_SOUND = 3, DEVICE_TYPE_NXT_SOUND = 3,
DEVICE_TYPE_NXT_COLOR = 4, DEVICE_TYPE_NXT_COLOR = 4,
DEVICE_TYPE_NXT_ULTRASONIC = 5,
DEVICE_TYPE_NXT_TEMPERATURE = 6,
DEVICE_TYPE_TACHO = 7, DEVICE_TYPE_TACHO = 7,
DEVICE_TYPE_MINITACHO = 8, DEVICE_TYPE_MINITACHO = 8,
DEVICE_TYPE_NEWTACHO = 9, DEVICE_TYPE_NEWTACHO = 9,

View File

@@ -11,6 +11,8 @@
#define DEVICE_TYPE_NXT_LIGHT 2 #define DEVICE_TYPE_NXT_LIGHT 2
#define DEVICE_TYPE_NXT_SOUND 3 #define DEVICE_TYPE_NXT_SOUND 3
#define DEVICE_TYPE_NXT_COLOR 4 #define DEVICE_TYPE_NXT_COLOR 4
#define DEVICE_TYPE_NXT_ULTRASONIC 5
#define DEVICE_TYPE_NXT_TEMPERATURE 6
#define DEVICE_TYPE_TACHO 7 #define DEVICE_TYPE_TACHO 7
#define DEVICE_TYPE_MINITACHO 8 #define DEVICE_TYPE_MINITACHO 8
#define DEVICE_TYPE_NEWTACHO 9 #define DEVICE_TYPE_NEWTACHO 9

View File

@@ -82,7 +82,7 @@ namespace sensors.internal {
poller: Poller; poller: Poller;
constructor(p: number) { constructor(p: number) {
this.port = p this.port = p; // 0-based
this.connType = DAL.CONN_NONE this.connType = DAL.CONN_NONE
this.devType = DAL.DEVICE_TYPE_NONE this.devType = DAL.DEVICE_TYPE_NONE
this.iicid = '' this.iicid = ''
@@ -121,7 +121,7 @@ namespace sensors.internal {
powerMM = control.mmap("/dev/lms_power", 2, 0) powerMM = control.mmap("/dev/lms_power", 2, 0)
devPoller = new Poller(250, () => { return hashDevices(); }, devPoller = new Poller(500, () => { return hashDevices(); },
(prev, curr) => { (prev, curr) => {
detectDevices(); detectDevices();
}); });
@@ -277,47 +277,63 @@ void cUiUpdatePower(void)
const conns = analogMM.slice(AnalogOff.InConn, DAL.NUM_INPUTS) const conns = analogMM.slice(AnalogOff.InConn, DAL.NUM_INPUTS)
let r = 0; let r = 0;
for (let i = 0; i < conns.length; ++i) { for (let i = 0; i < conns.length; ++i) {
r = conns[i] + (r << 6) + (r << 16) - r; r = (r << 8 | conns[i]);
} }
//control.dmesg(`devices hash: ${r}`);
return r; return r;
} }
let nonActivated = 0; let nonActivated = 0;
function detectDevices() { function detectDevices() {
control.dmesg(`detect devices (hash ${hashDevices()})`) control.dmesg(`detect devices (${nonActivated} na)`)
const conns = analogMM.slice(AnalogOff.InConn, DAL.NUM_INPUTS) const inDcm = analogMM.slice(AnalogOff.InDcm, DAL.NUM_INPUTS)
const inConn = analogMM.slice(AnalogOff.InConn, DAL.NUM_INPUTS)
let numChanged = 0; let numChanged = 0;
const uartSensors: SensorInfo[] = []; const uartSensors: SensorInfo[] = [];
for (const sensorInfo of sensorInfos) { for (const sensorInfo of sensorInfos) {
const newConn = conns[sensorInfo.port] const newConn = inConn[sensorInfo.port]
if (newConn == sensorInfo.connType if (newConn == sensorInfo.connType) {
&& sensorInfo.sensor // control.dmesg(`connection unchanged ${newConn} at ${sensorInfo.port}`)
&& sensorInfo.sensor.isActive()) {
if (newConn == DAL.CONN_INPUT_UART)
uartSensors.push(sensorInfo);
continue; continue;
} }
numChanged++ numChanged++
sensorInfo.connType = newConn sensorInfo.connType = newConn
sensorInfo.devType = DAL.DEVICE_TYPE_NONE sensorInfo.devType = DAL.DEVICE_TYPE_NONE;
if (newConn == DAL.CONN_INPUT_UART) { switch (newConn) {
control.dmesg(`new UART connection at ${sensorInfo.port}`) case DAL.CONN_INPUT_UART: {
updateUartMode(sensorInfo.port, 0); control.dmesg(`new UART connection at ${sensorInfo.port}`)
uartSensors.push(sensorInfo); updateUartMode(sensorInfo.port, 0);
} else if (newConn == DAL.CONN_NXT_IIC) { uartSensors.push(sensorInfo);
control.dmesg(`new IIC connection at ${sensorInfo.port}`) break;
sensorInfo.devType = DAL.DEVICE_TYPE_IIC_UNKNOWN }
sensorInfo.iicid = readIICID(sensorInfo.port) case DAL.CONN_NXT_IIC: {
control.dmesg(`IIC ID ${sensorInfo.iicid.length}`) control.dmesg(`new NXT IIC connection at ${sensorInfo.port}`)
} else if (newConn == DAL.CONN_INPUT_DUMB) { sensorInfo.devType = DAL.DEVICE_TYPE_IIC_UNKNOWN
control.dmesg(`new DUMB connection at ${sensorInfo.port}`) sensorInfo.iicid = readIICID(sensorInfo.port)
// TODO? for now assume touch control.dmesg(`IIC ID ${sensorInfo.iicid.length}`)
sensorInfo.devType = DAL.DEVICE_TYPE_TOUCH break;
} else if (newConn == DAL.CONN_NONE || newConn == 0) { } case DAL.CONN_NXT_DUMB: { // analog NXT sensor
//control.dmesg(`disconnect at port ${sensorInfo.port}`) control.dmesg(`new NXT analog connection at ${sensorInfo.port}`);
} else { sensorInfo.devType = inDcm[sensorInfo.port];
control.dmesg(`unknown connection type: ${newConn} at ${sensorInfo.port}`) control.dmesg(`NXT analog dev type ${sensorInfo.devType}`);
break;
}
case DAL.CONN_INPUT_DUMB: {
control.dmesg(`new DUMB connection at ${sensorInfo.port}`)
// TODO? for now assume touch
sensorInfo.devType = DAL.DEVICE_TYPE_TOUCH
break;
}
case DAL.CONN_NONE:
case 0: {
//control.dmesg(`disconnect at port ${sensorInfo.port}`)
break;
}
default: {
control.dmesg(`unknown connection type: ${newConn} at ${sensorInfo.port}`)
break;
}
} }
} }
@@ -326,8 +342,7 @@ void cUiUpdatePower(void)
for (const sensorInfo of uartSensors) { for (const sensorInfo of uartSensors) {
let uinfo = readUartInfo(sensorInfo.port, 0) let uinfo = readUartInfo(sensorInfo.port, 0)
sensorInfo.devType = uinfo[TypesOff.Type] sensorInfo.devType = uinfo[TypesOff.Type]
const mode = uinfo[TypesOff.Mode]; control.dmesg(`UART type ${sensorInfo.devType}`)
control.dmesg(`UART type ${sensorInfo.devType} mode ${mode}`)
} }
} }
@@ -431,20 +446,20 @@ void cUiUpdatePower(void)
constructor(port: number) { constructor(port: number) {
super(port) super(port)
this.mode = 0 this.mode = 0
this.realmode = 0 this.realmode = 0;
} }
_activated() { _activated() {
this.realmode = 0 this.realmode = 0;
this._setMode(this.mode) this._setMode(this.mode)
} }
protected _setMode(m: number) { protected _setMode(m: number) {
//control.dmesg(`_setMode p=${this.port} m: ${this.realmode} -> ${m}`)
let v = m | 0 let v = m | 0
this.mode = v this.mode = v
if (!this.isActive()) return if (!this.isActive()) return
if (this.realmode != this.mode) { if (this.realmode != this.mode) {
control.dmesg(`_setMode p=${this._port} m: ${this.realmode} -> ${v}`)
this.realmode = v this.realmode = v
setUartMode(this._port, v) setUartMode(this._port, v)
} }
@@ -462,7 +477,7 @@ void cUiUpdatePower(void)
reset() { reset() {
if (this.isActive()) uartReset(this._port); if (this.isActive()) uartReset(this._port);
this.realmode = -1; this.realmode = 0;
} }
} }
@@ -540,6 +555,8 @@ void cUiUpdatePower(void)
function uartClearChange(port: number) { function uartClearChange(port: number) {
control.dmesg(`UART clear change`); control.dmesg(`UART clear change`);
const UART_DATA_READY = 8
const UART_PORT_CHANGED = 1
while (true) { while (true) {
let status = getUartStatus(port) let status = getUartStatus(port)
if (port < 0) break if (port < 0) break
@@ -560,7 +577,7 @@ void cUiUpdatePower(void)
} }
function setUartModes() { function setUartModes() {
control.dmesg(`UART set modes 0x${devcon.toHex()}`) control.dmesg(`UART set modes`)
uartMM.ioctl(IO.UART_SET_CONN, devcon) uartMM.ioctl(IO.UART_SET_CONN, devcon)
const ports: number[] = []; const ports: number[] = [];
for (let port = 0; port < DAL.NUM_INPUTS; ++port) { for (let port = 0; port < DAL.NUM_INPUTS; ++port) {
@@ -573,8 +590,6 @@ void cUiUpdatePower(void)
const port = ports.pop(); const port = ports.pop();
const status = waitNonZeroUartStatus(port) const status = waitNonZeroUartStatus(port)
control.dmesg(`UART status ${status} at ${port}`); control.dmesg(`UART status ${status} at ${port}`);
if (!(status & UART_DATA_READY))
setUartMode(port, devcon[DevConOff.Mode + port]);
} }
} }
@@ -585,22 +600,20 @@ void cUiUpdatePower(void)
devcon.setNumber(NumberFormat.Int8LE, DevConOff.Mode + port, mode) devcon.setNumber(NumberFormat.Int8LE, DevConOff.Mode + port, mode)
} }
const UART_PORT_CHANGED = 1
const UART_DATA_READY = 8
function setUartMode(port: number, mode: number) { function setUartMode(port: number, mode: number) {
control.dmesg(`UART set mode ${mode} at ${port}`);
const UART_PORT_CHANGED = 1
while (true) { while (true) {
if (port < 0) return if (port < 0) return
updateUartMode(port, mode); updateUartMode(port, mode);
control.dmesg(`UART set mode 0x${devcon.toHex()}`)
uartMM.ioctl(IO.UART_SET_CONN, devcon) uartMM.ioctl(IO.UART_SET_CONN, devcon)
let status = waitNonZeroUartStatus(port) let status = waitNonZeroUartStatus(port)
if (status & UART_PORT_CHANGED) { if (status & UART_PORT_CHANGED) {
control.dmesg(`UART clear changed at ${port}`) control.dmesg(`UART clear changed at ${port}`)
uartClearChange(port) uartClearChange(port)
} else { } else {
control.dmesg(`UART status ${status}`); control.dmesg(`UART status ${status} at ${port}`);
if (status & UART_DATA_READY) break;
break;
} }
pause(10) pause(10)
} }
@@ -614,15 +627,16 @@ void cUiUpdatePower(void)
DAL.MAX_DEVICE_DATALENGTH) DAL.MAX_DEVICE_DATALENGTH)
} }
function getUartNumber(fmt: NumberFormat, off: number, port: number) { function getUartNumber(fmt: NumberFormat, off: number, port: number): number {
if (port < 0) return 0 if (port < 0) return 0
let index = uartMM.getNumber(NumberFormat.UInt16LE, UartOff.Actual + port * 2) const index = uartMM.getNumber(NumberFormat.UInt16LE, UartOff.Actual + port * 2)
return uartMM.getNumber(fmt, return uartMM.getNumber(fmt,
UartOff.Raw + DAL.MAX_DEVICE_DATALENGTH * 300 * port + DAL.MAX_DEVICE_DATALENGTH * index + off) UartOff.Raw + DAL.MAX_DEVICE_DATALENGTH * 300 * port + DAL.MAX_DEVICE_DATALENGTH * index + off)
} }
export function setIICMode(port: number, type: number, mode: number) { export function setIICMode(port: number, type: number, mode: number) {
if (port < 0) return; if (port < 0) return;
control.dmesg(`iic set type ${type} mode ${mode} at ${port}`)
devcon.setNumber(NumberFormat.Int8LE, DevConOff.Connection + port, DAL.CONN_NXT_IIC) devcon.setNumber(NumberFormat.Int8LE, DevConOff.Connection + port, DAL.CONN_NXT_IIC)
devcon.setNumber(NumberFormat.Int8LE, DevConOff.Type + port, type) devcon.setNumber(NumberFormat.Int8LE, DevConOff.Type + port, type)
devcon.setNumber(NumberFormat.Int8LE, DevConOff.Mode + port, mode) devcon.setNumber(NumberFormat.Int8LE, DevConOff.Mode + port, mode)
@@ -900,4 +914,4 @@ namespace sensors {
} }
} }
} }
} }

View File

@@ -21,6 +21,7 @@ namespace console._screen {
console.addListener(log); console.addListener(log);
brick.buttonUp.onEvent(ButtonEvent.Bumped, () => scroll(-3)) brick.buttonUp.onEvent(ButtonEvent.Bumped, () => scroll(-3))
brick.buttonDown.onEvent(ButtonEvent.Bumped, () => scroll(3)) brick.buttonDown.onEvent(ButtonEvent.Bumped, () => scroll(3))
brick.showConsole();
} }
} }

View File

@@ -27,6 +27,7 @@ namespace brick {
ShowLines, ShowLines,
Image, Image,
Ports, Ports,
Console,
Custom Custom
} }
let screenMode = ScreenMode.None; let screenMode = ScreenMode.None;
@@ -197,6 +198,12 @@ namespace brick {
}) })
} }
export function showConsole() {
console.sendToScreen();
screenMode = ScreenMode.Console;
clearScreen();
}
/** /**
* An image * An image
* @param image the image * @param image the image

View File

@@ -1,6 +1,6 @@
{ {
"name": "pxt-ev3", "name": "pxt-ev3",
"version": "1.4.17", "version": "1.4.7",
"description": "LEGO MINDSTORMS EV3 for Microsoft MakeCode", "description": "LEGO MINDSTORMS EV3 for Microsoft MakeCode",
"private": false, "private": false,
"keywords": [ "keywords": [
@@ -45,8 +45,8 @@
"@types/web-bluetooth": "0.0.4" "@types/web-bluetooth": "0.0.4"
}, },
"dependencies": { "dependencies": {
"pxt-common-packages": "6.16.37", "pxt-common-packages": "6.16.10",
"pxt-core": "5.30.19" "pxt-core": "5.25.13"
}, },
"scripts": { "scripts": {
"test": "node node_modules/pxt-core/built/pxt.js travis" "test": "node node_modules/pxt-core/built/pxt.js travis"

View File

@@ -37,10 +37,7 @@
"publishing": true, "publishing": true,
"importing": true, "importing": true,
"preferredPackages": [], "preferredPackages": [],
"githubPackages": true, "githubPackages": true
"cloudProviders": {
"github": {}
}
}, },
"compile": { "compile": {
"isNative": true, "isNative": true,
@@ -204,6 +201,5 @@
"alwaysGithubItem": true, "alwaysGithubItem": true,
"enableTrace": true "enableTrace": true
}, },
"ignoreDocsErrors": true, "ignoreDocsErrors": true
"uploadDocs": true
} }

View File

@@ -27,6 +27,6 @@
"Tutorial Videos": "videos" "Tutorial Videos": "videos"
}, },
"electronManifest": { "electronManifest": {
"latest": "v1.2.26" "latest": "v1.2.22"
} }
} }