From 32e9b6197f863bc334b8440c76c9e8b7d1cccf6e Mon Sep 17 00:00:00 2001 From: Kristian Sloth Lauszus Date: Mon, 1 Apr 2013 22:52:24 +0200 Subject: [PATCH] Update after formatting --- Doxyfile | 8 +- _b_t_d_8cpp.html | 2 +- _b_t_d_8cpp__incl.map | 24 +- _b_t_d_8cpp__incl.md5 | 2 +- _b_t_d_8cpp__incl.png | Bin 84031 -> 75685 bytes _b_t_d_8cpp_source.html | 2299 +-- _b_t_d_8h.html | 264 +- _b_t_d_8h__incl.map | 22 +- _b_t_d_8h__incl.md5 | 2 +- _b_t_d_8h__incl.png | Bin 82330 -> 74571 bytes _b_t_d_8h_source.html | 446 +- _p_s3_b_t_8cpp.html | 29 +- _p_s3_b_t_8cpp__incl.map | 30 +- _p_s3_b_t_8cpp__incl.md5 | 2 +- _p_s3_b_t_8cpp__incl.png | Bin 86603 -> 78904 bytes _p_s3_b_t_8cpp_source.html | 1267 +- _p_s3_b_t_8h.html | 2 +- _p_s3_b_t_8h__incl.map | 28 +- _p_s3_b_t_8h__incl.md5 | 2 +- _p_s3_b_t_8h__incl.png | Bin 85679 -> 77388 bytes _p_s3_b_t_8h_source.html | 153 +- _p_s3_enums_8h.html | 123 +- _p_s3_enums_8h_source.html | 243 +- _p_s3_u_s_b_8cpp.html | 50 +- _p_s3_u_s_b_8cpp__incl.map | 24 +- _p_s3_u_s_b_8cpp__incl.md5 | 2 +- _p_s3_u_s_b_8cpp__incl.png | Bin 61085 -> 53967 bytes _p_s3_u_s_b_8cpp_source.html | 1017 +- _p_s3_u_s_b_8h.html | 2 +- _p_s3_u_s_b_8h__incl.map | 22 +- _p_s3_u_s_b_8h__incl.md5 | 2 +- _p_s3_u_s_b_8h__incl.png | Bin 59564 -> 52120 bytes _p_s3_u_s_b_8h_source.html | 135 +- _r_e_a_d_m_e_8md_source.html | 237 +- _s_p_p_8cpp.html | 44 +- _s_p_p_8cpp__incl.map | 26 +- _s_p_p_8cpp__incl.md5 | 2 +- _s_p_p_8cpp__incl.png | Bin 85679 -> 77085 bytes _s_p_p_8cpp_source.html | 1793 +- _s_p_p_8h.html | 2 +- _s_p_p_8h__incl.map | 24 +- _s_p_p_8h__incl.md5 | 2 +- _s_p_p_8h__incl.png | Bin 83907 -> 75559 bytes _s_p_p_8h_source.html | 253 +- _usb_8cpp.html | 2 +- _usb_8cpp__incl.map | 16 +- _usb_8cpp__incl.md5 | 2 +- _usb_8cpp__incl.png | Bin 57611 -> 54015 bytes _usb_8cpp_source.html | 1154 +- _usb_8h.html | 126 +- _usb_8h__incl.map | 16 +- _usb_8h__incl.md5 | 2 +- _usb_8h__incl.png | Bin 45102 -> 42824 bytes _usb_8h_source.html | 517 +- _wii_8cpp.html | 110 +- _wii_8cpp__incl.map | 28 +- _wii_8cpp__incl.md5 | 2 +- _wii_8cpp__incl.png | Bin 88012 -> 79252 bytes _wii_8cpp_source.html | 2245 +-- _wii_8h.html | 2 +- _wii_8h__incl.map | 26 +- _wii_8h__incl.md5 | 2 +- _wii_8h__incl.png | Bin 86180 -> 77804 bytes _wii_8h_source.html | 380 +- _wii_camera_readme_8md_source.html | 10 +- _x_b_o_x_r_e_c_v_8cpp.html | 2 +- _x_b_o_x_r_e_c_v_8cpp__incl.map | 24 +- _x_b_o_x_r_e_c_v_8cpp__incl.md5 | 2 +- _x_b_o_x_r_e_c_v_8cpp__incl.png | Bin 61354 -> 54310 bytes _x_b_o_x_r_e_c_v_8cpp_source.html | 936 +- _x_b_o_x_r_e_c_v_8h.html | 2 +- _x_b_o_x_r_e_c_v_8h__incl.map | 22 +- _x_b_o_x_r_e_c_v_8h__incl.md5 | 2 +- _x_b_o_x_r_e_c_v_8h__incl.png | Bin 59593 -> 52244 bytes _x_b_o_x_r_e_c_v_8h_source.html | 132 +- _x_b_o_x_u_s_b_8cpp.html | 2 +- _x_b_o_x_u_s_b_8cpp__incl.map | 24 +- _x_b_o_x_u_s_b_8cpp__incl.md5 | 2 +- _x_b_o_x_u_s_b_8cpp__incl.png | Bin 61034 -> 54048 bytes _x_b_o_x_u_s_b_8cpp_source.html | 605 +- _x_b_o_x_u_s_b_8h.html | 2 +- _x_b_o_x_u_s_b_8h__incl.map | 22 +- _x_b_o_x_u_s_b_8h__incl.md5 | 2 +- _x_b_o_x_u_s_b_8h__incl.png | Bin 59468 -> 52086 bytes _x_b_o_x_u_s_b_8h_source.html | 121 +- address_8h.html | 16 +- address_8h_source.html | 496 +- adk_8cpp.html | 2 +- adk_8cpp__incl.map | 24 +- adk_8cpp__incl.md5 | 2 +- adk_8cpp__incl.png | Bin 131963 -> 127501 bytes adk_8cpp_source.html | 633 +- adk_8h.html | 42 +- adk_8h__incl.map | 22 +- adk_8h__incl.md5 | 2 +- adk_8h__incl.png | Bin 130112 -> 126136 bytes adk_8h_source.html | 194 +- annotated.html | 4 +- avrpins_8h.html | 2 + avrpins_8h_source.html | 1194 +- cdcacm_8cpp.html | 2 +- cdcacm_8cpp__incl.map | 24 +- cdcacm_8cpp__incl.md5 | 2 +- cdcacm_8cpp__incl.png | Bin 131930 -> 127370 bytes cdcacm_8cpp_source.html | 611 +- cdcacm_8h.html | 144 +- cdcacm_8h__incl.map | 22 +- cdcacm_8h__incl.md5 | 2 +- cdcacm_8h__incl.png | Bin 130020 -> 125912 bytes cdcacm_8h_source.html | 216 +- cdcftdi_8cpp.html | 2 +- cdcftdi_8cpp__incl.map | 24 +- cdcftdi_8cpp__incl.md5 | 2 +- cdcftdi_8cpp__incl.png | Bin 131775 -> 127174 bytes cdcftdi_8cpp_source.html | 603 +- cdcftdi_8h.html | 4 +- cdcftdi_8h__incl.map | 22 +- cdcftdi_8h__incl.md5 | 2 +- cdcftdi_8h__incl.png | Bin 129946 -> 126075 bytes cdcftdi_8h_source.html | 111 +- cdcprolific_8cpp.html | 2 +- cdcprolific_8cpp__incl.map | 26 +- cdcprolific_8cpp__incl.md5 | 2 +- cdcprolific_8cpp__incl.png | Bin 209247 -> 205761 bytes cdcprolific_8cpp_source.html | 389 +- cdcprolific_8h.html | 77 +- cdcprolific_8h__incl.map | 24 +- cdcprolific_8h__incl.md5 | 2 +- cdcprolific_8h__incl.png | Bin 207900 -> 204104 bytes cdcprolific_8h_source.html | 184 +- class_a_c_m-members.html | 17 +- class_a_c_m.html | 139 +- class_a_d_k.html | 34 +- class_address_pool.html | 2 +- class_address_pool_impl.html | 12 +- class_b_t_d-members.html | 36 +- class_b_t_d.html | 170 +- class_bluetooth_service.html | 2 +- class_bulk_only-members.html | 49 +- class_bulk_only.html | 519 +- class_byte_skipper.html | 8 +- class_c_d_c_async_oper.html | 2 +- class_config_desc_parser.html | 6 +- class_f_t_d_i.html | 24 +- class_h_i_d.html | 36 +- class_h_i_d_boot.html | 16 +- class_h_i_d_report_parser.html | 2 +- class_h_i_d_universal.html | 18 +- class_hex_dumper.html | 12 +- class_keyboard_report_parser-members.html | 4 +- class_keyboard_report_parser.html | 40 +- class_m_a_x3421e.html | 28 +- class_max___l_c_d.html | 38 +- class_mouse_report_parser-members.html | 2 +- class_mouse_report_parser.html | 24 +- class_multi_byte_value_parser.html | 6 +- class_p_l2303-members.html | 17 +- class_p_l2303.html | 10 +- class_p_s3_b_t-members.html | 8 +- class_p_s3_b_t.html | 131 +- class_p_s3_u_s_b-members.html | 10 +- class_p_s3_u_s_b.html | 135 +- class_p_t_p_list_parser.html | 10 +- class_report_desc_parser-members.html | 102 +- class_report_desc_parser.html | 206 +- class_report_desc_parser2-members.html | 102 +- class_report_desc_parser2.html | 210 +- class_report_desc_parser_base-members.html | 102 +- class_report_desc_parser_base.html | 1565 +- class_s_p_p-members.html | 41 +- class_s_p_p.html | 526 +- class_s_pi.html | 4 +- class_t_com.html | 12 +- class_t_pin.html | 24 +- class_tp___tc.html | 8 +- class_u_s_b.html | 44 +- class_u_s_b_device_config.html | 10 +- class_u_s_b_hub.html | 26 +- class_u_s_b_read_parser.html | 2 +- class_universal_report_parser.html | 4 +- class_usb_config_xtracter.html | 4 +- class_w_i_i-members.html | 12 +- class_w_i_i.html | 167 +- class_x_b_o_x_r_e_c_v.html | 46 +- class_x_b_o_x_u_s_b.html | 39 +- classes.html | 4 +- confdescparser_8h.html | 12 +- confdescparser_8h__incl.map | 8 +- confdescparser_8h__incl.md5 | 2 +- confdescparser_8h__incl.png | Bin 33084 -> 34481 bytes confdescparser_8h_source.html | 382 +- controller_enums_8h.html | 4 +- controller_enums_8h_source.html | 134 +- functions.html | 6 +- functions_0x62.html | 44 +- functions_0x63.html | 30 +- functions_0x64.html | 12 +- functions_0x67.html | 37 +- functions_0x68.html | 8 +- functions_0x69.html | 17 +- functions_0x6b.html | 2 +- functions_0x6c.html | 2 +- functions_0x6d.html | 22 +- functions_0x6f.html | 1 + functions_0x70.html | 52 +- functions_0x72.html | 9 +- functions_0x73.html | 43 +- functions_0x74.html | 12 +- functions_0x75.html | 4 +- functions_0x76.html | 4 +- functions_0x77.html | 12 +- functions_func_0x67.html | 27 +- functions_func_0x68.html | 8 +- functions_func_0x69.html | 11 +- functions_func_0x6d.html | 13 +- functions_func_0x6f.html | 1 + functions_func_0x70.html | 30 +- functions_func_0x72.html | 22 +- functions_func_0x73.html | 38 +- functions_func_0x77.html | 3 + functions_vars.html | 6 +- functions_vars_0x62.html | 32 +- functions_vars_0x63.html | 30 +- functions_vars_0x64.html | 12 +- functions_vars_0x67.html | 16 +- functions_vars_0x6b.html | 2 +- functions_vars_0x6c.html | 2 +- functions_vars_0x6d.html | 10 +- functions_vars_0x70.html | 2 +- functions_vars_0x72.html | 7 +- functions_vars_0x73.html | 12 +- functions_vars_0x74.html | 12 +- functions_vars_0x75.html | 4 +- functions_vars_0x76.html | 4 +- functions_vars_0x77.html | 9 +- globals_0x61.html | 6 +- globals_0x62.html | 8 +- globals_0x63.html | 6 - globals_0x64.html | 8 +- globals_0x68.html | 7 +- globals_0x6c.html | 7 +- globals_0x6d.html | 33 + globals_0x6e.html | 39 +- globals_0x6f.html | 3 + globals_0x70.html | 2604 ++- globals_0x72.html | 9 +- globals_0x73.html | 27 +- globals_0x74.html | 5 +- globals_0x75.html | 4 + globals_0x78.html | 11 +- globals_defs_0x61.html | 3 - globals_defs_0x63.html | 6 - globals_defs_0x64.html | 6 +- globals_defs_0x68.html | 3 + globals_defs_0x6c.html | 7 +- globals_defs_0x6d.html | 30 + globals_defs_0x6e.html | 19 +- globals_defs_0x72.html | 6 - globals_defs_0x73.html | 24 +- globals_defs_0x78.html | 15 +- globals_eval.html | 3 - globals_func.html | 37 +- globals_type.html | 2 +- globals_vars.html | 29 +- globals_vars_0x62.html | 124 + globals_vars_0x6c.html | 124 + globals_vars_0x6d.html | 123 + globals_vars_0x6f.html | 123 + globals_vars_0x70.html | 2703 +++ globals_vars_0x72.html | 123 + globals_vars_0x75.html | 124 + globals_vars_0x78.html | 126 + hexdump_8h.html | 5 +- hexdump_8h__dep__incl.map | 84 +- hexdump_8h__dep__incl.md5 | 2 +- hexdump_8h__dep__incl.png | Bin 118927 -> 169728 bytes hexdump_8h__incl.map | 1 - hexdump_8h__incl.md5 | 2 +- hexdump_8h__incl.png | Bin 6344 -> 3944 bytes hexdump_8h_source.html | 78 +- hid_8cpp.html | 2 +- hid_8cpp__incl.map | 26 +- hid_8cpp__incl.md5 | 2 +- hid_8cpp__incl.png | Bin 140000 -> 133453 bytes hid_8cpp_source.html | 138 +- hid_8h.html | 42 +- hid_8h__incl.map | 24 +- hid_8h__incl.md5 | 2 +- hid_8h__incl.png | Bin 138522 -> 131410 bytes hid_8h_source.html | 164 +- hidboot_8cpp.html | 26 +- hidboot_8cpp__incl.map | 28 +- hidboot_8cpp__incl.md5 | 2 +- hidboot_8cpp__incl.png | Bin 211854 -> 211020 bytes hidboot_8cpp_source.html | 251 +- hidboot_8h.html | 12 +- hidboot_8h__incl.map | 26 +- hidboot_8h__incl.md5 | 2 +- hidboot_8h__incl.png | Bin 210272 -> 208733 bytes hidboot_8h_source.html | 830 +- hidescriptorparser_8cpp.html | 44 +- hidescriptorparser_8cpp__incl.map | 28 +- hidescriptorparser_8cpp__incl.md5 | 2 +- hidescriptorparser_8cpp__incl.png | Bin 218456 -> 209119 bytes hidescriptorparser_8cpp_source.html | 3315 ++-- hidescriptorparser_8h.html | 2 +- hidescriptorparser_8h__incl.map | 26 +- hidescriptorparser_8h__incl.md5 | 2 +- hidescriptorparser_8h__incl.png | Bin 216566 -> 206983 bytes hidescriptorparser_8h_source.html | 302 +- hiduniversal_8cpp.html | 2 +- hiduniversal_8cpp__incl.map | 28 +- hiduniversal_8cpp__incl.md5 | 2 +- hiduniversal_8cpp__incl.png | Bin 142187 -> 135331 bytes hiduniversal_8cpp_source.html | 760 +- hiduniversal_8h.html | 2 +- hiduniversal_8h__incl.map | 26 +- hiduniversal_8h__incl.md5 | 2 +- hiduniversal_8h__incl.png | Bin 140227 -> 133699 bytes hiduniversal_8h_source.html | 136 +- hidusagestr_8h.html | 13738 +++++++++++++++- hidusagestr_8h_source.html | 1784 +- hidusagetitlearrays_8cpp_source.html | 544 +- hierarchy.html | 132 +- index.html | 4 +- inherit_graph_10.map | 2 +- inherit_graph_10.md5 | 2 +- inherit_graph_10.png | Bin 615 -> 1156 bytes inherit_graph_11.map | 2 +- inherit_graph_11.md5 | 2 +- inherit_graph_11.png | Bin 1156 -> 3144 bytes inherit_graph_12.map | 2 +- inherit_graph_12.md5 | 2 +- inherit_graph_12.png | Bin 3144 -> 1897 bytes inherit_graph_13.map | 2 +- inherit_graph_13.md5 | 2 +- inherit_graph_13.png | Bin 1897 -> 883 bytes inherit_graph_14.map | 5 +- inherit_graph_14.md5 | 2 +- inherit_graph_14.png | Bin 883 -> 6052 bytes inherit_graph_15.map | 5 +- inherit_graph_15.md5 | 2 +- inherit_graph_15.png | Bin 6052 -> 1057 bytes inherit_graph_16.map | 2 +- inherit_graph_16.md5 | 2 +- inherit_graph_16.png | Bin 1057 -> 781 bytes inherit_graph_17.map | 2 +- inherit_graph_17.md5 | 2 +- inherit_graph_17.png | Bin 781 -> 1094 bytes inherit_graph_18.map | 2 +- inherit_graph_18.md5 | 2 +- inherit_graph_18.png | Bin 1094 -> 813 bytes inherit_graph_19.map | 2 +- inherit_graph_19.md5 | 2 +- inherit_graph_19.png | Bin 813 -> 765 bytes inherit_graph_20.map | 2 +- inherit_graph_20.md5 | 2 +- inherit_graph_20.png | Bin 765 -> 987 bytes inherit_graph_21.map | 2 +- inherit_graph_21.md5 | 2 +- inherit_graph_21.png | Bin 987 -> 1126 bytes inherit_graph_22.map | 3 +- inherit_graph_22.md5 | 2 +- inherit_graph_22.png | Bin 1126 -> 2114 bytes inherit_graph_23.map | 3 +- inherit_graph_23.md5 | 2 +- inherit_graph_23.png | Bin 2114 -> 768 bytes inherit_graph_24.map | 2 +- inherit_graph_24.md5 | 2 +- inherit_graph_24.png | Bin 768 -> 1165 bytes inherit_graph_25.map | 2 +- inherit_graph_25.md5 | 2 +- inherit_graph_25.png | Bin 1165 -> 928 bytes inherit_graph_26.map | 2 +- inherit_graph_26.md5 | 2 +- inherit_graph_26.png | Bin 928 -> 1279 bytes inherit_graph_27.map | 2 +- inherit_graph_27.md5 | 2 +- inherit_graph_27.png | Bin 1279 -> 1021 bytes inherit_graph_28.map | 2 +- inherit_graph_28.md5 | 2 +- inherit_graph_28.png | Bin 1021 -> 850 bytes inherit_graph_29.map | 2 +- inherit_graph_29.md5 | 2 +- inherit_graph_29.png | Bin 850 -> 1276 bytes inherit_graph_30.map | 2 +- inherit_graph_30.md5 | 2 +- inherit_graph_30.png | Bin 1276 -> 844 bytes inherit_graph_31.map | 2 +- inherit_graph_31.md5 | 2 +- inherit_graph_31.png | Bin 844 -> 1468 bytes inherit_graph_32.map | 2 +- inherit_graph_32.md5 | 2 +- inherit_graph_32.png | Bin 1468 -> 1153 bytes inherit_graph_33.map | 2 +- inherit_graph_33.md5 | 2 +- inherit_graph_33.png | Bin 1153 -> 1403 bytes inherit_graph_34.map | 2 +- inherit_graph_34.md5 | 2 +- inherit_graph_34.png | Bin 1403 -> 1035 bytes inherit_graph_35.map | 2 +- inherit_graph_35.md5 | 2 +- inherit_graph_35.png | Bin 1035 -> 1044 bytes inherit_graph_36.map | 2 +- inherit_graph_36.md5 | 2 +- inherit_graph_36.png | Bin 1044 -> 1803 bytes inherit_graph_37.map | 2 +- inherit_graph_37.md5 | 2 +- inherit_graph_37.png | Bin 1803 -> 1509 bytes inherit_graph_38.map | 2 +- inherit_graph_38.md5 | 2 +- inherit_graph_38.png | Bin 1509 -> 1560 bytes inherit_graph_39.map | 2 +- inherit_graph_39.md5 | 2 +- inherit_graph_39.png | Bin 1560 -> 1394 bytes inherit_graph_40.map | 2 +- inherit_graph_40.md5 | 2 +- inherit_graph_40.png | Bin 1394 -> 1669 bytes inherit_graph_41.map | 2 +- inherit_graph_41.md5 | 2 +- inherit_graph_41.png | Bin 1669 -> 845 bytes inherit_graph_42.map | 2 +- inherit_graph_42.md5 | 2 +- inherit_graph_42.png | Bin 845 -> 1133 bytes inherit_graph_43.map | 16 +- inherit_graph_43.md5 | 2 +- inherit_graph_43.png | Bin 1133 -> 34905 bytes inherit_graph_44.map | 20 +- inherit_graph_44.md5 | 2 +- inherit_graph_44.png | Bin 34905 -> 8062 bytes inherit_graph_7.map | 3 +- inherit_graph_7.md5 | 2 +- inherit_graph_7.png | Bin 1135 -> 2039 bytes inherit_graph_8.map | 2 +- inherit_graph_8.md5 | 2 +- inherit_graph_8.png | Bin 1387 -> 1457 bytes inherit_graph_9.map | 2 +- inherit_graph_9.md5 | 2 +- inherit_graph_9.png | Bin 1457 -> 615 bytes inherits.html | 84 +- masstorage_8cpp.html | 2 +- masstorage_8cpp__incl.map | 20 +- masstorage_8cpp__incl.md5 | 2 +- masstorage_8cpp__incl.png | Bin 132276 -> 115121 bytes masstorage_8cpp_source.html | 1422 +- masstorage_8h.html | 397 +- masstorage_8h__incl.map | 18 +- masstorage_8h__incl.md5 | 2 +- masstorage_8h__incl.png | Bin 130354 -> 113267 bytes masstorage_8h_source.html | 508 +- max3421e_8h_source.html | 10 +- max___l_c_d_8cpp.html | 2 +- max___l_c_d_8cpp__incl.map | 20 +- max___l_c_d_8cpp__incl.md5 | 2 +- max___l_c_d_8cpp__incl.png | Bin 80079 -> 75217 bytes max___l_c_d_8cpp_source.html | 394 +- max___l_c_d_8h.html | 2 +- max___l_c_d_8h__incl.map | 18 +- max___l_c_d_8h__incl.md5 | 2 +- max___l_c_d_8h__incl.png | Bin 53596 -> 48879 bytes max___l_c_d_8h_source.html | 60 +- md__wii_camera_readme.html | 6 +- message_8cpp.html | 256 +- message_8cpp__incl.map | 5 +- message_8cpp__incl.md5 | 2 +- message_8cpp__incl.png | Bin 7681 -> 12030 bytes message_8cpp_source.html | 75 +- message_8h.html | 215 +- message_8h__dep__incl.map | 78 +- message_8h__dep__incl.md5 | 2 +- message_8h__dep__incl.png | Bin 120624 -> 119732 bytes message_8h__incl.map | 3 +- message_8h__incl.md5 | 2 +- message_8h__incl.png | Bin 6349 -> 10641 bytes message_8h_source.html | 50 +- parsetools_8cpp.html | 2 +- parsetools_8cpp__incl.map | 8 +- parsetools_8cpp__incl.md5 | 2 +- parsetools_8cpp__incl.png | Bin 21908 -> 25279 bytes parsetools_8cpp_source.html | 103 +- parsetools_8h.html | 4 +- parsetools_8h__incl.map | 6 +- parsetools_8h__incl.md5 | 2 +- parsetools_8h__incl.png | Bin 20374 -> 23685 bytes parsetools_8h_source.html | 230 +- printhex_8h.html | 135 +- printhex_8h__dep__incl.map | 87 +- printhex_8h__dep__incl.md5 | 2 +- printhex_8h__dep__incl.png | Bin 230514 -> 169827 bytes printhex_8h_source.html | 87 +- search/all_61.js | 8 +- search/all_62.js | 10 +- search/all_63.js | 34 +- search/all_64.js | 14 +- search/all_67.js | 19 +- search/all_68.js | 5 +- search/all_69.js | 4 +- search/all_6b.js | 2 +- search/all_6c.js | 4 +- search/all_6d.js | 23 +- search/all_6e.js | 11 +- search/all_6f.js | 3 +- search/all_70.js | 873 +- search/all_72.js | 9 +- search/all_73.js | 27 +- search/all_74.js | 15 +- search/all_75.js | 5 +- search/all_76.js | 4 +- search/all_77.js | 10 +- search/all_78.js | 5 +- search/classes_63.js | 2 +- search/defines_61.js | 3 +- search/defines_63.js | 2 - search/defines_64.js | 2 +- search/defines_68.js | 1 + search/defines_6c.js | 1 - search/defines_6d.js | 10 + search/defines_6e.js | 7 +- search/defines_72.js | 2 - search/defines_73.js | 8 +- search/defines_78.js | 3 +- search/enumvalues_74.js | 1 - search/functions_67.js | 3 +- search/functions_68.js | 4 +- search/functions_69.js | 6 +- search/functions_6d.js | 2 + search/functions_6e.js | 10 +- search/functions_6f.js | 2 +- search/functions_70.js | 10 +- search/functions_72.js | 2 +- search/functions_73.js | 9 +- search/functions_77.js | 2 +- search/typedefs_74.js | 2 +- search/variables_61.js | 7 +- search/variables_62.js | 12 +- search/variables_63.js | 30 +- search/variables_64.js | 12 +- search/variables_67.js | 16 +- search/variables_6b.js | 2 +- search/variables_6c.js | 3 +- search/variables_6d.js | 11 +- search/variables_6f.js | 1 + search/variables_70.js | 863 +- search/variables_72.js | 5 +- search/variables_73.js | 12 +- search/variables_74.js | 12 +- search/variables_75.js | 5 +- search/variables_76.js | 4 +- search/variables_77.js | 8 +- search/variables_78.js | 2 + struct_a_c_m___f_u_n_c___d_e_s_c_r.html | 10 +- ...l_l___m_g_m_n_t___f_u_n_c___d_e_s_c_r.html | 12 +- struct_capacity.html | 4 +- struct_command_block_wrapper-members.html | 8 +- struct_command_block_wrapper.html | 99 +- struct_command_block_wrapper__coll__graph.map | 3 + struct_command_block_wrapper__coll__graph.md5 | 1 + struct_command_block_wrapper__coll__graph.png | Bin 0 -> 3215 bytes ..._command_block_wrapper__inherit__graph.map | 3 + ..._command_block_wrapper__inherit__graph.md5 | 1 + ..._command_block_wrapper__inherit__graph.png | Bin 0 -> 3215 bytes ...ct_command_block_wrapper_base-members.html | 105 + struct_command_block_wrapper_base.html | 185 + ...and_block_wrapper_base__inherit__graph.map | 3 + ...and_block_wrapper_base__inherit__graph.md5 | 1 + ...and_block_wrapper_base__inherit__graph.png | Bin 0 -> 3196 bytes struct_command_status_wrapper.html | 10 +- struct_ep_info.html | 12 +- ...r_i_p_t_o_r___l_e_n___a_n_d___t_y_p_e.html | 6 +- struct_hid_item_prefix.html | 6 +- struct_hub_descriptor.html | 18 +- struct_hub_event.html | 10 +- struct_inquiry_response.html | 48 +- struct_k_b_d_i_n_f_o.html | 22 +- struct_k_b_d_l_e_d_s.html | 14 +- struct_l_i_n_e___c_o_d_i_n_g.html | 10 +- struct_m_o_d_i_f_i_e_r_k_e_y_s.html | 18 +- struct_m_o_u_s_e_i_n_f_o.html | 12 +- struct_main_item_i_o_feature.html | 18 +- struct_multi_value_buffer.html | 4 +- struct_request_sense_responce.html | 30 +- struct_s_e_t_u_p___p_k_t-members.html | 4 +- struct_s_e_t_u_p___p_k_t.html | 42 +- ...l___r_i_n_g_e_r___f_u_n_c___d_e_s_c_r.html | 12 +- ...g_u_r_a_t_i_o_n___d_e_s_c_r_i_p_t_o_r.html | 16 +- ...e_n_d_p_o_i_n_t___d_e_s_c_r_i_p_t_o_r.html | 14 +- ...t_u_s_b___h_i_d___d_e_s_c_r_i_p_t_o_r.html | 16 +- ...n_t_e_r_f_a_c_e___d_e_s_c_r_i_p_t_o_r.html | 20 +- struct_usb_device.html | 10 +- struct_usb_device_address.html | 12 +- usb__ch9_8h.html | 2 + usb__ch9_8h_source.html | 138 +- usbhost_8h_source.html | 520 +- usbhub_8cpp.html | 4 +- usbhub_8cpp__incl.map | 20 +- usbhub_8cpp__incl.md5 | 2 +- usbhub_8cpp__incl.png | Bin 72121 -> 75061 bytes usbhub_8cpp_source.html | 733 +- usbhub_8h.html | 158 +- usbhub_8h__incl.map | 18 +- usbhub_8h__incl.md5 | 2 +- usbhub_8h__incl.png | Bin 70380 -> 73824 bytes usbhub_8h_source.html | 418 +- xbox_enums_8h.html | 63 +- xbox_enums_8h_source.html | 64 +- 605 files changed, 44662 insertions(+), 20428 deletions(-) create mode 100644 globals_vars_0x62.html create mode 100644 globals_vars_0x6c.html create mode 100644 globals_vars_0x6d.html create mode 100644 globals_vars_0x6f.html create mode 100644 globals_vars_0x70.html create mode 100644 globals_vars_0x72.html create mode 100644 globals_vars_0x75.html create mode 100644 globals_vars_0x78.html create mode 100644 struct_command_block_wrapper__coll__graph.map create mode 100644 struct_command_block_wrapper__coll__graph.md5 create mode 100644 struct_command_block_wrapper__coll__graph.png create mode 100644 struct_command_block_wrapper__inherit__graph.map create mode 100644 struct_command_block_wrapper__inherit__graph.md5 create mode 100644 struct_command_block_wrapper__inherit__graph.png create mode 100644 struct_command_block_wrapper_base-members.html create mode 100644 struct_command_block_wrapper_base.html create mode 100644 struct_command_block_wrapper_base__inherit__graph.map create mode 100644 struct_command_block_wrapper_base__inherit__graph.md5 create mode 100644 struct_command_block_wrapper_base__inherit__graph.png diff --git a/Doxyfile b/Doxyfile index 555427ad..cc11cf0d 100644 --- a/Doxyfile +++ b/Doxyfile @@ -1587,13 +1587,13 @@ ENABLE_PREPROCESSING = YES # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. -MACRO_EXPANSION = NO +MACRO_EXPANSION = YES # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_DEFINED tags. -EXPAND_ONLY_PREDEF = NO +EXPAND_ONLY_PREDEF = YES # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # pointed to by INCLUDE_PATH will be searched when a #include is found. @@ -1622,7 +1622,9 @@ INCLUDE_FILE_PATTERNS = # instead of the = operator. PREDEFINED = WIICAMERA \ - ARDUINO=100 + ARDUINO=100 \ + __attribute__(x)= \ + PROGMEM # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. diff --git a/_b_t_d_8cpp.html b/_b_t_d_8cpp.html index d4303aea..d3529d81 100644 --- a/_b_t_d_8cpp.html +++ b/_b_t_d_8cpp.html @@ -97,7 +97,7 @@ Include dependency graph for BTD.cpp:
- +

