USB Host Shield 2.0
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 "usbhid.h"
23 #include "PS3Enums.h"
24 
25 /* PS3 data taken from descriptors */
26 #define EP_MAXPKTSIZE 64 // max size for data via USB
27 
28 /* Names we give to the 3 ps3 pipes - this is only used for setting the bluetooth address into the ps3 controllers */
29 #define PS3_CONTROL_PIPE 0
30 #define PS3_OUTPUT_PIPE 1
31 #define PS3_INPUT_PIPE 2
32 
33 //PID and VID of the different devices
34 #define PS3_VID 0x054C // Sony Corporation
35 #define PS3_PID 0x0268 // PS3 Controller DualShock 3
36 #define PS3NAVIGATION_PID 0x042F // Navigation controller
37 #define PS3MOVE_PID 0x03D5 // Motion controller
38 
39 #define PS3_MAX_ENDPOINTS 3
40 
49 class PS3USB : public USBDeviceConfig {
50 public:
58  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);
59 
68  uint8_t Init(uint8_t parent, uint8_t port, bool lowspeed);
73  uint8_t Release();
78  uint8_t Poll();
79 
84  virtual uint8_t GetAddress() {
85  return bAddress;
86  };
87 
92  virtual bool isReady() {
93  return bPollEnable;
94  };
95 
102  virtual bool VIDPIDOK(uint16_t vid, uint16_t pid) {
103  return (vid == PS3_VID && (pid == PS3_PID || pid == PS3NAVIGATION_PID || pid == PS3MOVE_PID));
104  };
112  void setBdaddr(uint8_t *bdaddr);
118  void getBdaddr(uint8_t *bdaddr);
119 
125  void setMoveBdaddr(uint8_t *bdaddr);
131  void getMoveBdaddr(uint8_t *bdaddr);
136  void getMoveCalibration(uint8_t *data);
137 
149  bool getButtonPress(ButtonEnum b);
150  bool getButtonClick(ButtonEnum b);
161  uint8_t getAnalogButton(ButtonEnum a);
167  uint8_t getAnalogHat(AnalogHatEnum a);
174  uint16_t getSensor(SensorEnum a);
180  float getAngle(AngleEnum a);
186  bool getStatus(StatusEnum c);
188  void printStatusString();
189 
191  void setAllOff();
193  void setRumbleOff();
198  void setRumbleOn(RumbleEnum mode);
206  void setRumbleOn(uint8_t rightDuration, uint8_t rightPower, uint8_t leftDuration, uint8_t leftPower);
207 
212  void setLedRaw(uint8_t value);
213 
215  void setLedOff() {
216  setLedRaw(0);
217  }
222  void setLedOff(LEDEnum a);
227  void setLedOn(LEDEnum a);
232  void setLedToggle(LEDEnum a);
233 
238  void moveSetBulb(uint8_t r, uint8_t g, uint8_t b);
243  void moveSetBulb(ColorsEnum color);
248  void moveSetRumble(uint8_t rumble);
249 
254  void attachOnInit(void (*funcOnInit)(void)) {
255  pFuncOnInit = funcOnInit;
256  };
265 
266 protected:
270  uint8_t bAddress;
273 
274 private:
280  void onInit();
281  void (*pFuncOnInit)(void); // Pointer to function called in onInit()
282 
283  bool bPollEnable;
284 
285  uint32_t timer; // used to continuously set PS3 Move controller Bulb and rumble values
286 
287  uint32_t ButtonState;
288  uint32_t OldButtonState;
289  uint32_t ButtonClickState;
290 
291  uint8_t my_bdaddr[6]; // Change to your dongles Bluetooth address in the constructor
292  uint8_t readBuf[EP_MAXPKTSIZE]; // General purpose buffer for input data
293  uint8_t writeBuf[EP_MAXPKTSIZE]; // General purpose buffer for output data
294 
295  void readReport(); // read incoming data
296  void printReport(); // print incoming date - Uncomment for debugging
297 
298  /* Private commands */
299  void PS3_Command(uint8_t *data, uint16_t nbytes);
300  void enable_sixaxis(); // Command used to enable the Dualshock 3 and Navigation controller to send data via USB
301  void Move_Command(uint8_t *data, uint16_t nbytes);
302 };
303 #endif
StatusEnum
Definition: PS3Enums.h:113
#define PS3_PID
Definition: PS3USB.h:35
#define PS3_MAX_ENDPOINTS
Definition: PS3USB.h:39
#define PS3NAVIGATION_PID
Definition: PS3USB.h:36
#define PS3_VID
Definition: PS3USB.h:34
#define EP_MAXPKTSIZE
Definition: PS3USB.h:26
#define PS3MOVE_PID
Definition: PS3USB.h:37
Definition: PS3USB.h:49
uint8_t Init(uint8_t parent, uint8_t port, bool lowspeed)
Definition: PS3USB.cpp:47
virtual bool isReady()
Definition: PS3USB.h:92
virtual uint8_t GetAddress()
Definition: PS3USB.h:84
bool PS3Connected
Definition: PS3USB.h:256
uint8_t getAnalogHat(AnalogHatEnum a)
Definition: PS3USB.cpp:334
void printStatusString()
Definition: PS3USB.cpp:367
void getBdaddr(uint8_t *bdaddr)
Definition: PS3USB.cpp:481
virtual bool VIDPIDOK(uint16_t vid, uint16_t pid)
Definition: PS3USB.h:102
EpInfo epInfo[PS3_MAX_ENDPOINTS]
Definition: PS3USB.h:272
float getAngle(AngleEnum a)
Definition: PS3USB.cpp:342
void setLedOn(LEDEnum a)
Definition: PS3USB.cpp:454
uint8_t bAddress
Definition: PS3USB.h:270
void setMoveBdaddr(uint8_t *bdaddr)
Definition: PS3USB.cpp:530
bool PS3NavigationConnected
Definition: PS3USB.h:264
uint8_t Release()
Definition: PS3USB.cpp:262
void moveSetRumble(uint8_t rumble)
Definition: PS3USB.cpp:520
uint8_t getAnalogButton(ButtonEnum a)
Definition: PS3USB.cpp:329
void getMoveBdaddr(uint8_t *bdaddr)
Definition: PS3USB.cpp:546
void setRumbleOn(RumbleEnum mode)
Definition: PS3USB.cpp:423
void setLedToggle(LEDEnum a)
Definition: PS3USB.cpp:463
bool PS3MoveConnected
Definition: PS3USB.h:262
bool getButtonPress(ButtonEnum b)
Definition: PS3USB.cpp:316
uint8_t Poll()
Definition: PS3USB.cpp:272
uint16_t getSensor(SensorEnum a)
Definition: PS3USB.cpp:338
void setLedRaw(uint8_t value)
Definition: PS3USB.cpp:444
USB * pUsb
Definition: PS3USB.h:268
void setRumbleOff()
Definition: PS3USB.cpp:413
void getMoveCalibration(uint8_t *data)
Definition: PS3USB.cpp:556
bool getButtonClick(ButtonEnum b)
Definition: PS3USB.cpp:321
void setAllOff()
Definition: PS3USB.cpp:406
void setLedOff()
Definition: PS3USB.h:215
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 attachOnInit(void(*funcOnInit)(void))
Definition: PS3USB.h:254
bool getStatus(StatusEnum c)
Definition: PS3USB.cpp:363
void setBdaddr(uint8_t *bdaddr)
Definition: PS3USB.cpp:468
void moveSetBulb(uint8_t r, uint8_t g, uint8_t b)
Definition: PS3USB.cpp:507
Definition: UsbCore.h:212
SensorEnum
AnalogHatEnum
LEDEnum
AngleEnum
ButtonEnum
ColorsEnum
RumbleEnum
Definition: address.h:39