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 HID_REQUEST_SET_REPORT 0x09
44 
45 #define PS3_MAX_ENDPOINTS 3
46 
55 class PS3USB : public USBDeviceConfig {
56 public:
64  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);
65 
74  virtual uint8_t Init(uint8_t parent, uint8_t port, bool lowspeed);
79  virtual uint8_t Release();
84  virtual uint8_t Poll();
85 
90  virtual uint8_t GetAddress() {
91  return bAddress;
92  };
93 
98  virtual bool isReady() {
99  return bPollEnable;
100  };
101 
108  virtual boolean VIDPIDOK(uint16_t vid, uint16_t pid) {
109  return (vid == PS3_VID && (pid == PS3_PID || pid == PS3NAVIGATION_PID || pid == PS3MOVE_PID));
110  };
117  void setBdaddr(uint8_t* BDADDR);
122  void setMoveBdaddr(uint8_t* BDADDR);
123 
133  bool getButtonPress(Button b);
134  bool getButtonClick(Button b);
145  uint8_t getAnalogButton(Button a);
151  uint8_t getAnalogHat(AnalogHat a);
158  uint16_t getSensor(Sensor a);
164  double getAngle(Angle a);
170  bool getStatus(Status c);
175  String getStatusString();
176 
178  void setAllOff();
180  void setRumbleOff();
185  void setRumbleOn(Rumble mode);
193  void setRumbleOn(uint8_t rightDuration, uint8_t rightPower, uint8_t leftDuration, uint8_t leftPower);
194 
199  void setLedRaw(uint8_t value);
204  void setLedOff(LED a);
209  void setLedOn(LED a);
214  void setLedToggle(LED a);
215 
220  void moveSetBulb(uint8_t r, uint8_t g, uint8_t b);
225  void moveSetBulb(Colors color);
230  void moveSetRumble(uint8_t rumble);
231 
236  void attachOnInit(void (*funcOnInit)(void)) {
237  pFuncOnInit = funcOnInit;
238  };
242  bool PS3Connected;
247 
248 protected:
252  uint8_t bAddress;
255 
256 private:
262  void onInit();
263  void (*pFuncOnInit)(void); // Pointer to function called in onInit()
264 
265  bool bPollEnable;
266 
267  uint32_t timer; // used to continuously set PS3 Move controller Bulb and rumble values
268 
269  uint32_t ButtonState;
270  uint32_t OldButtonState;
271  uint32_t ButtonClickState;
272 
273  uint8_t my_bdaddr[6]; // Change to your dongles Bluetooth address in the constructor
274  uint8_t readBuf[EP_MAXPKTSIZE]; // General purpose buffer for input data
275  uint8_t writeBuf[EP_MAXPKTSIZE]; // General purpose buffer for output data
276 
277  void readReport(); // read incoming data
278  void printReport(); // print incoming date - Uncomment for debugging
279 
280  /* Private commands */
281  void PS3_Command(uint8_t* data, uint16_t nbytes);
282  void enable_sixaxis(); // Command used to enable the Dualshock 3 and Navigation controller to send data via USB
283  void Move_Command(uint8_t* data, uint16_t nbytes);
284 };
285 #endif
uint16_t getSensor(Sensor a)
Definition: PS3USB.cpp:341
Definition: PS3USB.h:55
void setLedRaw(uint8_t value)
Definition: PS3USB.cpp:457
bool PS3NavigationConnected
Definition: PS3USB.h:246
Sensor
Definition: PS3Enums.h:141
virtual uint8_t Release()
Definition: PS3USB.cpp:258
bool PS3MoveConnected
Definition: PS3USB.h:244
uint8_t getAnalogButton(Button a)
Definition: PS3USB.cpp:329
void setRumbleOff()
Definition: PS3USB.cpp:429
#define EP_MAXPKTSIZE
Definition: PS3USB.h:25
bool PS3Connected
Definition: PS3USB.h:238
String getStatusString()
Definition: PS3USB.cpp:381
bool getStatus(Status c)
Definition: PS3USB.cpp:373
bool getButtonClick(Button b)
Definition: PS3USB.cpp:322
virtual uint8_t GetAddress()
Definition: PS3USB.h:90
void setRumbleOn(Rumble mode)
Definition: PS3USB.cpp:438
void attachOnInit(void(*funcOnInit)(void))
Definition: PS3USB.h:236
void setBdaddr(uint8_t *BDADDR)
Definition: PS3USB.cpp:477
Status
Definition: PS3Enums.h:182
Colors
Definition: PS3Enums.h:115
void moveSetBulb(uint8_t r, uint8_t g, uint8_t b)
Definition: PS3USB.cpp:505
void setLedToggle(LED a)
Definition: PS3USB.cpp:472
Rumble
Definition: PS3Enums.h:210
virtual uint8_t Init(uint8_t parent, uint8_t port, bool lowspeed)
Definition: PS3USB.cpp:46
Definition: address.h:32
void setAllOff()
Definition: PS3USB.cpp:422
void setMoveBdaddr(uint8_t *BDADDR)
Definition: PS3USB.cpp:529
#define PS3_PID
Definition: PS3USB.h:37
Angle
Definition: PS3Enums.h:177
USB * pUsb
Definition: PS3USB.h:250
void moveSetRumble(uint8_t rumble)
Definition: PS3USB.cpp:518
virtual uint8_t Poll()
Definition: PS3USB.cpp:268
#define PS3MOVE_PID
Definition: PS3USB.h:39
#define PS3_MAX_ENDPOINTS
Definition: PS3USB.h:45
EpInfo epInfo[PS3_MAX_ENDPOINTS]
Definition: PS3USB.h:254
virtual boolean VIDPIDOK(uint16_t vid, uint16_t pid)
Definition: PS3USB.h:108
Button
#define PS3NAVIGATION_PID
Definition: PS3USB.h:38
#define PS3_VID
Definition: PS3USB.h:36
uint8_t bAddress
Definition: PS3USB.h:252
Definition: UsbCore.h:152
uint8_t getAnalogHat(AnalogHat a)
Definition: PS3USB.cpp:335
double getAngle(Angle a)
Definition: PS3USB.cpp:347
void setLedOn(LED a)
Definition: PS3USB.cpp:467
bool getButtonPress(Button b)
Definition: PS3USB.cpp:318
AnalogHat
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
virtual bool isReady()
Definition: PS3USB.h:98
void setLedOff(LED a)
Definition: PS3USB.cpp:462