Go to the source code of this file.

diff --git a/_b_t_d_8cpp__incl.map b/_b_t_d_8cpp__incl.map index 20004437..f0eebee1 100644 --- a/_b_t_d_8cpp__incl.map +++ b/_b_t_d_8cpp__incl.map @@ -1,14 +1,14 @@ - - - - - - - - - - - - + + + + + + + + + + + + diff --git a/_b_t_d_8cpp__incl.md5 b/_b_t_d_8cpp__incl.md5 index f69f424f..157ce03b 100644 --- a/_b_t_d_8cpp__incl.md5 +++ b/_b_t_d_8cpp__incl.md5 @@ -1 +1 @@ -e7a1e58b2211e982ba972dcc2479da23 \ No newline at end of file +944056a1501ac9eff0011e11046b8aea \ No newline at end of file diff --git a/_b_t_d_8cpp__incl.png b/_b_t_d_8cpp__incl.png index d27810f7ec63aa287fc7f724243578fa9d4c376a..f8867828666730581e28444936f0d5615ba2b009 100644 GIT binary patch literal 75685 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 g5&ON8{y)b{rup6@&+bs_t=?VeU07@oGKFh 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 Bk17BF diff --git a/_b_t_d_8cpp_source.html b/_b_t_d_8cpp_source.html index b03f5ba4..d6beedfa 100644 --- a/_b_t_d_8cpp_source.html +++ b/_b_t_d_8cpp_source.html @@ -90,17 +90,17 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');

Go to the documentation of this file.
1 /* Copyright (C) 2012 Kristian Lauszus, TKJ Electronics. All rights reserved.
-
2 
+
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 
+
9 
10  Contact information
11  -------------------
-
12 
+
12 
13  Kristian Lauszus, TKJ Electronics
14  Web : http://www.tkjelectronics.com
15  e-mail : kristianl@tkjelectronics.com
@@ -111,1167 +111,1208 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
20 //#define EXTRADEBUG // Uncomment to get even more debugging data
21 
22 const uint8_t BTD::BTD_CONTROL_PIPE = 0;
-
23 const uint8_t BTD::BTD_EVENT_PIPE = 1;
+
23 const uint8_t BTD::BTD_EVENT_PIPE = 1;
24 const uint8_t BTD::BTD_DATAIN_PIPE = 2;
25 const uint8_t BTD::BTD_DATAOUT_PIPE = 3;
26 
- +
28 pUsb(p), // Pointer to USB class instance - mandatory
29 bAddress(0), // Device address - mandatory
30 bNumEP(1), // If config descriptor needs to be parsed
31 qNextPollTime(0), // Reset NextPollTime
32 bPollEnable(false) // Don't start polling before dongle is connected
33 {
-
34  for(uint8_t i=0; i<BTD_MAX_ENDPOINTS; i++) {
-
35  epInfo[i].epAddr = 0;
-
36  epInfo[i].maxPktSize = (i) ? 0 : 8;
-
37  epInfo[i].epAttribs = 0;
- -
39  }
-
40 
-
41  if (pUsb) // register in USB subsystem
-
42  pUsb->RegisterDeviceClass(this); //set devConfig[] entry
+
34  for (uint8_t i = 0; i < BTD_MAX_ENDPOINTS; i++) {
+
35  epInfo[i].epAddr = 0;
+
36  epInfo[i].maxPktSize = (i) ? 0 : 8;
+
37  epInfo[i].epAttribs = 0;
+ +
39  }
+
40 
+
41  if (pUsb) // register in USB subsystem
+
42  pUsb->RegisterDeviceClass(this); //set devConfig[] entry
43 }
44 
45 uint8_t BTD::Init(uint8_t parent, uint8_t port, bool lowspeed) {
-
46  uint8_t buf[sizeof(USB_DEVICE_DESCRIPTOR)];
-
47  uint8_t rcode;
-
48  UsbDevice *p = NULL;
-
49  EpInfo *oldep_ptr = NULL;
-
50  uint8_t num_of_conf; // number of configurations
-
51  uint16_t PID;
-
52  uint16_t VID;
-
53 
-
54  // get memory address of USB device address pool
-
55  AddressPool &addrPool = pUsb->GetAddressPool();
+
46  uint8_t buf[sizeof (USB_DEVICE_DESCRIPTOR)];
+
47  uint8_t rcode;
+
48  UsbDevice *p = NULL;
+
49  EpInfo *oldep_ptr = NULL;
+
50  uint8_t num_of_conf; // number of configurations
+
51  uint16_t PID;
+
52  uint16_t VID;
+
53 
+
54  // get memory address of USB device address pool
+
55  AddressPool &addrPool = pUsb->GetAddressPool();
56 #ifdef EXTRADEBUG
-
57  Notify(PSTR("\r\nBTD Init"));
+
57  Notify(PSTR("\r\nBTD Init"), 0x80);
58 #endif
-
59  // check if address has already been assigned to an instance
-
60  if (bAddress) {
+
59  // check if address has already been assigned to an instance
+
60  if (bAddress) {
61 #ifdef DEBUG
-
62  Notify(PSTR("\r\nAddress in use"));
+
62  Notify(PSTR("\r\nAddress in use"), 0x80);
63 #endif
- -
65  }
-
66 
-
67  // Get pointer to pseudo device with address 0 assigned
-
68  p = addrPool.GetUsbDevicePtr(0);
-
69 
-
70  if (!p) {
+ +
65  }
+
66 
+
67  // Get pointer to pseudo device with address 0 assigned
+
68  p = addrPool.GetUsbDevicePtr(0);
+
69 
+
70  if (!p) {
71 #ifdef DEBUG
-
72  Notify(PSTR("\r\nAddress not found"));
+
72  Notify(PSTR("\r\nAddress not found"), 0x80);
73 #endif
- -
75  }
-
76 
-
77  if (!p->epinfo) {
+ +
75  }
+
76 
+
77  if (!p->epinfo) {
78 #ifdef DEBUG
-
79  Notify(PSTR("\r\nepinfo is null"));
+
79  Notify(PSTR("\r\nepinfo is null"), 0x80);
80 #endif
- -
82  }
-
83 
-
84  // Save old pointer to EP_RECORD of address 0
-
85  oldep_ptr = p->epinfo;
-
86 
-
87  // Temporary assign new pointer to epInfo to p->epinfo in order to avoid toggle inconsistence
-
88  p->epinfo = epInfo;
-
89 
-
90  p->lowspeed = lowspeed;
-
91 
-
92  // Get device descriptor
-
93  rcode = pUsb->getDevDescr(0, 0, sizeof(USB_DEVICE_DESCRIPTOR), (uint8_t*)buf);// Get device descriptor - addr, ep, nbytes, data
-
94 
-
95  // Restore p->epinfo
-
96  p->epinfo = oldep_ptr;
-
97 
-
98  if(rcode)
-
99  goto FailGetDevDescr;
-
100 
-
101  // Allocate new address according to device class
-
102  bAddress = addrPool.AllocAddress(parent, false, port);
-
103 
-
104  if (!bAddress)
- -
106 
-
107  // Extract Max Packet Size from device descriptor
-
108  epInfo[0].maxPktSize = (uint8_t)((USB_DEVICE_DESCRIPTOR*)buf)->bMaxPacketSize0;
-
109 
-
110  // Assign new address to the device
-
111  rcode = pUsb->setAddr( 0, 0, bAddress );
-
112  if (rcode) {
-
113  p->lowspeed = false;
-
114  addrPool.FreeAddress(bAddress);
-
115  bAddress = 0;
+ +
82  }
+
83 
+
84  // Save old pointer to EP_RECORD of address 0
+
85  oldep_ptr = p->epinfo;
+
86 
+
87  // Temporary assign new pointer to epInfo to p->epinfo in order to avoid toggle inconsistence
+
88  p->epinfo = epInfo;
+
89 
+
90  p->lowspeed = lowspeed;
+
91 
+
92  // Get device descriptor
+
93  rcode = pUsb->getDevDescr(0, 0, sizeof (USB_DEVICE_DESCRIPTOR), (uint8_t*)buf); // Get device descriptor - addr, ep, nbytes, data
+
94 
+
95  // Restore p->epinfo
+
96  p->epinfo = oldep_ptr;
+
97 
+
98  if (rcode)
+
99  goto FailGetDevDescr;
+
100 
+
101  // Allocate new address according to device class
+
102  bAddress = addrPool.AllocAddress(parent, false, port);
+
103 
+
104  if (!bAddress)
+ +
106 
+
107  // Extract Max Packet Size from device descriptor
+
108  epInfo[0].maxPktSize = (uint8_t)((USB_DEVICE_DESCRIPTOR*)buf)->bMaxPacketSize0;
+
109 
+
110  // Assign new address to the device
+
111  rcode = pUsb->setAddr(0, 0, bAddress);
+
112  if (rcode) {
+
113  p->lowspeed = false;
+
114  addrPool.FreeAddress(bAddress);
+
115  bAddress = 0;
116 #ifdef DEBUG
-
117  Notify(PSTR("\r\nsetAddr: "));
+
117  Notify(PSTR("\r\nsetAddr: "), 0x80);
118 #endif
-
119  PrintHex<uint8_t>(rcode);
-
120  return rcode;
-
121  }
+
119  PrintHex<uint8_t > (rcode, 0x80);
+
120  return rcode;
+
121  }
122 #ifdef EXTRADEBUG
-
123  Notify(PSTR("\r\nAddr: "));
-
124  PrintHex<uint8_t>(bAddress);
+
123  Notify(PSTR("\r\nAddr: "), 0x80);
+
124  PrintHex<uint8_t > (bAddress, 0x80);
125 #endif
-
126  p->lowspeed = false;
-
127 
-
128  //get pointer to assigned address record
-
129  p = addrPool.GetUsbDevicePtr(bAddress);
-
130  if (!p)
- -
132 
-
133  p->lowspeed = lowspeed;
-
134 
-
135  // Assign epInfo to epinfo pointer - only EP0 is known
-
136  rcode = pUsb->setEpInfoEntry(bAddress, 1, epInfo);
-
137  if (rcode)
-
138  goto FailSetDevTblEntry;
-
139  VID = ((USB_DEVICE_DESCRIPTOR*)buf)->idVendor;
-
140  PID = ((USB_DEVICE_DESCRIPTOR*)buf)->idProduct;
-
141 
-
142  if(VID == PS3_VID && (PID == PS3_PID || PID == PS3NAVIGATION_PID || PID == PS3MOVE_PID)) {
-
143  /* We only need the Control endpoint, so we don't have to initialize the other endpoints of device */
-
144  rcode = pUsb->setConf(bAddress, epInfo[ BTD_CONTROL_PIPE ].epAddr, 1);
-
145  if( rcode )
-
146  goto FailSetConf;
-
147 
-
148  if(PID == PS3_PID || PID == PS3NAVIGATION_PID) {
+
126  p->lowspeed = false;
+
127 
+
128  //get pointer to assigned address record
+
129  p = addrPool.GetUsbDevicePtr(bAddress);
+
130  if (!p)
+ +
132 
+
133  p->lowspeed = lowspeed;
+
134 
+
135  // Assign epInfo to epinfo pointer - only EP0 is known
+
136  rcode = pUsb->setEpInfoEntry(bAddress, 1, epInfo);
+
137  if (rcode)
+
138  goto FailSetDevTblEntry;
+
139  VID = ((USB_DEVICE_DESCRIPTOR*)buf)->idVendor;
+
140  PID = ((USB_DEVICE_DESCRIPTOR*)buf)->idProduct;
+
141 
+
142  if (VID == PS3_VID && (PID == PS3_PID || PID == PS3NAVIGATION_PID || PID == PS3MOVE_PID)) {
+
143  /* We only need the Control endpoint, so we don't have to initialize the other endpoints of device */
+
144  rcode = pUsb->setConf(bAddress, epInfo[ BTD_CONTROL_PIPE ].epAddr, 1);
+
145  if (rcode)
+
146  goto FailSetConfDescr;
+
147 
+
148  if (PID == PS3_PID || PID == PS3NAVIGATION_PID) {
149 #ifdef DEBUG
-
150  if(PID == PS3_PID)
-
151  Notify(PSTR("\r\nDualshock 3 Controller Connected"));
-
152  else // must be a navigation controller
-
153  Notify(PSTR("\r\nNavigation Controller Connected"));
+
150  if (PID == PS3_PID)
+
151  Notify(PSTR("\r\nDualshock 3 Controller Connected"), 0x80);
+
152  else // must be a navigation controller
+
153  Notify(PSTR("\r\nNavigation Controller Connected"), 0x80);
154 #endif
-
155  /* Set internal bluetooth address */
-
156  setBdaddr(my_bdaddr);
-
157  }
-
158  else { // must be a Motion controller
-
159 #ifdef DEBUG
-
160  Notify(PSTR("\r\nMotion Controller Connected"));
-
161 #endif
-
162  setMoveBdaddr(my_bdaddr);
-
163  }
-
164  rcode = pUsb->setConf(bAddress, epInfo[ BTD_CONTROL_PIPE ].epAddr, 0); // Reset configuration value
-
165  pUsb->setAddr(bAddress, 0, 0); // Reset address
-
166  Release(); // Release device
- -
168  }
-
169  else {
-
170  num_of_conf = ((USB_DEVICE_DESCRIPTOR*)buf)->bNumConfigurations;
-
171 
-
172  // check if attached device is a Bluetooth dongle and fill endpoint data structure
-
173  // first interface in the configuration must have Bluetooth assigned Class/Subclass/Protocol
-
174  // and 3 endpoints - interrupt-IN, bulk-IN, bulk-OUT,
-
175  // not necessarily in this order
-
176  for (uint8_t i=0; i<num_of_conf; i++) {
- -
178  rcode = pUsb->getConfDescr(bAddress, 0, i, &confDescrParser);
-
179  if(rcode)
-
180  goto FailGetConfDescr;
-
181  if(bNumEP >= BTD_MAX_ENDPOINTS) // All endpoints extracted
-
182  break;
-
183  }
-
184 
- -
186  goto FailUnknownDevice;
-
187 
-
188  // Assign epInfo to epinfo pointer - this time all 3 endpoins
- -
190  if(rcode)
-
191  goto FailSetDevTblEntry;
-
192 
-
193  delay(200); // Give time for address change
-
194 
-
195  // Set Configuration Value
-
196  rcode = pUsb->setConf(bAddress, epInfo[ BTD_CONTROL_PIPE ].epAddr, bConfNum);
-
197  if(rcode)
-
198  goto FailSetConf;
-
199 
-
200  hci_num_reset_loops = 100; // only loop 100 times before trying to send the hci reset command
-
201  hci_counter = 0;
-
202  hci_state = HCI_INIT_STATE;
-
203  watingForConnection = false;
-
204  bPollEnable = true;
-
205 
-
206 #ifdef DEBUG
-
207  Notify(PSTR("\r\nBluetooth Dongle Initialized"));
-
208 #endif
-
209  }
-
210  return 0; // Successful configuration
-
211 
-
212  /* diagnostic messages */
-
213 FailGetDevDescr:
-
214 #ifdef DEBUG
-
215  Notify(PSTR("\r\ngetDevDescr"));
-
216 #endif
-
217  goto Fail;
-
218 FailSetDevTblEntry:
-
219 #ifdef DEBUG
-
220  Notify(PSTR("\r\nsetDevTblEn"));
-
221 #endif
-
222  goto Fail;
-
223 FailGetConfDescr:
-
224 #ifdef DEBUG
-
225  Notify(PSTR("\r\ngetConf"));
-
226 #endif
-
227  goto Fail;
-
228 FailSetConf:
-
229 #ifdef DEBUG
-
230  Notify(PSTR("\r\nsetConf"));
-
231 #endif
-
232  goto Fail;
-
233 FailUnknownDevice:
-
234 #ifdef DEBUG
-
235  Notify(PSTR("\r\nUnknown Device Connected - VID: "));
-
236  PrintHex<uint16_t>(VID);
-
237  Notify(PSTR(" PID: "));
-
238  PrintHex<uint16_t>(PID);
-
239 #endif
-
240  pUsb->setAddr(bAddress, 0, 0); // Reset address
- -
242  goto Fail;
-
243 Fail:
-
244 #ifdef DEBUG
-
245  Notify(PSTR("\r\nBTD Init Failed, error code: "));
-
246  Serial.print(rcode);
-
247 #endif
-
248  Release();
-
249  return rcode;
-
250 }
-
251 /* Extracts interrupt-IN, bulk-IN, bulk-OUT endpoint information from config descriptor */
-
252 void BTD::EndpointXtract(uint8_t conf, uint8_t iface, uint8_t alt, uint8_t proto, const USB_ENDPOINT_DESCRIPTOR *pep) {
-
253  //ErrorMessage<uint8_t>(PSTR("Conf.Val"),conf);
-
254  //ErrorMessage<uint8_t>(PSTR("Iface Num"),iface);
-
255  //ErrorMessage<uint8_t>(PSTR("Alt.Set"),alt);
-
256 
-
257  if(alt) // wrong interface - by BT spec, no alt setting
-
258  return;
-
259 
-
260  bConfNum = conf;
-
261  uint8_t index;
-
262 
-
263  if ((pep->bmAttributes & 0x03) == 3 && (pep->bEndpointAddress & 0x80) == 0x80) // Interrupt In endpoint found
-
264  index = BTD_EVENT_PIPE;
-
265 
-
266  else {
-
267  if ((pep->bmAttributes & 0x02) == 2) // bulk endpoint found
-
268  index = ((pep->bEndpointAddress & 0x80) == 0x80) ? BTD_DATAIN_PIPE : BTD_DATAOUT_PIPE;
-
269  else
-
270  return;
-
271  }
-
272 
-
273  // Fill the rest of endpoint data structure
-
274  epInfo[index].epAddr = (pep->bEndpointAddress & 0x0F);
-
275  epInfo[index].maxPktSize = (uint8_t)pep->wMaxPacketSize;
-
276 #ifdef EXTRADEBUG
- -
278 #endif
-
279  if(pollInterval < pep->bInterval) // Set the polling interval as the largest polling interval obtained from endpoints
-
280  pollInterval = pep->bInterval;
-
281  bNumEP++;
-
282 }
- -
284 #ifdef EXTRADEBUG
-
285  Notify(PSTR("\r\nEndpoint descriptor:"));
-
286  Notify(PSTR("\r\nLength:\t\t"));
-
287  PrintHex<uint8_t>(ep_ptr->bLength);
-
288  Notify(PSTR("\r\nType:\t\t"));
-
289  PrintHex<uint8_t>(ep_ptr->bDescriptorType);
-
290  Notify(PSTR("\r\nAddress:\t"));
-
291  PrintHex<uint8_t>(ep_ptr->bEndpointAddress);
-
292  Notify(PSTR("\r\nAttributes:\t"));
-
293  PrintHex<uint8_t>(ep_ptr->bmAttributes);
-
294  Notify(PSTR("\r\nMaxPktSize:\t"));
-
295  PrintHex<uint16_t>(ep_ptr->wMaxPacketSize);
-
296  Notify(PSTR("\r\nPoll Intrv:\t"));
-
297  PrintHex<uint8_t>(ep_ptr->bInterval);
-
298 #endif
-
299 }
-
300 
-
301 /* Performs a cleanup after failed Init() attempt */
-
302 uint8_t BTD::Release() {
-
303  for (uint8_t i=0; i<BTD_NUMSERVICES; i++)
-
304  if (btService[i])
-
305  btService[i]->Reset(); // Reset all Bluetooth services
- -
307  bAddress = 0;
-
308  bPollEnable = false;
-
309  bNumEP = 1; // must have to be reset to 1
-
310  return 0;
-
311 }
-
312 uint8_t BTD::Poll() {
-
313  if (!bPollEnable)
-
314  return 0;
-
315  if (qNextPollTime <= millis()) { // Don't poll if shorter than polling interval
-
316  qNextPollTime = millis() + pollInterval; // Set new poll time
-
317  HCI_event_task(); // poll the HCI event pipe
-
318  ACL_event_task(); // start polling the ACL input pipe too, though discard data until connected
-
319  }
-
320  return 0;
-
321 }
-
322 
-
323 void BTD::HCI_event_task() {
-
324  /* check the event pipe*/
-
325  uint16_t MAX_BUFFER_SIZE = BULK_MAXPKTSIZE; // Request more than 16 bytes anyway, the inTransfer routine will take care of this
-
326  uint8_t rcode = pUsb->inTransfer(bAddress, epInfo[ BTD_EVENT_PIPE ].epAddr, &MAX_BUFFER_SIZE, hcibuf); // input on endpoint 1
-
327  if(!rcode || rcode == hrNAK) // Check for errors
-
328  {
-
329  switch (hcibuf[0]) //switch on event type
-
330  {
-
331  case EV_COMMAND_COMPLETE:
-
332  if (!hcibuf[5]) { // Check if command succeeded
-
333  hci_event_flag |= HCI_FLAG_CMD_COMPLETE; // set command complete flag
-
334  if((hcibuf[3] == 0x01) && (hcibuf[4] == 0x10)) { // parameters from read local version information
-
335  hci_version = hcibuf[6]; // Used to check if it supports 2.0+EDR - see http://www.bluetooth.org/Technical/AssignedNumbers/hci.htm
-
336  hci_event_flag |= HCI_FLAG_READ_VERSION;
-
337  } else if((hcibuf[3] == 0x09) && (hcibuf[4] == 0x10)) { // parameters from read local bluetooth address
-
338  for (uint8_t i = 0; i < 6; i++)
-
339  my_bdaddr[i] = hcibuf[6 + i];
-
340  hci_event_flag |= HCI_FLAG_READ_BDADDR;
-
341  }
-
342  }
-
343  break;
-
344 
-
345  case EV_COMMAND_STATUS:
-
346  if(hcibuf[2]) { // show status on serial if not OK
-
347 #ifdef DEBUG
-
348  Notify(PSTR("\r\nHCI Command Failed: "));
-
349  PrintHex<uint8_t>(hcibuf[2]);
-
350  Notify(PSTR(" "));
-
351  PrintHex<uint8_t>(hcibuf[4]);
-
352  Notify(PSTR(" "));
-
353  PrintHex<uint8_t>(hcibuf[5]);
+
155  /* Set internal bluetooth address */
+
156  setBdaddr(my_bdaddr);
+
157  } else { // must be a Motion controller
+
158 #ifdef DEBUG
+
159  Notify(PSTR("\r\nMotion Controller Connected"), 0x80);
+
160 #endif
+
161  setMoveBdaddr(my_bdaddr);
+
162  }
+
163  rcode = pUsb->setConf(bAddress, epInfo[ BTD_CONTROL_PIPE ].epAddr, 0); // Reset configuration value
+
164  pUsb->setAddr(bAddress, 0, 0); // Reset address
+
165  Release(); // Release device
+ +
167  } else {
+
168  num_of_conf = ((USB_DEVICE_DESCRIPTOR*)buf)->bNumConfigurations;
+
169 
+
170  // check if attached device is a Bluetooth dongle and fill endpoint data structure
+
171  // first interface in the configuration must have Bluetooth assigned Class/Subclass/Protocol
+
172  // and 3 endpoints - interrupt-IN, bulk-IN, bulk-OUT,
+
173  // not necessarily in this order
+
174  for (uint8_t i = 0; i < num_of_conf; i++) {
+ +
176  rcode = pUsb->getConfDescr(bAddress, 0, i, &confDescrParser);
+
177  if (rcode)
+
178  goto FailGetConfDescr;
+
179  if (bNumEP >= BTD_MAX_ENDPOINTS) // All endpoints extracted
+
180  break;
+
181  }
+
182 
+ +
184  goto FailUnknownDevice;
+
185 
+
186  // Assign epInfo to epinfo pointer - this time all 3 endpoins
+
187  rcode = pUsb->setEpInfoEntry(bAddress, bNumEP, epInfo);
+
188  if (rcode)
+
189  goto FailSetDevTblEntry;
+
190 
+
191  delay(200); // Give time for address change
+
192 
+
193  // Set Configuration Value
+
194  rcode = pUsb->setConf(bAddress, epInfo[ BTD_CONTROL_PIPE ].epAddr, bConfNum);
+
195  if (rcode)
+
196  goto FailSetConfDescr;
+
197 
+
198  hci_num_reset_loops = 100; // only loop 100 times before trying to send the hci reset command
+
199  hci_counter = 0;
+
200  hci_state = HCI_INIT_STATE;
+
201  watingForConnection = false;
+
202  bPollEnable = true;
+
203 
+
204 #ifdef DEBUG
+
205  Notify(PSTR("\r\nBluetooth Dongle Initialized"), 0x80);
+
206 #endif
+
207  }
+
208  return 0; // Successful configuration
+
209 
+
210  /* diagnostic messages */
+
211 FailGetDevDescr:
+ +
213  goto Fail;
+
214 
+
215 FailSetDevTblEntry:
+ +
217  goto Fail;
+
218 
+
219 FailGetConfDescr:
+ +
221  goto Fail;
+
222 
+
223 FailSetConfDescr:
+ +
225  goto Fail;
+
226 
+
227 FailUnknownDevice:
+
228  NotifyFailUnknownDevice(VID,PID);
+
229  pUsb->setAddr(bAddress, 0, 0); // Reset address
+ +
231 Fail:
+
232 #ifdef DEBUG
+
233  Notify(PSTR("\r\nBTD Init Failed, error code: "), 0x80);
+
234 #endif
+
235  NotifyFail(rcode);
+
236  Release();
+
237  return rcode;
+
238 }
+
239 
+
240 /* Extracts interrupt-IN, bulk-IN, bulk-OUT endpoint information from config descriptor */
+
241 void BTD::EndpointXtract(uint8_t conf, uint8_t iface, uint8_t alt, uint8_t proto, const USB_ENDPOINT_DESCRIPTOR *pep) {
+
242  //ErrorMessage<uint8_t>(PSTR("Conf.Val"),conf);
+
243  //ErrorMessage<uint8_t>(PSTR("Iface Num"),iface);
+
244  //ErrorMessage<uint8_t>(PSTR("Alt.Set"),alt);
+
245 
+
246  if (alt) // wrong interface - by BT spec, no alt setting
+
247  return;
+
248 
+
249  bConfNum = conf;
+
250  uint8_t index;
+
251 
+
252  if ((pep->bmAttributes & 0x03) == 3 && (pep->bEndpointAddress & 0x80) == 0x80) // Interrupt In endpoint found
+
253  index = BTD_EVENT_PIPE;
+
254 
+
255  else {
+
256  if ((pep->bmAttributes & 0x02) == 2) // bulk endpoint found
+
257  index = ((pep->bEndpointAddress & 0x80) == 0x80) ? BTD_DATAIN_PIPE : BTD_DATAOUT_PIPE;
+
258  else
+
259  return;
+
260  }
+
261 
+
262  // Fill the rest of endpoint data structure
+
263  epInfo[index].epAddr = (pep->bEndpointAddress & 0x0F);
+
264  epInfo[index].maxPktSize = (uint8_t)pep->wMaxPacketSize;
+
265 #ifdef EXTRADEBUG
+ +
267 #endif
+
268  if (pollInterval < pep->bInterval) // Set the polling interval as the largest polling interval obtained from endpoints
+
269  pollInterval = pep->bInterval;
+
270  bNumEP++;
+
271 }
+
272 
+ +
274 #ifdef EXTRADEBUG
+
275  Notify(PSTR("\r\nEndpoint descriptor:"), 0x80);
+
276  Notify(PSTR("\r\nLength:\t\t"), 0x80);
+
277  PrintHex<uint8_t > (ep_ptr->bLength, 0x80);
+
278  Notify(PSTR("\r\nType:\t\t"), 0x80);
+
279  PrintHex<uint8_t > (ep_ptr->bDescriptorType, 0x80);
+
280  Notify(PSTR("\r\nAddress:\t"), 0x80);
+
281  PrintHex<uint8_t > (ep_ptr->bEndpointAddress, 0x80);
+
282  Notify(PSTR("\r\nAttributes:\t"), 0x80);
+
283  PrintHex<uint8_t > (ep_ptr->bmAttributes, 0x80);
+
284  Notify(PSTR("\r\nMaxPktSize:\t"), 0x80);
+
285  PrintHex<uint16_t > (ep_ptr->wMaxPacketSize, 0x80);
+
286  Notify(PSTR("\r\nPoll Intrv:\t"), 0x80);
+
287  PrintHex<uint8_t > (ep_ptr->bInterval, 0x80);
+
288 #endif
+
289 }
+
290 
+
291 /* Performs a cleanup after failed Init() attempt */
+
292 uint8_t BTD::Release() {
+
293  for (uint8_t i = 0; i < BTD_NUMSERVICES; i++)
+
294  if (btService[i])
+
295  btService[i]->Reset(); // Reset all Bluetooth services
+ +
297  bAddress = 0;
+
298  bPollEnable = false;
+
299  bNumEP = 1; // must have to be reset to 1
+
300  return 0;
+
301 }
+
302 
+
303 uint8_t BTD::Poll() {
+
304  if (!bPollEnable)
+
305  return 0;
+
306  if (qNextPollTime <= millis()) { // Don't poll if shorter than polling interval
+
307  qNextPollTime = millis() + pollInterval; // Set new poll time
+
308  HCI_event_task(); // poll the HCI event pipe
+
309  ACL_event_task(); // start polling the ACL input pipe too, though discard data until connected
+
310  }
+
311  return 0;
+
312 }
+
313 
+
314 void BTD::HCI_event_task() {
+
315  /* check the event pipe*/
+
316  uint16_t MAX_BUFFER_SIZE = BULK_MAXPKTSIZE; // Request more than 16 bytes anyway, the inTransfer routine will take care of this
+
317  uint8_t rcode = pUsb->inTransfer(bAddress, epInfo[ BTD_EVENT_PIPE ].epAddr, &MAX_BUFFER_SIZE, hcibuf); // input on endpoint 1
+
318  if (!rcode) // Check for errors
+
319  {
+
320  switch (hcibuf[0]) //switch on event type
+
321  {
+
322  case EV_COMMAND_COMPLETE:
+
323  if (!hcibuf[5]) { // Check if command succeeded
+
324  hci_event_flag |= HCI_FLAG_CMD_COMPLETE; // set command complete flag
+
325  if ((hcibuf[3] == 0x01) && (hcibuf[4] == 0x10)) { // parameters from read local version information
+
326  hci_version = hcibuf[6]; // Used to check if it supports 2.0+EDR - see http://www.bluetooth.org/Technical/AssignedNumbers/hci.htm
+
327  hci_event_flag |= HCI_FLAG_READ_VERSION;
+
328  } else if ((hcibuf[3] == 0x09) && (hcibuf[4] == 0x10)) { // parameters from read local bluetooth address
+
329  for (uint8_t i = 0; i < 6; i++)
+
330  my_bdaddr[i] = hcibuf[6 + i];
+
331  hci_event_flag |= HCI_FLAG_READ_BDADDR;
+
332  }
+
333  }
+
334  break;
+
335 
+
336  case EV_COMMAND_STATUS:
+
337  if (hcibuf[2]) { // show status on serial if not OK
+
338 #ifdef DEBUG
+
339  Notify(PSTR("\r\nHCI Command Failed: "), 0x80);
+
340  PrintHex<uint8_t > (hcibuf[2], 0x80);
+
341  Notify(PSTR(" "), 0x80);
+
342  PrintHex<uint8_t > (hcibuf[4], 0x80);
+
343  Notify(PSTR(" "), 0x80);
+
344  PrintHex<uint8_t > (hcibuf[5], 0x80);
+
345 #endif
+
346  }
+
347  break;
+
348 
+
349  case EV_INQUIRY_COMPLETE:
+
350  if (inquiry_counter >= 5) {
+
351  inquiry_counter = 0;
+
352 #ifdef DEBUG
+
353  Notify(PSTR("\r\nCouldn't find Wiimote"), 0x80);
354 #endif
-
355  }
-
356  break;
-
357 
-
358  case EV_INQUIRY_COMPLETE:
-
359  if(inquiry_counter >= 5) {
-
360  inquiry_counter = 0;
-
361 #ifdef DEBUG
-
362  Notify(PSTR("\r\nCouldn't find Wiimote"));
-
363 #endif
-
364  connectToWii = false;
-
365  pairWithWii = false;
-
366  hci_state = HCI_SCANNING_STATE;
-
367  }
-
368  inquiry_counter++;
-
369  break;
-
370 
-
371  case EV_INQUIRY_RESULT:
-
372  if (hcibuf[2]) { // Check that there is more than zero responses
-
373 #ifdef EXTRADEBUG
-
374  Notify(PSTR("\r\nNumber of responses: "));
-
375  Serial.print(hcibuf[2]);
-
376 #endif
-
377  for(uint8_t i = 0; i < hcibuf[2]; i++) {
-
378  if((hcibuf[4+8*hcibuf[2]+3*i] == 0x04 && hcibuf[5+8*hcibuf[2]+3*i] == 0x25 && hcibuf[6+8*hcibuf[2]+3*i] == 0x00) || (hcibuf[4+8*hcibuf[2]+3*i] == 0x08 && hcibuf[5+8*hcibuf[2]+3*i] == 0x05 && hcibuf[6+8*hcibuf[2]+3*i] == 0x00)) { // See http://bluetooth-pentest.narod.ru/software/bluetooth_class_of_device-service_generator.html and http://wiibrew.org/wiki/Wiimote#SDP_information
-
379  if(hcibuf[4+8*hcibuf[2]+3*i] == 0x08) // Check if it's the new Wiimote with motion plus inside that was detected
-
380  motionPlusInside = true;
-
381  else
-
382  motionPlusInside = false;
-
383  disc_bdaddr[0] = hcibuf[3+6*i];
-
384  disc_bdaddr[1] = hcibuf[4+6*i];
-
385  disc_bdaddr[2] = hcibuf[5+6*i];
-
386  disc_bdaddr[3] = hcibuf[6+6*i];
-
387  disc_bdaddr[4] = hcibuf[7+6*i];
-
388  disc_bdaddr[5] = hcibuf[8+6*i];
-
389  hci_event_flag |= HCI_FLAG_WII_FOUND;
-
390  break;
-
391  }
-
392 #ifdef EXTRADEBUG
-
393  else {
-
394  Notify(PSTR("\r\nClass of device: "));
-
395  PrintHex<uint8_t>(hcibuf[6+8*hcibuf[2]+3*i]);
-
396  Notify(PSTR(" "));
-
397  PrintHex<uint8_t>(hcibuf[5+8*hcibuf[2]+3*i]);
-
398  Notify(PSTR(" "));
-
399  PrintHex<uint8_t>(hcibuf[4+8*hcibuf[2]+3*i]);
-
400  }
-
401 #endif
-
402  }
-
403  }
-
404  break;
-
405 
-
406  case EV_CONNECT_COMPLETE:
-
407  hci_event_flag |= HCI_FLAG_CONNECT_EVENT;
-
408  if (!hcibuf[2]) { // check if connected OK
-
409  hci_handle = hcibuf[3] | ((hcibuf[4] & 0x0F) << 8); // store the handle for the ACL connection
-
410  hci_event_flag |= HCI_FLAG_CONN_COMPLETE; // set connection complete flag
-
411  }
-
412 #ifdef EXTRADEBUG
-
413  else {
-
414  Notify(PSTR("\r\nConnection Failed"));
-
415  }
-
416 #endif
-
417  break;
-
418 
- -
420  if (!hcibuf[2]) { // check if disconnected OK
-
421  hci_event_flag |= HCI_FLAG_DISCONN_COMPLETE; // set disconnect command complete flag
-
422  hci_event_flag &= ~HCI_FLAG_CONN_COMPLETE; // clear connection complete flag
-
423  }
-
424  break;
-
425 
- -
427  if (!hcibuf[2]) { // check if reading is OK
-
428  for (uint8_t i = 0; i < 30; i++)
-
429  remote_name[i] = hcibuf[9 + i]; //store first 30 bytes
-
430  hci_event_flag |= HCI_FLAG_REMOTE_NAME_COMPLETE;
-
431  }
-
432  break;
-
433 
-
434  case EV_INCOMING_CONNECT:
-
435  disc_bdaddr[0] = hcibuf[2];
-
436  disc_bdaddr[1] = hcibuf[3];
-
437  disc_bdaddr[2] = hcibuf[4];
-
438  disc_bdaddr[3] = hcibuf[5];
-
439  disc_bdaddr[4] = hcibuf[6];
-
440  disc_bdaddr[5] = hcibuf[7];
-
441  hci_event_flag |= HCI_FLAG_INCOMING_REQUEST;
-
442  break;
-
443 
-
444  case EV_PIN_CODE_REQUEST:
-
445  if(pairWithWii) {
+
355  connectToWii = false;
+
356  pairWithWii = false;
+
357  hci_state = HCI_SCANNING_STATE;
+
358  }
+
359  inquiry_counter++;
+
360  break;
+
361 
+
362  case EV_INQUIRY_RESULT:
+
363  if (hcibuf[2]) { // Check that there is more than zero responses
+
364 #ifdef EXTRADEBUG
+
365  Notify(PSTR("\r\nNumber of responses: "), 0x80);
+
366  Serial.print(hcibuf[2]);
+
367 #endif
+
368  for (uint8_t i = 0; i < hcibuf[2]; i++) {
+
369  if ((hcibuf[4 + 8 * hcibuf[2] + 3 * i] == 0x04 && hcibuf[5 + 8 * hcibuf[2] + 3 * i] == 0x25 && hcibuf[6 + 8 * hcibuf[2] + 3 * i] == 0x00) || (hcibuf[4 + 8 * hcibuf[2] + 3 * i] == 0x08 && hcibuf[5 + 8 * hcibuf[2] + 3 * i] == 0x05 && hcibuf[6 + 8 * hcibuf[2] + 3 * i] == 0x00)) { // See http://bluetooth-pentest.narod.ru/software/bluetooth_class_of_device-service_generator.html and http://wiibrew.org/wiki/Wiimote#SDP_information
+
370  if (hcibuf[4 + 8 * hcibuf[2] + 3 * i] == 0x08) // Check if it's the new Wiimote with motion plus inside that was detected
+
371  motionPlusInside = true;
+
372  else
+
373  motionPlusInside = false;
+
374  disc_bdaddr[0] = hcibuf[3 + 6 * i];
+
375  disc_bdaddr[1] = hcibuf[4 + 6 * i];
+
376  disc_bdaddr[2] = hcibuf[5 + 6 * i];
+
377  disc_bdaddr[3] = hcibuf[6 + 6 * i];
+
378  disc_bdaddr[4] = hcibuf[7 + 6 * i];
+
379  disc_bdaddr[5] = hcibuf[8 + 6 * i];
+
380  hci_event_flag |= HCI_FLAG_WII_FOUND;
+
381  break;
+
382  }
+
383 #ifdef EXTRADEBUG
+
384  else {
+
385  Notify(PSTR("\r\nClass of device: "), 0x80);
+
386  PrintHex<uint8_t > (hcibuf[6 + 8 * hcibuf[2] + 3 * i], 0x80);
+
387  Notify(PSTR(" "), 0x80);
+
388  PrintHex<uint8_t > (hcibuf[5 + 8 * hcibuf[2] + 3 * i], 0x80);
+
389  Notify(PSTR(" "), 0x80);
+
390  PrintHex<uint8_t > (hcibuf[4 + 8 * hcibuf[2] + 3 * i], 0x80);
+
391  }
+
392 #endif
+
393  }
+
394  }
+
395  break;
+
396 
+
397  case EV_CONNECT_COMPLETE:
+
398  hci_event_flag |= HCI_FLAG_CONNECT_EVENT;
+
399  if (!hcibuf[2]) { // check if connected OK
+
400  hci_handle = hcibuf[3] | ((hcibuf[4] & 0x0F) << 8); // store the handle for the ACL connection
+
401  hci_event_flag |= HCI_FLAG_CONN_COMPLETE; // set connection complete flag
+
402  }
+
403 #ifdef EXTRADEBUG
+
404  else {
+
405  Notify(PSTR("\r\nConnection Failed"), 0x80);
+
406  hci_state = HCI_CHECK_WII_SERVICE;
+
407  }
+
408 #endif
+
409  break;
+
410 
+ +
412  if (!hcibuf[2]) { // check if disconnected OK
+
413  hci_event_flag |= HCI_FLAG_DISCONN_COMPLETE; // set disconnect command complete flag
+
414  hci_event_flag &= ~HCI_FLAG_CONN_COMPLETE; // clear connection complete flag
+
415  }
+
416  break;
+
417 
+ +
419  if (!hcibuf[2]) { // check if reading is OK
+
420  for (uint8_t i = 0; i < min(sizeof(remote_name),sizeof(hcibuf)-9); i++)
+
421  remote_name[i] = hcibuf[9 + i];
+
422  hci_event_flag |= HCI_FLAG_REMOTE_NAME_COMPLETE;
+
423  }
+
424  break;
+
425 
+
426  case EV_INCOMING_CONNECT:
+
427  disc_bdaddr[0] = hcibuf[2];
+
428  disc_bdaddr[1] = hcibuf[3];
+
429  disc_bdaddr[2] = hcibuf[4];
+
430  disc_bdaddr[3] = hcibuf[5];
+
431  disc_bdaddr[4] = hcibuf[6];
+
432  disc_bdaddr[5] = hcibuf[7];
+
433 #ifdef EXTRADEBUG
+
434  Notify(PSTR("\r\nClass of device: "), 0x80);
+
435  PrintHex<uint8_t > (hcibuf[10], 0x80);
+
436  Notify(PSTR(" "), 0x80);
+
437  PrintHex<uint8_t > (hcibuf[9], 0x80);
+
438  Notify(PSTR(" "), 0x80);
+
439  PrintHex<uint8_t > (hcibuf[8], 0x80);
+
440 #endif
+
441  hci_event_flag |= HCI_FLAG_INCOMING_REQUEST;
+
442  break;
+
443 
+
444  case EV_PIN_CODE_REQUEST:
+
445  if (pairWithWii) {
446 #ifdef DEBUG
-
447  Notify(PSTR("\r\nPairing with wiimote"));
+
447  Notify(PSTR("\r\nPairing with wiimote"), 0x80);
448 #endif
- -
450  }
-
451  else if(btdPin != NULL) {
-
452 #ifdef DEBUG
-
453  Notify(PSTR("\r\nBluetooth pin is set too: "));
-
454  Serial.print(btdPin);
-
455 #endif
- -
457  }
-
458  else {
-
459 #ifdef DEBUG
-
460  Notify(PSTR("\r\nNo pin was set"));
-
461 #endif
- -
463  }
-
464  break;
-
465 
-
466  case EV_LINK_KEY_REQUEST:
-
467 #ifdef DEBUG
-
468  Notify(PSTR("\r\nReceived Key Request"));
-
469 #endif
- -
471  break;
-
472 
- -
474  if(pairWithWii && !connectToWii) {
-
475 #ifdef DEBUG
-
476  Notify(PSTR("\r\nPairing successful"));
-
477 #endif
-
478  connectToWii = true; // Only send the ACL data to the Wii service
-
479  }
-
480  break;
-
481  /* We will just ignore the following events */
-
482  case EV_NUM_COMPLETE_PKT:
-
483  case EV_ROLE_CHANGED:
-
484  case EV_PAGE_SCAN_REP_MODE:
-
485  case EV_LOOPBACK_COMMAND:
- - -
488  case EV_MAX_SLOTS_CHANGE:
- - - - -
493  break;
-
494 #ifdef EXTRADEBUG
-
495  default:
-
496  if(hcibuf[0] != 0x00) {
-
497  Notify(PSTR("\r\nUnmanaged HCI Event: "));
-
498  PrintHex<uint8_t>(hcibuf[0]);
-
499  }
-
500  break;
-
501 #endif
-
502  } // switch
-
503  HCI_task();
-
504  }
-
505 #ifdef EXTRADEBUG
-
506  else {
-
507  Notify(PSTR("\r\nHCI event error: "));
-
508  PrintHex<uint8_t>(rcode);
-
509  }
-
510 #endif
-
511 }
-
512 
-
513 /* Poll Bluetooth and print result */
-
514 void BTD::HCI_task() {
-
515  switch (hci_state){
-
516  case HCI_INIT_STATE:
-
517  hci_counter++;
-
518  if (hci_counter > hci_num_reset_loops) { // wait until we have looped x times to clear any old events
-
519  hci_reset();
-
520  hci_state = HCI_RESET_STATE;
-
521  hci_counter = 0;
-
522  }
-
523  break;
-
524 
-
525  case HCI_RESET_STATE:
-
526  hci_counter++;
-
527  if (hci_cmd_complete) {
-
528  hci_counter = 0;
-
529 #ifdef DEBUG
-
530  Notify(PSTR("\r\nHCI Reset complete"));
-
531 #endif
-
532  hci_state = HCI_BDADDR_STATE;
-
533  hci_read_bdaddr();
-
534  }
-
535  else if (hci_counter > hci_num_reset_loops) {
-
536  hci_num_reset_loops *= 10;
-
537  if(hci_num_reset_loops > 2000)
-
538  hci_num_reset_loops = 2000;
-
539 #ifdef DEBUG
-
540  Notify(PSTR("\r\nNo response to HCI Reset"));
-
541 #endif
-
542  hci_state = HCI_INIT_STATE;
-
543  hci_counter = 0;
-
544  }
-
545  break;
-
546 
-
547  case HCI_BDADDR_STATE:
- -
549 #ifdef DEBUG
-
550  Notify(PSTR("\r\nLocal Bluetooth Address: "));
-
551  for(int8_t i = 5; i > 0;i--) {
-
552  PrintHex<uint8_t>(my_bdaddr[i]);
-
553  Notify(PSTR(":"));
-
554  }
-
555  PrintHex<uint8_t>(my_bdaddr[0]);
-
556 #endif
- -
558  hci_state = HCI_LOCAL_VERSION_STATE;
-
559  }
-
560  break;
-
561 
-
562  case HCI_LOCAL_VERSION_STATE: // The local version is used by the PS3BT class
- -
564  if(btdName != NULL) {
- -
566  hci_state = HCI_SET_NAME_STATE;
-
567  } else
-
568  hci_state = HCI_CHECK_WII_SERVICE;
-
569  }
-
570  break;
-
571 
-
572  case HCI_SET_NAME_STATE:
-
573  if (hci_cmd_complete) {
-
574 #ifdef DEBUG
-
575  Notify(PSTR("\r\nThe name is set to: "));
-
576  Serial.print(btdName);
-
577 #endif
-
578  hci_state = HCI_CHECK_WII_SERVICE;
-
579  }
-
580  break;
-
581 
- -
583  if(pairWithWii) { // Check if it should try to connect to a wiimote
-
584 #ifdef DEBUG
-
585  Notify(PSTR("\r\nStarting inquiry\r\nPress 1 & 2 on the Wiimote\r\nOr press sync if you are using a Wii U Pro Controller"));
-
586 #endif
-
587  hci_inquiry();
-
588  hci_state = HCI_INQUIRY_STATE;
-
589  }
-
590  else
-
591  hci_state = HCI_SCANNING_STATE; // Don't try to connect to a Wiimote
-
592  break;
-
593 
-
594  case HCI_INQUIRY_STATE:
-
595  if(hci_wii_found) {
-
596  hci_inquiry_cancel(); // Stop inquiry
-
597 #ifdef DEBUG
-
598  Notify(PSTR("\r\nWiimote found"));
-
599  Notify(PSTR("\r\nNow just create the instance like so:"));
-
600  Notify(PSTR("\r\nWII Wii(&Btd);"));
-
601  Notify(PSTR("\r\nAnd then press any button on the Wiimote"));
-
602 #endif
-
603  if(motionPlusInside) {
-
604  hci_remote_name(); // We need to know the name to distinguish between a Wiimote and a Wii U Pro Controller
-
605  hci_state = HCI_REMOTE_NAME_STATE;
-
606  } else
-
607  hci_state = HCI_CONNECT_WII_STATE;
-
608  }
-
609  break;
-
610 
- -
612  if(hci_cmd_complete) {
-
613 #ifdef DEBUG
-
614  Notify(PSTR("\r\nConnecting to Wiimote"));
-
615 #endif
-
616  hci_connect();
-
617  hci_state = HCI_CONNECTED_WII_STATE;
-
618  }
-
619  break;
-
620 
- -
622  if(hci_connect_event) {
- -
624 #ifdef DEBUG
-
625  Notify(PSTR("\r\nConnected to Wiimote"));
-
626 #endif
-
627  hci_authentication_request(); // This will start the pairing with the wiimote
-
628  hci_state = HCI_SCANNING_STATE;
-
629  } else {
+ +
450  } else if (btdPin != NULL) {
+
451 #ifdef DEBUG
+
452  Notify(PSTR("\r\nBluetooth pin is set too: "), 0x80);
+
453  Serial.print(btdPin);
+
454 #endif
+ +
456  } else {
+
457 #ifdef DEBUG
+
458  Notify(PSTR("\r\nNo pin was set"), 0x80);
+
459 #endif
+ +
461  }
+
462  break;
+
463 
+
464  case EV_LINK_KEY_REQUEST:
+
465 #ifdef DEBUG
+
466  Notify(PSTR("\r\nReceived Key Request"), 0x80);
+
467 #endif
+ +
469  break;
+
470 
+ +
472  if (pairWithWii && !connectToWii) {
+
473 #ifdef DEBUG
+
474  Notify(PSTR("\r\nPairing successful"), 0x80);
+
475 #endif
+
476  connectToWii = true; // Only send the ACL data to the Wii service
+
477  }
+
478  break;
+
479  /* We will just ignore the following events */
+
480  case EV_NUM_COMPLETE_PKT:
+
481  case EV_ROLE_CHANGED:
+ +
483  case EV_LOOPBACK_COMMAND:
+ + +
486  case EV_MAX_SLOTS_CHANGE:
+ + + + +
491  break;
+
492 #ifdef EXTRADEBUG
+
493  default:
+
494  if (hcibuf[0] != 0x00) {
+
495  Notify(PSTR("\r\nUnmanaged HCI Event: "), 0x80);
+
496  PrintHex<uint8_t > (hcibuf[0], 0x80);
+
497  }
+
498  break;
+
499 #endif
+
500  } // switch
+
501  }
+
502 #ifdef EXTRADEBUG
+
503  else if (rcode != hrNAK) {
+
504  Notify(PSTR("\r\nHCI event error: "), 0x80);
+
505  PrintHex<uint8_t > (rcode, 0x80);
+
506  }
+
507 #endif
+
508  HCI_task();
+
509 }
+
510 
+
511 /* Poll Bluetooth and print result */
+
512 void BTD::HCI_task() {
+
513  switch (hci_state) {
+
514  case HCI_INIT_STATE:
+
515  hci_counter++;
+
516  if (hci_counter > hci_num_reset_loops) { // wait until we have looped x times to clear any old events
+
517  hci_reset();
+
518  hci_state = HCI_RESET_STATE;
+
519  hci_counter = 0;
+
520  }
+
521  break;
+
522 
+
523  case HCI_RESET_STATE:
+
524  hci_counter++;
+
525  if (hci_cmd_complete) {
+
526  hci_counter = 0;
+
527 #ifdef DEBUG
+
528  Notify(PSTR("\r\nHCI Reset complete"), 0x80);
+
529 #endif
+
530  hci_state = HCI_CLASS_STATE;
+ +
532  } else if (hci_counter > hci_num_reset_loops) {
+
533  hci_num_reset_loops *= 10;
+
534  if (hci_num_reset_loops > 2000)
+
535  hci_num_reset_loops = 2000;
+
536 #ifdef DEBUG
+
537  Notify(PSTR("\r\nNo response to HCI Reset"), 0x80);
+
538 #endif
+
539  hci_state = HCI_INIT_STATE;
+
540  hci_counter = 0;
+
541  }
+
542  break;
+
543 
+
544  case HCI_CLASS_STATE:
+
545  if (hci_cmd_complete) {
+
546 #ifdef DEBUG
+
547  Notify(PSTR("\r\nWrite class of device"), 0x80);
+
548 #endif
+
549  hci_state = HCI_BDADDR_STATE;
+
550  hci_read_bdaddr();
+
551  }
+
552  break;
+
553 
+
554  case HCI_BDADDR_STATE:
+ +
556 #ifdef DEBUG
+
557  Notify(PSTR("\r\nLocal Bluetooth Address: "), 0x80);
+
558  for (int8_t i = 5; i > 0; i--) {
+
559  PrintHex<uint8_t > (my_bdaddr[i], 0x80);
+
560  Notify(PSTR(":"), 0x80);
+
561  }
+
562  PrintHex<uint8_t > (my_bdaddr[0], 0x80);
+
563 #endif
+ +
565  hci_state = HCI_LOCAL_VERSION_STATE;
+
566  }
+
567  break;
+
568 
+
569  case HCI_LOCAL_VERSION_STATE: // The local version is used by the PS3BT class
+ +
571  if (btdName != NULL) {
+ +
573  hci_state = HCI_SET_NAME_STATE;
+
574  } else
+
575  hci_state = HCI_CHECK_WII_SERVICE;
+
576  }
+
577  break;
+
578 
+
579  case HCI_SET_NAME_STATE:
+
580  if (hci_cmd_complete) {
+
581 #ifdef DEBUG
+
582  Notify(PSTR("\r\nThe name is set to: "), 0x80);
+
583  Serial.print(btdName);
+
584 #endif
+
585  hci_state = HCI_CHECK_WII_SERVICE;
+
586  }
+
587  break;
+
588 
+ +
590  if (pairWithWii) { // Check if it should try to connect to a wiimote
+
591 #ifdef DEBUG
+
592  Notify(PSTR("\r\nStarting inquiry\r\nPress 1 & 2 on the Wiimote\r\nOr press sync if you are using a Wii U Pro Controller"), 0x80);
+
593 #endif
+
594  hci_inquiry();
+
595  hci_state = HCI_INQUIRY_STATE;
+
596  } else
+
597  hci_state = HCI_SCANNING_STATE; // Don't try to connect to a Wiimote
+
598  break;
+
599 
+
600  case HCI_INQUIRY_STATE:
+
601  if (hci_wii_found) {
+
602  hci_inquiry_cancel(); // Stop inquiry
+
603 #ifdef DEBUG
+
604  Notify(PSTR("\r\nWiimote found"), 0x80);
+
605  Notify(PSTR("\r\nNow just create the instance like so:"), 0x80);
+
606  Notify(PSTR("\r\nWII Wii(&Btd);"), 0x80);
+
607  Notify(PSTR("\r\nAnd then press any button on the Wiimote"), 0x80);
+
608 #endif
+
609  if (motionPlusInside) {
+
610  hci_remote_name(); // We need to know the name to distinguish between a Wiimote and a Wii U Pro Controller
+
611  hci_state = HCI_REMOTE_NAME_STATE;
+
612  } else
+
613  hci_state = HCI_CONNECT_WII_STATE;
+
614  }
+
615  break;
+
616 
+ +
618  if (hci_cmd_complete) {
+
619 #ifdef DEBUG
+
620  Notify(PSTR("\r\nConnecting to Wiimote"), 0x80);
+
621 #endif
+
622  hci_connect();
+
623  hci_state = HCI_CONNECTED_WII_STATE;
+
624  }
+
625  break;
+
626 
+ +
628  if (hci_connect_event) {
+
629  if (hci_connect_complete) {
630 #ifdef DEBUG
-
631  Notify(PSTR("\r\nTrying to connect one more time..."));
+
631  Notify(PSTR("\r\nConnected to Wiimote"), 0x80);
632 #endif
-
633  hci_connect(); // Try to connect one more time
-
634  }
-
635  }
-
636  break;
-
637 
-
638  case HCI_SCANNING_STATE:
-
639  if(!connectToWii && !pairWithWii) {
-
640 #ifdef DEBUG
-
641  Notify(PSTR("\r\nWait For Incoming Connection Request"));
-
642 #endif
- -
644  watingForConnection = true;
-
645  hci_state = HCI_CONNECT_IN_STATE;
-
646  }
-
647  break;
-
648 
- - -
651  watingForConnection = false;
-
652 #ifdef DEBUG
-
653  Notify(PSTR("\r\nIncoming Connection Request"));
-
654 #endif
-
655  hci_remote_name();
-
656  hci_state = HCI_REMOTE_NAME_STATE;
-
657  } else if (hci_disconnect_complete)
-
658  hci_state = HCI_DISCONNECT_STATE;
-
659  break;
-
660 
- - -
663 #ifdef DEBUG
-
664  Notify(PSTR("\r\nRemote Name: "));
-
665  for (uint8_t i = 0; i < 30; i++) {
-
666  if(remote_name[i] == NULL)
-
667  break;
-
668  Serial.write(remote_name[i]);
-
669  }
-
670 #endif
-
671  if(strncmp((const char*)remote_name, "Nintendo", 8) == 0) {
-
672 #ifdef DEBUG
-
673  Notify(PSTR("\r\nWiimote is connecting"));
-
674 #endif
-
675  if(strncmp((const char*)remote_name, "Nintendo RVL-CNT-01-TR", 22) == 0) {
-
676 #ifdef DEBUG
-
677  Notify(PSTR(" with Motion Plus Inside"));
-
678 #endif
-
679  motionPlusInside = true;
-
680  }
-
681  else if(strncmp((const char*)remote_name, "Nintendo RVL-CNT-01-UC", 22) == 0) {
-
682 #ifdef DEBUG
-
683  Notify(PSTR(" - Wii U Pro Controller"));
-
684 #endif
-
685  motionPlusInside = true;
-
686  wiiUProController = true;
-
687  } else {
-
688  motionPlusInside = false;
-
689  wiiUProController = false;
-
690  }
-
691  incomingWii = true;
-
692  }
- -
694  hci_state = HCI_CONNECT_WII_STATE;
-
695  else {
- -
697  hci_state = HCI_CONNECTED_STATE;
-
698  }
-
699  }
-
700  break;
-
701 
-
702  case HCI_CONNECTED_STATE:
-
703  if (hci_connect_complete) {
-
704 #ifdef DEBUG
-
705  Notify(PSTR("\r\nConnected to Device: "));
-
706  for(int8_t i = 5; i>0;i--) {
-
707  PrintHex<uint8_t>(disc_bdaddr[i]);
-
708  Notify(PSTR(":"));
-
709  }
-
710  PrintHex<uint8_t>(disc_bdaddr[0]);
-
711 #endif
-
712  // Clear these flags for a new connection
-
713  l2capConnectionClaimed = false;
-
714  sdpConnectionClaimed = false;
-
715  rfcommConnectionClaimed = false;
-
716 
-
717  hci_event_flag = 0;
-
718  hci_state = HCI_DONE_STATE;
-
719  }
-
720  break;
+
633  hci_authentication_request(); // This will start the pairing with the wiimote
+
634  hci_state = HCI_SCANNING_STATE;
+
635  } else {
+
636 #ifdef DEBUG
+
637  Notify(PSTR("\r\nTrying to connect one more time..."), 0x80);
+
638 #endif
+
639  hci_connect(); // Try to connect one more time
+
640  }
+
641  }
+
642  break;
+
643 
+
644  case HCI_SCANNING_STATE:
+
645  if (!connectToWii && !pairWithWii) {
+
646 #ifdef DEBUG
+
647  Notify(PSTR("\r\nWait For Incoming Connection Request"), 0x80);
+
648 #endif
+ +
650  watingForConnection = true;
+
651  hci_state = HCI_CONNECT_IN_STATE;
+
652  }
+
653  break;
+
654 
+ + +
657  watingForConnection = false;
+
658 #ifdef DEBUG
+
659  Notify(PSTR("\r\nIncoming Connection Request"), 0x80);
+
660 #endif
+
661  hci_remote_name();
+
662  hci_state = HCI_REMOTE_NAME_STATE;
+
663  } else if (hci_disconnect_complete)
+
664  hci_state = HCI_DISCONNECT_STATE;
+
665  break;
+
666 
+ + +
669 #ifdef DEBUG
+
670  Notify(PSTR("\r\nRemote Name: "), 0x80);
+
671  for (uint8_t i = 0; i < 30; i++) {
+
672  if (remote_name[i] == NULL)
+
673  break;
+
674  Serial.write(remote_name[i]);
+
675  }
+
676 #endif
+
677  if (strncmp((const char*)remote_name, "Nintendo", 8) == 0) {
+
678  incomingWii = true;
+
679 #ifdef DEBUG
+
680  Notify(PSTR("\r\nWiimote is connecting"), 0x80);
+
681 #endif
+
682  if (strncmp((const char*)remote_name, "Nintendo RVL-CNT-01-TR", 22) == 0) {
+
683 #ifdef DEBUG
+
684  Notify(PSTR(" with Motion Plus Inside"), 0x80);
+
685 #endif
+
686  motionPlusInside = true;
+
687  } else if (strncmp((const char*)remote_name, "Nintendo RVL-CNT-01-UC", 22) == 0) {
+
688 #ifdef DEBUG
+
689  Notify(PSTR(" - Wii U Pro Controller"), 0x80);
+
690 #endif
+
691  motionPlusInside = true;
+
692  wiiUProController = true;
+
693  } else {
+
694  motionPlusInside = false;
+
695  wiiUProController = false;
+
696  }
+
697  }
+ +
699  hci_state = HCI_CONNECT_WII_STATE;
+
700  else {
+ +
702  hci_state = HCI_CONNECTED_STATE;
+
703  }
+
704  }
+
705  break;
+
706 
+
707  case HCI_CONNECTED_STATE:
+
708  if (hci_connect_complete) {
+
709 #ifdef DEBUG
+
710  Notify(PSTR("\r\nConnected to Device: "), 0x80);
+
711  for (int8_t i = 5; i > 0; i--) {
+
712  PrintHex<uint8_t > (disc_bdaddr[i], 0x80);
+
713  Notify(PSTR(":"), 0x80);
+
714  }
+
715  PrintHex<uint8_t > (disc_bdaddr[0], 0x80);
+
716 #endif
+
717  // Clear these flags for a new connection
+
718  l2capConnectionClaimed = false;
+
719  sdpConnectionClaimed = false;
+
720  rfcommConnectionClaimed = false;
721 
-
722  case HCI_DONE_STATE:
-
723  hci_counter++;
-
724  if (hci_counter > 1000) { // Wait until we have looped 1000 times to make sure that the L2CAP connection has been started
-
725  hci_counter = 0;
-
726  hci_state = HCI_SCANNING_STATE;
-
727  }
-
728  break;
-
729 
- - -
732 #ifdef DEBUG
-
733  Notify(PSTR("\r\nHCI Disconnected from Device"));
-
734 #endif
-
735  hci_event_flag = 0; // Clear all flags
-
736 
-
737  // Reset all buffers
-
738  for (uint8_t i = 0; i < BULK_MAXPKTSIZE; i++)
-
739  hcibuf[i] = 0;
-
740  for (uint8_t i = 0; i < BULK_MAXPKTSIZE; i++)
-
741  l2capinbuf[i] = 0;
-
742 
-
743  hci_state = HCI_SCANNING_STATE;
-
744  }
-
745  break;
-
746  default:
-
747  break;
-
748  }
-
749 }
-
750 
-
751 void BTD::ACL_event_task() {
-
752  uint16_t MAX_BUFFER_SIZE = BULK_MAXPKTSIZE;
-
753  uint8_t rcode = pUsb->inTransfer(bAddress, epInfo[ BTD_DATAIN_PIPE ].epAddr, &MAX_BUFFER_SIZE, l2capinbuf); // input on endpoint 2
-
754  if(!rcode) { // Check for errors
-
755  for (uint8_t i=0; i<BTD_NUMSERVICES; i++)
-
756  if (btService[i])
-
757  btService[i]->ACLData(l2capinbuf);
-
758  }
-
759 #ifdef EXTRADEBUG
-
760  else if (rcode != hrNAK) {
-
761  Notify(PSTR("\r\nACL data in error: "));
-
762  PrintHex<uint8_t>(rcode);
-
763  }
-
764 #endif
-
765  for (uint8_t i=0; i<BTD_NUMSERVICES; i++)
-
766  if (btService[i])
-
767  btService[i]->Run();
-
768 }
-
769 
-
770 /************************************************************/
-
771 /* HCI Commands */
-
772 /************************************************************/
-
773 void BTD::HCI_Command(uint8_t* data, uint16_t nbytes) {
-
774  hci_event_flag &= ~HCI_FLAG_CMD_COMPLETE;
-
775  pUsb->ctrlReq(bAddress, epInfo[ BTD_CONTROL_PIPE ].epAddr, bmREQ_HCI_OUT, 0x00, 0x00, 0x00 ,0x00, nbytes, nbytes, data, NULL);
-
776 }
- -
778  hci_event_flag = 0; // Clear all the flags
-
779  hcibuf[0] = 0x03; // HCI OCF = 3
-
780  hcibuf[1] = 0x03 << 2; // HCI OGF = 3
-
781  hcibuf[2] = 0x00;
-
782  HCI_Command(hcibuf, 3);
-
783 }
- -
785  hci_event_flag &= ~HCI_FLAG_INCOMING_REQUEST;
-
786  hcibuf[0] = 0x1A; // HCI OCF = 1A
-
787  hcibuf[1] = 0x03 << 2; // HCI OGF = 3
-
788  hcibuf[2] = 0x01; // parameter length = 1
-
789  if(btdName != NULL)
-
790  hcibuf[3] = 0x03; // Inquiry Scan enabled. Page Scan enabled.
-
791  else
-
792  hcibuf[3] = 0x02; // Inquiry Scan disabled. Page Scan enabled.
-
793  HCI_Command(hcibuf, 4);
-
794 }
- -
796  hcibuf[0] = 0x1A; // HCI OCF = 1A
-
797  hcibuf[1] = 0x03 << 2; // HCI OGF = 3
-
798  hcibuf[2] = 0x01; // parameter length = 1
-
799  hcibuf[3] = 0x00; // Inquiry Scan disabled. Page Scan disabled.
-
800  HCI_Command(hcibuf, 4);
-
801 }
- -
803  hcibuf[0] = 0x09; // HCI OCF = 9
-
804  hcibuf[1] = 0x04 << 2; // HCI OGF = 4
-
805  hcibuf[2] = 0x00;
-
806  HCI_Command(hcibuf, 3);
-
807 }
- -
809  hcibuf[0] = 0x01; // HCI OCF = 1
-
810  hcibuf[1] = 0x04 << 2; // HCI OGF = 4
-
811  hcibuf[2] = 0x00;
-
812  HCI_Command(hcibuf, 3);
-
813 }
- -
815  hci_event_flag &= ~HCI_FLAG_CONN_COMPLETE;
-
816  hcibuf[0] = 0x09; // HCI OCF = 9
-
817  hcibuf[1] = 0x01 << 2; // HCI OGF = 1
-
818  hcibuf[2] = 0x07; // parameter length 7
-
819  hcibuf[3] = disc_bdaddr[0]; // 6 octet bdaddr
-
820  hcibuf[4] = disc_bdaddr[1];
-
821  hcibuf[5] = disc_bdaddr[2];
-
822  hcibuf[6] = disc_bdaddr[3];
-
823  hcibuf[7] = disc_bdaddr[4];
-
824  hcibuf[8] = disc_bdaddr[5];
-
825  hcibuf[9] = 0x00; //switch role to master
-
826 
-
827  HCI_Command(hcibuf, 10);
-
828 }
- -
830  hci_event_flag &= ~HCI_FLAG_REMOTE_NAME_COMPLETE;
-
831  hcibuf[0] = 0x19; // HCI OCF = 19
-
832  hcibuf[1] = 0x01 << 2; // HCI OGF = 1
-
833  hcibuf[2] = 0x0A; // parameter length = 10
-
834  hcibuf[3] = disc_bdaddr[0]; // 6 octet bdaddr
-
835  hcibuf[4] = disc_bdaddr[1];
-
836  hcibuf[5] = disc_bdaddr[2];
-
837  hcibuf[6] = disc_bdaddr[3];
-
838  hcibuf[7] = disc_bdaddr[4];
-
839  hcibuf[8] = disc_bdaddr[5];
-
840  hcibuf[9] = 0x01; //Page Scan Repetition Mode
-
841  hcibuf[10] = 0x00; //Reserved
-
842  hcibuf[11] = 0x00; //Clock offset - low byte
-
843  hcibuf[12] = 0x00; //Clock offset - high byte
-
844 
-
845  HCI_Command(hcibuf, 13);
-
846 }
-
847 void BTD::hci_set_local_name(const char* name) {
-
848  hcibuf[0] = 0x13; // HCI OCF = 13
-
849  hcibuf[1] = 0x03 << 2; // HCI OGF = 3
-
850  hcibuf[2] = strlen(name)+1; // parameter length = the length of the string + end byte
-
851  uint8_t i;
-
852  for(i = 0; i < strlen(name); i++)
-
853  hcibuf[i+3] = name[i];
-
854  hcibuf[i+3] = 0x00; // End of string
-
855 
-
856  HCI_Command(hcibuf, 4+strlen(name));
-
857 }
- -
859  hci_event_flag &= ~HCI_FLAG_WII_FOUND;
-
860  hcibuf[0] = 0x01;
-
861  hcibuf[1] = 0x01 << 2; // HCI OGF = 1
-
862  hcibuf[2] = 0x05; // Parameter Total Length = 5
-
863  hcibuf[3] = 0x33; // LAP: Genera/Unlimited Inquiry Access Code (GIAC = 0x9E8B33) - see https://www.bluetooth.org/Technical/AssignedNumbers/baseband.htm
-
864  hcibuf[4] = 0x8B;
-
865  hcibuf[5] = 0x9E;
-
866  hcibuf[6] = 0x30; // Inquiry time = 61.44 sec (maximum)
-
867  hcibuf[7] = 0x0A; // 10 number of responses
-
868 
-
869  HCI_Command(hcibuf, 8);
-
870 }
- -
872  hcibuf[0] = 0x02;
-
873  hcibuf[1] = 0x01 << 2; // HCI OGF = 1
-
874  hcibuf[2] = 0x0; // Parameter Total Length = 0
-
875 
-
876  HCI_Command(hcibuf, 3);
-
877 }
- -
879  hci_event_flag &= ~(HCI_FLAG_CONN_COMPLETE | HCI_FLAG_CONNECT_EVENT);
-
880  hcibuf[0] = 0x05;
-
881  hcibuf[1] = 0x01 << 2; // HCI OGF = 1
-
882  hcibuf[2] = 0x0D; // parameter Total Length = 13
-
883  hcibuf[3] = disc_bdaddr[0]; // 6 octet bdaddr
-
884  hcibuf[4] = disc_bdaddr[1];
-
885  hcibuf[5] = disc_bdaddr[2];
-
886  hcibuf[6] = disc_bdaddr[3];
-
887  hcibuf[7] = disc_bdaddr[4];
-
888  hcibuf[8] = disc_bdaddr[5];
-
889  hcibuf[9] = 0x18; // DM1 or DH1 may be used
-
890  hcibuf[10] = 0xCC; // DM3, DH3, DM5, DH5 may be used
-
891  hcibuf[11] = 0x01; // Page repetition mode R1
-
892  hcibuf[12] = 0x00; // Reserved
-
893  hcibuf[13] = 0x00; // Clock offset
-
894  hcibuf[14] = 0x00; // Invalid clock offset
-
895  hcibuf[15] = 0x00; // Do not allow role switch
-
896 
-
897  HCI_Command(hcibuf, 16);
-
898 }
- -
900  hcibuf[0] = 0x0D; // HCI OCF = 0D
-
901  hcibuf[1] = 0x01 << 2; // HCI OGF = 1
-
902  hcibuf[2] = 0x17; // parameter length 23
-
903  hcibuf[3] = disc_bdaddr[0]; // 6 octet bdaddr
-
904  hcibuf[4] = disc_bdaddr[1];
-
905  hcibuf[5] = disc_bdaddr[2];
-
906  hcibuf[6] = disc_bdaddr[3];
-
907  hcibuf[7] = disc_bdaddr[4];
-
908  hcibuf[8] = disc_bdaddr[5];
- -
910  hcibuf[9] = 6; // Pin length is the length of the bt address
-
911  hcibuf[10] = disc_bdaddr[0]; // The pin is the Wiimotes bt address backwards
-
912  hcibuf[11] = disc_bdaddr[1];
-
913  hcibuf[12] = disc_bdaddr[2];
-
914  hcibuf[13] = disc_bdaddr[3];
-
915  hcibuf[14] = disc_bdaddr[4];
-
916  hcibuf[15] = disc_bdaddr[5];
-
917  for(uint8_t i = 16; i < 26; i++)
-
918  hcibuf[i] = 0x00; // The rest should be 0
-
919  } else if(pairWithWii && wiiUProController) {
-
920 #ifdef DEBUG
-
921  Notify(PSTR("\r\nParing with Wii U Pro Controller"));
-
922 #endif
-
923  hcibuf[9] = 6; // Pin length is the length of the bt address
-
924  hcibuf[10] = my_bdaddr[0]; // The pin is the Bluetooth dongles bt address backwards
-
925  hcibuf[11] = my_bdaddr[1];
-
926  hcibuf[12] = my_bdaddr[2];
-
927  hcibuf[13] = my_bdaddr[3];
-
928  hcibuf[14] = my_bdaddr[4];
-
929  hcibuf[15] = my_bdaddr[5];
-
930  for(uint8_t i = 16; i < 26; i++)
-
931  hcibuf[i] = 0x00; // The rest should be 0
-
932  } else {
-
933  hcibuf[9] = strlen(btdPin); // Length of pin
-
934  uint8_t i;
-
935  for(i = 0; i < strlen(btdPin); i++) // The maximum size of the pin is 16
-
936  hcibuf[i+10] = btdPin[i];
-
937  for(;i < 16; i++)
-
938  hcibuf[i+10] = 0x00; // The rest should be 0
-
939  }
-
940 
-
941  HCI_Command(hcibuf, 26);
-
942 }
- -
944  hcibuf[0] = 0x0E; // HCI OCF = 0E
-
945  hcibuf[1] = 0x01 << 2; // HCI OGF = 1
-
946  hcibuf[2] = 0x06; // parameter length 6
-
947  hcibuf[3] = disc_bdaddr[0]; // 6 octet bdaddr
-
948  hcibuf[4] = disc_bdaddr[1];
-
949  hcibuf[5] = disc_bdaddr[2];
-
950  hcibuf[6] = disc_bdaddr[3];
-
951  hcibuf[7] = disc_bdaddr[4];
-
952  hcibuf[8] = disc_bdaddr[5];
-
953 
-
954  HCI_Command(hcibuf, 9);
-
955 }
- -
957  hcibuf[0] = 0x0C; // HCI OCF = 0C
-
958  hcibuf[1] = 0x01 << 2; // HCI OGF = 1
-
959  hcibuf[2] = 0x06; // parameter length 6
-
960  hcibuf[3] = disc_bdaddr[0]; // 6 octet bdaddr
-
961  hcibuf[4] = disc_bdaddr[1];
-
962  hcibuf[5] = disc_bdaddr[2];
-
963  hcibuf[6] = disc_bdaddr[3];
-
964  hcibuf[7] = disc_bdaddr[4];
-
965  hcibuf[8] = disc_bdaddr[5];
-
966 
-
967  HCI_Command(hcibuf, 9);
-
968 }
- -
970  hcibuf[0] = 0x11; // HCI OCF = 11
-
971  hcibuf[1] = 0x01 << 2; // HCI OGF = 1
-
972  hcibuf[2] = 0x02; // parameter length = 2
-
973  hcibuf[3] = (uint8_t)(hci_handle & 0xFF);//connection handle - low byte
-
974  hcibuf[4] = (uint8_t)((hci_handle >> 8) & 0x0F);//connection handle - high byte
-
975 
-
976  HCI_Command(hcibuf, 5);
-
977 }
-
978 void BTD::hci_disconnect(uint16_t handle) { // This is called by the different services
-
979  hci_event_flag &= ~HCI_FLAG_DISCONN_COMPLETE;
-
980  hcibuf[0] = 0x06; // HCI OCF = 6
-
981  hcibuf[1] = 0x01 << 2; // HCI OGF = 1
-
982  hcibuf[2] = 0x03; // parameter length = 3
-
983  hcibuf[3] = (uint8_t)(handle & 0xFF);//connection handle - low byte
-
984  hcibuf[4] = (uint8_t)((handle >> 8) & 0x0F);//connection handle - high byte
-
985  hcibuf[5] = 0x13; // reason
-
986 
-
987  HCI_Command(hcibuf, 6);
+
722  hci_event_flag = 0;
+
723  hci_state = HCI_DONE_STATE;
+
724  }
+
725  break;
+
726 
+
727  case HCI_DONE_STATE:
+
728  hci_counter++;
+
729  if (hci_counter > 1000) { // Wait until we have looped 1000 times to make sure that the L2CAP connection has been started
+
730  hci_counter = 0;
+
731  hci_state = HCI_SCANNING_STATE;
+
732  }
+
733  break;
+
734 
+ + +
737 #ifdef DEBUG
+
738  Notify(PSTR("\r\nHCI Disconnected from Device"), 0x80);
+
739 #endif
+
740  hci_event_flag = 0; // Clear all flags
+
741 
+
742  // Reset all buffers
+
743  for (uint8_t i = 0; i < BULK_MAXPKTSIZE; i++)
+
744  hcibuf[i] = 0;
+
745  for (uint8_t i = 0; i < BULK_MAXPKTSIZE; i++)
+
746  l2capinbuf[i] = 0;
+
747 
+
748  hci_state = HCI_SCANNING_STATE;
+
749  }
+
750  break;
+
751  default:
+
752  break;
+
753  }
+
754 }
+
755 
+
756 void BTD::ACL_event_task() {
+
757  uint16_t MAX_BUFFER_SIZE = BULK_MAXPKTSIZE;
+
758  uint8_t rcode = pUsb->inTransfer(bAddress, epInfo[ BTD_DATAIN_PIPE ].epAddr, &MAX_BUFFER_SIZE, l2capinbuf); // input on endpoint 2
+
759  if (!rcode) { // Check for errors
+
760  for (uint8_t i = 0; i < BTD_NUMSERVICES; i++)
+
761  if (btService[i])
+
762  btService[i]->ACLData(l2capinbuf);
+
763  }
+
764 #ifdef EXTRADEBUG
+
765  else if (rcode != hrNAK) {
+
766  Notify(PSTR("\r\nACL data in error: "), 0x80);
+
767  PrintHex<uint8_t > (rcode, 0x80);
+
768  }
+
769 #endif
+
770  for (uint8_t i = 0; i < BTD_NUMSERVICES; i++)
+
771  if (btService[i])
+
772  btService[i]->Run();
+
773 }
+
774 
+
775 /************************************************************/
+
776 /* HCI Commands */
+
777 
+
778 /************************************************************/
+
779 void BTD::HCI_Command(uint8_t* data, uint16_t nbytes) {
+
780  hci_event_flag &= ~HCI_FLAG_CMD_COMPLETE;
+
781  pUsb->ctrlReq(bAddress, epInfo[ BTD_CONTROL_PIPE ].epAddr, bmREQ_HCI_OUT, 0x00, 0x00, 0x00, 0x00, nbytes, nbytes, data, NULL);
+
782 }
+
783 
+ +
785  hci_event_flag = 0; // Clear all the flags
+
786  hcibuf[0] = 0x03; // HCI OCF = 3
+
787  hcibuf[1] = 0x03 << 2; // HCI OGF = 3
+
788  hcibuf[2] = 0x00;
+
789  HCI_Command(hcibuf, 3);
+
790 }
+
791 
+ +
793  hci_event_flag &= ~HCI_FLAG_INCOMING_REQUEST;
+
794  hcibuf[0] = 0x1A; // HCI OCF = 1A
+
795  hcibuf[1] = 0x03 << 2; // HCI OGF = 3
+
796  hcibuf[2] = 0x01; // parameter length = 1
+
797  if (btdName != NULL)
+
798  hcibuf[3] = 0x03; // Inquiry Scan enabled. Page Scan enabled.
+
799  else
+
800  hcibuf[3] = 0x02; // Inquiry Scan disabled. Page Scan enabled.
+
801  HCI_Command(hcibuf, 4);
+
802 }
+
803 
+ +
805  hcibuf[0] = 0x1A; // HCI OCF = 1A
+
806  hcibuf[1] = 0x03 << 2; // HCI OGF = 3
+
807  hcibuf[2] = 0x01; // parameter length = 1
+
808  hcibuf[3] = 0x00; // Inquiry Scan disabled. Page Scan disabled.
+
809  HCI_Command(hcibuf, 4);
+
810 }
+
811 
+ +
813  hcibuf[0] = 0x09; // HCI OCF = 9
+
814  hcibuf[1] = 0x04 << 2; // HCI OGF = 4
+
815  hcibuf[2] = 0x00;
+
816  HCI_Command(hcibuf, 3);
+
817 }
+
818 
+ +
820  hcibuf[0] = 0x01; // HCI OCF = 1
+
821  hcibuf[1] = 0x04 << 2; // HCI OGF = 4
+
822  hcibuf[2] = 0x00;
+
823  HCI_Command(hcibuf, 3);
+
824 }
+
825 
+ +
827  hci_event_flag &= ~HCI_FLAG_CONN_COMPLETE;
+
828  hcibuf[0] = 0x09; // HCI OCF = 9
+
829  hcibuf[1] = 0x01 << 2; // HCI OGF = 1
+
830  hcibuf[2] = 0x07; // parameter length 7
+
831  hcibuf[3] = disc_bdaddr[0]; // 6 octet bdaddr
+
832  hcibuf[4] = disc_bdaddr[1];
+
833  hcibuf[5] = disc_bdaddr[2];
+
834  hcibuf[6] = disc_bdaddr[3];
+
835  hcibuf[7] = disc_bdaddr[4];
+
836  hcibuf[8] = disc_bdaddr[5];
+
837  hcibuf[9] = 0x00; //switch role to master
+
838 
+
839  HCI_Command(hcibuf, 10);
+
840 }
+
841 
+ +
843  hci_event_flag &= ~HCI_FLAG_REMOTE_NAME_COMPLETE;
+
844  hcibuf[0] = 0x19; // HCI OCF = 19
+
845  hcibuf[1] = 0x01 << 2; // HCI OGF = 1
+
846  hcibuf[2] = 0x0A; // parameter length = 10
+
847  hcibuf[3] = disc_bdaddr[0]; // 6 octet bdaddr
+
848  hcibuf[4] = disc_bdaddr[1];
+
849  hcibuf[5] = disc_bdaddr[2];
+
850  hcibuf[6] = disc_bdaddr[3];
+
851  hcibuf[7] = disc_bdaddr[4];
+
852  hcibuf[8] = disc_bdaddr[5];
+
853  hcibuf[9] = 0x01; //Page Scan Repetition Mode
+
854  hcibuf[10] = 0x00; //Reserved
+
855  hcibuf[11] = 0x00; //Clock offset - low byte
+
856  hcibuf[12] = 0x00; //Clock offset - high byte
+
857 
+
858  HCI_Command(hcibuf, 13);
+
859 }
+
860 
+
861 void BTD::hci_set_local_name(const char* name) {
+
862  hcibuf[0] = 0x13; // HCI OCF = 13
+
863  hcibuf[1] = 0x03 << 2; // HCI OGF = 3
+
864  hcibuf[2] = strlen(name) + 1; // parameter length = the length of the string + end byte
+
865  uint8_t i;
+
866  for (i = 0; i < strlen(name); i++)
+
867  hcibuf[i + 3] = name[i];
+
868  hcibuf[i + 3] = 0x00; // End of string
+
869 
+
870  HCI_Command(hcibuf, 4 + strlen(name));
+
871 }
+
872 
+ +
874  hci_event_flag &= ~HCI_FLAG_WII_FOUND;
+
875  hcibuf[0] = 0x01;
+
876  hcibuf[1] = 0x01 << 2; // HCI OGF = 1
+
877  hcibuf[2] = 0x05; // Parameter Total Length = 5
+
878  hcibuf[3] = 0x33; // LAP: Genera/Unlimited Inquiry Access Code (GIAC = 0x9E8B33) - see https://www.bluetooth.org/Technical/AssignedNumbers/baseband.htm
+
879  hcibuf[4] = 0x8B;
+
880  hcibuf[5] = 0x9E;
+
881  hcibuf[6] = 0x30; // Inquiry time = 61.44 sec (maximum)
+
882  hcibuf[7] = 0x0A; // 10 number of responses
+
883 
+
884  HCI_Command(hcibuf, 8);
+
885 }
+
886 
+ +
888  hcibuf[0] = 0x02;
+
889  hcibuf[1] = 0x01 << 2; // HCI OGF = 1
+
890  hcibuf[2] = 0x0; // Parameter Total Length = 0
+
891 
+
892  HCI_Command(hcibuf, 3);
+
893 }
+
894 
+ +
896  hci_event_flag &= ~(HCI_FLAG_CONN_COMPLETE | HCI_FLAG_CONNECT_EVENT);
+
897  hcibuf[0] = 0x05;
+
898  hcibuf[1] = 0x01 << 2; // HCI OGF = 1
+
899  hcibuf[2] = 0x0D; // parameter Total Length = 13
+
900  hcibuf[3] = disc_bdaddr[0]; // 6 octet bdaddr
+
901  hcibuf[4] = disc_bdaddr[1];
+
902  hcibuf[5] = disc_bdaddr[2];
+
903  hcibuf[6] = disc_bdaddr[3];
+
904  hcibuf[7] = disc_bdaddr[4];
+
905  hcibuf[8] = disc_bdaddr[5];
+
906  hcibuf[9] = 0x18; // DM1 or DH1 may be used
+
907  hcibuf[10] = 0xCC; // DM3, DH3, DM5, DH5 may be used
+
908  hcibuf[11] = 0x01; // Page repetition mode R1
+
909  hcibuf[12] = 0x00; // Reserved
+
910  hcibuf[13] = 0x00; // Clock offset
+
911  hcibuf[14] = 0x00; // Invalid clock offset
+
912  hcibuf[15] = 0x00; // Do not allow role switch
+
913 
+
914  HCI_Command(hcibuf, 16);
+
915 }
+
916 
+ +
918  hcibuf[0] = 0x0D; // HCI OCF = 0D
+
919  hcibuf[1] = 0x01 << 2; // HCI OGF = 1
+
920  hcibuf[2] = 0x17; // parameter length 23
+
921  hcibuf[3] = disc_bdaddr[0]; // 6 octet bdaddr
+
922  hcibuf[4] = disc_bdaddr[1];
+
923  hcibuf[5] = disc_bdaddr[2];
+
924  hcibuf[6] = disc_bdaddr[3];
+
925  hcibuf[7] = disc_bdaddr[4];
+
926  hcibuf[8] = disc_bdaddr[5];
+
927  if (pairWithWii && !wiiUProController) {
+
928  hcibuf[9] = 6; // Pin length is the length of the bt address
+
929  hcibuf[10] = disc_bdaddr[0]; // The pin is the Wiimotes bt address backwards
+
930  hcibuf[11] = disc_bdaddr[1];
+
931  hcibuf[12] = disc_bdaddr[2];
+
932  hcibuf[13] = disc_bdaddr[3];
+
933  hcibuf[14] = disc_bdaddr[4];
+
934  hcibuf[15] = disc_bdaddr[5];
+
935  for (uint8_t i = 16; i < 26; i++)
+
936  hcibuf[i] = 0x00; // The rest should be 0
+
937  } else if (pairWithWii && wiiUProController) {
+
938 #ifdef DEBUG
+
939  Notify(PSTR("\r\nParing with Wii U Pro Controller"), 0x80);
+
940 #endif
+
941  hcibuf[9] = 6; // Pin length is the length of the bt address
+
942  hcibuf[10] = my_bdaddr[0]; // The pin is the Bluetooth dongles bt address backwards
+
943  hcibuf[11] = my_bdaddr[1];
+
944  hcibuf[12] = my_bdaddr[2];
+
945  hcibuf[13] = my_bdaddr[3];
+
946  hcibuf[14] = my_bdaddr[4];
+
947  hcibuf[15] = my_bdaddr[5];
+
948  for (uint8_t i = 16; i < 26; i++)
+
949  hcibuf[i] = 0x00; // The rest should be 0
+
950  } else {
+
951  hcibuf[9] = strlen(btdPin); // Length of pin
+
952  uint8_t i;
+
953  for (i = 0; i < strlen(btdPin); i++) // The maximum size of the pin is 16
+
954  hcibuf[i + 10] = btdPin[i];
+
955  for (; i < 16; i++)
+
956  hcibuf[i + 10] = 0x00; // The rest should be 0
+
957  }
+
958 
+
959  HCI_Command(hcibuf, 26);
+
960 }
+
961 
+ +
963  hcibuf[0] = 0x0E; // HCI OCF = 0E
+
964  hcibuf[1] = 0x01 << 2; // HCI OGF = 1
+
965  hcibuf[2] = 0x06; // parameter length 6
+
966  hcibuf[3] = disc_bdaddr[0]; // 6 octet bdaddr
+
967  hcibuf[4] = disc_bdaddr[1];
+
968  hcibuf[5] = disc_bdaddr[2];
+
969  hcibuf[6] = disc_bdaddr[3];
+
970  hcibuf[7] = disc_bdaddr[4];
+
971  hcibuf[8] = disc_bdaddr[5];
+
972 
+
973  HCI_Command(hcibuf, 9);
+
974 }
+
975 
+ +
977  hcibuf[0] = 0x0C; // HCI OCF = 0C
+
978  hcibuf[1] = 0x01 << 2; // HCI OGF = 1
+
979  hcibuf[2] = 0x06; // parameter length 6
+
980  hcibuf[3] = disc_bdaddr[0]; // 6 octet bdaddr
+
981  hcibuf[4] = disc_bdaddr[1];
+
982  hcibuf[5] = disc_bdaddr[2];
+
983  hcibuf[6] = disc_bdaddr[3];
+
984  hcibuf[7] = disc_bdaddr[4];
+
985  hcibuf[8] = disc_bdaddr[5];
+
986 
+
987  HCI_Command(hcibuf, 9);
988 }
-
989 /*******************************************************************
-
990  * *
-
991  * HCI ACL Data Packet *
-
992  * *
-
993  * buf[0] buf[1] buf[2] buf[3]
-
994  * 0 4 8 11 12 16 24 31 MSB
-
995  * .-+-+-+-+-+-+-+-|-+-+-+-|-+-|-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-.
-
996  * | HCI Handle |PB |BC | Data Total Length | HCI ACL Data Packet
-
997  * .-+-+-+-+-+-+-+-|-+-+-+-|-+-|-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-.
-
998  *
-
999  * buf[4] buf[5] buf[6] buf[7]
-
1000  * 0 8 16 31 MSB
-
1001  * .-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-.
-
1002  * | Length | Channel ID | Basic L2CAP header
-
1003  * .-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-.
-
1004  *
-
1005  * buf[8] buf[9] buf[10] buf[11]
-
1006  * 0 8 16 31 MSB
-
1007  * .-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-.
-
1008  * | Code | Identifier | Length | Control frame (C-frame)
-
1009  * .-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-. (signaling packet format)
-
1010  */
-
1011 /************************************************************/
-
1012 /* L2CAP Commands */
-
1013 /************************************************************/
-
1014 void BTD::L2CAP_Command(uint16_t handle, uint8_t* data, uint8_t nbytes, uint8_t channelLow, uint8_t channelHigh) {
-
1015  uint8_t buf[8+nbytes];
-
1016  buf[0] = (uint8_t)(handle & 0xff); // HCI handle with PB,BC flag
-
1017  buf[1] = (uint8_t)(((handle >> 8) & 0x0f) | 0x20);
-
1018  buf[2] = (uint8_t)((4 + nbytes) & 0xff); // HCI ACL total data length
-
1019  buf[3] = (uint8_t)((4 + nbytes) >> 8);
-
1020  buf[4] = (uint8_t)(nbytes & 0xff); // L2CAP header: Length
-
1021  buf[5] = (uint8_t)(nbytes >> 8);
-
1022  buf[6] = channelLow;
-
1023  buf[7] = channelHigh;
-
1024 
-
1025  for (uint16_t i = 0; i < nbytes; i++) // L2CAP C-frame
-
1026  buf[8 + i] = data[i];
-
1027 
-
1028  uint8_t rcode = pUsb->outTransfer(bAddress, epInfo[ BTD_DATAOUT_PIPE ].epAddr, (8 + nbytes), buf);
-
1029  if(rcode) {
-
1030  delay(100); // This small delay prevents it from overflowing if it fails
-
1031 #ifdef DEBUG
-
1032  Notify(PSTR("\r\nError sending L2CAP message: 0x"));
-
1033  PrintHex<uint8_t>(rcode);
-
1034  Notify(PSTR(" - Channel ID: "));
-
1035  Serial.print(channelHigh);
-
1036  Notify(PSTR(" "));
-
1037  Serial.print(channelLow);
-
1038 #endif
-
1039  }
-
1040 }
-
1041 void BTD::l2cap_connection_request(uint16_t handle, uint8_t rxid, uint8_t* scid, uint16_t psm) {
-
1042  l2capoutbuf[0] = L2CAP_CMD_CONNECTION_REQUEST; // Code
-
1043  l2capoutbuf[1] = rxid; // Identifier
-
1044  l2capoutbuf[2] = 0x04; // Length
-
1045  l2capoutbuf[3] = 0x00;
-
1046  l2capoutbuf[4] = (uint8_t)(psm & 0xff); // PSM
-
1047  l2capoutbuf[5] = (uint8_t)(psm >> 8);
-
1048  l2capoutbuf[6] = scid[0]; // Source CID
-
1049  l2capoutbuf[7] = scid[1];
-
1050 
-
1051  L2CAP_Command(handle, l2capoutbuf, 8);
-
1052 }
-
1053 void BTD::l2cap_connection_response(uint16_t handle, uint8_t rxid, uint8_t* dcid, uint8_t* scid, uint8_t result) {
-
1054  l2capoutbuf[0] = L2CAP_CMD_CONNECTION_RESPONSE; // Code
-
1055  l2capoutbuf[1] = rxid; // Identifier
-
1056  l2capoutbuf[2] = 0x08; // Length
-
1057  l2capoutbuf[3] = 0x00;
-
1058  l2capoutbuf[4] = dcid[0]; // Destination CID
-
1059  l2capoutbuf[5] = dcid[1];
-
1060  l2capoutbuf[6] = scid[0]; // Source CID
-
1061  l2capoutbuf[7] = scid[1];
-
1062  l2capoutbuf[8] = result; // Result: Pending or Success
-
1063  l2capoutbuf[9] = 0x00;
-
1064  l2capoutbuf[10] = 0x00; // No further information
-
1065  l2capoutbuf[11] = 0x00;
-
1066 
-
1067  L2CAP_Command(handle, l2capoutbuf, 12);
-
1068 }
-
1069 void BTD::l2cap_config_request(uint16_t handle, uint8_t rxid, uint8_t* dcid) {
-
1070  l2capoutbuf[0] = L2CAP_CMD_CONFIG_REQUEST; // Code
-
1071  l2capoutbuf[1] = rxid; // Identifier
-
1072  l2capoutbuf[2] = 0x08; // Length
-
1073  l2capoutbuf[3] = 0x00;
-
1074  l2capoutbuf[4] = dcid[0]; // Destination CID
-
1075  l2capoutbuf[5] = dcid[1];
-
1076  l2capoutbuf[6] = 0x00; // Flags
-
1077  l2capoutbuf[7] = 0x00;
-
1078  l2capoutbuf[8] = 0x01; // Config Opt: type = MTU (Maximum Transmission Unit) - Hint
-
1079  l2capoutbuf[9] = 0x02; // Config Opt: length
-
1080  l2capoutbuf[10] = 0xFF; // MTU
-
1081  l2capoutbuf[11] = 0xFF;
-
1082 
-
1083  L2CAP_Command(handle, l2capoutbuf, 12);
-
1084 }
-
1085 void BTD::l2cap_config_response(uint16_t handle, uint8_t rxid, uint8_t* scid) {
-
1086  l2capoutbuf[0] = L2CAP_CMD_CONFIG_RESPONSE; // Code
-
1087  l2capoutbuf[1] = rxid; // Identifier
-
1088  l2capoutbuf[2] = 0x0A; // Length
-
1089  l2capoutbuf[3] = 0x00;
-
1090  l2capoutbuf[4] = scid[0]; // Source CID
-
1091  l2capoutbuf[5] = scid[1];
-
1092  l2capoutbuf[6] = 0x00; // Flag
-
1093  l2capoutbuf[7] = 0x00;
-
1094  l2capoutbuf[8] = 0x00; // Result
-
1095  l2capoutbuf[9] = 0x00;
-
1096  l2capoutbuf[10] = 0x01; // Config
-
1097  l2capoutbuf[11] = 0x02;
-
1098  l2capoutbuf[12] = 0xA0;
-
1099  l2capoutbuf[13] = 0x02;
-
1100 
-
1101  L2CAP_Command(handle, l2capoutbuf, 14);
-
1102 }
-
1103 void BTD::l2cap_disconnection_request(uint16_t handle, uint8_t rxid, uint8_t* dcid, uint8_t* scid) {
-
1104  l2capoutbuf[0] = L2CAP_CMD_DISCONNECT_REQUEST; // Code
-
1105  l2capoutbuf[1] = rxid; // Identifier
-
1106  l2capoutbuf[2] = 0x04; // Length
-
1107  l2capoutbuf[3] = 0x00;
-
1108  l2capoutbuf[4] = dcid[0];
-
1109  l2capoutbuf[5] = dcid[1];
-
1110  l2capoutbuf[6] = scid[0];
-
1111  l2capoutbuf[7] = scid[1];
-
1112  L2CAP_Command(handle, l2capoutbuf, 8);
-
1113 }
-
1114 void BTD::l2cap_disconnection_response(uint16_t handle, uint8_t rxid, uint8_t* dcid, uint8_t* scid) {
-
1115  l2capoutbuf[0] = L2CAP_CMD_DISCONNECT_RESPONSE; // Code
-
1116  l2capoutbuf[1] = rxid; // Identifier
-
1117  l2capoutbuf[2] = 0x04; // Length
-
1118  l2capoutbuf[3] = 0x00;
-
1119  l2capoutbuf[4] = dcid[0];
-
1120  l2capoutbuf[5] = dcid[1];
-
1121  l2capoutbuf[6] = scid[0];
-
1122  l2capoutbuf[7] = scid[1];
-
1123  L2CAP_Command(handle, l2capoutbuf, 8);
-
1124 }
-
1125 void BTD::l2cap_information_response(uint16_t handle, uint8_t rxid, uint8_t infoTypeLow, uint8_t infoTypeHigh) {
-
1126  l2capoutbuf[0] = L2CAP_CMD_INFORMATION_RESPONSE; // Code
-
1127  l2capoutbuf[1] = rxid; // Identifier
-
1128  l2capoutbuf[2] = 0x08; // Length
-
1129  l2capoutbuf[3] = 0x00;
-
1130  l2capoutbuf[4] = infoTypeLow;
-
1131  l2capoutbuf[5] = infoTypeHigh;
-
1132  l2capoutbuf[6] = 0x00; // Result = success
-
1133  l2capoutbuf[7] = 0x00; // Result = success
-
1134  l2capoutbuf[8] = 0x00;
-
1135  l2capoutbuf[9] = 0x00;
-
1136  l2capoutbuf[10] = 0x00;
-
1137  l2capoutbuf[11] = 0x00;
-
1138  L2CAP_Command(handle, l2capoutbuf, 12);
+
989 
+ +
991  hcibuf[0] = 0x11; // HCI OCF = 11
+
992  hcibuf[1] = 0x01 << 2; // HCI OGF = 1
+
993  hcibuf[2] = 0x02; // parameter length = 2
+
994  hcibuf[3] = (uint8_t)(hci_handle & 0xFF); //connection handle - low byte
+
995  hcibuf[4] = (uint8_t)((hci_handle >> 8) & 0x0F); //connection handle - high byte
+
996 
+
997  HCI_Command(hcibuf, 5);
+
998 }
+
999 
+
1000 void BTD::hci_disconnect(uint16_t handle) { // This is called by the different services
+
1001  hci_event_flag &= ~HCI_FLAG_DISCONN_COMPLETE;
+
1002  hcibuf[0] = 0x06; // HCI OCF = 6
+
1003  hcibuf[1] = 0x01 << 2; // HCI OGF = 1
+
1004  hcibuf[2] = 0x03; // parameter length = 3
+
1005  hcibuf[3] = (uint8_t)(handle & 0xFF); //connection handle - low byte
+
1006  hcibuf[4] = (uint8_t)((handle >> 8) & 0x0F); //connection handle - high byte
+
1007  hcibuf[5] = 0x13; // reason
+
1008 
+
1009  HCI_Command(hcibuf, 6);
+
1010 }
+
1011 
+
1012 void BTD::hci_write_class_of_device() { // See http://bluetooth-pentest.narod.ru/software/bluetooth_class_of_device-service_generator.html
+
1013  hcibuf[0] = 0x24; // HCI OCF = 3
+
1014  hcibuf[1] = 0x03 << 2; // HCI OGF = 3
+
1015  hcibuf[2] = 0x03; // parameter length = 3
+
1016  hcibuf[3] = 0x04; // Robot
+
1017  hcibuf[4] = 0x08; // Toy
+
1018  hcibuf[5] = 0x00;
+
1019  HCI_Command(hcibuf, 6);
+
1020 }
+
1021 /*******************************************************************
+
1022  * *
+
1023  * HCI ACL Data Packet *
+
1024  * *
+
1025  * buf[0] buf[1] buf[2] buf[3]
+
1026  * 0 4 8 11 12 16 24 31 MSB
+
1027  * .-+-+-+-+-+-+-+-|-+-+-+-|-+-|-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-.
+
1028  * | HCI Handle |PB |BC | Data Total Length | HCI ACL Data Packet
+
1029  * .-+-+-+-+-+-+-+-|-+-+-+-|-+-|-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-.
+
1030  *
+
1031  * buf[4] buf[5] buf[6] buf[7]
+
1032  * 0 8 16 31 MSB
+
1033  * .-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-.
+
1034  * | Length | Channel ID | Basic L2CAP header
+
1035  * .-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-.
+
1036  *
+
1037  * buf[8] buf[9] buf[10] buf[11]
+
1038  * 0 8 16 31 MSB
+
1039  * .-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-.
+
1040  * | Code | Identifier | Length | Control frame (C-frame)
+
1041  * .-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-. (signaling packet format)
+
1042  */
+
1043 /************************************************************/
+
1044 /* L2CAP Commands */
+
1045 
+
1046 /************************************************************/
+
1047 void BTD::L2CAP_Command(uint16_t handle, uint8_t* data, uint8_t nbytes, uint8_t channelLow, uint8_t channelHigh) {
+
1048  uint8_t buf[8 + nbytes];
+
1049  buf[0] = (uint8_t)(handle & 0xff); // HCI handle with PB,BC flag
+
1050  buf[1] = (uint8_t)(((handle >> 8) & 0x0f) | 0x20);
+
1051  buf[2] = (uint8_t)((4 + nbytes) & 0xff); // HCI ACL total data length
+
1052  buf[3] = (uint8_t)((4 + nbytes) >> 8);
+
1053  buf[4] = (uint8_t)(nbytes & 0xff); // L2CAP header: Length
+
1054  buf[5] = (uint8_t)(nbytes >> 8);
+
1055  buf[6] = channelLow;
+
1056  buf[7] = channelHigh;
+
1057 
+
1058  for (uint16_t i = 0; i < nbytes; i++) // L2CAP C-frame
+
1059  buf[8 + i] = data[i];
+
1060 
+
1061  uint8_t rcode = pUsb->outTransfer(bAddress, epInfo[ BTD_DATAOUT_PIPE ].epAddr, (8 + nbytes), buf);
+
1062  if (rcode) {
+
1063  delay(100); // This small delay prevents it from overflowing if it fails
+
1064 #ifdef DEBUG
+
1065  Notify(PSTR("\r\nError sending L2CAP message: 0x"), 0x80);
+
1066  PrintHex<uint8_t > (rcode, 0x80);
+
1067  Notify(PSTR(" - Channel ID: "), 0x80);
+
1068  Serial.print(channelHigh);
+
1069  Notify(PSTR(" "), 0x80);
+
1070  Serial.print(channelLow);
+
1071 #endif
+
1072  }
+
1073 }
+
1074 
+
1075 void BTD::l2cap_connection_request(uint16_t handle, uint8_t rxid, uint8_t* scid, uint16_t psm) {
+
1076  l2capoutbuf[0] = L2CAP_CMD_CONNECTION_REQUEST; // Code
+
1077  l2capoutbuf[1] = rxid; // Identifier
+
1078  l2capoutbuf[2] = 0x04; // Length
+
1079  l2capoutbuf[3] = 0x00;
+
1080  l2capoutbuf[4] = (uint8_t)(psm & 0xff); // PSM
+
1081  l2capoutbuf[5] = (uint8_t)(psm >> 8);
+
1082  l2capoutbuf[6] = scid[0]; // Source CID
+
1083  l2capoutbuf[7] = scid[1];
+
1084 
+
1085  L2CAP_Command(handle, l2capoutbuf, 8);
+
1086 }
+
1087 
+
1088 void BTD::l2cap_connection_response(uint16_t handle, uint8_t rxid, uint8_t* dcid, uint8_t* scid, uint8_t result) {
+
1089  l2capoutbuf[0] = L2CAP_CMD_CONNECTION_RESPONSE; // Code
+
1090  l2capoutbuf[1] = rxid; // Identifier
+
1091  l2capoutbuf[2] = 0x08; // Length
+
1092  l2capoutbuf[3] = 0x00;
+
1093  l2capoutbuf[4] = dcid[0]; // Destination CID
+
1094  l2capoutbuf[5] = dcid[1];
+
1095  l2capoutbuf[6] = scid[0]; // Source CID
+
1096  l2capoutbuf[7] = scid[1];
+
1097  l2capoutbuf[8] = result; // Result: Pending or Success
+
1098  l2capoutbuf[9] = 0x00;
+
1099  l2capoutbuf[10] = 0x00; // No further information
+
1100  l2capoutbuf[11] = 0x00;
+
1101 
+
1102  L2CAP_Command(handle, l2capoutbuf, 12);
+
1103 }
+
1104 
+
1105 void BTD::l2cap_config_request(uint16_t handle, uint8_t rxid, uint8_t* dcid) {
+
1106  l2capoutbuf[0] = L2CAP_CMD_CONFIG_REQUEST; // Code
+
1107  l2capoutbuf[1] = rxid; // Identifier
+
1108  l2capoutbuf[2] = 0x08; // Length
+
1109  l2capoutbuf[3] = 0x00;
+
1110  l2capoutbuf[4] = dcid[0]; // Destination CID
+
1111  l2capoutbuf[5] = dcid[1];
+
1112  l2capoutbuf[6] = 0x00; // Flags
+
1113  l2capoutbuf[7] = 0x00;
+
1114  l2capoutbuf[8] = 0x01; // Config Opt: type = MTU (Maximum Transmission Unit) - Hint
+
1115  l2capoutbuf[9] = 0x02; // Config Opt: length
+
1116  l2capoutbuf[10] = 0xFF; // MTU
+
1117  l2capoutbuf[11] = 0xFF;
+
1118 
+
1119  L2CAP_Command(handle, l2capoutbuf, 12);
+
1120 }
+
1121 
+
1122 void BTD::l2cap_config_response(uint16_t handle, uint8_t rxid, uint8_t* scid) {
+
1123  l2capoutbuf[0] = L2CAP_CMD_CONFIG_RESPONSE; // Code
+
1124  l2capoutbuf[1] = rxid; // Identifier
+
1125  l2capoutbuf[2] = 0x0A; // Length
+
1126  l2capoutbuf[3] = 0x00;
+
1127  l2capoutbuf[4] = scid[0]; // Source CID
+
1128  l2capoutbuf[5] = scid[1];
+
1129  l2capoutbuf[6] = 0x00; // Flag
+
1130  l2capoutbuf[7] = 0x00;
+
1131  l2capoutbuf[8] = 0x00; // Result
+
1132  l2capoutbuf[9] = 0x00;
+
1133  l2capoutbuf[10] = 0x01; // Config
+
1134  l2capoutbuf[11] = 0x02;
+
1135  l2capoutbuf[12] = 0xA0;
+
1136  l2capoutbuf[13] = 0x02;
+
1137 
+
1138  L2CAP_Command(handle, l2capoutbuf, 14);
1139 }
1140 
-
1141 /* PS3 Commands - only set Bluetooth address is implemented */
-
1142 void BTD::setBdaddr(uint8_t* BDADDR) {
-
1143  /* Set the internal bluetooth address */
-
1144  uint8_t buf[8];
-
1145  buf[0] = 0x01;
-
1146  buf[1] = 0x00;
-
1147  for (uint8_t i = 0; i < 6; i++)
-
1148  buf[i+2] = BDADDR[5 - i];//Copy into buffer, has to be written reversed
-
1149 
-
1150  //bmRequest = Host to device (0x00) | Class (0x20) | Interface (0x01) = 0x21, bRequest = Set Report (0x09), Report ID (0xF5), Report Type (Feature 0x03), interface (0x00), datalength, datalength, data)
-
1151  pUsb->ctrlReq(bAddress,epInfo[BTD_CONTROL_PIPE].epAddr, bmREQ_HID_OUT, HID_REQUEST_SET_REPORT, 0xF5, 0x03, 0x00, 8, 8, buf, NULL);
-
1152 #ifdef DEBUG
-
1153  Notify(PSTR("\r\nBluetooth Address was set to: "));
-
1154  for(int8_t i = 5; i > 0; i--) {
-
1155  PrintHex<uint8_t>(my_bdaddr[i]);
-
1156  Notify(PSTR(":"));
-
1157  }
-
1158  PrintHex<uint8_t>(my_bdaddr[0]);
-
1159 #endif
-
1160 }
-
1161 void BTD::setMoveBdaddr(uint8_t* BDADDR) {
-
1162  /* Set the internal bluetooth address */
-
1163  uint8_t buf[11];
-
1164  buf[0] = 0x05;
-
1165  buf[7] = 0x10;
-
1166  buf[8] = 0x01;
-
1167  buf[9] = 0x02;
-
1168  buf[10] = 0x12;
-
1169 
-
1170  for (uint8_t i = 0; i < 6; i++)
-
1171  buf[i + 1] = BDADDR[i];
-
1172 
-
1173  //bmRequest = Host to device (0x00) | Class (0x20) | Interface (0x01) = 0x21, bRequest = Set Report (0x09), Report ID (0x05), Report Type (Feature 0x03), interface (0x00), datalength, datalength, data)
-
1174  pUsb->ctrlReq(bAddress,epInfo[BTD_CONTROL_PIPE].epAddr, bmREQ_HID_OUT, HID_REQUEST_SET_REPORT, 0x05, 0x03, 0x00,11,11, buf, NULL);
-
1175 #ifdef DEBUG
-
1176  Notify(PSTR("\r\nBluetooth Address was set to: "));
-
1177  for(int8_t i = 5; i > 0; i--) {
-
1178  PrintHex<uint8_t>(my_bdaddr[i]);
-
1179  Notify(PSTR(":"));
-
1180  }
-
1181  PrintHex<uint8_t>(my_bdaddr[0]);
-
1182 #endif
-
1183 }
+
1141 void BTD::l2cap_disconnection_request(uint16_t handle, uint8_t rxid, uint8_t* dcid, uint8_t* scid) {
+
1142  l2capoutbuf[0] = L2CAP_CMD_DISCONNECT_REQUEST; // Code
+
1143  l2capoutbuf[1] = rxid; // Identifier
+
1144  l2capoutbuf[2] = 0x04; // Length
+
1145  l2capoutbuf[3] = 0x00;
+
1146  l2capoutbuf[4] = dcid[0];
+
1147  l2capoutbuf[5] = dcid[1];
+
1148  l2capoutbuf[6] = scid[0];
+
1149  l2capoutbuf[7] = scid[1];
+
1150  L2CAP_Command(handle, l2capoutbuf, 8);
+
1151 }
+
1152 
+
1153 void BTD::l2cap_disconnection_response(uint16_t handle, uint8_t rxid, uint8_t* dcid, uint8_t* scid) {
+
1154  l2capoutbuf[0] = L2CAP_CMD_DISCONNECT_RESPONSE; // Code
+
1155  l2capoutbuf[1] = rxid; // Identifier
+
1156  l2capoutbuf[2] = 0x04; // Length
+
1157  l2capoutbuf[3] = 0x00;
+
1158  l2capoutbuf[4] = dcid[0];
+
1159  l2capoutbuf[5] = dcid[1];
+
1160  l2capoutbuf[6] = scid[0];
+
1161  l2capoutbuf[7] = scid[1];
+
1162  L2CAP_Command(handle, l2capoutbuf, 8);
+
1163 }
+
1164 
+
1165 void BTD::l2cap_information_response(uint16_t handle, uint8_t rxid, uint8_t infoTypeLow, uint8_t infoTypeHigh) {
+
1166  l2capoutbuf[0] = L2CAP_CMD_INFORMATION_RESPONSE; // Code
+
1167  l2capoutbuf[1] = rxid; // Identifier
+
1168  l2capoutbuf[2] = 0x08; // Length
+
1169  l2capoutbuf[3] = 0x00;
+
1170  l2capoutbuf[4] = infoTypeLow;
+
1171  l2capoutbuf[5] = infoTypeHigh;
+
1172  l2capoutbuf[6] = 0x00; // Result = success
+
1173  l2capoutbuf[7] = 0x00; // Result = success
+
1174  l2capoutbuf[8] = 0x00;
+
1175  l2capoutbuf[9] = 0x00;
+
1176  l2capoutbuf[10] = 0x00;
+
1177  l2capoutbuf[11] = 0x00;
+
1178  L2CAP_Command(handle, l2capoutbuf, 12);
+
1179 }
+
1180 
+
1181 /* PS3 Commands - only set Bluetooth address is implemented */
+
1182 void BTD::setBdaddr(uint8_t* BDADDR) {
+
1183  /* Set the internal bluetooth address */
+
1184  uint8_t buf[8];
+
1185  buf[0] = 0x01;
+
1186  buf[1] = 0x00;
+
1187  for (uint8_t i = 0; i < 6; i++)
+
1188  buf[i + 2] = BDADDR[5 - i]; //Copy into buffer, has to be written reversed
+
1189 
+
1190  //bmRequest = Host to device (0x00) | Class (0x20) | Interface (0x01) = 0x21, bRequest = Set Report (0x09), Report ID (0xF5), Report Type (Feature 0x03), interface (0x00), datalength, datalength, data)
+
1191  pUsb->ctrlReq(bAddress, epInfo[BTD_CONTROL_PIPE].epAddr, bmREQ_HID_OUT, HID_REQUEST_SET_REPORT, 0xF5, 0x03, 0x00, 8, 8, buf, NULL);
+
1192 #ifdef DEBUG
+
1193  Notify(PSTR("\r\nBluetooth Address was set to: "), 0x80);
+
1194  for (int8_t i = 5; i > 0; i--) {
+
1195  PrintHex<uint8_t > (my_bdaddr[i], 0x80);
+
1196  Notify(PSTR(":"), 0x80);
+
1197  }
+
1198  PrintHex<uint8_t > (my_bdaddr[0], 0x80);
+
1199 #endif
+
1200 }
+
1201 
+
1202 void BTD::setMoveBdaddr(uint8_t* BDADDR) {
+
1203  /* Set the internal bluetooth address */
+
1204  uint8_t buf[11];
+
1205  buf[0] = 0x05;
+
1206  buf[7] = 0x10;
+
1207  buf[8] = 0x01;
+
1208  buf[9] = 0x02;
+
1209  buf[10] = 0x12;
+
1210 
+
1211  for (uint8_t i = 0; i < 6; i++)
+
1212  buf[i + 1] = BDADDR[i];
+
1213 
+
1214  //bmRequest = Host to device (0x00) | Class (0x20) | Interface (0x01) = 0x21, bRequest = Set Report (0x09), Report ID (0x05), Report Type (Feature 0x03), interface (0x00), datalength, datalength, data)
+
1215  pUsb->ctrlReq(bAddress, epInfo[BTD_CONTROL_PIPE].epAddr, bmREQ_HID_OUT, HID_REQUEST_SET_REPORT, 0x05, 0x03, 0x00, 11, 11, buf, NULL);
+
1216 #ifdef DEBUG
+
1217  Notify(PSTR("\r\nBluetooth Address was set to: "), 0x80);
+
1218  for (int8_t i = 5; i > 0; i--) {
+
1219  PrintHex<uint8_t > (my_bdaddr[i], 0x80);
+
1220  Notify(PSTR(":"), 0x80);
+
1221  }
+
1222  PrintHex<uint8_t > (my_bdaddr[0], 0x80);
+
1223 #endif
+
1224 }