use PS4

Committer:
yopcyuuu
Date:
Fri Sep 28 11:22:44 2018 +0000
Revision:
5:3b887515b46e
Parent:
2:ebf134f6c2ef
Child:
6:9d766e152bc5
add checksum

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;
Suzutomo 2:ebf134f6c2ef 17 for (int i = 0; i < 8; i++) ControllerData_OLD[i] = ControllerData[i];
yopcyuuu 5:3b887515b46e 18 } else if(rp >= 8) {
yopcyuuu 5:3b887515b46e 19 if((check & 0x7f) == data)
yopcyuuu 5:3b887515b46e 20 for (int i = 0; i < 8; i++) ControllerData[i] = Receive[i];
yopcyuuu 0:f907f82d58dc 21 } else {
yopcyuuu 5:3b887515b46e 22 Receive[rp] = data;
yopcyuuu 0:f907f82d58dc 23 rp++;
yopcyuuu 5:3b887515b46e 24 check += data;
yopcyuuu 0:f907f82d58dc 25 }
yopcyuuu 0:f907f82d58dc 26 t.start();
yopcyuuu 0:f907f82d58dc 27 }
yopcyuuu 0:f907f82d58dc 28
yopcyuuu 0:f907f82d58dc 29 int PS4Serial::getButtonPress(PS4Button button)
yopcyuuu 0:f907f82d58dc 30 {
yopcyuuu 0:f907f82d58dc 31 if(button < 7) {
yopcyuuu 0:f907f82d58dc 32 return (ControllerData[0] >> button) & 1;
yopcyuuu 0:f907f82d58dc 33 } else if(button < 14) {
yopcyuuu 0:f907f82d58dc 34 return (ControllerData[1] >> (button - 7)) & 1;
yopcyuuu 0:f907f82d58dc 35 } else {
yopcyuuu 0:f907f82d58dc 36 return ControllerData[button - 12];
yopcyuuu 0:f907f82d58dc 37 }
yopcyuuu 0:f907f82d58dc 38 }
Suzutomo 2:ebf134f6c2ef 39 int PS4Serial::getButtonClick( PS4Button button, bool mode )
Suzutomo 2:ebf134f6c2ef 40 {
Suzutomo 2:ebf134f6c2ef 41 //mode:0 -> Rising
Suzutomo 2:ebf134f6c2ef 42 //mode:1 -> Falling
yopcyuuu 0:f907f82d58dc 43
Suzutomo 2:ebf134f6c2ef 44 if(button <= 13) {
Suzutomo 2:ebf134f6c2ef 45 return mode*(ControllerData[button]*!ControllerData_OLD[button])
Suzutomo 2:ebf134f6c2ef 46 + !mode*(!ControllerData[button]*ControllerData_OLD[button]);
Suzutomo 2:ebf134f6c2ef 47
Suzutomo 2:ebf134f6c2ef 48 } else if( (19<=button) && (button<=20) ) {
Suzutomo 2:ebf134f6c2ef 49 return mode*((ControllerData[button]>127)*!(ControllerData_OLD[button]>127))
Suzutomo 2:ebf134f6c2ef 50 + !mode*(!(ControllerData[button]>127)*(ControllerData_OLD[button]>127));
Suzutomo 2:ebf134f6c2ef 51
Suzutomo 2:ebf134f6c2ef 52 } else {
Suzutomo 2:ebf134f6c2ef 53 return 0;
Suzutomo 2:ebf134f6c2ef 54 }
Suzutomo 2:ebf134f6c2ef 55 }
Suzutomo 2:ebf134f6c2ef 56
Suzutomo 2:ebf134f6c2ef 57 bool PS4Serial::connected()
Suzutomo 2:ebf134f6c2ef 58 {
yopcyuuu 0:f907f82d58dc 59 return t.read_ms() < 500;
yopcyuuu 0:f907f82d58dc 60 }