H29Ateam / PS4 Serial

Fork of PS4 by H29Ateam

Committer:
Suzutomo
Date:
Mon Dec 11 09:08:28 2017 +0000
Revision:
10:c961d228b63e
Parent:
9:b98be6c2f23e
Update

Who changed what in which revision?

UserRevisionLine numberNew 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 }