Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of PS4 by
PS4.cpp@10:c961d228b63e, 2017-12-11 (annotated)
- Committer:
- Suzutomo
- Date:
- Mon Dec 11 09:08:28 2017 +0000
- Revision:
- 10:c961d228b63e
- Parent:
- 9:b98be6c2f23e
Update
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| Suzutomo | 6:0b7476f64352 | 1 | #include "PS4.h" |
| yopcyuuu | 0:51d821ea634c | 2 | |
| Suzutomo | 9:b98be6c2f23e | 3 | PS4::PS4(RawSerial *i) |
| yopcyuuu | 3:c1318581351c | 4 | { |
| Suzutomo | 8:73810fa167a8 | 5 | serial = i; |
| Suzutomo | 8:73810fa167a8 | 6 | serial->baud(115200); |
| Suzutomo | 9:b98be6c2f23e | 7 | for(int i=0; i<16; i++) { |
| Suzutomo | 9:b98be6c2f23e | 8 | BUTTON_OLD[i] = 0; |
| Suzutomo | 9:b98be6c2f23e | 9 | BUTTON_NEW[i] = 0; |
| yopcyuuu | 0:51d821ea634c | 10 | } |
| yopcyuuu | 0:51d821ea634c | 11 | } |
| yopcyuuu | 0:51d821ea634c | 12 | |
| Suzutomo | 9:b98be6c2f23e | 13 | int PS4::getPress( int button,bool finger) |
| Suzutomo | 9:b98be6c2f23e | 14 | { |
| Suzutomo | 9:b98be6c2f23e | 15 | if (button >= 1 && button <= 16) return BUTTON_NEW[button - 1]; |
| Suzutomo | 9:b98be6c2f23e | 16 | serial->putc((finger << 7) + button); |
| Suzutomo | 9:b98be6c2f23e | 17 | if (button == 0) { |
| Suzutomo | 9:b98be6c2f23e | 18 | for (int wait = 0; wait < 2000; wait++) if (serial->readable() == 1) return serial->getc(); |
| Suzutomo | 9:b98be6c2f23e | 19 | return 0; // PS4通信成功 -> 1 失敗 -> 0 |
| Suzutomo | 9:b98be6c2f23e | 20 | } |
| Suzutomo | 9:b98be6c2f23e | 21 | if (button == 0xFF) { |
| Suzutomo | 9:b98be6c2f23e | 22 | for (int wait = 0; serial->readable() == 0; wait++) { |
| Suzutomo | 9:b98be6c2f23e | 23 | if (wait > 2000) { |
| Suzutomo | 9:b98be6c2f23e | 24 | for(int i=0; i<16; i++) BUTTON_NEW[i] = BUTTON_OLD[i] = 0; |
| Suzutomo | 9:b98be6c2f23e | 25 | return 0; |
| Suzutomo | 9:b98be6c2f23e | 26 | } |
| Suzutomo | 9:b98be6c2f23e | 27 | } |
| Suzutomo | 9:b98be6c2f23e | 28 | char getData = serial->getc(); |
| Suzutomo | 9:b98be6c2f23e | 29 | for (int i = 0; i<16; i++) BUTTON_OLD[i] = BUTTON_NEW[i]; |
| Suzutomo | 9:b98be6c2f23e | 30 | BUTTON_NEW[UP - 1] = (getData >> 7) & 0x01; |
| Suzutomo | 9:b98be6c2f23e | 31 | BUTTON_NEW[RIGHT - 1] = (getData >> 6) & 0x01; |
| Suzutomo | 9:b98be6c2f23e | 32 | BUTTON_NEW[DOWN - 1] = (getData >> 5) & 0x01; |
| Suzutomo | 9:b98be6c2f23e | 33 | BUTTON_NEW[LEFT - 1] = (getData >> 4) & 0x01; |
| Suzutomo | 9:b98be6c2f23e | 34 | BUTTON_NEW[TRIANGLE - 1] = (getData >> 3) & 0x01; |
| Suzutomo | 9:b98be6c2f23e | 35 | BUTTON_NEW[CIRCLE - 1] = (getData >> 2) & 0x01; |
| Suzutomo | 9:b98be6c2f23e | 36 | BUTTON_NEW[CROSS - 1] = (getData >> 1) & 0x01; |
| Suzutomo | 9:b98be6c2f23e | 37 | BUTTON_NEW[SQUARE - 1] = (getData >> 0) & 0x01; |
| Suzutomo | 9:b98be6c2f23e | 38 | for (int wait = 0; serial->readable() == 0; wait++) { |
| Suzutomo | 9:b98be6c2f23e | 39 | if (wait > 2000) { |
| Suzutomo | 9:b98be6c2f23e | 40 | for(int i=8; i<16; i++) BUTTON_NEW[i] = BUTTON_OLD[i] = 0; |
| Suzutomo | 9:b98be6c2f23e | 41 | return 0; |
| Suzutomo | 9:b98be6c2f23e | 42 | } |
| Suzutomo | 9:b98be6c2f23e | 43 | } |
| Suzutomo | 9:b98be6c2f23e | 44 | getData = serial->getc(); |
| Suzutomo | 9:b98be6c2f23e | 45 | BUTTON_NEW[L1 - 1] = (getData >> 7) & 0x01; |
| Suzutomo | 9:b98be6c2f23e | 46 | BUTTON_NEW[R1 - 1] = (getData >> 6) & 0x01; |
| Suzutomo | 9:b98be6c2f23e | 47 | BUTTON_NEW[SHARE - 1] = (getData >> 5) & 0x01; |
| Suzutomo | 9:b98be6c2f23e | 48 | BUTTON_NEW[OPTIONS - 1] = (getData >> 4) & 0x01; |
| Suzutomo | 9:b98be6c2f23e | 49 | BUTTON_NEW[L3 - 1] = (getData >> 3) & 0x01; |
| Suzutomo | 9:b98be6c2f23e | 50 | BUTTON_NEW[R3 - 1] = (getData >> 2) & 0x01; |
| Suzutomo | 9:b98be6c2f23e | 51 | BUTTON_NEW[PS - 1] = (getData >> 1) & 0x01; |
| Suzutomo | 9:b98be6c2f23e | 52 | BUTTON_NEW[TOUCHPAD - 1] = (getData >> 0) & 0x01; |
| Suzutomo | 9:b98be6c2f23e | 53 | } |
| Suzutomo | 9:b98be6c2f23e | 54 | if (button >= 17 && button <= 22) { |
| Suzutomo | 9:b98be6c2f23e | 55 | for (int wait = 0; serial->readable() == 0; wait++) { |
| Suzutomo | 9:b98be6c2f23e | 56 | if (wait > 2000) { |
| Suzutomo | 9:b98be6c2f23e | 57 | if(button >= 19 && button <= 22) return 127; |
| Suzutomo | 9:b98be6c2f23e | 58 | else return 0; |
| Suzutomo | 9:b98be6c2f23e | 59 | } |
| Suzutomo | 9:b98be6c2f23e | 60 | } |
| Suzutomo | 9:b98be6c2f23e | 61 | char getData = serial->getc(); |
| Suzutomo | 9:b98be6c2f23e | 62 | return getData; |
| Suzutomo | 9:b98be6c2f23e | 63 | } else if (button >= 23 && button <= 26) { |
| Suzutomo | 9:b98be6c2f23e | 64 | for (int wait = 0; serial->readable() == 0; wait++) if (wait > 2000) return 0; |
| Suzutomo | 9:b98be6c2f23e | 65 | char getData = serial->getc(); |
| Suzutomo | 9:b98be6c2f23e | 66 | int getTouchPad = getData << 8; |
| Suzutomo | 9:b98be6c2f23e | 67 | for (int wait = 0; serial->readable() == 0; wait++) if (wait > 2000) return 0; |
| Suzutomo | 9:b98be6c2f23e | 68 | getTouchPad += serial->getc(); |
| Suzutomo | 9:b98be6c2f23e | 69 | return getTouchPad; |
| Suzutomo | 9:b98be6c2f23e | 70 | } |
| Suzutomo | 9:b98be6c2f23e | 71 | return 0; |
| Suzutomo | 9:b98be6c2f23e | 72 | } |
| Suzutomo | 9:b98be6c2f23e | 73 | |
| Suzutomo | 9:b98be6c2f23e | 74 | int PS4::getClick( int button ,bool mode) |
| Suzutomo | 9:b98be6c2f23e | 75 | { |
| Suzutomo | 9:b98be6c2f23e | 76 | if(button >= 1 && button <= 16) return ((BUTTON_NEW[button - 1] & !BUTTON_OLD[button - 1]) & mode) + ((!BUTTON_NEW[button - 1] & BUTTON_OLD[button - 1]) & !mode); |
| Suzutomo | 9:b98be6c2f23e | 77 | return -1; |
| Suzutomo | 9:b98be6c2f23e | 78 | } |
| Suzutomo | 9:b98be6c2f23e | 79 | |
| Suzutomo | 9:b98be6c2f23e | 80 | void PS4::disConnect() { |
| Suzutomo | 9:b98be6c2f23e | 81 | serial->putc(0x20); |
| Suzutomo | 7:ffa4066a789d | 82 | } |
