USB Host Shield 2.0
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
PS3USB.h
Go to the documentation of this file.
1 /* Copyright (C) 2012 Kristian Lauszus, TKJ Electronics. All rights reserved.
2 
3  This software may be distributed and modified under the terms of the GNU
4  General Public License version 2 (GPL2) as published by the Free Software
5  Foundation and appearing in the file GPL2.TXT included in the packaging of
6  this file. Please note that GPL2 Section 2[b] requires that all works based
7  on this software must also be made publicly available under the terms of
8  the GPL2 ("Copyleft").
9 
10  Contact information
11  -------------------
12 
13  Kristian Lauszus, TKJ Electronics
14  Web : http://www.tkjelectronics.com
15  e-mail : kristianl@tkjelectronics.com
16  */
17 
18 #ifndef _ps3usb_h_
19 #define _ps3usb_h_
20 
21 #include "Usb.h"
22 #include "PS3Enums.h"
23 
24 /* PS3 data taken from descriptors */
25 #define EP_MAXPKTSIZE 64 // max size for data via USB
26 
27 /* Endpoint types */
28 #define EP_INTERRUPT 0x03
29 
30 /* Names we give to the 3 ps3 pipes - this is only used for setting the bluetooth address into the ps3 controllers */
31 #define PS3_CONTROL_PIPE 0
32 #define PS3_OUTPUT_PIPE 1
33 #define PS3_INPUT_PIPE 2
34 
35 //PID and VID of the different devices
36 #define PS3_VID 0x054C // Sony Corporation
37 #define PS3_PID 0x0268 // PS3 Controller DualShock 3
38 #define PS3NAVIGATION_PID 0x042F // Navigation controller
39 #define PS3MOVE_PID 0x03D5 // Motion controller
40 
41 // Used in control endpoint header for HID Commands
42 #define bmREQ_HID_OUT USB_SETUP_HOST_TO_DEVICE|USB_SETUP_TYPE_CLASS|USB_SETUP_RECIPIENT_INTERFACE
43 #define bmREQ_HID_IN USB_SETUP_DEVICE_TO_HOST|USB_SETUP_TYPE_CLASS|USB_SETUP_RECIPIENT_INTERFACE
44 
45 #define HID_REQUEST_GET_REPORT 0x01
46 #define HID_REQUEST_SET_REPORT 0x09
47 
48 #define PS3_MAX_ENDPOINTS 3
49 
58 class PS3USB : public USBDeviceConfig {
59 public:
67  PS3USB(USB *pUsb, uint8_t btadr5 = 0, uint8_t btadr4 = 0, uint8_t btadr3 = 0, uint8_t btadr2 = 0, uint8_t btadr1 = 0, uint8_t btadr0 = 0);
68 
77  virtual uint8_t Init(uint8_t parent, uint8_t port, bool lowspeed);
82  virtual uint8_t Release();
87  virtual uint8_t Poll();
88 
93  virtual uint8_t GetAddress() {
94  return bAddress;
95  };
96 
101  virtual bool isReady() {
102  return bPollEnable;
103  };
104 
111  virtual boolean VIDPIDOK(uint16_t vid, uint16_t pid) {
112  return (vid == PS3_VID && (pid == PS3_PID || pid == PS3NAVIGATION_PID || pid == PS3MOVE_PID));
113  };
121  void setBdaddr(uint8_t *bdaddr);
127  void getBdaddr(uint8_t *bdaddr);
128 
134  void setMoveBdaddr(uint8_t *bdaddr);
140  void getMoveBdaddr(uint8_t *bdaddr);
145  void getMoveCalibration(uint8_t *data);
146 
158  bool getButtonPress(ButtonEnum b);
159  bool getButtonClick(ButtonEnum b);
170  uint8_t getAnalogButton(ButtonEnum a);
176  uint8_t getAnalogHat(AnalogHatEnum a);
183  uint16_t getSensor(SensorEnum a);
189  double getAngle(AngleEnum a);
195  bool getStatus(StatusEnum c);
197  void printStatusString();
198 
200  void setAllOff();
202  void setRumbleOff();
207  void setRumbleOn(RumbleEnum mode);
215  void setRumbleOn(uint8_t rightDuration, uint8_t rightPower, uint8_t leftDuration, uint8_t leftPower);
216 
221  void setLedRaw(uint8_t value);
222 
224  void setLedOff() {
225  setLedRaw(0);
226  }
231  void setLedOff(LEDEnum a);
236  void setLedOn(LEDEnum a);
241  void setLedToggle(LEDEnum a);
242 
247  void moveSetBulb(uint8_t r, uint8_t g, uint8_t b);
252  void moveSetBulb(ColorsEnum color);
257  void moveSetRumble(uint8_t rumble);
258 
263  void attachOnInit(void (*funcOnInit)(void)) {
264  pFuncOnInit = funcOnInit;
265  };
269  bool PS3Connected;
274 
275 protected:
279  uint8_t bAddress;
282 
283 private:
289  void onInit();
290  void (*pFuncOnInit)(void); // Pointer to function called in onInit()
291 
292  bool bPollEnable;
293 
294  uint32_t timer; // used to continuously set PS3 Move controller Bulb and rumble values
295 
296  uint32_t ButtonState;
297  uint32_t OldButtonState;
298  uint32_t ButtonClickState;
299 
300  uint8_t my_bdaddr[6]; // Change to your dongles Bluetooth address in the constructor
301  uint8_t readBuf[EP_MAXPKTSIZE]; // General purpose buffer for input data
302  uint8_t writeBuf[EP_MAXPKTSIZE]; // General purpose buffer for output data
303 
304  void readReport(); // read incoming data
305  void printReport(); // print incoming date - Uncomment for debugging
306 
307  /* Private commands */
308  void PS3_Command(uint8_t *data, uint16_t nbytes);
309  void enable_sixaxis(); // Command used to enable the Dualshock 3 and Navigation controller to send data via USB
310  void Move_Command(uint8_t *data, uint16_t nbytes);
311 };
312 #endif
void getBdaddr(uint8_t *bdaddr)
Definition: PS3USB.cpp:476
Definition: PS3USB.h:58
void setLedRaw(uint8_t value)
Definition: PS3USB.cpp:439
bool PS3NavigationConnected
Definition: PS3USB.h:273
void setLedOff()
Definition: PS3USB.h:224
void setBdaddr(uint8_t *bdaddr)
Definition: PS3USB.cpp:463
virtual uint8_t Release()
Definition: PS3USB.cpp:261
bool getButtonPress(ButtonEnum b)
Definition: PS3USB.cpp:315
bool PS3MoveConnected
Definition: PS3USB.h:271
AnalogHatEnum
StatusEnum
Definition: PS3Enums.h:113
void getMoveBdaddr(uint8_t *bdaddr)
Definition: PS3USB.cpp:541
uint8_t getAnalogButton(ButtonEnum a)
Definition: PS3USB.cpp:326
uint16_t getSensor(SensorEnum a)
Definition: PS3USB.cpp:334
void setRumbleOff()
Definition: PS3USB.cpp:411
#define EP_MAXPKTSIZE
Definition: PS3USB.h:25
bool PS3Connected
Definition: PS3USB.h:265
LEDEnum
virtual uint8_t GetAddress()
Definition: PS3USB.h:93
RumbleEnum
void attachOnInit(void(*funcOnInit)(void))
Definition: PS3USB.h:263
void setLedToggle(LEDEnum a)
Definition: PS3USB.cpp:458
void moveSetBulb(uint8_t r, uint8_t g, uint8_t b)
Definition: PS3USB.cpp:502
virtual uint8_t Init(uint8_t parent, uint8_t port, bool lowspeed)
Definition: PS3USB.cpp:46
Definition: address.h:32
void printStatusString()
Definition: PS3USB.cpp:365
void setAllOff()
Definition: PS3USB.cpp:404
ButtonEnum
#define PS3_PID
Definition: PS3USB.h:37
uint8_t getAnalogHat(AnalogHatEnum a)
Definition: PS3USB.cpp:330
USB * pUsb
Definition: PS3USB.h:277
ColorsEnum
AngleEnum
double getAngle(AngleEnum a)
Definition: PS3USB.cpp:338
void moveSetRumble(uint8_t rumble)
Definition: PS3USB.cpp:515
virtual uint8_t Poll()
Definition: PS3USB.cpp:271
#define PS3MOVE_PID
Definition: PS3USB.h:39
#define PS3_MAX_ENDPOINTS
Definition: PS3USB.h:48
EpInfo epInfo[PS3_MAX_ENDPOINTS]
Definition: PS3USB.h:281
void setRumbleOn(RumbleEnum mode)
Definition: PS3USB.cpp:420
virtual boolean VIDPIDOK(uint16_t vid, uint16_t pid)
Definition: PS3USB.h:111
void setLedOn(LEDEnum a)
Definition: PS3USB.cpp:449
#define PS3NAVIGATION_PID
Definition: PS3USB.h:38
#define PS3_VID
Definition: PS3USB.h:36
uint8_t bAddress
Definition: PS3USB.h:279
void setMoveBdaddr(uint8_t *bdaddr)
Definition: PS3USB.cpp:525
Definition: UsbCore.h:190
SensorEnum
PS3USB(USB *pUsb, uint8_t btadr5=0, uint8_t btadr4=0, uint8_t btadr3=0, uint8_t btadr2=0, uint8_t btadr1=0, uint8_t btadr0=0)
Definition: PS3USB.cpp:23
void getMoveCalibration(uint8_t *data)
Definition: PS3USB.cpp:551
bool getStatus(StatusEnum c)
Definition: PS3USB.cpp:361
virtual bool isReady()
Definition: PS3USB.h:101
bool getButtonClick(ButtonEnum b)
Definition: PS3USB.cpp:319