USB Host Shield 2.0
PSBuzz.h
Go to the documentation of this file.
1 /* Copyright (C) 2014 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 _psbuzz_h_
19 #define _psbuzz_h_
20 
21 #include "hiduniversal.h"
22 #include "controllerEnums.h"
23 
24 #define PSBUZZ_VID 0x054C // Sony Corporation
25 #define PSBUZZ_PID 0x1000 // PS Buzz Controller
26 
29  struct {
30  uint8_t red : 1;
31  uint8_t yellow : 1;
32  uint8_t green : 1;
33  uint8_t orange : 1;
34  uint8_t blue : 1;
35  } __attribute__((packed)) btn[4];
36  uint32_t val : 20;
37 } __attribute__((packed));
38 
43 class PSBuzz : public HIDUniversal {
44 public:
49  PSBuzz(USB *p) :
50  HIDUniversal(p) {
51  Reset();
52  };
53 
58  bool connected() {
60  };
61 
66  void attachOnInit(void (*funcOnInit)(void)) {
67  pFuncOnInit = funcOnInit;
68  };
69 
82  bool getButtonPress(ButtonEnum b, uint8_t controller = 0);
83  bool getButtonClick(ButtonEnum b, uint8_t controller = 0);
95  void setLedRaw(bool value, uint8_t controller = 0);
96 
98  void setLedOffAll() {
99  for (uint8_t i = 1; i < 4; i++) // Skip first as it will be set in setLedRaw
100  ledState[i] = false; // Just an easy way to set all four off at the same time
101  setLedRaw(false); // Turn the LED off, on all four controllers
102  };
103 
108  void setLedOff(uint8_t controller = 0) {
109  setLedRaw(false, controller);
110  };
111 
112 
114  void setLedOnAll() {
115  for (uint8_t i = 1; i < 4; i++) // Skip first as it will be set in setLedRaw
116  ledState[i] = true; // Just an easy way to set all four off at the same time
117  setLedRaw(true); // Turn the LED on, on all four controllers
118  };
119 
124  void setLedOn(uint8_t controller = 0) {
125  setLedRaw(true, controller);
126  };
127 
132  void setLedToggle(uint8_t controller = 0) {
133  setLedRaw(!ledState[controller], controller);
134  };
137 protected:
146  void ParseHIDData(USBHID *hid, bool is_rpt_id, uint8_t len, uint8_t *buf);
147 
153  uint8_t OnInitSuccessful();
157  void Reset() {
158  psbuzzButtons.val = 0;
159  oldButtonState.val = 0;
160  buttonClickState.val = 0;
161  for (uint8_t i = 0; i < sizeof(ledState); i++)
162  ledState[i] = 0;
163  };
164 
172  virtual bool VIDPIDOK(uint16_t vid, uint16_t pid) {
173  return (vid == PSBUZZ_VID && pid == PSBUZZ_PID);
174  };
177 private:
178  static int8_t getButtonIndexBuzz(ButtonEnum b);
179 
180  void (*pFuncOnInit)(void); // Pointer to function called in onInit()
181 
182  void PSBuzz_Command(uint8_t *data, uint16_t nbytes);
183 
184  PSBUZZButtons psbuzzButtons, oldButtonState, buttonClickState;
185  bool ledState[4];
186 };
187 #endif
PSBuzz::setLedOff
void setLedOff(uint8_t controller=0)
Definition: PSBuzz.h:108
PSBUZZButtons::red
uint8_t red
Definition: PSBuzz.h:30
PSBuzz::setLedOnAll
void setLedOnAll()
Definition: PSBuzz.h:114
hiduniversal.h
PSBuzz::attachOnInit
void attachOnInit(void(*funcOnInit)(void))
Definition: PSBuzz.h:66
PSBuzz::VIDPIDOK
virtual bool VIDPIDOK(uint16_t vid, uint16_t pid)
Definition: PSBuzz.h:172
PSBuzz::PSBuzz
PSBuzz(USB *p)
Definition: PSBuzz.h:49
HIDComposite::isReady
virtual bool isReady()
Definition: hidcomposite.h:99
PSBuzz::setLedToggle
void setLedToggle(uint8_t controller=0)
Definition: PSBuzz.h:132
PSBUZZButtons::val
uint32_t val
Definition: PSBuzz.h:36
PSBuzz
Definition: PSBuzz.h:43
PSBuzz::OnInitSuccessful
uint8_t OnInitSuccessful()
Definition: PSBuzz.cpp:41
controllerEnums.h
USB
Definition: UsbCore.h:212
PSBuzz::Reset
void Reset()
Definition: PSBuzz.h:157
PSBuzz::setLedRaw
void setLedRaw(bool value, uint8_t controller=0)
Definition: PSBuzz.cpp:72
PSBUZZButtons::btn
struct PSBUZZButtons::@39 btn[4]
HIDComposite::VID
uint16_t VID
Definition: hidcomposite.h:71
PSBUZZButtons::orange
uint8_t orange
Definition: PSBuzz.h:33
PSBuzz::ParseHIDData
void ParseHIDData(USBHID *hid, bool is_rpt_id, uint8_t len, uint8_t *buf)
Definition: PSBuzz.cpp:23
PSBuzz::getButtonClick
bool getButtonClick(ButtonEnum b, uint8_t controller=0)
Definition: PSBuzz.cpp:63
PSBuzz::getButtonPress
bool getButtonPress(ButtonEnum b, uint8_t controller=0)
Definition: PSBuzz.cpp:58
PSBUZZButtons::blue
uint8_t blue
Definition: PSBuzz.h:34
PSBUZZ_PID
#define PSBUZZ_PID
Definition: PSBuzz.h:25
PSBUZZButtons::green
uint8_t green
Definition: PSBuzz.h:32
HIDUniversal
Definition: hiduniversal.h:23
PSBUZZ_VID
#define PSBUZZ_VID
Definition: PSBuzz.h:24
PSBUZZButtons::yellow
uint8_t yellow
Definition: PSBuzz.h:31
USBHID
Definition: usbhid.h:143
PSBUZZButtons
Definition: PSBuzz.h:28
HIDComposite::PID
uint16_t PID
Definition: hidcomposite.h:71
PSBuzz::connected
bool connected()
Definition: PSBuzz.h:58
PSBuzz::setLedOffAll
void setLedOffAll()
Definition: PSBuzz.h:98
ButtonEnum
ButtonEnum
Definition: controllerEnums.h:78
PSBuzz::setLedOn
void setLedOn(uint8_t controller=0)
Definition: PSBuzz.h:124