@openhps/sphero
Version:
Open Hybrid Positioning System - Sphero component
97 lines • 2.77 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.R2D2 = void 0;
const rollable_toy_1 = require("./rollable-toy");
class R2D2 extends rollable_toy_1.RollableToy {
constructor() {
super(...arguments);
this.maxVoltage = 3.65;
this.minVoltage = 3.4;
}
wake() {
return this.queueCommand(this.commands.power.wake());
}
sleep() {
return this.queueCommand(this.commands.power.sleep());
}
playAudioFile(idx) {
return this.queueCommand(this.commands.userIo.playAudioFile(idx));
}
turnDome(angle) {
const res = this.calculateDomeAngle(angle);
return this.queueCommand(this.commands.userIo.turnDome(res));
}
setStance(stance) {
return this.queueCommand(this.commands.userIo.setStance(stance));
}
playAnimation(animation) {
return this.queueCommand(this.commands.userIo.playAnimation(animation));
}
calculateDomeAngle(angle) {
const result = new Uint8Array(2);
switch (angle) {
case -1:
result[0] = 0xbf;
result[1] = 0x80;
return result;
case 0:
result[0] = 0x00;
result[1] = 0x00;
return result;
case 1:
result[0] = 0x3f;
result[1] = 0x80;
return result;
}
let uAngle = Math.abs(angle);
const hob = R2D2.hobIndex(uAngle);
const unshift = Math.min(8 - hob, 6);
const shift = 6 - unshift;
uAngle = uAngle << unshift;
if (angle < 0) {
uAngle = 0x8000 | uAngle;
}
uAngle = 0x4000 | uAngle;
const flagA = (0x04 & shift) >> 2;
const flagB = (0x02 & shift) >> 1;
const flagC = 0x01 & shift;
if (flagA === 1) {
uAngle |= 1 << 9;
}
else {
uAngle &= uAngle ^ (1 << 9);
}
if (flagB === 1) {
uAngle |= 1 << 8;
}
else {
uAngle &= uAngle ^ (1 << 8);
}
if (flagC === 1) {
uAngle |= 1 << 7;
}
else {
uAngle &= uAngle ^ (1 << 7);
}
result[0] = 0x00ff & uAngle;
result[1] = (0xff00 & uAngle) >> 8;
return result;
}
static hobIndex(val) {
const values = new Uint16Array(2);
values[1] = 0;
values[0] = val;
while (values[0] > 0) {
values[0] = values[0] >> 1;
values[1] = values[1] + 1;
}
return values[1];
}
}
exports.R2D2 = R2D2;
R2D2.advertisement = {
name: 'R2-D2',
prefix: 'D2-',
class: R2D2
};
//# sourceMappingURL=r2d2.js.map