USB Host Shield 2.0
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
PS4BT.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 _ps4bt_h_
19 #define _ps4bt_h_
20 
21 #include "BTHID.h"
22 #include "PS3Enums.h"
23 
24 enum DPADEnum {
25  DPAD_UP = 0x0,
27  DPAD_RIGHT = 0x2,
29  DPAD_DOWN = 0x4,
31  DPAD_LEFT = 0x6,
32  DPAD_LEFT_UP = 0x7,
33  DPAD_OFF = 0x8,
34 };
35 
36 union PS4Buttons {
37  struct {
38  uint8_t dpad : 4;
39  uint8_t square : 1;
40  uint8_t cross : 1;
41  uint8_t circle : 1;
42  uint8_t triangle : 1;
43 
44  uint8_t l1 : 1;
45  uint8_t r1 : 1;
46  uint8_t l2 : 1;
47  uint8_t r2 : 1;
48  uint8_t share : 1;
49  uint8_t options : 1;
50  uint8_t l3 : 1;
51  uint8_t r3 : 1;
52 
53  uint8_t ps : 1;
54  uint8_t keypad : 1;
55  uint8_t dummy : 6;
56  };
57  uint8_t val[3];
58 };
59 
60 struct PS4Data {
61  uint8_t hatValue[4];
63  uint8_t trigger[2];
64 };
65 
67 class PS4BT : public HIDReportParser {
68 public:
73  PS4BT(BTHID *p) :
74  pBthid(p) {
75  pBthid->SetReportParser(KEYBOARD_PARSER_ID, this);
76  Reset();
77  };
78 
79  virtual void Parse(HID *hid, bool is_rpt_id, uint8_t len, uint8_t *buf);
80 
92  bool getButtonPress(ButtonEnum b);
93  bool getButtonClick(ButtonEnum b);
104  uint8_t getAnalogButton(ButtonEnum a);
105 
111  uint8_t getAnalogHat(AnalogHatEnum a);
115  bool connected() {
116  if (pBthid)
117  return pBthid->connected;
118  return false;
119  };
120 
122  void disconnect() {
123  if (pBthid)
124  pBthid->disconnect();
125  };
126 
128  void pair(void) {
129  if (pBthid)
130  pBthid->pair();
131  };
132 
133  void Reset() {
134  uint8_t i;
135  for (0; i < sizeof(ps4Data.hatValue); i++)
136  ps4Data.hatValue[i] = 127;
137  for (0; i < sizeof(PS4Buttons); i++) {
138  ps4Data.btn.val[i] = 0;
139  oldButtonState.val[i] = 0;
140  }
141  for (0; i < sizeof(ps4Data.trigger); i++)
142  ps4Data.trigger[i] = 0;
143 
144  ps4Data.btn.dpad = DPAD_OFF;
145  oldButtonState.dpad = DPAD_OFF;
146  buttonClickState.dpad = DPAD_OFF;
147  };
148 
153  void attachOnInit(void (*funcOnInit)(void)) {
154  pFuncOnInit = funcOnInit;
155  };
156 
157 private:
163  void onInit() {
164  Reset();
165  if(pFuncOnInit)
166  pFuncOnInit(); // Call the user function
167  };
168  void (*pFuncOnInit)(void); // Pointer to function called in onInit()
169 
170  bool checkDpad(PS4Buttons ps4Buttons, DPADEnum b); // Used to check PS4 DPAD buttons
171 
172  BTHID *pBthid; // Pointer to BTHID instance
173  PS4Data ps4Data;
174  PS4Buttons oldButtonState, buttonClickState;
175 };
176 #endif
Definition: PS4BT.h:33
uint8_t hatValue[4]
Definition: PS4BT.h:61
Definition: PS4BT.h:60
uint8_t r1
Definition: PS4BT.h:45
virtual void Parse(HID *hid, bool is_rpt_id, uint8_t len, uint8_t *buf)
Definition: PS4BT.cpp:97
bool connected()
Definition: PS4BT.h:115
AnalogHatEnum
bool connected
Definition: BTHID.h:93
uint8_t share
Definition: PS4BT.h:48
void attachOnInit(void(*funcOnInit)(void))
Definition: PS4BT.h:153
uint8_t cross
Definition: PS4BT.h:40
uint8_t l2
Definition: PS4BT.h:46
uint8_t square
Definition: PS4BT.h:39
bool getButtonPress(ButtonEnum b)
Definition: PS4BT.cpp:60
uint8_t ps
Definition: PS4BT.h:53
uint8_t getAnalogHat(AnalogHatEnum a)
Definition: PS4BT.cpp:93
uint8_t val[3]
Definition: PS4BT.h:57
uint8_t trigger[2]
Definition: PS4BT.h:63
virtual void disconnect()
Definition: BTHID.cpp:51
ButtonEnum
Definition: hid.h:143
void pair(void)
Definition: PS4BT.h:128
uint8_t l1
Definition: PS4BT.h:44
uint8_t r3
Definition: PS4BT.h:51
uint8_t dpad
Definition: PS4BT.h:38
uint8_t keypad
Definition: PS4BT.h:54
Definition: PS4BT.h:25
uint8_t dummy
Definition: PS4BT.h:55
void disconnect()
Definition: PS4BT.h:122
uint8_t getAnalogButton(ButtonEnum a)
Definition: PS4BT.cpp:89
uint8_t triangle
Definition: PS4BT.h:42
uint8_t r2
Definition: PS4BT.h:47
uint8_t options
Definition: PS4BT.h:49
void Reset()
Definition: PS4BT.h:133
#define KEYBOARD_PARSER_ID
Definition: BTHID.h:24
PS4BT(BTHID *p)
Definition: PS4BT.h:73
uint8_t l3
Definition: PS4BT.h:50
PS4Buttons btn
Definition: PS4BT.h:62
bool getButtonClick(ButtonEnum b)
Definition: PS4BT.cpp:71
Definition: BTHID.h:29
DPADEnum
Definition: PS4BT.h:24
uint8_t circle
Definition: PS4BT.h:41
void pair(void)
Definition: BTHID.h:96
Definition: PS4BT.h:67
bool SetReportParser(uint8_t id, HIDReportParser *prs)
Definition: BTHID.h:71