use PS4
PS4Serial.cpp@5:3b887515b46e, 2018-09-28 (annotated)
- 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?
User | Revision | Line number | New 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 | } |