use PS4

Committer:
yopcyuuu
Date:
Sat Oct 27 04:18:40 2018 +0000
Revision:
8:3fa54986cf61
Parent:
7:fc30592ff29e
remove clicklistener

Who changed what in which revision?

UserRevisionLine numberNew contents of line
yopcyuuu 0:f907f82d58dc 1 #include "PS4Serial.h"
yopcyuuu 0:f907f82d58dc 2
yopcyuuu 5:3b887515b46e 3 PS4Serial::PS4Serial(PinName tx, PinName rx) : WirelessSerial(tx, rx, 115200), rp(0), check(0)
yopcyuuu 0:f907f82d58dc 4 {
yopcyuuu 0:f907f82d58dc 5 for(int i = 0; i < 8; i++) ControllerData[i] = 2 <= i && i <= 5 ? 127 : 0;
yopcyuuu 0:f907f82d58dc 6 WirelessSerial.attach(this, &PS4Serial::WirelessRecive, RawSerial::RxIrq);
yopcyuuu 0:f907f82d58dc 7 }
yopcyuuu 0:f907f82d58dc 8
yopcyuuu 0:f907f82d58dc 9 void PS4Serial::WirelessRecive()
yopcyuuu 0:f907f82d58dc 10 {
yopcyuuu 0:f907f82d58dc 11 t.stop();
yopcyuuu 0:f907f82d58dc 12 t.reset();
yopcyuuu 0:f907f82d58dc 13 char data = WirelessSerial.getc();
yopcyuuu 0:f907f82d58dc 14 if(data == 0xff) {
yopcyuuu 0:f907f82d58dc 15 rp = 0;
yopcyuuu 5:3b887515b46e 16 check = 0;
yopcyuuu 5:3b887515b46e 17 } else if(rp >= 8) {
yopcyuuu 6:9d766e152bc5 18 if((check & 0x7f) == data) {
yopcyuuu 6:9d766e152bc5 19 for (int i = 0; i < 8; i++) {
yopcyuuu 6:9d766e152bc5 20 ControllerData[i] = Receive[i];
yopcyuuu 6:9d766e152bc5 21 }
Suzutomo 7:fc30592ff29e 22
yopcyuuu 6:9d766e152bc5 23 }
yopcyuuu 0:f907f82d58dc 24 } else {
yopcyuuu 5:3b887515b46e 25 Receive[rp] = data;
yopcyuuu 0:f907f82d58dc 26 rp++;
yopcyuuu 5:3b887515b46e 27 check += data;
yopcyuuu 0:f907f82d58dc 28 }
yopcyuuu 0:f907f82d58dc 29 t.start();
yopcyuuu 0:f907f82d58dc 30 }
yopcyuuu 0:f907f82d58dc 31
yopcyuuu 0:f907f82d58dc 32 int PS4Serial::getButtonPress(PS4Button button)
yopcyuuu 0:f907f82d58dc 33 {
yopcyuuu 0:f907f82d58dc 34 if(button < 7) {
yopcyuuu 0:f907f82d58dc 35 return (ControllerData[0] >> button) & 1;
yopcyuuu 0:f907f82d58dc 36 } else if(button < 14) {
yopcyuuu 0:f907f82d58dc 37 return (ControllerData[1] >> (button - 7)) & 1;
yopcyuuu 0:f907f82d58dc 38 } else {
yopcyuuu 0:f907f82d58dc 39 return ControllerData[button - 12];
yopcyuuu 0:f907f82d58dc 40 }
yopcyuuu 0:f907f82d58dc 41 }
Suzutomo 2:ebf134f6c2ef 42 int PS4Serial::getButtonClick( PS4Button button, bool mode )
Suzutomo 2:ebf134f6c2ef 43 {
Suzutomo 2:ebf134f6c2ef 44 //mode:0 -> Rising
Suzutomo 2:ebf134f6c2ef 45 //mode:1 -> Falling
Suzutomo 7:fc30592ff29e 46
yopcyuuu 6:9d766e152bc5 47 if(button < 7) {
yopcyuuu 6:9d766e152bc5 48 return !mode * (((ControllerData[0] >> button) & 1) * !((ControllerData_OLD[0] >> button) & 1))
yopcyuuu 6:9d766e152bc5 49 + mode * ((!(ControllerData[0] >> button) & 1) * ((ControllerData_OLD[0] >> button) & 1));
yopcyuuu 6:9d766e152bc5 50 } else if(button < 14) {
yopcyuuu 6:9d766e152bc5 51 return !mode * (((ControllerData[1] >> (button - 7)) & 1) * !((ControllerData_OLD[1] >> (button - 7)) & 1))
yopcyuuu 6:9d766e152bc5 52 + mode * ((!((ControllerData[1] >> (button - 7)) & 1) * ((ControllerData_OLD[1] >> (button - 7)) & 1)));
yopcyuuu 6:9d766e152bc5 53 } else if( (14<=button) && (button<=19) ) {
yopcyuuu 6:9d766e152bc5 54 return !mode*((ControllerData[button - 12]>127)*!(ControllerData_OLD[button - 12]>127))
yopcyuuu 6:9d766e152bc5 55 + mode*(!(ControllerData[button - 12]>127)*(ControllerData_OLD[button - 12]>127));
Suzutomo 2:ebf134f6c2ef 56
Suzutomo 2:ebf134f6c2ef 57 } else {
Suzutomo 2:ebf134f6c2ef 58 return 0;
Suzutomo 2:ebf134f6c2ef 59 }
Suzutomo 2:ebf134f6c2ef 60 }
Suzutomo 2:ebf134f6c2ef 61
Suzutomo 2:ebf134f6c2ef 62 bool PS4Serial::connected()
Suzutomo 2:ebf134f6c2ef 63 {
yopcyuuu 0:f907f82d58dc 64 return t.read_ms() < 500;
yopcyuuu 6:9d766e152bc5 65 }
yopcyuuu 6:9d766e152bc5 66
yopcyuuu 6:9d766e152bc5 67 void PS4Serial::update()
yopcyuuu 6:9d766e152bc5 68 {
yopcyuuu 6:9d766e152bc5 69 for (int i = 0; i < 8; i++)
yopcyuuu 6:9d766e152bc5 70 ControllerData_OLD[i] = ControllerData[i];
Suzutomo 7:fc30592ff29e 71
yopcyuuu 6:9d766e152bc5 72 wait_ms(1);
yopcyuuu 0:f907f82d58dc 73 }