use PS4
PS4Serial.cpp@8:3fa54986cf61, 2018-10-27 (annotated)
- 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?
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; |
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 | } |