USB Host Shield 2.0
Loading...
Searching...
No Matches
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
49class PS3USB : public USBDeviceConfig {
50public:
59
68 uint8_t Init(uint8_t parent, uint8_t port, bool lowspeed);
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
136 void getMoveCalibration(uint8_t *data);
137
180 float getAngle(AngleEnum a);
186 bool getStatus(StatusEnum c);
188 void printStatusString();
189
191 void setAllOff();
193 void setRumbleOff();
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);
249
254 void attachOnInit(void (*funcOnInit)(void)) {
255 pFuncOnInit = funcOnInit;
256 };
265
266protected:
273
274private:
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
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:260
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
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:220
SensorEnum
AnalogHatEnum
LEDEnum
AngleEnum
ButtonEnum
ColorsEnum
RumbleEnum