2016-09-19 18:48:27 +02:00
|
|
|
package org.warp.picalculator.device;
|
2016-09-02 20:32:37 +02:00
|
|
|
|
2017-01-16 17:57:09 +01:00
|
|
|
import java.awt.event.KeyEvent;
|
2017-01-22 13:46:38 +01:00
|
|
|
|
2016-09-02 20:32:37 +02:00
|
|
|
import org.warp.picalculator.Utils;
|
|
|
|
import org.warp.picalculator.device.chip.ParallelToSerial;
|
|
|
|
import org.warp.picalculator.device.chip.SerialToParallel;
|
2017-01-31 22:29:49 +01:00
|
|
|
import org.warp.picalculator.gui.DisplayManager;
|
2017-04-09 22:01:03 +02:00
|
|
|
import org.warp.picalculator.gui.GUIErrorMessage;
|
2017-01-22 13:46:38 +01:00
|
|
|
import org.warp.picalculator.gui.screens.KeyboardDebugScreen;
|
|
|
|
import org.warp.picalculator.gui.screens.MarioScreen;
|
|
|
|
import org.warp.picalculator.gui.screens.Screen;
|
2016-09-02 20:32:37 +02:00
|
|
|
|
|
|
|
import com.pi4j.wiringpi.Gpio;
|
|
|
|
|
|
|
|
public class Keyboard {
|
|
|
|
public static volatile boolean alpha = false;
|
|
|
|
public static volatile boolean shift = false;
|
2017-01-31 22:29:49 +01:00
|
|
|
|
2016-09-02 20:32:37 +02:00
|
|
|
//From Serial
|
|
|
|
private static final int RCK_pin = 35;
|
|
|
|
private static final int SCK_and_CLK_pin = 38;
|
|
|
|
private static final int SER_pin = 36;
|
|
|
|
|
|
|
|
//To Serial
|
|
|
|
private static final int SH_LD_pin = 37;
|
|
|
|
private static final int QH_pin = 40;
|
|
|
|
private static final int CLK_INH_pin = 33;
|
|
|
|
|
2016-09-12 16:30:51 +02:00
|
|
|
private static volatile boolean[][] precedentStates = new boolean[8][8];
|
|
|
|
public static volatile boolean[][] debugKeysDown = new boolean[8][8];
|
2017-01-31 22:29:49 +01:00
|
|
|
public static volatile int debugKeyCode = -1;
|
2017-04-10 22:50:43 +02:00
|
|
|
|
2017-02-06 21:38:17 +01:00
|
|
|
private static volatile boolean refreshRequest = false;
|
2017-04-10 22:50:43 +02:00
|
|
|
|
2017-04-09 22:01:03 +02:00
|
|
|
private static KeyboardEventListener additionalListener;
|
2017-01-31 22:29:49 +01:00
|
|
|
|
2017-04-09 22:01:03 +02:00
|
|
|
public synchronized static void startKeyboard() {
|
2017-01-31 22:29:49 +01:00
|
|
|
final Thread kt = new Thread(() -> {
|
2017-01-16 17:57:09 +01:00
|
|
|
if (Utils.debugOn) {
|
|
|
|
try {
|
2017-01-31 22:29:49 +01:00
|
|
|
while (true) {
|
|
|
|
if (debugKeyCode != -1) {
|
|
|
|
debugKeyPressed(debugKeyCode);
|
|
|
|
debugKeyCode = -1;
|
2017-01-16 17:57:09 +01:00
|
|
|
}
|
|
|
|
Thread.sleep(50);
|
|
|
|
}
|
2017-01-31 22:29:49 +01:00
|
|
|
} catch (final InterruptedException e) {}
|
2017-01-16 17:57:09 +01:00
|
|
|
} else {
|
|
|
|
Gpio.pinMode(CLK_INH_pin, Gpio.OUTPUT);
|
|
|
|
Gpio.pinMode(RCK_pin, Gpio.OUTPUT);
|
|
|
|
Gpio.pinMode(SER_pin, Gpio.OUTPUT);
|
|
|
|
Gpio.pinMode(SH_LD_pin, Gpio.OUTPUT);
|
|
|
|
Gpio.pinMode(SCK_and_CLK_pin, Gpio.OUTPUT);
|
|
|
|
Gpio.pinMode(QH_pin, Gpio.INPUT);
|
2017-01-31 22:29:49 +01:00
|
|
|
|
2017-01-16 17:57:09 +01:00
|
|
|
Gpio.digitalWrite(CLK_INH_pin, false);
|
|
|
|
Gpio.digitalWrite(RCK_pin, false);
|
|
|
|
Gpio.digitalWrite(SER_pin, false);
|
|
|
|
Gpio.digitalWrite(SH_LD_pin, false);
|
|
|
|
Gpio.digitalWrite(SCK_and_CLK_pin, false);
|
|
|
|
Gpio.digitalWrite(QH_pin, false);
|
2017-01-31 22:29:49 +01:00
|
|
|
final SerialToParallel chip1 = new SerialToParallel(RCK_pin, SCK_and_CLK_pin /*SCK*/, SER_pin);
|
|
|
|
final ParallelToSerial chip2 = new ParallelToSerial(SH_LD_pin, CLK_INH_pin, QH_pin, SCK_and_CLK_pin/*CLK*/);
|
|
|
|
|
2017-01-16 17:57:09 +01:00
|
|
|
KeyboardDebugScreen.log("Started keyboard system");
|
2017-01-31 22:29:49 +01:00
|
|
|
|
|
|
|
while (true) {
|
2016-09-02 20:32:37 +02:00
|
|
|
boolean[] data;
|
|
|
|
for (int col = 0; col < 8; col++) {
|
|
|
|
data = new boolean[8];
|
|
|
|
data[col] = true;
|
|
|
|
chip1.write(data);
|
2017-01-31 22:29:49 +01:00
|
|
|
|
2016-09-02 20:32:37 +02:00
|
|
|
data = chip2.read();
|
2017-01-16 17:57:09 +01:00
|
|
|
KeyboardDebugScreen.ks[col] = data;
|
2017-01-31 22:29:49 +01:00
|
|
|
|
2016-09-02 20:32:37 +02:00
|
|
|
for (int row = 0; row < 8; row++) {
|
|
|
|
if (data[row] == true && precedentStates[row][col] == false) {
|
2017-01-31 22:29:49 +01:00
|
|
|
System.out.println("Pressed button at " + (row + 1) + ", " + (col + 1));
|
|
|
|
KeyboardDebugScreen.log("Pressed button at " + (row + 1) + ", " + (col + 1));
|
|
|
|
keyPressedRaw(row + 1, col + 1);
|
2016-09-02 20:32:37 +02:00
|
|
|
} else if (data[row] == false && precedentStates[row][col] == true) {
|
2017-01-31 22:29:49 +01:00
|
|
|
keyReleasedRaw(row + 1, col + 1);
|
|
|
|
KeyboardDebugScreen.log("Released button at " + (row + 1) + ", " + (col + 1));
|
2016-09-02 20:32:37 +02:00
|
|
|
}
|
|
|
|
precedentStates[row][col] = data[row];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2017-01-16 17:57:09 +01:00
|
|
|
}
|
|
|
|
});
|
|
|
|
kt.setName("Keyboard thread");
|
|
|
|
kt.setPriority(Thread.MIN_PRIORITY);
|
|
|
|
kt.setDaemon(true);
|
|
|
|
kt.start();
|
|
|
|
}
|
|
|
|
|
2017-04-09 22:01:03 +02:00
|
|
|
private synchronized static void debugKeyPressed(int keyCode) {
|
2017-01-31 22:29:49 +01:00
|
|
|
switch (keyCode) {
|
2017-01-16 17:57:09 +01:00
|
|
|
case KeyEvent.VK_ESCAPE:
|
|
|
|
Keyboard.keyPressed(Key.POWER);
|
|
|
|
break;
|
|
|
|
case KeyEvent.VK_S:
|
|
|
|
if (Keyboard.shift) {
|
|
|
|
Keyboard.keyPressed(Key.ARCSINE);
|
|
|
|
} else if (Keyboard.alpha) {
|
|
|
|
Keyboard.keyPressed(Key.NONE);
|
|
|
|
} else {
|
|
|
|
Keyboard.keyPressed(Key.SINE);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case KeyEvent.VK_C:
|
|
|
|
if (Keyboard.shift) {
|
|
|
|
Keyboard.keyPressed(Key.ARCCOSINE);
|
|
|
|
} else if (Keyboard.alpha) {
|
|
|
|
Keyboard.keyPressed(Key.NONE);
|
|
|
|
} else {
|
|
|
|
Keyboard.keyPressed(Key.COSINE);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case KeyEvent.VK_T:
|
|
|
|
if (Keyboard.shift) {
|
|
|
|
Keyboard.keyPressed(Key.ARCTANGENT);
|
|
|
|
} else if (Keyboard.alpha) {
|
|
|
|
Keyboard.keyPressed(Key.NONE);
|
|
|
|
} else {
|
|
|
|
Keyboard.keyPressed(Key.TANGENT);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case KeyEvent.VK_D:
|
|
|
|
if (!Keyboard.shift && !Keyboard.alpha) {
|
|
|
|
Keyboard.keyPressed(Key.debug_DEG);
|
|
|
|
} else {
|
|
|
|
Keyboard.keyPressed(Key.NONE);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case KeyEvent.VK_R:
|
|
|
|
if (!Keyboard.shift && !Keyboard.alpha) {
|
|
|
|
Keyboard.keyPressed(Key.debug_RAD);
|
|
|
|
} else {
|
|
|
|
Keyboard.keyPressed(Key.NONE);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case KeyEvent.VK_G:
|
|
|
|
if (!Keyboard.shift && !Keyboard.alpha) {
|
|
|
|
Keyboard.keyPressed(Key.debug_GRA);
|
|
|
|
} else {
|
|
|
|
Keyboard.keyPressed(Key.NONE);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case KeyEvent.VK_X:
|
|
|
|
if (Keyboard.alpha) {
|
|
|
|
Keyboard.keyPressed(Key.LETTER_X);
|
|
|
|
} else {
|
|
|
|
Keyboard.keyPressed(Key.NONE);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case KeyEvent.VK_P:
|
|
|
|
if (Keyboard.alpha) {
|
|
|
|
Keyboard.keyPressed(Key.PI);
|
|
|
|
} else {
|
|
|
|
Keyboard.keyPressed(Key.NONE);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case KeyEvent.VK_Y:
|
|
|
|
if (Keyboard.alpha) {
|
|
|
|
Keyboard.keyPressed(Key.LETTER_Y);
|
|
|
|
} else {
|
|
|
|
Keyboard.keyPressed(Key.NONE);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case KeyEvent.VK_B:
|
|
|
|
if (Keyboard.shift) {
|
|
|
|
Keyboard.keyPressed(Key.BRIGHTNESS_CYCLE_REVERSE);
|
|
|
|
} else if (!Keyboard.shift && !Keyboard.alpha) {
|
|
|
|
Keyboard.keyPressed(Key.BRIGHTNESS_CYCLE);
|
|
|
|
} else {
|
|
|
|
Keyboard.keyPressed(Key.NONE);
|
|
|
|
}
|
|
|
|
break;
|
2017-01-31 22:29:49 +01:00
|
|
|
case com.jogamp.newt.event.KeyEvent.VK_ENTER:
|
2017-01-16 17:57:09 +01:00
|
|
|
case KeyEvent.VK_ENTER:
|
|
|
|
if (Keyboard.shift) {
|
2017-02-06 21:38:17 +01:00
|
|
|
Keyboard.keyPressed(Key.STEP);
|
2017-01-16 17:57:09 +01:00
|
|
|
} else if (!Keyboard.shift && !Keyboard.alpha) {
|
2017-02-06 21:38:17 +01:00
|
|
|
Keyboard.keyPressed(Key.SIMPLIFY);
|
2017-01-16 17:57:09 +01:00
|
|
|
} else {
|
|
|
|
Keyboard.keyPressed(Key.NONE);
|
|
|
|
}
|
|
|
|
int row = 2;
|
|
|
|
int col = 1;
|
2017-01-31 22:29:49 +01:00
|
|
|
Keyboard.debugKeysDown[row - 1][col - 1] = true;
|
2017-01-16 17:57:09 +01:00
|
|
|
break;
|
|
|
|
case KeyEvent.VK_1:
|
|
|
|
if (!Keyboard.shift && !Keyboard.alpha) {
|
|
|
|
Keyboard.keyPressed(Key.NUM1);
|
|
|
|
} else {
|
|
|
|
Keyboard.keyPressed(Key.NONE);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case KeyEvent.VK_2:
|
|
|
|
if (!Keyboard.shift && !Keyboard.alpha) {
|
|
|
|
Keyboard.keyPressed(Key.NUM2);
|
|
|
|
} else {
|
|
|
|
Keyboard.keyPressed(Key.NONE);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case KeyEvent.VK_3:
|
|
|
|
if (!Keyboard.shift && !Keyboard.alpha) {
|
|
|
|
Keyboard.keyPressed(Key.NUM3);
|
|
|
|
} else {
|
|
|
|
Keyboard.keyPressed(Key.NONE);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case KeyEvent.VK_4:
|
|
|
|
if (!Keyboard.shift && !Keyboard.alpha) {
|
|
|
|
Keyboard.keyPressed(Key.NUM4);
|
|
|
|
} else {
|
|
|
|
Keyboard.keyPressed(Key.NONE);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case KeyEvent.VK_5:
|
|
|
|
if (!Keyboard.shift && !Keyboard.alpha) {
|
|
|
|
Keyboard.keyPressed(Key.NUM5);
|
|
|
|
} else {
|
|
|
|
Keyboard.keyPressed(Key.NONE);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case KeyEvent.VK_6:
|
|
|
|
if (!Keyboard.shift && !Keyboard.alpha) {
|
|
|
|
Keyboard.keyPressed(Key.NUM6);
|
|
|
|
} else {
|
|
|
|
Keyboard.keyPressed(Key.NONE);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case KeyEvent.VK_7:
|
|
|
|
if (!Keyboard.shift && !Keyboard.alpha) {
|
|
|
|
Keyboard.keyPressed(Key.NUM7);
|
2017-02-02 12:49:31 +01:00
|
|
|
} else if (Keyboard.shift) {
|
|
|
|
if (Utils.debugOn) {
|
|
|
|
Keyboard.keyPressed(Key.DIVIDE);
|
|
|
|
}
|
2017-01-16 17:57:09 +01:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
case KeyEvent.VK_8:
|
|
|
|
if (!Keyboard.shift && !Keyboard.alpha) {
|
|
|
|
Keyboard.keyPressed(Key.NUM8);
|
|
|
|
} else if (Keyboard.shift) {
|
|
|
|
Keyboard.keyPressed(Key.PARENTHESIS_OPEN);
|
|
|
|
} else {
|
|
|
|
Keyboard.keyPressed(Key.NONE);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case KeyEvent.VK_9:
|
|
|
|
if (!Keyboard.shift && !Keyboard.alpha) {
|
|
|
|
Keyboard.keyPressed(Key.NUM9);
|
|
|
|
} else if (Keyboard.shift) {
|
|
|
|
Keyboard.keyPressed(Key.PARENTHESIS_CLOSE);
|
|
|
|
} else {
|
|
|
|
Keyboard.keyPressed(Key.NONE);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case KeyEvent.VK_0:
|
|
|
|
if (!Keyboard.shift && !Keyboard.alpha) {
|
|
|
|
Keyboard.keyPressed(Key.NUM0);
|
|
|
|
} else if (Keyboard.shift) {
|
|
|
|
Keyboard.keyPressed(Key.EQUAL);
|
|
|
|
} else {
|
|
|
|
Keyboard.keyPressed(Key.NONE);
|
|
|
|
}
|
|
|
|
break;
|
2017-01-31 22:29:49 +01:00
|
|
|
case com.jogamp.newt.event.KeyEvent.VK_ADD:
|
2017-01-16 17:57:09 +01:00
|
|
|
case KeyEvent.VK_ADD:
|
|
|
|
if (!Keyboard.shift && !Keyboard.alpha) {
|
|
|
|
Keyboard.keyPressed(Key.PLUS);
|
|
|
|
} else if (Keyboard.shift) {
|
|
|
|
Keyboard.keyPressed(Key.PLUS_MINUS);
|
|
|
|
} else {
|
|
|
|
Keyboard.keyPressed(Key.NONE);
|
|
|
|
}
|
|
|
|
break;
|
2017-01-31 22:29:49 +01:00
|
|
|
case com.jogamp.newt.event.KeyEvent.VK_SUBTRACT:
|
2017-01-16 17:57:09 +01:00
|
|
|
case KeyEvent.VK_SUBTRACT:
|
|
|
|
if (!Keyboard.shift && !Keyboard.alpha) {
|
|
|
|
Keyboard.keyPressed(Key.MINUS);
|
|
|
|
} else {
|
|
|
|
Keyboard.keyPressed(Key.NONE);
|
|
|
|
}
|
|
|
|
break;
|
2017-01-31 22:29:49 +01:00
|
|
|
case com.jogamp.newt.event.KeyEvent.VK_MULTIPLY:
|
2017-01-16 17:57:09 +01:00
|
|
|
case KeyEvent.VK_MULTIPLY:
|
|
|
|
if (!Keyboard.shift && !Keyboard.alpha) {
|
|
|
|
Keyboard.keyPressed(Key.MULTIPLY);
|
|
|
|
} else {
|
|
|
|
Keyboard.keyPressed(Key.NONE);
|
|
|
|
}
|
|
|
|
break;
|
2017-01-31 22:29:49 +01:00
|
|
|
case com.jogamp.newt.event.KeyEvent.VK_DIVIDE:
|
2017-01-16 17:57:09 +01:00
|
|
|
case KeyEvent.VK_DIVIDE:
|
|
|
|
if (!Keyboard.shift && !Keyboard.alpha) {
|
|
|
|
Keyboard.keyPressed(Key.DIVIDE);
|
|
|
|
} else {
|
|
|
|
Keyboard.keyPressed(Key.NONE);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case KeyEvent.VK_BACK_SPACE:
|
|
|
|
if (!Keyboard.shift && !Keyboard.alpha) {
|
|
|
|
Keyboard.keyPressed(Key.DELETE);
|
|
|
|
} else {
|
|
|
|
Keyboard.keyPressed(Key.NONE);
|
|
|
|
}
|
|
|
|
break;
|
2017-01-31 22:29:49 +01:00
|
|
|
case com.jogamp.newt.event.KeyEvent.VK_DELETE:
|
2017-01-16 17:57:09 +01:00
|
|
|
case KeyEvent.VK_DELETE:
|
|
|
|
if (!Keyboard.shift && !Keyboard.alpha) {
|
|
|
|
Keyboard.keyPressed(Key.RESET);
|
|
|
|
} else {
|
|
|
|
Keyboard.keyPressed(Key.NONE);
|
|
|
|
}
|
|
|
|
break;
|
2017-01-31 22:29:49 +01:00
|
|
|
case com.jogamp.newt.event.KeyEvent.VK_LEFT:
|
2017-01-16 17:57:09 +01:00
|
|
|
case KeyEvent.VK_LEFT:
|
|
|
|
//LEFT
|
|
|
|
row = 2;
|
|
|
|
col = 3;
|
2017-01-31 22:29:49 +01:00
|
|
|
Keyboard.debugKeysDown[row - 1][col - 1] = true;
|
2017-01-16 17:57:09 +01:00
|
|
|
if (!Keyboard.shift && !Keyboard.alpha) {
|
|
|
|
Keyboard.keyPressed(Key.LEFT);
|
|
|
|
} else {
|
|
|
|
Keyboard.keyPressed(Key.NONE);
|
|
|
|
}
|
|
|
|
break;
|
2017-01-31 22:29:49 +01:00
|
|
|
case com.jogamp.newt.event.KeyEvent.VK_RIGHT:
|
2017-01-16 17:57:09 +01:00
|
|
|
case KeyEvent.VK_RIGHT:
|
|
|
|
//RIGHT
|
|
|
|
row = 2;
|
|
|
|
col = 5;
|
2017-01-31 22:29:49 +01:00
|
|
|
Keyboard.debugKeysDown[row - 1][col - 1] = true;
|
2017-01-16 17:57:09 +01:00
|
|
|
if (!Keyboard.shift && !Keyboard.alpha) {
|
|
|
|
Keyboard.keyPressed(Key.RIGHT);
|
|
|
|
} else {
|
|
|
|
Keyboard.keyPressed(Key.NONE);
|
|
|
|
}
|
|
|
|
break;
|
2017-01-31 22:29:49 +01:00
|
|
|
case com.jogamp.newt.event.KeyEvent.VK_NUMPAD4:
|
2017-01-16 17:57:09 +01:00
|
|
|
case KeyEvent.VK_NUMPAD4:
|
|
|
|
if (!Keyboard.shift && !Keyboard.alpha) {
|
|
|
|
Keyboard.keyPressed(Key.HISTORY_BACK);
|
|
|
|
} else {
|
|
|
|
Keyboard.keyPressed(Key.NONE);
|
|
|
|
}
|
|
|
|
break;
|
2017-01-31 22:29:49 +01:00
|
|
|
case com.jogamp.newt.event.KeyEvent.VK_NUMPAD6:
|
2017-01-16 17:57:09 +01:00
|
|
|
case KeyEvent.VK_NUMPAD6:
|
|
|
|
if (!Keyboard.shift && !Keyboard.alpha) {
|
|
|
|
Keyboard.keyPressed(Key.HISTORY_FORWARD);
|
|
|
|
} else {
|
|
|
|
Keyboard.keyPressed(Key.NONE);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case KeyEvent.VK_PERIOD:
|
|
|
|
if (!Keyboard.shift && !Keyboard.alpha) {
|
|
|
|
Keyboard.keyPressed(Key.DOT);
|
|
|
|
} else {
|
|
|
|
Keyboard.keyPressed(Key.NONE);
|
|
|
|
}
|
|
|
|
break;
|
2017-01-31 22:29:49 +01:00
|
|
|
case com.jogamp.newt.event.KeyEvent.VK_SHIFT:
|
2017-01-16 17:57:09 +01:00
|
|
|
case KeyEvent.VK_SHIFT:
|
|
|
|
Keyboard.keyPressed(Key.SHIFT);
|
|
|
|
break;
|
|
|
|
case KeyEvent.VK_A:
|
|
|
|
Keyboard.keyPressed(Key.ALPHA);
|
|
|
|
break;
|
2017-01-31 22:29:49 +01:00
|
|
|
case com.jogamp.newt.event.KeyEvent.VK_NUMPAD1:
|
2017-01-16 17:57:09 +01:00
|
|
|
case KeyEvent.VK_NUMPAD1:
|
|
|
|
Keyboard.keyPressed(Key.SQRT);
|
|
|
|
break;
|
2017-01-31 22:29:49 +01:00
|
|
|
case com.jogamp.newt.event.KeyEvent.VK_NUMPAD2:
|
2017-01-16 17:57:09 +01:00
|
|
|
case KeyEvent.VK_NUMPAD2:
|
|
|
|
Keyboard.keyPressed(Key.ROOT);
|
|
|
|
break;
|
2017-01-31 22:29:49 +01:00
|
|
|
case com.jogamp.newt.event.KeyEvent.VK_NUMPAD3:
|
2017-01-16 17:57:09 +01:00
|
|
|
case KeyEvent.VK_NUMPAD3:
|
|
|
|
Keyboard.keyPressed(Key.POWER_OF_2);
|
|
|
|
break;
|
2017-01-31 22:29:49 +01:00
|
|
|
case com.jogamp.newt.event.KeyEvent.VK_NUMPAD5:
|
2017-01-16 17:57:09 +01:00
|
|
|
case KeyEvent.VK_NUMPAD5:
|
|
|
|
Keyboard.keyPressed(Key.POWER_OF_x);
|
|
|
|
break;
|
2016-09-02 20:32:37 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public static boolean isKeyDown(int row, int col) {
|
2016-09-12 16:30:51 +02:00
|
|
|
if (Utils.debugOn == false) {
|
2017-01-31 22:29:49 +01:00
|
|
|
return precedentStates[row - 1][col - 1];
|
2016-09-12 16:30:51 +02:00
|
|
|
} else {
|
2017-01-31 22:29:49 +01:00
|
|
|
return debugKeysDown[row - 1][col - 1];
|
2016-09-12 16:30:51 +02:00
|
|
|
}
|
2016-09-02 20:32:37 +02:00
|
|
|
}
|
2017-01-31 22:29:49 +01:00
|
|
|
|
2017-04-09 22:01:03 +02:00
|
|
|
private synchronized static void keyReleasedRaw(int row, int col) {
|
2017-01-16 17:57:09 +01:00
|
|
|
KeyboardDebugScreen.keyX = row;
|
|
|
|
KeyboardDebugScreen.keyY = col;
|
2016-09-02 20:32:37 +02:00
|
|
|
if (row == 1 && col == 1) {
|
2017-01-16 17:57:09 +01:00
|
|
|
//keyReleased(Key.BRIGHTNESS_CYCLE);
|
2016-09-02 20:32:37 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-04-09 22:01:03 +02:00
|
|
|
static synchronized void keyPressedRaw(int row, int col) {
|
2017-01-16 17:57:09 +01:00
|
|
|
KeyboardDebugScreen.keyX = row;
|
|
|
|
KeyboardDebugScreen.keyY = col;
|
2016-09-02 20:32:37 +02:00
|
|
|
if (row == 1 && col == 1) {
|
|
|
|
keyPressed(Key.SHIFT);
|
|
|
|
} else if (row == 1 && col == 2) {
|
2017-01-31 22:29:49 +01:00
|
|
|
keyPressed(Key.ALPHA);
|
2016-09-02 20:32:37 +02:00
|
|
|
} else if (row == 1 && col == 7) {
|
|
|
|
if (shift) {
|
|
|
|
keyPressed(Key.BRIGHTNESS_CYCLE_REVERSE);
|
|
|
|
} else if (alpha) {
|
|
|
|
keyPressed(Key.NONE);
|
|
|
|
} else {
|
|
|
|
keyPressed(Key.BRIGHTNESS_CYCLE);
|
|
|
|
}
|
|
|
|
} else if (row == 1 && col == 8) {
|
|
|
|
if (shift) {
|
2017-02-06 21:38:17 +01:00
|
|
|
keyPressed(Key.STEP);
|
2016-09-02 20:32:37 +02:00
|
|
|
} else if (alpha) {
|
|
|
|
keyPressed(Key.NONE);
|
|
|
|
} else {
|
2017-02-06 21:38:17 +01:00
|
|
|
keyPressed(Key.SIMPLIFY);
|
2016-09-02 20:32:37 +02:00
|
|
|
}
|
|
|
|
} else if (row == 2 && col == 8) {
|
|
|
|
if (shift) {
|
2017-01-16 17:57:09 +01:00
|
|
|
keyPressed(Key.PI);
|
2016-09-02 20:32:37 +02:00
|
|
|
} else if (alpha) {
|
|
|
|
keyPressed(Key.DRG_CYCLE);
|
|
|
|
} else {
|
|
|
|
keyPressed(Key.NONE);
|
|
|
|
}
|
|
|
|
} else if (row == 3 && col == 2) {
|
|
|
|
if (shift) {
|
|
|
|
keyPressed(Key.ROOT);
|
|
|
|
} else if (alpha) {
|
|
|
|
keyPressed(Key.NONE);
|
|
|
|
} else {
|
|
|
|
keyPressed(Key.SQRT);
|
|
|
|
}
|
|
|
|
} else if (row == 4 && col == 8) {
|
|
|
|
if (shift) {
|
|
|
|
keyPressed(Key.NONE);
|
|
|
|
} else if (alpha) {
|
2016-09-18 14:33:25 +02:00
|
|
|
keyPressed(Key.LETTER_Y);
|
2016-09-02 20:32:37 +02:00
|
|
|
} else {
|
|
|
|
keyPressed(Key.DOT);
|
|
|
|
}
|
|
|
|
} else if (row == 5 && col == 8) {
|
|
|
|
if (shift) {
|
|
|
|
keyPressed(Key.NONE);
|
|
|
|
} else if (alpha) {
|
2016-09-18 14:33:25 +02:00
|
|
|
keyPressed(Key.LETTER_X);
|
2016-09-02 20:32:37 +02:00
|
|
|
} else {
|
|
|
|
keyPressed(Key.NUM0);
|
|
|
|
}
|
|
|
|
} else if (row == 8 && col == 1) {
|
|
|
|
if (shift) {
|
|
|
|
keyPressed(Key.NONE);
|
|
|
|
} else if (alpha) {
|
|
|
|
keyPressed(Key.NONE);
|
|
|
|
} else {
|
|
|
|
keyPressed(Key.NUM1);
|
|
|
|
}
|
|
|
|
} else if (row == 8 && col == 2) {
|
|
|
|
if (shift) {
|
|
|
|
keyPressed(Key.NONE);
|
|
|
|
} else if (alpha) {
|
|
|
|
keyPressed(Key.NONE);
|
|
|
|
} else {
|
|
|
|
keyPressed(Key.NUM2);
|
|
|
|
}
|
|
|
|
} else if (row == 8 && col == 3) {
|
|
|
|
if (shift) {
|
|
|
|
keyPressed(Key.NONE);
|
|
|
|
} else if (alpha) {
|
|
|
|
keyPressed(Key.NONE);
|
|
|
|
} else {
|
|
|
|
keyPressed(Key.NUM3);
|
|
|
|
}
|
|
|
|
} else if (row == 7 && col == 1) {
|
|
|
|
if (shift) {
|
|
|
|
keyPressed(Key.NONE);
|
|
|
|
} else if (alpha) {
|
|
|
|
keyPressed(Key.NONE);
|
|
|
|
} else {
|
|
|
|
keyPressed(Key.NUM4);
|
|
|
|
}
|
|
|
|
} else if (row == 7 && col == 2) {
|
|
|
|
if (shift) {
|
|
|
|
keyPressed(Key.NONE);
|
|
|
|
} else if (alpha) {
|
|
|
|
keyPressed(Key.NONE);
|
|
|
|
} else {
|
|
|
|
keyPressed(Key.NUM5);
|
|
|
|
}
|
|
|
|
} else if (row == 7 && col == 3) {
|
|
|
|
if (shift) {
|
|
|
|
keyPressed(Key.NONE);
|
|
|
|
} else if (alpha) {
|
|
|
|
keyPressed(Key.NONE);
|
|
|
|
} else {
|
|
|
|
keyPressed(Key.NUM6);
|
|
|
|
}
|
|
|
|
} else if (row == 6 && col == 1) {
|
|
|
|
if (shift) {
|
|
|
|
keyPressed(Key.NONE);
|
|
|
|
} else if (alpha) {
|
|
|
|
keyPressed(Key.NONE);
|
|
|
|
} else {
|
|
|
|
keyPressed(Key.NUM7);
|
|
|
|
}
|
|
|
|
} else if (row == 6 && col == 2) {
|
|
|
|
if (shift) {
|
|
|
|
keyPressed(Key.NONE);
|
|
|
|
} else if (alpha) {
|
|
|
|
keyPressed(Key.NONE);
|
|
|
|
} else {
|
|
|
|
keyPressed(Key.NUM8);
|
|
|
|
}
|
|
|
|
} else if (row == 6 && col == 3) {
|
|
|
|
if (shift) {
|
|
|
|
keyPressed(Key.NONE);
|
|
|
|
} else if (alpha) {
|
|
|
|
keyPressed(Key.NONE);
|
|
|
|
} else {
|
|
|
|
keyPressed(Key.NUM9);
|
|
|
|
}
|
|
|
|
} else if (row == 8 && col == 4) {
|
|
|
|
if (shift) {
|
2016-09-18 14:33:25 +02:00
|
|
|
keyPressed(Key.PLUS_MINUS);
|
2016-09-02 20:32:37 +02:00
|
|
|
} else if (alpha) {
|
|
|
|
keyPressed(Key.NONE);
|
|
|
|
} else {
|
|
|
|
keyPressed(Key.PLUS);
|
|
|
|
}
|
|
|
|
} else if (row == 8 && col == 5) {
|
|
|
|
if (shift) {
|
|
|
|
keyPressed(Key.NONE);
|
|
|
|
} else if (alpha) {
|
|
|
|
keyPressed(Key.NONE);
|
|
|
|
} else {
|
|
|
|
keyPressed(Key.MINUS);
|
|
|
|
}
|
|
|
|
} else if (row == 7 && col == 4) {
|
|
|
|
if (shift) {
|
|
|
|
keyPressed(Key.NONE);
|
|
|
|
} else if (alpha) {
|
|
|
|
keyPressed(Key.NONE);
|
|
|
|
} else {
|
|
|
|
keyPressed(Key.MULTIPLY);
|
|
|
|
}
|
|
|
|
} else if (row == 7 && col == 5) {
|
|
|
|
if (shift) {
|
|
|
|
keyPressed(Key.NONE);
|
|
|
|
} else if (alpha) {
|
|
|
|
keyPressed(Key.NONE);
|
|
|
|
} else {
|
|
|
|
keyPressed(Key.DIVIDE);
|
|
|
|
}
|
|
|
|
} else if (row == 6 && col == 4) {
|
|
|
|
if (shift) {
|
|
|
|
keyPressed(Key.NONE);
|
|
|
|
} else if (alpha) {
|
|
|
|
keyPressed(Key.NONE);
|
|
|
|
} else {
|
|
|
|
keyPressed(Key.DELETE);
|
|
|
|
}
|
|
|
|
} else if (row == 6 && col == 5) {
|
|
|
|
if (shift) {
|
|
|
|
keyPressed(Key.NONE);
|
|
|
|
} else if (alpha) {
|
|
|
|
keyPressed(Key.NONE);
|
|
|
|
} else {
|
|
|
|
keyPressed(Key.RESET);
|
|
|
|
}
|
|
|
|
} else if (row == 1 && col == 4) {
|
|
|
|
if (shift) {
|
|
|
|
keyPressed(Key.NONE);
|
|
|
|
} else if (alpha) {
|
|
|
|
keyPressed(Key.NONE);
|
|
|
|
} else {
|
|
|
|
keyPressed(Key.UP);
|
|
|
|
}
|
|
|
|
} else if (row == 2 && col == 3) {
|
|
|
|
if (shift) {
|
|
|
|
keyPressed(Key.NONE);
|
|
|
|
} else if (alpha) {
|
|
|
|
keyPressed(Key.NONE);
|
|
|
|
} else {
|
|
|
|
keyPressed(Key.LEFT);
|
|
|
|
}
|
2017-01-31 22:29:49 +01:00
|
|
|
} else if (row == 2 && col == 5) {
|
2016-09-02 20:32:37 +02:00
|
|
|
if (shift) {
|
|
|
|
keyPressed(Key.NONE);
|
|
|
|
} else if (alpha) {
|
|
|
|
keyPressed(Key.NONE);
|
|
|
|
} else {
|
|
|
|
keyPressed(Key.RIGHT);
|
|
|
|
}
|
|
|
|
} else if (row == 3 && col == 4) {
|
|
|
|
if (shift) {
|
|
|
|
keyPressed(Key.NONE);
|
|
|
|
} else if (alpha) {
|
|
|
|
keyPressed(Key.NONE);
|
|
|
|
} else {
|
|
|
|
keyPressed(Key.DOWN);
|
|
|
|
}
|
|
|
|
} else if (row == 4 && col == 3) {
|
|
|
|
if (shift) {
|
|
|
|
keyPressed(Key.NONE);
|
|
|
|
} else if (alpha) {
|
|
|
|
keyPressed(Key.NONE);
|
|
|
|
} else {
|
|
|
|
keyPressed(Key.POWER_OF_2);
|
|
|
|
}
|
|
|
|
} else if (row == 4 && col == 4) {
|
|
|
|
if (shift) {
|
|
|
|
keyPressed(Key.NONE);
|
|
|
|
} else if (alpha) {
|
|
|
|
keyPressed(Key.NONE);
|
|
|
|
} else {
|
|
|
|
keyPressed(Key.POWER_OF_x);
|
|
|
|
}
|
|
|
|
} else if (row == 5 && col == 3) {
|
|
|
|
if (shift) {
|
|
|
|
keyPressed(Key.NONE);
|
|
|
|
} else if (alpha) {
|
|
|
|
keyPressed(Key.NONE);
|
|
|
|
} else {
|
|
|
|
keyPressed(Key.PARENTHESIS_OPEN);
|
|
|
|
}
|
|
|
|
} else if (row == 5 && col == 4) {
|
|
|
|
if (shift) {
|
|
|
|
keyPressed(Key.NONE);
|
|
|
|
} else if (alpha) {
|
|
|
|
keyPressed(Key.NONE);
|
|
|
|
} else {
|
|
|
|
keyPressed(Key.PARENTHESIS_CLOSE);
|
|
|
|
}
|
2016-11-25 22:40:43 +01:00
|
|
|
} else if (row == 5 && col == 6) {
|
|
|
|
if (shift) {
|
|
|
|
keyPressed(Key.NONE);
|
|
|
|
} else if (alpha) {
|
|
|
|
keyPressed(Key.NONE);
|
|
|
|
} else {
|
|
|
|
keyPressed(Key.SURD_MODE);
|
|
|
|
}
|
2016-09-02 20:32:37 +02:00
|
|
|
} else if (row == 2 && col == 1) {
|
|
|
|
if (shift) {
|
|
|
|
keyPressed(Key.NONE);
|
|
|
|
} else if (alpha) {
|
|
|
|
keyPressed(Key.NONE);
|
|
|
|
} else {
|
|
|
|
keyPressed(Key.EQUAL);
|
|
|
|
}
|
|
|
|
} else if (row == 2 && col == 6) {
|
|
|
|
System.out.println("PREMUTO <");
|
|
|
|
if (shift) {
|
|
|
|
keyPressed(Key.NONE);
|
|
|
|
} else if (alpha) {
|
|
|
|
keyPressed(Key.NONE);
|
|
|
|
} else {
|
|
|
|
System.out.println("PREMUTO <");
|
|
|
|
keyPressed(Key.HISTORY_BACK);
|
|
|
|
}
|
|
|
|
} else if (row == 2 && col == 7) {
|
|
|
|
System.out.println("PREMUTO >");
|
|
|
|
if (shift) {
|
|
|
|
keyPressed(Key.NONE);
|
|
|
|
} else if (alpha) {
|
|
|
|
keyPressed(Key.NONE);
|
|
|
|
} else {
|
|
|
|
System.out.println("PREMUTO >");
|
|
|
|
keyPressed(Key.HISTORY_FORWARD);
|
|
|
|
}
|
2017-01-31 22:29:49 +01:00
|
|
|
} else {}
|
2016-09-02 20:32:37 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
public static void stopKeyboard() {
|
|
|
|
if (Utils.debugOn == false) {
|
|
|
|
Gpio.digitalWrite(33, false);
|
|
|
|
Gpio.digitalWrite(35, false);
|
|
|
|
Gpio.digitalWrite(36, false);
|
|
|
|
Gpio.digitalWrite(37, false);
|
|
|
|
Gpio.digitalWrite(38, false);
|
|
|
|
Gpio.digitalWrite(40, false);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-04-09 22:01:03 +02:00
|
|
|
public synchronized static void keyPressed(Key k) {
|
|
|
|
boolean done = false;
|
|
|
|
if (additionalListener != null) {
|
|
|
|
try {
|
|
|
|
done = additionalListener.keyPressed(k);
|
2017-04-10 22:50:43 +02:00
|
|
|
} catch (final Exception ex) {
|
2017-04-09 22:01:03 +02:00
|
|
|
new GUIErrorMessage(ex);
|
|
|
|
}
|
|
|
|
}
|
2017-01-31 22:29:49 +01:00
|
|
|
if (DisplayManager.INSTANCE != null) {
|
|
|
|
final Screen scr = DisplayManager.INSTANCE.getScreen();
|
2016-09-02 20:32:37 +02:00
|
|
|
boolean refresh = false;
|
2017-04-09 22:01:03 +02:00
|
|
|
boolean scrdone = false;
|
|
|
|
try {
|
|
|
|
scrdone = scr.keyPressed(k);
|
2017-04-10 22:50:43 +02:00
|
|
|
} catch (final Exception ex) {
|
2017-04-09 22:01:03 +02:00
|
|
|
new GUIErrorMessage(ex);
|
|
|
|
}
|
|
|
|
if (scr != null && scr.initialized && scrdone) {
|
2016-09-02 20:32:37 +02:00
|
|
|
refresh = true;
|
|
|
|
} else {
|
|
|
|
switch (k) {
|
|
|
|
case POWER:
|
2017-02-02 10:30:45 +01:00
|
|
|
DisplayManager.engine.destroy();
|
2016-09-02 20:32:37 +02:00
|
|
|
break;
|
|
|
|
case NONE:
|
|
|
|
break;
|
|
|
|
case LETTER_X:
|
|
|
|
letterPressed('X');
|
|
|
|
break;
|
|
|
|
case BRIGHTNESS_CYCLE:
|
2017-01-31 22:29:49 +01:00
|
|
|
DisplayManager.cycleBrightness(false);
|
2016-09-02 20:32:37 +02:00
|
|
|
refresh = true;
|
|
|
|
break;
|
|
|
|
case BRIGHTNESS_CYCLE_REVERSE:
|
2017-04-23 14:11:37 +02:00
|
|
|
// DisplayManager.INSTANCE.setScreen(new MarioScreen()); //TODO: rimuovere: prova
|
2017-01-31 22:29:49 +01:00
|
|
|
DisplayManager.cycleBrightness(true);
|
2016-09-02 20:32:37 +02:00
|
|
|
refresh = true;
|
|
|
|
break;
|
|
|
|
case HISTORY_BACK:
|
2017-01-31 22:29:49 +01:00
|
|
|
DisplayManager.INSTANCE.goBack();
|
2016-09-02 20:32:37 +02:00
|
|
|
refresh = true;
|
|
|
|
break;
|
|
|
|
case HISTORY_FORWARD:
|
2017-01-31 22:29:49 +01:00
|
|
|
DisplayManager.INSTANCE.goForward();
|
2016-09-02 20:32:37 +02:00
|
|
|
refresh = true;
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
switch (k) {
|
|
|
|
case SHIFT:
|
|
|
|
Keyboard.shift = !Keyboard.shift;
|
|
|
|
refresh = true;
|
|
|
|
break;
|
|
|
|
case ALPHA:
|
|
|
|
Keyboard.alpha = !Keyboard.alpha;
|
|
|
|
refresh = true;
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
2017-02-02 12:49:31 +01:00
|
|
|
if (Utils.debugOn == false) {
|
|
|
|
if (k != Key.SHIFT && Keyboard.shift) {
|
|
|
|
Keyboard.shift = false;
|
|
|
|
refresh = true;
|
|
|
|
} else if (k != Key.ALPHA && Keyboard.alpha) {
|
|
|
|
Keyboard.alpha = false;
|
|
|
|
refresh = true;
|
|
|
|
}
|
2016-09-02 20:32:37 +02:00
|
|
|
}
|
|
|
|
if (refresh) {
|
2017-02-06 21:38:17 +01:00
|
|
|
refreshRequest = true;
|
2016-09-02 20:32:37 +02:00
|
|
|
}
|
2017-04-09 22:01:03 +02:00
|
|
|
} else if (!done) {
|
|
|
|
Utils.debug.println("Key " + k.toString() + " ignored.");
|
2016-09-02 20:32:37 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
private static void letterPressed(char L) {
|
2017-01-31 22:29:49 +01:00
|
|
|
|
2016-09-02 20:32:37 +02:00
|
|
|
}
|
|
|
|
|
2017-04-09 22:01:03 +02:00
|
|
|
public synchronized static void keyReleased(Key k) {
|
|
|
|
boolean done = false;
|
|
|
|
if (additionalListener != null) {
|
|
|
|
done = additionalListener.keyReleased(k);
|
|
|
|
}
|
2016-09-02 20:32:37 +02:00
|
|
|
boolean refresh = false;
|
2017-01-31 22:29:49 +01:00
|
|
|
if (DisplayManager.INSTANCE != null) {
|
|
|
|
final Screen scr = DisplayManager.INSTANCE.getScreen();
|
|
|
|
if (scr != null && scr.initialized && scr.keyReleased(k)) {
|
2016-09-02 20:32:37 +02:00
|
|
|
refresh = true;
|
|
|
|
} else {
|
|
|
|
switch (k) {
|
|
|
|
case NONE:
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (refresh) {
|
2017-04-09 22:01:03 +02:00
|
|
|
refreshRequest = true;
|
2016-09-02 20:32:37 +02:00
|
|
|
}
|
2017-04-09 22:01:03 +02:00
|
|
|
} else if (!done) {
|
|
|
|
Utils.debug.println("Key " + k.toString() + " ignored.");
|
2016-09-02 20:32:37 +02:00
|
|
|
}
|
|
|
|
}
|
2017-04-10 22:50:43 +02:00
|
|
|
|
2017-04-09 22:01:03 +02:00
|
|
|
public static void setAdditionalKeyboardListener(KeyboardEventListener l) {
|
|
|
|
additionalListener = l;
|
|
|
|
}
|
2016-09-02 20:32:37 +02:00
|
|
|
|
|
|
|
public static enum Key {
|
2017-02-06 21:38:17 +01:00
|
|
|
POWER, debug_DEG, debug_RAD, debug_GRA, SHIFT, ALPHA, NONE, HISTORY_BACK, HISTORY_FORWARD, SURD_MODE, DRG_CYCLE, LETTER_X, LETTER_Y, STEP, SIMPLIFY, BRIGHTNESS_CYCLE, BRIGHTNESS_CYCLE_REVERSE, DOT, NUM0, NUM1, NUM2, NUM3, NUM4, NUM5, NUM6, NUM7, NUM8, NUM9, PARENTHESIS_OPEN, PARENTHESIS_CLOSE, PLUS, MINUS, PLUS_MINUS, MULTIPLY, DIVIDE, EQUAL, DELETE, RESET, LEFT, RIGHT, UP, DOWN, OK, debug1, debug2, debug3, debug4, debug5, SQRT, ROOT, POWER_OF_2, POWER_OF_x, SINE, COSINE, TANGENT, ARCSINE, ARCCOSINE, ARCTANGENT, PI
|
|
|
|
}
|
|
|
|
|
|
|
|
public static boolean popRefreshRequest() {
|
|
|
|
if (refreshRequest) {
|
|
|
|
refreshRequest = false;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
return false;
|
2016-09-02 20:32:37 +02:00
|
|
|
}
|
2017-01-16 17:57:09 +01:00
|
|
|
|
2016-09-02 20:32:37 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
2017-01-16 17:57:09 +01:00
|
|
|
|
|
|
|
-coord-
|
|
|
|
NORMAL
|
|
|
|
SHIFT
|
|
|
|
ALPHA
|
|
|
|
-------
|
|
|
|
|
2016-09-02 20:32:37 +02:00
|
|
|
|1,1---|1,2---|------|1,4---|------|------|1,7---|
|
|
|
|
|SHIFT |ALPHA |------| ^ |------|------|+BRIGH|
|
|
|
|
|SHIFT |ALPHA |------| |------|------|-BRIGH|
|
|
|
|
|SHIFT |ALPHA |------| |------|------| |
|
|
|
|
|2,1---|2,2---|2,3---|2,4---|2,5---|2,6---|2,7---|
|
|
|
|
| = | | < | OK | > | Back | Fwd |
|
|
|
|
| | | | | | | |
|
|
|
|
| | | | | | | |
|
|
|
|
|3,1---|3,2---|------|3,4---|------|3,6---|3,7---|
|
|
|
|
| | SQRT |------| v |------| | |
|
|
|
|
| | ROOT |------| |------| | |
|
|
|
|
| | |------| |------| | |
|
|
|
|
|4,1---|4,2---|4,3---|4,4---|4,5---|4,6---|4,7---|
|
|
|
|
| | | POW 2| POW x| | | |
|
|
|
|
| | | | | | | |
|
|
|
|
| | | | | | | |
|
|
|
|
|5,1---|5,2---|5,3---|5,4---|5,5---|5,6---|5,7---|
|
2016-11-25 22:40:43 +01:00
|
|
|
| | | | | |S<=>D | |
|
2016-09-02 20:32:37 +02:00
|
|
|
| | | | | | | |
|
|
|
|
| | | | | | | |
|
|
|
|
|6,1---|6,2---|6,3---|6,4---|6,5---|6,6---|6,7---|
|
|
|
|
| 7 | 8 | 9 | DEL | RESET |
|
|
|
|
| | | | | |
|
|
|
|
| | | | | |
|
|
|
|
|7,1---|7,2---|7,3---|7,4---|7,5-----------------|
|
|
|
|
| 4 | 5 | 6 | * | / |
|
|
|
|
| | | | | |
|
|
|
|
| | | | | |
|
|
|
|
|8,1---|8,2---|8,3---|8,4---|8,5-----------------|
|
|
|
|
| 1 | 2 | 3 | + | - |
|
|
|
|
| | | | | |
|
|
|
|
| | | | | |
|
|
|
|
|5,8---|4,8---|3,8---|2,8---|1,8-----------------|
|
2017-02-06 21:38:17 +01:00
|
|
|
| 0 | . | | | SIMPLIFY |
|
|
|
|
| | | |PI | STEP |
|
|
|
|
| X | Y | Z |DRGCYCL|SOLVE FOR [x] |
|
2016-09-02 20:32:37 +02:00
|
|
|
|------|------|------|------|--------------------|
|
|
|
|
|
|
|
|
|
|
|
|
*/
|