ChonkyStation/pad.cpp

45 lines
No EOL
932 B
C++

#include "pad.h"
void pad::WriteTXDATA(uint8_t data) {
switch (data) {
case 0:
case 1: {
bytes_read = 0;
read_response = true;
rx_data_fifo[0] = 0xff;
break;
}
case 0x42:
case 0x43: {
bytes_read = 0;
read_response = true;
if ((joy_ctrl & 0x2002) == 2) {
rx_data_fifo[0] = 0x41;
rx_data_fifo[1] = 0x5A;
rx_data_fifo[2] = P1buttons & 0xff;
rx_data_fifo[3] = (P1buttons >> 8) & 0xff;
}
else if ((joy_ctrl & 0x2002) == 0x2002) {
rx_data_fifo[0] = 0x41;
rx_data_fifo[1] = 0x5A;
rx_data_fifo[2] = P2buttons & 0xff;
rx_data_fifo[3] = (P2buttons >> 8) & 0xff;
}
break;
}
case 0x03: break;
case 0x44: read_response = false; break;
case 0x4d: read_response = false; break;
case 0xff: break;
default:
printf("[PAD] Received unhandled command 0x%x\n", data);
exit(0);
}
}
uint8_t pad::ReadRXFIFO() {
if (read_response) {
return rx_data_fifo[bytes_read++];
}
else return 0;
}