dualshock3
ds3_si.cpp@4:5bb182ca2b07, 2017-10-25 (annotated)
- Committer:
- fujikenac
- Date:
- Wed Oct 25 09:42:56 2017 +0000
- Revision:
- 4:5bb182ca2b07
- Parent:
- 3:67dbeee5beda
add callback
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
fujikenac | 0:4ac4c7635035 | 1 | #include "mbed.h" |
fujikenac | 0:4ac4c7635035 | 2 | #include "ds3_si.h" |
fujikenac | 0:4ac4c7635035 | 3 | |
fujikenac | 2:fabf8b58b40c | 4 | ds3_si::ds3_si(PinName tx, PinName rx, int baudrate):serial(tx, rx) |
fujikenac | 0:4ac4c7635035 | 5 | { |
fujikenac | 0:4ac4c7635035 | 6 | in[0] = 128; |
fujikenac | 0:4ac4c7635035 | 7 | in[1] = 0; |
fujikenac | 0:4ac4c7635035 | 8 | in[2] = 0; |
fujikenac | 0:4ac4c7635035 | 9 | in[3] = 64; |
fujikenac | 0:4ac4c7635035 | 10 | in[4] = 64; |
fujikenac | 0:4ac4c7635035 | 11 | in[5] = 64; |
fujikenac | 0:4ac4c7635035 | 12 | in[6] = 64; |
fujikenac | 0:4ac4c7635035 | 13 | in[7] = 0; |
fujikenac | 0:4ac4c7635035 | 14 | |
fujikenac | 0:4ac4c7635035 | 15 | serial.baud(baudrate); |
fujikenac | 4:5bb182ca2b07 | 16 | serial.attach(callback(this, &ds3_si::serialin), Serial::RxIrq); |
fujikenac | 0:4ac4c7635035 | 17 | } |
fujikenac | 0:4ac4c7635035 | 18 | |
fujikenac | 0:4ac4c7635035 | 19 | void ds3_si::serialin() |
fujikenac | 0:4ac4c7635035 | 20 | { |
fujikenac | 0:4ac4c7635035 | 21 | if(serial.readable()) |
fujikenac | 0:4ac4c7635035 | 22 | { |
fujikenac | 0:4ac4c7635035 | 23 | while(serial.getc() != 128) {} |
fujikenac | 0:4ac4c7635035 | 24 | for(short i = 1; i < 8; i++) |
fujikenac | 0:4ac4c7635035 | 25 | { |
fujikenac | 0:4ac4c7635035 | 26 | *(in + i) = serial.getc(); |
fujikenac | 0:4ac4c7635035 | 27 | } |
fujikenac | 0:4ac4c7635035 | 28 | } |
fujikenac | 0:4ac4c7635035 | 29 | } |
fujikenac | 0:4ac4c7635035 | 30 | |
fujikenac | 0:4ac4c7635035 | 31 | bool ds3_si::buttonstate(short order) |
fujikenac | 0:4ac4c7635035 | 32 | { |
fujikenac | 0:4ac4c7635035 | 33 | return in[(order >> 7) + 1] & order; |
fujikenac | 0:4ac4c7635035 | 34 | } |
fujikenac | 0:4ac4c7635035 | 35 | |
fujikenac | 0:4ac4c7635035 | 36 | int ds3_si::analogstate(short order) |
fujikenac | 0:4ac4c7635035 | 37 | { |
fujikenac | 0:4ac4c7635035 | 38 | return (order % 2) ? in[order] - 64 : 64 - in[order]; |
fujikenac | 0:4ac4c7635035 | 39 | } |
fujikenac | 0:4ac4c7635035 | 40 | |
fujikenac | 0:4ac4c7635035 | 41 | int ds3_si::getinputdata(short order) |
fujikenac | 0:4ac4c7635035 | 42 | { |
fujikenac | 0:4ac4c7635035 | 43 | return in[order]; |
fujikenac | 0:4ac4c7635035 | 44 | } |
fujikenac | 0:4ac4c7635035 | 45 | |
fujikenac | 0:4ac4c7635035 | 46 | double ds3_si::getangle(short order) |
fujikenac | 0:4ac4c7635035 | 47 | { |
fujikenac | 0:4ac4c7635035 | 48 | int x = analogstate(order * 2 + 1); |
fujikenac | 0:4ac4c7635035 | 49 | int y = analogstate(order * 2 + 2); |
fujikenac | 0:4ac4c7635035 | 50 | if(x || y) return atan2(double(y), double(x)); |
fujikenac | 1:3fbf08dc60b6 | 51 | else return NONE_angle; |
fujikenac | 0:4ac4c7635035 | 52 | } |