From 62c00d6f477ec74ce75f368f428dd47272ff6de1 Mon Sep 17 00:00:00 2001 From: Lauszus Date: Sun, 17 Jan 2021 16:48:26 +0000 Subject: [PATCH] deploy: fba77f91194be2e67f0eb0820d310f21febdea71 --- _p_s4_parser_8cpp_source.html | 4 +- _p_s4_u_s_b_8h.html | 13 +- _p_s4_u_s_b_8h__incl.map | 13 +- _p_s4_u_s_b_8h__incl.md5 | 2 +- _p_s4_u_s_b_8h__incl.png | Bin 16604 -> 20022 bytes _p_s4_u_s_b_8h_source.html | 12 +- _p_s_buzz_8cpp.html | 13 +- _p_s_buzz_8cpp__incl.map | 13 +- _p_s_buzz_8cpp__incl.md5 | 2 +- _p_s_buzz_8cpp__incl.png | Bin 14718 -> 15265 bytes _p_s_buzz_8cpp_source.html | 8 +- _p_s_buzz_8h.html | 11 +- _p_s_buzz_8h__dep__incl.md5 | 2 +- _p_s_buzz_8h__incl.map | 11 +- _p_s_buzz_8h__incl.md5 | 2 +- _p_s_buzz_8h__incl.png | Bin 11717 -> 14967 bytes _p_s_buzz_8h_source.html | 12 +- _usb_8cpp_source.html | 6 +- _usb_8h.html | 98 ++-- _usb_8h__dep__incl.map | 98 ++-- _usb_8h__dep__incl.md5 | 2 +- _usb_8h__dep__incl.png | Bin 151232 -> 155656 bytes annotated.html | 6 +- class_h_i_d_composite-members.html | 35 +- class_h_i_d_composite.html | 446 +++++++++++++- class_h_i_d_composite__coll__graph.map | 16 +- class_h_i_d_composite__coll__graph.md5 | 2 +- class_h_i_d_composite__coll__graph.png | Bin 19814 -> 32360 bytes class_h_i_d_composite__inherit__graph.map | 3 + class_h_i_d_composite__inherit__graph.md5 | 2 +- class_h_i_d_composite__inherit__graph.png | Bin 8756 -> 12378 bytes class_h_i_d_universal-members.html | 64 ++- class_h_i_d_universal.html | 544 ++++-------------- class_h_i_d_universal__coll__graph.map | 17 +- class_h_i_d_universal__coll__graph.md5 | 2 +- class_h_i_d_universal__coll__graph.png | Bin 19361 -> 38697 bytes class_h_i_d_universal__inherit__graph.map | 11 +- class_h_i_d_universal__inherit__graph.md5 | 2 +- class_h_i_d_universal__inherit__graph.png | Bin 10521 -> 12365 bytes class_p_s4_u_s_b-members.html | 98 ++-- class_p_s4_u_s_b.html | 124 ++-- class_p_s4_u_s_b__coll__graph.map | 21 +- class_p_s4_u_s_b__coll__graph.md5 | 2 +- class_p_s4_u_s_b__coll__graph.png | Bin 23675 -> 42108 bytes class_p_s4_u_s_b__inherit__graph.map | 11 +- class_p_s4_u_s_b__inherit__graph.md5 | 2 +- class_p_s4_u_s_b__inherit__graph.png | Bin 12284 -> 14335 bytes class_p_s_buzz-members.html | 80 +-- class_p_s_buzz.html | 120 ++-- class_p_s_buzz__coll__graph.map | 19 +- class_p_s_buzz__coll__graph.md5 | 2 +- class_p_s_buzz__coll__graph.png | Bin 21077 -> 39925 bytes class_p_s_buzz__inherit__graph.map | 9 +- class_p_s_buzz__inherit__graph.md5 | 2 +- class_p_s_buzz__inherit__graph.png | Bin 8841 -> 10725 bytes class_u_s_b_device_config.html | 18 +- class_u_s_b_device_config__inherit__graph.map | 10 +- class_u_s_b_device_config__inherit__graph.md5 | 2 +- class_u_s_b_device_config__inherit__graph.png | Bin 44737 -> 45423 bytes class_u_s_b_h_i_d.html | 14 +- class_u_s_b_h_i_d__inherit__graph.map | 10 +- class_u_s_b_h_i_d__inherit__graph.md5 | 2 +- class_u_s_b_h_i_d__inherit__graph.png | Bin 16899 -> 14836 bytes class_usb_config_xtracter.html | 26 +- class_usb_config_xtracter__inherit__graph.map | 24 +- class_usb_config_xtracter__inherit__graph.md5 | 2 +- class_usb_config_xtracter__inherit__graph.png | Bin 29671 -> 26265 bytes classes.html | 63 +- functions_b.html | 18 +- functions_c.html | 3 + functions_d.html | 3 + functions_e.html | 6 +- functions_f.html | 5 +- functions_func_e.html | 2 +- functions_func_f.html | 3 + functions_func_g.html | 5 +- functions_func_i.html | 5 +- functions_func_o.html | 1 - functions_func_p.html | 2 +- functions_func_r.html | 1 - functions_func_s.html | 4 +- functions_func_w.html | 2 +- functions_func_z.html | 77 +++ functions_g.html | 5 +- functions_h.html | 1 - functions_i.html | 3 +- functions_o.html | 1 - functions_p.html | 6 +- functions_q.html | 1 + functions_r.html | 12 +- functions_s.html | 4 +- functions_v.html | 1 - functions_vars_b.html | 18 +- functions_vars_c.html | 3 + functions_vars_d.html | 3 + functions_vars_e.html | 4 +- functions_vars_f.html | 2 +- functions_vars_h.html | 1 - functions_vars_p.html | 4 +- functions_vars_q.html | 1 + functions_vars_r.html | 11 +- functions_vars_v.html | 1 - functions_vars_w.html | 2 +- functions_w.html | 4 +- functions_z.html | 77 +++ hidcomposite_8cpp_source.html | 36 +- hidcomposite_8h.html | 9 + hidcomposite_8h__dep__incl.map | 5 + hidcomposite_8h__dep__incl.md5 | 2 +- hidcomposite_8h__dep__incl.png | Bin 3600 -> 12658 bytes hidcomposite_8h_source.html | 40 +- hiduniversal_8cpp.html | 7 +- hiduniversal_8cpp__incl.map | 7 +- hiduniversal_8cpp__incl.md5 | 2 +- hiduniversal_8cpp__incl.png | Bin 10919 -> 12894 bytes hiduniversal_8cpp_source.html | 91 +-- hiduniversal_8h.html | 9 +- hiduniversal_8h__dep__incl.md5 | 2 +- hiduniversal_8h__incl.map | 7 +- hiduniversal_8h__incl.md5 | 2 +- hiduniversal_8h__incl.png | Bin 7861 -> 9621 bytes hiduniversal_8h_source.html | 40 +- hidusagestr_8h.html | 62 +- hidusagestr_8h__dep__incl.map | 62 +- hidusagestr_8h__dep__incl.md5 | 2 +- hidusagestr_8h__dep__incl.png | Bin 64775 -> 66087 bytes hierarchy.html | 170 +++--- inherit_graph_17.md5 | 2 +- inherit_graph_19.map | 2 +- inherit_graph_19.md5 | 2 +- inherit_graph_19.png | Bin 1125 -> 2066 bytes inherit_graph_20.map | 5 +- inherit_graph_20.md5 | 2 +- inherit_graph_20.png | Bin 8806 -> 1966 bytes inherit_graph_21.map | 2 +- inherit_graph_21.md5 | 2 +- inherit_graph_21.png | Bin 1412 -> 1125 bytes inherit_graph_22.map | 5 +- inherit_graph_22.md5 | 2 +- inherit_graph_22.png | Bin 997 -> 8806 bytes inherit_graph_23.map | 2 +- inherit_graph_23.md5 | 2 +- inherit_graph_23.png | Bin 1702 -> 1412 bytes inherit_graph_24.map | 2 +- inherit_graph_24.md5 | 2 +- inherit_graph_24.png | Bin 1149 -> 997 bytes inherit_graph_25.map | 2 +- inherit_graph_25.md5 | 2 +- inherit_graph_25.png | Bin 1007 -> 1702 bytes inherit_graph_26.map | 2 +- inherit_graph_26.md5 | 2 +- inherit_graph_26.png | Bin 1256 -> 1149 bytes inherit_graph_27.map | 2 +- inherit_graph_27.md5 | 2 +- inherit_graph_27.png | Bin 1446 -> 1007 bytes inherit_graph_28.map | 3 +- inherit_graph_28.md5 | 2 +- inherit_graph_28.png | Bin 3560 -> 1256 bytes inherit_graph_29.map | 2 +- inherit_graph_29.md5 | 2 +- inherit_graph_29.png | Bin 1941 -> 1446 bytes inherit_graph_30.map | 3 +- inherit_graph_30.md5 | 2 +- inherit_graph_30.png | Bin 1687 -> 3560 bytes inherit_graph_31.map | 2 +- inherit_graph_31.md5 | 2 +- inherit_graph_31.png | Bin 1261 -> 1941 bytes inherit_graph_32.map | 2 +- inherit_graph_32.md5 | 2 +- inherit_graph_32.png | Bin 1920 -> 1687 bytes inherit_graph_33.map | 2 +- inherit_graph_33.md5 | 2 +- inherit_graph_33.png | Bin 1385 -> 1261 bytes inherit_graph_34.map | 2 +- inherit_graph_34.md5 | 2 +- inherit_graph_34.png | Bin 1471 -> 1920 bytes inherit_graph_35.map | 2 +- inherit_graph_35.md5 | 2 +- inherit_graph_35.png | Bin 1026 -> 1385 bytes inherit_graph_36.map | 2 +- inherit_graph_36.md5 | 2 +- inherit_graph_36.png | Bin 1236 -> 1471 bytes inherit_graph_37.map | 2 +- inherit_graph_37.md5 | 2 +- inherit_graph_37.png | Bin 1091 -> 1026 bytes inherit_graph_38.map | 2 +- inherit_graph_38.md5 | 2 +- inherit_graph_38.png | Bin 1562 -> 1236 bytes inherit_graph_39.map | 2 +- inherit_graph_39.md5 | 2 +- inherit_graph_39.png | Bin 1073 -> 1091 bytes inherit_graph_40.map | 2 +- inherit_graph_40.md5 | 2 +- inherit_graph_40.png | Bin 1757 -> 1562 bytes inherit_graph_41.map | 2 +- inherit_graph_41.md5 | 2 +- inherit_graph_41.png | Bin 1074 -> 1073 bytes inherit_graph_42.map | 2 +- inherit_graph_42.md5 | 2 +- inherit_graph_42.png | Bin 2240 -> 1757 bytes inherit_graph_43.map | 2 +- inherit_graph_43.md5 | 2 +- inherit_graph_43.png | Bin 1701 -> 1074 bytes inherit_graph_44.map | 2 +- inherit_graph_44.md5 | 2 +- inherit_graph_44.png | Bin 1408 -> 2240 bytes inherit_graph_45.map | 2 +- inherit_graph_45.md5 | 2 +- inherit_graph_45.png | Bin 1128 -> 1701 bytes inherit_graph_46.map | 2 +- inherit_graph_46.md5 | 2 +- inherit_graph_46.png | Bin 1372 -> 1408 bytes inherit_graph_47.map | 2 +- inherit_graph_47.md5 | 2 +- inherit_graph_47.png | Bin 2383 -> 1128 bytes inherit_graph_48.map | 2 +- inherit_graph_48.md5 | 2 +- inherit_graph_48.png | Bin 2068 -> 1372 bytes inherit_graph_49.map | 2 +- inherit_graph_49.md5 | 2 +- inherit_graph_49.png | Bin 1953 -> 2383 bytes inherit_graph_50.map | 2 +- inherit_graph_50.md5 | 2 +- inherit_graph_50.png | Bin 1708 -> 2068 bytes inherit_graph_51.map | 2 +- inherit_graph_51.md5 | 2 +- inherit_graph_51.png | Bin 2108 -> 1953 bytes inherit_graph_52.map | 2 +- inherit_graph_52.md5 | 2 +- inherit_graph_52.png | Bin 1228 -> 1708 bytes inherit_graph_53.map | 2 +- inherit_graph_53.md5 | 2 +- inherit_graph_53.png | Bin 1614 -> 2108 bytes inherit_graph_54.map | 6 +- inherit_graph_54.md5 | 2 +- inherit_graph_54.png | Bin 16219 -> 1228 bytes inherit_graph_55.map | 2 +- inherit_graph_55.md5 | 2 +- inherit_graph_55.png | Bin 1903 -> 1614 bytes inherit_graph_56.map | 6 +- inherit_graph_56.md5 | 2 +- inherit_graph_56.png | Bin 1721 -> 16219 bytes inherit_graph_57.map | 32 +- inherit_graph_57.md5 | 2 +- inherit_graph_57.png | Bin 98343 -> 1903 bytes inherit_graph_58.map | 3 + inherit_graph_58.md5 | 1 + inherit_graph_58.png | Bin 0 -> 1721 bytes inherit_graph_59.map | 33 ++ inherit_graph_59.md5 | 1 + inherit_graph_59.png | Bin 0 -> 101984 bytes inherits.html | 150 ++--- menudata.js | 6 +- search/all_10.js | 5 +- search/all_11.js | 2 +- search/all_12.js | 12 +- search/all_13.js | 4 +- search/all_16.js | 2 +- search/all_17.js | 4 +- search/all_1a.js | 1 + search/all_2.js | 14 +- search/all_3.js | 1 + search/all_4.js | 1 + search/all_5.js | 5 +- search/all_6.js | 3 +- search/all_7.js | 5 +- search/all_8.js | 3 +- search/all_9.js | 6 +- search/all_f.js | 2 +- search/classes_5.js | 1 + search/classes_b.js | 1 + search/functions_10.js | 4 +- search/functions_14.js | 2 +- search/functions_16.html | 26 + search/functions_16.js | 4 + search/functions_4.js | 2 +- search/functions_5.js | 1 + search/functions_6.js | 5 +- search/functions_8.js | 6 +- search/functions_d.js | 2 +- search/functions_e.js | 2 +- search/functions_f.js | 4 +- search/searchdata.js | 2 +- search/variables_10.js | 2 +- search/variables_11.js | 7 +- search/variables_15.js | 2 +- search/variables_16.js | 2 +- search/variables_2.js | 14 +- search/variables_3.js | 1 + search/variables_4.js | 1 + search/variables_5.js | 3 +- search/variables_6.js | 2 +- search/variables_8.js | 2 +- search/variables_f.js | 3 +- struct_command_block_wrapper.html | 30 +- ...composite_1_1_h_i_d_interface-members.html | 85 +++ ...t_h_i_d_composite_1_1_h_i_d_interface.html | 183 ++++++ ...d_composite_1_1_report_parser-members.html | 83 +++ struct_h_i_d_composite_1_1_report_parser.html | 138 +++++ ...mposite_1_1_report_parser__coll__graph.map | 3 + ...mposite_1_1_report_parser__coll__graph.md5 | 1 + ...mposite_1_1_report_parser__coll__graph.png | Bin 0 -> 5504 bytes struct_hub_descriptor.html | 34 +- struct_hub_event.html | 32 +- struct_s_e_t_u_p___p_k_t-members.html | 4 +- struct_s_e_t_u_p___p_k_t.html | 60 +- structtouchpad_x_y-members.html | 2 +- structtouchpad_x_y.html | 26 +- union_p_s4_buttons.html | 74 +-- union_p_s_b_u_z_z_buttons-members.html | 2 +- union_p_s_b_u_z_z_buttons.html | 30 +- union_xbox_one_s_buttons.html | 62 +- usbhid_8h.html | 58 +- usbhid_8h__dep__incl.map | 58 +- usbhid_8h__dep__incl.md5 | 2 +- usbhid_8h__dep__incl.png | Bin 57616 -> 59493 bytes 316 files changed, 2761 insertions(+), 1765 deletions(-) create mode 100644 functions_func_z.html create mode 100644 functions_z.html create mode 100644 inherit_graph_58.map create mode 100644 inherit_graph_58.md5 create mode 100644 inherit_graph_58.png create mode 100644 inherit_graph_59.map create mode 100644 inherit_graph_59.md5 create mode 100644 inherit_graph_59.png create mode 100644 search/functions_16.html create mode 100644 search/functions_16.js create mode 100644 struct_h_i_d_composite_1_1_h_i_d_interface-members.html create mode 100644 struct_h_i_d_composite_1_1_h_i_d_interface.html create mode 100644 struct_h_i_d_composite_1_1_report_parser-members.html create mode 100644 struct_h_i_d_composite_1_1_report_parser.html create mode 100644 struct_h_i_d_composite_1_1_report_parser__coll__graph.map create mode 100644 struct_h_i_d_composite_1_1_report_parser__coll__graph.md5 create mode 100644 struct_h_i_d_composite_1_1_report_parser__coll__graph.png diff --git a/_p_s4_parser_8cpp_source.html b/_p_s4_parser_8cpp_source.html index e0a07fc0..d4b23eea 100644 --- a/_p_s4_parser_8cpp_source.html +++ b/_p_s4_parser_8cpp_source.html @@ -63,7 +63,7 @@ $(function() {
PS4Parser.cpp
-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 #include "PS4Parser.h"
19 
20 enum DPADEnum {
21  DPAD_UP = 0x0,
23  DPAD_RIGHT = 0x2,
25  DPAD_DOWN = 0x4,
27  DPAD_LEFT = 0x6,
28  DPAD_LEFT_UP = 0x7,
29  DPAD_OFF = 0x8,
30 };
31 
32 // To enable serial debugging see "settings.h"
33 //#define PRINTREPORT // Uncomment to print the report send by the PS4 Controller
34 
35 bool PS4Parser::checkDpad(ButtonEnum b) {
36  switch (b) {
37  case UP:
38  return ps4Data.btn.dpad == DPAD_LEFT_UP || ps4Data.btn.dpad == DPAD_UP || ps4Data.btn.dpad == DPAD_UP_RIGHT;
39  case RIGHT:
40  return ps4Data.btn.dpad == DPAD_UP_RIGHT || ps4Data.btn.dpad == DPAD_RIGHT || ps4Data.btn.dpad == DPAD_RIGHT_DOWN;
41  case DOWN:
42  return ps4Data.btn.dpad == DPAD_RIGHT_DOWN || ps4Data.btn.dpad == DPAD_DOWN || ps4Data.btn.dpad == DPAD_DOWN_LEFT;
43  case LEFT:
44  return ps4Data.btn.dpad == DPAD_DOWN_LEFT || ps4Data.btn.dpad == DPAD_LEFT || ps4Data.btn.dpad == DPAD_LEFT_UP;
45  default:
46  return false;
47  }
48 }
49 
51  if (b <= LEFT) // Dpad
52  return checkDpad(b);
53  else
54  return ps4Data.btn.val & (1UL << pgm_read_byte(&PS4_BUTTONS[(uint8_t)b]));
55 }
56 
58  uint32_t mask = 1UL << pgm_read_byte(&PS4_BUTTONS[(uint8_t)b]);
59  bool click = buttonClickState.val & mask;
60  buttonClickState.val &= ~mask; // Clear "click" event
61  return click;
62 }
63 
65  if (b == L2) // These are the only analog buttons on the controller
66  return ps4Data.trigger[0];
67  else if (b == R2)
68  return ps4Data.trigger[1];
69  return 0;
70 }
71 
73  return ps4Data.hatValue[(uint8_t)a];
74 }
75 
76 void PS4Parser::Parse(uint8_t len, uint8_t *buf) {
77  if (len > 1 && buf) {
78 #ifdef PRINTREPORT
79  Notify(PSTR("\r\n"), 0x80);
80  for (uint8_t i = 0; i < len; i++) {
81  D_PrintHex<uint8_t > (buf[i], 0x80);
82  Notify(PSTR(" "), 0x80);
83  }
84 #endif
85 
86  if (buf[0] == 0x01) // Check report ID
87  memcpy(&ps4Data, buf + 1, min((uint8_t)(len - 1), MFK_CASTUINT8T sizeof(ps4Data)));
88  else if (buf[0] == 0x11) { // This report is send via Bluetooth, it has an offset of 2 compared to the USB data
89  if (len < 4) {
90 #ifdef DEBUG_USB_HOST
91  Notify(PSTR("\r\nReport is too short: "), 0x80);
92  D_PrintHex<uint8_t > (len, 0x80);
93 #endif
94  return;
95  }
96  memcpy(&ps4Data, buf + 3, min((uint8_t)(len - 3), MFK_CASTUINT8T sizeof(ps4Data)));
97  } else {
98 #ifdef DEBUG_USB_HOST
99  Notify(PSTR("\r\nUnknown report id: "), 0x80);
100  D_PrintHex<uint8_t > (buf[0], 0x80);
101 #endif
102  return;
103  }
104 
105  if (ps4Data.btn.val != oldButtonState.val) { // Check if anything has changed
106  buttonClickState.val = ps4Data.btn.val & ~oldButtonState.val; // Update click state variable
107  oldButtonState.val = ps4Data.btn.val;
108 
109  // The DPAD buttons does not set the different bits, but set a value corresponding to the buttons pressed, we will simply set the bits ourself
110  uint8_t newDpad = 0;
111  if (checkDpad(UP))
112  newDpad |= 1 << UP;
113  if (checkDpad(RIGHT))
114  newDpad |= 1 << RIGHT;
115  if (checkDpad(DOWN))
116  newDpad |= 1 << DOWN;
117  if (checkDpad(LEFT))
118  newDpad |= 1 << LEFT;
119  if (newDpad != oldDpad) {
120  buttonClickState.dpad = newDpad & ~oldDpad; // Override values
121  oldDpad = newDpad;
122  }
123  }
124  }
125 
126  if (ps4Output.reportChanged)
127  sendOutputReport(&ps4Output); // Send output report
128 }
129 
131  uint8_t i;
132  for (i = 0; i < sizeof(ps4Data.hatValue); i++)
133  ps4Data.hatValue[i] = 127; // Center value
134  ps4Data.btn.val = 0;
135  oldButtonState.val = 0;
136  for (i = 0; i < sizeof(ps4Data.trigger); i++)
137  ps4Data.trigger[i] = 0;
138  for (i = 0; i < sizeof(ps4Data.xy)/sizeof(ps4Data.xy[0]); i++) {
139  for (uint8_t j = 0; j < sizeof(ps4Data.xy[0].finger)/sizeof(ps4Data.xy[0].finger[0]); j++)
140  ps4Data.xy[i].finger[j].touching = 1; // The bit is cleared if the finger is touching the touchpad
141  }
142 
143  ps4Data.btn.dpad = DPAD_OFF;
144  oldButtonState.dpad = DPAD_OFF;
145  buttonClickState.dpad = 0;
146  oldDpad = 0;
147 
148  ps4Output.bigRumble = ps4Output.smallRumble = 0;
149  ps4Output.r = ps4Output.g = ps4Output.b = 0;
150  ps4Output.flashOn = ps4Output.flashOff = 0;
151  ps4Output.reportChanged = false;
152 };
153 
+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 #include "PS4Parser.h"
19 
20 enum DPADEnum {
21  DPAD_UP = 0x0,
23  DPAD_RIGHT = 0x2,
25  DPAD_DOWN = 0x4,
27  DPAD_LEFT = 0x6,
28  DPAD_LEFT_UP = 0x7,
29  DPAD_OFF = 0x8,
30 };
31 
32 // To enable serial debugging see "settings.h"
33 //#define PRINTREPORT // Uncomment to print the report send by the PS4 Controller
34 
35 bool PS4Parser::checkDpad(ButtonEnum b) {
36  switch (b) {
37  case UP:
38  return ps4Data.btn.dpad == DPAD_LEFT_UP || ps4Data.btn.dpad == DPAD_UP || ps4Data.btn.dpad == DPAD_UP_RIGHT;
39  case RIGHT:
40  return ps4Data.btn.dpad == DPAD_UP_RIGHT || ps4Data.btn.dpad == DPAD_RIGHT || ps4Data.btn.dpad == DPAD_RIGHT_DOWN;
41  case DOWN:
42  return ps4Data.btn.dpad == DPAD_RIGHT_DOWN || ps4Data.btn.dpad == DPAD_DOWN || ps4Data.btn.dpad == DPAD_DOWN_LEFT;
43  case LEFT:
44  return ps4Data.btn.dpad == DPAD_DOWN_LEFT || ps4Data.btn.dpad == DPAD_LEFT || ps4Data.btn.dpad == DPAD_LEFT_UP;
45  default:
46  return false;
47  }
48 }
49 
51  if (b <= LEFT) // Dpad
52  return checkDpad(b);
53  else
54  return ps4Data.btn.val & (1UL << pgm_read_byte(&PS4_BUTTONS[(uint8_t)b]));
55 }
56 
58  uint32_t mask = 1UL << pgm_read_byte(&PS4_BUTTONS[(uint8_t)b]);
59  bool click = buttonClickState.val & mask;
60  buttonClickState.val &= ~mask; // Clear "click" event
61  return click;
62 }
63 
65  if (b == L2) // These are the only analog buttons on the controller
66  return ps4Data.trigger[0];
67  else if (b == R2)
68  return ps4Data.trigger[1];
69  return 0;
70 }
71 
73  return ps4Data.hatValue[(uint8_t)a];
74 }
75 
76 void PS4Parser::Parse(uint8_t len, uint8_t *buf) {
77  if (len > 1 && buf) {
78 #ifdef PRINTREPORT
79  Notify(PSTR("\r\n"), 0x80);
80  for (uint8_t i = 0; i < len; i++) {
81  D_PrintHex<uint8_t > (buf[i], 0x80);
82  Notify(PSTR(" "), 0x80);
83  }
84 #endif
85 
86  if (buf[0] == 0x01) // Check report ID
87  memcpy(&ps4Data, buf + 1, min((uint8_t)(len - 1), MFK_CASTUINT8T sizeof(ps4Data)));
88  else if (buf[0] == 0x11) { // This report is send via Bluetooth, it has an offset of 2 compared to the USB data
89  if (len < 4) {
90 #ifdef DEBUG_USB_HOST
91  Notify(PSTR("\r\nReport is too short: "), 0x80);
92  D_PrintHex<uint8_t > (len, 0x80);
93 #endif
94  return;
95  }
96  memcpy(&ps4Data, buf + 3, min((uint8_t)(len - 3), MFK_CASTUINT8T sizeof(ps4Data)));
97  } else {
98 #ifdef DEBUG_USB_HOST
99  Notify(PSTR("\r\nUnknown report id: "), 0x80);
100  D_PrintHex<uint8_t > (buf[0], 0x80);
101 #endif
102  return;
103  }
104 
105  if (ps4Data.btn.val != oldButtonState.val) { // Check if anything has changed
106  buttonClickState.val = ps4Data.btn.val & ~oldButtonState.val; // Update click state variable
107  oldButtonState.val = ps4Data.btn.val;
108 
109  // The DPAD buttons does not set the different bits, but set a value corresponding to the buttons pressed, we will simply set the bits ourself
110  uint8_t newDpad = 0;
111  if (checkDpad(UP))
112  newDpad |= 1 << UP;
113  if (checkDpad(RIGHT))
114  newDpad |= 1 << RIGHT;
115  if (checkDpad(DOWN))
116  newDpad |= 1 << DOWN;
117  if (checkDpad(LEFT))
118  newDpad |= 1 << LEFT;
119  if (newDpad != oldDpad) {
120  buttonClickState.dpad = newDpad & ~oldDpad; // Override values
121  oldDpad = newDpad;
122  }
123  }
124  }
125 
126  if (ps4Output.reportChanged)
127  sendOutputReport(&ps4Output); // Send output report
128 }
129 
131  uint8_t i;
132  for (i = 0; i < sizeof(ps4Data.hatValue); i++)
133  ps4Data.hatValue[i] = 127; // Center value
134  ps4Data.btn.val = 0;
135  oldButtonState.val = 0;
136  for (i = 0; i < sizeof(ps4Data.trigger); i++)
137  ps4Data.trigger[i] = 0;
138  for (i = 0; i < sizeof(ps4Data.xy)/sizeof(ps4Data.xy[0]); i++) {
139  for (uint8_t j = 0; j < sizeof(ps4Data.xy[0].finger)/sizeof(ps4Data.xy[0].finger[0]); j++)
140  ps4Data.xy[i].finger[j].touching = 1; // The bit is cleared if the finger is touching the touchpad
141  }
142 
143  ps4Data.btn.dpad = DPAD_OFF;
144  oldButtonState.dpad = DPAD_OFF;
145  buttonClickState.dpad = 0;
146  oldDpad = 0;
147 
148  ps4Output.bigRumble = ps4Output.smallRumble = 0;
149  ps4Output.r = ps4Output.g = ps4Output.b = 0;
150  ps4Output.flashOn = ps4Output.flashOff = 0;
151  ps4Output.reportChanged = false;
152 };
153 
void Reset()
Definition: PS4Parser.cpp:130
uint32_t val
Definition: PS4Parser.h:71
@@ -75,6 +75,7 @@ $(function() {
uint8_t touching
Definition: PS4Parser.h:78
uint8_t flashOn
Definition: PS4Parser.h:119
+
struct touchpadXY::@28 finger[2]
#define pgm_read_byte(addr)
@@ -97,7 +98,6 @@ $(function() {
#define PSTR(str)
#define MFK_CASTUINT8T
Definition: settings.h:194
uint8_t dpad
Definition: PS4Parser.h:52
-
struct touchpadXY::@30 finger[2]
touchpadXY xy[3]
Definition: PS4Parser.h:108
uint8_t getAnalogButton(ButtonEnum b)
Definition: PS4Parser.cpp:64
PS4Buttons btn
Definition: PS4Parser.h:95
diff --git a/_p_s4_u_s_b_8h.html b/_p_s4_u_s_b_8h.html index f43d8d34..f5182e32 100644 --- a/_p_s4_u_s_b_8h.html +++ b/_p_s4_u_s_b_8h.html @@ -73,12 +73,13 @@ Include dependency graph for PS4USB.h:
- - - - - - + + + + + + +
diff --git a/_p_s4_u_s_b_8h__incl.map b/_p_s4_u_s_b_8h__incl.map index c0f16df6..6d487681 100644 --- a/_p_s4_u_s_b_8h__incl.map +++ b/_p_s4_u_s_b_8h__incl.map @@ -1,8 +1,9 @@ - - - - - - + + + + + + + diff --git a/_p_s4_u_s_b_8h__incl.md5 b/_p_s4_u_s_b_8h__incl.md5 index 76233869..0dee2be9 100644 --- a/_p_s4_u_s_b_8h__incl.md5 +++ b/_p_s4_u_s_b_8h__incl.md5 @@ -1 +1 @@ -d2a18154f1cb36761bff05421187bd1f \ No newline at end of file +666bd76bcef94225b45bfa8ed7ffd0a5 \ No newline at end of file diff --git a/_p_s4_u_s_b_8h__incl.png b/_p_s4_u_s_b_8h__incl.png index 6686645cc1c5c839034097f9bc6d3833cbe5e5d4..c0827f618385995efd48ed127cc2af31104f30dd 100644 GIT binary patch literal 20022 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 UG9IYbasU7T07*qoM6N<$f|roqE&u=k literal 16604 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 h4KSGg&kOsHVqW96tp>T+&0r8Pa#G5YPS4USB.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 _ps4usb_h_
19 #define _ps4usb_h_
20 
21 #include "hiduniversal.h"
22 #include "PS4Parser.h"
23 
24 #define PS4_VID 0x054C // Sony Corporation
25 #define PS4_PID 0x05C4 // PS4 Controller
26 #define PS4_PID_SLIM 0x09CC // PS4 Slim Controller
27 
32 class PS4USB : public HIDUniversal, public PS4Parser {
33 public:
38  PS4USB(USB *p) :
39  HIDUniversal(p) {
41  };
42 
47  bool connected() {
48  return HIDUniversal::isReady() && HIDUniversal::VID == PS4_VID && (HIDUniversal::PID == PS4_PID || HIDUniversal::PID == PS4_PID_SLIM);
49  };
50 
55  void attachOnInit(void (*funcOnInit)(void)) {
56  pFuncOnInit = funcOnInit;
57  };
58 
59 protected:
68  virtual void ParseHIDData(USBHID *hid, bool is_rpt_id, uint8_t len, uint8_t *buf) {
70  PS4Parser::Parse(len, buf);
71  };
72 
78  virtual uint8_t OnInitSuccessful() {
81  if (pFuncOnInit)
82  pFuncOnInit(); // Call the user function
83  else
84  setLed(Blue);
85  };
86  return 0;
87  };
91  virtual void sendOutputReport(PS4Output *output) { // Source: https://github.com/chrippa/ds4drv
92  uint8_t buf[32];
93  memset(buf, 0, sizeof(buf));
94 
95  buf[0] = 0x05; // Report ID
96  buf[1]= 0xFF;
97 
98  buf[4] = output->smallRumble; // Small Rumble
99  buf[5] = output->bigRumble; // Big rumble
100 
101  buf[6] = output->r; // Red
102  buf[7] = output->g; // Green
103  buf[8] = output->b; // Blue
104 
105  buf[9] = output->flashOn; // Time to flash bright (255 = 2.5 seconds)
106  buf[10] = output->flashOff; // Time to flash dark (255 = 2.5 seconds)
107 
108  output->reportChanged = false;
109 
110  // The PS4 console actually set the four last bytes to a CRC32 checksum, but it seems like it is actually not needed
111 
112  pUsb->outTransfer(bAddress, epInfo[epInterruptOutIndex].epAddr, sizeof(buf), buf);
113  };
123  virtual bool VIDPIDOK(uint16_t vid, uint16_t pid) {
124  return (vid == PS4_VID && (pid == PS4_PID || HIDUniversal::PID == PS4_PID_SLIM));
125  };
128 private:
129  void (*pFuncOnInit)(void); // Pointer to function called in onInit()
130 };
131 #endif
uint16_t PID
Definition: hiduniversal.h:69
-
virtual bool VIDPIDOK(uint16_t vid, uint16_t pid)
Definition: PS4USB.h:123
+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 _ps4usb_h_
19 #define _ps4usb_h_
20 
21 #include "hiduniversal.h"
22 #include "PS4Parser.h"
23 
24 #define PS4_VID 0x054C // Sony Corporation
25 #define PS4_PID 0x05C4 // PS4 Controller
26 #define PS4_PID_SLIM 0x09CC // PS4 Slim Controller
27 
32 class PS4USB : public HIDUniversal, public PS4Parser {
33 public:
38  PS4USB(USB *p) :
39  HIDUniversal(p) {
41  };
42 
47  bool connected() {
48  return HIDUniversal::isReady() && HIDUniversal::VID == PS4_VID && (HIDUniversal::PID == PS4_PID || HIDUniversal::PID == PS4_PID_SLIM);
49  };
50 
55  void attachOnInit(void (*funcOnInit)(void)) {
56  pFuncOnInit = funcOnInit;
57  };
58 
59 protected:
68  virtual void ParseHIDData(USBHID *hid, bool is_rpt_id, uint8_t len, uint8_t *buf) {
70  PS4Parser::Parse(len, buf);
71  };
72 
78  virtual uint8_t OnInitSuccessful() {
81  if (pFuncOnInit)
82  pFuncOnInit(); // Call the user function
83  else
84  setLed(Blue);
85  };
86  return 0;
87  };
91  virtual void sendOutputReport(PS4Output *output) { // Source: https://github.com/chrippa/ds4drv
92  uint8_t buf[32];
93  memset(buf, 0, sizeof(buf));
94 
95  buf[0] = 0x05; // Report ID
96  buf[1]= 0xFF;
97 
98  buf[4] = output->smallRumble; // Small Rumble
99  buf[5] = output->bigRumble; // Big rumble
100 
101  buf[6] = output->r; // Red
102  buf[7] = output->g; // Green
103  buf[8] = output->b; // Blue
104 
105  buf[9] = output->flashOn; // Time to flash bright (255 = 2.5 seconds)
106  buf[10] = output->flashOff; // Time to flash dark (255 = 2.5 seconds)
107 
108  output->reportChanged = false;
109 
110  // The PS4 console actually set the four last bytes to a CRC32 checksum, but it seems like it is actually not needed
111 
112  pUsb->outTransfer(bAddress, epInfo[epInterruptOutIndex].epAddr, sizeof(buf), buf);
113  };
123  virtual bool VIDPIDOK(uint16_t vid, uint16_t pid) {
124  return (vid == PS4_VID && (pid == PS4_PID || HIDUniversal::PID == PS4_PID_SLIM));
125  };
128 private:
129  void (*pFuncOnInit)(void); // Pointer to function called in onInit()
130 };
131 #endif
virtual bool VIDPIDOK(uint16_t vid, uint16_t pid)
Definition: PS4USB.h:123
Definition: usbhid.h:143
void Reset()
Definition: PS4Parser.cpp:130
USB * pUsb
Definition: usbhid.h:145
void attachOnInit(void(*funcOnInit)(void))
Definition: PS4USB.h:55
-
virtual bool isReady()
Definition: hiduniversal.h:97
virtual uint8_t OnInitSuccessful()
Definition: PS4USB.h:78
uint8_t b
Definition: PS4Parser.h:118
void setLed(uint8_t r, uint8_t g, uint8_t b)
Definition: PS4Parser.h:320
+
virtual bool isReady()
Definition: hidcomposite.h:99
Definition: PS4USB.h:32
uint8_t flashOn
Definition: PS4Parser.h:119
-
uint16_t VID
Definition: hiduniversal.h:69
+
EpInfo epInfo[totalEndpoints]
Definition: hidcomposite.h:63
uint8_t g
Definition: PS4Parser.h:118
bool reportChanged
Definition: PS4Parser.h:120
void Parse(uint8_t len, uint8_t *buf)
Definition: PS4Parser.cpp:76
@@ -85,12 +84,14 @@ $(function() {
uint8_t bAddress
Definition: usbhid.h:146
uint8_t r
Definition: PS4Parser.h:118
uint8_t bigRumble
Definition: PS4Parser.h:117
+
uint16_t PID
Definition: hidcomposite.h:71
bool connected()
Definition: PS4USB.h:47
uint8_t flashOff
Definition: PS4Parser.h:119
uint8_t smallRumble
Definition: PS4Parser.h:117
+
uint16_t VID
Definition: hidcomposite.h:71
#define PS4_VID
Definition: PS4USB.h:24
#define PS4_PID_SLIM
Definition: PS4USB.h:26
@@ -98,9 +99,8 @@ $(function() {
virtual void sendOutputReport(PS4Output *output)
Definition: PS4USB.h:91
PS4USB(USB *p)
Definition: PS4USB.h:38
Definition: UsbCore.h:210
-
EpInfo epInfo[totalEndpoints]
Definition: hiduniversal.h:64
virtual void ParseHIDData(USBHID *hid, bool is_rpt_id, uint8_t len, uint8_t *buf)
Definition: PS4USB.h:68
- +
- - - - - - + + + + + + +
diff --git a/_p_s_buzz_8cpp__incl.map b/_p_s_buzz_8cpp__incl.map index 6dfe1b5c..6950499c 100644 --- a/_p_s_buzz_8cpp__incl.map +++ b/_p_s_buzz_8cpp__incl.map @@ -1,8 +1,9 @@ - - - - - - + + + + + + + diff --git a/_p_s_buzz_8cpp__incl.md5 b/_p_s_buzz_8cpp__incl.md5 index 254fa80c..fda19d77 100644 --- a/_p_s_buzz_8cpp__incl.md5 +++ b/_p_s_buzz_8cpp__incl.md5 @@ -1 +1 @@ -5a74379adade31d51d1b0ef98c2b52fe \ No newline at end of file +d36c8d74a36d7e8cc48ee208ff183cac \ No newline at end of file diff --git a/_p_s_buzz_8cpp__incl.png b/_p_s_buzz_8cpp__incl.png index ff801c84c89b0eb0d2e77f102a93daa71ca1c1cc..a96ecccf4b2635574bfd2946a410d343d77abd35 100644 GIT binary patch literal 15265 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%0DmknPE)8be#|3u7y?fz<=%OA0iCzn6Cr$;K%^{ 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 literal 14718 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 YfjLyKmD2koB#j- diff --git a/_p_s_buzz_8cpp_source.html b/_p_s_buzz_8cpp_source.html index 1b7935d9..e15a47b2 100644 --- a/_p_s_buzz_8cpp_source.html +++ b/_p_s_buzz_8cpp_source.html @@ -63,14 +63,13 @@ $(function() {
PSBuzz.cpp
-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 #include "PSBuzz.h"
19 
20 // To enable serial debugging see "settings.h"
21 //#define PRINTREPORT // Uncomment to print the report send by the PS Buzz Controllers
22 
23 void PSBuzz::ParseHIDData(USBHID *hid __attribute__((unused)), bool is_rpt_id __attribute__((unused)), uint8_t len, uint8_t *buf) {
24  if (HIDUniversal::VID == PSBUZZ_VID && HIDUniversal::PID == PSBUZZ_PID && len > 2 && buf) {
25 #ifdef PRINTREPORT
26  Notify(PSTR("\r\n"), 0x80);
27  for (uint8_t i = 0; i < len; i++) {
28  D_PrintHex<uint8_t > (buf[i], 0x80);
29  Notify(PSTR(" "), 0x80);
30  }
31 #endif
32  memcpy(&psbuzzButtons, buf + 2, min((uint8_t)(len - 2), MFK_CASTUINT8T sizeof(psbuzzButtons)));
33 
34  if (psbuzzButtons.val != oldButtonState.val) { // Check if anything has changed
35  buttonClickState.val = psbuzzButtons.val & ~oldButtonState.val; // Update click state variable
36  oldButtonState.val = psbuzzButtons.val;
37  }
38  }
39 };
40 
43  Reset();
44  if (pFuncOnInit)
45  pFuncOnInit(); // Call the user function
46  else
47  setLedOnAll(); // Turn the LED on, on all four controllers
48  };
49  return 0;
50 };
51 
52 bool PSBuzz::getButtonPress(ButtonEnum b, uint8_t controller) {
53  return psbuzzButtons.val & (1UL << (b + 5 * controller)); // Each controller uses 5 bits, so the value is shifted 5 for each controller
54 };
55 
56 bool PSBuzz::getButtonClick(ButtonEnum b, uint8_t controller) {
57  uint32_t mask = (1UL << (b + 5 * controller)); // Each controller uses 5 bits, so the value is shifted 5 for each controller
58  bool click = buttonClickState.val & mask;
59  buttonClickState.val &= ~mask; // Clear "click" event
60  return click;
61 };
62 
63 // Source: http://www.developerfusion.com/article/84338/making-usb-c-friendly/ and https://github.com/torvalds/linux/blob/master/drivers/hid/hid-sony.c
64 void PSBuzz::setLedRaw(bool value, uint8_t controller) {
65  ledState[controller] = value; // Save value for next time it is called
66 
67  uint8_t buf[7];
68  buf[0] = 0x00;
69  buf[1] = ledState[0] ? 0xFF : 0x00;
70  buf[2] = ledState[1] ? 0xFF : 0x00;
71  buf[3] = ledState[2] ? 0xFF : 0x00;
72  buf[4] = ledState[3] ? 0xFF : 0x00;
73  buf[5] = 0x00;
74  buf[6] = 0x00;
75 
76  PSBuzz_Command(buf, sizeof(buf));
77 };
78 
79 void PSBuzz::PSBuzz_Command(uint8_t *data, uint16_t nbytes) {
80  // bmRequest = Host to device (0x00) | Class (0x20) | Interface (0x01) = 0x21, bRequest = Set Report (0x09), Report ID (0x00), Report Type (Output 0x02), interface (0x00), datalength, datalength, data)
81  pUsb->ctrlReq(bAddress, epInfo[0].epAddr, bmREQ_HID_OUT, HID_REQUEST_SET_REPORT, 0x00, 0x02, 0x00, nbytes, nbytes, data, NULL);
82 };
uint16_t PID
Definition: hiduniversal.h:69
-
Definition: usbhid.h:143
+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 #include "PSBuzz.h"
19 
20 // To enable serial debugging see "settings.h"
21 //#define PRINTREPORT // Uncomment to print the report send by the PS Buzz Controllers
22 
23 void PSBuzz::ParseHIDData(USBHID *hid __attribute__((unused)), bool is_rpt_id __attribute__((unused)), uint8_t len, uint8_t *buf) {
24  if (HIDUniversal::VID == PSBUZZ_VID && HIDUniversal::PID == PSBUZZ_PID && len > 2 && buf) {
25 #ifdef PRINTREPORT
26  Notify(PSTR("\r\n"), 0x80);
27  for (uint8_t i = 0; i < len; i++) {
28  D_PrintHex<uint8_t > (buf[i], 0x80);
29  Notify(PSTR(" "), 0x80);
30  }
31 #endif
32  memcpy(&psbuzzButtons, buf + 2, min((uint8_t)(len - 2), MFK_CASTUINT8T sizeof(psbuzzButtons)));
33 
34  if (psbuzzButtons.val != oldButtonState.val) { // Check if anything has changed
35  buttonClickState.val = psbuzzButtons.val & ~oldButtonState.val; // Update click state variable
36  oldButtonState.val = psbuzzButtons.val;
37  }
38  }
39 };
40 
43  Reset();
44  if (pFuncOnInit)
45  pFuncOnInit(); // Call the user function
46  else
47  setLedOnAll(); // Turn the LED on, on all four controllers
48  };
49  return 0;
50 };
51 
52 bool PSBuzz::getButtonPress(ButtonEnum b, uint8_t controller) {
53  return psbuzzButtons.val & (1UL << (b + 5 * controller)); // Each controller uses 5 bits, so the value is shifted 5 for each controller
54 };
55 
56 bool PSBuzz::getButtonClick(ButtonEnum b, uint8_t controller) {
57  uint32_t mask = (1UL << (b + 5 * controller)); // Each controller uses 5 bits, so the value is shifted 5 for each controller
58  bool click = buttonClickState.val & mask;
59  buttonClickState.val &= ~mask; // Clear "click" event
60  return click;
61 };
62 
63 // Source: http://www.developerfusion.com/article/84338/making-usb-c-friendly/ and https://github.com/torvalds/linux/blob/master/drivers/hid/hid-sony.c
64 void PSBuzz::setLedRaw(bool value, uint8_t controller) {
65  ledState[controller] = value; // Save value for next time it is called
66 
67  uint8_t buf[7];
68  buf[0] = 0x00;
69  buf[1] = ledState[0] ? 0xFF : 0x00;
70  buf[2] = ledState[1] ? 0xFF : 0x00;
71  buf[3] = ledState[2] ? 0xFF : 0x00;
72  buf[4] = ledState[3] ? 0xFF : 0x00;
73  buf[5] = 0x00;
74  buf[6] = 0x00;
75 
76  PSBuzz_Command(buf, sizeof(buf));
77 };
78 
79 void PSBuzz::PSBuzz_Command(uint8_t *data, uint16_t nbytes) {
80  // bmRequest = Host to device (0x00) | Class (0x20) | Interface (0x01) = 0x21, bRequest = Set Report (0x09), Report ID (0x00), Report Type (Output 0x02), interface (0x00), datalength, datalength, data)
81  pUsb->ctrlReq(bAddress, epInfo[0].epAddr, bmREQ_HID_OUT, HID_REQUEST_SET_REPORT, 0x00, 0x02, 0x00, nbytes, nbytes, data, NULL);
82 };
Definition: usbhid.h:143
USB * pUsb
Definition: usbhid.h:145
void ParseHIDData(USBHID *hid, bool is_rpt_id, uint8_t len, uint8_t *buf)
Definition: PSBuzz.cpp:23
void Reset()
Definition: PSBuzz.h:157
bool getButtonClick(ButtonEnum b, uint8_t controller=0)
Definition: PSBuzz.cpp:56
#define bmREQ_HID_OUT
Definition: usbhid.h:63
-
uint16_t VID
Definition: hiduniversal.h:69
+
EpInfo epInfo[totalEndpoints]
Definition: hidcomposite.h:63
uint8_t ctrlReq(uint8_t addr, uint8_t ep, uint8_t bmReqType, uint8_t bRequest, uint8_t wValLo, uint8_t wValHi, uint16_t wInd, uint16_t total, uint16_t nbytes, uint8_t *dataptr, USBReadParser *p)
Definition: Usb.cpp:126
#define Notify(...)
Definition: message.h:51
@@ -80,13 +79,14 @@ $(function() {
#define PSBUZZ_PID
Definition: PSBuzz.h:25
uint8_t bAddress
Definition: usbhid.h:146
void setLedRaw(bool value, uint8_t controller=0)
Definition: PSBuzz.cpp:64
+
uint16_t PID
Definition: hidcomposite.h:71
#define PSTR(str)
#define MFK_CASTUINT8T
Definition: settings.h:194
+
uint16_t VID
Definition: hidcomposite.h:71
uint8_t OnInitSuccessful()
Definition: PSBuzz.cpp:41
void setLedOnAll()
Definition: PSBuzz.h:114
#define HID_REQUEST_SET_REPORT
Definition: usbhid.h:72
uint32_t val
Definition: PSBuzz.h:36
-
EpInfo epInfo[totalEndpoints]
Definition: hiduniversal.h:64
- - - - - + + + + + +
diff --git a/_p_s_buzz_8h__dep__incl.md5 b/_p_s_buzz_8h__dep__incl.md5 index 0d832b03..32256b63 100644 --- a/_p_s_buzz_8h__dep__incl.md5 +++ b/_p_s_buzz_8h__dep__incl.md5 @@ -1 +1 @@ -89fdce8c433f9f3ff883c438cb91a471 \ No newline at end of file +ee2c9f18aa05f25ebf0836629c2a7574 \ No newline at end of file diff --git a/_p_s_buzz_8h__incl.map b/_p_s_buzz_8h__incl.map index c566a41e..b5fbd9ce 100644 --- a/_p_s_buzz_8h__incl.map +++ b/_p_s_buzz_8h__incl.map @@ -1,7 +1,8 @@ - - - - - + + + + + + diff --git a/_p_s_buzz_8h__incl.md5 b/_p_s_buzz_8h__incl.md5 index 063dac97..c92a439b 100644 --- a/_p_s_buzz_8h__incl.md5 +++ b/_p_s_buzz_8h__incl.md5 @@ -1 +1 @@ -e9865eba6bb7dc48f5f354e4dc3ccb30 \ No newline at end of file +d8318015cdd7f05600be59fe22c9514b \ No newline at end of file diff --git a/_p_s_buzz_8h__incl.png b/_p_s_buzz_8h__incl.png index 0f5bf6c305e5ee760af2f34a0aa913e2522c7200..e36c04a0d69de0d8feab7423fcbc5bdd4f3b1486 100644 GIT binary patch literal 14967 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.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  void (*pFuncOnInit)(void); // Pointer to function called in onInit()
179 
180  void PSBuzz_Command(uint8_t *data, uint16_t nbytes);
181 
182  PSBUZZButtons psbuzzButtons, oldButtonState, buttonClickState;
183  bool ledState[4];
184 };
185 #endif
uint16_t PID
Definition: hiduniversal.h:69
-
Definition: usbhid.h:143
+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  void (*pFuncOnInit)(void); // Pointer to function called in onInit()
179 
180  void PSBuzz_Command(uint8_t *data, uint16_t nbytes);
181 
182  PSBUZZButtons psbuzzButtons, oldButtonState, buttonClickState;
183  bool ledState[4];
184 };
185 #endif
Definition: usbhid.h:143
uint8_t red
Definition: PSBuzz.h:30
+
struct PSBUZZButtons::@29 btn[4]
void setLedToggle(uint8_t controller=0)
Definition: PSBuzz.h:132
void attachOnInit(void(*funcOnInit)(void))
Definition: PSBuzz.h:66
-
virtual bool isReady()
Definition: hiduniversal.h:97
void Reset()
Definition: PSBuzz.h:157
+
virtual bool isReady()
Definition: hidcomposite.h:99
bool connected()
Definition: PSBuzz.h:58
uint8_t blue
Definition: PSBuzz.h:34
-
uint16_t VID
Definition: hiduniversal.h:69
uint8_t green
Definition: PSBuzz.h:32
@@ -81,10 +80,11 @@ $(function() {
ButtonEnum
#define PSBUZZ_PID
Definition: PSBuzz.h:25
uint8_t yellow
Definition: PSBuzz.h:31
+
uint16_t PID
Definition: hidcomposite.h:71
virtual bool VIDPIDOK(uint16_t vid, uint16_t pid)
Definition: PSBuzz.h:172
void setLedOff(uint8_t controller=0)
Definition: PSBuzz.h:108
-
struct PSBUZZButtons::@31 btn[4]
+
uint16_t VID
Definition: hidcomposite.h:71
PSBuzz(USB *p)
Definition: PSBuzz.h:49
void setLedOnAll()
Definition: PSBuzz.h:114
Definition: UsbCore.h:210
@@ -92,7 +92,7 @@ $(function() {
uint32_t val
Definition: PSBuzz.h:36
uint8_t orange
Definition: PSBuzz.h:33
void setLedOffAll()
Definition: PSBuzz.h:98
- +
-Go to the documentation of this file.
1 /* Copyright (C) 2011 Circuits At Home, LTD. 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 Circuits At Home, LTD
14 Web : http://www.circuitsathome.com
15 e-mail : support@circuitsathome.com
16  */
17 /* USB functions */
18 
19 #include "Usb.h"
20 
21 static uint8_t usb_error = 0;
22 static uint8_t usb_task_state;
23 
24 /* constructor */
25 USB::USB() : bmHubPre(0) {
26  usb_task_state = USB_DETACHED_SUBSTATE_INITIALIZE; //set up state machine
27  init();
28 }
29 
30 /* Initialize data structures */
31 void USB::init() {
32  //devConfigIndex = 0;
33  bmHubPre = 0;
34 }
35 
36 uint8_t USB::getUsbTaskState(void) {
37  return ( usb_task_state);
38 }
39 
40 void USB::setUsbTaskState(uint8_t state) {
41  usb_task_state = state;
42 }
43 
44 EpInfo* USB::getEpInfoEntry(uint8_t addr, uint8_t ep) {
45  UsbDevice *p = addrPool.GetUsbDevicePtr(addr);
46 
47  if(!p || !p->epinfo)
48  return NULL;
49 
50  EpInfo *pep = p->epinfo;
51 
52  for(uint8_t i = 0; i < p->epcount; i++) {
53  if((pep)->epAddr == ep)
54  return pep;
55 
56  pep++;
57  }
58  return NULL;
59 }
60 
61 /* set device table entry */
62 
63 /* each device is different and has different number of endpoints. This function plugs endpoint record structure, defined in application, to devtable */
64 uint8_t USB::setEpInfoEntry(uint8_t addr, uint8_t epcount, EpInfo* eprecord_ptr) {
65  if(!eprecord_ptr)
67 
68  UsbDevice *p = addrPool.GetUsbDevicePtr(addr);
69 
70  if(!p)
72 
73  p->address.devAddress = addr;
74  p->epinfo = eprecord_ptr;
75  p->epcount = epcount;
76 
77  return 0;
78 }
79 
80 uint8_t USB::SetAddress(uint8_t addr, uint8_t ep, EpInfo **ppep, uint16_t *nak_limit) {
81  UsbDevice *p = addrPool.GetUsbDevicePtr(addr);
82 
83  if(!p)
85 
86  if(!p->epinfo)
88 
89  *ppep = getEpInfoEntry(addr, ep);
90 
91  if(!*ppep)
93 
94  *nak_limit = (0x0001UL << (((*ppep)->bmNakPower > USB_NAK_MAX_POWER) ? USB_NAK_MAX_POWER : (*ppep)->bmNakPower));
95  (*nak_limit)--;
96  /*
97  USBTRACE2("\r\nAddress: ", addr);
98  USBTRACE2(" EP: ", ep);
99  USBTRACE2(" NAK Power: ",(*ppep)->bmNakPower);
100  USBTRACE2(" NAK Limit: ", nak_limit);
101  USBTRACE("\r\n");
102  */
103  regWr(rPERADDR, addr); //set peripheral address
104 
105  uint8_t mode = regRd(rMODE);
106 
107  //Serial.print("\r\nMode: ");
108  //Serial.println( mode, HEX);
109  //Serial.print("\r\nLS: ");
110  //Serial.println(p->lowspeed, HEX);
111 
112 
113 
114  // Set bmLOWSPEED and bmHUBPRE in case of low-speed device, reset them otherwise
115  regWr(rMODE, (p->lowspeed) ? mode | bmLOWSPEED | bmHubPre : mode & ~(bmHUBPRE | bmLOWSPEED));
116 
117  return 0;
118 }
119 
120 /* Control transfer. Sets address, endpoint, fills control packet with necessary data, dispatches control packet, and initiates bulk IN transfer, */
121 /* depending on request. Actual requests are defined as inlines */
122 /* return codes: */
123 /* 00 = success */
124 
125 /* 01-0f = non-zero HRSLT */
126 uint8_t USB::ctrlReq(uint8_t addr, uint8_t ep, uint8_t bmReqType, uint8_t bRequest, uint8_t wValLo, uint8_t wValHi,
127  uint16_t wInd, uint16_t total, uint16_t nbytes, uint8_t* dataptr, USBReadParser *p) {
128  bool direction = false; //request direction, IN or OUT
129  uint8_t rcode;
130  SETUP_PKT setup_pkt;
131 
132  EpInfo *pep = NULL;
133  uint16_t nak_limit = 0;
134 
135  rcode = SetAddress(addr, ep, &pep, &nak_limit);
136 
137  if(rcode)
138  return rcode;
139 
140  direction = ((bmReqType & 0x80) > 0);
141 
142  /* fill in setup packet */
143  setup_pkt.ReqType_u.bmRequestType = bmReqType;
144  setup_pkt.bRequest = bRequest;
145  setup_pkt.wVal_u.wValueLo = wValLo;
146  setup_pkt.wVal_u.wValueHi = wValHi;
147  setup_pkt.wIndex = wInd;
148  setup_pkt.wLength = total;
149 
150  bytesWr(rSUDFIFO, 8, (uint8_t*) & setup_pkt); //transfer to setup packet FIFO
151 
152  rcode = dispatchPkt(tokSETUP, ep, nak_limit); //dispatch packet
153 
154  if(rcode) //return HRSLT if not zero
155  return ( rcode);
156 
157  if(dataptr != NULL) //data stage, if present
158  {
159  if(direction) //IN transfer
160  {
161  uint16_t left = total;
162 
163  pep->bmRcvToggle = 1; //bmRCVTOG1;
164 
165  while(left) {
166  // Bytes read into buffer
167 #if defined(ESP8266) || defined(ESP32)
168  yield(); // needed in order to reset the watchdog timer on the ESP8266
169 #endif
170  uint16_t read = nbytes;
171  //uint16_t read = (left<nbytes) ? left : nbytes;
172 
173  rcode = InTransfer(pep, nak_limit, &read, dataptr);
174  if(rcode == hrTOGERR) {
175  // yes, we flip it wrong here so that next time it is actually correct!
176  pep->bmRcvToggle = (regRd(rHRSL) & bmSNDTOGRD) ? 0 : 1;
177  continue;
178  }
179 
180  if(rcode)
181  return rcode;
182 
183  // Invoke callback function if inTransfer completed successfully and callback function pointer is specified
184  if(!rcode && p)
185  ((USBReadParser*)p)->Parse(read, dataptr, total - left);
186 
187  left -= read;
188 
189  if(read < nbytes)
190  break;
191  }
192  } else //OUT transfer
193  {
194  pep->bmSndToggle = 1; //bmSNDTOG1;
195  rcode = OutTransfer(pep, nak_limit, nbytes, dataptr);
196  }
197  if(rcode) //return error
198  return ( rcode);
199  }
200  // Status stage
201  return dispatchPkt((direction) ? tokOUTHS : tokINHS, ep, nak_limit); //GET if direction
202 }
203 
204 /* IN transfer to arbitrary endpoint. Assumes PERADDR is set. Handles multiple packets if necessary. Transfers 'nbytes' bytes. */
205 /* Keep sending INs and writes data to memory area pointed by 'data' */
206 
207 /* rcode 0 if no errors. rcode 01-0f is relayed from dispatchPkt(). Rcode f0 means RCVDAVIRQ error,
208  fe USB xfer timeout */
209 uint8_t USB::inTransfer(uint8_t addr, uint8_t ep, uint16_t *nbytesptr, uint8_t* data, uint8_t bInterval /*= 0*/) {
210  EpInfo *pep = NULL;
211  uint16_t nak_limit = 0;
212 
213  uint8_t rcode = SetAddress(addr, ep, &pep, &nak_limit);
214 
215  if(rcode) {
216  USBTRACE3("(USB::InTransfer) SetAddress Failed ", rcode, 0x81);
217  USBTRACE3("(USB::InTransfer) addr requested ", addr, 0x81);
218  USBTRACE3("(USB::InTransfer) ep requested ", ep, 0x81);
219  return rcode;
220  }
221  return InTransfer(pep, nak_limit, nbytesptr, data, bInterval);
222 }
223 
224 uint8_t USB::InTransfer(EpInfo *pep, uint16_t nak_limit, uint16_t *nbytesptr, uint8_t* data, uint8_t bInterval /*= 0*/) {
225  uint8_t rcode = 0;
226  uint8_t pktsize;
227 
228  uint16_t nbytes = *nbytesptr;
229  //printf("Requesting %i bytes ", nbytes);
230  uint8_t maxpktsize = pep->maxPktSize;
231 
232  *nbytesptr = 0;
233  regWr(rHCTL, (pep->bmRcvToggle) ? bmRCVTOG1 : bmRCVTOG0); //set toggle value
234 
235  // use a 'break' to exit this loop
236  while(1) {
237 #if defined(ESP8266) || defined(ESP32)
238  yield(); // needed in order to reset the watchdog timer on the ESP8266
239 #endif
240  rcode = dispatchPkt(tokIN, pep->epAddr, nak_limit); //IN packet to EP-'endpoint'. Function takes care of NAKS.
241  if(rcode == hrTOGERR) {
242  // yes, we flip it wrong here so that next time it is actually correct!
243  pep->bmRcvToggle = (regRd(rHRSL) & bmRCVTOGRD) ? 0 : 1;
244  regWr(rHCTL, (pep->bmRcvToggle) ? bmRCVTOG1 : bmRCVTOG0); //set toggle value
245  continue;
246  }
247  if(rcode) {
248  //printf(">>>>>>>> Problem! dispatchPkt %2.2x\r\n", rcode);
249  break; //should be 0, indicating ACK. Else return error code.
250  }
251  /* check for RCVDAVIRQ and generate error if not present
252  * the only case when absence of RCVDAVIRQ makes sense is when toggle error occurred.
253  * Need to add handling for that
254  *
255  * NOTE: I've seen this happen with SPI corruption -- xxxajk
256  */
257  if((regRd(rHIRQ) & bmRCVDAVIRQ) == 0) {
258  //printf(">>>>>>>> Problem! NO RCVDAVIRQ!\r\n");
259  rcode = 0xf0; //receive error
260  break;
261  }
262  pktsize = regRd(rRCVBC); //number of received bytes
263  //printf("Got %i bytes \r\n", pktsize);
264  // This would be OK, but...
265  //assert(pktsize <= nbytes);
266  if(pktsize > nbytes) {
267  // This can happen. Use of assert on Arduino locks up the Arduino.
268  // So I will trim the value, and hope for the best.
269  //printf(">>>>>>>> Problem! Wanted %i bytes but got %i.\r\n", nbytes, pktsize);
270  pktsize = nbytes;
271  }
272 
273  int16_t mem_left = (int16_t)nbytes - *((int16_t*)nbytesptr);
274 
275  if(mem_left < 0)
276  mem_left = 0;
277 
278  data = bytesRd(rRCVFIFO, ((pktsize > mem_left) ? mem_left : pktsize), data);
279 
280  regWr(rHIRQ, bmRCVDAVIRQ); // Clear the IRQ & free the buffer
281  *nbytesptr += pktsize; // add this packet's byte count to total transfer length
282 
283  /* The transfer is complete under two conditions: */
284  /* 1. The device sent a short packet (L.T. maxPacketSize) */
285  /* 2. 'nbytes' have been transferred. */
286  if((pktsize < maxpktsize) || (*nbytesptr >= nbytes)) // have we transferred 'nbytes' bytes?
287  {
288  // Save toggle value
289  pep->bmRcvToggle = ((regRd(rHRSL) & bmRCVTOGRD)) ? 1 : 0;
290  //printf("\r\n");
291  rcode = 0;
292  break;
293  } else if(bInterval > 0)
294  delay(bInterval); // Delay according to polling interval
295  } //while( 1 )
296  return ( rcode);
297 }
298 
299 /* OUT transfer to arbitrary endpoint. Handles multiple packets if necessary. Transfers 'nbytes' bytes. */
300 /* Handles NAK bug per Maxim Application Note 4000 for single buffer transfer */
301 
302 /* rcode 0 if no errors. rcode 01-0f is relayed from HRSL */
303 uint8_t USB::outTransfer(uint8_t addr, uint8_t ep, uint16_t nbytes, uint8_t* data) {
304  EpInfo *pep = NULL;
305  uint16_t nak_limit = 0;
306 
307  uint8_t rcode = SetAddress(addr, ep, &pep, &nak_limit);
308 
309  if(rcode)
310  return rcode;
311 
312  return OutTransfer(pep, nak_limit, nbytes, data);
313 }
314 
315 uint8_t USB::OutTransfer(EpInfo *pep, uint16_t nak_limit, uint16_t nbytes, uint8_t *data) {
316  uint8_t rcode = hrSUCCESS, retry_count;
317  uint8_t *data_p = data; //local copy of the data pointer
318  uint16_t bytes_tosend, nak_count;
319  uint16_t bytes_left = nbytes;
320 
321  uint8_t maxpktsize = pep->maxPktSize;
322 
323  if(maxpktsize < 1 || maxpktsize > 64)
325 
326  uint32_t timeout = (uint32_t)millis() + USB_XFER_TIMEOUT;
327 
328  regWr(rHCTL, (pep->bmSndToggle) ? bmSNDTOG1 : bmSNDTOG0); //set toggle value
329 
330  while(bytes_left) {
331 #if defined(ESP8266) || defined(ESP32)
332  yield(); // needed in order to reset the watchdog timer on the ESP8266
333 #endif
334  retry_count = 0;
335  nak_count = 0;
336  bytes_tosend = (bytes_left >= maxpktsize) ? maxpktsize : bytes_left;
337  bytesWr(rSNDFIFO, bytes_tosend, data_p); //filling output FIFO
338  regWr(rSNDBC, bytes_tosend); //set number of bytes
339  regWr(rHXFR, (tokOUT | pep->epAddr)); //dispatch packet
340  while(!(regRd(rHIRQ) & bmHXFRDNIRQ)){
341 #if defined(ESP8266) || defined(ESP32)
342  yield(); // needed in order to reset the watchdog timer on the ESP8266
343 #endif
344  } //wait for the completion IRQ
345  regWr(rHIRQ, bmHXFRDNIRQ); //clear IRQ
346  rcode = (regRd(rHRSL) & 0x0f);
347 
348  while(rcode && ((int32_t)((uint32_t)millis() - timeout) < 0L)) {
349 #if defined(ESP8266) || defined(ESP32)
350  yield(); // needed in order to reset the watchdog timer on the ESP8266
351 #endif
352  switch(rcode) {
353  case hrNAK:
354  nak_count++;
355  if(nak_limit && (nak_count == nak_limit))
356  goto breakout;
357  //return ( rcode);
358  break;
359  case hrTIMEOUT:
360  retry_count++;
361  if(retry_count == USB_RETRY_LIMIT)
362  goto breakout;
363  //return ( rcode);
364  break;
365  case hrTOGERR:
366  // yes, we flip it wrong here so that next time it is actually correct!
367  pep->bmSndToggle = (regRd(rHRSL) & bmSNDTOGRD) ? 0 : 1;
368  regWr(rHCTL, (pep->bmSndToggle) ? bmSNDTOG1 : bmSNDTOG0); //set toggle value
369  break;
370  default:
371  goto breakout;
372  }//switch( rcode
373 
374  /* process NAK according to Host out NAK bug */
375  regWr(rSNDBC, 0);
376  regWr(rSNDFIFO, *data_p);
377  regWr(rSNDBC, bytes_tosend);
378  regWr(rHXFR, (tokOUT | pep->epAddr)); //dispatch packet
379  while(!(regRd(rHIRQ) & bmHXFRDNIRQ)){
380 #if defined(ESP8266) || defined(ESP32)
381  yield(); // needed in order to reset the watchdog timer on the ESP8266
382 #endif
383  } //wait for the completion IRQ
384  regWr(rHIRQ, bmHXFRDNIRQ); //clear IRQ
385  rcode = (regRd(rHRSL) & 0x0f);
386  }//while( rcode && ....
387  bytes_left -= bytes_tosend;
388  data_p += bytes_tosend;
389  }//while( bytes_left...
390 breakout:
391 
392  pep->bmSndToggle = (regRd(rHRSL) & bmSNDTOGRD) ? 1 : 0; //bmSNDTOG1 : bmSNDTOG0; //update toggle
393  return ( rcode); //should be 0 in all cases
394 }
395 /* dispatch USB packet. Assumes peripheral address is set and relevant buffer is loaded/empty */
396 /* If NAK, tries to re-send up to nak_limit times */
397 /* If nak_limit == 0, do not count NAKs, exit after timeout */
398 /* If bus timeout, re-sends up to USB_RETRY_LIMIT times */
399 
400 /* return codes 0x00-0x0f are HRSLT( 0x00 being success ), 0xff means timeout */
401 uint8_t USB::dispatchPkt(uint8_t token, uint8_t ep, uint16_t nak_limit) {
402  uint32_t timeout = (uint32_t)millis() + USB_XFER_TIMEOUT;
403  uint8_t tmpdata;
404  uint8_t rcode = hrSUCCESS;
405  uint8_t retry_count = 0;
406  uint16_t nak_count = 0;
407 
408  while((int32_t)((uint32_t)millis() - timeout) < 0L) {
409 #if defined(ESP8266) || defined(ESP32)
410  yield(); // needed in order to reset the watchdog timer on the ESP8266
411 #endif
412  regWr(rHXFR, (token | ep)); //launch the transfer
414 
415  while((int32_t)((uint32_t)millis() - timeout) < 0L) //wait for transfer completion
416  {
417 #if defined(ESP8266) || defined(ESP32)
418  yield(); // needed in order to reset the watchdog timer on the ESP8266
419 #endif
420  tmpdata = regRd(rHIRQ);
421 
422  if(tmpdata & bmHXFRDNIRQ) {
423  regWr(rHIRQ, bmHXFRDNIRQ); //clear the interrupt
424  rcode = 0x00;
425  break;
426  }//if( tmpdata & bmHXFRDNIRQ
427 
428  }//while ( millis() < timeout
429 
430  //if (rcode != 0x00) //exit if timeout
431  // return ( rcode);
432 
433  rcode = (regRd(rHRSL) & 0x0f); //analyze transfer result
434 
435  switch(rcode) {
436  case hrNAK:
437  nak_count++;
438  if(nak_limit && (nak_count == nak_limit))
439  return (rcode);
440  break;
441  case hrTIMEOUT:
442  retry_count++;
443  if(retry_count == USB_RETRY_LIMIT)
444  return (rcode);
445  break;
446  default:
447  return (rcode);
448  }//switch( rcode
449 
450  }//while( timeout > millis()
451  return ( rcode);
452 }
453 
454 /* USB main task. Performs enumeration/cleanup */
455 void USB::Task(void) //USB state machine
456 {
457  uint8_t rcode;
458  uint8_t tmpdata;
459  static uint32_t delay = 0;
460  //USB_DEVICE_DESCRIPTOR buf;
461  bool lowspeed = false;
462 
463  MAX3421E::Task();
464 
465  tmpdata = getVbusState();
466 
467  /* modify USB task state if Vbus changed */
468  switch(tmpdata) {
469  case SE1: //illegal state
470  usb_task_state = USB_DETACHED_SUBSTATE_ILLEGAL;
471  lowspeed = false;
472  break;
473  case SE0: //disconnected
474  if((usb_task_state & USB_STATE_MASK) != USB_STATE_DETACHED)
475  usb_task_state = USB_DETACHED_SUBSTATE_INITIALIZE;
476  lowspeed = false;
477  break;
478  case LSHOST:
479 
480  lowspeed = true;
481  //intentional fallthrough
482  case FSHOST: //attached
483  if((usb_task_state & USB_STATE_MASK) == USB_STATE_DETACHED) {
484  delay = (uint32_t)millis() + USB_SETTLE_DELAY;
485  usb_task_state = USB_ATTACHED_SUBSTATE_SETTLE;
486  }
487  break;
488  }// switch( tmpdata
489 
490  for(uint8_t i = 0; i < USB_NUMDEVICES; i++)
491  if(devConfig[i])
492  rcode = devConfig[i]->Poll();
493 
494  switch(usb_task_state) {
496  init();
497 
498  for(uint8_t i = 0; i < USB_NUMDEVICES; i++)
499  if(devConfig[i])
500  rcode = devConfig[i]->Release();
501 
502  usb_task_state = USB_DETACHED_SUBSTATE_WAIT_FOR_DEVICE;
503  break;
504  case USB_DETACHED_SUBSTATE_WAIT_FOR_DEVICE: //just sit here
505  break;
506  case USB_DETACHED_SUBSTATE_ILLEGAL: //just sit here
507  break;
508  case USB_ATTACHED_SUBSTATE_SETTLE: //settle time for just attached device
509  if((int32_t)((uint32_t)millis() - delay) >= 0L)
510  usb_task_state = USB_ATTACHED_SUBSTATE_RESET_DEVICE;
511  else break; // don't fall through
513  regWr(rHCTL, bmBUSRST); //issue bus reset
515  break;
517  if((regRd(rHCTL) & bmBUSRST) == 0) {
518  tmpdata = regRd(rMODE) | bmSOFKAENAB; //start SOF generation
519  regWr(rMODE, tmpdata);
520  usb_task_state = USB_ATTACHED_SUBSTATE_WAIT_SOF;
521  //delay = (uint32_t)millis() + 20; //20ms wait after reset per USB spec
522  }
523  break;
524  case USB_ATTACHED_SUBSTATE_WAIT_SOF: //todo: change check order
525  if(regRd(rHIRQ) & bmFRAMEIRQ) {
526  //when first SOF received _and_ 20ms has passed we can continue
527  /*
528  if (delay < (uint32_t)millis()) //20ms passed
529  usb_task_state = USB_STATE_CONFIGURING;
530  */
531  usb_task_state = USB_ATTACHED_SUBSTATE_WAIT_RESET;
532  delay = (uint32_t)millis() + 20;
533  }
534  break;
536  if((int32_t)((uint32_t)millis() - delay) >= 0L) usb_task_state = USB_STATE_CONFIGURING;
537  else break; // don't fall through
539 
540  //Serial.print("\r\nConf.LS: ");
541  //Serial.println(lowspeed, HEX);
542 
543  rcode = Configuring(0, 0, lowspeed);
544 
545  if(rcode) {
547  usb_error = rcode;
548  usb_task_state = USB_STATE_ERROR;
549  }
550  } else
551  usb_task_state = USB_STATE_RUNNING;
552  break;
553  case USB_STATE_RUNNING:
554  break;
555  case USB_STATE_ERROR:
556  //MAX3421E::Init();
557  break;
558  } // switch( usb_task_state )
559 }
560 
561 uint8_t USB::DefaultAddressing(uint8_t parent, uint8_t port, bool lowspeed) {
562  //uint8_t buf[12];
563  uint8_t rcode;
564  UsbDevice *p0 = NULL, *p = NULL;
565 
566  // Get pointer to pseudo device with address 0 assigned
567  p0 = addrPool.GetUsbDevicePtr(0);
568 
569  if(!p0)
571 
572  if(!p0->epinfo)
574 
575  p0->lowspeed = (lowspeed) ? true : false;
576 
577  // Allocate new address according to device class
578  uint8_t bAddress = addrPool.AllocAddress(parent, false, port);
579 
580  if(!bAddress)
582 
583  p = addrPool.GetUsbDevicePtr(bAddress);
584 
585  if(!p)
587 
588  p->lowspeed = lowspeed;
589 
590  // Assign new address to the device
591  rcode = setAddr(0, 0, bAddress);
592 
593  if(rcode) {
594  addrPool.FreeAddress(bAddress);
595  bAddress = 0;
596  return rcode;
597  }
598  return 0;
599 };
600 
601 uint8_t USB::AttemptConfig(uint8_t driver, uint8_t parent, uint8_t port, bool lowspeed) {
602  //printf("AttemptConfig: parent = %i, port = %i\r\n", parent, port);
603  uint8_t retries = 0;
604 
605 again:
606  uint8_t rcode = devConfig[driver]->ConfigureDevice(parent, port, lowspeed);
608  if(parent == 0) {
609  // Send a bus reset on the root interface.
610  regWr(rHCTL, bmBUSRST); //issue bus reset
611  delay(102); // delay 102ms, compensate for clock inaccuracy.
612  } else {
613  // reset parent port
614  devConfig[parent]->ResetHubPort(port);
615  }
616  } else if(rcode == hrJERR && retries < 3) { // Some devices returns this when plugged in - trying to initialize the device again usually works
617  delay(100);
618  retries++;
619  goto again;
620  } else if(rcode)
621  return rcode;
622 
623  rcode = devConfig[driver]->Init(parent, port, lowspeed);
624  if(rcode == hrJERR && retries < 3) { // Some devices returns this when plugged in - trying to initialize the device again usually works
625  delay(100);
626  retries++;
627  goto again;
628  }
629  if(rcode) {
630  // Issue a bus reset, because the device may be in a limbo state
631  if(parent == 0) {
632  // Send a bus reset on the root interface.
633  regWr(rHCTL, bmBUSRST); //issue bus reset
634  delay(102); // delay 102ms, compensate for clock inaccuracy.
635  } else {
636  // reset parent port
637  devConfig[parent]->ResetHubPort(port);
638  }
639  }
640  return rcode;
641 }
642 
643 /*
644  * This is broken. We need to enumerate differently.
645  * It causes major problems with several devices if detected in an unexpected order.
646  *
647  *
648  * Oleg - I wouldn't do anything before the newly connected device is considered sane.
649  * i.e.(delays are not indicated for brevity):
650  * 1. reset
651  * 2. GetDevDescr();
652  * 3a. If ACK, continue with allocating address, addressing, etc.
653  * 3b. Else reset again, count resets, stop at some number (5?).
654  * 4. When max.number of resets is reached, toggle power/fail
655  * If desired, this could be modified by performing two resets with GetDevDescr() in the middle - however, from my experience, if a device answers to GDD()
656  * it doesn't need to be reset again
657  * New steps proposal:
658  * 1: get address pool instance. exit on fail
659  * 2: pUsb->getDevDescr(0, 0, constBufSize, (uint8_t*)buf). exit on fail.
660  * 3: bus reset, 100ms delay
661  * 4: set address
662  * 5: pUsb->setEpInfoEntry(bAddress, 1, epInfo), exit on fail
663  * 6: while (configurations) {
664  * for(each configuration) {
665  * for (each driver) {
666  * 6a: Ask device if it likes configuration. Returns 0 on OK.
667  * If successful, the driver configured device.
668  * The driver now owns the endpoints, and takes over managing them.
669  * The following will need codes:
670  * Everything went well, instance consumed, exit with success.
671  * Instance already in use, ignore it, try next driver.
672  * Not a supported device, ignore it, try next driver.
673  * Not a supported configuration for this device, ignore it, try next driver.
674  * Could not configure device, fatal, exit with fail.
675  * }
676  * }
677  * }
678  * 7: for(each driver) {
679  * 7a: Ask device if it knows this VID/PID. Acts exactly like 6a, but using VID/PID
680  * 8: if we get here, no driver likes the device plugged in, so exit failure.
681  *
682  */
683 uint8_t USB::Configuring(uint8_t parent, uint8_t port, bool lowspeed) {
684  //uint8_t bAddress = 0;
685  //printf("Configuring: parent = %i, port = %i\r\n", parent, port);
686  uint8_t devConfigIndex;
687  uint8_t rcode = 0;
688  uint8_t buf[sizeof (USB_DEVICE_DESCRIPTOR)];
689  USB_DEVICE_DESCRIPTOR *udd = reinterpret_cast<USB_DEVICE_DESCRIPTOR *>(buf);
690  UsbDevice *p = NULL;
691  EpInfo *oldep_ptr = NULL;
692  EpInfo epInfo;
693 
694  epInfo.epAddr = 0;
695  epInfo.maxPktSize = 8;
696  epInfo.bmSndToggle = 0;
697  epInfo.bmRcvToggle = 0;
698  epInfo.bmNakPower = USB_NAK_MAX_POWER;
699 
700  //delay(2000);
701  AddressPool &addrPool = GetAddressPool();
702  // Get pointer to pseudo device with address 0 assigned
703  p = addrPool.GetUsbDevicePtr(0);
704  if(!p) {
705  //printf("Configuring error: USB_ERROR_ADDRESS_NOT_FOUND_IN_POOL\r\n");
707  }
708 
709  // Save old pointer to EP_RECORD of address 0
710  oldep_ptr = p->epinfo;
711 
712  // Temporary assign new pointer to epInfo to p->epinfo in order to
713  // avoid toggle inconsistence
714 
715  p->epinfo = &epInfo;
716 
717  p->lowspeed = lowspeed;
718  // Get device descriptor
719  rcode = getDevDescr(0, 0, sizeof (USB_DEVICE_DESCRIPTOR), (uint8_t*)buf);
720 
721  // Restore p->epinfo
722  p->epinfo = oldep_ptr;
723 
724  if(rcode) {
725  //printf("Configuring error: Can't get USB_DEVICE_DESCRIPTOR\r\n");
726  return rcode;
727  }
728 
729  // to-do?
730  // Allocate new address according to device class
731  //bAddress = addrPool.AllocAddress(parent, false, port);
732 
733  uint16_t vid = udd->idVendor;
734  uint16_t pid = udd->idProduct;
735  uint8_t klass = udd->bDeviceClass;
736  uint8_t subklass = udd->bDeviceSubClass;
737  // Attempt to configure if VID/PID or device class matches with a driver
738  // Qualify with subclass too.
739  //
740  // VID/PID & class tests default to false for drivers not yet ported
741  // subclass defaults to true, so you don't have to define it if you don't have to.
742  //
743  for(devConfigIndex = 0; devConfigIndex < USB_NUMDEVICES; devConfigIndex++) {
744  if(!devConfig[devConfigIndex]) continue; // no driver
745  if(devConfig[devConfigIndex]->GetAddress()) continue; // consumed
746  if(devConfig[devConfigIndex]->DEVSUBCLASSOK(subklass) && (devConfig[devConfigIndex]->VIDPIDOK(vid, pid) || devConfig[devConfigIndex]->DEVCLASSOK(klass))) {
747  rcode = AttemptConfig(devConfigIndex, parent, port, lowspeed);
749  break;
750  }
751  }
752 
753  if(devConfigIndex < USB_NUMDEVICES) {
754  return rcode;
755  }
756 
757 
758  // blindly attempt to configure
759  for(devConfigIndex = 0; devConfigIndex < USB_NUMDEVICES; devConfigIndex++) {
760  if(!devConfig[devConfigIndex]) continue;
761  if(devConfig[devConfigIndex]->GetAddress()) continue; // consumed
762  if(devConfig[devConfigIndex]->DEVSUBCLASSOK(subklass) && (devConfig[devConfigIndex]->VIDPIDOK(vid, pid) || devConfig[devConfigIndex]->DEVCLASSOK(klass))) continue; // If this is true it means it must have returned USB_DEV_CONFIG_ERROR_DEVICE_NOT_SUPPORTED above
763  rcode = AttemptConfig(devConfigIndex, parent, port, lowspeed);
764 
765  //printf("ERROR ENUMERATING %2.2x\r\n", rcode);
767  // in case of an error dev_index should be reset to 0
768  // in order to start from the very beginning the
769  // next time the program gets here
770  //if (rcode != USB_DEV_CONFIG_ERROR_DEVICE_INIT_INCOMPLETE)
771  // devConfigIndex = 0;
772  return rcode;
773  }
774  }
775  // if we get here that means that the device class is not supported by any of registered classes
776  rcode = DefaultAddressing(parent, port, lowspeed);
777 
778  return rcode;
779 }
780 
781 uint8_t USB::ReleaseDevice(uint8_t addr) {
782  if(!addr)
783  return 0;
784 
785  for(uint8_t i = 0; i < USB_NUMDEVICES; i++) {
786  if(!devConfig[i]) continue;
787  if(devConfig[i]->GetAddress() == addr)
788  return devConfig[i]->Release();
789  }
790  return 0;
791 }
792 
793 #if 1
794 //get device descriptor
795 
796 uint8_t USB::getDevDescr(uint8_t addr, uint8_t ep, uint16_t nbytes, uint8_t* dataptr) {
797  return ( ctrlReq(addr, ep, bmREQ_GET_DESCR, USB_REQUEST_GET_DESCRIPTOR, 0x00, USB_DESCRIPTOR_DEVICE, 0x0000, nbytes, nbytes, dataptr, NULL));
798 }
799 //get configuration descriptor
800 
801 uint8_t USB::getConfDescr(uint8_t addr, uint8_t ep, uint16_t nbytes, uint8_t conf, uint8_t* dataptr) {
802  return ( ctrlReq(addr, ep, bmREQ_GET_DESCR, USB_REQUEST_GET_DESCRIPTOR, conf, USB_DESCRIPTOR_CONFIGURATION, 0x0000, nbytes, nbytes, dataptr, NULL));
803 }
804 
805 /* Requests Configuration Descriptor. Sends two Get Conf Descr requests. The first one gets the total length of all descriptors, then the second one requests this
806  total length. The length of the first request can be shorter ( 4 bytes ), however, there are devices which won't work unless this length is set to 9 */
807 uint8_t USB::getConfDescr(uint8_t addr, uint8_t ep, uint8_t conf, USBReadParser *p) {
808  const uint8_t bufSize = 64;
809  uint8_t buf[bufSize];
810  USB_CONFIGURATION_DESCRIPTOR *ucd = reinterpret_cast<USB_CONFIGURATION_DESCRIPTOR *>(buf);
811 
812  uint8_t ret = getConfDescr(addr, ep, 9, conf, buf);
813 
814  if(ret)
815  return ret;
816 
817  uint16_t total = ucd->wTotalLength;
818 
819  //USBTRACE2("\r\ntotal conf.size:", total);
820 
821  return ( ctrlReq(addr, ep, bmREQ_GET_DESCR, USB_REQUEST_GET_DESCRIPTOR, conf, USB_DESCRIPTOR_CONFIGURATION, 0x0000, total, bufSize, buf, p));
822 }
823 
824 //get string descriptor
825 
826 uint8_t USB::getStrDescr(uint8_t addr, uint8_t ep, uint16_t ns, uint8_t index, uint16_t langid, uint8_t* dataptr) {
827  return ( ctrlReq(addr, ep, bmREQ_GET_DESCR, USB_REQUEST_GET_DESCRIPTOR, index, USB_DESCRIPTOR_STRING, langid, ns, ns, dataptr, NULL));
828 }
829 //set address
830 
831 uint8_t USB::setAddr(uint8_t oldaddr, uint8_t ep, uint8_t newaddr) {
832  uint8_t rcode = ctrlReq(oldaddr, ep, bmREQ_SET, USB_REQUEST_SET_ADDRESS, newaddr, 0x00, 0x0000, 0x0000, 0x0000, NULL, NULL);
833  //delay(2); //per USB 2.0 sect.9.2.6.3
834  delay(300); // Older spec says you should wait at least 200ms
835  return rcode;
836  //return ( ctrlReq(oldaddr, ep, bmREQ_SET, USB_REQUEST_SET_ADDRESS, newaddr, 0x00, 0x0000, 0x0000, 0x0000, NULL, NULL));
837 }
838 //set configuration
839 
840 uint8_t USB::setConf(uint8_t addr, uint8_t ep, uint8_t conf_value) {
841  return ( ctrlReq(addr, ep, bmREQ_SET, USB_REQUEST_SET_CONFIGURATION, conf_value, 0x00, 0x0000, 0x0000, 0x0000, NULL, NULL));
842 }
843 
844 #endif // defined(USB_METHODS_INLINE)
uint8_t getConfDescr(uint8_t addr, uint8_t ep, uint16_t nbytes, uint8_t conf, uint8_t *dataptr)
Definition: Usb.cpp:801
+Go to the documentation of this file.
1 /* Copyright (C) 2011 Circuits At Home, LTD. 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 Circuits At Home, LTD
14 Web : http://www.circuitsathome.com
15 e-mail : support@circuitsathome.com
16  */
17 /* USB functions */
18 
19 #include "Usb.h"
20 
21 static uint8_t usb_error = 0;
22 static uint8_t usb_task_state;
23 
24 /* constructor */
25 USB::USB() : bmHubPre(0) {
26  usb_task_state = USB_DETACHED_SUBSTATE_INITIALIZE; //set up state machine
27  init();
28 }
29 
30 /* Initialize data structures */
31 void USB::init() {
32  //devConfigIndex = 0;
33  bmHubPre = 0;
34 }
35 
36 uint8_t USB::getUsbTaskState(void) {
37  return ( usb_task_state);
38 }
39 
40 void USB::setUsbTaskState(uint8_t state) {
41  usb_task_state = state;
42 }
43 
44 EpInfo* USB::getEpInfoEntry(uint8_t addr, uint8_t ep) {
45  UsbDevice *p = addrPool.GetUsbDevicePtr(addr);
46 
47  if(!p || !p->epinfo)
48  return NULL;
49 
50  EpInfo *pep = p->epinfo;
51 
52  for(uint8_t i = 0; i < p->epcount; i++) {
53  if((pep)->epAddr == ep)
54  return pep;
55 
56  pep++;
57  }
58  return NULL;
59 }
60 
61 /* set device table entry */
62 
63 /* each device is different and has different number of endpoints. This function plugs endpoint record structure, defined in application, to devtable */
64 uint8_t USB::setEpInfoEntry(uint8_t addr, uint8_t epcount, EpInfo* eprecord_ptr) {
65  if(!eprecord_ptr)
67 
68  UsbDevice *p = addrPool.GetUsbDevicePtr(addr);
69 
70  if(!p)
72 
73  p->address.devAddress = addr;
74  p->epinfo = eprecord_ptr;
75  p->epcount = epcount;
76 
77  return 0;
78 }
79 
80 uint8_t USB::SetAddress(uint8_t addr, uint8_t ep, EpInfo **ppep, uint16_t *nak_limit) {
81  UsbDevice *p = addrPool.GetUsbDevicePtr(addr);
82 
83  if(!p)
85 
86  if(!p->epinfo)
88 
89  *ppep = getEpInfoEntry(addr, ep);
90 
91  if(!*ppep)
93 
94  *nak_limit = (0x0001UL << (((*ppep)->bmNakPower > USB_NAK_MAX_POWER) ? USB_NAK_MAX_POWER : (*ppep)->bmNakPower));
95  (*nak_limit)--;
96  /*
97  USBTRACE2("\r\nAddress: ", addr);
98  USBTRACE2(" EP: ", ep);
99  USBTRACE2(" NAK Power: ",(*ppep)->bmNakPower);
100  USBTRACE2(" NAK Limit: ", nak_limit);
101  USBTRACE("\r\n");
102  */
103  regWr(rPERADDR, addr); //set peripheral address
104 
105  uint8_t mode = regRd(rMODE);
106 
107  //Serial.print("\r\nMode: ");
108  //Serial.println( mode, HEX);
109  //Serial.print("\r\nLS: ");
110  //Serial.println(p->lowspeed, HEX);
111 
112 
113 
114  // Set bmLOWSPEED and bmHUBPRE in case of low-speed device, reset them otherwise
115  regWr(rMODE, (p->lowspeed) ? mode | bmLOWSPEED | bmHubPre : mode & ~(bmHUBPRE | bmLOWSPEED));
116 
117  return 0;
118 }
119 
120 /* Control transfer. Sets address, endpoint, fills control packet with necessary data, dispatches control packet, and initiates bulk IN transfer, */
121 /* depending on request. Actual requests are defined as inlines */
122 /* return codes: */
123 /* 00 = success */
124 
125 /* 01-0f = non-zero HRSLT */
126 uint8_t USB::ctrlReq(uint8_t addr, uint8_t ep, uint8_t bmReqType, uint8_t bRequest, uint8_t wValLo, uint8_t wValHi,
127  uint16_t wInd, uint16_t total, uint16_t nbytes, uint8_t* dataptr, USBReadParser *p) {
128  bool direction = false; //request direction, IN or OUT
129  uint8_t rcode;
130  SETUP_PKT setup_pkt;
131 
132  EpInfo *pep = NULL;
133  uint16_t nak_limit = 0;
134 
135  rcode = SetAddress(addr, ep, &pep, &nak_limit);
136 
137  if(rcode)
138  return rcode;
139 
140  direction = ((bmReqType & 0x80) > 0);
141 
142  /* fill in setup packet */
143  setup_pkt.ReqType_u.bmRequestType = bmReqType;
144  setup_pkt.bRequest = bRequest;
145  setup_pkt.wVal_u.wValueLo = wValLo;
146  setup_pkt.wVal_u.wValueHi = wValHi;
147  setup_pkt.wIndex = wInd;
148  setup_pkt.wLength = total;
149 
150  bytesWr(rSUDFIFO, 8, (uint8_t*) & setup_pkt); //transfer to setup packet FIFO
151 
152  rcode = dispatchPkt(tokSETUP, ep, nak_limit); //dispatch packet
153 
154  if(rcode) //return HRSLT if not zero
155  return ( rcode);
156 
157  if(dataptr != NULL) //data stage, if present
158  {
159  if(direction) //IN transfer
160  {
161  uint16_t left = total;
162 
163  pep->bmRcvToggle = 1; //bmRCVTOG1;
164 
165  while(left) {
166  // Bytes read into buffer
167 #if defined(ESP8266) || defined(ESP32)
168  yield(); // needed in order to reset the watchdog timer on the ESP8266
169 #endif
170  uint16_t read = nbytes;
171  //uint16_t read = (left<nbytes) ? left : nbytes;
172 
173  rcode = InTransfer(pep, nak_limit, &read, dataptr);
174  if(rcode == hrTOGERR) {
175  // yes, we flip it wrong here so that next time it is actually correct!
176  pep->bmRcvToggle = (regRd(rHRSL) & bmSNDTOGRD) ? 0 : 1;
177  continue;
178  }
179 
180  if(rcode)
181  return rcode;
182 
183  // Invoke callback function if inTransfer completed successfully and callback function pointer is specified
184  if(!rcode && p)
185  ((USBReadParser*)p)->Parse(read, dataptr, total - left);
186 
187  left -= read;
188 
189  if(read < nbytes)
190  break;
191  }
192  } else //OUT transfer
193  {
194  pep->bmSndToggle = 1; //bmSNDTOG1;
195  rcode = OutTransfer(pep, nak_limit, nbytes, dataptr);
196  }
197  if(rcode) //return error
198  return ( rcode);
199  }
200  // Status stage
201  return dispatchPkt((direction) ? tokOUTHS : tokINHS, ep, nak_limit); //GET if direction
202 }
203 
204 /* IN transfer to arbitrary endpoint. Assumes PERADDR is set. Handles multiple packets if necessary. Transfers 'nbytes' bytes. */
205 /* Keep sending INs and writes data to memory area pointed by 'data' */
206 
207 /* rcode 0 if no errors. rcode 01-0f is relayed from dispatchPkt(). Rcode f0 means RCVDAVIRQ error,
208  fe USB xfer timeout */
209 uint8_t USB::inTransfer(uint8_t addr, uint8_t ep, uint16_t *nbytesptr, uint8_t* data, uint8_t bInterval /*= 0*/) {
210  EpInfo *pep = NULL;
211  uint16_t nak_limit = 0;
212 
213  uint8_t rcode = SetAddress(addr, ep, &pep, &nak_limit);
214 
215  if(rcode) {
216  USBTRACE3("(USB::InTransfer) SetAddress Failed ", rcode, 0x81);
217  USBTRACE3("(USB::InTransfer) addr requested ", addr, 0x81);
218  USBTRACE3("(USB::InTransfer) ep requested ", ep, 0x81);
219  return rcode;
220  }
221  return InTransfer(pep, nak_limit, nbytesptr, data, bInterval);
222 }
223 
224 uint8_t USB::InTransfer(EpInfo *pep, uint16_t nak_limit, uint16_t *nbytesptr, uint8_t* data, uint8_t bInterval /*= 0*/) {
225  uint8_t rcode = 0;
226  uint8_t pktsize;
227 
228  uint16_t nbytes = *nbytesptr;
229  //printf("Requesting %i bytes ", nbytes);
230  uint8_t maxpktsize = pep->maxPktSize;
231 
232  *nbytesptr = 0;
233  regWr(rHCTL, (pep->bmRcvToggle) ? bmRCVTOG1 : bmRCVTOG0); //set toggle value
234 
235  // use a 'break' to exit this loop
236  while(1) {
237 #if defined(ESP8266) || defined(ESP32)
238  yield(); // needed in order to reset the watchdog timer on the ESP8266
239 #endif
240  rcode = dispatchPkt(tokIN, pep->epAddr, nak_limit); //IN packet to EP-'endpoint'. Function takes care of NAKS.
241  if(rcode == hrTOGERR) {
242  // yes, we flip it wrong here so that next time it is actually correct!
243  pep->bmRcvToggle = (regRd(rHRSL) & bmRCVTOGRD) ? 0 : 1;
244  regWr(rHCTL, (pep->bmRcvToggle) ? bmRCVTOG1 : bmRCVTOG0); //set toggle value
245  continue;
246  }
247  if(rcode) {
248  //printf(">>>>>>>> Problem! dispatchPkt %2.2x\r\n", rcode);
249  break; //should be 0, indicating ACK. Else return error code.
250  }
251  /* check for RCVDAVIRQ and generate error if not present
252  * the only case when absence of RCVDAVIRQ makes sense is when toggle error occurred.
253  * Need to add handling for that
254  *
255  * NOTE: I've seen this happen with SPI corruption -- xxxajk
256  */
257  if((regRd(rHIRQ) & bmRCVDAVIRQ) == 0) {
258  //printf(">>>>>>>> Problem! NO RCVDAVIRQ!\r\n");
259  rcode = 0xf0; //receive error
260  break;
261  }
262  pktsize = regRd(rRCVBC); //number of received bytes
263  //printf("Got %i bytes \r\n", pktsize);
264  // This would be OK, but...
265  //assert(pktsize <= nbytes);
266  if(pktsize > nbytes) {
267  // This can happen. Use of assert on Arduino locks up the Arduino.
268  // So I will trim the value, and hope for the best.
269  //printf(">>>>>>>> Problem! Wanted %i bytes but got %i.\r\n", nbytes, pktsize);
270  pktsize = nbytes;
271  }
272 
273  int16_t mem_left = (int16_t)nbytes - *((int16_t*)nbytesptr);
274 
275  if(mem_left < 0)
276  mem_left = 0;
277 
278  data = bytesRd(rRCVFIFO, ((pktsize > mem_left) ? mem_left : pktsize), data);
279 
280  regWr(rHIRQ, bmRCVDAVIRQ); // Clear the IRQ & free the buffer
281  *nbytesptr += pktsize; // add this packet's byte count to total transfer length
282 
283  /* The transfer is complete under two conditions: */
284  /* 1. The device sent a short packet (L.T. maxPacketSize) */
285  /* 2. 'nbytes' have been transferred. */
286  if((pktsize < maxpktsize) || (*nbytesptr >= nbytes)) // have we transferred 'nbytes' bytes?
287  {
288  // Save toggle value
289  pep->bmRcvToggle = ((regRd(rHRSL) & bmRCVTOGRD)) ? 1 : 0;
290  //printf("\r\n");
291  rcode = 0;
292  break;
293  } else if(bInterval > 0)
294  delay(bInterval); // Delay according to polling interval
295  } //while( 1 )
296  return ( rcode);
297 }
298 
299 /* OUT transfer to arbitrary endpoint. Handles multiple packets if necessary. Transfers 'nbytes' bytes. */
300 /* Handles NAK bug per Maxim Application Note 4000 for single buffer transfer */
301 
302 /* rcode 0 if no errors. rcode 01-0f is relayed from HRSL */
303 uint8_t USB::outTransfer(uint8_t addr, uint8_t ep, uint16_t nbytes, uint8_t* data) {
304  EpInfo *pep = NULL;
305  uint16_t nak_limit = 0;
306 
307  uint8_t rcode = SetAddress(addr, ep, &pep, &nak_limit);
308 
309  if(rcode)
310  return rcode;
311 
312  return OutTransfer(pep, nak_limit, nbytes, data);
313 }
314 
315 uint8_t USB::OutTransfer(EpInfo *pep, uint16_t nak_limit, uint16_t nbytes, uint8_t *data) {
316  uint8_t rcode = hrSUCCESS, retry_count;
317  uint8_t *data_p = data; //local copy of the data pointer
318  uint16_t bytes_tosend, nak_count;
319  uint16_t bytes_left = nbytes;
320 
321  uint8_t maxpktsize = pep->maxPktSize;
322 
323  if(maxpktsize < 1 || maxpktsize > 64)
325 
326  uint32_t timeout = (uint32_t)millis() + USB_XFER_TIMEOUT;
327 
328  regWr(rHCTL, (pep->bmSndToggle) ? bmSNDTOG1 : bmSNDTOG0); //set toggle value
329 
330  while(bytes_left) {
331 #if defined(ESP8266) || defined(ESP32)
332  yield(); // needed in order to reset the watchdog timer on the ESP8266
333 #endif
334  retry_count = 0;
335  nak_count = 0;
336  bytes_tosend = (bytes_left >= maxpktsize) ? maxpktsize : bytes_left;
337  bytesWr(rSNDFIFO, bytes_tosend, data_p); //filling output FIFO
338  regWr(rSNDBC, bytes_tosend); //set number of bytes
339  regWr(rHXFR, (tokOUT | pep->epAddr)); //dispatch packet
340  while(!(regRd(rHIRQ) & bmHXFRDNIRQ)){
341 #if defined(ESP8266) || defined(ESP32)
342  yield(); // needed in order to reset the watchdog timer on the ESP8266
343 #endif
344  } //wait for the completion IRQ
345  regWr(rHIRQ, bmHXFRDNIRQ); //clear IRQ
346  rcode = (regRd(rHRSL) & 0x0f);
347 
348  while(rcode && ((int32_t)((uint32_t)millis() - timeout) < 0L)) {
349 #if defined(ESP8266) || defined(ESP32)
350  yield(); // needed in order to reset the watchdog timer on the ESP8266
351 #endif
352  switch(rcode) {
353  case hrNAK:
354  nak_count++;
355  if(nak_limit && (nak_count == nak_limit))
356  goto breakout;
357  //return ( rcode);
358  break;
359  case hrTIMEOUT:
360  retry_count++;
361  if(retry_count == USB_RETRY_LIMIT)
362  goto breakout;
363  //return ( rcode);
364  break;
365  case hrTOGERR:
366  // yes, we flip it wrong here so that next time it is actually correct!
367  pep->bmSndToggle = (regRd(rHRSL) & bmSNDTOGRD) ? 0 : 1;
368  regWr(rHCTL, (pep->bmSndToggle) ? bmSNDTOG1 : bmSNDTOG0); //set toggle value
369  break;
370  default:
371  goto breakout;
372  }//switch( rcode
373 
374  /* process NAK according to Host out NAK bug */
375  regWr(rSNDBC, 0);
376  regWr(rSNDFIFO, *data_p);
377  regWr(rSNDBC, bytes_tosend);
378  regWr(rHXFR, (tokOUT | pep->epAddr)); //dispatch packet
379  while(!(regRd(rHIRQ) & bmHXFRDNIRQ)){
380 #if defined(ESP8266) || defined(ESP32)
381  yield(); // needed in order to reset the watchdog timer on the ESP8266
382 #endif
383  } //wait for the completion IRQ
384  regWr(rHIRQ, bmHXFRDNIRQ); //clear IRQ
385  rcode = (regRd(rHRSL) & 0x0f);
386  }//while( rcode && ....
387  bytes_left -= bytes_tosend;
388  data_p += bytes_tosend;
389  }//while( bytes_left...
390 breakout:
391 
392  pep->bmSndToggle = (regRd(rHRSL) & bmSNDTOGRD) ? 1 : 0; //bmSNDTOG1 : bmSNDTOG0; //update toggle
393  return ( rcode); //should be 0 in all cases
394 }
395 /* dispatch USB packet. Assumes peripheral address is set and relevant buffer is loaded/empty */
396 /* If NAK, tries to re-send up to nak_limit times */
397 /* If nak_limit == 0, do not count NAKs, exit after timeout */
398 /* If bus timeout, re-sends up to USB_RETRY_LIMIT times */
399 
400 /* return codes 0x00-0x0f are HRSLT( 0x00 being success ), 0xff means timeout */
401 uint8_t USB::dispatchPkt(uint8_t token, uint8_t ep, uint16_t nak_limit) {
402  uint32_t timeout = (uint32_t)millis() + USB_XFER_TIMEOUT;
403  uint8_t tmpdata;
404  uint8_t rcode = hrSUCCESS;
405  uint8_t retry_count = 0;
406  uint16_t nak_count = 0;
407 
408  while((int32_t)((uint32_t)millis() - timeout) < 0L) {
409 #if defined(ESP8266) || defined(ESP32)
410  yield(); // needed in order to reset the watchdog timer on the ESP8266
411 #endif
412  regWr(rHXFR, (token | ep)); //launch the transfer
414 
415  while((int32_t)((uint32_t)millis() - timeout) < 0L) //wait for transfer completion
416  {
417 #if defined(ESP8266) || defined(ESP32)
418  yield(); // needed in order to reset the watchdog timer on the ESP8266
419 #endif
420  tmpdata = regRd(rHIRQ);
421 
422  if(tmpdata & bmHXFRDNIRQ) {
423  regWr(rHIRQ, bmHXFRDNIRQ); //clear the interrupt
424  rcode = 0x00;
425  break;
426  }//if( tmpdata & bmHXFRDNIRQ
427 
428  }//while ( millis() < timeout
429 
430  //if (rcode != 0x00) //exit if timeout
431  // return ( rcode);
432 
433  rcode = (regRd(rHRSL) & 0x0f); //analyze transfer result
434 
435  switch(rcode) {
436  case hrNAK:
437  nak_count++;
438  if(nak_limit && (nak_count == nak_limit))
439  return (rcode);
440  break;
441  case hrTIMEOUT:
442  retry_count++;
443  if(retry_count == USB_RETRY_LIMIT)
444  return (rcode);
445  break;
446  default:
447  return (rcode);
448  }//switch( rcode
449 
450  }//while( timeout > millis()
451  return ( rcode);
452 }
453 
454 /* USB main task. Performs enumeration/cleanup */
455 void USB::Task(void) //USB state machine
456 {
457  uint8_t rcode;
458  uint8_t tmpdata;
459  static uint32_t delay = 0;
460  //USB_DEVICE_DESCRIPTOR buf;
461  bool lowspeed = false;
462 
463  MAX3421E::Task();
464 
465  tmpdata = getVbusState();
466 
467  /* modify USB task state if Vbus changed */
468  switch(tmpdata) {
469  case SE1: //illegal state
470  usb_task_state = USB_DETACHED_SUBSTATE_ILLEGAL;
471  lowspeed = false;
472  break;
473  case SE0: //disconnected
474  if((usb_task_state & USB_STATE_MASK) != USB_STATE_DETACHED)
475  usb_task_state = USB_DETACHED_SUBSTATE_INITIALIZE;
476  lowspeed = false;
477  break;
478  case LSHOST:
479 
480  lowspeed = true;
481  //intentional fallthrough
482  case FSHOST: //attached
483  if((usb_task_state & USB_STATE_MASK) == USB_STATE_DETACHED) {
484  delay = (uint32_t)millis() + USB_SETTLE_DELAY;
485  usb_task_state = USB_ATTACHED_SUBSTATE_SETTLE;
486  }
487  break;
488  }// switch( tmpdata
489 
490  for(uint8_t i = 0; i < USB_NUMDEVICES; i++)
491  if(devConfig[i])
492  rcode = devConfig[i]->Poll();
493 
494  switch(usb_task_state) {
496  init();
497 
498  for(uint8_t i = 0; i < USB_NUMDEVICES; i++)
499  if(devConfig[i])
500  rcode = devConfig[i]->Release();
501 
502  usb_task_state = USB_DETACHED_SUBSTATE_WAIT_FOR_DEVICE;
503  break;
504  case USB_DETACHED_SUBSTATE_WAIT_FOR_DEVICE: //just sit here
505  break;
506  case USB_DETACHED_SUBSTATE_ILLEGAL: //just sit here
507  break;
508  case USB_ATTACHED_SUBSTATE_SETTLE: //settle time for just attached device
509  if((int32_t)((uint32_t)millis() - delay) >= 0L)
510  usb_task_state = USB_ATTACHED_SUBSTATE_RESET_DEVICE;
511  else break; // don't fall through
513  regWr(rHCTL, bmBUSRST); //issue bus reset
515  break;
517  if((regRd(rHCTL) & bmBUSRST) == 0) {
518  tmpdata = regRd(rMODE) | bmSOFKAENAB; //start SOF generation
519  regWr(rMODE, tmpdata);
520  usb_task_state = USB_ATTACHED_SUBSTATE_WAIT_SOF;
521  //delay = (uint32_t)millis() + 20; //20ms wait after reset per USB spec
522  }
523  break;
524  case USB_ATTACHED_SUBSTATE_WAIT_SOF: //todo: change check order
525  if(regRd(rHIRQ) & bmFRAMEIRQ) {
526  //when first SOF received _and_ 20ms has passed we can continue
527  /*
528  if (delay < (uint32_t)millis()) //20ms passed
529  usb_task_state = USB_STATE_CONFIGURING;
530  */
531  usb_task_state = USB_ATTACHED_SUBSTATE_WAIT_RESET;
532  delay = (uint32_t)millis() + 20;
533  }
534  break;
536  if((int32_t)((uint32_t)millis() - delay) >= 0L) usb_task_state = USB_STATE_CONFIGURING;
537  else break; // don't fall through
539 
540  //Serial.print("\r\nConf.LS: ");
541  //Serial.println(lowspeed, HEX);
542 
543  rcode = Configuring(0, 0, lowspeed);
544 
545  if(rcode) {
547  usb_error = rcode;
548  usb_task_state = USB_STATE_ERROR;
549  }
550  } else
551  usb_task_state = USB_STATE_RUNNING;
552  break;
553  case USB_STATE_RUNNING:
554  break;
555  case USB_STATE_ERROR:
556  //MAX3421E::Init();
557  break;
558  } // switch( usb_task_state )
559 }
560 
561 uint8_t USB::DefaultAddressing(uint8_t parent, uint8_t port, bool lowspeed) {
562  //uint8_t buf[12];
563  uint8_t rcode;
564  UsbDevice *p0 = NULL, *p = NULL;
565 
566  // Get pointer to pseudo device with address 0 assigned
567  p0 = addrPool.GetUsbDevicePtr(0);
568 
569  if(!p0)
571 
572  if(!p0->epinfo)
574 
575  p0->lowspeed = (lowspeed) ? true : false;
576 
577  // Allocate new address according to device class
578  uint8_t bAddress = addrPool.AllocAddress(parent, false, port);
579 
580  if(!bAddress)
582 
583  p = addrPool.GetUsbDevicePtr(bAddress);
584 
585  if(!p)
587 
588  p->lowspeed = lowspeed;
589 
590  // Assign new address to the device
591  rcode = setAddr(0, 0, bAddress);
592 
593  if(rcode) {
594  addrPool.FreeAddress(bAddress);
595  bAddress = 0;
596  return rcode;
597  }
598  return 0;
599 };
600 
601 uint8_t USB::AttemptConfig(uint8_t driver, uint8_t parent, uint8_t port, bool lowspeed) {
602  //printf("AttemptConfig: parent = %i, port = %i\r\n", parent, port);
603  uint8_t retries = 0;
604 
605 again:
606  uint8_t rcode = devConfig[driver]->ConfigureDevice(parent, port, lowspeed);
608  if(parent == 0) {
609  // Send a bus reset on the root interface.
610  regWr(rHCTL, bmBUSRST); //issue bus reset
611  delay(102); // delay 102ms, compensate for clock inaccuracy.
612  } else {
613  // reset parent port
614  devConfig[parent]->ResetHubPort(port);
615  }
616  } else if(rcode == hrJERR && retries < 3) { // Some devices returns this when plugged in - trying to initialize the device again usually works
617  delay(100);
618  retries++;
619  goto again;
620  } else if(rcode)
621  return rcode;
622 
623  rcode = devConfig[driver]->Init(parent, port, lowspeed);
624  if(rcode == hrJERR && retries < 3) { // Some devices returns this when plugged in - trying to initialize the device again usually works
625  delay(100);
626  retries++;
627  goto again;
628  }
629  if(rcode) {
630  // Issue a bus reset, because the device may be in a limbo state
631  if(parent == 0) {
632  // Send a bus reset on the root interface.
633  regWr(rHCTL, bmBUSRST); //issue bus reset
634  delay(102); // delay 102ms, compensate for clock inaccuracy.
635  } else {
636  // reset parent port
637  devConfig[parent]->ResetHubPort(port);
638  }
639  }
640  return rcode;
641 }
642 
643 /*
644  * This is broken. We need to enumerate differently.
645  * It causes major problems with several devices if detected in an unexpected order.
646  *
647  *
648  * Oleg - I wouldn't do anything before the newly connected device is considered sane.
649  * i.e.(delays are not indicated for brevity):
650  * 1. reset
651  * 2. GetDevDescr();
652  * 3a. If ACK, continue with allocating address, addressing, etc.
653  * 3b. Else reset again, count resets, stop at some number (5?).
654  * 4. When max.number of resets is reached, toggle power/fail
655  * If desired, this could be modified by performing two resets with GetDevDescr() in the middle - however, from my experience, if a device answers to GDD()
656  * it doesn't need to be reset again
657  * New steps proposal:
658  * 1: get address pool instance. exit on fail
659  * 2: pUsb->getDevDescr(0, 0, constBufSize, (uint8_t*)buf). exit on fail.
660  * 3: bus reset, 100ms delay
661  * 4: set address
662  * 5: pUsb->setEpInfoEntry(bAddress, 1, epInfo), exit on fail
663  * 6: while (configurations) {
664  * for(each configuration) {
665  * for (each driver) {
666  * 6a: Ask device if it likes configuration. Returns 0 on OK.
667  * If successful, the driver configured device.
668  * The driver now owns the endpoints, and takes over managing them.
669  * The following will need codes:
670  * Everything went well, instance consumed, exit with success.
671  * Instance already in use, ignore it, try next driver.
672  * Not a supported device, ignore it, try next driver.
673  * Not a supported configuration for this device, ignore it, try next driver.
674  * Could not configure device, fatal, exit with fail.
675  * }
676  * }
677  * }
678  * 7: for(each driver) {
679  * 7a: Ask device if it knows this VID/PID. Acts exactly like 6a, but using VID/PID
680  * 8: if we get here, no driver likes the device plugged in, so exit failure.
681  *
682  */
683 uint8_t USB::Configuring(uint8_t parent, uint8_t port, bool lowspeed) {
684  //uint8_t bAddress = 0;
685  //printf("Configuring: parent = %i, port = %i\r\n", parent, port);
686  uint8_t devConfigIndex;
687  uint8_t rcode = 0;
688  uint8_t buf[sizeof (USB_DEVICE_DESCRIPTOR)];
689  USB_DEVICE_DESCRIPTOR *udd = reinterpret_cast<USB_DEVICE_DESCRIPTOR *>(buf);
690  UsbDevice *p = NULL;
691  EpInfo *oldep_ptr = NULL;
692  EpInfo epInfo;
693 
694  epInfo.epAddr = 0;
695  epInfo.maxPktSize = 8;
696  epInfo.bmSndToggle = 0;
697  epInfo.bmRcvToggle = 0;
698  epInfo.bmNakPower = USB_NAK_MAX_POWER;
699 
700  //delay(2000);
701  AddressPool &addrPool = GetAddressPool();
702  // Get pointer to pseudo device with address 0 assigned
703  p = addrPool.GetUsbDevicePtr(0);
704  if(!p) {
705  //printf("Configuring error: USB_ERROR_ADDRESS_NOT_FOUND_IN_POOL\r\n");
707  }
708 
709  // Save old pointer to EP_RECORD of address 0
710  oldep_ptr = p->epinfo;
711 
712  // Temporary assign new pointer to epInfo to p->epinfo in order to
713  // avoid toggle inconsistence
714 
715  p->epinfo = &epInfo;
716 
717  p->lowspeed = lowspeed;
718  // Get device descriptor
719  rcode = getDevDescr(0, 0, sizeof (USB_DEVICE_DESCRIPTOR), (uint8_t*)buf);
720 
721  // Restore p->epinfo
722  p->epinfo = oldep_ptr;
723 
724  if(rcode) {
725  //printf("Configuring error: Can't get USB_DEVICE_DESCRIPTOR\r\n");
726  return rcode;
727  }
728 
729  // to-do?
730  // Allocate new address according to device class
731  //bAddress = addrPool.AllocAddress(parent, false, port);
732 
733  uint16_t vid = udd->idVendor;
734  uint16_t pid = udd->idProduct;
735  uint8_t klass = udd->bDeviceClass;
736  uint8_t subklass = udd->bDeviceSubClass;
737  // Attempt to configure if VID/PID or device class matches with a driver
738  // Qualify with subclass too.
739  //
740  // VID/PID & class tests default to false for drivers not yet ported
741  // subclass defaults to true, so you don't have to define it if you don't have to.
742  //
743  for(devConfigIndex = 0; devConfigIndex < USB_NUMDEVICES; devConfigIndex++) {
744  if(!devConfig[devConfigIndex]) continue; // no driver
745  if(devConfig[devConfigIndex]->GetAddress()) continue; // consumed
746  if(devConfig[devConfigIndex]->DEVSUBCLASSOK(subklass) && (devConfig[devConfigIndex]->VIDPIDOK(vid, pid) || devConfig[devConfigIndex]->DEVCLASSOK(klass))) {
747  rcode = AttemptConfig(devConfigIndex, parent, port, lowspeed);
749  break;
750  }
751  }
752 
753  if(devConfigIndex < USB_NUMDEVICES) {
754  return rcode;
755  }
756 
757 
758  // blindly attempt to configure
759  for(devConfigIndex = 0; devConfigIndex < USB_NUMDEVICES; devConfigIndex++) {
760  if(!devConfig[devConfigIndex]) continue;
761  if(devConfig[devConfigIndex]->GetAddress()) continue; // consumed
762  if(devConfig[devConfigIndex]->DEVSUBCLASSOK(subklass) && (devConfig[devConfigIndex]->VIDPIDOK(vid, pid) || devConfig[devConfigIndex]->DEVCLASSOK(klass))) continue; // If this is true it means it must have returned USB_DEV_CONFIG_ERROR_DEVICE_NOT_SUPPORTED above
763  rcode = AttemptConfig(devConfigIndex, parent, port, lowspeed);
764 
765  //printf("ERROR ENUMERATING %2.2x\r\n", rcode);
767  // in case of an error dev_index should be reset to 0
768  // in order to start from the very beginning the
769  // next time the program gets here
770  //if (rcode != USB_DEV_CONFIG_ERROR_DEVICE_INIT_INCOMPLETE)
771  // devConfigIndex = 0;
772  return rcode;
773  }
774  }
775  // if we get here that means that the device class is not supported by any of registered classes
776  rcode = DefaultAddressing(parent, port, lowspeed);
777 
778  return rcode;
779 }
780 
781 uint8_t USB::ReleaseDevice(uint8_t addr) {
782  if(!addr)
783  return 0;
784 
785  for(uint8_t i = 0; i < USB_NUMDEVICES; i++) {
786  if(!devConfig[i]) continue;
787  if(devConfig[i]->GetAddress() == addr)
788  return devConfig[i]->Release();
789  }
790  return 0;
791 }
792 
793 #if 1
794 //get device descriptor
795 
796 uint8_t USB::getDevDescr(uint8_t addr, uint8_t ep, uint16_t nbytes, uint8_t* dataptr) {
797  return ( ctrlReq(addr, ep, bmREQ_GET_DESCR, USB_REQUEST_GET_DESCRIPTOR, 0x00, USB_DESCRIPTOR_DEVICE, 0x0000, nbytes, nbytes, dataptr, NULL));
798 }
799 //get configuration descriptor
800 
801 uint8_t USB::getConfDescr(uint8_t addr, uint8_t ep, uint16_t nbytes, uint8_t conf, uint8_t* dataptr) {
802  return ( ctrlReq(addr, ep, bmREQ_GET_DESCR, USB_REQUEST_GET_DESCRIPTOR, conf, USB_DESCRIPTOR_CONFIGURATION, 0x0000, nbytes, nbytes, dataptr, NULL));
803 }
804 
805 /* Requests Configuration Descriptor. Sends two Get Conf Descr requests. The first one gets the total length of all descriptors, then the second one requests this
806  total length. The length of the first request can be shorter ( 4 bytes ), however, there are devices which won't work unless this length is set to 9 */
807 uint8_t USB::getConfDescr(uint8_t addr, uint8_t ep, uint8_t conf, USBReadParser *p) {
808  const uint8_t bufSize = 64;
809  uint8_t buf[bufSize];
810  USB_CONFIGURATION_DESCRIPTOR *ucd = reinterpret_cast<USB_CONFIGURATION_DESCRIPTOR *>(buf);
811 
812  uint8_t ret = getConfDescr(addr, ep, 9, conf, buf);
813 
814  if(ret)
815  return ret;
816 
817  uint16_t total = ucd->wTotalLength;
818 
819  //USBTRACE2("\r\ntotal conf.size:", total);
820 
821  return ( ctrlReq(addr, ep, bmREQ_GET_DESCR, USB_REQUEST_GET_DESCRIPTOR, conf, USB_DESCRIPTOR_CONFIGURATION, 0x0000, total, bufSize, buf, p));
822 }
823 
824 //get string descriptor
825 
826 uint8_t USB::getStrDescr(uint8_t addr, uint8_t ep, uint16_t ns, uint8_t index, uint16_t langid, uint8_t* dataptr) {
827  return ( ctrlReq(addr, ep, bmREQ_GET_DESCR, USB_REQUEST_GET_DESCRIPTOR, index, USB_DESCRIPTOR_STRING, langid, ns, ns, dataptr, NULL));
828 }
829 //set address
830 
831 uint8_t USB::setAddr(uint8_t oldaddr, uint8_t ep, uint8_t newaddr) {
832  uint8_t rcode = ctrlReq(oldaddr, ep, bmREQ_SET, USB_REQUEST_SET_ADDRESS, newaddr, 0x00, 0x0000, 0x0000, 0x0000, NULL, NULL);
833  //delay(2); //per USB 2.0 sect.9.2.6.3
834  delay(300); // Older spec says you should wait at least 200ms
835  return rcode;
836  //return ( ctrlReq(oldaddr, ep, bmREQ_SET, USB_REQUEST_SET_ADDRESS, newaddr, 0x00, 0x0000, 0x0000, 0x0000, NULL, NULL));
837 }
838 //set configuration
839 
840 uint8_t USB::setConf(uint8_t addr, uint8_t ep, uint8_t conf_value) {
841  return ( ctrlReq(addr, ep, bmREQ_SET, USB_REQUEST_SET_CONFIGURATION, conf_value, 0x00, 0x0000, 0x0000, 0x0000, NULL, NULL));
842 }
843 
844 #endif // defined(USB_METHODS_INLINE)
uint8_t getConfDescr(uint8_t addr, uint8_t ep, uint16_t nbytes, uint8_t conf, uint8_t *dataptr)
Definition: Usb.cpp:801
uint8_t bmRcvToggle
Definition: address.h:48
virtual uint8_t Poll()
Definition: UsbCore.h:149
@@ -72,6 +72,7 @@ $(function() {
#define USB_ATTACHED_SUBSTATE_WAIT_RESET
Definition: UsbCore.h:127
#define FSHOST
Definition: max3421e.h:37
#define rHCTL
Definition: max3421e.h:181
+
union SETUP_PKT::@31 wVal_u
EpInfo * epinfo
Definition: address.h:83
bool lowspeed
Definition: address.h:86
#define USB_ERROR_EPINFO_IS_NULL
Definition: UsbCore.h:96
@@ -123,7 +124,6 @@ $(function() {
#define tokIN
Definition: max3421e.h:196
#define LSHOST
Definition: max3421e.h:38
#define USB_XFER_TIMEOUT
Definition: UsbCore.h:107
-
union SETUP_PKT::@33 wVal_u
Definition: address.h:39
#define rMODE
Definition: max3421e.h:167
void setUsbTaskState(uint8_t state)
Definition: Usb.cpp:40
@@ -155,6 +155,7 @@ $(function() {
#define USB_ERROR_ADDRESS_NOT_FOUND_IN_POOL
Definition: UsbCore.h:95
#define USB_STATE_MASK
Definition: UsbCore.h:117
#define USB_DEV_CONFIG_ERROR_DEVICE_NOT_SUPPORTED
Definition: UsbCore.h:90
+
union SETUP_PKT::@30 ReqType_u
void Task(void)
Definition: Usb.cpp:455
#define USB_DETACHED_SUBSTATE_ILLEGAL
Definition: UsbCore.h:122
#define hrTIMEOUT
Definition: max3421e.h:228
@@ -175,7 +176,6 @@ $(function() {
AddressPool & GetAddressPool()
Definition: UsbCore.h:226
#define USB_ERROR_INVALID_ARGUMENT
Definition: UsbCore.h:97
uint8_t Configuring(uint8_t parent, uint8_t port, bool lowspeed)
Definition: Usb.cpp:683
-
union SETUP_PKT::@32 ReqType_u
#define USBTRACE3(s, r, l)
Definition: macros.h:85
uint8_t bRequest
Definition: UsbCore.h:187
#define SE0
Definition: max3421e.h:35
diff --git a/_usb_8h.html b/_usb_8h.html index e5cb4866..8d834f9b 100644 --- a/_usb_8h.html +++ b/_usb_8h.html @@ -68,55 +68,55 @@ This graph shows which files directly or indirectly include this file:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/_usb_8h__dep__incl.map b/_usb_8h__dep__incl.map index e877db15..81721e44 100644 --- a/_usb_8h__dep__incl.map +++ b/_usb_8h__dep__incl.map @@ -1,51 +1,51 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_usb_8h__dep__incl.md5 b/_usb_8h__dep__incl.md5 index 1127a03e..9ba6286c 100644 --- a/_usb_8h__dep__incl.md5 +++ b/_usb_8h__dep__incl.md5 @@ -1 +1 @@ -c3d178c87de440befcdfa627a34aac33 \ No newline at end of file +7630a82c45bf91c05f165eb324a51752 \ No newline at end of file diff --git a/_usb_8h__dep__incl.png b/_usb_8h__dep__incl.png index 4559da8106db3f810075aa0b1fd406fa5081da17..fc1043e50c33769120696340b7ea9aca00a24868 100644 GIT binary patch literal 155656 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 z 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�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

@vGgI&uMBbA$_VwX-h~vL}$zj&@NPTT~ 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

>body^LD^Gp_zc% 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

2Wns#xyKFUlOSyrPWpshMSb}O{1f566BIFYv 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 RMKSU%>01iorJ{!Z{|6%ikhcH; diff --git a/annotated.html b/annotated.html index 56bdd666..2e403adb 100644 --- a/annotated.html +++ b/annotated.html @@ -64,7 +64,7 @@ $(function() {

Here are the classes, structs, unions and interfaces with brief descriptions:
- +
[detail level 12]
@@ -95,7 +95,9 @@ $(function() { - + + + diff --git a/class_h_i_d_composite-members.html b/class_h_i_d_composite-members.html index 07edf329..fb723196 100644 --- a/class_h_i_d_composite-members.html +++ b/class_h_i_d_composite-members.html @@ -67,15 +67,23 @@ $(function() {

This is the complete list of members for HIDComposite, including all inherited members.

 CACM
 CACM_FUNC_DESCR
 CAddressPool
 CHexDumper
 CHID_CLASS_DESCRIPTOR_LEN_AND_TYPE
 CHIDBoot
 CHIDComposite
 CHIDComposite
 CHidItemPrefix
 CHIDReportParser
 CHIDUniversal
- + + + + + + + - + + + @@ -86,18 +94,22 @@ $(function() { - - - - - - - + + + + + + + + + - - + + + + @@ -108,6 +120,7 @@ $(function() { +
bAddressUSBHIDprotected
bHasReportIdHIDCompositeprotected
bConfNumHIDCompositeprotected
bHasReportIdHIDCompositeprotected
bNumEPHIDCompositeprotected
bNumIfaceHIDCompositeprotected
bPollEnableHIDCompositeprotected
ConfigureDevice(uint8_t parent, uint8_t port, bool lowspeed)USBDeviceConfiginlinevirtual
constBuffLenHIDCompositeprotectedstatic
descrInfoHIDCompositeprotected
DEVCLASSOK(uint8_t klass)USBDeviceConfiginlinevirtual
DEVSUBCLASSOK(uint8_t subklass)USBDeviceConfiginlinevirtual
EndpointXtract(uint8_t conf, uint8_t iface, uint8_t alt, uint8_t proto, const USB_ENDPOINT_DESCRIPTOR *ep)HIDCompositevirtual
epInfoHIDCompositeprotected
epInterruptInIndexUSBHIDprotectedstatic
epInterruptOutIndexUSBHIDprotectedstatic
GetAddress()HIDCompositeinlinevirtual
FindInterface(uint8_t iface, uint8_t alt, uint8_t proto)HIDCompositeprotected
GetAddress()HIDCompositeinlinevirtual
GetHidClassDescrLen(uint8_t type, uint8_t num)HIDCompositeprotected
GetHidDescr(uint8_t ep, uint16_t nbytes, uint8_t *dataptr)USBHID
GetIdle(uint8_t iface, uint8_t reportID, uint8_t *dataptr)USBHID
GetProtocol(uint8_t iface, uint8_t *dataptr)USBHID
HIDComposite(USB *p)HIDComposite
hidInterfacesHIDCompositeprotected
Init(uint8_t parent, uint8_t port, bool lowspeed)HIDCompositevirtual
isReady()HIDCompositeinlinevirtual
maxEpPerInterfaceUSBHIDprotectedstatic
maxHidInterfacesUSBHIDprotectedstatic
OnInitSuccessful()HIDCompositeinlineprotectedvirtual
ParseHIDData(USBHID *hid, uint8_t ep, bool is_rpt_id, uint8_t len, uint8_t *buf)HIDCompositeinlineprotectedvirtual
PIDHIDCompositeprotected
Poll()HIDCompositevirtual
Initialize()HIDCompositeprotected
isReady()HIDCompositeinlinevirtual
maxEpPerInterfaceUSBHIDprotectedstatic
maxHidInterfacesUSBHIDprotectedstatic
OnInitSuccessful()HIDCompositeinlineprotectedvirtual
ParseHIDData(USBHID *hid, uint8_t ep, bool is_rpt_id, uint8_t len, uint8_t *buf)HIDCompositeinlineprotectedvirtual
PIDHIDCompositeprotected
Poll()HIDCompositevirtual
pollIntervalHIDCompositeprotected
PrintEndpointDescriptor(const USB_ENDPOINT_DESCRIPTOR *ep_ptr)USBHIDprotected
PrintHidDescriptor(const USB_HID_DESCRIPTOR *pDesc)USBHIDprotected
pUsbUSBHIDprotected
Release()HIDCompositevirtual
ResetHubPort(uint8_t port)USBDeviceConfiginlinevirtual
qNextPollTimeHIDCompositeprotected
Release()HIDCompositevirtual
ResetHubPort(uint8_t port)USBDeviceConfiginlinevirtual
rptParsersHIDCompositeprotected
SelectInterface(uint8_t iface, uint8_t proto)=0HIDCompositepure virtual
SetIdle(uint8_t iface, uint8_t reportID, uint8_t duration)USBHID
SetProtocol(uint8_t iface, uint8_t protocol)USBHID
USBHID(USB *pusb)USBHIDinline
VIDHIDCompositeprotected
VIDPIDOK(uint16_t vid, uint16_t pid)USBDeviceConfiginlinevirtual
ZeroMemory(uint8_t len, uint8_t *buf)HIDCompositeprotected
HIDComposite Class Referenceabstract
@@ -76,9 +77,12 @@ Inheritance diagram for HIDComposite:
Inheritance graph
+ + +
[legend]
@@ -86,15 +90,26 @@ Collaboration diagram for HIDComposite:
Collaboration graph
- - - - - - + + + + + + + + + +
[legend]
+ + + + + +

+Classes

struct  HIDInterface
 
struct  ReportParser
 
@@ -152,6 +167,14 @@ Public Member Functions

Public Member Functions

 HIDComposite (USB *p)
+ + + + + + + + @@ -166,9 +189,25 @@ Protected Member Functions

Protected Member Functions

uint16_t GetHidClassDescrLen (uint8_t type, uint8_t num)
 
void Initialize ()
 
HIDInterfaceFindInterface (uint8_t iface, uint8_t alt, uint8_t proto)
 
void ZeroMemory (uint8_t len, uint8_t *buf)
 
HIDReportParserGetReportParser (uint8_t id)
 
virtual uint8_t OnInitSuccessful ()
+ + + + + + + + + + + + + + + + - + @@ -182,8 +221,10 @@ Protected Attributes

Protected Attributes

struct HIDComposite::ReportParser rptParsers [MAX_REPORT_PARSERS]
 
HID_CLASS_DESCRIPTOR_LEN_AND_TYPE descrInfo [HID_MAX_HID_CLASS_DESCRIPTORS]
 
uint8_t bConfNum
 
uint8_t bNumIface
 
uint8_t bNumEP
 
uint32_t qNextPollTime
 
uint8_t pollInterval
 
bool bPollEnable
 
EpInfo epInfo [totalEndpoints]
 
HIDInterface hidInterfaces [maxHidInterfaces]
HIDInterface hidInterfaces [maxHidInterfaces]
 
bool bHasReportId
 
uint8_t bAddress
 
- + + + @@ -221,6 +262,153 @@ Additional Inherited Members

Member Function Documentation

+ +

◆ GetHidClassDescrLen()

+ +
+
+

-Additional Inherited Members

+Static Protected Attributes

static const uint16_t constBuffLen = 64
 
- Static Protected Attributes inherited from USBHID
static const uint8_t epInterruptInIndex = 1
 
+ + + + +
+ + + + + + + + + + + + + + + + + + +
uint16_t HIDComposite::GetHidClassDescrLen (uint8_t type,
uint8_t num 
)
+
+protected
+
+ +

Definition at line 32 of file hidcomposite.cpp.

+ +
+ + +

◆ Initialize()

+ +
+
+ + + + + +
+ + + + + + + +
void HIDComposite::Initialize ()
+
+protected
+
+ +

Definition at line 43 of file hidcomposite.cpp.

+ +
+
+ +

◆ FindInterface()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
HIDComposite::HIDInterface * HIDComposite::FindInterface (uint8_t iface,
uint8_t alt,
uint8_t proto 
)
+
+protected
+
+ +

Definition at line 289 of file hidcomposite.cpp.

+ +
+
+ +

◆ ZeroMemory()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void HIDComposite::ZeroMemory (uint8_t len,
uint8_t * buf 
)
+
+protected
+
+ +

Definition at line 364 of file hidcomposite.cpp.

+ +
+

◆ GetReportParser()

@@ -274,7 +462,9 @@ Additional Inherited Members
-

Definition at line 71 of file hidcomposite.h.

+

Reimplemented in PSBuzz, and PS4USB.

+ +

Definition at line 76 of file hidcomposite.h.

@@ -330,7 +520,7 @@ Additional Inherited Members
-

Definition at line 75 of file hidcomposite.h.

+

Definition at line 80 of file hidcomposite.h.

@@ -474,6 +664,8 @@ Additional Inherited Members

Reimplemented from USBDeviceConfig.

+

Reimplemented in HIDUniversal.

+

Definition at line 369 of file hidcomposite.cpp.

@@ -503,7 +695,7 @@ Additional Inherited Members

Reimplemented from USBDeviceConfig.

-

Definition at line 90 of file hidcomposite.h.

+

Definition at line 95 of file hidcomposite.h.

@@ -530,7 +722,7 @@ Additional Inherited Members
-

Definition at line 94 of file hidcomposite.h.

+

Definition at line 99 of file hidcomposite.h.

@@ -588,6 +780,8 @@ Additional Inherited Members

Reimplemented from UsbConfigXtracter.

+

Reimplemented in HIDUniversal.

+

Definition at line 297 of file hidcomposite.cpp.

@@ -659,6 +853,220 @@ Additional Inherited Members

Member Data Documentation

+ +

◆ rptParsers

+ +
+
+ + + + + +
+ + + + +
struct HIDComposite::ReportParser HIDComposite::rptParsers[MAX_REPORT_PARSERS]
+
+protected
+
+ +
+
+ +

◆ descrInfo

+ +
+
+ + + + + +
+ + + + +
HID_CLASS_DESCRIPTOR_LEN_AND_TYPE HIDComposite::descrInfo[HID_MAX_HID_CLASS_DESCRIPTORS]
+
+protected
+
+ +

Definition at line 34 of file hidcomposite.h.

+ +
+
+ +

◆ bConfNum

+ +
+
+ + + + + +
+ + + + +
uint8_t HIDComposite::bConfNum
+
+protected
+
+ +

Definition at line 48 of file hidcomposite.h.

+ +
+
+ +

◆ bNumIface

+ +
+
+ + + + + +
+ + + + +
uint8_t HIDComposite::bNumIface
+
+protected
+
+ +

Definition at line 49 of file hidcomposite.h.

+ +
+
+ +

◆ bNumEP

+ +
+
+ + + + + +
+ + + + +
uint8_t HIDComposite::bNumEP
+
+protected
+
+ +

Definition at line 50 of file hidcomposite.h.

+ +
+
+ +

◆ qNextPollTime

+ +
+
+ + + + + +
+ + + + +
uint32_t HIDComposite::qNextPollTime
+
+protected
+
+ +

Definition at line 51 of file hidcomposite.h.

+ +
+
+ +

◆ pollInterval

+ +
+
+ + + + + +
+ + + + +
uint8_t HIDComposite::pollInterval
+
+protected
+
+ +

Definition at line 52 of file hidcomposite.h.

+ +
+
+ +

◆ bPollEnable

+ +
+
+ + + + + +
+ + + + +
bool HIDComposite::bPollEnable
+
+protected
+
+ +

Definition at line 53 of file hidcomposite.h.

+ +
+
+ +

◆ constBuffLen

+ +
+
+ + + + + +
+ + + + +
const uint16_t HIDComposite::constBuffLen = 64
+
+staticprotected
+
+ +

Definition at line 55 of file hidcomposite.h.

+ +
+

◆ epInfo

@@ -679,7 +1087,7 @@ Additional Inherited Members
-

Definition at line 61 of file hidcomposite.h.

+

Definition at line 63 of file hidcomposite.h.

@@ -693,7 +1101,7 @@ Additional Inherited Members - +
HIDInterface HIDComposite::hidInterfaces[maxHidInterfaces]HIDInterface HIDComposite::hidInterfaces[maxHidInterfaces]
@@ -703,7 +1111,7 @@ Additional Inherited Members
-

Definition at line 62 of file hidcomposite.h.

+

Definition at line 64 of file hidcomposite.h.

@@ -727,7 +1135,7 @@ Additional Inherited Members
-

Definition at line 64 of file hidcomposite.h.

+

Definition at line 69 of file hidcomposite.h.

@@ -751,7 +1159,7 @@ Additional Inherited Members
-

Definition at line 66 of file hidcomposite.h.

+

Definition at line 71 of file hidcomposite.h.

@@ -775,7 +1183,7 @@ Additional Inherited Members
-

Definition at line 66 of file hidcomposite.h.

+

Definition at line 71 of file hidcomposite.h.

diff --git a/class_h_i_d_composite__coll__graph.map b/class_h_i_d_composite__coll__graph.map index d7ae0f68..ed634bfd 100644 --- a/class_h_i_d_composite__coll__graph.map +++ b/class_h_i_d_composite__coll__graph.map @@ -1,8 +1,12 @@ - - - - - - + + + + + + + + + + diff --git a/class_h_i_d_composite__coll__graph.md5 b/class_h_i_d_composite__coll__graph.md5 index 8c822c0b..e821c52e 100644 --- a/class_h_i_d_composite__coll__graph.md5 +++ b/class_h_i_d_composite__coll__graph.md5 @@ -1 +1 @@ -53a6c18af1475d71fd895b0881f48e79 \ No newline at end of file +3f9346dcd1abe9337a6e311a46ba14f4 \ No newline at end of file diff --git a/class_h_i_d_composite__coll__graph.png b/class_h_i_d_composite__coll__graph.png index 76bf03c9567ad5020e2939c5c14ba536202d7896..0e13d5c50dd23d668507a423976e0a0b13aa2035 100644 GIT binary patch literal 32360 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 O8iS{+pUXO@geCwy-3PP) diff --git a/class_h_i_d_composite__inherit__graph.map b/class_h_i_d_composite__inherit__graph.map index 408d5f41..4959edcc 100644 --- a/class_h_i_d_composite__inherit__graph.map +++ b/class_h_i_d_composite__inherit__graph.map @@ -1,5 +1,8 @@ + + + diff --git a/class_h_i_d_composite__inherit__graph.md5 b/class_h_i_d_composite__inherit__graph.md5 index 8e8d4518..995c3b05 100644 --- a/class_h_i_d_composite__inherit__graph.md5 +++ b/class_h_i_d_composite__inherit__graph.md5 @@ -1 +1 @@ -5365f14a032a8fd6dcc87df5954edbd5 \ No newline at end of file +55a554165c31a4332eebfdfa1938f9a4 \ No newline at end of file diff --git a/class_h_i_d_composite__inherit__graph.png b/class_h_i_d_composite__inherit__graph.png index f596e486718d8a126bbcc84ad40c2dd28daf665f..a67d180a373a53e91d76ec2b1a8c8ad660d465b3 100644 GIT binary patch literal 12378 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

1c%(vgT?6R3WtW| zRVbL4nEtX$kS!I*#>W1osU?hJzZMt4#^O<#fnK;u`R`?A%qW35g@rSo*5&`MvlyiF zX~X)<(2)>>;^5>Apf;ZgAZP!h7fQbQP06g#VaK+xlBq1xS?ZYVf ztzHwHQ6fkAKa?JPvH!^NQE^BCopS+gf!F7|ON)yD^8G3QtI8c=IX5kWN(ej&0Gr%D z+Kdy!FOp>?&@%bm0fl1)0?io^N)F!xq5gDOYV?n7;|B_H*^F* zKT*cof{|Yn`S%Ue6g>=HB{V7i|F)@P;9uc0;6Cw~k`=7q$=Akg!G7du;kqi81 P0R$NdMezzTqk#VfWu;?j literal 8756 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 is the complete list of members for HIDUniversal, including all inherited members.

- + + + + + + + - - + + - + + + - + - - - - + + + + + + - + - - - - - - + + + + + + + + - - - - - - - - - + + + + + + + + + + +
bAddressUSBHIDprotected
bHasReportIdHIDUniversalprotected
bConfNumHIDCompositeprotected
bHasReportIdHIDCompositeprotected
bNumEPHIDCompositeprotected
bNumIfaceHIDCompositeprotected
bPollEnableHIDCompositeprotected
ConfigureDevice(uint8_t parent, uint8_t port, bool lowspeed)USBDeviceConfiginlinevirtual
constBuffLenHIDCompositeprotectedstatic
descrInfoHIDCompositeprotected
DEVCLASSOK(uint8_t klass)USBDeviceConfiginlinevirtual
DEVSUBCLASSOK(uint8_t subklass)USBDeviceConfiginlinevirtual
EndpointXtract(uint8_t conf, uint8_t iface, uint8_t alt, uint8_t proto, const USB_ENDPOINT_DESCRIPTOR *ep)HIDUniversalvirtual
epInfoHIDUniversalprotected
EndpointXtract(uint8_t conf, uint8_t iface, uint8_t alt, uint8_t proto, const USB_ENDPOINT_DESCRIPTOR *ep) overrideHIDUniversalinlinevirtual
epInfoHIDCompositeprotected
epInterruptInIndexUSBHIDprotectedstatic
epInterruptOutIndexUSBHIDprotectedstatic
GetAddress()HIDUniversalinlinevirtual
FindInterface(uint8_t iface, uint8_t alt, uint8_t proto)HIDCompositeprotected
GetAddress()HIDCompositeinlinevirtual
GetHidClassDescrLen(uint8_t type, uint8_t num)HIDCompositeprotected
GetHidDescr(uint8_t ep, uint16_t nbytes, uint8_t *dataptr)USBHID
GetIdle(uint8_t iface, uint8_t reportID, uint8_t *dataptr)USBHID
GetProtocol(uint8_t iface, uint8_t *dataptr)USBHID
GetReport(uint8_t ep, uint8_t iface, uint8_t report_type, uint8_t report_id, uint16_t nbytes, uint8_t *dataptr)USBHID
GetReportDescr(uint16_t wIndex, USBReadParser *parser=NULL)USBHID
GetReportParser(uint8_t id)HIDUniversalprotectedvirtual
GetReportParser(uint8_t id)HIDCompositeprotectedvirtual
GetUsb()USBHIDinline
hidInterfacesHIDUniversalprotected
HIDUniversal(USB *p)HIDUniversal
Init(uint8_t parent, uint8_t port, bool lowspeed)HIDUniversalvirtual
isReady()HIDUniversalinlinevirtual
HIDComposite(USB *p)HIDComposite
hidInterfacesHIDCompositeprotected
HIDUniversal(USB *p)HIDUniversalinline
Init(uint8_t parent, uint8_t port, bool lowspeed)HIDCompositevirtual
Initialize()HIDCompositeprotected
isReady()HIDCompositeinlinevirtual
maxEpPerInterfaceUSBHIDprotectedstatic
maxHidInterfacesUSBHIDprotectedstatic
OnInitSuccessful()HIDUniversalinlineprotectedvirtual
OnInitSuccessful()HIDCompositeinlineprotectedvirtual
ParseHIDData(USBHID *hid, bool is_rpt_id, uint8_t len, uint8_t *buf)HIDUniversalinlineprotectedvirtual
PIDHIDUniversalprotected
Poll()HIDUniversalvirtual
PrintEndpointDescriptor(const USB_ENDPOINT_DESCRIPTOR *ep_ptr)USBHIDprotected
PrintHidDescriptor(const USB_HID_DESCRIPTOR *pDesc)USBHIDprotected
pUsbUSBHIDprotected
Release()HIDUniversalvirtual
PIDHIDCompositeprotected
Poll() overrideHIDUniversalvirtual
pollIntervalHIDCompositeprotected
PrintEndpointDescriptor(const USB_ENDPOINT_DESCRIPTOR *ep_ptr)USBHIDprotected
PrintHidDescriptor(const USB_HID_DESCRIPTOR *pDesc)USBHIDprotected
pUsbUSBHIDprotected
qNextPollTimeHIDCompositeprotected
Release()HIDCompositevirtual
ResetHubPort(uint8_t port)USBDeviceConfiginlinevirtual
SetIdle(uint8_t iface, uint8_t reportID, uint8_t duration)USBHID
SetProtocol(uint8_t iface, uint8_t protocol)USBHID
SetReport(uint8_t ep, uint8_t iface, uint8_t report_type, uint8_t report_id, uint16_t nbytes, uint8_t *dataptr)USBHID
SetReportParser(uint8_t id, HIDReportParser *prs)HIDUniversalvirtual
SndRpt(uint16_t nbytes, uint8_t *dataptr)HIDUniversal
totalEndpointsUSBHIDprotectedstatic
USBHID(USB *pusb)USBHIDinline
VIDHIDUniversalprotected
VIDPIDOK(uint16_t vid, uint16_t pid)USBDeviceConfiginlinevirtual
rptParsersHIDCompositeprotected
SetIdle(uint8_t iface, uint8_t reportID, uint8_t duration)USBHID
SetProtocol(uint8_t iface, uint8_t protocol)USBHID
SetReport(uint8_t ep, uint8_t iface, uint8_t report_type, uint8_t report_id, uint16_t nbytes, uint8_t *dataptr)USBHID
SetReportParser(uint8_t id, HIDReportParser *prs)HIDCompositevirtual
SndRpt(uint16_t nbytes, uint8_t *dataptr)HIDComposite
totalEndpointsUSBHIDprotectedstatic
USBHID(USB *pusb)USBHIDinline
VIDHIDCompositeprotected
VIDPIDOK(uint16_t vid, uint16_t pid)USBDeviceConfiginlinevirtual
ZeroMemory(uint8_t len, uint8_t *buf)HIDCompositeprotected