mirror of
https://github.com/scratchfoundation/scratch-vm.git
synced 2025-08-28 22:30:40 -04:00
Trying some different enum values and reorganizing the enums at top of file.
This commit is contained in:
parent
fe43ecfa73
commit
f45539280a
1 changed files with 42 additions and 42 deletions
|
@ -28,6 +28,26 @@ const Ev3PairingPin = '1234';
|
|||
*/
|
||||
const BTSendRateMax = 40;
|
||||
|
||||
/**
|
||||
* Enum for Ev3 byte specs used as parameter encodings to various argument values.
|
||||
* Found in the 'EV3 Firmware Developer Kit', section4, page 9, at
|
||||
* https://education.lego.com/en-us/support/mindstorms-ev3/developer-kits.
|
||||
*
|
||||
* The format for these values is:
|
||||
* 0xxxxxxx for Short Format
|
||||
* 1ttt-bbb for Long Format
|
||||
*
|
||||
* @readonly
|
||||
* @enum {number}
|
||||
*/
|
||||
const Ev3ParamEncoding = {
|
||||
ONE_BYTE: 0x81, // = 0b1000-001 = constant value, 1 byte to follow
|
||||
TWO_BYTES: 0x82, // = 0b1000-010 = constant value, 2 bytes to follow
|
||||
FOUR_BYTES: 0x83, // = 0b1000-011 = constant value, 4 bytes to follow
|
||||
GLOBAL_ONE_BYTE: 0xE1, // = 0b1110-001 = size of global var, 1 byte to follow
|
||||
GLOBAL_INDEX_0: 0x20 // = 0b00100000 = global var index "0"
|
||||
};
|
||||
|
||||
/**
|
||||
* Enum for Ev3 direct command types.
|
||||
* Found in the 'EV3 Communication Developer Kit', section 4, page 24, at
|
||||
|
@ -63,26 +83,6 @@ const Ev3Opcode = {
|
|||
OPINPUT_READSI: 0x9D
|
||||
};
|
||||
|
||||
/**
|
||||
* Enum for Ev3 byte values used as arguments to various opcodes.
|
||||
* Found in the 'EV3 Firmware Developer Kit', section4, page 9, at
|
||||
* https://education.lego.com/en-us/support/mindstorms-ev3/developer-kits.
|
||||
*
|
||||
* The format for these values is:
|
||||
* 0xxxxxxx for Short Format
|
||||
* 1ttt-bbb for Long Format
|
||||
*
|
||||
* @readonly
|
||||
* @enum {number}
|
||||
*/
|
||||
const Ev3ByteValue = {
|
||||
ONE_BYTE: 0x81, // = 0b1000-001 = constant value, 1 byte to follow
|
||||
TWO_BYTES: 0x82, // = 0b1000-010 = constant value, 2 bytes to follow
|
||||
FOUR_BYTES: 0x83, // = 0b1000-011 = constant value, 4 bytes to follow
|
||||
GLOBAL_ONE_BYTE: 0xE1, // = 0b1110-001 = size of global var, 1 byte to follow
|
||||
GLOBAL_INDEX_0: 0x20 // = 0b00100000 = global var index "0"
|
||||
};
|
||||
|
||||
/**
|
||||
* Enum for Ev3 values used as arguments to various opcodes.
|
||||
* Found in the 'EV3 Firmware Developer Kit', section4, page 10-onwards, at
|
||||
|
@ -90,7 +90,7 @@ const Ev3ByteValue = {
|
|||
* @readonly
|
||||
* @enum {number}
|
||||
*/
|
||||
const Ev3Value = {
|
||||
const Ev3Args = {
|
||||
LAYER: 0x00, // always 0, chained EV3s not supported
|
||||
COAST: 0x00,
|
||||
BRAKE: 0x01,
|
||||
|
@ -301,7 +301,7 @@ class EV3Motor {
|
|||
const port = this._portMask(this._index);
|
||||
let n = milliseconds;
|
||||
let speed = this._power * this._direction;
|
||||
const ramp = Ev3Value.LONG_RAMP;
|
||||
const ramp = Ev3Args.LONG_RAMP;
|
||||
|
||||
let byteCommand = [];
|
||||
byteCommand[0] = Ev3Opcode.OPOUTPUT_TIME_SPEED;
|
||||
|
@ -327,16 +327,16 @@ class EV3Motor {
|
|||
// Generate motor command values
|
||||
const runcmd = this._runValues(run);
|
||||
byteCommand = byteCommand.concat([
|
||||
Ev3Value.LAYER,
|
||||
Ev3Args.LAYER,
|
||||
port,
|
||||
Ev3ByteValue.ONE_BYTE,
|
||||
Ev3ParamEncoding.ONE_BYTE,
|
||||
dir & 0xff,
|
||||
Ev3ByteValue.ONE_BYTE,
|
||||
Ev3ParamEncoding.ONE_BYTE,
|
||||
rampup
|
||||
]).concat(runcmd.concat([
|
||||
Ev3ByteValue.ONE_BYTE,
|
||||
Ev3ParamEncoding.ONE_BYTE,
|
||||
rampdown,
|
||||
Ev3Value.BRAKE
|
||||
Ev3Args.BRAKE
|
||||
]));
|
||||
|
||||
const cmd = this._parent.generateCommand(
|
||||
|
@ -380,9 +380,9 @@ class EV3Motor {
|
|||
Ev3Command.DIRECT_COMMAND_NO_REPLY,
|
||||
[
|
||||
Ev3Opcode.OPOUTPUT_STOP,
|
||||
Ev3Value.LAYER,
|
||||
Ev3Args.LAYER,
|
||||
this._portMask(this._index), // port output bit field
|
||||
Ev3Value.COAST
|
||||
Ev3Args.COAST
|
||||
]
|
||||
);
|
||||
|
||||
|
@ -398,7 +398,7 @@ class EV3Motor {
|
|||
// If run duration is less than max 16-bit integer
|
||||
if (run < 0x7fff) {
|
||||
return [
|
||||
Ev3ByteValue.TWO_BYTES,
|
||||
Ev3ParamEncoding.TWO_BYTES,
|
||||
run & 0xff,
|
||||
(run >> 8) & 0xff
|
||||
];
|
||||
|
@ -406,7 +406,7 @@ class EV3Motor {
|
|||
|
||||
// Run forever
|
||||
return [
|
||||
Ev3ByteValue.FOUR_BYTES,
|
||||
Ev3ParamEncoding.FOUR_BYTES,
|
||||
run & 0xff,
|
||||
(run >> 8) & 0xff,
|
||||
(run >> 16) & 0xff,
|
||||
|
@ -550,12 +550,12 @@ class EV3 {
|
|||
[
|
||||
Ev3Opcode.OPSOUND,
|
||||
Ev3Opcode.OPSOUND_CMD_TONE,
|
||||
Ev3ByteValue.ONE_BYTE,
|
||||
Ev3ParamEncoding.ONE_BYTE,
|
||||
2,
|
||||
Ev3ByteValue.TWO_BYTES,
|
||||
Ev3ParamEncoding.TWO_BYTES,
|
||||
freq,
|
||||
freq >> 8,
|
||||
Ev3ByteValue.TWO_BYTES,
|
||||
Ev3ParamEncoding.TWO_BYTES,
|
||||
time,
|
||||
time >> 8
|
||||
]
|
||||
|
@ -735,11 +735,11 @@ class EV3 {
|
|||
if (this._pollingCounter % 20 === 0) {
|
||||
// GET DEVICE LIST
|
||||
cmds[0] = Ev3Opcode.OPINPUT_DEVICE_LIST;
|
||||
cmds[1] = Ev3ByteValue.ONE_BYTE;
|
||||
cmds[1] = Ev3ParamEncoding.ONE_BYTE;
|
||||
cmds[2] = 33; // 0x21 ARRAY // TODO: document
|
||||
cmds[3] = 96; // 0x60 CHANGED // TODO: document
|
||||
cmds[4] = Ev3ByteValue.GLOBAL_ONE_BYTE;
|
||||
cmds[5] = Ev3ByteValue.GLOBAL_INDEX_0;
|
||||
cmds[4] = Ev3ParamEncoding.GLOBAL_ONE_BYTE;
|
||||
cmds[5] = Ev3ParamEncoding.GLOBAL_INDEX_0;
|
||||
|
||||
// Command and payload lengths
|
||||
allocation = 33;
|
||||
|
@ -754,11 +754,11 @@ class EV3 {
|
|||
for (let i = 0; i < 4; i++) {
|
||||
if (this._sensorPorts[i] !== 'none') {
|
||||
cmds[index + 0] = Ev3Opcode.OPINPUT_READSI;
|
||||
cmds[index + 1] = Ev3Value.LAYER;
|
||||
cmds[index + 1] = Ev3Args.LAYER;
|
||||
cmds[index + 2] = i; // PORT
|
||||
cmds[index + 3] = Ev3Value.DO_NOT_CHANGE_TYPE;
|
||||
cmds[index + 3] = Ev3Args.DO_NOT_CHANGE_TYPE;
|
||||
cmds[index + 4] = Ev3Mode[this._sensorPorts[i]];
|
||||
cmds[index + 5] = Ev3ByteValue.GLOBAL_ONE_BYTE;
|
||||
cmds[index + 5] = Ev3ParamEncoding.GLOBAL_ONE_BYTE;
|
||||
cmds[index + 6] = sensorCount * 4; // GLOBAL INDEX
|
||||
index += 7;
|
||||
}
|
||||
|
@ -768,9 +768,9 @@ class EV3 {
|
|||
// GET MOTOR POSITION VALUES, EVEN IF NO MOTOR PRESENT
|
||||
for (let i = 0; i < 4; i++) {
|
||||
cmds[index + 0] = Ev3Opcode.OPOUTPUT_GET_COUNT;
|
||||
cmds[index + 1] = Ev3Value.LAYER;
|
||||
cmds[index + 1] = Ev3Args.LAYER;
|
||||
cmds[index + 2] = i; // PORT TODO: explain incorrect documentation as 'Output bit field'
|
||||
cmds[index + 3] = Ev3ByteValue.GLOBAL_ONE_BYTE;
|
||||
cmds[index + 3] = Ev3ParamEncoding.GLOBAL_ONE_BYTE;
|
||||
cmds[index + 4] = sensorCount * 4; // GLOBAL INDEX
|
||||
index += 5;
|
||||
sensorCount++;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue