Initial commit
This commit is contained in:
commit
324cabe40b
2 changed files with 126 additions and 0 deletions
72
amstradcpc2serial.ino
Normal file
72
amstradcpc2serial.ino
Normal file
|
@ -0,0 +1,72 @@
|
||||||
|
const int pl1up = 44;
|
||||||
|
const int p11dn = 46;
|
||||||
|
const int p11lf = 42;
|
||||||
|
const int p11rg = 48;
|
||||||
|
const int p11f2 = 50;
|
||||||
|
const int p11f1 = 40;
|
||||||
|
const int pl2up = 30;
|
||||||
|
const int pl2dn = 32;
|
||||||
|
const int pl2lf = 28;
|
||||||
|
const int pl2rg = 34;
|
||||||
|
const int pl2f2 = 36;
|
||||||
|
const int pl2f1 = 26;
|
||||||
|
|
||||||
|
void setup() {
|
||||||
|
Serial.begin(9600);
|
||||||
|
pinMode(pl1up, INPUT_PULLUP);
|
||||||
|
pinMode(p11dn, INPUT_PULLUP);
|
||||||
|
pinMode(p11lf, INPUT_PULLUP);
|
||||||
|
pinMode(p11rg, INPUT_PULLUP);
|
||||||
|
pinMode(p11f2, INPUT_PULLUP);
|
||||||
|
pinMode(p11f1, INPUT_PULLUP);
|
||||||
|
pinMode(pl2up, INPUT_PULLUP);
|
||||||
|
pinMode(pl2dn, INPUT_PULLUP);
|
||||||
|
pinMode(pl2lf, INPUT_PULLUP);
|
||||||
|
pinMode(pl2rg, INPUT_PULLUP);
|
||||||
|
pinMode(pl2f2, INPUT_PULLUP);
|
||||||
|
pinMode(pl2f1, INPUT_PULLUP);
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop() {
|
||||||
|
uint8_t pl1_state = 0;
|
||||||
|
if (digitalRead(pl1up) == LOW) {
|
||||||
|
pl1_state += 1;
|
||||||
|
}
|
||||||
|
if (digitalRead(p11dn) == LOW) {
|
||||||
|
pl1_state += 2;
|
||||||
|
}
|
||||||
|
if (digitalRead(p11lf) == LOW) {
|
||||||
|
pl1_state += 4;
|
||||||
|
}
|
||||||
|
if (digitalRead(p11rg) == LOW) {
|
||||||
|
pl1_state += 8;
|
||||||
|
}
|
||||||
|
if (digitalRead(p11f2) == LOW) {
|
||||||
|
pl1_state += 16;
|
||||||
|
}
|
||||||
|
if (digitalRead(p11f1) == LOW) {
|
||||||
|
pl1_state += 32;
|
||||||
|
}
|
||||||
|
Serial.write(pl1_state);
|
||||||
|
uint8_t pl2_state = 64;
|
||||||
|
if (digitalRead(pl2up) == LOW) {
|
||||||
|
pl2_state += 1;
|
||||||
|
}
|
||||||
|
if (digitalRead(pl2dn) == LOW) {
|
||||||
|
pl2_state += 2;
|
||||||
|
}
|
||||||
|
if (digitalRead(pl2lf) == LOW) {
|
||||||
|
pl2_state += 4;
|
||||||
|
}
|
||||||
|
if (digitalRead(pl2rg) == LOW) {
|
||||||
|
pl2_state += 8;
|
||||||
|
}
|
||||||
|
if (digitalRead(pl2f2) == LOW) {
|
||||||
|
pl2_state += 16;
|
||||||
|
}
|
||||||
|
if (digitalRead(pl2f1) == LOW) {
|
||||||
|
pl2_state += 32;
|
||||||
|
}
|
||||||
|
Serial.write(pl2_state);
|
||||||
|
delay(50);
|
||||||
|
}
|
54
main.py
Normal file
54
main.py
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
import serial
|
||||||
|
import uinput
|
||||||
|
|
||||||
|
ev = (uinput.BTN_SOUTH, uinput.BTN_EAST, uinput.BTN_DPAD_UP, uinput.BTN_DPAD_DOWN, uinput.BTN_DPAD_LEFT, uinput.BTN_DPAD_RIGHT)
|
||||||
|
device_p3 = uinput.Device(ev, name="Zockbox3")
|
||||||
|
device_p4 = uinput.Device(ev, name="Zockbox4")
|
||||||
|
|
||||||
|
p3int = 0
|
||||||
|
p4int = 64
|
||||||
|
|
||||||
|
s = serial.Serial('/dev/ttyACM0', 9600)
|
||||||
|
|
||||||
|
def handle_ctrl(controller, byte):
|
||||||
|
if byte % 32 == 0:
|
||||||
|
controller.emit(uinput.BTN_SOUTH, 1)
|
||||||
|
byte -= 32
|
||||||
|
else:
|
||||||
|
controller.emit(uinput.BTN_SOUTH, 0)
|
||||||
|
if byte % 16 == 0:
|
||||||
|
controller.emit(uinput.BTN_EAST, 1)
|
||||||
|
byte -= 16
|
||||||
|
else:
|
||||||
|
controller.emit(uinput.BTN_EAST, 0)
|
||||||
|
if byte % 8 == 0:
|
||||||
|
controller.emit(uinput.BTN_DPAD_RIGHT, 1)
|
||||||
|
byte -= 8
|
||||||
|
else:
|
||||||
|
controller.emit(uinput.BTN_DPAD_RIGHT, 0)
|
||||||
|
if byte % 4 == 0:
|
||||||
|
controller.emit(uinput.BTN_DPAD_LEFT, 1)
|
||||||
|
byte -= 4
|
||||||
|
else:
|
||||||
|
controller.emit(uinput.BTN_DPAD_LEFT, 0)
|
||||||
|
if byte % 2 == 0:
|
||||||
|
controller.emit(uinput.BTN_DPAD_DOWN, 1)
|
||||||
|
byte -= 2
|
||||||
|
else:
|
||||||
|
controller.emit(uinput.BTN_DPAD_DOWN, 0)
|
||||||
|
if byte % 1 == 0:
|
||||||
|
controller.emit(uinput.BTN_DPAD_UP, 1)
|
||||||
|
else:
|
||||||
|
controller.emit(uinput.BTN_DPAD_UP, 0)
|
||||||
|
|
||||||
|
|
||||||
|
while s.isOpen():
|
||||||
|
control = s.read()
|
||||||
|
ctrlint = int.from_bytes(control, byteorder='big', signed=False)
|
||||||
|
if ctrlint < 64 and p3int != ctrlint:
|
||||||
|
p3int = ctrlint
|
||||||
|
handle_ctrl(device_p3, ctrlint)
|
||||||
|
if ctrlint >= 64 and p4int != ctrlint:
|
||||||
|
p4int = ctrlint
|
||||||
|
ctrlint -= 64
|
||||||
|
handle_ctrl(device_p4, ctrlint)
|
Loading…
Reference in a new issue