A compilation of code from different sources to provide support for a Playstation 3 controller via bluetooth on the m3pi.

Dependencies:   TextLCD mbed

Fork of mbed_TANK_PS3 by Yasuhiko YAMAMOTO

Committer:
srsmitherman
Date:
Sun Dec 30 05:16:28 2012 +0000
Revision:
1:ae49669c5e92
Bluetooth PS3 interface for m3pi. User must pair bluetooth dongle address to PS3 controller with other program. Works but needs tweaking.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
srsmitherman 1:ae49669c5e92 1 /*
srsmitherman 1:ae49669c5e92 2 Copyright (c) 2011 Bart Janssens
srsmitherman 1:ae49669c5e92 3
srsmitherman 1:ae49669c5e92 4 Permission is hereby granted, free of charge, to any person obtaining a copy
srsmitherman 1:ae49669c5e92 5 of this software and associated documentation files (the "Software"), to deal
srsmitherman 1:ae49669c5e92 6 in the Software without restriction, including without limitation the rights
srsmitherman 1:ae49669c5e92 7 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
srsmitherman 1:ae49669c5e92 8 copies of the Software, and to permit persons to whom the Software is
srsmitherman 1:ae49669c5e92 9 furnished to do so, subject to the following conditions:
srsmitherman 1:ae49669c5e92 10
srsmitherman 1:ae49669c5e92 11 The above copyright notice and this permission notice shall be included in
srsmitherman 1:ae49669c5e92 12 all copies or substantial portions of the Software.
srsmitherman 1:ae49669c5e92 13
srsmitherman 1:ae49669c5e92 14 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
srsmitherman 1:ae49669c5e92 15 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
srsmitherman 1:ae49669c5e92 16 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
srsmitherman 1:ae49669c5e92 17 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
srsmitherman 1:ae49669c5e92 18 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
srsmitherman 1:ae49669c5e92 19 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
srsmitherman 1:ae49669c5e92 20 THE SOFTWARE.
srsmitherman 1:ae49669c5e92 21 */
srsmitherman 1:ae49669c5e92 22
srsmitherman 1:ae49669c5e92 23 /* Defines for the PS3 Buttons
srsmitherman 1:ae49669c5e92 24 */
srsmitherman 1:ae49669c5e92 25 #ifndef PS3BT_H
srsmitherman 1:ae49669c5e92 26 #define PS3BT_H
srsmitherman 1:ae49669c5e92 27
srsmitherman 1:ae49669c5e92 28 #include "Utils.h"
srsmitherman 1:ae49669c5e92 29 #include <stdio.h>
srsmitherman 1:ae49669c5e92 30
srsmitherman 1:ae49669c5e92 31 #define BUTTONSELECT 0
srsmitherman 1:ae49669c5e92 32 #define BUTTONLANALOG 1
srsmitherman 1:ae49669c5e92 33 #define BUTTONRANALOG 2
srsmitherman 1:ae49669c5e92 34 #define BUTTONSTART 3
srsmitherman 1:ae49669c5e92 35 #define BUTTONUP 4
srsmitherman 1:ae49669c5e92 36 #define BUTTONRIGHT 5
srsmitherman 1:ae49669c5e92 37 #define BUTTONDOWN 6
srsmitherman 1:ae49669c5e92 38 #define BUTTONLEFT 7
srsmitherman 1:ae49669c5e92 39 #define BUTTONL2 8
srsmitherman 1:ae49669c5e92 40 #define BUTTONR2 9
srsmitherman 1:ae49669c5e92 41 #define BUTTONL1 10
srsmitherman 1:ae49669c5e92 42 #define BUTTONR1 11
srsmitherman 1:ae49669c5e92 43 #define BUTTONTRIANGEL 12
srsmitherman 1:ae49669c5e92 44 #define BUTTONCIRCLE 13
srsmitherman 1:ae49669c5e92 45 #define BUTTONCROSS 14
srsmitherman 1:ae49669c5e92 46 #define BUTTONSQUARE 15
srsmitherman 1:ae49669c5e92 47 #define BUTTONPS 16
srsmitherman 1:ae49669c5e92 48
srsmitherman 1:ae49669c5e92 49
srsmitherman 1:ae49669c5e92 50 /* Defines for the PS3 Joysticks
srsmitherman 1:ae49669c5e92 51 */
srsmitherman 1:ae49669c5e92 52
srsmitherman 1:ae49669c5e92 53 #define LEFTJOYSTICKX 0
srsmitherman 1:ae49669c5e92 54 #define LEFTJOYSTICKY 1
srsmitherman 1:ae49669c5e92 55 #define RIGHTJOYSTICKX 2
srsmitherman 1:ae49669c5e92 56 #define RIGHTJOYSTICKY 3
srsmitherman 1:ae49669c5e92 57
srsmitherman 1:ae49669c5e92 58
srsmitherman 1:ae49669c5e92 59 /* Defines for the PS3 Accelerometers and Gyro
srsmitherman 1:ae49669c5e92 60 */
srsmitherman 1:ae49669c5e92 61
srsmitherman 1:ae49669c5e92 62 #define ACCELOROMETERX 0
srsmitherman 1:ae49669c5e92 63 #define ACCELOROMETERY 1
srsmitherman 1:ae49669c5e92 64 #define ACCELOROMETERZ 2
srsmitherman 1:ae49669c5e92 65 #define GYROMETERZ 3
srsmitherman 1:ae49669c5e92 66
srsmitherman 1:ae49669c5e92 67 /* Defines for the PS3 LED and Rumble
srsmitherman 1:ae49669c5e92 68 */
srsmitherman 1:ae49669c5e92 69 #define PS3LED1 0x01
srsmitherman 1:ae49669c5e92 70 #define PS3LED2 0x02
srsmitherman 1:ae49669c5e92 71 #define PS3LED3 0x04
srsmitherman 1:ae49669c5e92 72 #define PS3LED4 0x08
srsmitherman 1:ae49669c5e92 73 #define PSRUMBLEHIGH 0x10
srsmitherman 1:ae49669c5e92 74 #define PSRUMBLELOW 0x20
srsmitherman 1:ae49669c5e92 75
srsmitherman 1:ae49669c5e92 76
srsmitherman 1:ae49669c5e92 77 class PS3BT
srsmitherman 1:ae49669c5e92 78 {
srsmitherman 1:ae49669c5e92 79
srsmitherman 1:ae49669c5e92 80 public:
srsmitherman 1:ae49669c5e92 81 void decode(const u8* data);
srsmitherman 1:ae49669c5e92 82 void dump(const u8* data);
srsmitherman 1:ae49669c5e92 83
srsmitherman 1:ae49669c5e92 84
srsmitherman 1:ae49669c5e92 85 //Structure which describes the type 01 input report
srsmitherman 1:ae49669c5e92 86 typedef struct {
srsmitherman 1:ae49669c5e92 87 u8 ReportType; //Report Type 01
srsmitherman 1:ae49669c5e92 88 u8 Reserved1; // Unknown
srsmitherman 1:ae49669c5e92 89 u16 ButtonState; // Main buttons
srsmitherman 1:ae49669c5e92 90 u8 PSButtonState; // PS button
srsmitherman 1:ae49669c5e92 91 u8 Reserved2; // Unknown
srsmitherman 1:ae49669c5e92 92 u8 LeftStickX; // left Joystick X axis 0 - 255, 128 is mid
srsmitherman 1:ae49669c5e92 93 u8 LeftStickY; // left Joystick Y axis 0 - 255, 128 is mid
srsmitherman 1:ae49669c5e92 94 u8 RightStickX; // right Joystick X axis 0 - 255, 128 is mid
srsmitherman 1:ae49669c5e92 95 u8 RightStickY; // right Joystick Y axis 0 - 255, 128 is mid
srsmitherman 1:ae49669c5e92 96 u8 Reserved3[4]; // Unknown
srsmitherman 1:ae49669c5e92 97 u8 PressureUp; // digital Pad Up button Pressure 0 - 255
srsmitherman 1:ae49669c5e92 98 u8 PressureRight; // digital Pad Right button Pressure 0 - 255
srsmitherman 1:ae49669c5e92 99 u8 PressureDown; // digital Pad Down button Pressure 0 - 255
srsmitherman 1:ae49669c5e92 100 u8 PressureLeft; // digital Pad Left button Pressure 0 - 255
srsmitherman 1:ae49669c5e92 101 u8 PressureL2; // digital Pad L2 button Pressure 0 - 255
srsmitherman 1:ae49669c5e92 102 u8 PressureR2; // digital Pad R2 button Pressure 0 - 255
srsmitherman 1:ae49669c5e92 103 u8 PressureL1; // digital Pad L1 button Pressure 0 - 255
srsmitherman 1:ae49669c5e92 104 u8 PressureR1; // digital Pad R1 button Pressure 0 - 255
srsmitherman 1:ae49669c5e92 105 u8 PressureTriangle; // digital Pad Triangle button Pressure 0 - 255
srsmitherman 1:ae49669c5e92 106 u8 PressureCircle; // digital Pad Circle button Pressure 0 - 255
srsmitherman 1:ae49669c5e92 107 u8 PressureCross; // digital Pad Cross button Pressure 0 - 255
srsmitherman 1:ae49669c5e92 108 u8 PressureSquare; // digital Pad Square button Pressure 0 - 255
srsmitherman 1:ae49669c5e92 109 u8 Reserved4[3]; // Unknown
srsmitherman 1:ae49669c5e92 110 u8 Charge; // charging status ? 02 = charge, 03 = normal
srsmitherman 1:ae49669c5e92 111 u8 Power; // Battery status ?
srsmitherman 1:ae49669c5e92 112 u8 Connection; // Connection Type ?
srsmitherman 1:ae49669c5e92 113 u8 Reserved5[9]; // Unknown
srsmitherman 1:ae49669c5e92 114 u16 AccelX; // X axis accelerometer Big Endian 0 - 1023
srsmitherman 1:ae49669c5e92 115 u16 AccelY; // Y axis accelerometer Big Endian 0 - 1023
srsmitherman 1:ae49669c5e92 116 u16 AccelZ; // Z axis accelerometer Big Endian 0 - 1023
srsmitherman 1:ae49669c5e92 117 u16 GyroZ; // Z axis Gyro Big Endian 0 - 1023
srsmitherman 1:ae49669c5e92 118
srsmitherman 1:ae49669c5e92 119 } ps3report;
srsmitherman 1:ae49669c5e92 120 };
srsmitherman 1:ae49669c5e92 121
srsmitherman 1:ae49669c5e92 122 #endif